; generated by the Finch compiler written in Finch %S.main.Loader = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 } } %S.lexer.Token = type { { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64, i1 } %S.lexer.Lexer = type { { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64, i64, i1 } %S.ast.Type = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i64 } %S.ast.Node = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, %S.ast.Type, i1, i1, i1, { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64, i64, i64 } %S.ast.Program = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 } } %S.parser.Parser = type { { ptr, i64, i64 }, i64, i64, i64, { ptr, i64, i64 } } %S.gen.Var = type { { ptr, i64, i64 }, %S.ast.Type, { ptr, i64, i64 }, i1, i64, { ptr, i64, i64 }, i64, i64 } %S.platform.Target = type { { ptr, i64, i64 }, i1, i1, i1, i1, i1, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 } } %S.gen.Options = type { i1, i1, i1, { ptr, i64, i64 }, %S.platform.Target } %S.gen.Template = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64, i1, i1 } %S.gen.Binds = type { { ptr, i64, i64 }, { ptr, i64, i64 } } %S.gen.EnumDef = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 } } %S.gen.Scope = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 } } %S.gen.Loop = type { { ptr, i64, i64 }, { ptr, i64, i64 }, i64 } %S.gen.FnSig = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i1, i1, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i1, i1, { ptr, i64, i64 }, %S.ast.Type, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64 } %S.gen.StructDef = type { { ptr, i64, i64 }, { ptr, i64, i64 }, i1, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64, { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64, i64, i1 } %S.gen.Val = type { { ptr, i64, i64 }, %S.ast.Type, i1, i1 } %S.gen.Place = type { { ptr, i64, i64 }, %S.ast.Type } %S.gen.Ref = type { i1, %S.gen.Place, %S.gen.Val } %S.cimport.CImports = type { { ptr, i64, i64, i64, ptr, i64, i64 }, { ptr, i64, i64, i64, ptr, i64, i64 }, { ptr, i64, i64, i64, ptr, i64, i64 }, { ptr, i64, i64, i64, ptr, i64, i64 }, { ptr, i64, i64 } } %S.gen.Gen = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64, i64, i1, { ptr, i64, i64 }, { ptr, i64, i64 }, %S.gen.FnSig, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i64, %S.cimport.CImports, i1, i1, { ptr, i64, i64 }, i1, %S.platform.Target, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64, i64, ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64, i64, i64, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i1, i64, i64 } %S.gen.Saved = type { { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i1, i64 } %S.gen.SizeAlign = type { i64, i64 } %S.gen.Fallible = type { %S.gen.Val, { ptr, i64, i64 }, { ptr, i64, i64 } } %S.gen.Abi = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i64 } %S.gen.Leaf = type { i64, i64, i1, i1 } %S.gen.Plan = type { %S.gen.Abi, { ptr, i64, i64 }, { ptr, i64, i64 }, i1 } %S.docs.Doc = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 } } %S.cimport.CFunc = type { { ptr, i64, i64 }, { ptr, i64, i64 }, %S.ast.Type, { ptr, i64, i64 }, i1, { ptr, i64, i64 } } %S.cimport.CConst = type { i1, i64, double, { ptr, i64, i64 } } %S.cimport.CField = type { { ptr, i64, i64 }, %S.ast.Type, i64, i64, i64, i1 } %S.cimport.CStruct = type { { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64, { ptr, i64, i64 }, i1 } %S.cimport.Header = type { { ptr, i64, i64 }, { ptr, i64, i64 } } %S.cimport.Mapped = type { %S.ast.Type, { ptr, i64, i64 }, i1 } %S.cimport.Importer = type { %S.cimport.CImports, ptr, { ptr, i64, i64 }, { ptr, i64, i64, i64, ptr, i64, i64 }, { ptr, i64, i64, i64, ptr, i64, i64 }, i64 } %S.cimport.FieldCtx = type { ptr, ptr } %S.cimport.Number = type { %S.cimport.CConst, i1 } %S.linker.Names = type { { ptr, i64, i64 } } %S.linker.Build = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i1, { ptr, i64, i64 } } %S.lsp.Ref = type { { ptr, i64, i64 }, i64, i64, i64, { ptr, i64, i64 }, i64, i64, { ptr, i64, i64 } } %S.lsp.VarRec = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64, { ptr, i64, i64 }, i64, i64 } %S.lsp.FnRec = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64, i64, { ptr, i64, i64 }, { ptr, i64, i64 } } %S.lsp.StructRec = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64, { ptr, i64, i64 }, { ptr, i64, i64 } } %S.lsp.EnumRec = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64, { ptr, i64, i64 } } %S.lsp.Diag = type { i1, { ptr, i64, i64 }, i64, i64, { ptr, i64, i64 } } %S.lsp.Analysis = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, %S.lsp.Diag } %S.lsp.Server = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64, i64, ptr, i64, i64 }, { ptr, i64, i64, i64, ptr, i64, i64 }, { ptr, i64, i64, i64, ptr, i64, i64 }, { ptr, i64, i64 }, i1 } %S.lsp.Names = type { { ptr, i64, i64 } } %S.json.Json = type { i32, i1, double, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 } } %S.json.Writer = type { { ptr, i64, i64 } } %S.json.Reader = type { { ptr, i64, i64 }, i64 } %S.C.fd_set = type { [16 x i64] } %S.C.timeval = type { i64, i64 } %S.C.timespec = type { i64, i64 } %S.C.sigset_t = type { [16 x i64] } %S.C.random_data = type { ptr, ptr, ptr, i32, i32, i32, [4 x i8], ptr } %S.C.drand48_data = type { [3 x i16], [3 x i16], i16, i16, i64 } %S.C.div_t = type { i32, i32 } %S.C.ldiv_t = type { i64, i64 } %S.C.lldiv_t = type { i64, i64 } %S.C.CXString = type { ptr, i32, [4 x i8] } %S.C.CXStringSet = type { ptr, i32, [4 x i8] } %S.C.tm = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, [4 x i8], i64, ptr } %S.C.__locale_struct = type { [13 x ptr], ptr, ptr, ptr, [13 x ptr] } %S.C.itimerspec = type { %S.C.timespec, %S.C.timespec } %S.C.CXFileUniqueID = type { [3 x i64] } %S.C.CXSourceLocation = type { [2 x ptr], i32, [4 x i8] } %S.C.CXSourceRange = type { [2 x ptr], i32, i32 } %S.C.CXSourceRangeList = type { i32, [4 x i8], ptr } %S.C.CXIndexOptions = type { i32, i8, i8, [2 x i8], ptr, ptr } %S.C.CXUnsavedFile = type { ptr, ptr, i64 } %S.C.CXTUResourceUsageEntry = type { i32, [4 x i8], i64 } %S.C.CXTUResourceUsage = type { ptr, i32, [4 x i8], ptr } %S.C.CXCursor = type { i32, i32, [3 x ptr] } %S.C.CXVersion = type { i32, i32, i32 } %S.C.CXPlatformAvailability = type { %S.C.CXString, %S.C.CXVersion, %S.C.CXVersion, %S.C.CXVersion, i32, %S.C.CXString } %S.C.CXType = type { i32, [4 x i8], [2 x ptr] } %S.C.CXToken = type { [4 x i32], ptr } %S.C.CXCompletionResult = type { i32, [4 x i8], ptr } %S.C.CXCodeCompleteResults = type { ptr, i32, [4 x i8] } %S.C.CXCursorAndRangeVisitor = type { ptr, ptr } %S.C.CXIdxLoc = type { [2 x ptr], i32, [4 x i8] } %S.C.CXIdxAttrInfo = type { i32, [4 x i8], %S.C.CXCursor, %S.C.CXIdxLoc } %S.C.CXIdxEntityInfo = type { i32, i32, i32, [4 x i8], ptr, ptr, %S.C.CXCursor, ptr, i32, [4 x i8] } %S.C.CXIdxContainerInfo = type { %S.C.CXCursor } %S.C.CXIdxDeclInfo = type { ptr, %S.C.CXCursor, %S.C.CXIdxLoc, ptr, ptr, i32, i32, i32, [4 x i8], ptr, i32, [4 x i8], ptr, i32, i32 } %S.C.CXIdxObjCContainerDeclInfo = type { ptr, i32, [4 x i8] } %S.C.CXIdxBaseClassInfo = type { ptr, %S.C.CXCursor, %S.C.CXIdxLoc } %S.C.CXIdxObjCProtocolRefInfo = type { ptr, %S.C.CXCursor, %S.C.CXIdxLoc } %S.C.CXIdxObjCProtocolRefListInfo = type { ptr, i32, [4 x i8] } %S.C.CXIdxObjCInterfaceDeclInfo = type { ptr, ptr, ptr } %S.C.CXIdxObjCCategoryDeclInfo = type { ptr, ptr, %S.C.CXCursor, %S.C.CXIdxLoc, ptr } %S.C.CXIdxObjCPropertyDeclInfo = type { ptr, ptr, ptr } %S.C.CXIdxIBOutletCollectionAttrInfo = type { ptr, ptr, %S.C.CXCursor, %S.C.CXIdxLoc } %S.C.CXIdxCXXClassDeclInfo = type { ptr, ptr, i32, [4 x i8] } %S.C.IndexerCallbacks = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr } %S.C.FILE = type { i32, [4 x i8], ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, [3 x i8], [1 x i8], i64, i16, i8, [1 x i8], [4 x i8], ptr, i64, ptr, ptr, ptr, ptr, ptr, i32, i32, i64, [8 x i8] } %S.C.cookie_io_functions_t = type { ptr, ptr, ptr, ptr } %S.C.__va_list_tag = type { i32, i32, ptr, ptr } %S.C.__mbstate_t = type { i32, [4 x i8] } %S.C.fpos_t = type { i64, %S.C.__mbstate_t } @.str.1 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.2 = private unnamed_addr constant [2 x i8] c".\00" @.str.3 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.4 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.5 = private unnamed_addr constant [2 x i8] c".\00" @.str.6 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.7 = private unnamed_addr constant [3 x i8] c"./\00" @.str.8 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.9 = private unnamed_addr constant [2 x i8] c".\00" @.str.10 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.11 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.12 = private unnamed_addr constant [37 x i8] c"used .overlayPaths on a null pointer\00" @.str.13 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.14 = private unnamed_addr constant [37 x i8] c"used .overlayFiles on a null pointer\00" @.str.15 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.16 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.17 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.18 = private unnamed_addr constant [2 x i8] c"/\00" @.str.19 = private unnamed_addr constant [5 x i8] c".fch\00" @.str.20 = private unnamed_addr constant [2 x i8] c"/\00" @.str.21 = private unnamed_addr constant [2 x i8] c"_\00" @.str.22 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.23 = private unnamed_addr constant [27 x i8] c"used .os on a null pointer\00" @.str.24 = private unnamed_addr constant [5 x i8] c".fch\00" @.str.25 = private unnamed_addr constant [2 x i8] c"/\00" @.str.26 = private unnamed_addr constant [2 x i8] c"_\00" @.str.27 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.28 = private unnamed_addr constant [27 x i8] c"used .os on a null pointer\00" @.str.29 = private unnamed_addr constant [5 x i8] c".fch\00" @.str.30 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.31 = private unnamed_addr constant [30 x i8] c"used .paths on a null pointer\00" @.str.32 = private unnamed_addr constant [2 x i8] c"/\00" @.str.33 = private unnamed_addr constant [2 x i8] c"_\00" @.str.34 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.35 = private unnamed_addr constant [27 x i8] c"used .os on a null pointer\00" @.str.36 = private unnamed_addr constant [5 x i8] c".fch\00" @.str.37 = private unnamed_addr constant [2 x i8] c"/\00" @.str.38 = private unnamed_addr constant [2 x i8] c"_\00" @.str.39 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.40 = private unnamed_addr constant [27 x i8] c"used .os on a null pointer\00" @.str.41 = private unnamed_addr constant [5 x i8] c".fch\00" @.str.42 = private unnamed_addr constant [2 x i8] c"/\00" @.str.43 = private unnamed_addr constant [5 x i8] c".fch\00" @.str.44 = private unnamed_addr constant [2 x i8] c"/\00" @.str.45 = private unnamed_addr constant [5 x i8] c".fch\00" @.str.46 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.47 = private unnamed_addr constant [28 x i8] c"used .std on a null pointer\00" @.str.48 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.49 = private unnamed_addr constant [28 x i8] c"used .std on a null pointer\00" @.str.50 = private unnamed_addr constant [2 x i8] c"/\00" @.str.51 = private unnamed_addr constant [2 x i8] c"_\00" @.str.52 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.53 = private unnamed_addr constant [27 x i8] c"used .os on a null pointer\00" @.str.54 = private unnamed_addr constant [5 x i8] c".fch\00" @.str.55 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.56 = private unnamed_addr constant [28 x i8] c"used .std on a null pointer\00" @.str.57 = private unnamed_addr constant [2 x i8] c"/\00" @.str.58 = private unnamed_addr constant [2 x i8] c"_\00" @.str.59 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.60 = private unnamed_addr constant [27 x i8] c"used .os on a null pointer\00" @.str.61 = private unnamed_addr constant [5 x i8] c".fch\00" @.str.62 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.63 = private unnamed_addr constant [28 x i8] c"used .std on a null pointer\00" @.str.64 = private unnamed_addr constant [2 x i8] c"/\00" @.str.65 = private unnamed_addr constant [5 x i8] c".fch\00" @.str.66 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.67 = private unnamed_addr constant [28 x i8] c"used .std on a null pointer\00" @.str.68 = private unnamed_addr constant [2 x i8] c"/\00" @.str.69 = private unnamed_addr constant [5 x i8] c".fch\00" @.str.70 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.71 = private unnamed_addr constant [37 x i8] c"used .overlayPaths on a null pointer\00" @.str.72 = private unnamed_addr constant [31 x i8] c"error: can't find the module '\00" @.str.73 = private unnamed_addr constant [15 x i8] c"' (looked for \00" @.str.74 = private unnamed_addr constant [2 x i8] c")\00" @.str.75 = private unnamed_addr constant [1 x i8] c"\00" @.str.76 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.77 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.78 = private unnamed_addr constant [20 x i8] c"error: can't open '\00" @.str.79 = private unnamed_addr constant [2 x i8] c"'\00" @.str.80 = private unnamed_addr constant [1 x i8] c"\00" @.str.81 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.82 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.83 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.84 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" @.str.85 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.86 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" @.str.87 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.88 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.89 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.90 = private unnamed_addr constant [31 x i8] c"used .loaded on a null pointer\00" @.str.91 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.92 = private unnamed_addr constant [31 x i8] c"used .loaded on a null pointer\00" @.str.93 = private unnamed_addr constant [42 x i8] c"Finch -- the compiler is written in Finch\00" @.str.94 = private unnamed_addr constant [1 x i8] c"\00" @.str.95 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.96 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.97 = private unnamed_addr constant [7 x i8] c"usage:\00" @.str.98 = private unnamed_addr constant [1 x i8] c"\00" @.str.99 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.100 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.101 = private unnamed_addr constant [61 x i8] c" finch run [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 [13 x i8] c"src/main.fch\00" @.str.146 = private unnamed_addr constant [8 x i8] c"version\00" @.str.147 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.148 = private unnamed_addr constant [10 x i8] c"--version\00" @.str.149 = private unnamed_addr constant [47 x i8] c"Finch 2.4.0 (the compiler is written in Finch)\00" @.str.150 = private unnamed_addr constant [1 x i8] c"\00" @.str.151 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.152 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.153 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.154 = private unnamed_addr constant [4 x i8] c"lsp\00" @.str.155 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.156 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.157 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.158 = private unnamed_addr constant [6 x i8] c"build\00" @.str.159 = private unnamed_addr constant [4 x i8] c"run\00" @.str.160 = private unnamed_addr constant [3 x i8] c"ir\00" @.str.161 = private unnamed_addr constant [6 x i8] c"index\00" @.str.162 = private unnamed_addr constant [1 x i8] c"\00" @.str.163 = private unnamed_addr constant [4 x i8] c"-O2\00" @.str.164 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.165 = private unnamed_addr constant [4 x i8] c"run\00" @.str.166 = private unnamed_addr constant [3 x i8] c"-o\00" @.str.167 = private unnamed_addr constant [6 x i8] c"build\00" @.str.168 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.169 = private unnamed_addr constant [9 x i8] c"--shared\00" @.str.170 = private unnamed_addr constant [6 x i8] c"build\00" @.str.171 = private unnamed_addr constant [4 x i8] c"-O0\00" @.str.172 = private unnamed_addr constant [4 x i8] c"-O0\00" @.str.173 = private unnamed_addr constant [3 x i8] c"-l\00" @.str.174 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.175 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.176 = private unnamed_addr constant [3 x i8] c"-l\00" @.str.177 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.178 = private unnamed_addr constant [3 x i8] c"-I\00" @.str.179 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.180 = private unnamed_addr constant [10 x i8] c"--overlay\00" @.str.181 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.182 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.183 = private unnamed_addr constant [2 x i8] c"=\00" @.str.184 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.185 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.186 = private unnamed_addr constant [3 x i8] c"-g\00" @.str.187 = private unnamed_addr constant [9 x i8] c"--target\00" @.str.188 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.189 = private unnamed_addr constant [4 x i8] c"run\00" @.str.190 = private unnamed_addr constant [4 x i8] c"run\00" @.str.191 = private unnamed_addr constant [16 x i8] c"/tmp/finch_run_\00" @.str.192 = private unnamed_addr constant [5 x i8] c".dll\00" @.str.193 = private unnamed_addr constant [4 x i8] c"lib\00" @.str.194 = private unnamed_addr constant [7 x i8] c".dylib\00" @.str.195 = private unnamed_addr constant [4 x i8] c"lib\00" @.str.196 = private unnamed_addr constant [4 x i8] c".so\00" @.str.197 = private unnamed_addr constant [6 x i8] c"linux\00" @.str.198 = private unnamed_addr constant [8 x i8] c"windows\00" @.str.199 = private unnamed_addr constant [6 x i8] c"macos\00" @.str.200 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.201 = private unnamed_addr constant [8 x i8] c"/../std\00" @.str.202 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.203 = private unnamed_addr constant [5 x i8] c"/std\00" @.str.204 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.205 = private unnamed_addr constant [20 x i8] c"/../share/finch/std\00" @.str.206 = private unnamed_addr constant [4 x i8] c"std\00" @.str.207 = private unnamed_addr constant [10 x i8] c"/path.fch\00" @.str.208 = private unnamed_addr constant [11 x i8] c"FINCH_PATH\00" @.str.209 = private unnamed_addr constant [1 x i8] c"\00" declare ptr @getenv(ptr) @.str.210 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.211 = private unnamed_addr constant [2 x i8] c":\00" @.str.212 = private unnamed_addr constant [1 x i8] c"\00" @.str.213 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.214 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.215 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.216 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.217 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.218 = private unnamed_addr constant [3 x i8] c".c\00" @.str.219 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.220 = private unnamed_addr constant [3 x i8] c".o\00" @.str.221 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.222 = private unnamed_addr constant [3 x i8] c".a\00" @.str.223 = private unnamed_addr constant [2 x i8] c"/\00" @.str.224 = private unnamed_addr constant [1 x i8] c"\00" @.str.225 = private unnamed_addr constant [1 x i8] c"\00" @.str.226 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.227 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.228 = private unnamed_addr constant [6 x i8] c"index\00" @.str.229 = private unnamed_addr constant [4 x i8] c"PWD\00" @.str.230 = private unnamed_addr constant [1 x i8] c"\00" @.str.231 = private unnamed_addr constant [3 x i8] c"ir\00" @.str.232 = private unnamed_addr constant [6 x i8] c"index\00" @.str.233 = private unnamed_addr constant [1 x i8] c"\00" @.str.234 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.235 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.236 = private unnamed_addr constant [9 x i8] c"FINCH_RT\00" @.str.237 = private unnamed_addr constant [1 x i8] c"\00" @.str.238 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.239 = private unnamed_addr constant [23 x i8] c"/../runtime/finch_rt.c\00" @.str.240 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.241 = private unnamed_addr constant [20 x i8] c"/runtime/finch_rt.c\00" @.str.242 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" @.str.243 = private unnamed_addr constant [35 x i8] c"/../share/finch/runtime/finch_rt.c\00" @.str.244 = private unnamed_addr constant [19 x i8] c"runtime/finch_rt.c\00" @.str.245 = private unnamed_addr constant [19 x i8] c"runtime/finch_rt.c\00" @.str.246 = private unnamed_addr constant [57 x i8] c"error: can't find the Finch runtime (runtime/finch_rt.c)\00" @.str.247 = private unnamed_addr constant [1 x i8] c"\00" @.str.248 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.249 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.250 = private unnamed_addr constant [1 x i8] c"\00" @.str.251 = private unnamed_addr constant [7 x i8] c" -fPIC\00" @.str.252 = private unnamed_addr constant [4 x i8] c" -g\00" @.str.253 = private unnamed_addr constant [4 x i8] c"run\00" @.str.254 = private unnamed_addr constant [2 x i8] c" \00" @.str.255 = private unnamed_addr constant [2 x i8] c" \00" @.str.256 = private unnamed_addr constant [7 x i8] c"rm -f \00" @.str.257 = private unnamed_addr constant [3 x i8] c"fn\00" @.str.258 = private unnamed_addr constant [7 x i8] c"return\00" @.str.259 = private unnamed_addr constant [3 x i8] c"if\00" @.str.260 = private unnamed_addr constant [5 x i8] c"else\00" @.str.261 = private unnamed_addr constant [6 x i8] c"while\00" @.str.262 = private unnamed_addr constant [4 x i8] c"for\00" @.str.263 = private unnamed_addr constant [3 x i8] c"in\00" @.str.264 = private unnamed_addr constant [6 x i8] c"break\00" @.str.265 = private unnamed_addr constant [9 x i8] c"continue\00" @.str.266 = private unnamed_addr constant [5 x i8] c"true\00" @.str.267 = private unnamed_addr constant [6 x i8] c"false\00" @.str.268 = private unnamed_addr constant [5 x i8] c"null\00" @.str.269 = private unnamed_addr constant [7 x i8] c"import\00" @.str.270 = private unnamed_addr constant [5 x i8] c"link\00" @.str.271 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.272 = private unnamed_addr constant [6 x i8] c"defer\00" @.str.273 = private unnamed_addr constant [3 x i8] c"or\00" @.str.274 = private unnamed_addr constant [4 x i8] c"try\00" @.str.275 = private unnamed_addr constant [5 x i8] c"enum\00" @.str.276 = private unnamed_addr constant [6 x i8] c"match\00" @.str.277 = private unnamed_addr constant [7 x i8] c"export\00" @.str.278 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.279 = private unnamed_addr constant [29 x i8] c"used .path on a null pointer\00" @.str.280 = private unnamed_addr constant [2 x i8] c":\00" @.str.281 = private unnamed_addr constant [2 x i8] c":\00" @.str.282 = private unnamed_addr constant [10 x i8] c": error: \00" @.str.283 = private unnamed_addr constant [1 x i8] c"\00" @.str.284 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.285 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.286 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.287 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.288 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.289 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.290 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.291 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.292 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.293 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.294 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.295 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.296 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.297 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.298 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.299 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.300 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.301 = private unnamed_addr constant [29 x i8] c"used .line on a null pointer\00" @.str.302 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.303 = private unnamed_addr constant [28 x i8] c"used .col on a null pointer\00" @.str.304 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.305 = private unnamed_addr constant [27 x i8] c"used .nl on a null pointer\00" @.str.306 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.307 = private unnamed_addr constant [28 x i8] c"used .col on a null pointer\00" @.str.308 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.309 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.310 = private unnamed_addr constant [3 x i8] c"->\00" @.str.311 = private unnamed_addr constant [3 x i8] c"<<\00" @.str.312 = private unnamed_addr constant [3 x i8] c">>\00" @.str.313 = private unnamed_addr constant [3 x i8] c"<=\00" @.str.314 = private unnamed_addr constant [3 x i8] c">=\00" @.str.315 = private unnamed_addr constant [3 x i8] c"==\00" @.str.316 = private unnamed_addr constant [3 x i8] c"!=\00" @.str.317 = private unnamed_addr constant [3 x i8] c"&&\00" @.str.318 = private unnamed_addr constant [3 x i8] c"||\00" @.str.319 = private unnamed_addr constant [3 x i8] c"..\00" @.str.320 = private unnamed_addr constant [3 x i8] c":=\00" @.str.321 = private unnamed_addr constant [3 x i8] c"+=\00" @.str.322 = private unnamed_addr constant [3 x i8] c"-=\00" @.str.323 = private unnamed_addr constant [3 x i8] c"*=\00" @.str.324 = private unnamed_addr constant [3 x i8] c"/=\00" @.str.325 = private unnamed_addr constant [3 x i8] c"%=\00" @.str.326 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.327 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.328 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.329 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.330 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.331 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.332 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.333 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.334 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.335 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.336 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.337 = private unnamed_addr constant [23 x i8] c"(){}[],.:+-*/%&|^~<>=!\00" @.str.338 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.339 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.340 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.341 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.342 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.343 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.344 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.345 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.346 = private unnamed_addr constant [1 x i8] c"\00" @.str.347 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.348 = private unnamed_addr constant [29 x i8] c"used .line on a null pointer\00" @.str.349 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.350 = private unnamed_addr constant [28 x i8] c"used .col on a null pointer\00" @.str.351 = private unnamed_addr constant [17 x i8] c"unknown escape \5C\00" @.str.352 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.353 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.354 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.355 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.356 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.357 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.358 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.359 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.360 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.361 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.362 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.363 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.364 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.365 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.366 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.367 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.368 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.369 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.370 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.371 = private unnamed_addr constant [29 x i8] c"used .line on a null pointer\00" @.str.372 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.373 = private unnamed_addr constant [28 x i8] c"used .col on a null pointer\00" @.str.374 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.375 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.376 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.377 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.378 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.379 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.380 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.381 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.382 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.383 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.384 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.385 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.386 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.387 = private unnamed_addr constant [37 x i8] c"comment is never closed (missing */)\00" @.str.388 = private unnamed_addr constant [1 x i8] c"\00" @.str.389 = private unnamed_addr constant [1 x i8] c"\00" @.str.390 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.391 = private unnamed_addr constant [29 x i8] c"used .line on a null pointer\00" @.str.392 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.393 = private unnamed_addr constant [28 x i8] c"used .col on a null pointer\00" @.str.394 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.395 = private unnamed_addr constant [27 x i8] c"used .nl on a null pointer\00" @.str.396 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.397 = private unnamed_addr constant [27 x i8] c"used .nl on a null pointer\00" @.str.398 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.399 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.400 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.401 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.402 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.403 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.404 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.405 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.406 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.407 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.408 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.409 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.410 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.411 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.412 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.413 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.414 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.415 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.416 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.417 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.418 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.419 = private unnamed_addr constant [6 x i8] c"ident\00" @.str.420 = private unnamed_addr constant [4 x i8] c"int\00" @.str.421 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.422 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.423 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.424 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.425 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.426 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.427 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.428 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.429 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.430 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.431 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.432 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.433 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.434 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.435 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.436 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.437 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.438 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.439 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.440 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.441 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.442 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.443 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.444 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.445 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.446 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.447 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.448 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.449 = private unnamed_addr constant [6 x i8] c"float\00" @.str.450 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.451 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.452 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.453 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.454 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.455 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.456 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.457 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.458 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.459 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.460 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.461 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.462 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.463 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.464 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.465 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.466 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.467 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.468 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.469 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.470 = private unnamed_addr constant [2 x i8] c"_\00" @.str.471 = private unnamed_addr constant [1 x i8] c"\00" @.str.472 = private unnamed_addr constant [7 x i8] c"string\00" @.str.473 = private unnamed_addr constant [5 x i8] c"char\00" @.str.474 = private unnamed_addr constant [35 x i8] c"string is never closed (missing \22)\00" @.str.475 = private unnamed_addr constant [33 x i8] c"char is never closed (missing ')\00" @.str.476 = private unnamed_addr constant [1 x i8] c"\00" @.str.477 = private unnamed_addr constant [45 x i8] c"a char holds exactly one character, like 'a'\00" @.str.478 = private unnamed_addr constant [1 x i8] c"\00" @.str.479 = private unnamed_addr constant [75 x i8] c" (names use only a-z, A-Z, 0-9 and _; other letters only go inside \22text\22)\00" @.str.480 = private unnamed_addr constant [23 x i8] c"unexpected character '\00" @.str.481 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.482 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.483 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.484 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.485 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.486 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.487 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.488 = private unnamed_addr constant [2 x i8] c"'\00" @.str.489 = private unnamed_addr constant [4 x i8] c"eof\00" @.str.490 = private unnamed_addr constant [1 x i8] c"\00" @.str.491 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.492 = private unnamed_addr constant [29 x i8] c"used .line on a null pointer\00" @.str.493 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" @.str.494 = private unnamed_addr constant [28 x i8] c"used .col on a null pointer\00" @.str.495 = private unnamed_addr constant [6 x i8] c"array\00" @.str.496 = private unnamed_addr constant [4 x i8] c"map\00" @.str.497 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.498 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.499 = private unnamed_addr constant [6 x i8] c"named\00" @.str.500 = private unnamed_addr constant [5 x i8] c"enum\00" @.str.501 = private unnamed_addr constant [6 x i8] c"fixed\00" @.str.502 = private unnamed_addr constant [6 x i8] c"array\00" @.str.503 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.504 = private unnamed_addr constant [4 x i8] c"map\00" @.str.505 = private unnamed_addr constant [6 x i8] c"fixed\00" @.str.506 = private unnamed_addr constant [12 x i8] c"src/ast.fch\00" @.str.507 = private unnamed_addr constant [12 x i8] c"src/ast.fch\00" @.str.508 = private unnamed_addr constant [6 x i8] c"array\00" @.str.509 = private unnamed_addr constant [3 x i8] c"[]\00" @.str.510 = private unnamed_addr constant [12 x i8] c"src/ast.fch\00" @.str.511 = private unnamed_addr constant [6 x i8] c"fixed\00" @.str.512 = private unnamed_addr constant [2 x i8] c"[\00" @.str.513 = private unnamed_addr constant [2 x i8] c"]\00" @.str.514 = private unnamed_addr constant [12 x i8] c"src/ast.fch\00" @.str.515 = private unnamed_addr constant [4 x i8] c"map\00" @.str.516 = private unnamed_addr constant [5 x i8] c"map[\00" @.str.517 = private unnamed_addr constant [12 x i8] c"src/ast.fch\00" @.str.518 = private unnamed_addr constant [2 x i8] c"]\00" @.str.519 = private unnamed_addr constant [12 x i8] c"src/ast.fch\00" @.str.520 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.521 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.522 = private unnamed_addr constant [5 x i8] c"ptr[\00" @.str.523 = private unnamed_addr constant [12 x i8] c"src/ast.fch\00" @.str.524 = private unnamed_addr constant [2 x i8] c"]\00" @.str.525 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.526 = private unnamed_addr constant [6 x i8] c"named\00" @.str.527 = private unnamed_addr constant [5 x i8] c"enum\00" @.str.528 = private unnamed_addr constant [2 x i8] c".\00" @.str.529 = private unnamed_addr constant [5 x i8] c"void\00" @.str.530 = private unnamed_addr constant [8 x i8] c"nothing\00" @.str.531 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.532 = private unnamed_addr constant [29 x i8] c"used .path on a null pointer\00" @.str.533 = private unnamed_addr constant [2 x i8] c":\00" @.str.534 = private unnamed_addr constant [2 x i8] c":\00" @.str.535 = private unnamed_addr constant [10 x i8] c": error: \00" @.str.536 = private unnamed_addr constant [1 x i8] c"\00" @.str.537 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.538 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.539 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.540 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" @.str.541 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.542 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.543 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.544 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.545 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" @.str.546 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.547 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.548 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.549 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.550 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.551 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.552 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" @.str.553 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.554 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" @.str.555 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.556 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" @.str.557 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.558 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.559 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" @.str.560 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.561 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.562 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.563 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.564 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" @.str.565 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.566 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.567 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.568 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.569 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.570 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.571 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.572 = private unnamed_addr constant [6 x i8] c"ident\00" @.str.573 = private unnamed_addr constant [2 x i8] c"'\00" @.str.574 = private unnamed_addr constant [2 x i8] c"'\00" @.str.575 = private unnamed_addr constant [4 x i8] c"eof\00" @.str.576 = private unnamed_addr constant [12 x i8] c"end of file\00" @.str.577 = private unnamed_addr constant [4 x i8] c"int\00" @.str.578 = private unnamed_addr constant [6 x i8] c"float\00" @.str.579 = private unnamed_addr constant [9 x i8] c"a number\00" @.str.580 = private unnamed_addr constant [7 x i8] c"string\00" @.str.581 = private unnamed_addr constant [9 x i8] c"a string\00" @.str.582 = private unnamed_addr constant [5 x i8] c"char\00" @.str.583 = private unnamed_addr constant [7 x i8] c"a char\00" @.str.584 = private unnamed_addr constant [2 x i8] c"'\00" @.str.585 = private unnamed_addr constant [2 x i8] c"'\00" @.str.586 = private unnamed_addr constant [10 x i8] c"expected \00" @.str.587 = private unnamed_addr constant [9 x i8] c", found \00" @.str.588 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.589 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" @.str.590 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.591 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" @.str.592 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.593 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.594 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.595 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.596 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" @.str.597 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.598 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.599 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.600 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.601 = private unnamed_addr constant [29 x i8] c"used .file on a null pointer\00" @.str.602 = private unnamed_addr constant [4 x i8] c"int\00" @.str.603 = private unnamed_addr constant [6 x i8] c"float\00" @.str.604 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.605 = private unnamed_addr constant [5 x i8] c"char\00" @.str.606 = private unnamed_addr constant [4 x i8] c"str\00" @.str.607 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.608 = private unnamed_addr constant [3 x i8] c"i8\00" @.str.609 = private unnamed_addr constant [4 x i8] c"i16\00" @.str.610 = private unnamed_addr constant [4 x i8] c"i32\00" @.str.611 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.612 = private unnamed_addr constant [3 x i8] c"u8\00" @.str.613 = private unnamed_addr constant [4 x i8] c"u16\00" @.str.614 = private unnamed_addr constant [4 x i8] c"u32\00" @.str.615 = private unnamed_addr constant [4 x i8] c"u64\00" @.str.616 = private unnamed_addr constant [4 x i8] c"f32\00" @.str.617 = private unnamed_addr constant [4 x i8] c"f64\00" @.str.618 = private unnamed_addr constant [2 x i8] c"[\00" @.str.619 = private unnamed_addr constant [2 x i8] c"]\00" @.str.620 = private unnamed_addr constant [37 x i8] c"']' (an array type looks like []int)\00" @.str.621 = private unnamed_addr constant [6 x i8] c"ident\00" @.str.622 = private unnamed_addr constant [12 x i8] c"unexpected \00" @.str.623 = private unnamed_addr constant [57 x i8] c" (expected a type like int, str, []int or a struct name)\00" @.str.624 = private unnamed_addr constant [4 x i8] c"map\00" @.str.625 = private unnamed_addr constant [2 x i8] c"[\00" @.str.626 = private unnamed_addr constant [2 x i8] c"]\00" @.str.627 = private unnamed_addr constant [40 x i8] c"']' (a map type looks like map[str]int)\00" @.str.628 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.629 = private unnamed_addr constant [2 x i8] c"[\00" @.str.630 = private unnamed_addr constant [2 x i8] c"]\00" @.str.631 = private unnamed_addr constant [4 x i8] c"']'\00" @.str.632 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.633 = private unnamed_addr constant [4 x i8] c"int\00" @.str.634 = private unnamed_addr constant [4 x i8] c"f64\00" @.str.635 = private unnamed_addr constant [6 x i8] c"float\00" @.str.636 = private unnamed_addr constant [6 x i8] c"named\00" @.str.637 = private unnamed_addr constant [2 x i8] c".\00" @.str.638 = private unnamed_addr constant [6 x i8] c"ident\00" @.str.639 = private unnamed_addr constant [2 x i8] c"[\00" @.str.640 = private unnamed_addr constant [2 x i8] c"]\00" @.str.641 = private unnamed_addr constant [2 x i8] c",\00" @.str.642 = private unnamed_addr constant [2 x i8] c"]\00" @.str.643 = private unnamed_addr constant [29 x i8] c"']' after the type arguments\00" @.str.644 = private unnamed_addr constant [6 x i8] c"ident\00" @.str.645 = private unnamed_addr constant [2 x i8] c"[\00" @.str.646 = private unnamed_addr constant [2 x i8] c"]\00" @.str.647 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.648 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.649 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.650 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" @.str.651 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.652 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" @.str.653 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.654 = private unnamed_addr constant [2 x i8] c"[\00" @.str.655 = private unnamed_addr constant [2 x i8] c"]\00" @.str.656 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.657 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" @.str.658 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.659 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" @.str.660 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.661 = private unnamed_addr constant [6 x i8] c"ident\00" @.str.662 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.663 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" @.str.664 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.665 = private unnamed_addr constant [4 x i8] c"eof\00" @.str.666 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.667 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" @.str.668 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.669 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.670 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.671 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.672 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.673 = private unnamed_addr constant [2 x i8] c"[\00" @.str.674 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.675 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" @.str.676 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.677 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.678 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.679 = private unnamed_addr constant [2 x i8] c"]\00" @.str.680 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.681 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.682 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.683 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" @.str.684 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.685 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" @.str.686 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.687 = private unnamed_addr constant [2 x i8] c"[\00" @.str.688 = private unnamed_addr constant [2 x i8] c"]\00" @.str.689 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.690 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" @.str.691 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.692 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" @.str.693 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.694 = private unnamed_addr constant [2 x i8] c"(\00" @.str.695 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.696 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" @.str.697 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.698 = private unnamed_addr constant [4 x i8] c"eof\00" @.str.699 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.700 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" @.str.701 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.702 = private unnamed_addr constant [2 x i8] c"[\00" @.str.703 = private unnamed_addr constant [2 x i8] c"]\00" @.str.704 = private unnamed_addr constant [6 x i8] c"ident\00" @.str.705 = private unnamed_addr constant [6 x i8] c"ident\00" @.str.706 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.707 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" @.str.708 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.709 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.710 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.711 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.712 = private unnamed_addr constant [4 x i8] c"map\00" @.str.713 = private unnamed_addr constant [2 x i8] c"[\00" @.str.714 = private unnamed_addr constant [2 x i8] c".\00" @.str.715 = private unnamed_addr constant [6 x i8] c"ident\00" @.str.716 = private unnamed_addr constant [6 x i8] c"ident\00" @.str.717 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.718 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" @.str.719 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.720 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.721 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.722 = private unnamed_addr constant [2 x i8] c"}\00" @.str.723 = private unnamed_addr constant [4 x i8] c"eof\00" @.str.724 = private unnamed_addr constant [12 x i8] c"unexpected \00" @.str.725 = private unnamed_addr constant [38 x i8] c" (put each statement on its own line)\00" @.str.726 = private unnamed_addr constant [4 x i8] c"eof\00" @.str.727 = private unnamed_addr constant [7 x i8] c"import\00" @.str.728 = private unnamed_addr constant [7 x i8] c"string\00" @.str.729 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.730 = private unnamed_addr constant [29 x i8] c"used .path on a null pointer\00" @.str.731 = private unnamed_addr constant [2 x i8] c":\00" @.str.732 = private unnamed_addr constant [2 x i8] c":\00" @.str.733 = private unnamed_addr constant [6 x i8] c"ident\00" @.str.734 = private unnamed_addr constant [52 x i8] c"expected a module name or a C header after 'import'\00" @.str.735 = private unnamed_addr constant [5 x i8] c"link\00" @.str.736 = private unnamed_addr constant [7 x i8] c"string\00" @.str.737 = private unnamed_addr constant [43 x i8] c"a library name in quotes, like link \22glfw\22\00" @.str.738 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.739 = private unnamed_addr constant [3 x i8] c".c\00" @.str.740 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.741 = private unnamed_addr constant [3 x i8] c".o\00" @.str.742 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.743 = private unnamed_addr constant [3 x i8] c".a\00" @.str.744 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.745 = private unnamed_addr constant [4 x i8] c"lib\00" @.str.746 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.747 = private unnamed_addr constant [4 x i8] c".so\00" @.str.748 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.749 = private unnamed_addr constant [2 x i8] c"/\00" @.str.750 = private unnamed_addr constant [66 x i8] c"write just the library's name: for libglfw.so that's link \22glfw\22\00" @.str.751 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.752 = private unnamed_addr constant [5 x i8] c"enum\00" @.str.753 = private unnamed_addr constant [5 x i8] c"enum\00" @.str.754 = private unnamed_addr constant [5 x i8] c"enum\00" @.str.755 = private unnamed_addr constant [7 x i8] c"'enum'\00" @.str.756 = private unnamed_addr constant [6 x i8] c"ident\00" @.str.757 = private unnamed_addr constant [13 x i8] c"an enum name\00" @.str.758 = private unnamed_addr constant [2 x i8] c"{\00" @.str.759 = private unnamed_addr constant [4 x i8] c"'{'\00" @.str.760 = private unnamed_addr constant [2 x i8] c"}\00" @.str.761 = private unnamed_addr constant [4 x i8] c"eof\00" @.str.762 = private unnamed_addr constant [38 x i8] c"an enum is never closed (missing '}')\00" @.str.763 = private unnamed_addr constant [8 x i8] c"variant\00" @.str.764 = private unnamed_addr constant [6 x i8] c"ident\00" @.str.765 = private unnamed_addr constant [25 x i8] c"a variant name, like Red\00" @.str.766 = private unnamed_addr constant [2 x i8] c"=\00" @.str.767 = private unnamed_addr constant [1 x i8] c"\00" @.str.768 = private unnamed_addr constant [2 x i8] c"-\00" @.str.769 = private unnamed_addr constant [2 x i8] c"-\00" @.str.770 = private unnamed_addr constant [4 x i8] c"int\00" @.str.771 = private unnamed_addr constant [31 x i8] c"a whole number, like Ok = 200\00" @.str.772 = private unnamed_addr constant [2 x i8] c",\00" @.str.773 = private unnamed_addr constant [10 x i8] c"the enum \00" @.str.774 = private unnamed_addr constant [17 x i8] c" has no variants\00" @.str.775 = private unnamed_addr constant [6 x i8] c"match\00" @.str.776 = private unnamed_addr constant [6 x i8] c"match\00" @.str.777 = private unnamed_addr constant [8 x i8] c"'match'\00" @.str.778 = private unnamed_addr constant [2 x i8] c"{\00" @.str.779 = private unnamed_addr constant [4 x i8] c"'{'\00" @.str.780 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.781 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" @.str.782 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.783 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" @.str.784 = private unnamed_addr constant [2 x i8] c"}\00" @.str.785 = private unnamed_addr constant [4 x i8] c"eof\00" @.str.786 = private unnamed_addr constant [38 x i8] c"a match is never closed (missing '}')\00" @.str.787 = private unnamed_addr constant [4 x i8] c"arm\00" @.str.788 = private unnamed_addr constant [9 x i8] c"patterns\00" @.str.789 = private unnamed_addr constant [5 x i8] c"else\00" @.str.790 = private unnamed_addr constant [2 x i8] c",\00" @.str.791 = private unnamed_addr constant [3 x i8] c"->\00" @.str.792 = private unnamed_addr constant [58 x i8] c"'->' after the value to match, like Red -> print(\22red\22)\00" @.str.793 = private unnamed_addr constant [2 x i8] c"{\00" @.str.794 = private unnamed_addr constant [2 x i8] c",\00" @.str.795 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.796 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" @.str.797 = private unnamed_addr constant [31 x i8] c"a match needs at least one arm\00" @.str.798 = private unnamed_addr constant [2 x i8] c"[\00" @.str.799 = private unnamed_addr constant [4 x i8] c"'['\00" @.str.800 = private unnamed_addr constant [6 x i8] c"ident\00" @.str.801 = private unnamed_addr constant [30 x i8] c"a type parameter name, like T\00" @.str.802 = private unnamed_addr constant [2 x i8] c",\00" @.str.803 = private unnamed_addr constant [2 x i8] c"]\00" @.str.804 = private unnamed_addr constant [30 x i8] c"']' after the type parameters\00" @.str.805 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.806 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.807 = private unnamed_addr constant [9 x i8] c"'struct'\00" @.str.808 = private unnamed_addr constant [6 x i8] c"ident\00" @.str.809 = private unnamed_addr constant [14 x i8] c"a struct name\00" @.str.810 = private unnamed_addr constant [2 x i8] c"[\00" @.str.811 = private unnamed_addr constant [2 x i8] c"{\00" @.str.812 = private unnamed_addr constant [4 x i8] c"'{'\00" @.str.813 = private unnamed_addr constant [2 x i8] c"}\00" @.str.814 = private unnamed_addr constant [4 x i8] c"eof\00" @.str.815 = private unnamed_addr constant [39 x i8] c"a struct is never closed (missing '}')\00" @.str.816 = private unnamed_addr constant [6 x i8] c"field\00" @.str.817 = private unnamed_addr constant [12 x i8] c"unexpected \00" @.str.818 = private unnamed_addr constant [29 x i8] c" (a field looks like: int x)\00" @.str.819 = private unnamed_addr constant [6 x i8] c"ident\00" @.str.820 = private unnamed_addr constant [13 x i8] c"a field name\00" @.str.821 = private unnamed_addr constant [2 x i8] c"=\00" @.str.822 = private unnamed_addr constant [3 x i8] c"fn\00" @.str.823 = private unnamed_addr constant [7 x i8] c"export\00" @.str.824 = private unnamed_addr constant [6 x i8] c"ident\00" @.str.825 = private unnamed_addr constant [69 x i8] c"functions start with 'fn', like: fn add(int a, int b) -> int { ... }\00" @.str.826 = private unnamed_addr constant [3 x i8] c"fn\00" @.str.827 = private unnamed_addr constant [27 x i8] c"'fn', 'struct' or 'import'\00" @.str.828 = private unnamed_addr constant [6 x i8] c"ident\00" @.str.829 = private unnamed_addr constant [16 x i8] c"a function name\00" @.str.830 = private unnamed_addr constant [2 x i8] c"[\00" @.str.831 = private unnamed_addr constant [2 x i8] c".\00" @.str.832 = private unnamed_addr constant [6 x i8] c"ident\00" @.str.833 = private unnamed_addr constant [14 x i8] c"a method name\00" @.str.834 = private unnamed_addr constant [2 x i8] c"(\00" @.str.835 = private unnamed_addr constant [4 x i8] c"'('\00" @.str.836 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.837 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" @.str.838 = private unnamed_addr constant [2 x i8] c")\00" @.str.839 = private unnamed_addr constant [6 x i8] c"param\00" @.str.840 = private unnamed_addr constant [6 x i8] c"ident\00" @.str.841 = private unnamed_addr constant [17 x i8] c"a parameter name\00" @.str.842 = private unnamed_addr constant [2 x i8] c",\00" @.str.843 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.844 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" @.str.845 = private unnamed_addr constant [2 x i8] c")\00" @.str.846 = private unnamed_addr constant [4 x i8] c"')'\00" @.str.847 = private unnamed_addr constant [5 x i8] c"void\00" @.str.848 = private unnamed_addr constant [3 x i8] c"->\00" @.str.849 = private unnamed_addr constant [2 x i8] c"!\00" @.str.850 = private unnamed_addr constant [2 x i8] c"!\00" @.str.851 = private unnamed_addr constant [5 x i8] c"void\00" @.str.852 = private unnamed_addr constant [12 x i8] c"unexpected \00" @.str.853 = private unnamed_addr constant [62 x i8] c" (after '->' comes a type, or ! for a function that can fail)\00" @.str.854 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.855 = private unnamed_addr constant [6 x i8] c"block\00" @.str.856 = private unnamed_addr constant [2 x i8] c"{\00" @.str.857 = private unnamed_addr constant [4 x i8] c"'{'\00" @.str.858 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.859 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" @.str.860 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.861 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" @.str.862 = private unnamed_addr constant [2 x i8] c"}\00" @.str.863 = private unnamed_addr constant [4 x i8] c"eof\00" @.str.864 = private unnamed_addr constant [36 x i8] c"a '{' is never closed (missing '}')\00" @.str.865 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.866 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" @.str.867 = private unnamed_addr constant [3 x i8] c"if\00" @.str.868 = private unnamed_addr constant [6 x i8] c"while\00" @.str.869 = private unnamed_addr constant [6 x i8] c"while\00" @.str.870 = private unnamed_addr constant [4 x i8] c"for\00" @.str.871 = private unnamed_addr constant [4 x i8] c"for\00" @.str.872 = private unnamed_addr constant [6 x i8] c"ident\00" @.str.873 = private unnamed_addr constant [21 x i8] c"a loop variable name\00" @.str.874 = private unnamed_addr constant [2 x i8] c",\00" @.str.875 = private unnamed_addr constant [6 x i8] c"ident\00" @.str.876 = private unnamed_addr constant [28 x i8] c"a second loop variable name\00" @.str.877 = private unnamed_addr constant [3 x i8] c"in\00" @.str.878 = private unnamed_addr constant [5 x i8] c"'in'\00" @.str.879 = private unnamed_addr constant [3 x i8] c"..\00" @.str.880 = private unnamed_addr constant [56 x i8] c"a range of numbers has one loop variable: for i in 0..n\00" @.str.881 = private unnamed_addr constant [5 x i8] c"each\00" @.str.882 = private unnamed_addr constant [6 x i8] c"match\00" @.str.883 = private unnamed_addr constant [7 x i8] c"return\00" @.str.884 = private unnamed_addr constant [7 x i8] c"return\00" @.str.885 = private unnamed_addr constant [2 x i8] c"}\00" @.str.886 = private unnamed_addr constant [6 x i8] c"break\00" @.str.887 = private unnamed_addr constant [9 x i8] c"continue\00" @.str.888 = private unnamed_addr constant [2 x i8] c"{\00" @.str.889 = private unnamed_addr constant [6 x i8] c"defer\00" @.str.890 = private unnamed_addr constant [6 x i8] c"defer\00" @.str.891 = private unnamed_addr constant [6 x i8] c"defer\00" @.str.892 = private unnamed_addr constant [34 x i8] c"defer inside defer is not allowed\00" @.str.893 = private unnamed_addr constant [3 x i8] c"fn\00" @.str.894 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.895 = private unnamed_addr constant [7 x i8] c"import\00" @.str.896 = private unnamed_addr constant [5 x i8] c"link\00" @.str.897 = private unnamed_addr constant [2 x i8] c"'\00" @.str.898 = private unnamed_addr constant [49 x i8] c"' can't be used here in the self-hosted compiler\00" @.str.899 = private unnamed_addr constant [5 x i8] c"decl\00" @.str.900 = private unnamed_addr constant [6 x i8] c"ident\00" @.str.901 = private unnamed_addr constant [16 x i8] c"a variable name\00" @.str.902 = private unnamed_addr constant [2 x i8] c"=\00" @.str.903 = private unnamed_addr constant [6 x i8] c"ident\00" @.str.904 = private unnamed_addr constant [3 x i8] c":=\00" @.str.905 = private unnamed_addr constant [5 x i8] c"decl\00" @.str.906 = private unnamed_addr constant [2 x i8] c"=\00" @.str.907 = private unnamed_addr constant [3 x i8] c"+=\00" @.str.908 = private unnamed_addr constant [3 x i8] c"-=\00" @.str.909 = private unnamed_addr constant [3 x i8] c"*=\00" @.str.910 = private unnamed_addr constant [3 x i8] c"/=\00" @.str.911 = private unnamed_addr constant [3 x i8] c"%=\00" @.str.912 = private unnamed_addr constant [4 x i8] c"var\00" @.str.913 = private unnamed_addr constant [7 x i8] c"member\00" @.str.914 = private unnamed_addr constant [6 x i8] c"index\00" @.str.915 = private unnamed_addr constant [67 x i8] c"only a variable, a field, an element or p.value can be assigned to\00" @.str.916 = private unnamed_addr constant [7 x i8] c"assign\00" @.str.917 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.918 = private unnamed_addr constant [29 x i8] c"used .file on a null pointer\00" @.str.919 = private unnamed_addr constant [5 x i8] c"call\00" @.str.920 = private unnamed_addr constant [7 x i8] c"method\00" @.str.921 = private unnamed_addr constant [4 x i8] c"try\00" @.str.922 = private unnamed_addr constant [3 x i8] c"or\00" @.str.923 = private unnamed_addr constant [38 x i8] c"this value is computed but never used\00" @.str.924 = private unnamed_addr constant [5 x i8] c"expr\00" @.str.925 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.926 = private unnamed_addr constant [29 x i8] c"used .file on a null pointer\00" @.str.927 = private unnamed_addr constant [3 x i8] c"if\00" @.str.928 = private unnamed_addr constant [3 x i8] c"if\00" @.str.929 = private unnamed_addr constant [5 x i8] c"'if'\00" @.str.930 = private unnamed_addr constant [5 x i8] c"else\00" @.str.931 = private unnamed_addr constant [3 x i8] c"if\00" @.str.932 = private unnamed_addr constant [3 x i8] c"||\00" @.str.933 = private unnamed_addr constant [3 x i8] c"&&\00" @.str.934 = private unnamed_addr constant [3 x i8] c"==\00" @.str.935 = private unnamed_addr constant [3 x i8] c"!=\00" @.str.936 = private unnamed_addr constant [2 x i8] c"<\00" @.str.937 = private unnamed_addr constant [3 x i8] c"<=\00" @.str.938 = private unnamed_addr constant [2 x i8] c">\00" @.str.939 = private unnamed_addr constant [3 x i8] c">=\00" @.str.940 = private unnamed_addr constant [2 x i8] c"+\00" @.str.941 = private unnamed_addr constant [2 x i8] c"-\00" @.str.942 = private unnamed_addr constant [2 x i8] c"|\00" @.str.943 = private unnamed_addr constant [2 x i8] c"^\00" @.str.944 = private unnamed_addr constant [2 x i8] c"*\00" @.str.945 = private unnamed_addr constant [2 x i8] c"/\00" @.str.946 = private unnamed_addr constant [2 x i8] c"%\00" @.str.947 = private unnamed_addr constant [3 x i8] c"<<\00" @.str.948 = private unnamed_addr constant [3 x i8] c">>\00" @.str.949 = private unnamed_addr constant [2 x i8] c"&\00" @.str.950 = private unnamed_addr constant [3 x i8] c"or\00" @.str.951 = private unnamed_addr constant [3 x i8] c"or\00" @.str.952 = private unnamed_addr constant [2 x i8] c"{\00" @.str.953 = private unnamed_addr constant [7 x i8] c"binary\00" @.str.954 = private unnamed_addr constant [4 x i8] c"try\00" @.str.955 = private unnamed_addr constant [4 x i8] c"try\00" @.str.956 = private unnamed_addr constant [2 x i8] c"-\00" @.str.957 = private unnamed_addr constant [2 x i8] c"!\00" @.str.958 = private unnamed_addr constant [2 x i8] c"~\00" @.str.959 = private unnamed_addr constant [6 x i8] c"unary\00" @.str.960 = private unnamed_addr constant [2 x i8] c"(\00" @.str.961 = private unnamed_addr constant [4 x i8] c"'('\00" @.str.962 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.963 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" @.str.964 = private unnamed_addr constant [2 x i8] c")\00" @.str.965 = private unnamed_addr constant [2 x i8] c")\00" @.str.966 = private unnamed_addr constant [1 x i8] c"\00" @.str.967 = private unnamed_addr constant [6 x i8] c"ident\00" @.str.968 = private unnamed_addr constant [2 x i8] c":\00" @.str.969 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.970 = private unnamed_addr constant [30 x i8] c"used .names on a null pointer\00" @.str.971 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.972 = private unnamed_addr constant [29 x i8] c"used .kids on a null pointer\00" @.str.973 = private unnamed_addr constant [2 x i8] c",\00" @.str.974 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.975 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" @.str.976 = private unnamed_addr constant [2 x i8] c")\00" @.str.977 = private unnamed_addr constant [4 x i8] c"')'\00" @.str.978 = private unnamed_addr constant [2 x i8] c".\00" @.str.979 = private unnamed_addr constant [7 x i8] c"member\00" @.str.980 = private unnamed_addr constant [6 x i8] c"ident\00" @.str.981 = private unnamed_addr constant [17 x i8] c"a name after '.'\00" @.str.982 = private unnamed_addr constant [2 x i8] c"(\00" @.str.983 = private unnamed_addr constant [7 x i8] c"method\00" @.str.984 = private unnamed_addr constant [2 x i8] c"[\00" @.str.985 = private unnamed_addr constant [6 x i8] c"index\00" @.str.986 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.987 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" @.str.988 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.989 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" @.str.990 = private unnamed_addr constant [2 x i8] c"]\00" @.str.991 = private unnamed_addr constant [4 x i8] c"']'\00" @.str.992 = private unnamed_addr constant [1 x i8] c"\00" @.str.993 = private unnamed_addr constant [4 x i8] c"int\00" @.str.994 = private unnamed_addr constant [6 x i8] c"float\00" @.str.995 = private unnamed_addr constant [5 x i8] c"char\00" @.str.996 = private unnamed_addr constant [7 x i8] c"string\00" @.str.997 = private unnamed_addr constant [4 x i8] c"str\00" @.str.998 = private unnamed_addr constant [5 x i8] c"true\00" @.str.999 = private unnamed_addr constant [6 x i8] c"false\00" @.str.1000 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.1001 = private unnamed_addr constant [5 x i8] c"null\00" @.str.1002 = private unnamed_addr constant [5 x i8] c"null\00" @.str.1003 = private unnamed_addr constant [2 x i8] c"(\00" @.str.1004 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.1005 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" @.str.1006 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.1007 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" @.str.1008 = private unnamed_addr constant [2 x i8] c")\00" @.str.1009 = private unnamed_addr constant [4 x i8] c"')'\00" @.str.1010 = private unnamed_addr constant [6 x i8] c"match\00" @.str.1011 = private unnamed_addr constant [2 x i8] c"[\00" @.str.1012 = private unnamed_addr constant [6 x i8] c"array\00" @.str.1013 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.1014 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" @.str.1015 = private unnamed_addr constant [2 x i8] c":\00" @.str.1016 = private unnamed_addr constant [2 x i8] c"]\00" @.str.1017 = private unnamed_addr constant [4 x i8] c"map\00" @.str.1018 = private unnamed_addr constant [2 x i8] c"]\00" @.str.1019 = private unnamed_addr constant [2 x i8] c":\00" @.str.1020 = private unnamed_addr constant [4 x i8] c"map\00" @.str.1021 = private unnamed_addr constant [4 x i8] c"map\00" @.str.1022 = private unnamed_addr constant [2 x i8] c":\00" @.str.1023 = private unnamed_addr constant [42 x i8] c"':' (a map entry looks like \22key\22: value)\00" @.str.1024 = private unnamed_addr constant [2 x i8] c",\00" @.str.1025 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.1026 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" @.str.1027 = private unnamed_addr constant [2 x i8] c"]\00" @.str.1028 = private unnamed_addr constant [4 x i8] c"']'\00" @.str.1029 = private unnamed_addr constant [6 x i8] c"ident\00" @.str.1030 = private unnamed_addr constant [2 x i8] c"[\00" @.str.1031 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.1032 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" @.str.1033 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.1034 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.1035 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" @.str.1036 = private unnamed_addr constant [6 x i8] c"ident\00" @.str.1037 = private unnamed_addr constant [6 x i8] c"targs\00" @.str.1038 = private unnamed_addr constant [2 x i8] c",\00" @.str.1039 = private unnamed_addr constant [2 x i8] c"]\00" @.str.1040 = private unnamed_addr constant [29 x i8] c"']' after the type arguments\00" @.str.1041 = private unnamed_addr constant [5 x i8] c"call\00" @.str.1042 = private unnamed_addr constant [2 x i8] c"(\00" @.str.1043 = private unnamed_addr constant [5 x i8] c"call\00" @.str.1044 = private unnamed_addr constant [4 x i8] c"var\00" @.str.1045 = private unnamed_addr constant [12 x i8] c"unexpected \00" @.str.1046 = private unnamed_addr constant [20 x i8] c" (expected a value)\00" @.str.1047 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1048 = private unnamed_addr constant [2 x i8] c"\5C\00" @.str.1049 = private unnamed_addr constant [3 x i8] c"\5C\5C\00" @.str.1050 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1051 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.1052 = private unnamed_addr constant [3 x i8] c"\5Cn\00" @.str.1053 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1054 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1055 = private unnamed_addr constant [2 x i8] c" \00" @.str.1056 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1057 = private unnamed_addr constant [30 x i8] c"used .index on a null pointer\00" @.str.1058 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1059 = private unnamed_addr constant [28 x i8] c"used .idx on a null pointer\00" @.str.1060 = private unnamed_addr constant [4 x i8] c"@R\09\00" @.str.1061 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1062 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" @.str.1063 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1064 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1065 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1066 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1067 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1068 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1069 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1070 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1071 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1072 = private unnamed_addr constant [2 x i8] c" \00" @.str.1073 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1074 = private unnamed_addr constant [2 x i8] c".\00" @.str.1075 = private unnamed_addr constant [4 x i8] c"fn \00" @.str.1076 = private unnamed_addr constant [2 x i8] c"(\00" @.str.1077 = private unnamed_addr constant [3 x i8] c", \00" @.str.1078 = private unnamed_addr constant [2 x i8] c")\00" @.str.1079 = private unnamed_addr constant [5 x i8] c"void\00" @.str.1080 = private unnamed_addr constant [6 x i8] c" -> !\00" @.str.1081 = private unnamed_addr constant [5 x i8] c" -> \00" @.str.1082 = private unnamed_addr constant [2 x i8] c"!\00" @.str.1083 = private unnamed_addr constant [5 x i8] c"void\00" @.str.1084 = private unnamed_addr constant [5 x i8] c" -> \00" @.str.1085 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1086 = private unnamed_addr constant [30 x i8] c"used .index on a null pointer\00" @.str.1087 = private unnamed_addr constant [7 x i8] c"method\00" @.str.1088 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1089 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.1090 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1091 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1092 = private unnamed_addr constant [10 x i8] c"```finch\0A\00" @.str.1093 = private unnamed_addr constant [5 x i8] c"\0A```\00" @.str.1094 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1095 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" @.str.1096 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1097 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1098 = private unnamed_addr constant [28 x i8] c"used .idx on a null pointer\00" @.str.1099 = private unnamed_addr constant [4 x i8] c"@I\09\00" @.str.1100 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1101 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.1102 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1103 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.1104 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1105 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1106 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1107 = private unnamed_addr constant [2 x i8] c" \00" @.str.1108 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1109 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1110 = private unnamed_addr constant [28 x i8] c"used .idx on a null pointer\00" @.str.1111 = private unnamed_addr constant [4 x i8] c"@F\09\00" @.str.1112 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1113 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1114 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1115 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1116 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" @.str.1117 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1118 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1119 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1120 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1121 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1122 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1123 = private unnamed_addr constant [2 x i8] c"|\00" @.str.1124 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1125 = private unnamed_addr constant [34 x i8] c"used .templates on a null pointer\00" @.str.1126 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1127 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.1128 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1129 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1130 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1131 = private unnamed_addr constant [28 x i8] c"used .idx on a null pointer\00" @.str.1132 = private unnamed_addr constant [4 x i8] c"@F\09\00" @.str.1133 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1134 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1135 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1136 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1137 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" @.str.1138 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1139 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1140 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1141 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1142 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1143 = private unnamed_addr constant [4 x i8] c"fn \00" @.str.1144 = private unnamed_addr constant [2 x i8] c"[\00" @.str.1145 = private unnamed_addr constant [3 x i8] c", \00" @.str.1146 = private unnamed_addr constant [7 x i8] c"](...)\00" @.str.1147 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1148 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1149 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.1150 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1151 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.1152 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1153 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1154 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1155 = private unnamed_addr constant [28 x i8] c"used .idx on a null pointer\00" @.str.1156 = private unnamed_addr constant [4 x i8] c"@S\09\00" @.str.1157 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1158 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1159 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1160 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" @.str.1161 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1162 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1163 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1164 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1165 = private unnamed_addr constant [28 x i8] c"used .idx on a null pointer\00" @.str.1166 = private unnamed_addr constant [5 x i8] c"@SF\09\00" @.str.1167 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1168 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1169 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1170 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1171 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1172 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1173 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.1174 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1175 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.1176 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1177 = private unnamed_addr constant [1 x i8] c"\00" @.str.1178 = private unnamed_addr constant [2 x i8] c",\00" @.str.1179 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1180 = private unnamed_addr constant [28 x i8] c"used .idx on a null pointer\00" @.str.1181 = private unnamed_addr constant [4 x i8] c"@E\09\00" @.str.1182 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1183 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.1184 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1185 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1186 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1187 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1188 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" @.str.1189 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1190 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1191 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1192 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1193 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1194 = private unnamed_addr constant [30 x i8] c"used .index on a null pointer\00" @.str.1195 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1196 = private unnamed_addr constant [28 x i8] c"used .idx on a null pointer\00" @.str.1197 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1198 = private unnamed_addr constant [28 x i8] c"used .idx on a null pointer\00" @.str.1199 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.1200 = private unnamed_addr constant [1 x i8] c"\00" @.str.1201 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.1202 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.1203 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1204 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" @.str.1205 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1206 = private unnamed_addr constant [2 x i8] c":\00" @.str.1207 = private unnamed_addr constant [2 x i8] c":\00" @.str.1208 = private unnamed_addr constant [10 x i8] c": error: \00" @.str.1209 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1210 = private unnamed_addr constant [33 x i8] c"used .instNote on a null pointer\00" @.str.1211 = private unnamed_addr constant [1 x i8] c"\00" @.str.1212 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.1213 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.1214 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1215 = private unnamed_addr constant [33 x i8] c"used .dbgScope on a null pointer\00" @.str.1216 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1217 = private unnamed_addr constant [6 x i8] c"call \00" @.str.1218 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1219 = private unnamed_addr constant [29 x i8] c"used .body on a null pointer\00" @.str.1220 = private unnamed_addr constant [3 x i8] c" \00" @.str.1221 = private unnamed_addr constant [9 x i8] c", !dbg !\00" @.str.1222 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1223 = private unnamed_addr constant [29 x i8] c"used .body on a null pointer\00" @.str.1224 = private unnamed_addr constant [3 x i8] c" \00" @.str.1225 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1226 = private unnamed_addr constant [28 x i8] c"used .tmp on a null pointer\00" @.str.1227 = private unnamed_addr constant [3 x i8] c"%t\00" @.str.1228 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1229 = private unnamed_addr constant [28 x i8] c"used .tmp on a null pointer\00" @.str.1230 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1231 = private unnamed_addr constant [28 x i8] c"used .lbl on a null pointer\00" @.str.1232 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1233 = private unnamed_addr constant [28 x i8] c"used .lbl on a null pointer\00" @.str.1234 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1235 = private unnamed_addr constant [29 x i8] c"used .body on a null pointer\00" @.str.1236 = private unnamed_addr constant [2 x i8] c":\00" @.str.1237 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1238 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" @.str.1239 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1240 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" @.str.1241 = private unnamed_addr constant [11 x i8] c"br label %\00" @.str.1242 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1243 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" @.str.1244 = private unnamed_addr constant [7 x i8] c"br i1 \00" @.str.1245 = private unnamed_addr constant [10 x i8] c", label %\00" @.str.1246 = private unnamed_addr constant [10 x i8] c", label %\00" @.str.1247 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1248 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" @.str.1249 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1250 = private unnamed_addr constant [28 x i8] c"used .tmp on a null pointer\00" @.str.1251 = private unnamed_addr constant [3 x i8] c"%a\00" @.str.1252 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1253 = private unnamed_addr constant [28 x i8] c"used .tmp on a null pointer\00" @.str.1254 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1255 = private unnamed_addr constant [32 x i8] c"used .allocas on a null pointer\00" @.str.1256 = private unnamed_addr constant [3 x i8] c" \00" @.str.1257 = private unnamed_addr constant [11 x i8] c" = alloca \00" @.str.1258 = private unnamed_addr constant [11 x i8] c", align 16\00" @.str.1259 = private unnamed_addr constant [9 x i8] c" = load \00" @.str.1260 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.1261 = private unnamed_addr constant [7 x i8] c"store \00" @.str.1262 = private unnamed_addr constant [2 x i8] c" \00" @.str.1263 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.1264 = private unnamed_addr constant [4 x i8] c" = \00" @.str.1265 = private unnamed_addr constant [4 x i8] c"int\00" @.str.1266 = private unnamed_addr constant [3 x i8] c"i8\00" @.str.1267 = private unnamed_addr constant [4 x i8] c"i16\00" @.str.1268 = private unnamed_addr constant [4 x i8] c"i32\00" @.str.1269 = private unnamed_addr constant [3 x i8] c"u8\00" @.str.1270 = private unnamed_addr constant [4 x i8] c"u16\00" @.str.1271 = private unnamed_addr constant [4 x i8] c"u32\00" @.str.1272 = private unnamed_addr constant [4 x i8] c"u64\00" @.str.1273 = private unnamed_addr constant [6 x i8] c"float\00" @.str.1274 = private unnamed_addr constant [4 x i8] c"f32\00" @.str.1275 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.1276 = private unnamed_addr constant [5 x i8] c"char\00" @.str.1277 = private unnamed_addr constant [3 x i8] c"i8\00" @.str.1278 = private unnamed_addr constant [3 x i8] c"u8\00" @.str.1279 = private unnamed_addr constant [4 x i8] c"i16\00" @.str.1280 = private unnamed_addr constant [4 x i8] c"u16\00" @.str.1281 = private unnamed_addr constant [4 x i8] c"i32\00" @.str.1282 = private unnamed_addr constant [4 x i8] c"u32\00" @.str.1283 = private unnamed_addr constant [4 x i8] c"f32\00" @.str.1284 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1285 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1286 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.1287 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1288 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.1289 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1290 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1291 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.1292 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1293 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1294 = private unnamed_addr constant [30 x i8] c"used .enums on a null pointer\00" @.str.1295 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1296 = private unnamed_addr constant [30 x i8] c"used .enums on a null pointer\00" @.str.1297 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1298 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1299 = private unnamed_addr constant [30 x i8] c"used .enums on a null pointer\00" @.str.1300 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1301 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1302 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.1303 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1304 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.1305 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1306 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1307 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.1308 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1309 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.1310 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1311 = private unnamed_addr constant [6 x i8] c"array\00" @.str.1312 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1313 = private unnamed_addr constant [4 x i8] c"map\00" @.str.1314 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1315 = private unnamed_addr constant [5 x i8] c"char\00" @.str.1316 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.1317 = private unnamed_addr constant [4 x i8] c"str\00" @.str.1318 = private unnamed_addr constant [5 x i8] c"enum\00" @.str.1319 = private unnamed_addr constant [64 x i8] c"a map key must be a whole number, a char, a bool or a str, not \00" @.str.1320 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1321 = private unnamed_addr constant [5 x i8] c"void\00" @.str.1322 = private unnamed_addr constant [42 x i8] c"a map value can't have the type 'nothing'\00" @.str.1323 = private unnamed_addr constant [6 x i8] c"fixed\00" @.str.1324 = private unnamed_addr constant [6 x i8] c"fixed\00" @.str.1325 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1326 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.1327 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1328 = private unnamed_addr constant [6 x i8] c"named\00" @.str.1329 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1330 = private unnamed_addr constant [31 x i8] c"used .tnames on a null pointer\00" @.str.1331 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1332 = private unnamed_addr constant [30 x i8] c"used .targs on a null pointer\00" @.str.1333 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1334 = private unnamed_addr constant [31 x i8] c"used .tnames on a null pointer\00" @.str.1335 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1336 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1337 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.1338 = private unnamed_addr constant [2 x i8] c"'\00" @.str.1339 = private unnamed_addr constant [37 x i8] c"' is not imported here (add: import \00" @.str.1340 = private unnamed_addr constant [2 x i8] c")\00" @.str.1341 = private unnamed_addr constant [2 x i8] c"C\00" @.str.1342 = private unnamed_addr constant [2 x i8] c"C\00" @.str.1343 = private unnamed_addr constant [29 x i8] c"there is no C struct named '\00" @.str.1344 = private unnamed_addr constant [2 x i8] c"'\00" @.str.1345 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.1346 = private unnamed_addr constant [2 x i8] c"C\00" @.str.1347 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1348 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.1349 = private unnamed_addr constant [2 x i8] c"'\00" @.str.1350 = private unnamed_addr constant [37 x i8] c"' is not imported here (add: import \00" @.str.1351 = private unnamed_addr constant [2 x i8] c")\00" @.str.1352 = private unnamed_addr constant [5 x i8] c"enum\00" @.str.1353 = private unnamed_addr constant [2 x i8] c"C\00" @.str.1354 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.1355 = private unnamed_addr constant [2 x i8] c"C\00" @.str.1356 = private unnamed_addr constant [25 x i8] c"there is no type named '\00" @.str.1357 = private unnamed_addr constant [2 x i8] c"'\00" @.str.1358 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.1359 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1360 = private unnamed_addr constant [2 x i8] c"[\00" @.str.1361 = private unnamed_addr constant [2 x i8] c".\00" @.str.1362 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1363 = private unnamed_addr constant [2 x i8] c"]\00" @.str.1364 = private unnamed_addr constant [1 x i8] c"\00" @.str.1365 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1366 = private unnamed_addr constant [2 x i8] c",\00" @.str.1367 = private unnamed_addr constant [2 x i8] c".\00" @.str.1368 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1369 = private unnamed_addr constant [2 x i8] c" \00" @.str.1370 = private unnamed_addr constant [1 x i8] c"\00" @.str.1371 = private unnamed_addr constant [5 x i8] c"main\00" @.str.1372 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.1373 = private unnamed_addr constant [3 x i8] c"i1\00" @.str.1374 = private unnamed_addr constant [5 x i8] c"char\00" @.str.1375 = private unnamed_addr constant [2 x i8] c"i\00" @.str.1376 = private unnamed_addr constant [6 x i8] c"float\00" @.str.1377 = private unnamed_addr constant [7 x i8] c"double\00" @.str.1378 = private unnamed_addr constant [4 x i8] c"f32\00" @.str.1379 = private unnamed_addr constant [6 x i8] c"float\00" @.str.1380 = private unnamed_addr constant [4 x i8] c"str\00" @.str.1381 = private unnamed_addr constant [6 x i8] c"array\00" @.str.1382 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.1383 = private unnamed_addr constant [4 x i8] c"map\00" @.str.1384 = private unnamed_addr constant [38 x i8] c"{ ptr, i64, i64, i64, ptr, i64, i64 }\00" @.str.1385 = private unnamed_addr constant [6 x i8] c"fixed\00" @.str.1386 = private unnamed_addr constant [2 x i8] c"[\00" @.str.1387 = private unnamed_addr constant [4 x i8] c" x \00" @.str.1388 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1389 = private unnamed_addr constant [2 x i8] c"]\00" @.str.1390 = private unnamed_addr constant [5 x i8] c"enum\00" @.str.1391 = private unnamed_addr constant [4 x i8] c"i32\00" @.str.1392 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.1393 = private unnamed_addr constant [5 x i8] c"null\00" @.str.1394 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.1395 = private unnamed_addr constant [5 x i8] c"void\00" @.str.1396 = private unnamed_addr constant [5 x i8] c"void\00" @.str.1397 = private unnamed_addr constant [4 x i8] c"%S.\00" @.str.1398 = private unnamed_addr constant [2 x i8] c".\00" @.str.1399 = private unnamed_addr constant [3 x i8] c"i8\00" @.str.1400 = private unnamed_addr constant [5 x i8] c"void\00" @.str.1401 = private unnamed_addr constant [7 x i8] c"{ i1, \00" @.str.1402 = private unnamed_addr constant [22 x i8] c", { ptr, i64, i64 } }\00" @.str.1403 = private unnamed_addr constant [2 x i8] c":\00" @.str.1404 = private unnamed_addr constant [2 x i8] c":\00" @.str.1405 = private unnamed_addr constant [2 x i8] c":\00" @.str.1406 = private unnamed_addr constant [5 x i8] c"char\00" @.str.1407 = private unnamed_addr constant [5 x i8] c"enum\00" @.str.1408 = private unnamed_addr constant [2 x i8] c"0\00" @.str.1409 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.1410 = private unnamed_addr constant [6 x i8] c"false\00" @.str.1411 = private unnamed_addr constant [4 x i8] c"0.0\00" @.str.1412 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.1413 = private unnamed_addr constant [5 x i8] c"null\00" @.str.1414 = private unnamed_addr constant [5 x i8] c"null\00" @.str.1415 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" @.str.1416 = private unnamed_addr constant [30 x i8] c"ptrtoint (ptr getelementptr (\00" @.str.1417 = private unnamed_addr constant [27 x i8] c", ptr null, i32 1) to i64)\00" @.str.1418 = private unnamed_addr constant [4 x i8] c"str\00" @.str.1419 = private unnamed_addr constant [6 x i8] c"array\00" @.str.1420 = private unnamed_addr constant [4 x i8] c"map\00" @.str.1421 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.1422 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1423 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.1424 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1425 = private unnamed_addr constant [6 x i8] c"array\00" @.str.1426 = private unnamed_addr constant [5 x i8] c"arr_\00" @.str.1427 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1428 = private unnamed_addr constant [4 x i8] c"map\00" @.str.1429 = private unnamed_addr constant [5 x i8] c"map_\00" @.str.1430 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1431 = private unnamed_addr constant [2 x i8] c"_\00" @.str.1432 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1433 = private unnamed_addr constant [5 x i8] c"enum\00" @.str.1434 = private unnamed_addr constant [3 x i8] c"E_\00" @.str.1435 = private unnamed_addr constant [2 x i8] c"_\00" @.str.1436 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.1437 = private unnamed_addr constant [3 x i8] c"S_\00" @.str.1438 = private unnamed_addr constant [2 x i8] c"_\00" @.str.1439 = private unnamed_addr constant [17 x i8] c"0123456789ABCDEF\00" @.str.1440 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1441 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1442 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1443 = private unnamed_addr constant [29 x i8] c"used .nstr on a null pointer\00" @.str.1444 = private unnamed_addr constant [7 x i8] c"@.str.\00" @.str.1445 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1446 = private unnamed_addr constant [29 x i8] c"used .nstr on a null pointer\00" @.str.1447 = private unnamed_addr constant [2 x i8] c"\5C\00" @.str.1448 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1449 = private unnamed_addr constant [29 x i8] c"used .head on a null pointer\00" @.str.1450 = private unnamed_addr constant [35 x i8] c" = private unnamed_addr constant [\00" @.str.1451 = private unnamed_addr constant [10 x i8] c" x i8] c\22\00" @.str.1452 = private unnamed_addr constant [1 x i8] c"\00" @.str.1453 = private unnamed_addr constant [5 x i8] c"\5C00\22\00" @.str.1454 = private unnamed_addr constant [7 x i8] c"{ ptr \00" @.str.1455 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.1456 = private unnamed_addr constant [10 x i8] c", i64 0 }\00" @.str.1457 = private unnamed_addr constant [4 x i8] c"str\00" @.str.1458 = private unnamed_addr constant [6 x i8] c"panic\00" @.str.1459 = private unnamed_addr constant [3 x i8] c"ok\00" @.str.1460 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1461 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" @.str.1462 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1463 = private unnamed_addr constant [28 x i8] c"call void @finch_panic(ptr \00" @.str.1464 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.1465 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.1466 = private unnamed_addr constant [2 x i8] c")\00" @.str.1467 = private unnamed_addr constant [12 x i8] c"unreachable\00" @.str.1468 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1469 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" @.str.1470 = private unnamed_addr constant [6 x i8] c"range\00" @.str.1471 = private unnamed_addr constant [8 x i8] c"inrange\00" @.str.1472 = private unnamed_addr constant [14 x i8] c"icmp uge i64 \00" @.str.1473 = private unnamed_addr constant [3 x i8] c", \00" @.str.1474 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1475 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" @.str.1476 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1477 = private unnamed_addr constant [34 x i8] c"call void @finch_panic_index(ptr \00" @.str.1478 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.1479 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.1480 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.1481 = private unnamed_addr constant [2 x i8] c")\00" @.str.1482 = private unnamed_addr constant [12 x i8] c"unreachable\00" @.str.1483 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1484 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" @.str.1485 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1486 = private unnamed_addr constant [29 x i8] c"used .body on a null pointer\00" @.str.1487 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1488 = private unnamed_addr constant [32 x i8] c"used .allocas on a null pointer\00" @.str.1489 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1490 = private unnamed_addr constant [28 x i8] c"used .tmp on a null pointer\00" @.str.1491 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1492 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" @.str.1493 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1494 = private unnamed_addr constant [33 x i8] c"used .dbgScope on a null pointer\00" @.str.1495 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1496 = private unnamed_addr constant [33 x i8] c"used .dbgScope on a null pointer\00" @.str.1497 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1498 = private unnamed_addr constant [29 x i8] c"used .body on a null pointer\00" @.str.1499 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1500 = private unnamed_addr constant [32 x i8] c"used .allocas on a null pointer\00" @.str.1501 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1502 = private unnamed_addr constant [28 x i8] c"used .tmp on a null pointer\00" @.str.1503 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1504 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" @.str.1505 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1506 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.1507 = private unnamed_addr constant [11 x i8] c" {\0Aentry:\0A\00" @.str.1508 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1509 = private unnamed_addr constant [32 x i8] c"used .allocas on a null pointer\00" @.str.1510 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.1511 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.1512 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1513 = private unnamed_addr constant [29 x i8] c"used .body on a null pointer\00" @.str.1514 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.1515 = private unnamed_addr constant [4 x i8] c"\0A}\0A\00" @.str.1516 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1517 = private unnamed_addr constant [29 x i8] c"used .body on a null pointer\00" @.str.1518 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1519 = private unnamed_addr constant [32 x i8] c"used .allocas on a null pointer\00" @.str.1520 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1521 = private unnamed_addr constant [28 x i8] c"used .tmp on a null pointer\00" @.str.1522 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1523 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" @.str.1524 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1525 = private unnamed_addr constant [33 x i8] c"used .dbgScope on a null pointer\00" @.str.1526 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.1527 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.1528 = private unnamed_addr constant [2 x i8] c"0\00" @.str.1529 = private unnamed_addr constant [7 x i8] c"n.cond\00" @.str.1530 = private unnamed_addr constant [7 x i8] c"n.body\00" @.str.1531 = private unnamed_addr constant [6 x i8] c"n.end\00" @.str.1532 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.1533 = private unnamed_addr constant [14 x i8] c"icmp slt i64 \00" @.str.1534 = private unnamed_addr constant [3 x i8] c", \00" @.str.1535 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.1536 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1537 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.1538 = private unnamed_addr constant [9 x i8] c"add i64 \00" @.str.1539 = private unnamed_addr constant [4 x i8] c", 1\00" @.str.1540 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1541 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1542 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1543 = private unnamed_addr constant [4 x i8] c"str\00" @.str.1544 = private unnamed_addr constant [31 x i8] c"call void @finch_str_copy(ptr \00" @.str.1545 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.1546 = private unnamed_addr constant [2 x i8] c")\00" @.str.1547 = private unnamed_addr constant [6 x i8] c"array\00" @.str.1548 = private unnamed_addr constant [4 x i8] c"map\00" @.str.1549 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.1550 = private unnamed_addr constant [11 x i8] c"call void \00" @.str.1551 = private unnamed_addr constant [6 x i8] c"(ptr \00" @.str.1552 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.1553 = private unnamed_addr constant [2 x i8] c")\00" @.str.1554 = private unnamed_addr constant [13 x i8] c"@finch.copy.\00" @.str.1555 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1556 = private unnamed_addr constant [29 x i8] c"used .done on a null pointer\00" @.str.1557 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1558 = private unnamed_addr constant [29 x i8] c"used .done on a null pointer\00" @.str.1559 = private unnamed_addr constant [6 x i8] c"array\00" @.str.1560 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1561 = private unnamed_addr constant [56 x i8] c"call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 \00" @.str.1562 = private unnamed_addr constant [2 x i8] c")\00" @.str.1563 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.1564 = private unnamed_addr constant [5 x i8] c"%dst\00" @.str.1565 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.1566 = private unnamed_addr constant [5 x i8] c"%src\00" @.str.1567 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.1568 = private unnamed_addr constant [65 x i8] c"getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1\00" @.str.1569 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.1570 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.1571 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.1572 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1573 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.1574 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.1575 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.1576 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1577 = private unnamed_addr constant [4 x i8] c"map\00" @.str.1578 = private unnamed_addr constant [56 x i8] c"call void @finch_map_clone_raw(ptr %dst, ptr %src, i64 \00" @.str.1579 = private unnamed_addr constant [2 x i8] c")\00" @.str.1580 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1581 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1582 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.1583 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.1584 = private unnamed_addr constant [25 x i8] c", ptr %src, i32 0, i32 2\00" @.str.1585 = private unnamed_addr constant [5 x i8] c"%src\00" @.str.1586 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1587 = private unnamed_addr constant [5 x i8] c"%dst\00" @.str.1588 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1589 = private unnamed_addr constant [11 x i8] c"entry.live\00" @.str.1590 = private unnamed_addr constant [11 x i8] c"entry.next\00" @.str.1591 = private unnamed_addr constant [13 x i8] c"icmp ne i64 \00" @.str.1592 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.1593 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.1594 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.1595 = private unnamed_addr constant [15 x i8] c", i32 0, i32 0\00" @.str.1596 = private unnamed_addr constant [4 x i8] c", 0\00" @.str.1597 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1598 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1599 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1600 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.1601 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1602 = private unnamed_addr constant [5 x i8] c"%src\00" @.str.1603 = private unnamed_addr constant [5 x i8] c"%dst\00" @.str.1604 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1605 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.1606 = private unnamed_addr constant [24 x i8] c", ptr %dst, i32 0, i32 \00" @.str.1607 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1608 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.1609 = private unnamed_addr constant [24 x i8] c", ptr %src, i32 0, i32 \00" @.str.1610 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1611 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1612 = private unnamed_addr constant [9 x i8] c"ret void\00" @.str.1613 = private unnamed_addr constant [22 x i8] c"define internal void \00" @.str.1614 = private unnamed_addr constant [21 x i8] c"(ptr %dst, ptr %src)\00" @.str.1615 = private unnamed_addr constant [1 x i8] c"\00" @.str.1616 = private unnamed_addr constant [3 x i8] c", \00" @.str.1617 = private unnamed_addr constant [36 x i8] c" = call i32 (ptr, ...) @printf(ptr \00" @.str.1618 = private unnamed_addr constant [2 x i8] c")\00" @.str.1619 = private unnamed_addr constant [32 x i8] c"extractvalue { ptr, i64, i64 } \00" @.str.1620 = private unnamed_addr constant [4 x i8] c", 0\00" @.str.1621 = private unnamed_addr constant [13 x i8] c"icmp eq ptr \00" @.str.1622 = private unnamed_addr constant [7 x i8] c", null\00" @.str.1623 = private unnamed_addr constant [1 x i8] c"\00" @.str.1624 = private unnamed_addr constant [11 x i8] c"select i1 \00" @.str.1625 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.1626 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.1627 = private unnamed_addr constant [5 x i8] c"%lld\00" @.str.1628 = private unnamed_addr constant [5 x i8] c"i64 \00" @.str.1629 = private unnamed_addr constant [4 x i8] c"int\00" @.str.1630 = private unnamed_addr constant [5 x i8] c"%llu\00" @.str.1631 = private unnamed_addr constant [5 x i8] c"i64 \00" @.str.1632 = private unnamed_addr constant [4 x i8] c"u64\00" @.str.1633 = private unnamed_addr constant [3 x i8] c"%g\00" @.str.1634 = private unnamed_addr constant [8 x i8] c"double \00" @.str.1635 = private unnamed_addr constant [6 x i8] c"float\00" @.str.1636 = private unnamed_addr constant [5 x i8] c"char\00" @.str.1637 = private unnamed_addr constant [9 x i8] c"sext i8 \00" @.str.1638 = private unnamed_addr constant [8 x i8] c" to i32\00" @.str.1639 = private unnamed_addr constant [5 x i8] c"'%c'\00" @.str.1640 = private unnamed_addr constant [5 x i8] c"i32 \00" @.str.1641 = private unnamed_addr constant [3 x i8] c"%c\00" @.str.1642 = private unnamed_addr constant [5 x i8] c"i32 \00" @.str.1643 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.1644 = private unnamed_addr constant [5 x i8] c"true\00" @.str.1645 = private unnamed_addr constant [6 x i8] c"false\00" @.str.1646 = private unnamed_addr constant [11 x i8] c"select i1 \00" @.str.1647 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.1648 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.1649 = private unnamed_addr constant [3 x i8] c"%s\00" @.str.1650 = private unnamed_addr constant [5 x i8] c"ptr \00" @.str.1651 = private unnamed_addr constant [4 x i8] c"str\00" @.str.1652 = private unnamed_addr constant [32 x i8] c"extractvalue { ptr, i64, i64 } \00" @.str.1653 = private unnamed_addr constant [4 x i8] c", 1\00" @.str.1654 = private unnamed_addr constant [11 x i8] c"trunc i64 \00" @.str.1655 = private unnamed_addr constant [8 x i8] c" to i32\00" @.str.1656 = private unnamed_addr constant [7 x i8] c"\22%.*s\22\00" @.str.1657 = private unnamed_addr constant [5 x i8] c"i32 \00" @.str.1658 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.1659 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.1660 = private unnamed_addr constant [5 x i8] c"i32 \00" @.str.1661 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.1662 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.1663 = private unnamed_addr constant [13 x i8] c"icmp eq ptr \00" @.str.1664 = private unnamed_addr constant [7 x i8] c", null\00" @.str.1665 = private unnamed_addr constant [9 x i8] c"ptr.null\00" @.str.1666 = private unnamed_addr constant [9 x i8] c"ptr.addr\00" @.str.1667 = private unnamed_addr constant [9 x i8] c"ptr.done\00" @.str.1668 = private unnamed_addr constant [5 x i8] c"null\00" @.str.1669 = private unnamed_addr constant [1 x i8] c"\00" @.str.1670 = private unnamed_addr constant [7 x i8] c"0x%llx\00" @.str.1671 = private unnamed_addr constant [5 x i8] c"i64 \00" @.str.1672 = private unnamed_addr constant [14 x i8] c"ptrtoint ptr \00" @.str.1673 = private unnamed_addr constant [8 x i8] c" to i64\00" @.str.1674 = private unnamed_addr constant [5 x i8] c"null\00" @.str.1675 = private unnamed_addr constant [5 x i8] c"null\00" @.str.1676 = private unnamed_addr constant [1 x i8] c"\00" @.str.1677 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.1678 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.1679 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" @.str.1680 = private unnamed_addr constant [32 x i8] c"call void @finch_buf_print(ptr \00" @.str.1681 = private unnamed_addr constant [2 x i8] c")\00" @.str.1682 = private unnamed_addr constant [30 x i8] c"call void @finch_buf_add(ptr \00" @.str.1683 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.1684 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.1685 = private unnamed_addr constant [2 x i8] c")\00" @.str.1686 = private unnamed_addr constant [2 x i8] c"0\00" @.str.1687 = private unnamed_addr constant [2 x i8] c"1\00" @.str.1688 = private unnamed_addr constant [30 x i8] c"call void @finch_buf_int(ptr \00" @.str.1689 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.1690 = private unnamed_addr constant [4 x i8] c"int\00" @.str.1691 = private unnamed_addr constant [2 x i8] c")\00" @.str.1692 = private unnamed_addr constant [31 x i8] c"call void @finch_buf_uint(ptr \00" @.str.1693 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.1694 = private unnamed_addr constant [4 x i8] c"u64\00" @.str.1695 = private unnamed_addr constant [2 x i8] c")\00" @.str.1696 = private unnamed_addr constant [32 x i8] c"call void @finch_buf_float(ptr \00" @.str.1697 = private unnamed_addr constant [10 x i8] c", double \00" @.str.1698 = private unnamed_addr constant [6 x i8] c"float\00" @.str.1699 = private unnamed_addr constant [2 x i8] c")\00" @.str.1700 = private unnamed_addr constant [5 x i8] c"char\00" @.str.1701 = private unnamed_addr constant [31 x i8] c"call void @finch_buf_char(ptr \00" @.str.1702 = private unnamed_addr constant [6 x i8] c", i8 \00" @.str.1703 = private unnamed_addr constant [7 x i8] c", i32 \00" @.str.1704 = private unnamed_addr constant [2 x i8] c")\00" @.str.1705 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.1706 = private unnamed_addr constant [31 x i8] c"call void @finch_buf_bool(ptr \00" @.str.1707 = private unnamed_addr constant [7 x i8] c", i32 \00" @.str.1708 = private unnamed_addr constant [9 x i8] c"zext i1 \00" @.str.1709 = private unnamed_addr constant [8 x i8] c" to i32\00" @.str.1710 = private unnamed_addr constant [2 x i8] c")\00" @.str.1711 = private unnamed_addr constant [4 x i8] c"str\00" @.str.1712 = private unnamed_addr constant [30 x i8] c"call void @finch_buf_str(ptr \00" @.str.1713 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.1714 = private unnamed_addr constant [7 x i8] c", i32 \00" @.str.1715 = private unnamed_addr constant [2 x i8] c")\00" @.str.1716 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.1717 = private unnamed_addr constant [5 x i8] c"null\00" @.str.1718 = private unnamed_addr constant [30 x i8] c"call void @finch_buf_ptr(ptr \00" @.str.1719 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.1720 = private unnamed_addr constant [2 x i8] c")\00" @.str.1721 = private unnamed_addr constant [11 x i8] c"call void \00" @.str.1722 = private unnamed_addr constant [6 x i8] c"(ptr \00" @.str.1723 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.1724 = private unnamed_addr constant [2 x i8] c")\00" @.str.1725 = private unnamed_addr constant [15 x i8] c"@finch.format.\00" @.str.1726 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1727 = private unnamed_addr constant [29 x i8] c"used .done on a null pointer\00" @.str.1728 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1729 = private unnamed_addr constant [29 x i8] c"used .done on a null pointer\00" @.str.1730 = private unnamed_addr constant [6 x i8] c"array\00" @.str.1731 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1732 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.1733 = private unnamed_addr constant [3 x i8] c"%a\00" @.str.1734 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.1735 = private unnamed_addr constant [63 x i8] c"getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1\00" @.str.1736 = private unnamed_addr constant [5 x i8] c"%buf\00" @.str.1737 = private unnamed_addr constant [2 x i8] c"[\00" @.str.1738 = private unnamed_addr constant [4 x i8] c"sep\00" @.str.1739 = private unnamed_addr constant [5 x i8] c"item\00" @.str.1740 = private unnamed_addr constant [14 x i8] c"icmp sgt i64 \00" @.str.1741 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1742 = private unnamed_addr constant [4 x i8] c", 0\00" @.str.1743 = private unnamed_addr constant [5 x i8] c"%buf\00" @.str.1744 = private unnamed_addr constant [3 x i8] c", \00" @.str.1745 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.1746 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.1747 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.1748 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1749 = private unnamed_addr constant [5 x i8] c"%buf\00" @.str.1750 = private unnamed_addr constant [5 x i8] c"%buf\00" @.str.1751 = private unnamed_addr constant [2 x i8] c"]\00" @.str.1752 = private unnamed_addr constant [5 x i8] c"enum\00" @.str.1753 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1754 = private unnamed_addr constant [30 x i8] c"used .enums on a null pointer\00" @.str.1755 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1756 = private unnamed_addr constant [4 x i8] c"i32\00" @.str.1757 = private unnamed_addr constant [3 x i8] c"%a\00" @.str.1758 = private unnamed_addr constant [11 x i8] c"enum.other\00" @.str.1759 = private unnamed_addr constant [10 x i8] c"enum.done\00" @.str.1760 = private unnamed_addr constant [7 x i8] c"enum.v\00" @.str.1761 = private unnamed_addr constant [5 x i8] c"i32 \00" @.str.1762 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1763 = private unnamed_addr constant [10 x i8] c", label %\00" @.str.1764 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1765 = private unnamed_addr constant [12 x i8] c"switch i32 \00" @.str.1766 = private unnamed_addr constant [10 x i8] c", label %\00" @.str.1767 = private unnamed_addr constant [4 x i8] c" [ \00" @.str.1768 = private unnamed_addr constant [2 x i8] c" \00" @.str.1769 = private unnamed_addr constant [3 x i8] c" ]\00" @.str.1770 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1771 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" @.str.1772 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1773 = private unnamed_addr constant [5 x i8] c"%buf\00" @.str.1774 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1775 = private unnamed_addr constant [5 x i8] c"%buf\00" @.str.1776 = private unnamed_addr constant [2 x i8] c"(\00" @.str.1777 = private unnamed_addr constant [40 x i8] c"call void @finch_buf_int(ptr %buf, i64 \00" @.str.1778 = private unnamed_addr constant [10 x i8] c"sext i32 \00" @.str.1779 = private unnamed_addr constant [8 x i8] c" to i64\00" @.str.1780 = private unnamed_addr constant [2 x i8] c")\00" @.str.1781 = private unnamed_addr constant [5 x i8] c"%buf\00" @.str.1782 = private unnamed_addr constant [2 x i8] c")\00" @.str.1783 = private unnamed_addr constant [4 x i8] c"map\00" @.str.1784 = private unnamed_addr constant [3 x i8] c"i1\00" @.str.1785 = private unnamed_addr constant [3 x i8] c"i1\00" @.str.1786 = private unnamed_addr constant [5 x i8] c"true\00" @.str.1787 = private unnamed_addr constant [5 x i8] c"%buf\00" @.str.1788 = private unnamed_addr constant [2 x i8] c"{\00" @.str.1789 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.1790 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.1791 = private unnamed_addr constant [23 x i8] c", ptr %a, i32 0, i32 2\00" @.str.1792 = private unnamed_addr constant [3 x i8] c"%a\00" @.str.1793 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1794 = private unnamed_addr constant [11 x i8] c"entry.live\00" @.str.1795 = private unnamed_addr constant [11 x i8] c"entry.next\00" @.str.1796 = private unnamed_addr constant [13 x i8] c"icmp ne i64 \00" @.str.1797 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.1798 = private unnamed_addr constant [4 x i8] c", 0\00" @.str.1799 = private unnamed_addr constant [4 x i8] c"sep\00" @.str.1800 = private unnamed_addr constant [5 x i8] c"item\00" @.str.1801 = private unnamed_addr constant [3 x i8] c"i1\00" @.str.1802 = private unnamed_addr constant [5 x i8] c"%buf\00" @.str.1803 = private unnamed_addr constant [3 x i8] c", \00" @.str.1804 = private unnamed_addr constant [3 x i8] c"i1\00" @.str.1805 = private unnamed_addr constant [6 x i8] c"false\00" @.str.1806 = private unnamed_addr constant [5 x i8] c"%buf\00" @.str.1807 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1808 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1809 = private unnamed_addr constant [5 x i8] c"%buf\00" @.str.1810 = private unnamed_addr constant [3 x i8] c": \00" @.str.1811 = private unnamed_addr constant [5 x i8] c"%buf\00" @.str.1812 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1813 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1814 = private unnamed_addr constant [5 x i8] c"%buf\00" @.str.1815 = private unnamed_addr constant [2 x i8] c"}\00" @.str.1816 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1817 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.1818 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1819 = private unnamed_addr constant [5 x i8] c"%buf\00" @.str.1820 = private unnamed_addr constant [2 x i8] c"(\00" @.str.1821 = private unnamed_addr constant [3 x i8] c", \00" @.str.1822 = private unnamed_addr constant [1 x i8] c"\00" @.str.1823 = private unnamed_addr constant [5 x i8] c"%buf\00" @.str.1824 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1825 = private unnamed_addr constant [3 x i8] c": \00" @.str.1826 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.1827 = private unnamed_addr constant [22 x i8] c", ptr %a, i32 0, i32 \00" @.str.1828 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1829 = private unnamed_addr constant [5 x i8] c"%buf\00" @.str.1830 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1831 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1832 = private unnamed_addr constant [5 x i8] c"%buf\00" @.str.1833 = private unnamed_addr constant [2 x i8] c")\00" @.str.1834 = private unnamed_addr constant [9 x i8] c"ret void\00" @.str.1835 = private unnamed_addr constant [22 x i8] c"define internal void \00" @.str.1836 = private unnamed_addr constant [19 x i8] c"(ptr %buf, ptr %a)\00" @.str.1837 = private unnamed_addr constant [7 x i8] c"trunc \00" @.str.1838 = private unnamed_addr constant [2 x i8] c" \00" @.str.1839 = private unnamed_addr constant [5 x i8] c" to \00" @.str.1840 = private unnamed_addr constant [6 x i8] c"sext \00" @.str.1841 = private unnamed_addr constant [2 x i8] c" \00" @.str.1842 = private unnamed_addr constant [5 x i8] c" to \00" @.str.1843 = private unnamed_addr constant [6 x i8] c"zext \00" @.str.1844 = private unnamed_addr constant [2 x i8] c" \00" @.str.1845 = private unnamed_addr constant [5 x i8] c" to \00" @.str.1846 = private unnamed_addr constant [7 x i8] c"fpext \00" @.str.1847 = private unnamed_addr constant [2 x i8] c" \00" @.str.1848 = private unnamed_addr constant [5 x i8] c" to \00" @.str.1849 = private unnamed_addr constant [9 x i8] c"fptrunc \00" @.str.1850 = private unnamed_addr constant [2 x i8] c" \00" @.str.1851 = private unnamed_addr constant [5 x i8] c" to \00" @.str.1852 = private unnamed_addr constant [8 x i8] c"sitofp \00" @.str.1853 = private unnamed_addr constant [2 x i8] c" \00" @.str.1854 = private unnamed_addr constant [5 x i8] c" to \00" @.str.1855 = private unnamed_addr constant [8 x i8] c"uitofp \00" @.str.1856 = private unnamed_addr constant [2 x i8] c" \00" @.str.1857 = private unnamed_addr constant [5 x i8] c" to \00" @.str.1858 = private unnamed_addr constant [5 x i8] c"null\00" @.str.1859 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.1860 = private unnamed_addr constant [5 x i8] c"null\00" @.str.1861 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.1862 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.1863 = private unnamed_addr constant [12 x i8] c"the number \00" @.str.1864 = private unnamed_addr constant [17 x i8] c" doesn't fit in \00" @.str.1865 = private unnamed_addr constant [6 x i8] c"float\00" @.str.1866 = private unnamed_addr constant [3 x i8] c".0\00" @.str.1867 = private unnamed_addr constant [4 x i8] c"f32\00" @.str.1868 = private unnamed_addr constant [6 x i8] c"float\00" @.str.1869 = private unnamed_addr constant [6 x i8] c"float\00" @.str.1870 = private unnamed_addr constant [4 x i8] c"f32\00" @.str.1871 = private unnamed_addr constant [10 x i8] c" must be \00" @.str.1872 = private unnamed_addr constant [15 x i8] c", but this is \00" @.str.1873 = private unnamed_addr constant [7 x i8] c" (use \00" @.str.1874 = private unnamed_addr constant [17 x i8] c"(...) to convert\00" @.str.1875 = private unnamed_addr constant [27 x i8] c", it cuts off the fraction\00" @.str.1876 = private unnamed_addr constant [2 x i8] c")\00" @.str.1877 = private unnamed_addr constant [4 x i8] c"str\00" @.str.1878 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.1879 = private unnamed_addr constant [5 x i8] c"char\00" @.str.1880 = private unnamed_addr constant [35 x i8] c" (turn it into text with str(...))\00" @.str.1881 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1882 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" @.str.1883 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1884 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" @.str.1885 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1886 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" @.str.1887 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1888 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1889 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" @.str.1890 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1891 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1892 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1893 = private unnamed_addr constant [32 x i8] c"used .deferOn on a null pointer\00" @.str.1894 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1895 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" @.str.1896 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1897 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1898 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1899 = private unnamed_addr constant [35 x i8] c"used .deferLimit on a null pointer\00" @.str.1900 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1901 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" @.str.1902 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1903 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1904 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1905 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.1906 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1907 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.1908 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1909 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1910 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.1911 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1912 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1913 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.1914 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1915 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1916 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.1917 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1918 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.1919 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1920 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1921 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.1922 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1923 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1924 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.1925 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1926 = private unnamed_addr constant [6 x i8] c"print\00" @.str.1927 = private unnamed_addr constant [5 x i8] c"addr\00" @.str.1928 = private unnamed_addr constant [4 x i8] c"str\00" @.str.1929 = private unnamed_addr constant [4 x i8] c"int\00" @.str.1930 = private unnamed_addr constant [5 x i8] c"char\00" @.str.1931 = private unnamed_addr constant [6 x i8] c"float\00" @.str.1932 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.1933 = private unnamed_addr constant [10 x i8] c"read_file\00" @.str.1934 = private unnamed_addr constant [11 x i8] c"write_file\00" @.str.1935 = private unnamed_addr constant [12 x i8] c"file_exists\00" @.str.1936 = private unnamed_addr constant [6 x i8] c"shell\00" @.str.1937 = private unnamed_addr constant [5 x i8] c"exit\00" @.str.1938 = private unnamed_addr constant [6 x i8] c"input\00" @.str.1939 = private unnamed_addr constant [4 x i8] c"new\00" @.str.1940 = private unnamed_addr constant [5 x i8] c"free\00" @.str.1941 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.1942 = private unnamed_addr constant [12 x i8] c"delete_file\00" @.str.1943 = private unnamed_addr constant [3 x i8] c"i8\00" @.str.1944 = private unnamed_addr constant [4 x i8] c"i16\00" @.str.1945 = private unnamed_addr constant [4 x i8] c"i32\00" @.str.1946 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.1947 = private unnamed_addr constant [3 x i8] c"u8\00" @.str.1948 = private unnamed_addr constant [4 x i8] c"u16\00" @.str.1949 = private unnamed_addr constant [4 x i8] c"u32\00" @.str.1950 = private unnamed_addr constant [4 x i8] c"u64\00" @.str.1951 = private unnamed_addr constant [4 x i8] c"f32\00" @.str.1952 = private unnamed_addr constant [4 x i8] c"f64\00" @.str.1953 = private unnamed_addr constant [6 x i8] c"error\00" @.str.1954 = private unnamed_addr constant [4 x i8] c"err\00" @.str.1955 = private unnamed_addr constant [19 x i8] c"a variable named '\00" @.str.1956 = private unnamed_addr constant [22 x i8] c"' already exists here\00" @.str.1957 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1958 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.1959 = private unnamed_addr constant [2 x i8] c"'\00" @.str.1960 = private unnamed_addr constant [36 x i8] c"' is already the name of a function\00" @.str.1961 = private unnamed_addr constant [2 x i8] c"'\00" @.str.1962 = private unnamed_addr constant [39 x i8] c"' is a built-in name, pick another one\00" @.str.1963 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1964 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" @.str.1965 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1966 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" @.str.1967 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1968 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1969 = private unnamed_addr constant [30 x i8] c"used .nvars on a null pointer\00" @.str.1970 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1971 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" @.str.1972 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1973 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1974 = private unnamed_addr constant [30 x i8] c"used .nvars on a null pointer\00" @.str.1975 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1976 = private unnamed_addr constant [30 x i8] c"used .index on a null pointer\00" @.str.1977 = private unnamed_addr constant [4 x i8] c"err\00" @.str.1978 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1979 = private unnamed_addr constant [2 x i8] c"$\00" @.str.1980 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1981 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.1982 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1983 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.1984 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1985 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1986 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.1987 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1988 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1989 = private unnamed_addr constant [28 x i8] c"used .idx on a null pointer\00" @.str.1990 = private unnamed_addr constant [4 x i8] c"@V\09\00" @.str.1991 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1992 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1993 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1994 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" @.str.1995 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.1996 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1997 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1998 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.1999 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2000 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" @.str.2001 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2002 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.2003 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.2004 = private unnamed_addr constant [10 x i8] c"```finch\0A\00" @.str.2005 = private unnamed_addr constant [2 x i8] c" \00" @.str.2006 = private unnamed_addr constant [5 x i8] c"\0A```\00" @.str.2007 = private unnamed_addr constant [1 x i8] c"\00" @.str.2008 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2009 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" @.str.2010 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2011 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" @.str.2012 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2013 = private unnamed_addr constant [24 x i8] c"pop() on an empty array\00" @.str.2014 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2015 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" @.str.2016 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2017 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2018 = private unnamed_addr constant [32 x i8] c"used .deferOn on a null pointer\00" @.str.2019 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2020 = private unnamed_addr constant [35 x i8] c"used .deferLimit on a null pointer\00" @.str.2021 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2022 = private unnamed_addr constant [32 x i8] c"used .deferOn on a null pointer\00" @.str.2023 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2024 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2025 = private unnamed_addr constant [35 x i8] c"used .deferLimit on a null pointer\00" @.str.2026 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2027 = private unnamed_addr constant [32 x i8] c"used .inDefer on a null pointer\00" @.str.2028 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2029 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2030 = private unnamed_addr constant [32 x i8] c"used .inDefer on a null pointer\00" @.str.2031 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2032 = private unnamed_addr constant [32 x i8] c"used .deferOn on a null pointer\00" @.str.2033 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2034 = private unnamed_addr constant [35 x i8] c"used .deferLimit on a null pointer\00" @.str.2035 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2036 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" @.str.2037 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2038 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" @.str.2039 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2040 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" @.str.2041 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2042 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" @.str.2043 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2044 = private unnamed_addr constant [24 x i8] c"pop() on an empty array\00" @.str.2045 = private unnamed_addr constant [4 x i8] c"var\00" @.str.2046 = private unnamed_addr constant [7 x i8] c"member\00" @.str.2047 = private unnamed_addr constant [6 x i8] c"index\00" @.str.2048 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2049 = private unnamed_addr constant [1 x i8] c"\00" @.str.2050 = private unnamed_addr constant [5 x i8] c"push\00" @.str.2051 = private unnamed_addr constant [4 x i8] c"pop\00" @.str.2052 = private unnamed_addr constant [7 x i8] c"insert\00" @.str.2053 = private unnamed_addr constant [7 x i8] c"remove\00" @.str.2054 = private unnamed_addr constant [6 x i8] c"clear\00" @.str.2055 = private unnamed_addr constant [7 x i8] c"resize\00" @.str.2056 = private unnamed_addr constant [5 x i8] c"sort\00" @.str.2057 = private unnamed_addr constant [8 x i8] c"reverse\00" @.str.2058 = private unnamed_addr constant [7 x i8] c"assign\00" @.str.2059 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2060 = private unnamed_addr constant [7 x i8] c"method\00" @.str.2061 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2062 = private unnamed_addr constant [27 x i8] c"used .mm on a null pointer\00" @.str.2063 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2064 = private unnamed_addr constant [5 x i8] c"call\00" @.str.2065 = private unnamed_addr constant [5 x i8] c"addr\00" @.str.2066 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2067 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2068 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.2069 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2070 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.2071 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2072 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2073 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.2074 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2075 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.2076 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2077 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2078 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.2079 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2080 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2081 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2082 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.2083 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2084 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.2085 = private unnamed_addr constant [1 x i8] c"\00" @.str.2086 = private unnamed_addr constant [13 x i8] c"the struct '\00" @.str.2087 = private unnamed_addr constant [19 x i8] c"' is defined twice\00" @.str.2088 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2089 = private unnamed_addr constant [34 x i8] c"used .templates on a null pointer\00" @.str.2090 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2091 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.2092 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2093 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2094 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2095 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.2096 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2097 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.2098 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2099 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.2100 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2101 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2102 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.2103 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2104 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.2105 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2106 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2107 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.2108 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2109 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2110 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2111 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.2112 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2113 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.2114 = private unnamed_addr constant [2 x i8] c"'\00" @.str.2115 = private unnamed_addr constant [19 x i8] c"' is defined twice\00" @.str.2116 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2117 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.2118 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2119 = private unnamed_addr constant [10 x i8] c"the enum \00" @.str.2120 = private unnamed_addr constant [18 x i8] c" has the variant \00" @.str.2121 = private unnamed_addr constant [7 x i8] c" twice\00" @.str.2122 = private unnamed_addr constant [17 x i8] c"two variants of \00" @.str.2123 = private unnamed_addr constant [18 x i8] c" have the number \00" @.str.2124 = private unnamed_addr constant [21 x i8] c" (give each its own)\00" @.str.2125 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2126 = private unnamed_addr constant [30 x i8] c"used .enums on a null pointer\00" @.str.2127 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2128 = private unnamed_addr constant [27 x i8] c"used .ci on a null pointer\00" @.str.2129 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2130 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2131 = private unnamed_addr constant [2 x i8] c"C\00" @.str.2132 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2133 = private unnamed_addr constant [27 x i8] c"used .ci on a null pointer\00" @.str.2134 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2135 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2136 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2137 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2138 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.2139 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2140 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.2141 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2142 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2143 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.2144 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2145 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.2146 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2147 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2148 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.2149 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2150 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2151 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2152 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.2153 = private unnamed_addr constant [11 x i8] c"function '\00" @.str.2154 = private unnamed_addr constant [19 x i8] c"' is defined twice\00" @.str.2155 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2156 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.2157 = private unnamed_addr constant [1 x i8] c"\00" @.str.2158 = private unnamed_addr constant [35 x i8] c"there is no generic struct named '\00" @.str.2159 = private unnamed_addr constant [54 x i8] c"' here (a method goes in the same file as its struct)\00" @.str.2160 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2161 = private unnamed_addr constant [34 x i8] c"used .templates on a null pointer\00" @.str.2162 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2163 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.2164 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2165 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.2166 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2167 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.2168 = private unnamed_addr constant [12 x i8] c"the method \00" @.str.2169 = private unnamed_addr constant [2 x i8] c".\00" @.str.2170 = private unnamed_addr constant [18 x i8] c" is defined twice\00" @.str.2171 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2172 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.2173 = private unnamed_addr constant [2 x i8] c"C\00" @.str.2174 = private unnamed_addr constant [2 x i8] c"C\00" @.str.2175 = private unnamed_addr constant [2 x i8] c"C\00" @.str.2176 = private unnamed_addr constant [27 x i8] c"there is no struct named '\00" @.str.2177 = private unnamed_addr constant [77 x i8] c"' here (a method goes in the same file as its struct, or on a struct from C)\00" @.str.2178 = private unnamed_addr constant [12 x i8] c"the method \00" @.str.2179 = private unnamed_addr constant [2 x i8] c".\00" @.str.2180 = private unnamed_addr constant [18 x i8] c" is defined twice\00" @.str.2181 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2182 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2183 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2184 = private unnamed_addr constant [12 x i8] c"the struct \00" @.str.2185 = private unnamed_addr constant [29 x i8] c" already has a field named '\00" @.str.2186 = private unnamed_addr constant [2 x i8] c"'\00" @.str.2187 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2188 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.2189 = private unnamed_addr constant [11 x i8] c"function '\00" @.str.2190 = private unnamed_addr constant [19 x i8] c"' is defined twice\00" @.str.2191 = private unnamed_addr constant [2 x i8] c"'\00" @.str.2192 = private unnamed_addr constant [44 x i8] c"' is a built-in function, pick another name\00" @.str.2193 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2194 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.2195 = private unnamed_addr constant [8 x i8] c"@finch.\00" @.str.2196 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2197 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.2198 = private unnamed_addr constant [2 x i8] c".\00" @.str.2199 = private unnamed_addr constant [8 x i8] c"@finch.\00" @.str.2200 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2201 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.2202 = private unnamed_addr constant [2 x i8] c".\00" @.str.2203 = private unnamed_addr constant [2 x i8] c".\00" @.str.2204 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2205 = private unnamed_addr constant [5 x i8] c"self\00" @.str.2206 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2207 = private unnamed_addr constant [23 x i8] c"'self' is already the \00" @.str.2208 = private unnamed_addr constant [25 x i8] c" the method is called on\00" @.str.2209 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2210 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2211 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2212 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2213 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.2214 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2215 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.2216 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2217 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.2218 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2219 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2220 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.2221 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2222 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2223 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.2224 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2225 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.2226 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2227 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2228 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2229 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.2230 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2231 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2232 = private unnamed_addr constant [5 x i8] c"self\00" @.str.2233 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2234 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2235 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.2236 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2237 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2238 = private unnamed_addr constant [27 x i8] c"used .mm on a null pointer\00" @.str.2239 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2240 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.2241 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2242 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2243 = private unnamed_addr constant [34 x i8] c"used .templates on a null pointer\00" @.str.2244 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2245 = private unnamed_addr constant [34 x i8] c"used .templates on a null pointer\00" @.str.2246 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2247 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2248 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.2249 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2250 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2251 = private unnamed_addr constant [5 x i8] c"self\00" @.str.2252 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2253 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2254 = private unnamed_addr constant [34 x i8] c"used .templates on a null pointer\00" @.str.2255 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2256 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2257 = private unnamed_addr constant [27 x i8] c"used .mm on a null pointer\00" @.str.2258 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2259 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.2260 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2261 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.2262 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2263 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.2264 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2265 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2266 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2267 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.2268 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2269 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2270 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2271 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2272 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.2273 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2274 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2275 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.2276 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2277 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2278 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2279 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.2280 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2281 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2282 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.2283 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2284 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2285 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2286 = private unnamed_addr constant [34 x i8] c"used .templates on a null pointer\00" @.str.2287 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2288 = private unnamed_addr constant [34 x i8] c"used .templates on a null pointer\00" @.str.2289 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2290 = private unnamed_addr constant [3 x i8] c", \00" @.str.2291 = private unnamed_addr constant [1 x i8] c"\00" @.str.2292 = private unnamed_addr constant [35 x i8] c"there is no generic struct named '\00" @.str.2293 = private unnamed_addr constant [29 x i8] c"' (a struct written struct \00" @.str.2294 = private unnamed_addr constant [35 x i8] c"[T] { ... } takes type arguments)\00" @.str.2295 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2296 = private unnamed_addr constant [34 x i8] c"used .templates on a null pointer\00" @.str.2297 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2298 = private unnamed_addr constant [8 x i8] c" takes \00" @.str.2299 = private unnamed_addr constant [25 x i8] c" type argument(s), like \00" @.str.2300 = private unnamed_addr constant [2 x i8] c"[\00" @.str.2301 = private unnamed_addr constant [3 x i8] c", \00" @.str.2302 = private unnamed_addr constant [12 x i8] c"], but got \00" @.str.2303 = private unnamed_addr constant [2 x i8] c"[\00" @.str.2304 = private unnamed_addr constant [2 x i8] c"]\00" @.str.2305 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2306 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2307 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2308 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2309 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.2310 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2311 = private unnamed_addr constant [34 x i8] c"used .templates on a null pointer\00" @.str.2312 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2313 = private unnamed_addr constant [2 x i8] c"[\00" @.str.2314 = private unnamed_addr constant [2 x i8] c"]\00" @.str.2315 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2316 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.2317 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2318 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2319 = private unnamed_addr constant [8 x i8] c"@finch.\00" @.str.2320 = private unnamed_addr constant [2 x i8] c".\00" @.str.2321 = private unnamed_addr constant [2 x i8] c".\00" @.str.2322 = private unnamed_addr constant [8 x i8] c"@finch.\00" @.str.2323 = private unnamed_addr constant [2 x i8] c".\00" @.str.2324 = private unnamed_addr constant [2 x i8] c".\00" @.str.2325 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2326 = private unnamed_addr constant [31 x i8] c"used .tnames on a null pointer\00" @.str.2327 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2328 = private unnamed_addr constant [30 x i8] c"used .targs on a null pointer\00" @.str.2329 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2330 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.2331 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2332 = private unnamed_addr constant [33 x i8] c"used .instNote on a null pointer\00" @.str.2333 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2334 = private unnamed_addr constant [31 x i8] c"used .tnames on a null pointer\00" @.str.2335 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2336 = private unnamed_addr constant [30 x i8] c"used .targs on a null pointer\00" @.str.2337 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2338 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.2339 = private unnamed_addr constant [18 x i8] c" (while building \00" @.str.2340 = private unnamed_addr constant [2 x i8] c")\00" @.str.2341 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2342 = private unnamed_addr constant [33 x i8] c"used .instNote on a null pointer\00" @.str.2343 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2344 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2345 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2346 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2347 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2348 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2349 = private unnamed_addr constant [31 x i8] c"used .tnames on a null pointer\00" @.str.2350 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2351 = private unnamed_addr constant [30 x i8] c"used .targs on a null pointer\00" @.str.2352 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2353 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.2354 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2355 = private unnamed_addr constant [33 x i8] c"used .instNote on a null pointer\00" @.str.2356 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2357 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.2358 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2359 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.2360 = private unnamed_addr constant [6 x i8] c"named\00" @.str.2361 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2362 = private unnamed_addr constant [30 x i8] c"used .bound on a null pointer\00" @.str.2363 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2364 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2365 = private unnamed_addr constant [30 x i8] c"used .types on a null pointer\00" @.str.2366 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2367 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2368 = private unnamed_addr constant [30 x i8] c"used .bound on a null pointer\00" @.str.2369 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2370 = private unnamed_addr constant [6 x i8] c"array\00" @.str.2371 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.2372 = private unnamed_addr constant [6 x i8] c"fixed\00" @.str.2373 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2374 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2375 = private unnamed_addr constant [4 x i8] c"map\00" @.str.2376 = private unnamed_addr constant [4 x i8] c"map\00" @.str.2377 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2378 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2379 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2380 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2381 = private unnamed_addr constant [6 x i8] c"named\00" @.str.2382 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.2383 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2384 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2385 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2386 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2387 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2388 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2389 = private unnamed_addr constant [34 x i8] c"used .templates on a null pointer\00" @.str.2390 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2391 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2392 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.2393 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2394 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2395 = private unnamed_addr constant [8 x i8] c" takes \00" @.str.2396 = private unnamed_addr constant [28 x i8] c" type argument(s), but got \00" @.str.2397 = private unnamed_addr constant [5 x i8] c"void\00" @.str.2398 = private unnamed_addr constant [1 x i8] c"\00" @.str.2399 = private unnamed_addr constant [1 x i8] c"\00" @.str.2400 = private unnamed_addr constant [5 x i8] c"void\00" @.str.2401 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2402 = private unnamed_addr constant [5 x i8] c"void\00" @.str.2403 = private unnamed_addr constant [5 x i8] c"null\00" @.str.2404 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2405 = private unnamed_addr constant [30 x i8] c"this has no type to work out \00" @.str.2406 = private unnamed_addr constant [3 x i8] c", \00" @.str.2407 = private unnamed_addr constant [6 x i8] c" from\00" @.str.2408 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2409 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2410 = private unnamed_addr constant [17 x i8] c"can't tell what \00" @.str.2411 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2412 = private unnamed_addr constant [25 x i8] c" is here; write it out: \00" @.str.2413 = private unnamed_addr constant [11 x i8] c"[int](...)\00" @.str.2414 = private unnamed_addr constant [5 x i8] c"void\00" @.str.2415 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2416 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.2417 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2418 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2419 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2420 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2421 = private unnamed_addr constant [11 x i8] c"argument '\00" @.str.2422 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2423 = private unnamed_addr constant [2 x i8] c"'\00" @.str.2424 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2425 = private unnamed_addr constant [2 x i8] c" \00" @.str.2426 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2427 = private unnamed_addr constant [27 x i8] c"used .ci on a null pointer\00" @.str.2428 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2429 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2430 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2431 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2432 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2433 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2434 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2435 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.2436 = private unnamed_addr constant [2 x i8] c"[\00" @.str.2437 = private unnamed_addr constant [7 x i8] c" x i8]\00" @.str.2438 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2439 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2440 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2441 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2442 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2443 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2444 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2445 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2446 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2447 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2448 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2449 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2450 = private unnamed_addr constant [2 x i8] c"[\00" @.str.2451 = private unnamed_addr constant [7 x i8] c" x i8]\00" @.str.2452 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2453 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2454 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2455 = private unnamed_addr constant [50 x i8] c"has fields Finch can't see (unions or bit fields)\00" @.str.2456 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2457 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2458 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2459 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2460 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2461 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2462 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2463 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2464 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2465 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2466 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2467 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2468 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2469 = private unnamed_addr constant [29 x i8] c"used .head on a null pointer\00" @.str.2470 = private unnamed_addr constant [6 x i8] c"%S.C.\00" @.str.2471 = private unnamed_addr constant [11 x i8] c" = type { \00" @.str.2472 = private unnamed_addr constant [3 x i8] c", \00" @.str.2473 = private unnamed_addr constant [3 x i8] c" }\00" @.str.2474 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2475 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2476 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2477 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2478 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2479 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2480 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2481 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2482 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2483 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2484 = private unnamed_addr constant [31 x i8] c"used .tnames on a null pointer\00" @.str.2485 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2486 = private unnamed_addr constant [30 x i8] c"used .targs on a null pointer\00" @.str.2487 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2488 = private unnamed_addr constant [33 x i8] c"used .instNote on a null pointer\00" @.str.2489 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2490 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2491 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2492 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2493 = private unnamed_addr constant [31 x i8] c"used .tnames on a null pointer\00" @.str.2494 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2495 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2496 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2497 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2498 = private unnamed_addr constant [30 x i8] c"used .targs on a null pointer\00" @.str.2499 = private unnamed_addr constant [18 x i8] c" (while building \00" @.str.2500 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2501 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2502 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2503 = private unnamed_addr constant [2 x i8] c")\00" @.str.2504 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2505 = private unnamed_addr constant [33 x i8] c"used .instNote on a null pointer\00" @.str.2506 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2507 = private unnamed_addr constant [31 x i8] c"used .tnames on a null pointer\00" @.str.2508 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2509 = private unnamed_addr constant [30 x i8] c"used .targs on a null pointer\00" @.str.2510 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2511 = private unnamed_addr constant [33 x i8] c"used .instNote on a null pointer\00" @.str.2512 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2513 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.2514 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2515 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2516 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2517 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2518 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2519 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2520 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2521 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2522 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2523 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2524 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2525 = private unnamed_addr constant [12 x i8] c"the struct \00" @.str.2526 = private unnamed_addr constant [27 x i8] c" contains itself; use ptr[\00" @.str.2527 = private unnamed_addr constant [8 x i8] c"] or []\00" @.str.2528 = private unnamed_addr constant [16 x i8] c" for that field\00" @.str.2529 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2530 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2531 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2532 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2533 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.2534 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2535 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2536 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2537 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2538 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.2539 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.2540 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2541 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2542 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2543 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2544 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2545 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2546 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2547 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2548 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2549 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2550 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2551 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2552 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2553 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2554 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2555 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2556 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.2557 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2558 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2559 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2560 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2561 = private unnamed_addr constant [29 x i8] c"used .head on a null pointer\00" @.str.2562 = private unnamed_addr constant [4 x i8] c"%S.\00" @.str.2563 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2564 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2565 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2566 = private unnamed_addr constant [2 x i8] c".\00" @.str.2567 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2568 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2569 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2570 = private unnamed_addr constant [11 x i8] c" = type { \00" @.str.2571 = private unnamed_addr constant [3 x i8] c", \00" @.str.2572 = private unnamed_addr constant [3 x i8] c" }\00" @.str.2573 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2574 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" @.str.2575 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2576 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" @.str.2577 = private unnamed_addr constant [5 x i8] c"null\00" @.str.2578 = private unnamed_addr constant [2 x i8] c"!\00" @.str.2579 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2580 = private unnamed_addr constant [17 x i8] c"division by zero\00" @.str.2581 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.2582 = private unnamed_addr constant [5 x i8] c"char\00" @.str.2583 = private unnamed_addr constant [3 x i8] c"i8\00" @.str.2584 = private unnamed_addr constant [3 x i8] c"u8\00" @.str.2585 = private unnamed_addr constant [4 x i8] c"i16\00" @.str.2586 = private unnamed_addr constant [4 x i8] c"u16\00" @.str.2587 = private unnamed_addr constant [4 x i8] c"i32\00" @.str.2588 = private unnamed_addr constant [4 x i8] c"u32\00" @.str.2589 = private unnamed_addr constant [4 x i8] c"f32\00" @.str.2590 = private unnamed_addr constant [5 x i8] c"enum\00" @.str.2591 = private unnamed_addr constant [4 x i8] c"str\00" @.str.2592 = private unnamed_addr constant [6 x i8] c"array\00" @.str.2593 = private unnamed_addr constant [4 x i8] c"map\00" @.str.2594 = private unnamed_addr constant [6 x i8] c"fixed\00" @.str.2595 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2596 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.2597 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2598 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2599 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2600 = private unnamed_addr constant [43 x i8] c"!DIDerivedType(tag: DW_TAG_member, name: \22\00" @.str.2601 = private unnamed_addr constant [12 x i8] c"\22, scope: !\00" @.str.2602 = private unnamed_addr constant [10 x i8] c", file: !\00" @.str.2603 = private unnamed_addr constant [9 x i8] c", line: \00" @.str.2604 = private unnamed_addr constant [13 x i8] c", baseType: \00" @.str.2605 = private unnamed_addr constant [9 x i8] c", size: \00" @.str.2606 = private unnamed_addr constant [11 x i8] c", offset: \00" @.str.2607 = private unnamed_addr constant [2 x i8] c")\00" @.str.2608 = private unnamed_addr constant [21 x i8] c"!DIBasicType(name: \22\00" @.str.2609 = private unnamed_addr constant [10 x i8] c"\22, size: \00" @.str.2610 = private unnamed_addr constant [13 x i8] c", encoding: \00" @.str.2611 = private unnamed_addr constant [2 x i8] c")\00" @.str.2612 = private unnamed_addr constant [5 x i8] c"void\00" @.str.2613 = private unnamed_addr constant [5 x i8] c"null\00" @.str.2614 = private unnamed_addr constant [3 x i8] c"T:\00" @.str.2615 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2616 = private unnamed_addr constant [32 x i8] c"used .mdcache on a null pointer\00" @.str.2617 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2618 = private unnamed_addr constant [32 x i8] c"used .mdcache on a null pointer\00" @.str.2619 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2620 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2621 = private unnamed_addr constant [32 x i8] c"used .mdfiles on a null pointer\00" @.str.2622 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2623 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.2624 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.2625 = private unnamed_addr constant [15 x i8] c"DW_ATE_boolean\00" @.str.2626 = private unnamed_addr constant [5 x i8] c"char\00" @.str.2627 = private unnamed_addr constant [5 x i8] c"char\00" @.str.2628 = private unnamed_addr constant [19 x i8] c"DW_ATE_signed_char\00" @.str.2629 = private unnamed_addr constant [4 x i8] c"int\00" @.str.2630 = private unnamed_addr constant [4 x i8] c"int\00" @.str.2631 = private unnamed_addr constant [14 x i8] c"DW_ATE_signed\00" @.str.2632 = private unnamed_addr constant [6 x i8] c"float\00" @.str.2633 = private unnamed_addr constant [6 x i8] c"float\00" @.str.2634 = private unnamed_addr constant [13 x i8] c"DW_ATE_float\00" @.str.2635 = private unnamed_addr constant [4 x i8] c"f32\00" @.str.2636 = private unnamed_addr constant [4 x i8] c"f32\00" @.str.2637 = private unnamed_addr constant [13 x i8] c"DW_ATE_float\00" @.str.2638 = private unnamed_addr constant [16 x i8] c"DW_ATE_unsigned\00" @.str.2639 = private unnamed_addr constant [14 x i8] c"DW_ATE_signed\00" @.str.2640 = private unnamed_addr constant [5 x i8] c"enum\00" @.str.2641 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2642 = private unnamed_addr constant [30 x i8] c"used .enums on a null pointer\00" @.str.2643 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2644 = private unnamed_addr constant [22 x i8] c"!DIEnumerator(name: \22\00" @.str.2645 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2646 = private unnamed_addr constant [11 x i8] c"\22, value: \00" @.str.2647 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2648 = private unnamed_addr constant [2 x i8] c")\00" @.str.2649 = private unnamed_addr constant [55 x i8] c"!DICompositeType(tag: DW_TAG_enumeration_type, name: \22\00" @.str.2650 = private unnamed_addr constant [11 x i8] c"\22, file: !\00" @.str.2651 = private unnamed_addr constant [25 x i8] c", size: 32, elements: !{\00" @.str.2652 = private unnamed_addr constant [3 x i8] c", \00" @.str.2653 = private unnamed_addr constant [3 x i8] c"})\00" @.str.2654 = private unnamed_addr constant [1 x i8] c"\00" @.str.2655 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2656 = private unnamed_addr constant [32 x i8] c"used .mdcache on a null pointer\00" @.str.2657 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.2658 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2659 = private unnamed_addr constant [52 x i8] c"!DIDerivedType(tag: DW_TAG_pointer_type, baseType: \00" @.str.2660 = private unnamed_addr constant [12 x i8] c", size: 64)\00" @.str.2661 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2662 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" @.str.2663 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2664 = private unnamed_addr constant [6 x i8] c"fixed\00" @.str.2665 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2666 = private unnamed_addr constant [20 x i8] c"!DISubrange(count: \00" @.str.2667 = private unnamed_addr constant [2 x i8] c")\00" @.str.2668 = private unnamed_addr constant [52 x i8] c"!DICompositeType(tag: DW_TAG_array_type, baseType: \00" @.str.2669 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2670 = private unnamed_addr constant [9 x i8] c", size: \00" @.str.2671 = private unnamed_addr constant [16 x i8] c", elements: !{!\00" @.str.2672 = private unnamed_addr constant [3 x i8] c"})\00" @.str.2673 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2674 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" @.str.2675 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2676 = private unnamed_addr constant [4 x i8] c"str\00" @.str.2677 = private unnamed_addr constant [6 x i8] c"array\00" @.str.2678 = private unnamed_addr constant [5 x i8] c"char\00" @.str.2679 = private unnamed_addr constant [6 x i8] c"array\00" @.str.2680 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2681 = private unnamed_addr constant [52 x i8] c"!DIDerivedType(tag: DW_TAG_pointer_type, baseType: \00" @.str.2682 = private unnamed_addr constant [12 x i8] c", size: 64)\00" @.str.2683 = private unnamed_addr constant [4 x i8] c"int\00" @.str.2684 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.2685 = private unnamed_addr constant [4 x i8] c"len\00" @.str.2686 = private unnamed_addr constant [4 x i8] c"cap\00" @.str.2687 = private unnamed_addr constant [53 x i8] c"!DICompositeType(tag: DW_TAG_structure_type, name: \22\00" @.str.2688 = private unnamed_addr constant [11 x i8] c"\22, file: !\00" @.str.2689 = private unnamed_addr constant [38 x i8] c", size: 192, align: 64, elements: !{!\00" @.str.2690 = private unnamed_addr constant [4 x i8] c", !\00" @.str.2691 = private unnamed_addr constant [4 x i8] c", !\00" @.str.2692 = private unnamed_addr constant [3 x i8] c"})\00" @.str.2693 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2694 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" @.str.2695 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2696 = private unnamed_addr constant [4 x i8] c"map\00" @.str.2697 = private unnamed_addr constant [4 x i8] c"int\00" @.str.2698 = private unnamed_addr constant [67 x i8] c"!DIDerivedType(tag: DW_TAG_pointer_type, baseType: null, size: 64)\00" @.str.2699 = private unnamed_addr constant [8 x i8] c"entries\00" @.str.2700 = private unnamed_addr constant [4 x i8] c"len\00" @.str.2701 = private unnamed_addr constant [5 x i8] c"used\00" @.str.2702 = private unnamed_addr constant [4 x i8] c"cap\00" @.str.2703 = private unnamed_addr constant [6 x i8] c"index\00" @.str.2704 = private unnamed_addr constant [5 x i8] c"icap\00" @.str.2705 = private unnamed_addr constant [5 x i8] c"adds\00" @.str.2706 = private unnamed_addr constant [2 x i8] c"!\00" @.str.2707 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2708 = private unnamed_addr constant [53 x i8] c"!DICompositeType(tag: DW_TAG_structure_type, name: \22\00" @.str.2709 = private unnamed_addr constant [11 x i8] c"\22, file: !\00" @.str.2710 = private unnamed_addr constant [37 x i8] c", size: 448, align: 64, elements: !{\00" @.str.2711 = private unnamed_addr constant [3 x i8] c", \00" @.str.2712 = private unnamed_addr constant [3 x i8] c"})\00" @.str.2713 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2714 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" @.str.2715 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2716 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.2717 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2718 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.2719 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2720 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2721 = private unnamed_addr constant [2 x i8] c"!\00" @.str.2722 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2723 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2724 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2725 = private unnamed_addr constant [53 x i8] c"!DICompositeType(tag: DW_TAG_structure_type, name: \22\00" @.str.2726 = private unnamed_addr constant [11 x i8] c"\22, file: !\00" @.str.2727 = private unnamed_addr constant [9 x i8] c", size: \00" @.str.2728 = private unnamed_addr constant [25 x i8] c", align: 8, elements: !{\00" @.str.2729 = private unnamed_addr constant [3 x i8] c", \00" @.str.2730 = private unnamed_addr constant [3 x i8] c"})\00" @.str.2731 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2732 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" @.str.2733 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2734 = private unnamed_addr constant [21 x i8] c"!DIBasicType(name: \22\00" @.str.2735 = private unnamed_addr constant [40 x i8] c"\22, size: 64, encoding: DW_ATE_unsigned)\00" @.str.2736 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2737 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" @.str.2738 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2739 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2740 = private unnamed_addr constant [32 x i8] c"used .mdcache on a null pointer\00" @.str.2741 = private unnamed_addr constant [3 x i8] c"L:\00" @.str.2742 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2743 = private unnamed_addr constant [32 x i8] c"used .dbgLine on a null pointer\00" @.str.2744 = private unnamed_addr constant [2 x i8] c":\00" @.str.2745 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2746 = private unnamed_addr constant [31 x i8] c"used .dbgCol on a null pointer\00" @.str.2747 = private unnamed_addr constant [2 x i8] c":\00" @.str.2748 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2749 = private unnamed_addr constant [33 x i8] c"used .dbgScope on a null pointer\00" @.str.2750 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2751 = private unnamed_addr constant [32 x i8] c"used .mdcache on a null pointer\00" @.str.2752 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2753 = private unnamed_addr constant [32 x i8] c"used .mdcache on a null pointer\00" @.str.2754 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2755 = private unnamed_addr constant [19 x i8] c"!DILocation(line: \00" @.str.2756 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2757 = private unnamed_addr constant [32 x i8] c"used .dbgLine on a null pointer\00" @.str.2758 = private unnamed_addr constant [11 x i8] c", column: \00" @.str.2759 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2760 = private unnamed_addr constant [31 x i8] c"used .dbgCol on a null pointer\00" @.str.2761 = private unnamed_addr constant [11 x i8] c", scope: !\00" @.str.2762 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2763 = private unnamed_addr constant [33 x i8] c"used .dbgScope on a null pointer\00" @.str.2764 = private unnamed_addr constant [2 x i8] c")\00" @.str.2765 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2766 = private unnamed_addr constant [32 x i8] c"used .mdcache on a null pointer\00" @.str.2767 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2768 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.2769 = private unnamed_addr constant [5 x i8] c"null\00" @.str.2770 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2771 = private unnamed_addr constant [32 x i8] c"used .mdfiles on a null pointer\00" @.str.2772 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2773 = private unnamed_addr constant [28 x i8] c"!DISubroutineType(types: !{\00" @.str.2774 = private unnamed_addr constant [3 x i8] c", \00" @.str.2775 = private unnamed_addr constant [3 x i8] c"})\00" @.str.2776 = private unnamed_addr constant [31 x i8] c"distinct !DISubprogram(name: \22\00" @.str.2777 = private unnamed_addr constant [18 x i8] c"\22, linkageName: \22\00" @.str.2778 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2779 = private unnamed_addr constant [12 x i8] c"\22, scope: !\00" @.str.2780 = private unnamed_addr constant [10 x i8] c", file: !\00" @.str.2781 = private unnamed_addr constant [9 x i8] c", line: \00" @.str.2782 = private unnamed_addr constant [10 x i8] c", type: !\00" @.str.2783 = private unnamed_addr constant [14 x i8] c", scopeLine: \00" @.str.2784 = private unnamed_addr constant [88 x i8] c", flags: DIFlagPrototyped, spFlags: DISPFlagDefinition | DISPFlagLocalToUnit, unit: !0)\00" @.str.2785 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2786 = private unnamed_addr constant [30 x i8] c"used .debug on a null pointer\00" @.str.2787 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2788 = private unnamed_addr constant [33 x i8] c"used .dbgScope on a null pointer\00" @.str.2789 = private unnamed_addr constant [1 x i8] c"\00" @.str.2790 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2791 = private unnamed_addr constant [31 x i8] c"used .dbgArg on a null pointer\00" @.str.2792 = private unnamed_addr constant [8 x i8] c", arg: \00" @.str.2793 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2794 = private unnamed_addr constant [31 x i8] c"used .dbgArg on a null pointer\00" @.str.2795 = private unnamed_addr constant [25 x i8] c"!DILocalVariable(name: \22\00" @.str.2796 = private unnamed_addr constant [12 x i8] c"\22, scope: !\00" @.str.2797 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2798 = private unnamed_addr constant [33 x i8] c"used .dbgScope on a null pointer\00" @.str.2799 = private unnamed_addr constant [10 x i8] c", file: !\00" @.str.2800 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2801 = private unnamed_addr constant [32 x i8] c"used .mdfiles on a null pointer\00" @.str.2802 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2803 = private unnamed_addr constant [9 x i8] c", line: \00" @.str.2804 = private unnamed_addr constant [10 x i8] c", type: !\00" @.str.2805 = private unnamed_addr constant [2 x i8] c")\00" @.str.2806 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2807 = private unnamed_addr constant [32 x i8] c"used .dbgLine on a null pointer\00" @.str.2808 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2809 = private unnamed_addr constant [31 x i8] c"used .dbgCol on a null pointer\00" @.str.2810 = private unnamed_addr constant [42 x i8] c"call void @llvm.dbg.declare(metadata ptr \00" @.str.2811 = private unnamed_addr constant [13 x i8] c", metadata !\00" @.str.2812 = private unnamed_addr constant [28 x i8] c", metadata !DIExpression())\00" @.str.2813 = private unnamed_addr constant [21 x i8] c"!llvm.dbg.cu = !{!0}\00" @.str.2814 = private unnamed_addr constant [31 x i8] c"!llvm.module.flags = !{!1, !2}\00" @.str.2815 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2816 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" @.str.2817 = private unnamed_addr constant [2 x i8] c"!\00" @.str.2818 = private unnamed_addr constant [4 x i8] c" = \00" @.str.2819 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2820 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" @.str.2821 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2822 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.2823 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.2824 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2825 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.2826 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2827 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2828 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.2829 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2830 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.2831 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2832 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.2833 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2834 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.2835 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2836 = private unnamed_addr constant [31 x i8] c"used .tnames on a null pointer\00" @.str.2837 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2838 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.2839 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2840 = private unnamed_addr constant [30 x i8] c"used .targs on a null pointer\00" @.str.2841 = private unnamed_addr constant [1 x i8] c"\00" @.str.2842 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2843 = private unnamed_addr constant [33 x i8] c"used .instNote on a null pointer\00" @.str.2844 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2845 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.2846 = private unnamed_addr constant [18 x i8] c" (while building \00" @.str.2847 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2848 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.2849 = private unnamed_addr constant [2 x i8] c")\00" @.str.2850 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2851 = private unnamed_addr constant [33 x i8] c"used .instNote on a null pointer\00" @.str.2852 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2853 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.2854 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2855 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.2856 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2857 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2858 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.2859 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2860 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2861 = private unnamed_addr constant [29 x i8] c"used .body on a null pointer\00" @.str.2862 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2863 = private unnamed_addr constant [32 x i8] c"used .allocas on a null pointer\00" @.str.2864 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2865 = private unnamed_addr constant [28 x i8] c"used .tmp on a null pointer\00" @.str.2866 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2867 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" @.str.2868 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2869 = private unnamed_addr constant [30 x i8] c"used .nvars on a null pointer\00" @.str.2870 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2871 = private unnamed_addr constant [33 x i8] c"used .dbgScope on a null pointer\00" @.str.2872 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2873 = private unnamed_addr constant [30 x i8] c"used .debug on a null pointer\00" @.str.2874 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2875 = private unnamed_addr constant [33 x i8] c"used .dbgScope on a null pointer\00" @.str.2876 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2877 = private unnamed_addr constant [32 x i8] c"used .dbgLine on a null pointer\00" @.str.2878 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2879 = private unnamed_addr constant [31 x i8] c"used .dbgCol on a null pointer\00" @.str.2880 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2881 = private unnamed_addr constant [32 x i8] c"used .deferOn on a null pointer\00" @.str.2882 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2883 = private unnamed_addr constant [32 x i8] c"used .inDefer on a null pointer\00" @.str.2884 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2885 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" @.str.2886 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2887 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.2888 = private unnamed_addr constant [10 x i8] c"ptr %self\00" @.str.2889 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.2890 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2891 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.2892 = private unnamed_addr constant [5 x i8] c"enum\00" @.str.2893 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2894 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.2895 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2896 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.2897 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2898 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" @.str.2899 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2900 = private unnamed_addr constant [5 x i8] c"self\00" @.str.2901 = private unnamed_addr constant [6 x i8] c"%self\00" @.str.2902 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2903 = private unnamed_addr constant [30 x i8] c"used .debug on a null pointer\00" @.str.2904 = private unnamed_addr constant [5 x i8] c"self\00" @.str.2905 = private unnamed_addr constant [6 x i8] c"%self\00" @.str.2906 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2907 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.2908 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2909 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.2910 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2911 = private unnamed_addr constant [4 x i8] c" %p\00" @.str.2912 = private unnamed_addr constant [3 x i8] c"%p\00" @.str.2913 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2914 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.2915 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2916 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2917 = private unnamed_addr constant [31 x i8] c"used .dbgArg on a null pointer\00" @.str.2918 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2919 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.2920 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2921 = private unnamed_addr constant [31 x i8] c"used .dbgArg on a null pointer\00" @.str.2922 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2923 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2924 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.2925 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2926 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2927 = private unnamed_addr constant [31 x i8] c"used .dbgArg on a null pointer\00" @.str.2928 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2929 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2930 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" @.str.2931 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2932 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.2933 = private unnamed_addr constant [5 x i8] c"void\00" @.str.2934 = private unnamed_addr constant [11 x i8] c"function '\00" @.str.2935 = private unnamed_addr constant [39 x i8] c"' can reach its end without returning \00" @.str.2936 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2937 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.2938 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2939 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.2940 = private unnamed_addr constant [5 x i8] c"ret \00" @.str.2941 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2942 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.2943 = private unnamed_addr constant [54 x i8] c" { i1 true, i8 0, { ptr, i64, i64 } zeroinitializer }\00" @.str.2944 = private unnamed_addr constant [9 x i8] c"ret void\00" @.str.2945 = private unnamed_addr constant [1 x i8] c"\00" @.str.2946 = private unnamed_addr constant [8 x i8] c" !dbg !\00" @.str.2947 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2948 = private unnamed_addr constant [33 x i8] c"used .dbgScope on a null pointer\00" @.str.2949 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2950 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.2951 = private unnamed_addr constant [17 x i8] c"define internal \00" @.str.2952 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2953 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.2954 = private unnamed_addr constant [2 x i8] c" \00" @.str.2955 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2956 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.2957 = private unnamed_addr constant [2 x i8] c"(\00" @.str.2958 = private unnamed_addr constant [3 x i8] c", \00" @.str.2959 = private unnamed_addr constant [2 x i8] c")\00" @.str.2960 = private unnamed_addr constant [11 x i8] c" {\0Aentry:\0A\00" @.str.2961 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2962 = private unnamed_addr constant [32 x i8] c"used .allocas on a null pointer\00" @.str.2963 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.2964 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.2965 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2966 = private unnamed_addr constant [29 x i8] c"used .body on a null pointer\00" @.str.2967 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.2968 = private unnamed_addr constant [4 x i8] c"\0A}\0A\00" @.str.2969 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2970 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" @.str.2971 = private unnamed_addr constant [67 x i8] c"this code can never run (it comes after return, break or continue)\00" @.str.2972 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2973 = private unnamed_addr constant [32 x i8] c"used .dbgLine on a null pointer\00" @.str.2974 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2975 = private unnamed_addr constant [31 x i8] c"used .dbgCol on a null pointer\00" @.str.2976 = private unnamed_addr constant [6 x i8] c"block\00" @.str.2977 = private unnamed_addr constant [5 x i8] c"decl\00" @.str.2978 = private unnamed_addr constant [7 x i8] c"assign\00" @.str.2979 = private unnamed_addr constant [5 x i8] c"expr\00" @.str.2980 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2981 = private unnamed_addr constant [3 x i8] c"or\00" @.str.2982 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2983 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2984 = private unnamed_addr constant [6 x i8] c"match\00" @.str.2985 = private unnamed_addr constant [3 x i8] c"if\00" @.str.2986 = private unnamed_addr constant [6 x i8] c"while\00" @.str.2987 = private unnamed_addr constant [4 x i8] c"for\00" @.str.2988 = private unnamed_addr constant [5 x i8] c"each\00" @.str.2989 = private unnamed_addr constant [7 x i8] c"return\00" @.str.2990 = private unnamed_addr constant [6 x i8] c"defer\00" @.str.2991 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2992 = private unnamed_addr constant [32 x i8] c"used .inDefer on a null pointer\00" @.str.2993 = private unnamed_addr constant [34 x i8] c"defer inside defer is not allowed\00" @.str.2994 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2995 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" @.str.2996 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2997 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" @.str.2998 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.2999 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3000 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3001 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" @.str.3002 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3003 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3004 = private unnamed_addr constant [30 x i8] c"used .nvars on a null pointer\00" @.str.3005 = private unnamed_addr constant [6 x i8] c"break\00" @.str.3006 = private unnamed_addr constant [9 x i8] c"continue\00" @.str.3007 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3008 = private unnamed_addr constant [32 x i8] c"used .inDefer on a null pointer\00" @.str.3009 = private unnamed_addr constant [28 x i8] c" can't be used inside defer\00" @.str.3010 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3011 = private unnamed_addr constant [30 x i8] c"used .loops on a null pointer\00" @.str.3012 = private unnamed_addr constant [32 x i8] c" can only be used inside a loop\00" @.str.3013 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3014 = private unnamed_addr constant [30 x i8] c"used .loops on a null pointer\00" @.str.3015 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3016 = private unnamed_addr constant [30 x i8] c"used .loops on a null pointer\00" @.str.3017 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3018 = private unnamed_addr constant [6 x i8] c"break\00" @.str.3019 = private unnamed_addr constant [19 x i8] c"unknown statement \00" @.str.3020 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3021 = private unnamed_addr constant [5 x i8] c"void\00" @.str.3022 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3023 = private unnamed_addr constant [47 x i8] c"this gives back nothing, so it can't be stored\00" @.str.3024 = private unnamed_addr constant [5 x i8] c"null\00" @.str.3025 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3026 = private unnamed_addr constant [35 x i8] c"null needs a type, like: ptr[int] \00" @.str.3027 = private unnamed_addr constant [8 x i8] c" = null\00" @.str.3028 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.3029 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3030 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3031 = private unnamed_addr constant [2 x i8] c"'\00" @.str.3032 = private unnamed_addr constant [2 x i8] c"'\00" @.str.3033 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3034 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.3035 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3036 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3037 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.3038 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3039 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3040 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3041 = private unnamed_addr constant [4 x i8] c"var\00" @.str.3042 = private unnamed_addr constant [29 x i8] c"there is no variable named '\00" @.str.3043 = private unnamed_addr constant [19 x i8] c"' (create it with \00" @.str.3044 = private unnamed_addr constant [9 x i8] c" := ...)\00" @.str.3045 = private unnamed_addr constant [20 x i8] c"the loop variable '\00" @.str.3046 = private unnamed_addr constant [19 x i8] c"' can't be changed\00" @.str.3047 = private unnamed_addr constant [10 x i8] c"the value\00" @.str.3048 = private unnamed_addr constant [4 x i8] c"var\00" @.str.3049 = private unnamed_addr constant [2 x i8] c"'\00" @.str.3050 = private unnamed_addr constant [2 x i8] c"'\00" @.str.3051 = private unnamed_addr constant [2 x i8] c"=\00" @.str.3052 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3053 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3054 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3055 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3056 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.3057 = private unnamed_addr constant [12 x i8] c"a condition\00" @.str.3058 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3059 = private unnamed_addr constant [5 x i8] c"then\00" @.str.3060 = private unnamed_addr constant [5 x i8] c"else\00" @.str.3061 = private unnamed_addr constant [6 x i8] c"endif\00" @.str.3062 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3063 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3064 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" @.str.3065 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3066 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3067 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" @.str.3068 = private unnamed_addr constant [11 x i8] c"while.cond\00" @.str.3069 = private unnamed_addr constant [11 x i8] c"while.body\00" @.str.3070 = private unnamed_addr constant [10 x i8] c"while.end\00" @.str.3071 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3072 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.3073 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3074 = private unnamed_addr constant [5 x i8] c"true\00" @.str.3075 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3076 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3077 = private unnamed_addr constant [30 x i8] c"used .loops on a null pointer\00" @.str.3078 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3079 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" @.str.3080 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3081 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3082 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3083 = private unnamed_addr constant [30 x i8] c"used .loops on a null pointer\00" @.str.3084 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3085 = private unnamed_addr constant [24 x i8] c"pop() on an empty array\00" @.str.3086 = private unnamed_addr constant [6 x i8] c"break\00" @.str.3087 = private unnamed_addr constant [6 x i8] c"while\00" @.str.3088 = private unnamed_addr constant [4 x i8] c"for\00" @.str.3089 = private unnamed_addr constant [5 x i8] c"each\00" @.str.3090 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3091 = private unnamed_addr constant [4 x i8] c"int\00" @.str.3092 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3093 = private unnamed_addr constant [21 x i8] c"the start of a range\00" @.str.3094 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3095 = private unnamed_addr constant [4 x i8] c"int\00" @.str.3096 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3097 = private unnamed_addr constant [19 x i8] c"the end of a range\00" @.str.3098 = private unnamed_addr constant [4 x i8] c"int\00" @.str.3099 = private unnamed_addr constant [9 x i8] c"for.cond\00" @.str.3100 = private unnamed_addr constant [9 x i8] c"for.body\00" @.str.3101 = private unnamed_addr constant [9 x i8] c"for.step\00" @.str.3102 = private unnamed_addr constant [8 x i8] c"for.end\00" @.str.3103 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.3104 = private unnamed_addr constant [14 x i8] c"icmp slt i64 \00" @.str.3105 = private unnamed_addr constant [3 x i8] c", \00" @.str.3106 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3107 = private unnamed_addr constant [30 x i8] c"used .loops on a null pointer\00" @.str.3108 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3109 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" @.str.3110 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3111 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3112 = private unnamed_addr constant [30 x i8] c"used .loops on a null pointer\00" @.str.3113 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3114 = private unnamed_addr constant [24 x i8] c"pop() on an empty array\00" @.str.3115 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.3116 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.3117 = private unnamed_addr constant [9 x i8] c"add i64 \00" @.str.3118 = private unnamed_addr constant [4 x i8] c", 1\00" @.str.3119 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3120 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3121 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3122 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3123 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.3124 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.3125 = private unnamed_addr constant [2 x i8] c"0\00" @.str.3126 = private unnamed_addr constant [1 x i8] c"\00" @.str.3127 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.3128 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.3129 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.3130 = private unnamed_addr constant [15 x i8] c", i32 0, i32 6\00" @.str.3131 = private unnamed_addr constant [9 x i8] c"map.cond\00" @.str.3132 = private unnamed_addr constant [10 x i8] c"map.check\00" @.str.3133 = private unnamed_addr constant [9 x i8] c"map.body\00" @.str.3134 = private unnamed_addr constant [9 x i8] c"map.step\00" @.str.3135 = private unnamed_addr constant [8 x i8] c"map.end\00" @.str.3136 = private unnamed_addr constant [12 x i8] c"map.changed\00" @.str.3137 = private unnamed_addr constant [9 x i8] c"map.same\00" @.str.3138 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.3139 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.3140 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.3141 = private unnamed_addr constant [15 x i8] c", i32 0, i32 6\00" @.str.3142 = private unnamed_addr constant [13 x i8] c"icmp ne i64 \00" @.str.3143 = private unnamed_addr constant [3 x i8] c", \00" @.str.3144 = private unnamed_addr constant [34 x i8] c"call void @finch_map_changed(ptr \00" @.str.3145 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3146 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" @.str.3147 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3148 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.3149 = private unnamed_addr constant [2 x i8] c")\00" @.str.3150 = private unnamed_addr constant [12 x i8] c"unreachable\00" @.str.3151 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3152 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" @.str.3153 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.3154 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.3155 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.3156 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.3157 = private unnamed_addr constant [15 x i8] c", i32 0, i32 2\00" @.str.3158 = private unnamed_addr constant [14 x i8] c"icmp slt i64 \00" @.str.3159 = private unnamed_addr constant [3 x i8] c", \00" @.str.3160 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.3161 = private unnamed_addr constant [13 x i8] c"icmp eq i64 \00" @.str.3162 = private unnamed_addr constant [4 x i8] c", 0\00" @.str.3163 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3164 = private unnamed_addr constant [30 x i8] c"used .loops on a null pointer\00" @.str.3165 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3166 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" @.str.3167 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3168 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3169 = private unnamed_addr constant [30 x i8] c"used .loops on a null pointer\00" @.str.3170 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3171 = private unnamed_addr constant [24 x i8] c"pop() on an empty array\00" @.str.3172 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.3173 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.3174 = private unnamed_addr constant [9 x i8] c"add i64 \00" @.str.3175 = private unnamed_addr constant [4 x i8] c", 1\00" @.str.3176 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3177 = private unnamed_addr constant [1 x i8] c"\00" @.str.3178 = private unnamed_addr constant [5 x i8] c"void\00" @.str.3179 = private unnamed_addr constant [4 x i8] c"map\00" @.str.3180 = private unnamed_addr constant [6 x i8] c"array\00" @.str.3181 = private unnamed_addr constant [4 x i8] c"str\00" @.str.3182 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3183 = private unnamed_addr constant [56 x i8] c"for ... in needs an array, a str or a map, but this is \00" @.str.3184 = private unnamed_addr constant [37 x i8] c" (for a range of numbers write 0..n)\00" @.str.3185 = private unnamed_addr constant [5 x i8] c"char\00" @.str.3186 = private unnamed_addr constant [6 x i8] c"array\00" @.str.3187 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3188 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3189 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3190 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.3191 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.3192 = private unnamed_addr constant [2 x i8] c"0\00" @.str.3193 = private unnamed_addr constant [10 x i8] c"each.cond\00" @.str.3194 = private unnamed_addr constant [10 x i8] c"each.body\00" @.str.3195 = private unnamed_addr constant [10 x i8] c"each.step\00" @.str.3196 = private unnamed_addr constant [9 x i8] c"each.end\00" @.str.3197 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.3198 = private unnamed_addr constant [47 x i8] c"getelementptr inbounds { ptr, i64, i64 }, ptr \00" @.str.3199 = private unnamed_addr constant [15 x i8] c", i32 0, i32 1\00" @.str.3200 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.3201 = private unnamed_addr constant [14 x i8] c"icmp slt i64 \00" @.str.3202 = private unnamed_addr constant [3 x i8] c", \00" @.str.3203 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.3204 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.3205 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.3206 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.3207 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3208 = private unnamed_addr constant [30 x i8] c"used .loops on a null pointer\00" @.str.3209 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3210 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" @.str.3211 = private unnamed_addr constant [4 x i8] c"int\00" @.str.3212 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3213 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3214 = private unnamed_addr constant [30 x i8] c"used .loops on a null pointer\00" @.str.3215 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3216 = private unnamed_addr constant [24 x i8] c"pop() on an empty array\00" @.str.3217 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.3218 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.3219 = private unnamed_addr constant [9 x i8] c"add i64 \00" @.str.3220 = private unnamed_addr constant [4 x i8] c", 1\00" @.str.3221 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3222 = private unnamed_addr constant [32 x i8] c"used .inDefer on a null pointer\00" @.str.3223 = private unnamed_addr constant [34 x i8] c"return can't be used inside defer\00" @.str.3224 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3225 = private unnamed_addr constant [5 x i8] c"call\00" @.str.3226 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3227 = private unnamed_addr constant [6 x i8] c"error\00" @.str.3228 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3229 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3230 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3231 = private unnamed_addr constant [2 x i8] c"!\00" @.str.3232 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3233 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3234 = private unnamed_addr constant [5 x i8] c"void\00" @.str.3235 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3236 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3237 = private unnamed_addr constant [2 x i8] c"!\00" @.str.3238 = private unnamed_addr constant [2 x i8] c"'\00" @.str.3239 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3240 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3241 = private unnamed_addr constant [65 x i8] c"' can't fail, so it can't return an error (make it fallible: -> \00" @.str.3242 = private unnamed_addr constant [2 x i8] c")\00" @.str.3243 = private unnamed_addr constant [6 x i8] c"error\00" @.str.3244 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3245 = private unnamed_addr constant [4 x i8] c"str\00" @.str.3246 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3247 = private unnamed_addr constant [18 x i8] c"the error message\00" @.str.3248 = private unnamed_addr constant [5 x i8] c"ret \00" @.str.3249 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3250 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3251 = private unnamed_addr constant [2 x i8] c" \00" @.str.3252 = private unnamed_addr constant [13 x i8] c"insertvalue \00" @.str.3253 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3254 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3255 = private unnamed_addr constant [37 x i8] c" zeroinitializer, { ptr, i64, i64 } \00" @.str.3256 = private unnamed_addr constant [4 x i8] c", 2\00" @.str.3257 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3258 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" @.str.3259 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3260 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3261 = private unnamed_addr constant [5 x i8] c"void\00" @.str.3262 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3263 = private unnamed_addr constant [2 x i8] c"'\00" @.str.3264 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3265 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3266 = private unnamed_addr constant [47 x i8] c"' doesn't return a value (it has no '-> type')\00" @.str.3267 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3268 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3269 = private unnamed_addr constant [5 x i8] c"ret \00" @.str.3270 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3271 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3272 = private unnamed_addr constant [54 x i8] c" { i1 true, i8 0, { ptr, i64, i64 } zeroinitializer }\00" @.str.3273 = private unnamed_addr constant [9 x i8] c"ret void\00" @.str.3274 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3275 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" @.str.3276 = private unnamed_addr constant [2 x i8] c"'\00" @.str.3277 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3278 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3279 = private unnamed_addr constant [15 x i8] c"' must return \00" @.str.3280 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3281 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3282 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3283 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3284 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3285 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3286 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3287 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3288 = private unnamed_addr constant [19 x i8] c"the returned value\00" @.str.3289 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3290 = private unnamed_addr constant [4 x i8] c"var\00" @.str.3291 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3292 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3293 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3294 = private unnamed_addr constant [13 x i8] c"insertvalue \00" @.str.3295 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3296 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3297 = private unnamed_addr constant [29 x i8] c" zeroinitializer, i1 true, 0\00" @.str.3298 = private unnamed_addr constant [13 x i8] c"insertvalue \00" @.str.3299 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3300 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3301 = private unnamed_addr constant [2 x i8] c" \00" @.str.3302 = private unnamed_addr constant [3 x i8] c", \00" @.str.3303 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3304 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3305 = private unnamed_addr constant [2 x i8] c" \00" @.str.3306 = private unnamed_addr constant [4 x i8] c", 1\00" @.str.3307 = private unnamed_addr constant [5 x i8] c"ret \00" @.str.3308 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3309 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3310 = private unnamed_addr constant [2 x i8] c" \00" @.str.3311 = private unnamed_addr constant [5 x i8] c"ret \00" @.str.3312 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3313 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3314 = private unnamed_addr constant [2 x i8] c" \00" @.str.3315 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3316 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" @.str.3317 = private unnamed_addr constant [8 x i8] c"{ i64, \00" @.str.3318 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3319 = private unnamed_addr constant [3 x i8] c", \00" @.str.3320 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3321 = private unnamed_addr constant [3 x i8] c" }\00" @.str.3322 = private unnamed_addr constant [30 x i8] c"ptrtoint (ptr getelementptr (\00" @.str.3323 = private unnamed_addr constant [27 x i8] c", ptr null, i32 1) to i64)\00" @.str.3324 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.3325 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.3326 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.3327 = private unnamed_addr constant [15 x i8] c", i32 0, i32 0\00" @.str.3328 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.3329 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.3330 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.3331 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.3332 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.3333 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" @.str.3334 = private unnamed_addr constant [2 x i8] c"0\00" @.str.3335 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3336 = private unnamed_addr constant [4 x i8] c"str\00" @.str.3337 = private unnamed_addr constant [2 x i8] c"1\00" @.str.3338 = private unnamed_addr constant [5 x i8] c"ptr \00" @.str.3339 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.3340 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.3341 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.3342 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3343 = private unnamed_addr constant [7 x i8] c", i32 \00" @.str.3344 = private unnamed_addr constant [26 x i8] c"call i64 @finch_map_find(\00" @.str.3345 = private unnamed_addr constant [2 x i8] c")\00" @.str.3346 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.3347 = private unnamed_addr constant [4 x i8] c"i32\00" @.str.3348 = private unnamed_addr constant [4 x i8] c"i32\00" @.str.3349 = private unnamed_addr constant [2 x i8] c"0\00" @.str.3350 = private unnamed_addr constant [26 x i8] c"call i64 @finch_map_slot(\00" @.str.3351 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.3352 = private unnamed_addr constant [2 x i8] c")\00" @.str.3353 = private unnamed_addr constant [8 x i8] c"map.new\00" @.str.3354 = private unnamed_addr constant [9 x i8] c"map.have\00" @.str.3355 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" @.str.3356 = private unnamed_addr constant [4 x i8] c"i32\00" @.str.3357 = private unnamed_addr constant [4 x i8] c", 0\00" @.str.3358 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3359 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3360 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3361 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3362 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3363 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3364 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3365 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3366 = private unnamed_addr constant [8 x i8] c"the key\00" @.str.3367 = private unnamed_addr constant [45 x i8] c"this is a temporary map, it can't be changed\00" @.str.3368 = private unnamed_addr constant [1 x i8] c"\00" @.str.3369 = private unnamed_addr constant [12 x i8] c"map.missing\00" @.str.3370 = private unnamed_addr constant [10 x i8] c"map.found\00" @.str.3371 = private unnamed_addr constant [14 x i8] c"icmp slt i64 \00" @.str.3372 = private unnamed_addr constant [4 x i8] c", 0\00" @.str.3373 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.3374 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.3375 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" @.str.3376 = private unnamed_addr constant [34 x i8] c"call void @finch_map_missing(ptr \00" @.str.3377 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3378 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" @.str.3379 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3380 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.3381 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.3382 = private unnamed_addr constant [2 x i8] c")\00" @.str.3383 = private unnamed_addr constant [12 x i8] c"unreachable\00" @.str.3384 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3385 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" @.str.3386 = private unnamed_addr constant [4 x i8] c"map\00" @.str.3387 = private unnamed_addr constant [53 x i8] c"an empty [:] needs a type, like: map[str]int m = [:]\00" @.str.3388 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3389 = private unnamed_addr constant [6 x i8] c"unary\00" @.str.3390 = private unnamed_addr constant [2 x i8] c"-\00" @.str.3391 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3392 = private unnamed_addr constant [6 x i8] c"float\00" @.str.3393 = private unnamed_addr constant [4 x i8] c"int\00" @.str.3394 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3395 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3396 = private unnamed_addr constant [5 x i8] c"void\00" @.str.3397 = private unnamed_addr constant [5 x i8] c"null\00" @.str.3398 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3399 = private unnamed_addr constant [36 x i8] c"a map key needs a value with a type\00" @.str.3400 = private unnamed_addr constant [5 x i8] c"void\00" @.str.3401 = private unnamed_addr constant [5 x i8] c"null\00" @.str.3402 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3403 = private unnamed_addr constant [38 x i8] c"a map value needs a value with a type\00" @.str.3404 = private unnamed_addr constant [6 x i8] c"float\00" @.str.3405 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" @.str.3406 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3407 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3408 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3409 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3410 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3411 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3412 = private unnamed_addr constant [22 x i8] c"every key of this map\00" @.str.3413 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3414 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3415 = private unnamed_addr constant [24 x i8] c"every value of this map\00" @.str.3416 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3417 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3418 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3419 = private unnamed_addr constant [4 x i8] c"has\00" @.str.3420 = private unnamed_addr constant [4 x i8] c"get\00" @.str.3421 = private unnamed_addr constant [7 x i8] c"remove\00" @.str.3422 = private unnamed_addr constant [4 x i8] c"get\00" @.str.3423 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3424 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3425 = private unnamed_addr constant [8 x i8] c"the key\00" @.str.3426 = private unnamed_addr constant [14 x i8] c"icmp sge i64 \00" @.str.3427 = private unnamed_addr constant [4 x i8] c", 0\00" @.str.3428 = private unnamed_addr constant [4 x i8] c"has\00" @.str.3429 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.3430 = private unnamed_addr constant [7 x i8] c"remove\00" @.str.3431 = private unnamed_addr constant [11 x i8] c"remove.hit\00" @.str.3432 = private unnamed_addr constant [11 x i8] c"remove.end\00" @.str.3433 = private unnamed_addr constant [36 x i8] c"call void @finch_map_remove_at(ptr \00" @.str.3434 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.3435 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.3436 = private unnamed_addr constant [2 x i8] c")\00" @.str.3437 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.3438 = private unnamed_addr constant [10 x i8] c"get.found\00" @.str.3439 = private unnamed_addr constant [12 x i8] c"get.missing\00" @.str.3440 = private unnamed_addr constant [9 x i8] c"get.fend\00" @.str.3441 = private unnamed_addr constant [9 x i8] c"get.mend\00" @.str.3442 = private unnamed_addr constant [8 x i8] c"get.end\00" @.str.3443 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3444 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3445 = private unnamed_addr constant [12 x i8] c"the default\00" @.str.3446 = private unnamed_addr constant [5 x i8] c"phi \00" @.str.3447 = private unnamed_addr constant [4 x i8] c" [ \00" @.str.3448 = private unnamed_addr constant [4 x i8] c", %\00" @.str.3449 = private unnamed_addr constant [7 x i8] c" ], [ \00" @.str.3450 = private unnamed_addr constant [4 x i8] c", %\00" @.str.3451 = private unnamed_addr constant [3 x i8] c" ]\00" @.str.3452 = private unnamed_addr constant [6 x i8] c"clear\00" @.str.3453 = private unnamed_addr constant [32 x i8] c"call void @finch_map_clear(ptr \00" @.str.3454 = private unnamed_addr constant [2 x i8] c")\00" @.str.3455 = private unnamed_addr constant [5 x i8] c"void\00" @.str.3456 = private unnamed_addr constant [5 x i8] c"keys\00" @.str.3457 = private unnamed_addr constant [7 x i8] c"values\00" @.str.3458 = private unnamed_addr constant [7 x i8] c"values\00" @.str.3459 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.3460 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.3461 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" @.str.3462 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.3463 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.3464 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.3465 = private unnamed_addr constant [15 x i8] c", i32 0, i32 1\00" @.str.3466 = private unnamed_addr constant [31 x i8] c"call void @finch_arr_make(ptr \00" @.str.3467 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.3468 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.3469 = private unnamed_addr constant [2 x i8] c")\00" @.str.3470 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.3471 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.3472 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.3473 = private unnamed_addr constant [2 x i8] c"0\00" @.str.3474 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.3475 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.3476 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.3477 = private unnamed_addr constant [15 x i8] c", i32 0, i32 2\00" @.str.3478 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3479 = private unnamed_addr constant [11 x i8] c"entry.live\00" @.str.3480 = private unnamed_addr constant [11 x i8] c"entry.next\00" @.str.3481 = private unnamed_addr constant [13 x i8] c"icmp ne i64 \00" @.str.3482 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.3483 = private unnamed_addr constant [4 x i8] c", 0\00" @.str.3484 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.3485 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.3486 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.3487 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.3488 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.3489 = private unnamed_addr constant [9 x i8] c"add i64 \00" @.str.3490 = private unnamed_addr constant [4 x i8] c", 1\00" @.str.3491 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.3492 = private unnamed_addr constant [22 x i8] c"a map has no method '\00" @.str.3493 = private unnamed_addr constant [50 x i8] c"' (it has: has, get, remove, clear, keys, values)\00" @.str.3494 = private unnamed_addr constant [5 x i8] c"enum\00" @.str.3495 = private unnamed_addr constant [4 x i8] c"var\00" @.str.3496 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3497 = private unnamed_addr constant [30 x i8] c"used .enums on a null pointer\00" @.str.3498 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3499 = private unnamed_addr constant [2 x i8] c"'\00" @.str.3500 = private unnamed_addr constant [23 x i8] c"' is not a variant of \00" @.str.3501 = private unnamed_addr constant [11 x i8] c" (it has: \00" @.str.3502 = private unnamed_addr constant [3 x i8] c", \00" @.str.3503 = private unnamed_addr constant [2 x i8] c")\00" @.str.3504 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3505 = private unnamed_addr constant [13 x i8] c"this pattern\00" @.str.3506 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3507 = private unnamed_addr constant [5 x i8] c"void\00" @.str.3508 = private unnamed_addr constant [5 x i8] c"null\00" @.str.3509 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3510 = private unnamed_addr constant [31 x i8] c"there is nothing to match here\00" @.str.3511 = private unnamed_addr constant [10 x i8] c"match.end\00" @.str.3512 = private unnamed_addr constant [5 x i8] c"void\00" @.str.3513 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3514 = private unnamed_addr constant [73 x i8] c"this arm can never be used: 'else' already takes everything that is left\00" @.str.3515 = private unnamed_addr constant [10 x i8] c"match.arm\00" @.str.3516 = private unnamed_addr constant [11 x i8] c"match.next\00" @.str.3517 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3518 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3519 = private unnamed_addr constant [5 x i8] c"enum\00" @.str.3520 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3521 = private unnamed_addr constant [50 x i8] c"this variant is already handled by an earlier arm\00" @.str.3522 = private unnamed_addr constant [3 x i8] c"==\00" @.str.3523 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3524 = private unnamed_addr constant [9 x i8] c"match.or\00" @.str.3525 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3526 = private unnamed_addr constant [5 x i8] c"void\00" @.str.3527 = private unnamed_addr constant [5 x i8] c"void\00" @.str.3528 = private unnamed_addr constant [5 x i8] c"null\00" @.str.3529 = private unnamed_addr constant [53 x i8] c"an arm of a match that gives a value has to give one\00" @.str.3530 = private unnamed_addr constant [58 x i8] c"this arm (the arms of a match have to give the same type)\00" @.str.3531 = private unnamed_addr constant [11 x i8] c"match.from\00" @.str.3532 = private unnamed_addr constant [6 x i8] c"block\00" @.str.3533 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3534 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" @.str.3535 = private unnamed_addr constant [5 x i8] c"enum\00" @.str.3536 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3537 = private unnamed_addr constant [30 x i8] c"used .enums on a null pointer\00" @.str.3538 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3539 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3540 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3541 = private unnamed_addr constant [27 x i8] c"this match doesn't handle \00" @.str.3542 = private unnamed_addr constant [3 x i8] c", \00" @.str.3543 = private unnamed_addr constant [30 x i8] c" (add them, or an 'else' arm)\00" @.str.3544 = private unnamed_addr constant [12 x i8] c"a match on \00" @.str.3545 = private unnamed_addr constant [55 x i8] c" needs an 'else' arm for everything that is not listed\00" @.str.3546 = private unnamed_addr constant [5 x i8] c"true\00" @.str.3547 = private unnamed_addr constant [36 x i8] c"no arm of this match fits the value\00" @.str.3548 = private unnamed_addr constant [12 x i8] c"unreachable\00" @.str.3549 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3550 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" @.str.3551 = private unnamed_addr constant [12 x i8] c"unreachable\00" @.str.3552 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3553 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" @.str.3554 = private unnamed_addr constant [5 x i8] c"void\00" @.str.3555 = private unnamed_addr constant [5 x i8] c"phi \00" @.str.3556 = private unnamed_addr constant [2 x i8] c" \00" @.str.3557 = private unnamed_addr constant [5 x i8] c"void\00" @.str.3558 = private unnamed_addr constant [3 x i8] c"[ \00" @.str.3559 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3560 = private unnamed_addr constant [4 x i8] c", %\00" @.str.3561 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3562 = private unnamed_addr constant [3 x i8] c" ]\00" @.str.3563 = private unnamed_addr constant [3 x i8] c", \00" @.str.3564 = private unnamed_addr constant [5 x i8] c"call\00" @.str.3565 = private unnamed_addr constant [7 x i8] c"method\00" @.str.3566 = private unnamed_addr constant [81 x i8] c"only a function call can fail; 'or' and 'try' go after one, like int(text) or 0\00" @.str.3567 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3568 = private unnamed_addr constant [32 x i8] c"used .ftarget on a null pointer\00" @.str.3569 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3570 = private unnamed_addr constant [32 x i8] c"used .ffailed on a null pointer\00" @.str.3571 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3572 = private unnamed_addr constant [29 x i8] c"used .fmsg on a null pointer\00" @.str.3573 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3574 = private unnamed_addr constant [32 x i8] c"used .ftarget on a null pointer\00" @.str.3575 = private unnamed_addr constant [1 x i8] c"\00" @.str.3576 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3577 = private unnamed_addr constant [32 x i8] c"used .ffailed on a null pointer\00" @.str.3578 = private unnamed_addr constant [1 x i8] c"\00" @.str.3579 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3580 = private unnamed_addr constant [29 x i8] c"used .fmsg on a null pointer\00" @.str.3581 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3582 = private unnamed_addr constant [32 x i8] c"used .ffailed on a null pointer\00" @.str.3583 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3584 = private unnamed_addr constant [29 x i8] c"used .fmsg on a null pointer\00" @.str.3585 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3586 = private unnamed_addr constant [32 x i8] c"used .ftarget on a null pointer\00" @.str.3587 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3588 = private unnamed_addr constant [32 x i8] c"used .ffailed on a null pointer\00" @.str.3589 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3590 = private unnamed_addr constant [29 x i8] c"used .fmsg on a null pointer\00" @.str.3591 = private unnamed_addr constant [51 x i8] c"this call can't fail, so it needs no 'or' or 'try'\00" @.str.3592 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3593 = private unnamed_addr constant [32 x i8] c"used .inDefer on a null pointer\00" @.str.3594 = private unnamed_addr constant [31 x i8] c"try can't be used inside defer\00" @.str.3595 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3596 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3597 = private unnamed_addr constant [2 x i8] c"!\00" @.str.3598 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3599 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3600 = private unnamed_addr constant [5 x i8] c"void\00" @.str.3601 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3602 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3603 = private unnamed_addr constant [2 x i8] c"!\00" @.str.3604 = private unnamed_addr constant [30 x i8] c"try passes the error on, so '\00" @.str.3605 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3606 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3607 = private unnamed_addr constant [32 x i8] c"' must be able to fail too (-> \00" @.str.3608 = private unnamed_addr constant [56 x i8] c"); or handle it here: ... or / ... or { ... }\00" @.str.3609 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3610 = private unnamed_addr constant [11 x i8] c"try.failed\00" @.str.3611 = private unnamed_addr constant [7 x i8] c"try.ok\00" @.str.3612 = private unnamed_addr constant [5 x i8] c"ret \00" @.str.3613 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3614 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3615 = private unnamed_addr constant [2 x i8] c" \00" @.str.3616 = private unnamed_addr constant [13 x i8] c"insertvalue \00" @.str.3617 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3618 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" @.str.3619 = private unnamed_addr constant [37 x i8] c" zeroinitializer, { ptr, i64, i64 } \00" @.str.3620 = private unnamed_addr constant [4 x i8] c", 2\00" @.str.3621 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3622 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" @.str.3623 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3624 = private unnamed_addr constant [10 x i8] c"or.failed\00" @.str.3625 = private unnamed_addr constant [6 x i8] c"or.ok\00" @.str.3626 = private unnamed_addr constant [4 x i8] c"err\00" @.str.3627 = private unnamed_addr constant [4 x i8] c"str\00" @.str.3628 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3629 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3630 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" @.str.3631 = private unnamed_addr constant [5 x i8] c"void\00" @.str.3632 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3633 = private unnamed_addr constant [143 x i8] c"this block must leave with return, break, continue or exit(...): after a failure there is no value to go on with (or give one: ... or )\00" @.str.3634 = private unnamed_addr constant [5 x i8] c"void\00" @.str.3635 = private unnamed_addr constant [7 x i8] c"or.end\00" @.str.3636 = private unnamed_addr constant [5 x i8] c"void\00" @.str.3637 = private unnamed_addr constant [5 x i8] c"void\00" @.str.3638 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3639 = private unnamed_addr constant [99 x i8] c"this call gives back no value, so there is nothing to replace; handle the failure with or { ... }\00" @.str.3640 = private unnamed_addr constant [4 x i8] c"err\00" @.str.3641 = private unnamed_addr constant [4 x i8] c"str\00" @.str.3642 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3643 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3644 = private unnamed_addr constant [21 x i8] c"the value after 'or'\00" @.str.3645 = private unnamed_addr constant [8 x i8] c"or.bend\00" @.str.3646 = private unnamed_addr constant [7 x i8] c"or.end\00" @.str.3647 = private unnamed_addr constant [5 x i8] c"phi \00" @.str.3648 = private unnamed_addr constant [4 x i8] c" [ \00" @.str.3649 = private unnamed_addr constant [4 x i8] c", %\00" @.str.3650 = private unnamed_addr constant [7 x i8] c" ], [ \00" @.str.3651 = private unnamed_addr constant [4 x i8] c", %\00" @.str.3652 = private unnamed_addr constant [3 x i8] c" ]\00" @.str.3653 = private unnamed_addr constant [6 x i8] c"array\00" @.str.3654 = private unnamed_addr constant [4 x i8] c"map\00" @.str.3655 = private unnamed_addr constant [4 x i8] c"int\00" @.str.3656 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3657 = private unnamed_addr constant [3 x i8] c"0x\00" @.str.3658 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3659 = private unnamed_addr constant [3 x i8] c"0X\00" @.str.3660 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3661 = private unnamed_addr constant [4 x i8] c"int\00" @.str.3662 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3663 = private unnamed_addr constant [4 x i8] c"int\00" @.str.3664 = private unnamed_addr constant [6 x i8] c"float\00" @.str.3665 = private unnamed_addr constant [6 x i8] c"float\00" @.str.3666 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.3667 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.3668 = private unnamed_addr constant [5 x i8] c"char\00" @.str.3669 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3670 = private unnamed_addr constant [5 x i8] c"char\00" @.str.3671 = private unnamed_addr constant [4 x i8] c"str\00" @.str.3672 = private unnamed_addr constant [5 x i8] c"null\00" @.str.3673 = private unnamed_addr constant [5 x i8] c"null\00" @.str.3674 = private unnamed_addr constant [5 x i8] c"null\00" @.str.3675 = private unnamed_addr constant [4 x i8] c"var\00" @.str.3676 = private unnamed_addr constant [7 x i8] c"member\00" @.str.3677 = private unnamed_addr constant [6 x i8] c"index\00" @.str.3678 = private unnamed_addr constant [6 x i8] c"match\00" @.str.3679 = private unnamed_addr constant [4 x i8] c"try\00" @.str.3680 = private unnamed_addr constant [3 x i8] c"or\00" @.str.3681 = private unnamed_addr constant [6 x i8] c"unary\00" @.str.3682 = private unnamed_addr constant [7 x i8] c"binary\00" @.str.3683 = private unnamed_addr constant [5 x i8] c"call\00" @.str.3684 = private unnamed_addr constant [7 x i8] c"method\00" @.str.3685 = private unnamed_addr constant [6 x i8] c"array\00" @.str.3686 = private unnamed_addr constant [5 x i8] c"void\00" @.str.3687 = private unnamed_addr constant [4 x i8] c"map\00" @.str.3688 = private unnamed_addr constant [5 x i8] c"void\00" @.str.3689 = private unnamed_addr constant [20 x i8] c"unknown expression \00" @.str.3690 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3691 = private unnamed_addr constant [2 x i8] c"!\00" @.str.3692 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.3693 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3694 = private unnamed_addr constant [20 x i8] c"the value after '!'\00" @.str.3695 = private unnamed_addr constant [8 x i8] c"xor i1 \00" @.str.3696 = private unnamed_addr constant [7 x i8] c", true\00" @.str.3697 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.3698 = private unnamed_addr constant [2 x i8] c"~\00" @.str.3699 = private unnamed_addr constant [46 x i8] c"'~' flips the bits of a whole number, not of \00" @.str.3700 = private unnamed_addr constant [5 x i8] c"xor \00" @.str.3701 = private unnamed_addr constant [2 x i8] c" \00" @.str.3702 = private unnamed_addr constant [5 x i8] c", -1\00" @.str.3703 = private unnamed_addr constant [35 x i8] c" can't be negative (it's unsigned)\00" @.str.3704 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3705 = private unnamed_addr constant [2 x i8] c"-\00" @.str.3706 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3707 = private unnamed_addr constant [2 x i8] c"-\00" @.str.3708 = private unnamed_addr constant [5 x i8] c"sub \00" @.str.3709 = private unnamed_addr constant [5 x i8] c" 0, \00" @.str.3710 = private unnamed_addr constant [6 x i8] c"fneg \00" @.str.3711 = private unnamed_addr constant [2 x i8] c" \00" @.str.3712 = private unnamed_addr constant [27 x i8] c"can't put '-' in front of \00" @.str.3713 = private unnamed_addr constant [12 x i8] c"can't use '\00" @.str.3714 = private unnamed_addr constant [6 x i8] c"' on \00" @.str.3715 = private unnamed_addr constant [6 x i8] c" and \00" @.str.3716 = private unnamed_addr constant [2 x i8] c"+\00" @.str.3717 = private unnamed_addr constant [4 x i8] c"str\00" @.str.3718 = private unnamed_addr constant [4 x i8] c"str\00" @.str.3719 = private unnamed_addr constant [49 x i8] c" (turn the other side into text first: str(...))\00" @.str.3720 = private unnamed_addr constant [2 x i8] c"&\00" @.str.3721 = private unnamed_addr constant [2 x i8] c"|\00" @.str.3722 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.3723 = private unnamed_addr constant [2 x i8] c"&\00" @.str.3724 = private unnamed_addr constant [27 x i8] c" (for true/false use '&&')\00" @.str.3725 = private unnamed_addr constant [27 x i8] c" (for true/false use '||')\00" @.str.3726 = private unnamed_addr constant [2 x i8] c"&\00" @.str.3727 = private unnamed_addr constant [2 x i8] c"|\00" @.str.3728 = private unnamed_addr constant [2 x i8] c"^\00" @.str.3729 = private unnamed_addr constant [3 x i8] c"<<\00" @.str.3730 = private unnamed_addr constant [3 x i8] c">>\00" @.str.3731 = private unnamed_addr constant [44 x i8] c" (bit operators work on whole numbers only)\00" @.str.3732 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.3733 = private unnamed_addr constant [6 x i8] c"array\00" @.str.3734 = private unnamed_addr constant [3 x i8] c"==\00" @.str.3735 = private unnamed_addr constant [3 x i8] c"!=\00" @.str.3736 = private unnamed_addr constant [32 x i8] c" (compare the parts one by one)\00" @.str.3737 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3738 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" @.str.3739 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3740 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" @.str.3741 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3742 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" @.str.3743 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3744 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" @.str.3745 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3746 = private unnamed_addr constant [28 x i8] c"used .lit on a null pointer\00" @.str.3747 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3748 = private unnamed_addr constant [28 x i8] c"used .lit on a null pointer\00" @.str.3749 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3750 = private unnamed_addr constant [26 x i8] c"used .v on a null pointer\00" @.str.3751 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3752 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" @.str.3753 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3754 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" @.str.3755 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3756 = private unnamed_addr constant [26 x i8] c"used .v on a null pointer\00" @.str.3757 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3758 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" @.str.3759 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3760 = private unnamed_addr constant [30 x i8] c"used .value on a null pointer\00" @.str.3761 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3762 = private unnamed_addr constant [28 x i8] c"used .lit on a null pointer\00" @.str.3763 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3764 = private unnamed_addr constant [28 x i8] c"used .lit on a null pointer\00" @.str.3765 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3766 = private unnamed_addr constant [26 x i8] c"used .v on a null pointer\00" @.str.3767 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3768 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" @.str.3769 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3770 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" @.str.3771 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3772 = private unnamed_addr constant [26 x i8] c"used .v on a null pointer\00" @.str.3773 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3774 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" @.str.3775 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3776 = private unnamed_addr constant [30 x i8] c"used .value on a null pointer\00" @.str.3777 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3778 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" @.str.3779 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3780 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" @.str.3781 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3782 = private unnamed_addr constant [26 x i8] c"used .v on a null pointer\00" @.str.3783 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3784 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" @.str.3785 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3786 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" @.str.3787 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3788 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" @.str.3789 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3790 = private unnamed_addr constant [30 x i8] c"used .value on a null pointer\00" @.str.3791 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3792 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" @.str.3793 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3794 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" @.str.3795 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3796 = private unnamed_addr constant [26 x i8] c"used .v on a null pointer\00" @.str.3797 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3798 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" @.str.3799 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3800 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" @.str.3801 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3802 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" @.str.3803 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3804 = private unnamed_addr constant [30 x i8] c"used .value on a null pointer\00" @.str.3805 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3806 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" @.str.3807 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3808 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" @.str.3809 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3810 = private unnamed_addr constant [30 x i8] c"used .value on a null pointer\00" @.str.3811 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3812 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" @.str.3813 = private unnamed_addr constant [1 x i8] c"\00" @.str.3814 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3815 = private unnamed_addr constant [30 x i8] c"used .value on a null pointer\00" @.str.3816 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3817 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" @.str.3818 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3819 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" @.str.3820 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3821 = private unnamed_addr constant [30 x i8] c"used .value on a null pointer\00" @.str.3822 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3823 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" @.str.3824 = private unnamed_addr constant [1 x i8] c"\00" @.str.3825 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3826 = private unnamed_addr constant [30 x i8] c"used .value on a null pointer\00" @.str.3827 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3828 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" @.str.3829 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3830 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" @.str.3831 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3832 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" @.str.3833 = private unnamed_addr constant [4 x i8] c"f32\00" @.str.3834 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3835 = private unnamed_addr constant [26 x i8] c"used .v on a null pointer\00" @.str.3836 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3837 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" @.str.3838 = private unnamed_addr constant [6 x i8] c"float\00" @.str.3839 = private unnamed_addr constant [6 x i8] c"float\00" @.str.3840 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3841 = private unnamed_addr constant [30 x i8] c"used .value on a null pointer\00" @.str.3842 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3843 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" @.str.3844 = private unnamed_addr constant [4 x i8] c"f32\00" @.str.3845 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3846 = private unnamed_addr constant [26 x i8] c"used .v on a null pointer\00" @.str.3847 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3848 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" @.str.3849 = private unnamed_addr constant [6 x i8] c"float\00" @.str.3850 = private unnamed_addr constant [6 x i8] c"float\00" @.str.3851 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3852 = private unnamed_addr constant [30 x i8] c"used .value on a null pointer\00" @.str.3853 = private unnamed_addr constant [2 x i8] c"+\00" @.str.3854 = private unnamed_addr constant [4 x i8] c"str\00" @.str.3855 = private unnamed_addr constant [4 x i8] c"str\00" @.str.3856 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.3857 = private unnamed_addr constant [33 x i8] c"call void @finch_str_concat(ptr \00" @.str.3858 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.3859 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.3860 = private unnamed_addr constant [2 x i8] c")\00" @.str.3861 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.3862 = private unnamed_addr constant [4 x i8] c"str\00" @.str.3863 = private unnamed_addr constant [2 x i8] c"+\00" @.str.3864 = private unnamed_addr constant [2 x i8] c"-\00" @.str.3865 = private unnamed_addr constant [2 x i8] c"*\00" @.str.3866 = private unnamed_addr constant [2 x i8] c"/\00" @.str.3867 = private unnamed_addr constant [2 x i8] c"%\00" @.str.3868 = private unnamed_addr constant [2 x i8] c"&\00" @.str.3869 = private unnamed_addr constant [2 x i8] c"|\00" @.str.3870 = private unnamed_addr constant [2 x i8] c"^\00" @.str.3871 = private unnamed_addr constant [3 x i8] c"<<\00" @.str.3872 = private unnamed_addr constant [3 x i8] c">>\00" @.str.3873 = private unnamed_addr constant [4 x i8] c"add\00" @.str.3874 = private unnamed_addr constant [4 x i8] c"sub\00" @.str.3875 = private unnamed_addr constant [4 x i8] c"mul\00" @.str.3876 = private unnamed_addr constant [5 x i8] c"sdiv\00" @.str.3877 = private unnamed_addr constant [5 x i8] c"srem\00" @.str.3878 = private unnamed_addr constant [4 x i8] c"and\00" @.str.3879 = private unnamed_addr constant [3 x i8] c"or\00" @.str.3880 = private unnamed_addr constant [4 x i8] c"xor\00" @.str.3881 = private unnamed_addr constant [4 x i8] c"shl\00" @.str.3882 = private unnamed_addr constant [5 x i8] c"ashr\00" @.str.3883 = private unnamed_addr constant [4 x i8] c"add\00" @.str.3884 = private unnamed_addr constant [4 x i8] c"sub\00" @.str.3885 = private unnamed_addr constant [4 x i8] c"mul\00" @.str.3886 = private unnamed_addr constant [5 x i8] c"udiv\00" @.str.3887 = private unnamed_addr constant [5 x i8] c"urem\00" @.str.3888 = private unnamed_addr constant [4 x i8] c"and\00" @.str.3889 = private unnamed_addr constant [3 x i8] c"or\00" @.str.3890 = private unnamed_addr constant [4 x i8] c"xor\00" @.str.3891 = private unnamed_addr constant [4 x i8] c"shl\00" @.str.3892 = private unnamed_addr constant [5 x i8] c"lshr\00" @.str.3893 = private unnamed_addr constant [2 x i8] c"/\00" @.str.3894 = private unnamed_addr constant [2 x i8] c"%\00" @.str.3895 = private unnamed_addr constant [2 x i8] c"0\00" @.str.3896 = private unnamed_addr constant [17 x i8] c"division by zero\00" @.str.3897 = private unnamed_addr constant [9 x i8] c"icmp eq \00" @.str.3898 = private unnamed_addr constant [2 x i8] c" \00" @.str.3899 = private unnamed_addr constant [4 x i8] c", 0\00" @.str.3900 = private unnamed_addr constant [17 x i8] c"division by zero\00" @.str.3901 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3902 = private unnamed_addr constant [2 x i8] c" \00" @.str.3903 = private unnamed_addr constant [2 x i8] c" \00" @.str.3904 = private unnamed_addr constant [3 x i8] c", \00" @.str.3905 = private unnamed_addr constant [2 x i8] c"+\00" @.str.3906 = private unnamed_addr constant [2 x i8] c"-\00" @.str.3907 = private unnamed_addr constant [2 x i8] c"*\00" @.str.3908 = private unnamed_addr constant [2 x i8] c"/\00" @.str.3909 = private unnamed_addr constant [2 x i8] c"%\00" @.str.3910 = private unnamed_addr constant [5 x i8] c"fadd\00" @.str.3911 = private unnamed_addr constant [5 x i8] c"fsub\00" @.str.3912 = private unnamed_addr constant [5 x i8] c"fmul\00" @.str.3913 = private unnamed_addr constant [5 x i8] c"fdiv\00" @.str.3914 = private unnamed_addr constant [5 x i8] c"frem\00" @.str.3915 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3916 = private unnamed_addr constant [2 x i8] c" \00" @.str.3917 = private unnamed_addr constant [2 x i8] c" \00" @.str.3918 = private unnamed_addr constant [3 x i8] c", \00" @.str.3919 = private unnamed_addr constant [3 x i8] c"==\00" @.str.3920 = private unnamed_addr constant [3 x i8] c"!=\00" @.str.3921 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.3922 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.3923 = private unnamed_addr constant [5 x i8] c"null\00" @.str.3924 = private unnamed_addr constant [5 x i8] c"null\00" @.str.3925 = private unnamed_addr constant [4 x i8] c"str\00" @.str.3926 = private unnamed_addr constant [4 x i8] c"str\00" @.str.3927 = private unnamed_addr constant [60 x i8] c"a str is never null; to check for empty text use s.len == 0\00" @.str.3928 = private unnamed_addr constant [3 x i8] c"eq\00" @.str.3929 = private unnamed_addr constant [3 x i8] c"!=\00" @.str.3930 = private unnamed_addr constant [3 x i8] c"ne\00" @.str.3931 = private unnamed_addr constant [6 x i8] c"icmp \00" @.str.3932 = private unnamed_addr constant [6 x i8] c" ptr \00" @.str.3933 = private unnamed_addr constant [3 x i8] c", \00" @.str.3934 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.3935 = private unnamed_addr constant [4 x i8] c"str\00" @.str.3936 = private unnamed_addr constant [4 x i8] c"str\00" @.str.3937 = private unnamed_addr constant [28 x i8] c"call i32 @finch_str_eq(ptr \00" @.str.3938 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.3939 = private unnamed_addr constant [2 x i8] c")\00" @.str.3940 = private unnamed_addr constant [3 x i8] c"ne\00" @.str.3941 = private unnamed_addr constant [3 x i8] c"!=\00" @.str.3942 = private unnamed_addr constant [3 x i8] c"eq\00" @.str.3943 = private unnamed_addr constant [6 x i8] c"icmp \00" @.str.3944 = private unnamed_addr constant [6 x i8] c" i32 \00" @.str.3945 = private unnamed_addr constant [4 x i8] c", 0\00" @.str.3946 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.3947 = private unnamed_addr constant [29 x i8] c"call i64 @finch_str_cmp(ptr \00" @.str.3948 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.3949 = private unnamed_addr constant [2 x i8] c")\00" @.str.3950 = private unnamed_addr constant [6 x i8] c"icmp \00" @.str.3951 = private unnamed_addr constant [6 x i8] c" i64 \00" @.str.3952 = private unnamed_addr constant [4 x i8] c", 0\00" @.str.3953 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.3954 = private unnamed_addr constant [3 x i8] c"==\00" @.str.3955 = private unnamed_addr constant [3 x i8] c"!=\00" @.str.3956 = private unnamed_addr constant [2 x i8] c"<\00" @.str.3957 = private unnamed_addr constant [3 x i8] c"<=\00" @.str.3958 = private unnamed_addr constant [2 x i8] c">\00" @.str.3959 = private unnamed_addr constant [3 x i8] c">=\00" @.str.3960 = private unnamed_addr constant [4 x i8] c"oeq\00" @.str.3961 = private unnamed_addr constant [4 x i8] c"une\00" @.str.3962 = private unnamed_addr constant [4 x i8] c"olt\00" @.str.3963 = private unnamed_addr constant [4 x i8] c"ole\00" @.str.3964 = private unnamed_addr constant [4 x i8] c"ogt\00" @.str.3965 = private unnamed_addr constant [4 x i8] c"oge\00" @.str.3966 = private unnamed_addr constant [6 x i8] c"fcmp \00" @.str.3967 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.3968 = private unnamed_addr constant [2 x i8] c" \00" @.str.3969 = private unnamed_addr constant [2 x i8] c" \00" @.str.3970 = private unnamed_addr constant [3 x i8] c", \00" @.str.3971 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.3972 = private unnamed_addr constant [5 x i8] c"enum\00" @.str.3973 = private unnamed_addr constant [116 x i8] c"enums can only be compared with == and != (to go through them in order, give the variants numbers and use int(...))\00" @.str.3974 = private unnamed_addr constant [3 x i8] c"eq\00" @.str.3975 = private unnamed_addr constant [3 x i8] c"!=\00" @.str.3976 = private unnamed_addr constant [3 x i8] c"ne\00" @.str.3977 = private unnamed_addr constant [6 x i8] c"icmp \00" @.str.3978 = private unnamed_addr constant [6 x i8] c" i32 \00" @.str.3979 = private unnamed_addr constant [3 x i8] c", \00" @.str.3980 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.3981 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.3982 = private unnamed_addr constant [5 x i8] c"char\00" @.str.3983 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.3984 = private unnamed_addr constant [6 x i8] c"icmp \00" @.str.3985 = private unnamed_addr constant [2 x i8] c" \00" @.str.3986 = private unnamed_addr constant [2 x i8] c" \00" @.str.3987 = private unnamed_addr constant [3 x i8] c", \00" @.str.3988 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.3989 = private unnamed_addr constant [3 x i8] c"==\00" @.str.3990 = private unnamed_addr constant [3 x i8] c"!=\00" @.str.3991 = private unnamed_addr constant [2 x i8] c"<\00" @.str.3992 = private unnamed_addr constant [3 x i8] c"<=\00" @.str.3993 = private unnamed_addr constant [2 x i8] c">\00" @.str.3994 = private unnamed_addr constant [3 x i8] c">=\00" @.str.3995 = private unnamed_addr constant [3 x i8] c"eq\00" @.str.3996 = private unnamed_addr constant [3 x i8] c"ne\00" @.str.3997 = private unnamed_addr constant [4 x i8] c"ult\00" @.str.3998 = private unnamed_addr constant [4 x i8] c"ule\00" @.str.3999 = private unnamed_addr constant [4 x i8] c"ugt\00" @.str.4000 = private unnamed_addr constant [4 x i8] c"uge\00" @.str.4001 = private unnamed_addr constant [3 x i8] c"eq\00" @.str.4002 = private unnamed_addr constant [3 x i8] c"ne\00" @.str.4003 = private unnamed_addr constant [4 x i8] c"slt\00" @.str.4004 = private unnamed_addr constant [4 x i8] c"sle\00" @.str.4005 = private unnamed_addr constant [4 x i8] c"sgt\00" @.str.4006 = private unnamed_addr constant [4 x i8] c"sge\00" @.str.4007 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4008 = private unnamed_addr constant [3 x i8] c"&&\00" @.str.4009 = private unnamed_addr constant [3 x i8] c"||\00" @.str.4010 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4011 = private unnamed_addr constant [11 x i8] c"logic.from\00" @.str.4012 = private unnamed_addr constant [10 x i8] c"logic.rhs\00" @.str.4013 = private unnamed_addr constant [10 x i8] c"logic.end\00" @.str.4014 = private unnamed_addr constant [3 x i8] c"&&\00" @.str.4015 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4016 = private unnamed_addr constant [11 x i8] c"logic.rend\00" @.str.4017 = private unnamed_addr constant [5 x i8] c"true\00" @.str.4018 = private unnamed_addr constant [3 x i8] c"&&\00" @.str.4019 = private unnamed_addr constant [6 x i8] c"false\00" @.str.4020 = private unnamed_addr constant [10 x i8] c"phi i1 [ \00" @.str.4021 = private unnamed_addr constant [4 x i8] c", %\00" @.str.4022 = private unnamed_addr constant [7 x i8] c" ], [ \00" @.str.4023 = private unnamed_addr constant [4 x i8] c", %\00" @.str.4024 = private unnamed_addr constant [3 x i8] c" ]\00" @.str.4025 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.4026 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4027 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4028 = private unnamed_addr constant [3 x i8] c"==\00" @.str.4029 = private unnamed_addr constant [3 x i8] c"!=\00" @.str.4030 = private unnamed_addr constant [2 x i8] c"<\00" @.str.4031 = private unnamed_addr constant [3 x i8] c"<=\00" @.str.4032 = private unnamed_addr constant [2 x i8] c">\00" @.str.4033 = private unnamed_addr constant [3 x i8] c">=\00" @.str.4034 = private unnamed_addr constant [5 x i8] c"void\00" @.str.4035 = private unnamed_addr constant [6 x i8] c"array\00" @.str.4036 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4037 = private unnamed_addr constant [48 x i8] c"an empty [] needs a type, like: []int nums = []\00" @.str.4038 = private unnamed_addr constant [5 x i8] c"void\00" @.str.4039 = private unnamed_addr constant [28 x i8] c"every element of this array\00" @.str.4040 = private unnamed_addr constant [5 x i8] c"null\00" @.str.4041 = private unnamed_addr constant [9 x i8] c"mul i64 \00" @.str.4042 = private unnamed_addr constant [3 x i8] c", \00" @.str.4043 = private unnamed_addr constant [27 x i8] c"call ptr @finch_alloc(i64 \00" @.str.4044 = private unnamed_addr constant [2 x i8] c")\00" @.str.4045 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.4046 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.4047 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.4048 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4049 = private unnamed_addr constant [42 x i8] c"insertvalue { ptr, i64, i64 } undef, ptr \00" @.str.4050 = private unnamed_addr constant [4 x i8] c", 0\00" @.str.4051 = private unnamed_addr constant [31 x i8] c"insertvalue { ptr, i64, i64 } \00" @.str.4052 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.4053 = private unnamed_addr constant [4 x i8] c", 1\00" @.str.4054 = private unnamed_addr constant [31 x i8] c"insertvalue { ptr, i64, i64 } \00" @.str.4055 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.4056 = private unnamed_addr constant [4 x i8] c", 2\00" @.str.4057 = private unnamed_addr constant [4 x i8] c"var\00" @.str.4058 = private unnamed_addr constant [29 x i8] c"there is no variable named '\00" @.str.4059 = private unnamed_addr constant [2 x i8] c"'\00" @.str.4060 = private unnamed_addr constant [61 x i8] c"this is a temporary value, it can't be changed or pointed to\00" @.str.4061 = private unnamed_addr constant [4 x i8] c"var\00" @.str.4062 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4063 = private unnamed_addr constant [27 x i8] c"used .ci on a null pointer\00" @.str.4064 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4065 = private unnamed_addr constant [27 x i8] c"used .ci on a null pointer\00" @.str.4066 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4067 = private unnamed_addr constant [6 x i8] c"float\00" @.str.4068 = private unnamed_addr constant [4 x i8] c"int\00" @.str.4069 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4070 = private unnamed_addr constant [27 x i8] c"used .ci on a null pointer\00" @.str.4071 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4072 = private unnamed_addr constant [27 x i8] c"used .ci on a null pointer\00" @.str.4073 = private unnamed_addr constant [8 x i8] c"fprintf\00" @.str.4074 = private unnamed_addr constant [6 x i8] c"stdin\00" @.str.4075 = private unnamed_addr constant [7 x i8] c"stdout\00" @.str.4076 = private unnamed_addr constant [7 x i8] c"stderr\00" @.str.4077 = private unnamed_addr constant [2 x i8] c"2\00" @.str.4078 = private unnamed_addr constant [6 x i8] c"stdin\00" @.str.4079 = private unnamed_addr constant [2 x i8] c"0\00" @.str.4080 = private unnamed_addr constant [7 x i8] c"stdout\00" @.str.4081 = private unnamed_addr constant [2 x i8] c"1\00" @.str.4082 = private unnamed_addr constant [32 x i8] c"call ptr @finch_std_stream(i32 \00" @.str.4083 = private unnamed_addr constant [2 x i8] c")\00" @.str.4084 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.4085 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4086 = private unnamed_addr constant [27 x i8] c"used .ci on a null pointer\00" @.str.4087 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4088 = private unnamed_addr constant [27 x i8] c"used .ci on a null pointer\00" @.str.4089 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4090 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4091 = private unnamed_addr constant [30 x i8] c"used .cdone on a null pointer\00" @.str.4092 = private unnamed_addr constant [3 x i8] c"g:\00" @.str.4093 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4094 = private unnamed_addr constant [30 x i8] c"used .cdone on a null pointer\00" @.str.4095 = private unnamed_addr constant [3 x i8] c"g:\00" @.str.4096 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4097 = private unnamed_addr constant [29 x i8] c"used .head on a null pointer\00" @.str.4098 = private unnamed_addr constant [2 x i8] c"@\00" @.str.4099 = private unnamed_addr constant [20 x i8] c" = external global \00" @.str.4100 = private unnamed_addr constant [2 x i8] c"@\00" @.str.4101 = private unnamed_addr constant [2 x i8] c"'\00" @.str.4102 = private unnamed_addr constant [44 x i8] c"' is a module; use something from it, like \00" @.str.4103 = private unnamed_addr constant [11 x i8] c".name(...)\00" @.str.4104 = private unnamed_addr constant [29 x i8] c"there is no variable named '\00" @.str.4105 = private unnamed_addr constant [2 x i8] c"'\00" @.str.4106 = private unnamed_addr constant [10 x i8] c"```finch\0A\00" @.str.4107 = private unnamed_addr constant [2 x i8] c" \00" @.str.4108 = private unnamed_addr constant [5 x i8] c"\0A```\00" @.str.4109 = private unnamed_addr constant [7 x i8] c"member\00" @.str.4110 = private unnamed_addr constant [6 x i8] c"index\00" @.str.4111 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4112 = private unnamed_addr constant [2 x i8] c".\00" @.str.4113 = private unnamed_addr constant [2 x i8] c"0\00" @.str.4114 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4115 = private unnamed_addr constant [2 x i8] c".\00" @.str.4116 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4117 = private unnamed_addr constant [2 x i8] c"e\00" @.str.4118 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4119 = private unnamed_addr constant [2 x i8] c"E\00" @.str.4120 = private unnamed_addr constant [3 x i8] c".0\00" @.str.4121 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4122 = private unnamed_addr constant [3 x i8] c".0\00" @.str.4123 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4124 = private unnamed_addr constant [4 x i8] c"var\00" @.str.4125 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4126 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.4127 = private unnamed_addr constant [7 x i8] c"member\00" @.str.4128 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4129 = private unnamed_addr constant [4 x i8] c"var\00" @.str.4130 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4131 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4132 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4133 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4134 = private unnamed_addr constant [30 x i8] c"used .enums on a null pointer\00" @.str.4135 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4136 = private unnamed_addr constant [10 x i8] c"the enum \00" @.str.4137 = private unnamed_addr constant [18 x i8] c" has no variant '\00" @.str.4138 = private unnamed_addr constant [12 x i8] c"' (it has: \00" @.str.4139 = private unnamed_addr constant [3 x i8] c", \00" @.str.4140 = private unnamed_addr constant [2 x i8] c")\00" @.str.4141 = private unnamed_addr constant [10 x i8] c"```finch\0A\00" @.str.4142 = private unnamed_addr constant [2 x i8] c".\00" @.str.4143 = private unnamed_addr constant [4 x i8] c" = \00" @.str.4144 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4145 = private unnamed_addr constant [5 x i8] c"\0A```\00" @.str.4146 = private unnamed_addr constant [1 x i8] c"\00" @.str.4147 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4148 = private unnamed_addr constant [5 x i8] c"enum\00" @.str.4149 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4150 = private unnamed_addr constant [38 x i8] c"a variant of an enum can't be changed\00" @.str.4151 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4152 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.4153 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.4154 = private unnamed_addr constant [58 x i8] c"this ptr has no type, so Finch doesn't know what's inside\00" @.str.4155 = private unnamed_addr constant [13 x i8] c"icmp eq ptr \00" @.str.4156 = private unnamed_addr constant [7 x i8] c", null\00" @.str.4157 = private unnamed_addr constant [7 x i8] c"used .\00" @.str.4158 = private unnamed_addr constant [19 x i8] c" on a null pointer\00" @.str.4159 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4160 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.4161 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4162 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.4163 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4164 = private unnamed_addr constant [6 x i8] c"value\00" @.str.4165 = private unnamed_addr constant [6 x i8] c"value\00" @.str.4166 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.4167 = private unnamed_addr constant [3 x i8] c"a \00" @.str.4168 = private unnamed_addr constant [44 x i8] c" only has '.value' (the thing it points to)\00" @.str.4169 = private unnamed_addr constant [6 x i8] c"fixed\00" @.str.4170 = private unnamed_addr constant [2 x i8] c".\00" @.str.4171 = private unnamed_addr constant [27 x i8] c" can't be changed directly\00" @.str.4172 = private unnamed_addr constant [4 x i8] c"len\00" @.str.4173 = private unnamed_addr constant [4 x i8] c"int\00" @.str.4174 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.4175 = private unnamed_addr constant [35 x i8] c"an array has .len and .ptr, not '.\00" @.str.4176 = private unnamed_addr constant [2 x i8] c"'\00" @.str.4177 = private unnamed_addr constant [49 x i8] c".ptr of a temporary value would point to nothing\00" @.str.4178 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4179 = private unnamed_addr constant [6 x i8] c"array\00" @.str.4180 = private unnamed_addr constant [4 x i8] c"str\00" @.str.4181 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.4182 = private unnamed_addr constant [31 x i8] c".ptr can't be changed directly\00" @.str.4183 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4184 = private unnamed_addr constant [2 x i8] c"%\00" @.str.4185 = private unnamed_addr constant [54 x i8] c".ptr of a temporary value would point to freed memory\00" @.str.4186 = private unnamed_addr constant [4 x i8] c"str\00" @.str.4187 = private unnamed_addr constant [5 x i8] c"char\00" @.str.4188 = private unnamed_addr constant [32 x i8] c"extractvalue { ptr, i64, i64 } \00" @.str.4189 = private unnamed_addr constant [4 x i8] c", 0\00" @.str.4190 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4191 = private unnamed_addr constant [6 x i8] c"array\00" @.str.4192 = private unnamed_addr constant [4 x i8] c"str\00" @.str.4193 = private unnamed_addr constant [4 x i8] c"map\00" @.str.4194 = private unnamed_addr constant [4 x i8] c"len\00" @.str.4195 = private unnamed_addr constant [38 x i8] c"an array, map or str has .len, not '.\00" @.str.4196 = private unnamed_addr constant [2 x i8] c"'\00" @.str.4197 = private unnamed_addr constant [49 x i8] c".len can't be changed directly (use push or pop)\00" @.str.4198 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.4199 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.4200 = private unnamed_addr constant [15 x i8] c", i32 0, i32 1\00" @.str.4201 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.4202 = private unnamed_addr constant [4 x i8] c"int\00" @.str.4203 = private unnamed_addr constant [14 x i8] c"extractvalue \00" @.str.4204 = private unnamed_addr constant [2 x i8] c" \00" @.str.4205 = private unnamed_addr constant [4 x i8] c", 1\00" @.str.4206 = private unnamed_addr constant [4 x i8] c"int\00" @.str.4207 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.4208 = private unnamed_addr constant [22 x i8] c" has no fields (no '.\00" @.str.4209 = private unnamed_addr constant [3 x i8] c"')\00" @.str.4210 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4211 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.4212 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4213 = private unnamed_addr constant [12 x i8] c"the struct \00" @.str.4214 = private unnamed_addr constant [16 x i8] c" has no field '\00" @.str.4215 = private unnamed_addr constant [12 x i8] c"' (it has: \00" @.str.4216 = private unnamed_addr constant [3 x i8] c", \00" @.str.4217 = private unnamed_addr constant [2 x i8] c")\00" @.str.4218 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4219 = private unnamed_addr constant [10 x i8] c"```finch\0A\00" @.str.4220 = private unnamed_addr constant [2 x i8] c" \00" @.str.4221 = private unnamed_addr constant [5 x i8] c"\0A```\00" @.str.4222 = private unnamed_addr constant [1 x i8] c"\00" @.str.4223 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.4224 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.4225 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" @.str.4226 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4227 = private unnamed_addr constant [14 x i8] c"extractvalue \00" @.str.4228 = private unnamed_addr constant [2 x i8] c" \00" @.str.4229 = private unnamed_addr constant [3 x i8] c", \00" @.str.4230 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4231 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4232 = private unnamed_addr constant [4 x i8] c"map\00" @.str.4233 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4234 = private unnamed_addr constant [4 x i8] c"int\00" @.str.4235 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4236 = private unnamed_addr constant [9 x i8] c"an index\00" @.str.4237 = private unnamed_addr constant [6 x i8] c"fixed\00" @.str.4238 = private unnamed_addr constant [1 x i8] c"\00" @.str.4239 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.4240 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.4241 = private unnamed_addr constant [14 x i8] c", i64 0, i64 \00" @.str.4242 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4243 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.4244 = private unnamed_addr constant [58 x i8] c"this ptr has no type, so Finch doesn't know what's inside\00" @.str.4245 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.4246 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4247 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.4248 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.4249 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.4250 = private unnamed_addr constant [6 x i8] c"array\00" @.str.4251 = private unnamed_addr constant [4 x i8] c"str\00" @.str.4252 = private unnamed_addr constant [47 x i8] c"[ ] works on arrays, str and pointers, not on \00" @.str.4253 = private unnamed_addr constant [5 x i8] c"char\00" @.str.4254 = private unnamed_addr constant [6 x i8] c"array\00" @.str.4255 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4256 = private unnamed_addr constant [4 x i8] c"str\00" @.str.4257 = private unnamed_addr constant [45 x i8] c"this is a temporary str, it can't be changed\00" @.str.4258 = private unnamed_addr constant [30 x i8] c"call void @finch_str_own(ptr \00" @.str.4259 = private unnamed_addr constant [2 x i8] c")\00" @.str.4260 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.4261 = private unnamed_addr constant [32 x i8] c"extractvalue { ptr, i64, i64 } \00" @.str.4262 = private unnamed_addr constant [4 x i8] c", 1\00" @.str.4263 = private unnamed_addr constant [32 x i8] c"extractvalue { ptr, i64, i64 } \00" @.str.4264 = private unnamed_addr constant [4 x i8] c", 0\00" @.str.4265 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.4266 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.4267 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.4268 = private unnamed_addr constant [18 x i8] c"named arguments (\00" @.str.4269 = private unnamed_addr constant [37 x i8] c": ...) are only for creating structs\00" @.str.4270 = private unnamed_addr constant [2 x i8] c"'\00" @.str.4271 = private unnamed_addr constant [9 x i8] c"' takes \00" @.str.4272 = private unnamed_addr constant [23 x i8] c" argument(s), but got \00" @.str.4273 = private unnamed_addr constant [4 x i8] c"str\00" @.str.4274 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.4275 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.4276 = private unnamed_addr constant [4 x i8] c"int\00" @.str.4277 = private unnamed_addr constant [4 x i8] c"f64\00" @.str.4278 = private unnamed_addr constant [6 x i8] c"float\00" @.str.4279 = private unnamed_addr constant [4 x i8] c"int\00" @.str.4280 = private unnamed_addr constant [6 x i8] c"float\00" @.str.4281 = private unnamed_addr constant [5 x i8] c"char\00" @.str.4282 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.4283 = private unnamed_addr constant [3 x i8] c"i8\00" @.str.4284 = private unnamed_addr constant [4 x i8] c"i16\00" @.str.4285 = private unnamed_addr constant [4 x i8] c"i32\00" @.str.4286 = private unnamed_addr constant [3 x i8] c"u8\00" @.str.4287 = private unnamed_addr constant [4 x i8] c"u16\00" @.str.4288 = private unnamed_addr constant [4 x i8] c"u32\00" @.str.4289 = private unnamed_addr constant [4 x i8] c"u64\00" @.str.4290 = private unnamed_addr constant [4 x i8] c"f32\00" @.str.4291 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.4292 = private unnamed_addr constant [1 x i8] c"\00" @.str.4293 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4294 = private unnamed_addr constant [4 x i8] c"str\00" @.str.4295 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4296 = private unnamed_addr constant [32 x i8] c"used .ftarget on a null pointer\00" @.str.4297 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.4298 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.4299 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" @.str.4300 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.4301 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.4302 = private unnamed_addr constant [2 x i8] c"0\00" @.str.4303 = private unnamed_addr constant [33 x i8] c"call i32 @finch_str_try_int(ptr \00" @.str.4304 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.4305 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.4306 = private unnamed_addr constant [2 x i8] c")\00" @.str.4307 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" @.str.4308 = private unnamed_addr constant [4 x i8] c", 0\00" @.str.4309 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4310 = private unnamed_addr constant [32 x i8] c"used .ffailed on a null pointer\00" @.str.4311 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.4312 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4313 = private unnamed_addr constant [29 x i8] c"used .fmsg on a null pointer\00" @.str.4314 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.4315 = private unnamed_addr constant [4 x i8] c"int\00" @.str.4316 = private unnamed_addr constant [7 x i8] c"double\00" @.str.4317 = private unnamed_addr constant [7 x i8] c"double\00" @.str.4318 = private unnamed_addr constant [4 x i8] c"0.0\00" @.str.4319 = private unnamed_addr constant [35 x i8] c"call i32 @finch_str_try_float(ptr \00" @.str.4320 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.4321 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.4322 = private unnamed_addr constant [2 x i8] c")\00" @.str.4323 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" @.str.4324 = private unnamed_addr constant [4 x i8] c", 0\00" @.str.4325 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4326 = private unnamed_addr constant [32 x i8] c"used .ffailed on a null pointer\00" @.str.4327 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.4328 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4329 = private unnamed_addr constant [29 x i8] c"used .fmsg on a null pointer\00" @.str.4330 = private unnamed_addr constant [7 x i8] c"double\00" @.str.4331 = private unnamed_addr constant [6 x i8] c"float\00" @.str.4332 = private unnamed_addr constant [4 x i8] c"str\00" @.str.4333 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4334 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" @.str.4335 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4336 = private unnamed_addr constant [32 x i8] c"call i64 @finch_str_to_int(ptr \00" @.str.4337 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.4338 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.4339 = private unnamed_addr constant [2 x i8] c")\00" @.str.4340 = private unnamed_addr constant [4 x i8] c"int\00" @.str.4341 = private unnamed_addr constant [37 x i8] c"call double @finch_str_to_float(ptr \00" @.str.4342 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.4343 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.4344 = private unnamed_addr constant [2 x i8] c")\00" @.str.4345 = private unnamed_addr constant [6 x i8] c"float\00" @.str.4346 = private unnamed_addr constant [5 x i8] c"enum\00" @.str.4347 = private unnamed_addr constant [4 x i8] c"i32\00" @.str.4348 = private unnamed_addr constant [5 x i8] c"char\00" @.str.4349 = private unnamed_addr constant [5 x i8] c"char\00" @.str.4350 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.4351 = private unnamed_addr constant [9 x i8] c"zext i1 \00" @.str.4352 = private unnamed_addr constant [5 x i8] c" to \00" @.str.4353 = private unnamed_addr constant [7 x i8] c"fptoui\00" @.str.4354 = private unnamed_addr constant [7 x i8] c"fptosi\00" @.str.4355 = private unnamed_addr constant [2 x i8] c" \00" @.str.4356 = private unnamed_addr constant [2 x i8] c" \00" @.str.4357 = private unnamed_addr constant [5 x i8] c" to \00" @.str.4358 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.4359 = private unnamed_addr constant [9 x i8] c"icmp ne \00" @.str.4360 = private unnamed_addr constant [2 x i8] c" \00" @.str.4361 = private unnamed_addr constant [4 x i8] c", 0\00" @.str.4362 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.4363 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.4364 = private unnamed_addr constant [5 x i8] c"null\00" @.str.4365 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.4366 = private unnamed_addr constant [14 x i8] c"inttoptr i64 \00" @.str.4367 = private unnamed_addr constant [4 x i8] c"u64\00" @.str.4368 = private unnamed_addr constant [8 x i8] c" to ptr\00" @.str.4369 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.4370 = private unnamed_addr constant [14 x i8] c"ptrtoint ptr \00" @.str.4371 = private unnamed_addr constant [5 x i8] c" to \00" @.str.4372 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.4373 = private unnamed_addr constant [4 x i8] c"str\00" @.str.4374 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4375 = private unnamed_addr constant [71 x i8] c"use .ptr to get a str's address (it is only valid while the str lives)\00" @.str.4376 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4377 = private unnamed_addr constant [12 x i8] c"can't turn \00" @.str.4378 = private unnamed_addr constant [7 x i8] c" into \00" @.str.4379 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.4380 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4381 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.4382 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4383 = private unnamed_addr constant [6 x i8] c"fixed\00" @.str.4384 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4385 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.4386 = private unnamed_addr constant [4 x i8] c"str\00" @.str.4387 = private unnamed_addr constant [6 x i8] c"float\00" @.str.4388 = private unnamed_addr constant [4 x i8] c"f32\00" @.str.4389 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.4390 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.4391 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4392 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.4393 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4394 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4395 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4396 = private unnamed_addr constant [6 x i8] c"fixed\00" @.str.4397 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4398 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4399 = private unnamed_addr constant [6 x i8] c"float\00" @.str.4400 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4401 = private unnamed_addr constant [6 x i8] c"float\00" @.str.4402 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4403 = private unnamed_addr constant [7 x i8] c"double\00" @.str.4404 = private unnamed_addr constant [7 x i8] c"expand\00" @.str.4405 = private unnamed_addr constant [2 x i8] c"[\00" @.str.4406 = private unnamed_addr constant [4 x i8] c" x \00" @.str.4407 = private unnamed_addr constant [2 x i8] c"]\00" @.str.4408 = private unnamed_addr constant [3 x i8] c"{ \00" @.str.4409 = private unnamed_addr constant [3 x i8] c", \00" @.str.4410 = private unnamed_addr constant [3 x i8] c" }\00" @.str.4411 = private unnamed_addr constant [9 x i8] c"indirect\00" @.str.4412 = private unnamed_addr constant [7 x i8] c"expand\00" @.str.4413 = private unnamed_addr constant [5 x i8] c"i128\00" @.str.4414 = private unnamed_addr constant [5 x i8] c"i128\00" @.str.4415 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.4416 = private unnamed_addr constant [2 x i8] c"i\00" @.str.4417 = private unnamed_addr constant [10 x i8] c"[2 x i64]\00" @.str.4418 = private unnamed_addr constant [10 x i8] c"[2 x i64]\00" @.str.4419 = private unnamed_addr constant [7 x i8] c"direct\00" @.str.4420 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.4421 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4422 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.4423 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4424 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4425 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00" @.str.4426 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4427 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00" @.str.4428 = private unnamed_addr constant [7 x i8] c"expand\00" @.str.4429 = private unnamed_addr constant [2 x i8] c"i\00" @.str.4430 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4431 = private unnamed_addr constant [9 x i8] c"indirect\00" @.str.4432 = private unnamed_addr constant [7 x i8] c"memory\00" @.str.4433 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4434 = private unnamed_addr constant [17 x i8] c"division by zero\00" @.str.4435 = private unnamed_addr constant [7 x i8] c"memory\00" @.str.4436 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4437 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4438 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4439 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4440 = private unnamed_addr constant [7 x i8] c"expand\00" @.str.4441 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4442 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4443 = private unnamed_addr constant [7 x i8] c"double\00" @.str.4444 = private unnamed_addr constant [12 x i8] c"<2 x float>\00" @.str.4445 = private unnamed_addr constant [6 x i8] c"float\00" @.str.4446 = private unnamed_addr constant [2 x i8] c"i\00" @.str.4447 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4448 = private unnamed_addr constant [3 x i8] c"{ \00" @.str.4449 = private unnamed_addr constant [3 x i8] c", \00" @.str.4450 = private unnamed_addr constant [3 x i8] c" }\00" @.str.4451 = private unnamed_addr constant [5 x i8] c"void\00" @.str.4452 = private unnamed_addr constant [5 x i8] c"void\00" @.str.4453 = private unnamed_addr constant [9 x i8] c"indirect\00" @.str.4454 = private unnamed_addr constant [7 x i8] c"memory\00" @.str.4455 = private unnamed_addr constant [7 x i8] c"memory\00" @.str.4456 = private unnamed_addr constant [5 x i8] c"void\00" @.str.4457 = private unnamed_addr constant [7 x i8] c"expand\00" @.str.4458 = private unnamed_addr constant [7 x i8] c"expand\00" @.str.4459 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4460 = private unnamed_addr constant [2 x i8] c"i\00" @.str.4461 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4462 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00" @.str.4463 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4464 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00" @.str.4465 = private unnamed_addr constant [7 x i8] c"memory\00" @.str.4466 = private unnamed_addr constant [7 x i8] c"direct\00" @.str.4467 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.4468 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4469 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.4470 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4471 = private unnamed_addr constant [17 x i8] c"the C function '\00" @.str.4472 = private unnamed_addr constant [3 x i8] c"' \00" @.str.4473 = private unnamed_addr constant [19 x i8] c" the Finch struct \00" @.str.4474 = private unnamed_addr constant [21 x i8] c", which C can't take\00" @.str.4475 = private unnamed_addr constant [17 x i8] c"the C function '\00" @.str.4476 = private unnamed_addr constant [3 x i8] c"' \00" @.str.4477 = private unnamed_addr constant [13 x i8] c" the struct \00" @.str.4478 = private unnamed_addr constant [41 x i8] c" by value, which Finch can't do yet: it \00" @.str.4479 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.4480 = private unnamed_addr constant [5 x i8] c"char\00" @.str.4481 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.4482 = private unnamed_addr constant [60 x i8] c"methods can't be exported (export a plain fn that calls it)\00" @.str.4483 = private unnamed_addr constant [75 x i8] c"an export fn can't fail (C has no errors as values): handle them inside it\00" @.str.4484 = private unnamed_addr constant [30 x i8] c"an export fn can't be generic\00" @.str.4485 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4486 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4487 = private unnamed_addr constant [67 x i8] c"an export fn takes numbers, bool, char and pointers only (this is \00" @.str.4488 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4489 = private unnamed_addr constant [51 x i8] c"; pass text as ptr[char] and make it a str inside)\00" @.str.4490 = private unnamed_addr constant [5 x i8] c"void\00" @.str.4491 = private unnamed_addr constant [70 x i8] c"an export fn returns nothing, a number, bool, char or a pointer (not \00" @.str.4492 = private unnamed_addr constant [2 x i8] c")\00" @.str.4493 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4494 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.4495 = private unnamed_addr constant [2 x i8] c"'\00" @.str.4496 = private unnamed_addr constant [39 x i8] c"' is exported twice (from two modules)\00" @.str.4497 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4498 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.4499 = private unnamed_addr constant [14 x i8] c"i8 zeroext %e\00" @.str.4500 = private unnamed_addr constant [4 x i8] c"i1 \00" @.str.4501 = private unnamed_addr constant [14 x i8] c"icmp ne i8 %e\00" @.str.4502 = private unnamed_addr constant [4 x i8] c", 0\00" @.str.4503 = private unnamed_addr constant [4 x i8] c" %e\00" @.str.4504 = private unnamed_addr constant [4 x i8] c" %e\00" @.str.4505 = private unnamed_addr constant [6 x i8] c"call \00" @.str.4506 = private unnamed_addr constant [2 x i8] c" \00" @.str.4507 = private unnamed_addr constant [2 x i8] c"(\00" @.str.4508 = private unnamed_addr constant [3 x i8] c", \00" @.str.4509 = private unnamed_addr constant [2 x i8] c")\00" @.str.4510 = private unnamed_addr constant [5 x i8] c"void\00" @.str.4511 = private unnamed_addr constant [1 x i8] c"\00" @.str.4512 = private unnamed_addr constant [5 x i8] c"void\00" @.str.4513 = private unnamed_addr constant [9 x i8] c"ret void\00" @.str.4514 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.4515 = private unnamed_addr constant [3 x i8] c"i8\00" @.str.4516 = private unnamed_addr constant [9 x i8] c" zeroext\00" @.str.4517 = private unnamed_addr constant [8 x i8] c"ret i8 \00" @.str.4518 = private unnamed_addr constant [9 x i8] c"zext i1 \00" @.str.4519 = private unnamed_addr constant [7 x i8] c" to i8\00" @.str.4520 = private unnamed_addr constant [5 x i8] c"ret \00" @.str.4521 = private unnamed_addr constant [2 x i8] c" \00" @.str.4522 = private unnamed_addr constant [1 x i8] c"\00" @.str.4523 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4524 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00" @.str.4525 = private unnamed_addr constant [11 x i8] c" dllexport\00" @.str.4526 = private unnamed_addr constant [7 x i8] c"define\00" @.str.4527 = private unnamed_addr constant [2 x i8] c" \00" @.str.4528 = private unnamed_addr constant [3 x i8] c" @\00" @.str.4529 = private unnamed_addr constant [2 x i8] c"(\00" @.str.4530 = private unnamed_addr constant [3 x i8] c", \00" @.str.4531 = private unnamed_addr constant [2 x i8] c")\00" @.str.4532 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4533 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.4534 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4535 = private unnamed_addr constant [10 x i8] c"@finch.c.\00" @.str.4536 = private unnamed_addr constant [2 x i8] c".\00" @.str.4537 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4538 = private unnamed_addr constant [30 x i8] c"used .cdone on a null pointer\00" @.str.4539 = private unnamed_addr constant [3 x i8] c"t:\00" @.str.4540 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4541 = private unnamed_addr constant [30 x i8] c"used .cdone on a null pointer\00" @.str.4542 = private unnamed_addr constant [3 x i8] c"t:\00" @.str.4543 = private unnamed_addr constant [6 x i8] c"addr(\00" @.str.4544 = private unnamed_addr constant [82 x i8] c") gives C a function pointer, so it can't be a method or a function that can fail\00" @.str.4545 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.4546 = private unnamed_addr constant [5 x i8] c"char\00" @.str.4547 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.4548 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.4549 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4550 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.4551 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4552 = private unnamed_addr constant [6 x i8] c"addr(\00" @.str.4553 = private unnamed_addr constant [96 x i8] c") gives C a function pointer, so its parameters must be C types (numbers, ptr, C structs), not \00" @.str.4554 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.4555 = private unnamed_addr constant [5 x i8] c"char\00" @.str.4556 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.4557 = private unnamed_addr constant [5 x i8] c"void\00" @.str.4558 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.4559 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4560 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.4561 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4562 = private unnamed_addr constant [6 x i8] c"addr(\00" @.str.4563 = private unnamed_addr constant [39 x i8] c"): a function given to C can't return \00" @.str.4564 = private unnamed_addr constant [1 x i8] c"\00" @.str.4565 = private unnamed_addr constant [10 x i8] c"ptr sret(\00" @.str.4566 = private unnamed_addr constant [15 x i8] c") align 16 %c0\00" @.str.4567 = private unnamed_addr constant [4 x i8] c"%c0\00" @.str.4568 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4569 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4570 = private unnamed_addr constant [7 x i8] c"memory\00" @.str.4571 = private unnamed_addr constant [11 x i8] c"ptr byval(\00" @.str.4572 = private unnamed_addr constant [9 x i8] c") align \00" @.str.4573 = private unnamed_addr constant [4 x i8] c" %c\00" @.str.4574 = private unnamed_addr constant [2 x i8] c" \00" @.str.4575 = private unnamed_addr constant [3 x i8] c"%c\00" @.str.4576 = private unnamed_addr constant [9 x i8] c"indirect\00" @.str.4577 = private unnamed_addr constant [7 x i8] c"ptr %c\00" @.str.4578 = private unnamed_addr constant [2 x i8] c" \00" @.str.4579 = private unnamed_addr constant [3 x i8] c"%c\00" @.str.4580 = private unnamed_addr constant [7 x i8] c"expand\00" @.str.4581 = private unnamed_addr constant [10 x i8] c"[32 x i8]\00" @.str.4582 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4583 = private unnamed_addr constant [4 x i8] c" %c\00" @.str.4584 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4585 = private unnamed_addr constant [3 x i8] c"%c\00" @.str.4586 = private unnamed_addr constant [32 x i8] c"getelementptr inbounds i8, ptr \00" @.str.4587 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.4588 = private unnamed_addr constant [2 x i8] c" \00" @.str.4589 = private unnamed_addr constant [4 x i8] c" %c\00" @.str.4590 = private unnamed_addr constant [4 x i8] c" %c\00" @.str.4591 = private unnamed_addr constant [6 x i8] c"call \00" @.str.4592 = private unnamed_addr constant [2 x i8] c" \00" @.str.4593 = private unnamed_addr constant [2 x i8] c"(\00" @.str.4594 = private unnamed_addr constant [3 x i8] c", \00" @.str.4595 = private unnamed_addr constant [2 x i8] c")\00" @.str.4596 = private unnamed_addr constant [1 x i8] c"\00" @.str.4597 = private unnamed_addr constant [5 x i8] c"void\00" @.str.4598 = private unnamed_addr constant [9 x i8] c"ret void\00" @.str.4599 = private unnamed_addr constant [9 x i8] c"ret void\00" @.str.4600 = private unnamed_addr constant [7 x i8] c"expand\00" @.str.4601 = private unnamed_addr constant [10 x i8] c"[32 x i8]\00" @.str.4602 = private unnamed_addr constant [5 x i8] c"ret \00" @.str.4603 = private unnamed_addr constant [2 x i8] c" \00" @.str.4604 = private unnamed_addr constant [5 x i8] c"ret \00" @.str.4605 = private unnamed_addr constant [2 x i8] c" \00" @.str.4606 = private unnamed_addr constant [16 x i8] c"define internal\00" @.str.4607 = private unnamed_addr constant [2 x i8] c" \00" @.str.4608 = private unnamed_addr constant [2 x i8] c" \00" @.str.4609 = private unnamed_addr constant [2 x i8] c"(\00" @.str.4610 = private unnamed_addr constant [3 x i8] c", \00" @.str.4611 = private unnamed_addr constant [2 x i8] c")\00" @.str.4612 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4613 = private unnamed_addr constant [30 x i8] c"used .enums on a null pointer\00" @.str.4614 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4615 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4616 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4617 = private unnamed_addr constant [55 x i8] c"(...) turns a whole number into the enum, but this is \00" @.str.4618 = private unnamed_addr constant [5 x i8] c"enum\00" @.str.4619 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4620 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4621 = private unnamed_addr constant [38 x i8] c" is not the number of any variant of \00" @.str.4622 = private unnamed_addr constant [4 x i8] c"int\00" @.str.4623 = private unnamed_addr constant [1 x i8] c"\00" @.str.4624 = private unnamed_addr constant [13 x i8] c"icmp eq i64 \00" @.str.4625 = private unnamed_addr constant [3 x i8] c", \00" @.str.4626 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4627 = private unnamed_addr constant [7 x i8] c"or i1 \00" @.str.4628 = private unnamed_addr constant [3 x i8] c", \00" @.str.4629 = private unnamed_addr constant [8 x i8] c"xor i1 \00" @.str.4630 = private unnamed_addr constant [7 x i8] c", true\00" @.str.4631 = private unnamed_addr constant [33 x i8] c"this number is not a variant of \00" @.str.4632 = private unnamed_addr constant [11 x i8] c"trunc i64 \00" @.str.4633 = private unnamed_addr constant [8 x i8] c" to i32\00" @.str.4634 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.4635 = private unnamed_addr constant [9 x i8] c" zeroext\00" @.str.4636 = private unnamed_addr constant [5 x i8] c"char\00" @.str.4637 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4638 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00" @.str.4639 = private unnamed_addr constant [9 x i8] c" signext\00" @.str.4640 = private unnamed_addr constant [5 x i8] c"char\00" @.str.4641 = private unnamed_addr constant [9 x i8] c" zeroext\00" @.str.4642 = private unnamed_addr constant [1 x i8] c"\00" @.str.4643 = private unnamed_addr constant [4 x i8] c"str\00" @.str.4644 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.4645 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4646 = private unnamed_addr constant [30 x i8] c"used .index on a null pointer\00" @.str.4647 = private unnamed_addr constant [4 x i8] c"...\00" @.str.4648 = private unnamed_addr constant [18 x i8] c"C function from `\00" @.str.4649 = private unnamed_addr constant [8 x i8] c"`\0A```c\0A\00" @.str.4650 = private unnamed_addr constant [2 x i8] c" \00" @.str.4651 = private unnamed_addr constant [2 x i8] c"(\00" @.str.4652 = private unnamed_addr constant [3 x i8] c", \00" @.str.4653 = private unnamed_addr constant [6 x i8] c")\0A```\00" @.str.4654 = private unnamed_addr constant [1 x i8] c"\00" @.str.4655 = private unnamed_addr constant [17 x i8] c"the C function '\00" @.str.4656 = private unnamed_addr constant [36 x i8] c"' can't be used from Finch yet: it \00" @.str.4657 = private unnamed_addr constant [2 x i8] c"'\00" @.str.4658 = private unnamed_addr constant [18 x i8] c"' takes at least \00" @.str.4659 = private unnamed_addr constant [23 x i8] c" argument(s), but got \00" @.str.4660 = private unnamed_addr constant [2 x i8] c"'\00" @.str.4661 = private unnamed_addr constant [9 x i8] c"' takes \00" @.str.4662 = private unnamed_addr constant [23 x i8] c" argument(s), but got \00" @.str.4663 = private unnamed_addr constant [8 x i8] c"returns\00" @.str.4664 = private unnamed_addr constant [6 x i8] c"takes\00" @.str.4665 = private unnamed_addr constant [1 x i8] c"\00" @.str.4666 = private unnamed_addr constant [10 x i8] c"ptr sret(\00" @.str.4667 = private unnamed_addr constant [11 x i8] c") align 16\00" @.str.4668 = private unnamed_addr constant [10 x i8] c"ptr sret(\00" @.str.4669 = private unnamed_addr constant [12 x i8] c") align 16 \00" @.str.4670 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4671 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4672 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4673 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4674 = private unnamed_addr constant [10 x i8] c"argument \00" @.str.4675 = private unnamed_addr constant [5 x i8] c" of \00" @.str.4676 = private unnamed_addr constant [7 x i8] c"memory\00" @.str.4677 = private unnamed_addr constant [11 x i8] c"ptr byval(\00" @.str.4678 = private unnamed_addr constant [9 x i8] c") align \00" @.str.4679 = private unnamed_addr constant [2 x i8] c" \00" @.str.4680 = private unnamed_addr constant [9 x i8] c"indirect\00" @.str.4681 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.4682 = private unnamed_addr constant [5 x i8] c"ptr \00" @.str.4683 = private unnamed_addr constant [7 x i8] c"expand\00" @.str.4684 = private unnamed_addr constant [10 x i8] c"[32 x i8]\00" @.str.4685 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4686 = private unnamed_addr constant [32 x i8] c"getelementptr inbounds i8, ptr \00" @.str.4687 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.4688 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4689 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4690 = private unnamed_addr constant [2 x i8] c" \00" @.str.4691 = private unnamed_addr constant [4 x i8] c"str\00" @.str.4692 = private unnamed_addr constant [5 x i8] c"ptr \00" @.str.4693 = private unnamed_addr constant [2 x i8] c" \00" @.str.4694 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4695 = private unnamed_addr constant [5 x i8] c"void\00" @.str.4696 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4697 = private unnamed_addr constant [24 x i8] c"this gives back nothing\00" @.str.4698 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.4699 = private unnamed_addr constant [6 x i8] c"array\00" @.str.4700 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4701 = private unnamed_addr constant [69 x i8] c"structs and arrays can't be passed to the '...' part of a C function\00" @.str.4702 = private unnamed_addr constant [4 x i8] c"f32\00" @.str.4703 = private unnamed_addr constant [6 x i8] c"float\00" @.str.4704 = private unnamed_addr constant [6 x i8] c"float\00" @.str.4705 = private unnamed_addr constant [4 x i8] c"str\00" @.str.4706 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.4707 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.4708 = private unnamed_addr constant [9 x i8] c"zext i1 \00" @.str.4709 = private unnamed_addr constant [8 x i8] c" to i32\00" @.str.4710 = private unnamed_addr constant [4 x i8] c"i32\00" @.str.4711 = private unnamed_addr constant [5 x i8] c"char\00" @.str.4712 = private unnamed_addr constant [4 x i8] c"i32\00" @.str.4713 = private unnamed_addr constant [4 x i8] c"i32\00" @.str.4714 = private unnamed_addr constant [2 x i8] c" \00" @.str.4715 = private unnamed_addr constant [1 x i8] c"\00" @.str.4716 = private unnamed_addr constant [7 x i8] c"direct\00" @.str.4717 = private unnamed_addr constant [1 x i8] c"\00" @.str.4718 = private unnamed_addr constant [6 x i8] c", ...\00" @.str.4719 = private unnamed_addr constant [4 x i8] c"...\00" @.str.4720 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4721 = private unnamed_addr constant [30 x i8] c"used .cdone on a null pointer\00" @.str.4722 = private unnamed_addr constant [3 x i8] c"f:\00" @.str.4723 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4724 = private unnamed_addr constant [30 x i8] c"used .cdone on a null pointer\00" @.str.4725 = private unnamed_addr constant [3 x i8] c"f:\00" @.str.4726 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4727 = private unnamed_addr constant [29 x i8] c"used .head on a null pointer\00" @.str.4728 = private unnamed_addr constant [8 x i8] c"declare\00" @.str.4729 = private unnamed_addr constant [2 x i8] c" \00" @.str.4730 = private unnamed_addr constant [3 x i8] c" @\00" @.str.4731 = private unnamed_addr constant [2 x i8] c"(\00" @.str.4732 = private unnamed_addr constant [3 x i8] c", \00" @.str.4733 = private unnamed_addr constant [2 x i8] c")\00" @.str.4734 = private unnamed_addr constant [1 x i8] c"\00" @.str.4735 = private unnamed_addr constant [3 x i8] c" (\00" @.str.4736 = private unnamed_addr constant [3 x i8] c", \00" @.str.4737 = private unnamed_addr constant [2 x i8] c")\00" @.str.4738 = private unnamed_addr constant [5 x i8] c"call\00" @.str.4739 = private unnamed_addr constant [2 x i8] c" \00" @.str.4740 = private unnamed_addr constant [3 x i8] c" @\00" @.str.4741 = private unnamed_addr constant [2 x i8] c"(\00" @.str.4742 = private unnamed_addr constant [3 x i8] c", \00" @.str.4743 = private unnamed_addr constant [2 x i8] c")\00" @.str.4744 = private unnamed_addr constant [5 x i8] c"void\00" @.str.4745 = private unnamed_addr constant [7 x i8] c"expand\00" @.str.4746 = private unnamed_addr constant [10 x i8] c"[32 x i8]\00" @.str.4747 = private unnamed_addr constant [4 x i8] c"str\00" @.str.4748 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.4749 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" @.str.4750 = private unnamed_addr constant [33 x i8] c"call void @finch_str_from_c(ptr \00" @.str.4751 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.4752 = private unnamed_addr constant [2 x i8] c")\00" @.str.4753 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.4754 = private unnamed_addr constant [7 x i8] c"printf\00" @.str.4755 = private unnamed_addr constant [7 x i8] c"fflush\00" @.str.4756 = private unnamed_addr constant [5 x i8] c"exit\00" @.str.4757 = private unnamed_addr constant [5 x i8] c"free\00" @.str.4758 = private unnamed_addr constant [6 x i8] c"qsort\00" @.str.4759 = private unnamed_addr constant [7 x i8] c"printf\00" @.str.4760 = private unnamed_addr constant [5 x i8] c"puts\00" @.str.4761 = private unnamed_addr constant [8 x i8] c"putchar\00" @.str.4762 = private unnamed_addr constant [6 x i8] c"scanf\00" @.str.4763 = private unnamed_addr constant [6 x i8] c"fopen\00" @.str.4764 = private unnamed_addr constant [8 x i8] c"getchar\00" @.str.4765 = private unnamed_addr constant [5 x i8] c"sqrt\00" @.str.4766 = private unnamed_addr constant [4 x i8] c"pow\00" @.str.4767 = private unnamed_addr constant [4 x i8] c"sin\00" @.str.4768 = private unnamed_addr constant [4 x i8] c"cos\00" @.str.4769 = private unnamed_addr constant [6 x i8] c"floor\00" @.str.4770 = private unnamed_addr constant [5 x i8] c"fabs\00" @.str.4771 = private unnamed_addr constant [7 x i8] c"malloc\00" @.str.4772 = private unnamed_addr constant [5 x i8] c"rand\00" @.str.4773 = private unnamed_addr constant [6 x i8] c"srand\00" @.str.4774 = private unnamed_addr constant [4 x i8] c"abs\00" @.str.4775 = private unnamed_addr constant [5 x i8] c"atoi\00" @.str.4776 = private unnamed_addr constant [7 x i8] c"strlen\00" @.str.4777 = private unnamed_addr constant [7 x i8] c"strcpy\00" @.str.4778 = private unnamed_addr constant [7 x i8] c"memcpy\00" @.str.4779 = private unnamed_addr constant [5 x i8] c"time\00" @.str.4780 = private unnamed_addr constant [6 x i8] c"sleep\00" @.str.4781 = private unnamed_addr constant [7 x i8] c"usleep\00" @.str.4782 = private unnamed_addr constant [8 x i8] c"stdio.h\00" @.str.4783 = private unnamed_addr constant [8 x i8] c"stdio.h\00" @.str.4784 = private unnamed_addr constant [8 x i8] c"stdio.h\00" @.str.4785 = private unnamed_addr constant [8 x i8] c"stdio.h\00" @.str.4786 = private unnamed_addr constant [8 x i8] c"stdio.h\00" @.str.4787 = private unnamed_addr constant [8 x i8] c"stdio.h\00" @.str.4788 = private unnamed_addr constant [7 x i8] c"math.h\00" @.str.4789 = private unnamed_addr constant [7 x i8] c"math.h\00" @.str.4790 = private unnamed_addr constant [7 x i8] c"math.h\00" @.str.4791 = private unnamed_addr constant [7 x i8] c"math.h\00" @.str.4792 = private unnamed_addr constant [7 x i8] c"math.h\00" @.str.4793 = private unnamed_addr constant [7 x i8] c"math.h\00" @.str.4794 = private unnamed_addr constant [9 x i8] c"stdlib.h\00" @.str.4795 = private unnamed_addr constant [9 x i8] c"stdlib.h\00" @.str.4796 = private unnamed_addr constant [9 x i8] c"stdlib.h\00" @.str.4797 = private unnamed_addr constant [9 x i8] c"stdlib.h\00" @.str.4798 = private unnamed_addr constant [9 x i8] c"stdlib.h\00" @.str.4799 = private unnamed_addr constant [9 x i8] c"string.h\00" @.str.4800 = private unnamed_addr constant [9 x i8] c"string.h\00" @.str.4801 = private unnamed_addr constant [9 x i8] c"string.h\00" @.str.4802 = private unnamed_addr constant [7 x i8] c"time.h\00" @.str.4803 = private unnamed_addr constant [9 x i8] c"unistd.h\00" @.str.4804 = private unnamed_addr constant [9 x i8] c"unistd.h\00" @.str.4805 = private unnamed_addr constant [1 x i8] c"\00" @.str.4806 = private unnamed_addr constant [29 x i8] c" (it's from C: add import \22\00" @.str.4807 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4808 = private unnamed_addr constant [15 x i8] c"\22 at the top)\00" @.str.4809 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4810 = private unnamed_addr constant [30 x i8] c"used .index on a null pointer\00" @.str.4811 = private unnamed_addr constant [1 x i8] c"\00" @.str.4812 = private unnamed_addr constant [6 x i8] c"error\00" @.str.4813 = private unnamed_addr constant [87 x i8] c"error(...) makes an error to return from a function that can fail: return error(\22...\22)\00" @.str.4814 = private unnamed_addr constant [6 x i8] c"print\00" @.str.4815 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4816 = private unnamed_addr constant [5 x i8] c"void\00" @.str.4817 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4818 = private unnamed_addr constant [54 x i8] c"this gives back nothing, so there is nothing to print\00" @.str.4819 = private unnamed_addr constant [2 x i8] c" \00" @.str.4820 = private unnamed_addr constant [1 x i8] c"\00" @.str.4821 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.4822 = private unnamed_addr constant [1 x i8] c"\00" @.str.4823 = private unnamed_addr constant [5 x i8] c"void\00" @.str.4824 = private unnamed_addr constant [5 x i8] c"addr\00" @.str.4825 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4826 = private unnamed_addr constant [4 x i8] c"var\00" @.str.4827 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4828 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.4829 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.4830 = private unnamed_addr constant [4 x i8] c"var\00" @.str.4831 = private unnamed_addr constant [7 x i8] c"member\00" @.str.4832 = private unnamed_addr constant [6 x i8] c"index\00" @.str.4833 = private unnamed_addr constant [64 x i8] c"addr(...) needs a variable, a field or an element, like addr(x)\00" @.str.4834 = private unnamed_addr constant [4 x i8] c"str\00" @.str.4835 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4836 = private unnamed_addr constant [4 x i8] c"str\00" @.str.4837 = private unnamed_addr constant [35 x i8] c"call void @finch_str_from_int(ptr \00" @.str.4838 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.4839 = private unnamed_addr constant [4 x i8] c"int\00" @.str.4840 = private unnamed_addr constant [2 x i8] c")\00" @.str.4841 = private unnamed_addr constant [36 x i8] c"call void @finch_str_from_uint(ptr \00" @.str.4842 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.4843 = private unnamed_addr constant [4 x i8] c"u64\00" @.str.4844 = private unnamed_addr constant [2 x i8] c")\00" @.str.4845 = private unnamed_addr constant [37 x i8] c"call void @finch_str_from_float(ptr \00" @.str.4846 = private unnamed_addr constant [10 x i8] c", double \00" @.str.4847 = private unnamed_addr constant [6 x i8] c"float\00" @.str.4848 = private unnamed_addr constant [2 x i8] c")\00" @.str.4849 = private unnamed_addr constant [5 x i8] c"char\00" @.str.4850 = private unnamed_addr constant [36 x i8] c"call void @finch_str_from_char(ptr \00" @.str.4851 = private unnamed_addr constant [14 x i8] c", i8 signext \00" @.str.4852 = private unnamed_addr constant [2 x i8] c")\00" @.str.4853 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.4854 = private unnamed_addr constant [9 x i8] c"zext i1 \00" @.str.4855 = private unnamed_addr constant [8 x i8] c" to i32\00" @.str.4856 = private unnamed_addr constant [36 x i8] c"call void @finch_str_from_bool(ptr \00" @.str.4857 = private unnamed_addr constant [7 x i8] c", i32 \00" @.str.4858 = private unnamed_addr constant [2 x i8] c")\00" @.str.4859 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.4860 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.4861 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" @.str.4862 = private unnamed_addr constant [33 x i8] c"call void @finch_str_from_c(ptr \00" @.str.4863 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.4864 = private unnamed_addr constant [2 x i8] c")\00" @.str.4865 = private unnamed_addr constant [6 x i8] c"array\00" @.str.4866 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4867 = private unnamed_addr constant [3 x i8] c"u8\00" @.str.4868 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4869 = private unnamed_addr constant [5 x i8] c"char\00" @.str.4870 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.4871 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" @.str.4872 = private unnamed_addr constant [37 x i8] c"call void @finch_str_from_bytes(ptr \00" @.str.4873 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.4874 = private unnamed_addr constant [2 x i8] c")\00" @.str.4875 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.4876 = private unnamed_addr constant [5 x i8] c"char\00" @.str.4877 = private unnamed_addr constant [6 x i8] c"array\00" @.str.4878 = private unnamed_addr constant [4 x i8] c"map\00" @.str.4879 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.4880 = private unnamed_addr constant [5 x i8] c"enum\00" @.str.4881 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.4882 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" @.str.4883 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4884 = private unnamed_addr constant [12 x i8] c"can't turn \00" @.str.4885 = private unnamed_addr constant [10 x i8] c" into str\00" @.str.4886 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.4887 = private unnamed_addr constant [4 x i8] c"str\00" @.str.4888 = private unnamed_addr constant [10 x i8] c"read_file\00" @.str.4889 = private unnamed_addr constant [12 x i8] c"file_exists\00" @.str.4890 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4891 = private unnamed_addr constant [14 x i8] c"the file name\00" @.str.4892 = private unnamed_addr constant [12 x i8] c"file_exists\00" @.str.4893 = private unnamed_addr constant [33 x i8] c"call i32 @finch_file_exists(ptr \00" @.str.4894 = private unnamed_addr constant [2 x i8] c")\00" @.str.4895 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" @.str.4896 = private unnamed_addr constant [4 x i8] c", 0\00" @.str.4897 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.4898 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4899 = private unnamed_addr constant [32 x i8] c"used .ftarget on a null pointer\00" @.str.4900 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.4901 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.4902 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" @.str.4903 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.4904 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" @.str.4905 = private unnamed_addr constant [35 x i8] c"call i32 @finch_try_read_file(ptr \00" @.str.4906 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.4907 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.4908 = private unnamed_addr constant [2 x i8] c")\00" @.str.4909 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" @.str.4910 = private unnamed_addr constant [4 x i8] c", 0\00" @.str.4911 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4912 = private unnamed_addr constant [32 x i8] c"used .ffailed on a null pointer\00" @.str.4913 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.4914 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4915 = private unnamed_addr constant [29 x i8] c"used .fmsg on a null pointer\00" @.str.4916 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.4917 = private unnamed_addr constant [4 x i8] c"str\00" @.str.4918 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4919 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" @.str.4920 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4921 = private unnamed_addr constant [32 x i8] c"call void @finch_read_file(ptr \00" @.str.4922 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.4923 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.4924 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.4925 = private unnamed_addr constant [2 x i8] c")\00" @.str.4926 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.4927 = private unnamed_addr constant [4 x i8] c"str\00" @.str.4928 = private unnamed_addr constant [11 x i8] c"write_file\00" @.str.4929 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4930 = private unnamed_addr constant [14 x i8] c"the file name\00" @.str.4931 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4932 = private unnamed_addr constant [9 x i8] c"the text\00" @.str.4933 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4934 = private unnamed_addr constant [32 x i8] c"used .ftarget on a null pointer\00" @.str.4935 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.4936 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.4937 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" @.str.4938 = private unnamed_addr constant [36 x i8] c"call i32 @finch_try_write_file(ptr \00" @.str.4939 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.4940 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.4941 = private unnamed_addr constant [2 x i8] c")\00" @.str.4942 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" @.str.4943 = private unnamed_addr constant [4 x i8] c", 0\00" @.str.4944 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4945 = private unnamed_addr constant [32 x i8] c"used .ffailed on a null pointer\00" @.str.4946 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.4947 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4948 = private unnamed_addr constant [29 x i8] c"used .fmsg on a null pointer\00" @.str.4949 = private unnamed_addr constant [5 x i8] c"void\00" @.str.4950 = private unnamed_addr constant [32 x i8] c"call i32 @finch_write_file(ptr \00" @.str.4951 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.4952 = private unnamed_addr constant [2 x i8] c")\00" @.str.4953 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" @.str.4954 = private unnamed_addr constant [4 x i8] c", 0\00" @.str.4955 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.4956 = private unnamed_addr constant [12 x i8] c"delete_file\00" @.str.4957 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4958 = private unnamed_addr constant [14 x i8] c"the file name\00" @.str.4959 = private unnamed_addr constant [31 x i8] c"call void @finch_str_copy(ptr \00" @.str.4960 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.4961 = private unnamed_addr constant [2 x i8] c")\00" @.str.4962 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4963 = private unnamed_addr constant [32 x i8] c"used .ftarget on a null pointer\00" @.str.4964 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.4965 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.4966 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" @.str.4967 = private unnamed_addr constant [37 x i8] c"call i32 @finch_try_delete_file(ptr \00" @.str.4968 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.4969 = private unnamed_addr constant [2 x i8] c")\00" @.str.4970 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" @.str.4971 = private unnamed_addr constant [4 x i8] c", 0\00" @.str.4972 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4973 = private unnamed_addr constant [32 x i8] c"used .ffailed on a null pointer\00" @.str.4974 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.4975 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4976 = private unnamed_addr constant [29 x i8] c"used .fmsg on a null pointer\00" @.str.4977 = private unnamed_addr constant [5 x i8] c"void\00" @.str.4978 = private unnamed_addr constant [33 x i8] c"call i32 @finch_delete_file(ptr \00" @.str.4979 = private unnamed_addr constant [2 x i8] c")\00" @.str.4980 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" @.str.4981 = private unnamed_addr constant [4 x i8] c", 0\00" @.str.4982 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.4983 = private unnamed_addr constant [6 x i8] c"shell\00" @.str.4984 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4985 = private unnamed_addr constant [12 x i8] c"the command\00" @.str.4986 = private unnamed_addr constant [31 x i8] c"call void @finch_str_copy(ptr \00" @.str.4987 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.4988 = private unnamed_addr constant [2 x i8] c")\00" @.str.4989 = private unnamed_addr constant [27 x i8] c"call i64 @finch_shell(ptr \00" @.str.4990 = private unnamed_addr constant [2 x i8] c")\00" @.str.4991 = private unnamed_addr constant [4 x i8] c"int\00" @.str.4992 = private unnamed_addr constant [5 x i8] c"exit\00" @.str.4993 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4994 = private unnamed_addr constant [4 x i8] c"int\00" @.str.4995 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.4996 = private unnamed_addr constant [14 x i8] c"the exit code\00" @.str.4997 = private unnamed_addr constant [11 x i8] c"trunc i64 \00" @.str.4998 = private unnamed_addr constant [8 x i8] c" to i32\00" @.str.4999 = private unnamed_addr constant [27 x i8] c"call i32 @fflush(ptr null)\00" @.str.5000 = private unnamed_addr constant [21 x i8] c"call void @exit(i32 \00" @.str.5001 = private unnamed_addr constant [2 x i8] c")\00" @.str.5002 = private unnamed_addr constant [5 x i8] c"void\00" @.str.5003 = private unnamed_addr constant [6 x i8] c"input\00" @.str.5004 = private unnamed_addr constant [1 x i8] c"\00" @.str.5005 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5006 = private unnamed_addr constant [13 x i8] c"the question\00" @.str.5007 = private unnamed_addr constant [28 x i8] c"call void @finch_input(ptr \00" @.str.5008 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.5009 = private unnamed_addr constant [2 x i8] c")\00" @.str.5010 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.5011 = private unnamed_addr constant [4 x i8] c"str\00" @.str.5012 = private unnamed_addr constant [4 x i8] c"new\00" @.str.5013 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5014 = private unnamed_addr constant [27 x i8] c"call ptr @finch_alloc(i64 \00" @.str.5015 = private unnamed_addr constant [2 x i8] c")\00" @.str.5016 = private unnamed_addr constant [5 x i8] c"free\00" @.str.5017 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5018 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.5019 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5020 = private unnamed_addr constant [120 x i8] c"free(...) is only for pointers from new(...) or C; arrays, str and structs are freed by Finch at the end of their block\00" @.str.5021 = private unnamed_addr constant [21 x i8] c"call void @free(ptr \00" @.str.5022 = private unnamed_addr constant [2 x i8] c")\00" @.str.5023 = private unnamed_addr constant [5 x i8] c"void\00" @.str.5024 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5025 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.5026 = private unnamed_addr constant [2 x i8] c"'\00" @.str.5027 = private unnamed_addr constant [48 x i8] c"' is not generic, so it takes no type arguments\00" @.str.5028 = private unnamed_addr constant [1 x i8] c"\00" @.str.5029 = private unnamed_addr constant [1 x i8] c"\00" @.str.5030 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5031 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.5032 = private unnamed_addr constant [1 x i8] c"\00" @.str.5033 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5034 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.5035 = private unnamed_addr constant [1 x i8] c"\00" @.str.5036 = private unnamed_addr constant [2 x i8] c"'\00" @.str.5037 = private unnamed_addr constant [43 x i8] c"' is generic, so say which type it holds: \00" @.str.5038 = private unnamed_addr constant [11 x i8] c"[int](...)\00" @.str.5039 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5040 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.5041 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5042 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.5043 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5044 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.5045 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5046 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5047 = private unnamed_addr constant [30 x i8] c"used .index on a null pointer\00" @.str.5048 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5049 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.5050 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5051 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5052 = private unnamed_addr constant [17 x i8] c"```finch\0Astruct \00" @.str.5053 = private unnamed_addr constant [4 x i8] c" { \00" @.str.5054 = private unnamed_addr constant [3 x i8] c", \00" @.str.5055 = private unnamed_addr constant [7 x i8] c" }\0A```\00" @.str.5056 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5057 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" @.str.5058 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5059 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5060 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.5061 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5062 = private unnamed_addr constant [27 x i8] c"used .ci on a null pointer\00" @.str.5063 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5064 = private unnamed_addr constant [27 x i8] c"used .ci on a null pointer\00" @.str.5065 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5066 = private unnamed_addr constant [2 x i8] c"C\00" @.str.5067 = private unnamed_addr constant [2 x i8] c"'\00" @.str.5068 = private unnamed_addr constant [32 x i8] c"' is a variable, not a function\00" @.str.5069 = private unnamed_addr constant [29 x i8] c"there is no function named '\00" @.str.5070 = private unnamed_addr constant [2 x i8] c"'\00" @.str.5071 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5072 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.5073 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5074 = private unnamed_addr constant [5 x i8] c"main\00" @.str.5075 = private unnamed_addr constant [53 x i8] c"main can't be called, it is where the program starts\00" @.str.5076 = private unnamed_addr constant [5 x i8] c"ptr \00" @.str.5077 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5078 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5079 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5080 = private unnamed_addr constant [11 x i8] c"argument '\00" @.str.5081 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5082 = private unnamed_addr constant [2 x i8] c"'\00" @.str.5083 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5084 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5085 = private unnamed_addr constant [2 x i8] c" \00" @.str.5086 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5087 = private unnamed_addr constant [32 x i8] c"used .ftarget on a null pointer\00" @.str.5088 = private unnamed_addr constant [2 x i8] c"'\00" @.str.5089 = private unnamed_addr constant [40 x i8] c"' can fail, so say what happens then: \00" @.str.5090 = private unnamed_addr constant [20 x i8] c"(...) or , \00" @.str.5091 = private unnamed_addr constant [28 x i8] c"(...) or { ... }, or try \00" @.str.5092 = private unnamed_addr constant [6 x i8] c"(...)\00" @.str.5093 = private unnamed_addr constant [6 x i8] c"call \00" @.str.5094 = private unnamed_addr constant [2 x i8] c" \00" @.str.5095 = private unnamed_addr constant [2 x i8] c"(\00" @.str.5096 = private unnamed_addr constant [3 x i8] c", \00" @.str.5097 = private unnamed_addr constant [2 x i8] c")\00" @.str.5098 = private unnamed_addr constant [14 x i8] c"extractvalue \00" @.str.5099 = private unnamed_addr constant [2 x i8] c" \00" @.str.5100 = private unnamed_addr constant [4 x i8] c", 0\00" @.str.5101 = private unnamed_addr constant [8 x i8] c"xor i1 \00" @.str.5102 = private unnamed_addr constant [7 x i8] c", true\00" @.str.5103 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5104 = private unnamed_addr constant [32 x i8] c"used .ffailed on a null pointer\00" @.str.5105 = private unnamed_addr constant [14 x i8] c"extractvalue \00" @.str.5106 = private unnamed_addr constant [2 x i8] c" \00" @.str.5107 = private unnamed_addr constant [4 x i8] c", 2\00" @.str.5108 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5109 = private unnamed_addr constant [29 x i8] c"used .fmsg on a null pointer\00" @.str.5110 = private unnamed_addr constant [5 x i8] c"void\00" @.str.5111 = private unnamed_addr constant [14 x i8] c"extractvalue \00" @.str.5112 = private unnamed_addr constant [2 x i8] c" \00" @.str.5113 = private unnamed_addr constant [4 x i8] c", 1\00" @.str.5114 = private unnamed_addr constant [5 x i8] c"void\00" @.str.5115 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5116 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.5117 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5118 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5119 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.5120 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5121 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5122 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.5123 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5124 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5125 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5126 = private unnamed_addr constant [70 x i8] c"give either all fields by name (x: 1, y: 2) or none (1, 2), not a mix\00" @.str.5127 = private unnamed_addr constant [6 x i8] c" has \00" @.str.5128 = private unnamed_addr constant [18 x i8] c" fields, but got \00" @.str.5129 = private unnamed_addr constant [24 x i8] c" values (or name them: \00" @.str.5130 = private unnamed_addr constant [16 x i8] c"(field: value))\00" @.str.5131 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5132 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5133 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5134 = private unnamed_addr constant [16 x i8] c" has no field '\00" @.str.5135 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5136 = private unnamed_addr constant [2 x i8] c"'\00" @.str.5137 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5138 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5139 = private unnamed_addr constant [12 x i8] c"the field '\00" @.str.5140 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5141 = private unnamed_addr constant [17 x i8] c"' is given twice\00" @.str.5142 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5143 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" @.str.5144 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5145 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5146 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5147 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5148 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5149 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5150 = private unnamed_addr constant [12 x i8] c"the field '\00" @.str.5151 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5152 = private unnamed_addr constant [2 x i8] c"'\00" @.str.5153 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5154 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5155 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" @.str.5156 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5157 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.5158 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5159 = private unnamed_addr constant [31 x i8] c"used .tnames on a null pointer\00" @.str.5160 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5161 = private unnamed_addr constant [30 x i8] c"used .targs on a null pointer\00" @.str.5162 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5163 = private unnamed_addr constant [31 x i8] c"used .tnames on a null pointer\00" @.str.5164 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5165 = private unnamed_addr constant [30 x i8] c"used .targs on a null pointer\00" @.str.5166 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5167 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" @.str.5168 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5169 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.5170 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5171 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5172 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5173 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5174 = private unnamed_addr constant [17 x i8] c"the default of '\00" @.str.5175 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5176 = private unnamed_addr constant [2 x i8] c"'\00" @.str.5177 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5178 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" @.str.5179 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5180 = private unnamed_addr constant [31 x i8] c"used .tnames on a null pointer\00" @.str.5181 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5182 = private unnamed_addr constant [30 x i8] c"used .targs on a null pointer\00" @.str.5183 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5184 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" @.str.5185 = private unnamed_addr constant [13 x i8] c"insertvalue \00" @.str.5186 = private unnamed_addr constant [2 x i8] c" \00" @.str.5187 = private unnamed_addr constant [3 x i8] c", \00" @.str.5188 = private unnamed_addr constant [2 x i8] c" \00" @.str.5189 = private unnamed_addr constant [3 x i8] c", \00" @.str.5190 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5191 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5192 = private unnamed_addr constant [30 x i8] c"used .index on a null pointer\00" @.str.5193 = private unnamed_addr constant [1 x i8] c"\00" @.str.5194 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5195 = private unnamed_addr constant [4 x i8] c"var\00" @.str.5196 = private unnamed_addr constant [39 x i8] c"there is no variable or module named '\00" @.str.5197 = private unnamed_addr constant [33 x i8] c"' (to use a module, add import \00" @.str.5198 = private unnamed_addr constant [14 x i8] c" at the top)\00" @.str.5199 = private unnamed_addr constant [2 x i8] c".\00" @.str.5200 = private unnamed_addr constant [1 x i8] c"\00" @.str.5201 = private unnamed_addr constant [1 x i8] c"\00" @.str.5202 = private unnamed_addr constant [1 x i8] c"\00" @.str.5203 = private unnamed_addr constant [2 x i8] c".\00" @.str.5204 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5205 = private unnamed_addr constant [13 x i8] c"the module '\00" @.str.5206 = private unnamed_addr constant [36 x i8] c"' has no function or struct named '\00" @.str.5207 = private unnamed_addr constant [2 x i8] c"'\00" @.str.5208 = private unnamed_addr constant [5 x i8] c"push\00" @.str.5209 = private unnamed_addr constant [4 x i8] c"pop\00" @.str.5210 = private unnamed_addr constant [7 x i8] c"insert\00" @.str.5211 = private unnamed_addr constant [7 x i8] c"remove\00" @.str.5212 = private unnamed_addr constant [6 x i8] c"clear\00" @.str.5213 = private unnamed_addr constant [7 x i8] c"resize\00" @.str.5214 = private unnamed_addr constant [5 x i8] c"sort\00" @.str.5215 = private unnamed_addr constant [8 x i8] c"reverse\00" @.str.5216 = private unnamed_addr constant [6 x i8] c"array\00" @.str.5217 = private unnamed_addr constant [1 x i8] c"\00" @.str.5218 = private unnamed_addr constant [64 x i8] c"() would change a temporary array; store it in a variable first\00" @.str.5219 = private unnamed_addr constant [4 x i8] c"str\00" @.str.5220 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.5221 = private unnamed_addr constant [4 x i8] c"map\00" @.str.5222 = private unnamed_addr constant [1 x i8] c"\00" @.str.5223 = private unnamed_addr constant [62 x i8] c"() would change a temporary map; store it in a variable first\00" @.str.5224 = private unnamed_addr constant [1 x i8] c"\00" @.str.5225 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.5226 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5227 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.5228 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.5229 = private unnamed_addr constant [13 x i8] c"icmp eq ptr \00" @.str.5230 = private unnamed_addr constant [7 x i8] c", null\00" @.str.5231 = private unnamed_addr constant [9 x i8] c"called .\00" @.str.5232 = private unnamed_addr constant [21 x i8] c"() on a null pointer\00" @.str.5233 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5234 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.5235 = private unnamed_addr constant [5 x i8] c"enum\00" @.str.5236 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.5237 = private unnamed_addr constant [5 x i8] c"enum\00" @.str.5238 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.5239 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5240 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.5241 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5242 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5243 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.5244 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5245 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5246 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" @.str.5247 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5248 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5249 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.5250 = private unnamed_addr constant [5 x i8] c"the \00" @.str.5251 = private unnamed_addr constant [2 x i8] c" \00" @.str.5252 = private unnamed_addr constant [35 x i8] c" has no methods; add one with fn \00" @.str.5253 = private unnamed_addr constant [2 x i8] c".\00" @.str.5254 = private unnamed_addr constant [14 x i8] c"(...) { ... }\00" @.str.5255 = private unnamed_addr constant [5 x i8] c"the \00" @.str.5256 = private unnamed_addr constant [2 x i8] c" \00" @.str.5257 = private unnamed_addr constant [17 x i8] c" has no method '\00" @.str.5258 = private unnamed_addr constant [12 x i8] c"' (it has: \00" @.str.5259 = private unnamed_addr constant [3 x i8] c", \00" @.str.5260 = private unnamed_addr constant [2 x i8] c")\00" @.str.5261 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5262 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.5263 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5264 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.5265 = private unnamed_addr constant [5 x i8] c"enum\00" @.str.5266 = private unnamed_addr constant [29 x i8] c"() would change a temporary \00" @.str.5267 = private unnamed_addr constant [31 x i8] c"; store it in a variable first\00" @.str.5268 = private unnamed_addr constant [20 x i8] c"the loop variable '\00" @.str.5269 = private unnamed_addr constant [19 x i8] c"' can't be changed\00" @.str.5270 = private unnamed_addr constant [2 x i8] c".\00" @.str.5271 = private unnamed_addr constant [16 x i8] c" has no methods\00" @.str.5272 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5273 = private unnamed_addr constant [47 x i8] c"getelementptr inbounds { ptr, i64, i64 }, ptr \00" @.str.5274 = private unnamed_addr constant [15 x i8] c", i32 0, i32 1\00" @.str.5275 = private unnamed_addr constant [5 x i8] c"push\00" @.str.5276 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5277 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5278 = private unnamed_addr constant [12 x i8] c"the element\00" @.str.5279 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.5280 = private unnamed_addr constant [9 x i8] c"add i64 \00" @.str.5281 = private unnamed_addr constant [4 x i8] c", 1\00" @.str.5282 = private unnamed_addr constant [34 x i8] c"call void @finch_arr_reserve(ptr \00" @.str.5283 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.5284 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.5285 = private unnamed_addr constant [2 x i8] c")\00" @.str.5286 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.5287 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.5288 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.5289 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.5290 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.5291 = private unnamed_addr constant [5 x i8] c"void\00" @.str.5292 = private unnamed_addr constant [4 x i8] c"pop\00" @.str.5293 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.5294 = private unnamed_addr constant [13 x i8] c"icmp eq i64 \00" @.str.5295 = private unnamed_addr constant [4 x i8] c", 0\00" @.str.5296 = private unnamed_addr constant [24 x i8] c"pop() on an empty array\00" @.str.5297 = private unnamed_addr constant [9 x i8] c"sub i64 \00" @.str.5298 = private unnamed_addr constant [4 x i8] c", 1\00" @.str.5299 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.5300 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.5301 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.5302 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.5303 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.5304 = private unnamed_addr constant [6 x i8] c"clear\00" @.str.5305 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.5306 = private unnamed_addr constant [2 x i8] c"0\00" @.str.5307 = private unnamed_addr constant [5 x i8] c"void\00" @.str.5308 = private unnamed_addr constant [5 x i8] c"find\00" @.str.5309 = private unnamed_addr constant [9 x i8] c"contains\00" @.str.5310 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5311 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5312 = private unnamed_addr constant [22 x i8] c"the value to look for\00" @.str.5313 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.5314 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.5315 = private unnamed_addr constant [3 x i8] c"-1\00" @.str.5316 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.5317 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.5318 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.5319 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.5320 = private unnamed_addr constant [2 x i8] c"0\00" @.str.5321 = private unnamed_addr constant [10 x i8] c"find.cond\00" @.str.5322 = private unnamed_addr constant [10 x i8] c"find.body\00" @.str.5323 = private unnamed_addr constant [9 x i8] c"find.hit\00" @.str.5324 = private unnamed_addr constant [10 x i8] c"find.next\00" @.str.5325 = private unnamed_addr constant [9 x i8] c"find.end\00" @.str.5326 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.5327 = private unnamed_addr constant [14 x i8] c"icmp slt i64 \00" @.str.5328 = private unnamed_addr constant [3 x i8] c", \00" @.str.5329 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.5330 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.5331 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.5332 = private unnamed_addr constant [3 x i8] c"==\00" @.str.5333 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.5334 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.5335 = private unnamed_addr constant [9 x i8] c"add i64 \00" @.str.5336 = private unnamed_addr constant [4 x i8] c", 1\00" @.str.5337 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.5338 = private unnamed_addr constant [5 x i8] c"find\00" @.str.5339 = private unnamed_addr constant [4 x i8] c"int\00" @.str.5340 = private unnamed_addr constant [14 x i8] c"icmp sge i64 \00" @.str.5341 = private unnamed_addr constant [4 x i8] c", 0\00" @.str.5342 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.5343 = private unnamed_addr constant [5 x i8] c"join\00" @.str.5344 = private unnamed_addr constant [4 x i8] c"str\00" @.str.5345 = private unnamed_addr constant [32 x i8] c"join() works on an array of str\00" @.str.5346 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5347 = private unnamed_addr constant [14 x i8] c"the separator\00" @.str.5348 = private unnamed_addr constant [31 x i8] c"call void @finch_str_join(ptr \00" @.str.5349 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.5350 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.5351 = private unnamed_addr constant [2 x i8] c")\00" @.str.5352 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.5353 = private unnamed_addr constant [4 x i8] c"str\00" @.str.5354 = private unnamed_addr constant [7 x i8] c"insert\00" @.str.5355 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5356 = private unnamed_addr constant [4 x i8] c"int\00" @.str.5357 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5358 = private unnamed_addr constant [13 x i8] c"the position\00" @.str.5359 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5360 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5361 = private unnamed_addr constant [12 x i8] c"the element\00" @.str.5362 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5363 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" @.str.5364 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5365 = private unnamed_addr constant [37 x i8] c"call void @finch_arr_insert_gap(ptr \00" @.str.5366 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.5367 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.5368 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.5369 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.5370 = private unnamed_addr constant [2 x i8] c")\00" @.str.5371 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.5372 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.5373 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.5374 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.5375 = private unnamed_addr constant [5 x i8] c"void\00" @.str.5376 = private unnamed_addr constant [7 x i8] c"remove\00" @.str.5377 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5378 = private unnamed_addr constant [4 x i8] c"int\00" @.str.5379 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5380 = private unnamed_addr constant [13 x i8] c"the position\00" @.str.5381 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.5382 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.5383 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.5384 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.5385 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.5386 = private unnamed_addr constant [37 x i8] c"call void @finch_arr_remove_gap(ptr \00" @.str.5387 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.5388 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.5389 = private unnamed_addr constant [2 x i8] c")\00" @.str.5390 = private unnamed_addr constant [7 x i8] c"resize\00" @.str.5391 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5392 = private unnamed_addr constant [4 x i8] c"int\00" @.str.5393 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5394 = private unnamed_addr constant [15 x i8] c"the new length\00" @.str.5395 = private unnamed_addr constant [33 x i8] c"call void @finch_arr_resize(ptr \00" @.str.5396 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.5397 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.5398 = private unnamed_addr constant [2 x i8] c")\00" @.str.5399 = private unnamed_addr constant [5 x i8] c"void\00" @.str.5400 = private unnamed_addr constant [8 x i8] c"reverse\00" @.str.5401 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.5402 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.5403 = private unnamed_addr constant [10 x i8] c"sdiv i64 \00" @.str.5404 = private unnamed_addr constant [4 x i8] c", 2\00" @.str.5405 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.5406 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.5407 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.5408 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5409 = private unnamed_addr constant [9 x i8] c"sub i64 \00" @.str.5410 = private unnamed_addr constant [9 x i8] c"sub i64 \00" @.str.5411 = private unnamed_addr constant [4 x i8] c", 1\00" @.str.5412 = private unnamed_addr constant [3 x i8] c", \00" @.str.5413 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5414 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.5415 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.5416 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.5417 = private unnamed_addr constant [5 x i8] c"void\00" @.str.5418 = private unnamed_addr constant [6 x i8] c"slice\00" @.str.5419 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5420 = private unnamed_addr constant [4 x i8] c"int\00" @.str.5421 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5422 = private unnamed_addr constant [10 x i8] c"the start\00" @.str.5423 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5424 = private unnamed_addr constant [4 x i8] c"int\00" @.str.5425 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5426 = private unnamed_addr constant [8 x i8] c"the end\00" @.str.5427 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.5428 = private unnamed_addr constant [14 x i8] c"icmp slt i64 \00" @.str.5429 = private unnamed_addr constant [4 x i8] c", 0\00" @.str.5430 = private unnamed_addr constant [14 x i8] c"icmp sgt i64 \00" @.str.5431 = private unnamed_addr constant [3 x i8] c", \00" @.str.5432 = private unnamed_addr constant [14 x i8] c"icmp sgt i64 \00" @.str.5433 = private unnamed_addr constant [3 x i8] c", \00" @.str.5434 = private unnamed_addr constant [7 x i8] c"or i1 \00" @.str.5435 = private unnamed_addr constant [7 x i8] c"or i1 \00" @.str.5436 = private unnamed_addr constant [3 x i8] c", \00" @.str.5437 = private unnamed_addr constant [3 x i8] c", \00" @.str.5438 = private unnamed_addr constant [34 x i8] c"slice(start, end) is out of range\00" @.str.5439 = private unnamed_addr constant [9 x i8] c"sub i64 \00" @.str.5440 = private unnamed_addr constant [3 x i8] c", \00" @.str.5441 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.5442 = private unnamed_addr constant [31 x i8] c"call void @finch_arr_make(ptr \00" @.str.5443 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.5444 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.5445 = private unnamed_addr constant [2 x i8] c")\00" @.str.5446 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.5447 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.5448 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.5449 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.5450 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.5451 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5452 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" @.str.5453 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.5454 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.5455 = private unnamed_addr constant [9 x i8] c"add i64 \00" @.str.5456 = private unnamed_addr constant [3 x i8] c", \00" @.str.5457 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5458 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.5459 = private unnamed_addr constant [5 x i8] c"sort\00" @.str.5460 = private unnamed_addr constant [5 x i8] c"char\00" @.str.5461 = private unnamed_addr constant [4 x i8] c"str\00" @.str.5462 = private unnamed_addr constant [48 x i8] c"sort() works on arrays of numbers, chars or str\00" @.str.5463 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.5464 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.5465 = private unnamed_addr constant [22 x i8] c"call void @qsort(ptr \00" @.str.5466 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.5467 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.5468 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.5469 = private unnamed_addr constant [2 x i8] c")\00" @.str.5470 = private unnamed_addr constant [5 x i8] c"void\00" @.str.5471 = private unnamed_addr constant [25 x i8] c"an array has no method '\00" @.str.5472 = private unnamed_addr constant [97 x i8] c"' (it has: push, pop, insert, remove, clear, resize, find, contains, join, slice, reverse, sort)\00" @.str.5473 = private unnamed_addr constant [12 x i8] c"@finch.cmp.\00" @.str.5474 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5475 = private unnamed_addr constant [29 x i8] c"used .done on a null pointer\00" @.str.5476 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5477 = private unnamed_addr constant [29 x i8] c"used .done on a null pointer\00" @.str.5478 = private unnamed_addr constant [1 x i8] c"\00" @.str.5479 = private unnamed_addr constant [4 x i8] c"str\00" @.str.5480 = private unnamed_addr constant [40 x i8] c"call i64 @finch_str_cmp(ptr %x, ptr %y)\00" @.str.5481 = private unnamed_addr constant [11 x i8] c"trunc i64 \00" @.str.5482 = private unnamed_addr constant [8 x i8] c" to i32\00" @.str.5483 = private unnamed_addr constant [3 x i8] c"%x\00" @.str.5484 = private unnamed_addr constant [3 x i8] c"%y\00" @.str.5485 = private unnamed_addr constant [1 x i8] c"\00" @.str.5486 = private unnamed_addr constant [1 x i8] c"\00" @.str.5487 = private unnamed_addr constant [10 x i8] c"fcmp olt \00" @.str.5488 = private unnamed_addr constant [2 x i8] c" \00" @.str.5489 = private unnamed_addr constant [3 x i8] c", \00" @.str.5490 = private unnamed_addr constant [10 x i8] c"fcmp ogt \00" @.str.5491 = private unnamed_addr constant [2 x i8] c" \00" @.str.5492 = private unnamed_addr constant [3 x i8] c", \00" @.str.5493 = private unnamed_addr constant [6 x i8] c"icmp \00" @.str.5494 = private unnamed_addr constant [2 x i8] c"<\00" @.str.5495 = private unnamed_addr constant [2 x i8] c" \00" @.str.5496 = private unnamed_addr constant [2 x i8] c" \00" @.str.5497 = private unnamed_addr constant [3 x i8] c", \00" @.str.5498 = private unnamed_addr constant [6 x i8] c"icmp \00" @.str.5499 = private unnamed_addr constant [2 x i8] c">\00" @.str.5500 = private unnamed_addr constant [2 x i8] c" \00" @.str.5501 = private unnamed_addr constant [2 x i8] c" \00" @.str.5502 = private unnamed_addr constant [3 x i8] c", \00" @.str.5503 = private unnamed_addr constant [9 x i8] c"sub i32 \00" @.str.5504 = private unnamed_addr constant [9 x i8] c"zext i1 \00" @.str.5505 = private unnamed_addr constant [8 x i8] c" to i32\00" @.str.5506 = private unnamed_addr constant [3 x i8] c", \00" @.str.5507 = private unnamed_addr constant [9 x i8] c"zext i1 \00" @.str.5508 = private unnamed_addr constant [8 x i8] c" to i32\00" @.str.5509 = private unnamed_addr constant [9 x i8] c"ret i32 \00" @.str.5510 = private unnamed_addr constant [21 x i8] c"define internal i32 \00" @.str.5511 = private unnamed_addr constant [17 x i8] c"(ptr %x, ptr %y)\00" @.str.5512 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5513 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" @.str.5514 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5515 = private unnamed_addr constant [4 x i8] c"sub\00" @.str.5516 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5517 = private unnamed_addr constant [4 x i8] c"int\00" @.str.5518 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5519 = private unnamed_addr constant [10 x i8] c"the start\00" @.str.5520 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5521 = private unnamed_addr constant [4 x i8] c"int\00" @.str.5522 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5523 = private unnamed_addr constant [8 x i8] c"the end\00" @.str.5524 = private unnamed_addr constant [30 x i8] c"call void @finch_str_sub(ptr \00" @.str.5525 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.5526 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.5527 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.5528 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.5529 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.5530 = private unnamed_addr constant [2 x i8] c")\00" @.str.5531 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.5532 = private unnamed_addr constant [4 x i8] c"str\00" @.str.5533 = private unnamed_addr constant [5 x i8] c"find\00" @.str.5534 = private unnamed_addr constant [9 x i8] c"contains\00" @.str.5535 = private unnamed_addr constant [12 x i8] c"starts_with\00" @.str.5536 = private unnamed_addr constant [10 x i8] c"ends_with\00" @.str.5537 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5538 = private unnamed_addr constant [21 x i8] c"the text to look for\00" @.str.5539 = private unnamed_addr constant [5 x i8] c"find\00" @.str.5540 = private unnamed_addr constant [30 x i8] c"call i64 @finch_str_find(ptr \00" @.str.5541 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.5542 = private unnamed_addr constant [2 x i8] c")\00" @.str.5543 = private unnamed_addr constant [4 x i8] c"int\00" @.str.5544 = private unnamed_addr constant [9 x i8] c"contains\00" @.str.5545 = private unnamed_addr constant [30 x i8] c"call i64 @finch_str_find(ptr \00" @.str.5546 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.5547 = private unnamed_addr constant [2 x i8] c")\00" @.str.5548 = private unnamed_addr constant [14 x i8] c"icmp sge i64 \00" @.str.5549 = private unnamed_addr constant [4 x i8] c", 0\00" @.str.5550 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.5551 = private unnamed_addr constant [18 x i8] c"@finch_str_starts\00" @.str.5552 = private unnamed_addr constant [10 x i8] c"ends_with\00" @.str.5553 = private unnamed_addr constant [16 x i8] c"@finch_str_ends\00" @.str.5554 = private unnamed_addr constant [10 x i8] c"call i32 \00" @.str.5555 = private unnamed_addr constant [6 x i8] c"(ptr \00" @.str.5556 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.5557 = private unnamed_addr constant [2 x i8] c")\00" @.str.5558 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" @.str.5559 = private unnamed_addr constant [4 x i8] c", 0\00" @.str.5560 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.5561 = private unnamed_addr constant [5 x i8] c"trim\00" @.str.5562 = private unnamed_addr constant [6 x i8] c"upper\00" @.str.5563 = private unnamed_addr constant [6 x i8] c"lower\00" @.str.5564 = private unnamed_addr constant [22 x i8] c"call void @finch_str_\00" @.str.5565 = private unnamed_addr constant [6 x i8] c"(ptr \00" @.str.5566 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.5567 = private unnamed_addr constant [2 x i8] c")\00" @.str.5568 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.5569 = private unnamed_addr constant [4 x i8] c"str\00" @.str.5570 = private unnamed_addr constant [8 x i8] c"replace\00" @.str.5571 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5572 = private unnamed_addr constant [20 x i8] c"the text to replace\00" @.str.5573 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5574 = private unnamed_addr constant [13 x i8] c"the new text\00" @.str.5575 = private unnamed_addr constant [34 x i8] c"call void @finch_str_replace(ptr \00" @.str.5576 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.5577 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.5578 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.5579 = private unnamed_addr constant [2 x i8] c")\00" @.str.5580 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.5581 = private unnamed_addr constant [4 x i8] c"str\00" @.str.5582 = private unnamed_addr constant [6 x i8] c"split\00" @.str.5583 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5584 = private unnamed_addr constant [14 x i8] c"the separator\00" @.str.5585 = private unnamed_addr constant [32 x i8] c"call void @finch_str_split(ptr \00" @.str.5586 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.5587 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.5588 = private unnamed_addr constant [2 x i8] c")\00" @.str.5589 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.5590 = private unnamed_addr constant [4 x i8] c"str\00" @.str.5591 = private unnamed_addr constant [7 x i8] c"repeat\00" @.str.5592 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5593 = private unnamed_addr constant [4 x i8] c"int\00" @.str.5594 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5595 = private unnamed_addr constant [10 x i8] c"the count\00" @.str.5596 = private unnamed_addr constant [33 x i8] c"call void @finch_str_repeat(ptr \00" @.str.5597 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.5598 = private unnamed_addr constant [7 x i8] c", i64 \00" @.str.5599 = private unnamed_addr constant [2 x i8] c")\00" @.str.5600 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.5601 = private unnamed_addr constant [4 x i8] c"str\00" @.str.5602 = private unnamed_addr constant [6 x i8] c"bytes\00" @.str.5603 = private unnamed_addr constant [37 x i8] c"call void @finch_bytes_from_str(ptr \00" @.str.5604 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str.5605 = private unnamed_addr constant [2 x i8] c")\00" @.str.5606 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" @.str.5607 = private unnamed_addr constant [3 x i8] c"u8\00" @.str.5608 = private unnamed_addr constant [22 x i8] c"a str has no method '\00" @.str.5609 = private unnamed_addr constant [107 x i8] c"' (it has: sub, find, contains, starts_with, ends_with, split, trim, upper, lower, replace, repeat, bytes)\00" @.str.5610 = private unnamed_addr constant [55 x i8] c"declare void @finch_panic(ptr, i64, ptr) noreturn cold\00" @.str.5611 = private unnamed_addr constant [66 x i8] c"declare void @finch_panic_index(ptr, i64, i64, i64) noreturn cold\00" @.str.5612 = private unnamed_addr constant [30 x i8] c"declare ptr @finch_alloc(i64)\00" @.str.5613 = private unnamed_addr constant [39 x i8] c"declare void @finch_str_copy(ptr, ptr)\00" @.str.5614 = private unnamed_addr constant [33 x i8] c"declare void @finch_str_own(ptr)\00" @.str.5615 = private unnamed_addr constant [46 x i8] c"declare void @finch_str_concat(ptr, ptr, ptr)\00" @.str.5616 = private unnamed_addr constant [36 x i8] c"declare i32 @finch_str_eq(ptr, ptr)\00" @.str.5617 = private unnamed_addr constant [37 x i8] c"declare i64 @finch_str_cmp(ptr, ptr)\00" @.str.5618 = private unnamed_addr constant [43 x i8] c"declare void @finch_buf_add(ptr, ptr, i64)\00" @.str.5619 = private unnamed_addr constant [38 x i8] c"declare void @finch_buf_int(ptr, i64)\00" @.str.5620 = private unnamed_addr constant [39 x i8] c"declare void @finch_buf_uint(ptr, i64)\00" @.str.5621 = private unnamed_addr constant [43 x i8] c"declare void @finch_buf_float(ptr, double)\00" @.str.5622 = private unnamed_addr constant [39 x i8] c"declare void @finch_buf_bool(ptr, i32)\00" @.str.5623 = private unnamed_addr constant [38 x i8] c"declare void @finch_buf_ptr(ptr, ptr)\00" @.str.5624 = private unnamed_addr constant [43 x i8] c"declare void @finch_buf_char(ptr, i8, i32)\00" @.str.5625 = private unnamed_addr constant [43 x i8] c"declare void @finch_buf_str(ptr, ptr, i32)\00" @.str.5626 = private unnamed_addr constant [35 x i8] c"declare void @finch_buf_print(ptr)\00" @.str.5627 = private unnamed_addr constant [43 x i8] c"declare void @finch_str_from_int(ptr, i64)\00" @.str.5628 = private unnamed_addr constant [44 x i8] c"declare void @finch_str_from_uint(ptr, i64)\00" @.str.5629 = private unnamed_addr constant [48 x i8] c"declare void @finch_str_from_float(ptr, double)\00" @.str.5630 = private unnamed_addr constant [51 x i8] c"declare void @finch_str_from_char(ptr, i8 signext)\00" @.str.5631 = private unnamed_addr constant [44 x i8] c"declare void @finch_str_from_bool(ptr, i32)\00" @.str.5632 = private unnamed_addr constant [45 x i8] c"declare i64 @finch_str_to_int(ptr, ptr, i64)\00" @.str.5633 = private unnamed_addr constant [50 x i8] c"declare double @finch_str_to_float(ptr, ptr, i64)\00" @.str.5634 = private unnamed_addr constant [58 x i8] c"declare void @finch_str_sub(ptr, ptr, i64, i64, ptr, i64)\00" @.str.5635 = private unnamed_addr constant [38 x i8] c"declare i64 @finch_str_find(ptr, ptr)\00" @.str.5636 = private unnamed_addr constant [40 x i8] c"declare i32 @finch_str_starts(ptr, ptr)\00" @.str.5637 = private unnamed_addr constant [38 x i8] c"declare i32 @finch_str_ends(ptr, ptr)\00" @.str.5638 = private unnamed_addr constant [39 x i8] c"declare void @finch_str_trim(ptr, ptr)\00" @.str.5639 = private unnamed_addr constant [40 x i8] c"declare void @finch_str_upper(ptr, ptr)\00" @.str.5640 = private unnamed_addr constant [40 x i8] c"declare void @finch_str_lower(ptr, ptr)\00" @.str.5641 = private unnamed_addr constant [52 x i8] c"declare void @finch_str_replace(ptr, ptr, ptr, ptr)\00" @.str.5642 = private unnamed_addr constant [45 x i8] c"declare void @finch_str_split(ptr, ptr, ptr)\00" @.str.5643 = private unnamed_addr constant [44 x i8] c"declare void @finch_str_join(ptr, ptr, ptr)\00" @.str.5644 = private unnamed_addr constant [46 x i8] c"declare void @finch_str_repeat(ptr, ptr, i64)\00" @.str.5645 = private unnamed_addr constant [45 x i8] c"declare void @finch_bytes_from_str(ptr, ptr)\00" @.str.5646 = private unnamed_addr constant [53 x i8] c"declare i64 @finch_map_find(ptr, ptr, i64, i64, i32)\00" @.str.5647 = private unnamed_addr constant [58 x i8] c"declare i64 @finch_map_slot(ptr, ptr, i64, i64, i32, ptr)\00" @.str.5648 = private unnamed_addr constant [49 x i8] c"declare void @finch_map_remove_at(ptr, i64, i64)\00" @.str.5649 = private unnamed_addr constant [35 x i8] c"declare void @finch_map_clear(ptr)\00" @.str.5650 = private unnamed_addr constant [49 x i8] c"declare void @finch_map_clone_raw(ptr, ptr, i64)\00" @.str.5651 = private unnamed_addr constant [61 x i8] c"declare void @finch_map_missing(ptr, i64, ptr) noreturn cold\00" @.str.5652 = private unnamed_addr constant [56 x i8] c"declare void @finch_map_changed(ptr, i64) noreturn cold\00" @.str.5653 = private unnamed_addr constant [47 x i8] c"declare void @finch_arr_reserve(ptr, i64, i64)\00" @.str.5654 = private unnamed_addr constant [49 x i8] c"declare void @finch_arr_clone_raw(ptr, ptr, i64)\00" @.str.5655 = private unnamed_addr constant [44 x i8] c"declare void @finch_arr_make(ptr, i64, i64)\00" @.str.5656 = private unnamed_addr constant [46 x i8] c"declare void @finch_arr_resize(ptr, i64, i64)\00" @.str.5657 = private unnamed_addr constant [60 x i8] c"declare void @finch_arr_insert_gap(ptr, i64, i64, ptr, i64)\00" @.str.5658 = private unnamed_addr constant [50 x i8] c"declare void @finch_arr_remove_gap(ptr, i64, i64)\00" @.str.5659 = private unnamed_addr constant [40 x i8] c"declare void @qsort(ptr, i64, i64, ptr)\00" @.str.5660 = private unnamed_addr constant [40 x i8] c"declare void @finch_args(ptr, i32, ptr)\00" @.str.5661 = private unnamed_addr constant [36 x i8] c"declare void @finch_input(ptr, ptr)\00" @.str.5662 = private unnamed_addr constant [36 x i8] c"declare i32 @finch_file_exists(ptr)\00" @.str.5663 = private unnamed_addr constant [46 x i8] c"declare i32 @finch_str_try_int(ptr, ptr, ptr)\00" @.str.5664 = private unnamed_addr constant [48 x i8] c"declare i32 @finch_str_try_float(ptr, ptr, ptr)\00" @.str.5665 = private unnamed_addr constant [48 x i8] c"declare i32 @finch_try_read_file(ptr, ptr, ptr)\00" @.str.5666 = private unnamed_addr constant [49 x i8] c"declare i32 @finch_try_write_file(ptr, ptr, ptr)\00" @.str.5667 = private unnamed_addr constant [45 x i8] c"declare i32 @finch_try_delete_file(ptr, ptr)\00" @.str.5668 = private unnamed_addr constant [38 x i8] c"declare void @finch_report_error(ptr)\00" @.str.5669 = private unnamed_addr constant [50 x i8] c"declare void @finch_read_file(ptr, ptr, ptr, i64)\00" @.str.5670 = private unnamed_addr constant [40 x i8] c"declare i32 @finch_write_file(ptr, ptr)\00" @.str.5671 = private unnamed_addr constant [30 x i8] c"declare i64 @finch_shell(ptr)\00" @.str.5672 = private unnamed_addr constant [36 x i8] c"declare i32 @finch_delete_file(ptr)\00" @.str.5673 = private unnamed_addr constant [30 x i8] c"declare i32 @printf(ptr, ...)\00" @.str.5674 = private unnamed_addr constant [25 x i8] c"declare i32 @fflush(ptr)\00" @.str.5675 = private unnamed_addr constant [41 x i8] c"declare void @finch_str_from_c(ptr, ptr)\00" @.str.5676 = private unnamed_addr constant [34 x i8] c"declare void @finch_on_fatal(ptr)\00" @.str.5677 = private unnamed_addr constant [35 x i8] c"declare ptr @finch_std_stream(i32)\00" @.str.5678 = private unnamed_addr constant [45 x i8] c"declare void @finch_str_from_bytes(ptr, ptr)\00" @.str.5679 = private unnamed_addr constant [33 x i8] c"declare void @exit(i32) noreturn\00" @.str.5680 = private unnamed_addr constant [24 x i8] c"declare void @free(ptr)\00" @.str.5681 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.5682 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.5683 = private unnamed_addr constant [53 x i8] c"; generated by the Finch compiler written in Finch\0A\0A\00" @.str.5684 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5685 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00" @.str.5686 = private unnamed_addr constant [18 x i8] c"target triple = \22\00" @.str.5687 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5688 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00" @.str.5689 = private unnamed_addr constant [4 x i8] c"\22\0A\0A\00" @.str.5690 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5691 = private unnamed_addr constant [29 x i8] c"used .head on a null pointer\00" @.str.5692 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.5693 = private unnamed_addr constant [3 x i8] c"\0A\0A\00" @.str.5694 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.5695 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5696 = private unnamed_addr constant [30 x i8] c"used .debug on a null pointer\00" @.str.5697 = private unnamed_addr constant [63 x i8] c"declare void @llvm.dbg.declare(metadata, metadata, metadata)\0A\0A\00" @.str.5698 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5699 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.5700 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.5701 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5702 = private unnamed_addr constant [30 x i8] c"used .debug on a null pointer\00" @.str.5703 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.5704 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5705 = private unnamed_addr constant [30 x i8] c"used .debug on a null pointer\00" @.str.5706 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5707 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" @.str.5708 = private unnamed_addr constant [1 x i8] c"\00" @.str.5709 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5710 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" @.str.5711 = private unnamed_addr constant [34 x i8] c"!{i32 7, !\22Dwarf Version\22, i32 4}\00" @.str.5712 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5713 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" @.str.5714 = private unnamed_addr constant [39 x i8] c"!{i32 2, !\22Debug Info Version\22, i32 3}\00" @.str.5715 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5716 = private unnamed_addr constant [32 x i8] c"used .mdfiles on a null pointer\00" @.str.5717 = private unnamed_addr constant [20 x i8] c"!DIFile(filename: \22\00" @.str.5718 = private unnamed_addr constant [16 x i8] c"\22, directory: \22\00" @.str.5719 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5720 = private unnamed_addr constant [28 x i8] c"used .cwd on a null pointer\00" @.str.5721 = private unnamed_addr constant [3 x i8] c"\22)\00" @.str.5722 = private unnamed_addr constant [53 x i8] c"distinct !DICompileUnit(language: DW_LANG_C, file: !\00" @.str.5723 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5724 = private unnamed_addr constant [32 x i8] c"used .mdfiles on a null pointer\00" @.str.5725 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5726 = private unnamed_addr constant [85 x i8] c", producer: \22finch\22, isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug)\00" @.str.5727 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5728 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" @.str.5729 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5730 = private unnamed_addr constant [1 x i8] c"\00" @.str.5731 = private unnamed_addr constant [5 x i8] c"main\00" @.str.5732 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5733 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.5734 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5735 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.5736 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5737 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5738 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5739 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.5740 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5741 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5742 = private unnamed_addr constant [83 x i8] c"a library (--shared) has no main: the program that loads it calls its 'export fn's\00" @.str.5743 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5744 = private unnamed_addr constant [65 x i8] c":1:1: error: there is no main function (add 'fn main() { ... }')\00" @.str.5745 = private unnamed_addr constant [1 x i8] c"\00" @.str.5746 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.5747 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.5748 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5749 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.5750 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5751 = private unnamed_addr constant [30 x i8] c"used .index on a null pointer\00" @.str.5752 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5753 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.5754 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5755 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5756 = private unnamed_addr constant [28 x i8] c"used .idx on a null pointer\00" @.str.5757 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.5758 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5759 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.5760 = private unnamed_addr constant [1 x i8] c"\00" @.str.5761 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5762 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00" @.str.5763 = private unnamed_addr constant [11 x i8] c" dllexport\00" @.str.5764 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5765 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.5766 = private unnamed_addr constant [7 x i8] c"define\00" @.str.5767 = private unnamed_addr constant [108 x i8] c" void @finch_module_on_fatal(ptr %handler) {\0Aentry:\0A call void @finch_on_fatal(ptr %handler)\0A ret void\0A}\0A\00" @.str.5768 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5769 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.5770 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5771 = private unnamed_addr constant [6 x i8] c"call \00" @.str.5772 = private unnamed_addr constant [2 x i8] c" \00" @.str.5773 = private unnamed_addr constant [2 x i8] c"(\00" @.str.5774 = private unnamed_addr constant [1 x i8] c"\00" @.str.5775 = private unnamed_addr constant [134 x i8] c" %args = alloca { ptr, i64, i64 }\0A call void @finch_args(ptr %args, i32 %argc, ptr %argv)\0A %a = load { ptr, i64, i64 }, ptr %args\0A\00" @.str.5776 = private unnamed_addr constant [21 x i8] c"{ ptr, i64, i64 } %a\00" @.str.5777 = private unnamed_addr constant [2 x i8] c")\00" @.str.5778 = private unnamed_addr constant [13 x i8] c" ret i32 0\0A\00" @.str.5779 = private unnamed_addr constant [6 x i8] c"%r = \00" @.str.5780 = private unnamed_addr constant [3 x i8] c" \00" @.str.5781 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.5782 = private unnamed_addr constant [1 x i8] c"\00" @.str.5783 = private unnamed_addr constant [22 x i8] c" %ok = extractvalue \00" @.str.5784 = private unnamed_addr constant [63 x i8] c" %r, 0\0A br i1 %ok, label %main.ok, label %main.bad\0Amain.bad:\0A\00" @.str.5785 = private unnamed_addr constant [21 x i8] c" %m = extractvalue \00" @.str.5786 = private unnamed_addr constant [79 x i8] c" %r, 2\0A %mp = alloca { ptr, i64, i64 }\0A store { ptr, i64, i64 } %m, ptr %mp\0A\00" @.str.5787 = private unnamed_addr constant [63 x i8] c" call void @finch_report_error(ptr %mp)\0A ret i32 1\0Amain.ok:\0A\00" @.str.5788 = private unnamed_addr constant [4 x i8] c"int\00" @.str.5789 = private unnamed_addr constant [21 x i8] c" %v = extractvalue \00" @.str.5790 = private unnamed_addr constant [54 x i8] c" %r, 1\0A %code = trunc i64 %v to i32\0A ret i32 %code\0A\00" @.str.5791 = private unnamed_addr constant [4 x i8] c"int\00" @.str.5792 = private unnamed_addr constant [6 x i8] c"%r = \00" @.str.5793 = private unnamed_addr constant [47 x i8] c" %code = trunc i64 %r to i32\0A ret i32 %code\0A\00" @.str.5794 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.5795 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.5796 = private unnamed_addr constant [49 x i8] c"define i32 @main(i32 %argc, ptr %argv) {\0Aentry:\0A\00" @.str.5797 = private unnamed_addr constant [3 x i8] c" \00" @.str.5798 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.5799 = private unnamed_addr constant [3 x i8] c"}\0A\00" @.str.5800 = private unnamed_addr constant [6 x i8] c"print\00" @.str.5801 = private unnamed_addr constant [17 x i8] c"print(a, b, ...)\00" @.str.5802 = private unnamed_addr constant [79 x i8] c"Prints the values separated by spaces, then a new line. Works with every type.\00" @.str.5803 = private unnamed_addr constant [6 x i8] c"input\00" @.str.5804 = private unnamed_addr constant [32 x i8] c"input(str question = \22\22) -> str\00" @.str.5805 = private unnamed_addr constant [78 x i8] c"Shows the question and reads one line typed by the user, without the newline.\00" @.str.5806 = private unnamed_addr constant [10 x i8] c"read_file\00" @.str.5807 = private unnamed_addr constant [27 x i8] c"read_file(str path) -> str\00" @.str.5808 = private unnamed_addr constant [122 x i8] c"The whole file as text. Stops the program if it can't be read, unless handled: read_file(p) or { ... }, try read_file(p).\00" @.str.5809 = private unnamed_addr constant [11 x i8] c"write_file\00" @.str.5810 = private unnamed_addr constant [39 x i8] c"write_file(str path, str text) -> bool\00" @.str.5811 = private unnamed_addr constant [84 x i8] c"Writes (replaces) the file. true if it worked; with or / try, the reason it didn't.\00" @.str.5812 = private unnamed_addr constant [12 x i8] c"file_exists\00" @.str.5813 = private unnamed_addr constant [30 x i8] c"file_exists(str path) -> bool\00" @.str.5814 = private unnamed_addr constant [30 x i8] c"Is there a file at this path?\00" @.str.5815 = private unnamed_addr constant [12 x i8] c"delete_file\00" @.str.5816 = private unnamed_addr constant [30 x i8] c"delete_file(str path) -> bool\00" @.str.5817 = private unnamed_addr constant [74 x i8] c"Deletes the file. true if it worked; with or / try, the reason it didn't.\00" @.str.5818 = private unnamed_addr constant [6 x i8] c"error\00" @.str.5819 = private unnamed_addr constant [19 x i8] c"error(str message)\00" @.str.5820 = private unnamed_addr constant [99 x i8] c"The failure a fallible function returns: return error(\22...\22). The caller handles it with or / try.\00" @.str.5821 = private unnamed_addr constant [6 x i8] c"shell\00" @.str.5822 = private unnamed_addr constant [26 x i8] c"shell(str command) -> int\00" @.str.5823 = private unnamed_addr constant [67 x i8] c"Runs a command in the system's shell and gives back its exit code.\00" @.str.5824 = private unnamed_addr constant [5 x i8] c"exit\00" @.str.5825 = private unnamed_addr constant [15 x i8] c"exit(int code)\00" @.str.5826 = private unnamed_addr constant [49 x i8] c"Ends the program right away with this exit code.\00" @.str.5827 = private unnamed_addr constant [5 x i8] c"addr\00" @.str.5828 = private unnamed_addr constant [18 x i8] c"addr(x) -> ptr[T]\00" @.str.5829 = private unnamed_addr constant [78 x i8] c"A pointer to a variable, field or element. addr(function) gives C a callback.\00" @.str.5830 = private unnamed_addr constant [4 x i8] c"new\00" @.str.5831 = private unnamed_addr constant [21 x i8] c"new(value) -> ptr[T]\00" @.str.5832 = private unnamed_addr constant [67 x i8] c"Puts a copy of the value on the heap. Give it back with free(...).\00" @.str.5833 = private unnamed_addr constant [5 x i8] c"free\00" @.str.5834 = private unnamed_addr constant [12 x i8] c"free(ptr p)\00" @.str.5835 = private unnamed_addr constant [74 x i8] c"Gives back memory from new(...) (or from C), freeing what the value owns.\00" @.str.5836 = private unnamed_addr constant [4 x i8] c"str\00" @.str.5837 = private unnamed_addr constant [14 x i8] c"str(x) -> str\00" @.str.5838 = private unnamed_addr constant [62 x i8] c"Turns a number, bool, char, []u8 or C char pointer into text.\00" @.str.5839 = private unnamed_addr constant [4 x i8] c"int\00" @.str.5840 = private unnamed_addr constant [14 x i8] c"int(x) -> int\00" @.str.5841 = private unnamed_addr constant [131 x i8] c"Converts to a whole number: cuts off fractions, parses text (stops the program if it isn't a number, unless handled: int(s) or 0).\00" @.str.5842 = private unnamed_addr constant [6 x i8] c"float\00" @.str.5843 = private unnamed_addr constant [18 x i8] c"float(x) -> float\00" @.str.5844 = private unnamed_addr constant [76 x i8] c"Converts to a decimal number; parses text (int(s) or 0.0 handles bad text).\00" @.str.5845 = private unnamed_addr constant [5 x i8] c"char\00" @.str.5846 = private unnamed_addr constant [20 x i8] c"char(int n) -> char\00" @.str.5847 = private unnamed_addr constant [30 x i8] c"The character with this code.\00" @.str.5848 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.5849 = private unnamed_addr constant [20 x i8] c"bool(int n) -> bool\00" @.str.5850 = private unnamed_addr constant [27 x i8] c"true for any number but 0.\00" @.str.5851 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.5852 = private unnamed_addr constant [14 x i8] c"ptr(x) -> ptr\00" @.str.5853 = private unnamed_addr constant [89 x i8] c"An untyped pointer: from a typed pointer, or from a number (an address or offset for C).\00" @.str.5854 = private unnamed_addr constant [4 x i8] c"len\00" @.str.5855 = private unnamed_addr constant [12 x i8] c".len -> int\00" @.str.5856 = private unnamed_addr constant [24 x i8] c"The number of elements.\00" @.str.5857 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.5858 = private unnamed_addr constant [15 x i8] c".ptr -> ptr[T]\00" @.str.5859 = private unnamed_addr constant [41 x i8] c"The address of the first element, for C.\00" @.str.5860 = private unnamed_addr constant [5 x i8] c"push\00" @.str.5861 = private unnamed_addr constant [10 x i8] c"push(T x)\00" @.str.5862 = private unnamed_addr constant [19 x i8] c"Adds x at the end.\00" @.str.5863 = private unnamed_addr constant [4 x i8] c"pop\00" @.str.5864 = private unnamed_addr constant [11 x i8] c"pop() -> T\00" @.str.5865 = private unnamed_addr constant [44 x i8] c"Removes the last element and gives it back.\00" @.str.5866 = private unnamed_addr constant [7 x i8] c"insert\00" @.str.5867 = private unnamed_addr constant [19 x i8] c"insert(int i, T x)\00" @.str.5868 = private unnamed_addr constant [39 x i8] c"Puts x at position i, moving the rest.\00" @.str.5869 = private unnamed_addr constant [7 x i8] c"remove\00" @.str.5870 = private unnamed_addr constant [19 x i8] c"remove(int i) -> T\00" @.str.5871 = private unnamed_addr constant [38 x i8] c"Removes position i and gives it back.\00" @.str.5872 = private unnamed_addr constant [6 x i8] c"clear\00" @.str.5873 = private unnamed_addr constant [8 x i8] c"clear()\00" @.str.5874 = private unnamed_addr constant [20 x i8] c"Removes everything.\00" @.str.5875 = private unnamed_addr constant [7 x i8] c"resize\00" @.str.5876 = private unnamed_addr constant [14 x i8] c"resize(int n)\00" @.str.5877 = private unnamed_addr constant [47 x i8] c"Makes the array n long; new elements are zero.\00" @.str.5878 = private unnamed_addr constant [5 x i8] c"find\00" @.str.5879 = private unnamed_addr constant [17 x i8] c"find(T x) -> int\00" @.str.5880 = private unnamed_addr constant [23 x i8] c"The index of x, or -1.\00" @.str.5881 = private unnamed_addr constant [9 x i8] c"contains\00" @.str.5882 = private unnamed_addr constant [22 x i8] c"contains(T x) -> bool\00" @.str.5883 = private unnamed_addr constant [19 x i8] c"Is x in the array?\00" @.str.5884 = private unnamed_addr constant [5 x i8] c"sort\00" @.str.5885 = private unnamed_addr constant [7 x i8] c"sort()\00" @.str.5886 = private unnamed_addr constant [38 x i8] c"Sorts in place (numbers, chars, str).\00" @.str.5887 = private unnamed_addr constant [8 x i8] c"reverse\00" @.str.5888 = private unnamed_addr constant [10 x i8] c"reverse()\00" @.str.5889 = private unnamed_addr constant [19 x i8] c"Reverses in place.\00" @.str.5890 = private unnamed_addr constant [6 x i8] c"slice\00" @.str.5891 = private unnamed_addr constant [33 x i8] c"slice(int start, int end) -> []T\00" @.str.5892 = private unnamed_addr constant [46 x i8] c"A new array with the elements start to end-1.\00" @.str.5893 = private unnamed_addr constant [5 x i8] c"join\00" @.str.5894 = private unnamed_addr constant [21 x i8] c"join(str sep) -> str\00" @.str.5895 = private unnamed_addr constant [48 x i8] c"For []str: one text with sep between the parts.\00" @.str.5896 = private unnamed_addr constant [4 x i8] c"len\00" @.str.5897 = private unnamed_addr constant [12 x i8] c".len -> int\00" @.str.5898 = private unnamed_addr constant [21 x i8] c"The number of bytes.\00" @.str.5899 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.5900 = private unnamed_addr constant [18 x i8] c".ptr -> ptr[char]\00" @.str.5901 = private unnamed_addr constant [60 x i8] c"The address of the text, for C (valid while the str lives).\00" @.str.5902 = private unnamed_addr constant [4 x i8] c"sub\00" @.str.5903 = private unnamed_addr constant [31 x i8] c"sub(int start, int end) -> str\00" @.str.5904 = private unnamed_addr constant [30 x i8] c"The part from start to end-1.\00" @.str.5905 = private unnamed_addr constant [5 x i8] c"find\00" @.str.5906 = private unnamed_addr constant [19 x i8] c"find(str t) -> int\00" @.str.5907 = private unnamed_addr constant [23 x i8] c"Where t starts, or -1.\00" @.str.5908 = private unnamed_addr constant [9 x i8] c"contains\00" @.str.5909 = private unnamed_addr constant [24 x i8] c"contains(str t) -> bool\00" @.str.5910 = private unnamed_addr constant [25 x i8] c"Does the text contain t?\00" @.str.5911 = private unnamed_addr constant [12 x i8] c"starts_with\00" @.str.5912 = private unnamed_addr constant [27 x i8] c"starts_with(str t) -> bool\00" @.str.5913 = private unnamed_addr constant [28 x i8] c"Does the text start with t?\00" @.str.5914 = private unnamed_addr constant [10 x i8] c"ends_with\00" @.str.5915 = private unnamed_addr constant [25 x i8] c"ends_with(str t) -> bool\00" @.str.5916 = private unnamed_addr constant [26 x i8] c"Does the text end with t?\00" @.str.5917 = private unnamed_addr constant [6 x i8] c"split\00" @.str.5918 = private unnamed_addr constant [24 x i8] c"split(str sep) -> []str\00" @.str.5919 = private unnamed_addr constant [63 x i8] c"The parts between each sep; split(\22\22) gives single characters.\00" @.str.5920 = private unnamed_addr constant [5 x i8] c"trim\00" @.str.5921 = private unnamed_addr constant [14 x i8] c"trim() -> str\00" @.str.5922 = private unnamed_addr constant [42 x i8] c"Without spaces and newlines at both ends.\00" @.str.5923 = private unnamed_addr constant [6 x i8] c"upper\00" @.str.5924 = private unnamed_addr constant [15 x i8] c"upper() -> str\00" @.str.5925 = private unnamed_addr constant [25 x i8] c"With a-z changed to A-Z.\00" @.str.5926 = private unnamed_addr constant [6 x i8] c"lower\00" @.str.5927 = private unnamed_addr constant [15 x i8] c"lower() -> str\00" @.str.5928 = private unnamed_addr constant [25 x i8] c"With A-Z changed to a-z.\00" @.str.5929 = private unnamed_addr constant [8 x i8] c"replace\00" @.str.5930 = private unnamed_addr constant [33 x i8] c"replace(str from, str to) -> str\00" @.str.5931 = private unnamed_addr constant [27 x i8] c"Every from replaced by to.\00" @.str.5932 = private unnamed_addr constant [7 x i8] c"repeat\00" @.str.5933 = private unnamed_addr constant [21 x i8] c"repeat(int n) -> str\00" @.str.5934 = private unnamed_addr constant [18 x i8] c"The text n times.\00" @.str.5935 = private unnamed_addr constant [6 x i8] c"bytes\00" @.str.5936 = private unnamed_addr constant [16 x i8] c"bytes() -> []u8\00" @.str.5937 = private unnamed_addr constant [23 x i8] c"The bytes of the text.\00" @.str.5938 = private unnamed_addr constant [4 x i8] c"len\00" @.str.5939 = private unnamed_addr constant [12 x i8] c".len -> int\00" @.str.5940 = private unnamed_addr constant [20 x i8] c"The number of keys.\00" @.str.5941 = private unnamed_addr constant [4 x i8] c"has\00" @.str.5942 = private unnamed_addr constant [19 x i8] c"has(K key) -> bool\00" @.str.5943 = private unnamed_addr constant [23 x i8] c"Is the key in the map?\00" @.str.5944 = private unnamed_addr constant [4 x i8] c"get\00" @.str.5945 = private unnamed_addr constant [27 x i8] c"get(K key, V default) -> V\00" @.str.5946 = private unnamed_addr constant [54 x i8] c"The value for key, or default if the key isn't there.\00" @.str.5947 = private unnamed_addr constant [7 x i8] c"remove\00" @.str.5948 = private unnamed_addr constant [22 x i8] c"remove(K key) -> bool\00" @.str.5949 = private unnamed_addr constant [53 x i8] c"Removes the key and its value; true if it was there.\00" @.str.5950 = private unnamed_addr constant [6 x i8] c"clear\00" @.str.5951 = private unnamed_addr constant [8 x i8] c"clear()\00" @.str.5952 = private unnamed_addr constant [20 x i8] c"Removes everything.\00" @.str.5953 = private unnamed_addr constant [5 x i8] c"keys\00" @.str.5954 = private unnamed_addr constant [14 x i8] c"keys() -> []K\00" @.str.5955 = private unnamed_addr constant [40 x i8] c"The keys, in the order they were added.\00" @.str.5956 = private unnamed_addr constant [7 x i8] c"values\00" @.str.5957 = private unnamed_addr constant [16 x i8] c"values() -> []V\00" @.str.5958 = private unnamed_addr constant [48 x i8] c"The values, in the order their keys were added.\00" @.str.5959 = private unnamed_addr constant [3 x i8] c"fn\00" @.str.5960 = private unnamed_addr constant [7 x i8] c"return\00" @.str.5961 = private unnamed_addr constant [3 x i8] c"if\00" @.str.5962 = private unnamed_addr constant [5 x i8] c"else\00" @.str.5963 = private unnamed_addr constant [6 x i8] c"while\00" @.str.5964 = private unnamed_addr constant [4 x i8] c"for\00" @.str.5965 = private unnamed_addr constant [3 x i8] c"in\00" @.str.5966 = private unnamed_addr constant [6 x i8] c"break\00" @.str.5967 = private unnamed_addr constant [9 x i8] c"continue\00" @.str.5968 = private unnamed_addr constant [5 x i8] c"true\00" @.str.5969 = private unnamed_addr constant [6 x i8] c"false\00" @.str.5970 = private unnamed_addr constant [5 x i8] c"null\00" @.str.5971 = private unnamed_addr constant [7 x i8] c"import\00" @.str.5972 = private unnamed_addr constant [5 x i8] c"link\00" @.str.5973 = private unnamed_addr constant [7 x i8] c"struct\00" @.str.5974 = private unnamed_addr constant [5 x i8] c"enum\00" @.str.5975 = private unnamed_addr constant [6 x i8] c"match\00" @.str.5976 = private unnamed_addr constant [7 x i8] c"export\00" @.str.5977 = private unnamed_addr constant [6 x i8] c"defer\00" @.str.5978 = private unnamed_addr constant [3 x i8] c"or\00" @.str.5979 = private unnamed_addr constant [4 x i8] c"try\00" @.str.5980 = private unnamed_addr constant [5 x i8] c"self\00" @.str.5981 = private unnamed_addr constant [4 x i8] c"int\00" @.str.5982 = private unnamed_addr constant [6 x i8] c"float\00" @.str.5983 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.5984 = private unnamed_addr constant [5 x i8] c"char\00" @.str.5985 = private unnamed_addr constant [4 x i8] c"str\00" @.str.5986 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.5987 = private unnamed_addr constant [4 x i8] c"map\00" @.str.5988 = private unnamed_addr constant [3 x i8] c"i8\00" @.str.5989 = private unnamed_addr constant [4 x i8] c"i16\00" @.str.5990 = private unnamed_addr constant [4 x i8] c"i32\00" @.str.5991 = private unnamed_addr constant [4 x i8] c"i64\00" @.str.5992 = private unnamed_addr constant [3 x i8] c"u8\00" @.str.5993 = private unnamed_addr constant [4 x i8] c"u16\00" @.str.5994 = private unnamed_addr constant [4 x i8] c"u32\00" @.str.5995 = private unnamed_addr constant [4 x i8] c"u64\00" @.str.5996 = private unnamed_addr constant [4 x i8] c"f32\00" @.str.5997 = private unnamed_addr constant [4 x i8] c"f64\00" @.str.5998 = private unnamed_addr constant [10 x i8] c"```finch\0A\00" @.str.5999 = private unnamed_addr constant [6 x i8] c"\0A```\0A\00" declare ptr @clang_getCString(i64, i64) declare void @clang_disposeString(i64, i64) @.str.6000 = private unnamed_addr constant [6 x i8] c"fixed\00" @.str.6001 = private unnamed_addr constant [23 x i8] c"/tmp/finch_cc_dirs.txt\00" @.str.6002 = private unnamed_addr constant [27 x i8] c" -E -v -x c /dev/null 2> '\00" @.str.6003 = private unnamed_addr constant [14 x i8] c"' > /dev/null\00" @.str.6004 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6005 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6006 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.6007 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6008 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6009 = private unnamed_addr constant [35 x i8] c"#include <...> search starts here:\00" @.str.6010 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6011 = private unnamed_addr constant [20 x i8] c"End of search list.\00" @.str.6012 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6013 = private unnamed_addr constant [23 x i8] c" (framework directory)\00" @.str.6014 = private unnamed_addr constant [12 x i8] c"-iframework\00" @.str.6015 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6016 = private unnamed_addr constant [9 x i8] c"-isystem\00" @.str.6017 = private unnamed_addr constant [8 x i8] c"rm -f '\00" @.str.6018 = private unnamed_addr constant [2 x i8] c"'\00" declare void @clang_getTypeDeclaration(ptr sret(%S.C.CXCursor) align 16, ptr byval(%S.C.CXType) align 8) declare { i64, i64 } @clang_getCursorUSR(ptr byval(%S.C.CXCursor) align 8) @.str.6019 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6020 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00" @.str.6021 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6022 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00" @.str.6023 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" declare { i64, i64 } @clang_getCursorSpelling(ptr byval(%S.C.CXCursor) align 8) @.str.6024 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6025 = private unnamed_addr constant [2 x i8] c" \00" @.str.6026 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6027 = private unnamed_addr constant [29 x i8] c"used .anon on a null pointer\00" @.str.6028 = private unnamed_addr constant [13 x i8] c"anon_struct_\00" @.str.6029 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6030 = private unnamed_addr constant [29 x i8] c"used .anon on a null pointer\00" @.str.6031 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6032 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00" declare void @clang_getCanonicalType(ptr sret(%S.C.CXType) align 16, ptr byval(%S.C.CXType) align 8) @.str.6033 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6034 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.6035 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6036 = private unnamed_addr constant [33 x i8] c"used .defining on a null pointer\00" declare i64 @clang_Type_getSizeOf(ptr byval(%S.C.CXType) align 8) @.str.6037 = private unnamed_addr constant [1 x i8] c"\00" @.str.6038 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6039 = private unnamed_addr constant [33 x i8] c"used .defining on a null pointer\00" declare i64 @clang_Type_getAlignOf(ptr byval(%S.C.CXType) align 8) declare i32 @clang_getCursorKind(ptr byval(%S.C.CXCursor) align 8) @.str.6040 = private unnamed_addr constant [13 x i8] c"is a C union\00" declare i32 @clang_Type_visitFields(ptr byval(%S.C.CXType) align 8, ptr, ptr) @.str.6041 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6042 = private unnamed_addr constant [33 x i8] c"used .defining on a null pointer\00" @.str.6043 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6044 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.6045 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6046 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" declare void @clang_getCursorType(ptr sret(%S.C.CXType) align 16, ptr byval(%S.C.CXCursor) align 8) declare i64 @clang_Cursor_getOffsetOfField(ptr byval(%S.C.CXCursor) align 8) declare i32 @clang_Cursor_isBitField(ptr byval(%S.C.CXCursor) align 8) @.str.6047 = private unnamed_addr constant [15 x i8] c"has bit fields\00" @.str.6048 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6049 = private unnamed_addr constant [26 x i8] c"used .s on a null pointer\00" @.str.6050 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6051 = private unnamed_addr constant [36 x i8] c"used .unsupported on a null pointer\00" @.str.6052 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6053 = private unnamed_addr constant [28 x i8] c"used .imp on a null pointer\00" @.str.6054 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6055 = private unnamed_addr constant [26 x i8] c"used .s on a null pointer\00" @.str.6056 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6057 = private unnamed_addr constant [34 x i8] c"used .hasHidden on a null pointer\00" @.str.6058 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6059 = private unnamed_addr constant [26 x i8] c"used .s on a null pointer\00" @.str.6060 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6061 = private unnamed_addr constant [31 x i8] c"used .fields on a null pointer\00" @.str.6062 = private unnamed_addr constant [3 x i8] c"i8\00" @.str.6063 = private unnamed_addr constant [3 x i8] c"u8\00" @.str.6064 = private unnamed_addr constant [4 x i8] c"i16\00" @.str.6065 = private unnamed_addr constant [4 x i8] c"u16\00" @.str.6066 = private unnamed_addr constant [4 x i8] c"i32\00" @.str.6067 = private unnamed_addr constant [4 x i8] c"u32\00" @.str.6068 = private unnamed_addr constant [4 x i8] c"int\00" @.str.6069 = private unnamed_addr constant [4 x i8] c"u64\00" @.str.6070 = private unnamed_addr constant [8 x i8] c"uses a \00" @.str.6071 = private unnamed_addr constant [12 x i8] c"-bit number\00" @.str.6072 = private unnamed_addr constant [5 x i8] c"void\00" @.str.6073 = private unnamed_addr constant [5 x i8] c"bool\00" @.str.6074 = private unnamed_addr constant [5 x i8] c"char\00" @.str.6075 = private unnamed_addr constant [4 x i8] c"f32\00" @.str.6076 = private unnamed_addr constant [6 x i8] c"float\00" declare void @clang_getPointeeType(ptr sret(%S.C.CXType) align 16, ptr byval(%S.C.CXType) align 8) declare i32 @clang_isConstQualifiedType(ptr byval(%S.C.CXType) align 8) @.str.6077 = private unnamed_addr constant [4 x i8] c"str\00" @.str.6078 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.6079 = private unnamed_addr constant [5 x i8] c"void\00" @.str.6080 = private unnamed_addr constant [6 x i8] c"fixed\00" @.str.6081 = private unnamed_addr constant [4 x i8] c"ptr\00" @.str.6082 = private unnamed_addr constant [24 x i8] c"uses a C union by value\00" @.str.6083 = private unnamed_addr constant [37 x i8] c"uses an incomplete C struct by value\00" @.str.6084 = private unnamed_addr constant [6 x i8] c"named\00" @.str.6085 = private unnamed_addr constant [2 x i8] c"C\00" declare void @clang_getArrayElementType(ptr sret(%S.C.CXType) align 16, ptr byval(%S.C.CXType) align 8) declare i64 @clang_getArraySize(ptr byval(%S.C.CXType) align 8) @.str.6086 = private unnamed_addr constant [17 x i8] c"uses long double\00" @.str.6087 = private unnamed_addr constant [18 x i8] c"uses the C type '\00" declare { i64, i64 } @clang_getTypeSpelling(ptr byval(%S.C.CXType) align 8) @.str.6088 = private unnamed_addr constant [2 x i8] c"'\00" @.str.6089 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6090 = private unnamed_addr constant [3 x i8] c"0x\00" @.str.6091 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6092 = private unnamed_addr constant [3 x i8] c"0X\00" @.str.6093 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6094 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6095 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6096 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6097 = private unnamed_addr constant [5 x i8] c"uUlL\00" @.str.6098 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6099 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6100 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6101 = private unnamed_addr constant [27 x i8] c"used .tu on a null pointer\00" declare void @clang_getCursorExtent(ptr sret(%S.C.CXSourceRange) align 16, ptr byval(%S.C.CXCursor) align 8) declare void @clang_tokenize(ptr, ptr byval(%S.C.CXSourceRange) align 8, ptr, ptr) declare i32 @clang_getTokenKind(ptr byval(%S.C.CXToken) align 8) @.str.6102 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6103 = private unnamed_addr constant [27 x i8] c"used .tu on a null pointer\00" declare { i64, i64 } @clang_getTokenSpelling(ptr, ptr byval(%S.C.CXToken) align 8) @.str.6104 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6105 = private unnamed_addr constant [27 x i8] c"used .tu on a null pointer\00" declare void @clang_disposeTokens(ptr, ptr, i32) @.str.6106 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6107 = private unnamed_addr constant [2 x i8] c"(\00" @.str.6108 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6109 = private unnamed_addr constant [2 x i8] c")\00" @.str.6110 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6111 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6112 = private unnamed_addr constant [24 x i8] c"pop() on an empty array\00" @.str.6113 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6114 = private unnamed_addr constant [2 x i8] c"-\00" @.str.6115 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6116 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6117 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6118 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6119 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6120 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6121 = private unnamed_addr constant [2 x i8] c".\00" @.str.6122 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6123 = private unnamed_addr constant [2 x i8] c"e\00" @.str.6124 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6125 = private unnamed_addr constant [2 x i8] c"E\00" @.str.6126 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6127 = private unnamed_addr constant [3 x i8] c"0x\00" @.str.6128 = private unnamed_addr constant [5 x i8] c"fFlL\00" @.str.6129 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6130 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6131 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" declare void @clang_getTypedefDeclUnderlyingType(ptr sret(%S.C.CXType) align 16, ptr byval(%S.C.CXCursor) align 8) @.str.6132 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6133 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00" @.str.6134 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6135 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.6136 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6137 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00" @.str.6138 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6139 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6140 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.6141 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6142 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00" @.str.6143 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6144 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.6145 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6146 = private unnamed_addr constant [31 x i8] c"used .header on a null pointer\00" declare i32 @clang_Cursor_getStorageClass(ptr byval(%S.C.CXCursor) align 8) @.str.6147 = private unnamed_addr constant [63 x i8] c"is a static inline C function (it has no code to link against)\00" @.str.6148 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6149 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.6150 = private unnamed_addr constant [43 x i8] c"has no parameter list in its C declaration\00" @.str.6151 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6152 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" declare void @clang_getResultType(ptr sret(%S.C.CXType) align 16, ptr byval(%S.C.CXType) align 8) declare i32 @clang_getNumArgTypes(ptr byval(%S.C.CXType) align 8) declare void @clang_getArgType(ptr sret(%S.C.CXType) align 16, ptr byval(%S.C.CXType) align 8, i32) declare i32 @clang_isFunctionTypeVariadic(ptr byval(%S.C.CXType) align 8) @.str.6153 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6154 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.6155 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6156 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.6157 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6158 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" declare i32 @clang_isCursorDefinition(ptr byval(%S.C.CXCursor) align 8) @.str.6159 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6160 = private unnamed_addr constant [2 x i8] c" \00" @.str.6161 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6162 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00" @.str.6163 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6164 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00" declare i32 @clang_visitChildren(ptr byval(%S.C.CXCursor) align 8, ptr, ptr) @.str.6165 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6166 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" declare i64 @clang_getEnumConstantDeclValue(ptr byval(%S.C.CXCursor) align 8) @.str.6167 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6168 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" declare i32 @clang_Cursor_isMacroBuiltin(ptr byval(%S.C.CXCursor) align 8) declare i32 @clang_Cursor_isMacroFunctionLike(ptr byval(%S.C.CXCursor) align 8) @.str.6169 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6170 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.6171 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6172 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.6173 = private unnamed_addr constant [3 x i8] c"-x\00" @.str.6174 = private unnamed_addr constant [2 x i8] c"c\00" @.str.6175 = private unnamed_addr constant [11 x i8] c"-std=gnu11\00" @.str.6176 = private unnamed_addr constant [10 x i8] c"--target=\00" @.str.6177 = private unnamed_addr constant [20 x i8] c"-D_USE_MATH_DEFINES\00" @.str.6178 = private unnamed_addr constant [3 x i8] c"-I\00" @.str.6179 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6180 = private unnamed_addr constant [1 x i8] c"\00" declare ptr @clang_createIndex(i32, i32) @.str.6181 = private unnamed_addr constant [11 x i8] c"#include \22\00" @.str.6182 = private unnamed_addr constant [3 x i8] c"\22\0A\00" @.str.6183 = private unnamed_addr constant [15 x i8] c"finch_import.c\00" @.str.6184 = private unnamed_addr constant [1 x i8] c"\00" @.str.6185 = private unnamed_addr constant [1 x i8] c"\00" @.str.6186 = private unnamed_addr constant [15 x i8] c"finch_import.c\00" @.str.6187 = private unnamed_addr constant [1 x i8] c"\00" declare i32 @clang_parseTranslationUnit2(ptr, ptr, ptr, i32, ptr, i32, i32, ptr) @.str.6188 = private unnamed_addr constant [34 x i8] c": error: couldn't read C header '\00" @.str.6189 = private unnamed_addr constant [2 x i8] c"'\00" declare i32 @clang_getNumDiagnostics(ptr) declare ptr @clang_getDiagnostic(ptr, i32) declare i32 @clang_getDiagnosticSeverity(ptr) declare { i64, i64 } @clang_getDiagnosticSpelling(ptr) declare void @clang_disposeDiagnostic(ptr) @.str.6190 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6191 = private unnamed_addr constant [15 x i8] c"file not found\00" @.str.6192 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6193 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6194 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6195 = private unnamed_addr constant [2 x i8] c"'\00" @.str.6196 = private unnamed_addr constant [35 x i8] c": error: can't find the C header '\00" @.str.6197 = private unnamed_addr constant [2 x i8] c"'\00" @.str.6198 = private unnamed_addr constant [35 x i8] c": error: can't find the C header '\00" @.str.6199 = private unnamed_addr constant [11 x i8] c"', which '\00" @.str.6200 = private unnamed_addr constant [61 x i8] c"' includes (is its library's development package installed?)\00" @.str.6201 = private unnamed_addr constant [20 x i8] c": error: C header '\00" @.str.6202 = private unnamed_addr constant [17 x i8] c"' has an error: \00" declare void @clang_getTranslationUnitCursor(ptr sret(%S.C.CXCursor) align 16, ptr) declare void @clang_disposeTranslationUnit(ptr) declare void @clang_disposeIndex(ptr) @.str.6203 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" @.str.6204 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" @.str.6205 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.6206 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" @.str.6207 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" @.str.6208 = private unnamed_addr constant [22 x i8] c"/tmp/finch_triple.txt\00" @.str.6209 = private unnamed_addr constant [23 x i8] c"clang -dumpmachine > '\00" @.str.6210 = private unnamed_addr constant [15 x i8] c"' 2> /dev/null\00" @.str.6211 = private unnamed_addr constant [1 x i8] c"\00" @.str.6212 = private unnamed_addr constant [8 x i8] c"rm -f '\00" @.str.6213 = private unnamed_addr constant [2 x i8] c"'\00" @.str.6214 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" @.str.6215 = private unnamed_addr constant [25 x i8] c"x86_64-unknown-linux-gnu\00" @.str.6216 = private unnamed_addr constant [8 x i8] c"windows\00" @.str.6217 = private unnamed_addr constant [19 x i8] c"x86_64-w64-mingw32\00" @.str.6218 = private unnamed_addr constant [6 x i8] c"linux\00" @.str.6219 = private unnamed_addr constant [25 x i8] c"x86_64-unknown-linux-gnu\00" @.str.6220 = private unnamed_addr constant [6 x i8] c"arm64\00" @.str.6221 = private unnamed_addr constant [8 x i8] c"aarch64\00" @.str.6222 = private unnamed_addr constant [12 x i8] c"linux-arm64\00" @.str.6223 = private unnamed_addr constant [26 x i8] c"aarch64-unknown-linux-gnu\00" @.str.6224 = private unnamed_addr constant [6 x i8] c"macos\00" @.str.6225 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" @.str.6226 = private unnamed_addr constant [8 x i8] c"aarch64\00" @.str.6227 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" @.str.6228 = private unnamed_addr constant [6 x i8] c"arm64\00" @.str.6229 = private unnamed_addr constant [25 x i8] c"arm64-apple-macosx14.0.0\00" @.str.6230 = private unnamed_addr constant [26 x i8] c"x86_64-apple-macosx14.0.0\00" @.str.6231 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" @.str.6232 = private unnamed_addr constant [8 x i8] c"windows\00" @.str.6233 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" @.str.6234 = private unnamed_addr constant [6 x i8] c"mingw\00" @.str.6235 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" @.str.6236 = private unnamed_addr constant [5 x i8] c"msvc\00" @.str.6237 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" @.str.6238 = private unnamed_addr constant [6 x i8] c"win32\00" @.str.6239 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" @.str.6240 = private unnamed_addr constant [5 x i8] c"msvc\00" @.str.6241 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" @.str.6242 = private unnamed_addr constant [6 x i8] c"apple\00" @.str.6243 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" @.str.6244 = private unnamed_addr constant [7 x i8] c"darwin\00" @.str.6245 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" @.str.6246 = private unnamed_addr constant [6 x i8] c"macos\00" @.str.6247 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" @.str.6248 = private unnamed_addr constant [8 x i8] c"aarch64\00" @.str.6249 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" @.str.6250 = private unnamed_addr constant [6 x i8] c"arm64\00" @.str.6251 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" @.str.6252 = private unnamed_addr constant [8 x i8] c"aarch64\00" @.str.6253 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" @.str.6254 = private unnamed_addr constant [6 x i8] c"arm64\00" @.str.6255 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" @.str.6256 = private unnamed_addr constant [6 x i8] c"apple\00" @.str.6257 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" @.str.6258 = private unnamed_addr constant [7 x i8] c"darwin\00" @.str.6259 = private unnamed_addr constant [1 x i8] c"\00" @.str.6260 = private unnamed_addr constant [5 x i8] c".exe\00" @.str.6261 = private unnamed_addr constant [9 x i8] c"FINCH_CC\00" @.str.6262 = private unnamed_addr constant [1 x i8] c"\00" @.str.6263 = private unnamed_addr constant [23 x i8] c"x86_64-w64-mingw32-gcc\00" @.str.6264 = private unnamed_addr constant [22 x i8] c"aarch64-linux-gnu-gcc\00" @.str.6265 = private unnamed_addr constant [16 x i8] c"clang --target=\00" @.str.6266 = private unnamed_addr constant [3 x i8] c"cc\00" @.str.6267 = private unnamed_addr constant [6 x i8] c"wine \00" @.str.6268 = private unnamed_addr constant [14 x i8] c"qemu-aarch64 \00" @.str.6269 = private unnamed_addr constant [17 x i8] c"0123456789abcdef\00" @.str.6270 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6271 = private unnamed_addr constant [1 x i8] c"\00" @.str.6272 = private unnamed_addr constant [2 x i8] c"'\00" @.str.6273 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6274 = private unnamed_addr constant [2 x i8] c"'\00" @.str.6275 = private unnamed_addr constant [5 x i8] c"'\5C''\00" @.str.6276 = private unnamed_addr constant [2 x i8] c"'\00" @.str.6277 = private unnamed_addr constant [15 x i8] c"XDG_CACHE_HOME\00" @.str.6278 = private unnamed_addr constant [1 x i8] c"\00" @.str.6279 = private unnamed_addr constant [7 x i8] c"/finch\00" @.str.6280 = private unnamed_addr constant [5 x i8] c"HOME\00" @.str.6281 = private unnamed_addr constant [1 x i8] c"\00" @.str.6282 = private unnamed_addr constant [14 x i8] c"/.cache/finch\00" @.str.6283 = private unnamed_addr constant [17 x i8] c"/tmp/finch-cache\00" @.str.6284 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6285 = private unnamed_addr constant [11 x i8] c".framework\00" @.str.6286 = private unnamed_addr constant [12 x i8] c"-framework \00" @.str.6287 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6288 = private unnamed_addr constant [25 x i8] c"/tmp/finch_pkg_flags.txt\00" @.str.6289 = private unnamed_addr constant [19 x i8] c"pkg-config --libs \00" @.str.6290 = private unnamed_addr constant [5 x i8] c" > '\00" @.str.6291 = private unnamed_addr constant [15 x i8] c"' 2> /dev/null\00" @.str.6292 = private unnamed_addr constant [1 x i8] c"\00" @.str.6293 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6294 = private unnamed_addr constant [8 x i8] c"rm -f '\00" @.str.6295 = private unnamed_addr constant [2 x i8] c"'\00" @.str.6296 = private unnamed_addr constant [3 x i8] c"-l\00" @.str.6297 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6298 = private unnamed_addr constant [2 x i8] c"/\00" @.str.6299 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6300 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6301 = private unnamed_addr constant [2 x i8] c"/\00" @.str.6302 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6303 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6304 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6305 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6306 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6307 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6308 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6309 = private unnamed_addr constant [1 x i8] c"\00" @.str.6310 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6311 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6312 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6313 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6314 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6315 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.6316 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6317 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6318 = private unnamed_addr constant [25 x i8] c"undefined reference to `\00" @.str.6319 = private unnamed_addr constant [25 x i8] c"undefined reference to `\00" @.str.6320 = private unnamed_addr constant [2 x i8] c"'\00" @.str.6321 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6322 = private unnamed_addr constant [19 x i8] c"undefined symbol: \00" @.str.6323 = private unnamed_addr constant [19 x i8] c"undefined symbol: \00" @.str.6324 = private unnamed_addr constant [3 x i8] c" \0A\00" @.str.6325 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6326 = private unnamed_addr constant [28 x i8] c"unresolved external symbol \00" @.str.6327 = private unnamed_addr constant [28 x i8] c"unresolved external symbol \00" @.str.6328 = private unnamed_addr constant [4 x i8] c" \0A\0D\00" @.str.6329 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6330 = private unnamed_addr constant [15 x i8] c"cannot find -l\00" @.str.6331 = private unnamed_addr constant [15 x i8] c"cannot find -l\00" @.str.6332 = private unnamed_addr constant [5 x i8] c": \0A\0D\00" @.str.6333 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6334 = private unnamed_addr constant [25 x i8] c"library not found for -l\00" @.str.6335 = private unnamed_addr constant [25 x i8] c"library not found for -l\00" @.str.6336 = private unnamed_addr constant [5 x i8] c": \0A\0D\00" @.str.6337 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6338 = private unnamed_addr constant [14 x i8] c"ld: library '\00" @.str.6339 = private unnamed_addr constant [14 x i8] c"ld: library '\00" @.str.6340 = private unnamed_addr constant [2 x i8] c"'\00" @.str.6341 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6342 = private unnamed_addr constant [12 x i8] c"framework '\00" @.str.6343 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6344 = private unnamed_addr constant [10 x i8] c"not found\00" @.str.6345 = private unnamed_addr constant [12 x i8] c"framework '\00" @.str.6346 = private unnamed_addr constant [2 x i8] c"'\00" @.str.6347 = private unnamed_addr constant [11 x i8] c".framework\00" @.str.6348 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6349 = private unnamed_addr constant [2 x i8] c"\22\00" @.str.6350 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6351 = private unnamed_addr constant [20 x i8] c"\22, referenced from:\00" @.str.6352 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6353 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6354 = private unnamed_addr constant [20 x i8] c"\22, referenced from:\00" @.str.6355 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6356 = private unnamed_addr constant [2 x i8] c"_\00" @.str.6357 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6358 = private unnamed_addr constant [22 x i8] c"error: linking failed\00" @.str.6359 = private unnamed_addr constant [1 x i8] c"\00" @.str.6360 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.6361 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.6362 = private unnamed_addr constant [21 x i8] c"error: the library '\00" @.str.6363 = private unnamed_addr constant [63 x i8] c"' wasn't found. Is it installed? (on Nix: add it to shell.nix)\00" @.str.6364 = private unnamed_addr constant [1 x i8] c"\00" @.str.6365 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.6366 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.6367 = private unnamed_addr constant [1 x i8] c"\00" @.str.6368 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6369 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6370 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6371 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6372 = private unnamed_addr constant [3 x i8] c", \00" @.str.6373 = private unnamed_addr constant [6 x i8] c" and \00" @.str.6374 = private unnamed_addr constant [6 x i8] c" more\00" @.str.6375 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6376 = private unnamed_addr constant [26 x i8] c"error: no code found for \00" @.str.6377 = private unnamed_addr constant [1 x i8] c"\00" @.str.6378 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.6379 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.6380 = private unnamed_addr constant [5 x i8] c"come\00" @.str.6381 = private unnamed_addr constant [6 x i8] c"comes\00" @.str.6382 = private unnamed_addr constant [8 x i8] c"error: \00" @.str.6383 = private unnamed_addr constant [2 x i8] c" \00" @.str.6384 = private unnamed_addr constant [8 x i8] c" from \22\00" @.str.6385 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6386 = private unnamed_addr constant [32 x i8] c"\22, but its library isn't linked\00" @.str.6387 = private unnamed_addr constant [1 x i8] c"\00" @.str.6388 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.6389 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.6390 = private unnamed_addr constant [75 x i8] c" the header only says the functions exist; their code lives in a library.\00" @.str.6391 = private unnamed_addr constant [1 x i8] c"\00" @.str.6392 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.6393 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.6394 = private unnamed_addr constant [67 x i8] c" add this at the top of your file (with the library's real name):\00" @.str.6395 = private unnamed_addr constant [1 x i8] c"\00" @.str.6396 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.6397 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.6398 = private unnamed_addr constant [1 x i8] c"\00" @.str.6399 = private unnamed_addr constant [1 x i8] c"\00" @.str.6400 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.6401 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.6402 = private unnamed_addr constant [13 x i8] c" link \22\00" @.str.6403 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6404 = private unnamed_addr constant [2 x i8] c"\22\00" @.str.6405 = private unnamed_addr constant [1 x i8] c"\00" @.str.6406 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.6407 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.6408 = private unnamed_addr constant [1 x i8] c"\00" @.str.6409 = private unnamed_addr constant [1 x i8] c"\00" @.str.6410 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.6411 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.6412 = private unnamed_addr constant [5 x i8] c"/rt-\00" @.str.6413 = private unnamed_addr constant [4 x i8] c"2.5\00" @.str.6414 = private unnamed_addr constant [3 x i8] c".o\00" @.str.6415 = private unnamed_addr constant [10 x i8] c"mkdir -p \00" @.str.6416 = private unnamed_addr constant [6 x i8] c".part\00" declare i32 @getpid() @.str.6417 = private unnamed_addr constant [7 x i8] c" -fPIC\00" @.str.6418 = private unnamed_addr constant [1 x i8] c"\00" @.str.6419 = private unnamed_addr constant [5 x i8] c".log\00" @.str.6420 = private unnamed_addr constant [5 x i8] c" -O2\00" @.str.6421 = private unnamed_addr constant [5 x i8] c" -c \00" @.str.6422 = private unnamed_addr constant [5 x i8] c" -o \00" @.str.6423 = private unnamed_addr constant [4 x i8] c" > \00" @.str.6424 = private unnamed_addr constant [6 x i8] c" 2>&1\00" @.str.6425 = private unnamed_addr constant [1 x i8] c"\00" @.str.6426 = private unnamed_addr constant [7 x i8] c"rm -f \00" @.str.6427 = private unnamed_addr constant [2 x i8] c" \00" @.str.6428 = private unnamed_addr constant [47 x i8] c"error: couldn't build the Finch runtime with '\00" @.str.6429 = private unnamed_addr constant [31 x i8] c"' (is a C compiler installed?)\00" @.str.6430 = private unnamed_addr constant [7 x i8] c"rm -f \00" @.str.6431 = private unnamed_addr constant [8 x i8] c" && mv \00" @.str.6432 = private unnamed_addr constant [2 x i8] c" \00" @.str.6433 = private unnamed_addr constant [12 x i8] c"FINCH_CLANG\00" @.str.6434 = private unnamed_addr constant [1 x i8] c"\00" @.str.6435 = private unnamed_addr constant [6 x i8] c"clang\00" @.str.6436 = private unnamed_addr constant [9 x i8] c"FINCH_CC\00" @.str.6437 = private unnamed_addr constant [1 x i8] c"\00" @.str.6438 = private unnamed_addr constant [9 x i8] c"FINCH_CC\00" @.str.6439 = private unnamed_addr constant [1 x i8] c"\00" @.str.6440 = private unnamed_addr constant [1 x i8] c"\00" @.str.6441 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.6442 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.6443 = private unnamed_addr constant [4 x i8] c".ll\00" @.str.6444 = private unnamed_addr constant [3 x i8] c".o\00" @.str.6445 = private unnamed_addr constant [1 x i8] c"\00" @.str.6446 = private unnamed_addr constant [11 x i8] c" --target=\00" @.str.6447 = private unnamed_addr constant [5 x i8] c".log\00" @.str.6448 = private unnamed_addr constant [2 x i8] c" \00" @.str.6449 = private unnamed_addr constant [8 x i8] c" -w -c \00" @.str.6450 = private unnamed_addr constant [5 x i8] c" -o \00" @.str.6451 = private unnamed_addr constant [4 x i8] c" > \00" @.str.6452 = private unnamed_addr constant [6 x i8] c" 2>&1\00" @.str.6453 = private unnamed_addr constant [7 x i8] c"rm -f \00" @.str.6454 = private unnamed_addr constant [1 x i8] c"\00" @.str.6455 = private unnamed_addr constant [1 x i8] c"\00" @.str.6456 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.6457 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.6458 = private unnamed_addr constant [47 x i8] c"error: clang couldn't compile the program's IR\00" @.str.6459 = private unnamed_addr constant [1 x i8] c"\00" @.str.6460 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.6461 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.6462 = private unnamed_addr constant [7 x i8] c"rm -f \00" @.str.6463 = private unnamed_addr constant [2 x i8] c" \00" @.str.6464 = private unnamed_addr constant [2 x i8] c" \00" @.str.6465 = private unnamed_addr constant [2 x i8] c" \00" @.str.6466 = private unnamed_addr constant [5 x i8] c" -o \00" @.str.6467 = private unnamed_addr constant [5 x i8] c" -lm\00" @.str.6468 = private unnamed_addr constant [13 x i8] c" -dynamiclib\00" @.str.6469 = private unnamed_addr constant [9 x i8] c" -shared\00" @.str.6470 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6471 = private unnamed_addr constant [3 x i8] c".c\00" @.str.6472 = private unnamed_addr constant [2 x i8] c".\00" @.str.6473 = private unnamed_addr constant [3 x i8] c".o\00" @.str.6474 = private unnamed_addr constant [7 x i8] c" -fPIC\00" @.str.6475 = private unnamed_addr constant [1 x i8] c"\00" @.str.6476 = private unnamed_addr constant [5 x i8] c" -O2\00" @.str.6477 = private unnamed_addr constant [5 x i8] c" -c \00" @.str.6478 = private unnamed_addr constant [5 x i8] c" -o \00" @.str.6479 = private unnamed_addr constant [4 x i8] c" > \00" @.str.6480 = private unnamed_addr constant [6 x i8] c" 2>&1\00" @.str.6481 = private unnamed_addr constant [1 x i8] c"\00" @.str.6482 = private unnamed_addr constant [25 x i8] c"error: couldn't compile \00" @.str.6483 = private unnamed_addr constant [1 x i8] c"\00" @.str.6484 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.6485 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.6486 = private unnamed_addr constant [7 x i8] c"rm -f \00" @.str.6487 = private unnamed_addr constant [2 x i8] c" \00" @.str.6488 = private unnamed_addr constant [2 x i8] c" \00" @.str.6489 = private unnamed_addr constant [2 x i8] c" \00" @.str.6490 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6491 = private unnamed_addr constant [3 x i8] c".o\00" @.str.6492 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6493 = private unnamed_addr constant [3 x i8] c".a\00" @.str.6494 = private unnamed_addr constant [2 x i8] c" \00" @.str.6495 = private unnamed_addr constant [2 x i8] c" \00" @.str.6496 = private unnamed_addr constant [4 x i8] c" > \00" @.str.6497 = private unnamed_addr constant [6 x i8] c" 2>&1\00" @.str.6498 = private unnamed_addr constant [1 x i8] c"\00" @.str.6499 = private unnamed_addr constant [7 x i8] c"rm -f \00" @.str.6500 = private unnamed_addr constant [2 x i8] c" \00" @.str.6501 = private unnamed_addr constant [7 x i8] c"rm -f \00" @.str.6502 = private unnamed_addr constant [43 x i8] c"error: no C compiler found to link with ('\00" @.str.6503 = private unnamed_addr constant [33 x i8] c"'; install one, or set FINCH_CC)\00" @.str.6504 = private unnamed_addr constant [1 x i8] c"\00" @.str.6505 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.6506 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.6507 = private unnamed_addr constant [1 x i8] c"\00" @.str.6508 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.6509 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.6510 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6511 = private unnamed_addr constant [8 x i8] c"file://\00" @.str.6512 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6513 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6514 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6515 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6516 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6517 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6518 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6519 = private unnamed_addr constant [17 x i8] c"0123456789ABCDEF\00" @.str.6520 = private unnamed_addr constant [8 x i8] c"file://\00" @.str.6521 = private unnamed_addr constant [6 x i8] c"/-_.~\00" @.str.6522 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6523 = private unnamed_addr constant [2 x i8] c"%\00" @.str.6524 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6525 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6526 = private unnamed_addr constant [1 x i8] c"\00" @.str.6527 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6528 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6529 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.6530 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6531 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6532 = private unnamed_addr constant [1 x i8] c"\00" @.str.6533 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6534 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.6535 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6536 = private unnamed_addr constant [1 x i8] c"\00" declare i32 @getchar() @.str.6537 = private unnamed_addr constant [1 x i8] c"\00" @.str.6538 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6539 = private unnamed_addr constant [2 x i8] c"\0D\00" @.str.6540 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @stdin = external global ptr declare i32 @feof(ptr) @.str.6541 = private unnamed_addr constant [33 x i8] c"the editor closed the connection\00" @.str.6542 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6543 = private unnamed_addr constant [16 x i8] c"Content-Length:\00" @.str.6544 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6545 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6546 = private unnamed_addr constant [26 x i8] c"the message was cut short\00" @.str.6547 = private unnamed_addr constant [17 x i8] c"Content-Length: \00" @.str.6548 = private unnamed_addr constant [5 x i8] c"\0D\0A\0D\0A\00" @.str.6549 = private unnamed_addr constant [1 x i8] c"\00" @stdout = external global ptr declare i64 @fwrite(ptr, i64, i64, ptr) @.str.6550 = private unnamed_addr constant [8 x i8] c"jsonrpc\00" @.str.6551 = private unnamed_addr constant [4 x i8] c"2.0\00" @.str.6552 = private unnamed_addr constant [3 x i8] c"id\00" @.str.6553 = private unnamed_addr constant [7 x i8] c"result\00" @.str.6554 = private unnamed_addr constant [8 x i8] c"jsonrpc\00" @.str.6555 = private unnamed_addr constant [4 x i8] c"2.0\00" @.str.6556 = private unnamed_addr constant [7 x i8] c"method\00" @.str.6557 = private unnamed_addr constant [7 x i8] c"params\00" @.str.6558 = private unnamed_addr constant [5 x i8] c"line\00" @.str.6559 = private unnamed_addr constant [10 x i8] c"character\00" @.str.6560 = private unnamed_addr constant [6 x i8] c"start\00" @.str.6561 = private unnamed_addr constant [4 x i8] c"end\00" @.str.6562 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6563 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.6564 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6565 = private unnamed_addr constant [10 x i8] c": error: \00" @.str.6566 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6567 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6568 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6569 = private unnamed_addr constant [2 x i8] c":\00" @.str.6570 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6571 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6572 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6573 = private unnamed_addr constant [2 x i8] c":\00" @.str.6574 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6575 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.6576 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6577 = private unnamed_addr constant [2 x i8] c"@\00" @.str.6578 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6579 = private unnamed_addr constant [3 x i8] c"@R\00" @.str.6580 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6581 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6582 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6583 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6584 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6585 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6586 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6587 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6588 = private unnamed_addr constant [3 x i8] c"@V\00" @.str.6589 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6590 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6591 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6592 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6593 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6594 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6595 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6596 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6597 = private unnamed_addr constant [3 x i8] c"@F\00" @.str.6598 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6599 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6600 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6601 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6602 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6603 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6604 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6605 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6606 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6607 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6608 = private unnamed_addr constant [2 x i8] c"|\00" @.str.6609 = private unnamed_addr constant [3 x i8] c"@S\00" @.str.6610 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6611 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6612 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6613 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6614 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6615 = private unnamed_addr constant [4 x i8] c"@SF\00" @.str.6616 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6617 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6618 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6619 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6620 = private unnamed_addr constant [3 x i8] c"@E\00" @.str.6621 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6622 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6623 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6624 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6625 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6626 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6627 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6628 = private unnamed_addr constant [2 x i8] c",\00" @.str.6629 = private unnamed_addr constant [3 x i8] c"@I\00" @.str.6630 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6631 = private unnamed_addr constant [11 x i8] c"mkdir -p '\00" @.str.6632 = private unnamed_addr constant [2 x i8] c"'\00" @.str.6633 = private unnamed_addr constant [1 x i8] c"\00" @.str.6634 = private unnamed_addr constant [5 x i8] c"/doc\00" @.str.6635 = private unnamed_addr constant [5 x i8] c".fch\00" @.str.6636 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6637 = private unnamed_addr constant [13 x i8] c" --overlay '\00" @.str.6638 = private unnamed_addr constant [2 x i8] c"=\00" @.str.6639 = private unnamed_addr constant [2 x i8] c"'\00" @.str.6640 = private unnamed_addr constant [9 x i8] c"/out.txt\00" @.str.6641 = private unnamed_addr constant [2 x i8] c"'\00" @.str.6642 = private unnamed_addr constant [10 x i8] c"' index '\00" @.str.6643 = private unnamed_addr constant [2 x i8] c"'\00" @.str.6644 = private unnamed_addr constant [5 x i8] c" > '\00" @.str.6645 = private unnamed_addr constant [7 x i8] c"' 2>&1\00" @.str.6646 = private unnamed_addr constant [1 x i8] c"\00" @.str.6647 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6648 = private unnamed_addr constant [6 x i8] c"range\00" @.str.6649 = private unnamed_addr constant [9 x i8] c"severity\00" @.str.6650 = private unnamed_addr constant [7 x i8] c"source\00" @.str.6651 = private unnamed_addr constant [6 x i8] c"finch\00" @.str.6652 = private unnamed_addr constant [8 x i8] c"message\00" @.str.6653 = private unnamed_addr constant [4 x i8] c"uri\00" @.str.6654 = private unnamed_addr constant [12 x i8] c"diagnostics\00" @.str.6655 = private unnamed_addr constant [32 x i8] c"textDocument/publishDiagnostics\00" @.str.6656 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6657 = private unnamed_addr constant [5 x i8] c"kind\00" @.str.6658 = private unnamed_addr constant [9 x i8] c"markdown\00" @.str.6659 = private unnamed_addr constant [6 x i8] c"value\00" @.str.6660 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6661 = private unnamed_addr constant [9 x i8] c"contents\00" @.str.6662 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6663 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6664 = private unnamed_addr constant [4 x i8] c"uri\00" @.str.6665 = private unnamed_addr constant [6 x i8] c"range\00" @.str.6666 = private unnamed_addr constant [2 x i8] c".\00" @.str.6667 = private unnamed_addr constant [5 x i8] c"name\00" @.str.6668 = private unnamed_addr constant [5 x i8] c"kind\00" @.str.6669 = private unnamed_addr constant [6 x i8] c"start\00" @.str.6670 = private unnamed_addr constant [4 x i8] c"end\00" @.str.6671 = private unnamed_addr constant [6 x i8] c"range\00" @.str.6672 = private unnamed_addr constant [15 x i8] c"selectionRange\00" @.str.6673 = private unnamed_addr constant [6 x i8] c"label\00" @.str.6674 = private unnamed_addr constant [5 x i8] c"kind\00" @.str.6675 = private unnamed_addr constant [7 x i8] c"detail\00" @.str.6676 = private unnamed_addr constant [5 x i8] c"kind\00" @.str.6677 = private unnamed_addr constant [9 x i8] c"markdown\00" @.str.6678 = private unnamed_addr constant [6 x i8] c"value\00" @.str.6679 = private unnamed_addr constant [14 x i8] c"documentation\00" @.str.6680 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6681 = private unnamed_addr constant [2 x i8] c".\00" @.str.6682 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6683 = private unnamed_addr constant [33 x i8] c"called .push() on a null pointer\00" @.str.6684 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6685 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6686 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6687 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6688 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6689 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6690 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6691 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6692 = private unnamed_addr constant [2 x i8] c"[\00" @.str.6693 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6694 = private unnamed_addr constant [1 x i8] c"\00" @.str.6695 = private unnamed_addr constant [8 x i8] c"struct \00" @.str.6696 = private unnamed_addr constant [1 x i8] c"\00" @.str.6697 = private unnamed_addr constant [6 x i8] c"enum \00" @.str.6698 = private unnamed_addr constant [1 x i8] c"\00" @.str.6699 = private unnamed_addr constant [2 x i8] c".\00" @.str.6700 = private unnamed_addr constant [1 x i8] c"\00" @.str.6701 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6702 = private unnamed_addr constant [3 x i8] c"[]\00" @.str.6703 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6704 = private unnamed_addr constant [4 x i8] c"str\00" @.str.6705 = private unnamed_addr constant [5 x i8] c"char\00" @.str.6706 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6707 = private unnamed_addr constant [5 x i8] c"ptr[\00" @.str.6708 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6709 = private unnamed_addr constant [2 x i8] c"]\00" @.str.6710 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6711 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6712 = private unnamed_addr constant [3 x i8] c"[]\00" @.str.6713 = private unnamed_addr constant [4 x i8] c"str\00" @.str.6714 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6715 = private unnamed_addr constant [5 x i8] c"map[\00" @.str.6716 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6717 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6718 = private unnamed_addr constant [1 x i8] c"\00" @.str.6719 = private unnamed_addr constant [1 x i8] c"\00" @.str.6720 = private unnamed_addr constant [1 x i8] c"\00" @.str.6721 = private unnamed_addr constant [1 x i8] c"\00" @.str.6722 = private unnamed_addr constant [1 x i8] c"\00" @.str.6723 = private unnamed_addr constant [1 x i8] c"\00" @.str.6724 = private unnamed_addr constant [8 x i8] c"struct \00" @.str.6725 = private unnamed_addr constant [1 x i8] c"\00" @.str.6726 = private unnamed_addr constant [1 x i8] c"\00" @.str.6727 = private unnamed_addr constant [6 x i8] c"enum \00" @.str.6728 = private unnamed_addr constant [1 x i8] c"\00" @.str.6729 = private unnamed_addr constant [7 x i8] c"module\00" @.str.6730 = private unnamed_addr constant [1 x i8] c"\00" @.str.6731 = private unnamed_addr constant [1 x i8] c"\00" @.str.6732 = private unnamed_addr constant [1 x i8] c"\00" @.str.6733 = private unnamed_addr constant [1 x i8] c"\00" @.str.6734 = private unnamed_addr constant [1 x i8] c"\00" @.str.6735 = private unnamed_addr constant [13 x i8] c"isIncomplete\00" @.str.6736 = private unnamed_addr constant [6 x i8] c"items\00" @.str.6737 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6738 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6739 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6740 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6741 = private unnamed_addr constant [1 x i8] c"\00" @.str.6742 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6743 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6744 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6745 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6746 = private unnamed_addr constant [5 x i8] c"ptr[\00" @.str.6747 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6748 = private unnamed_addr constant [2 x i8] c"]\00" @.str.6749 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6750 = private unnamed_addr constant [6 x i8] c"label\00" @.str.6751 = private unnamed_addr constant [6 x i8] c"label\00" @.str.6752 = private unnamed_addr constant [11 x i8] c"parameters\00" @.str.6753 = private unnamed_addr constant [11 x i8] c"signatures\00" @.str.6754 = private unnamed_addr constant [16 x i8] c"activeSignature\00" @.str.6755 = private unnamed_addr constant [16 x i8] c"activeParameter\00" @.str.6756 = private unnamed_addr constant [6 x i8] c"label\00" @.str.6757 = private unnamed_addr constant [14 x i8] c"documentation\00" @.str.6758 = private unnamed_addr constant [11 x i8] c"signatures\00" @.str.6759 = private unnamed_addr constant [16 x i8] c"activeSignature\00" @.str.6760 = private unnamed_addr constant [16 x i8] c"activeParameter\00" @.str.6761 = private unnamed_addr constant [13 x i8] c"textDocument\00" @.str.6762 = private unnamed_addr constant [5 x i8] c"text\00" @.str.6763 = private unnamed_addr constant [1 x i8] c"\00" @.str.6764 = private unnamed_addr constant [13 x i8] c"textDocument\00" @.str.6765 = private unnamed_addr constant [4 x i8] c"uri\00" @.str.6766 = private unnamed_addr constant [1 x i8] c"\00" @.str.6767 = private unnamed_addr constant [7 x i8] c"method\00" @.str.6768 = private unnamed_addr constant [1 x i8] c"\00" @.str.6769 = private unnamed_addr constant [7 x i8] c"params\00" @.str.6770 = private unnamed_addr constant [3 x i8] c"id\00" @.str.6771 = private unnamed_addr constant [11 x i8] c"initialize\00" @.str.6772 = private unnamed_addr constant [17 x i8] c"textDocumentSync\00" @.str.6773 = private unnamed_addr constant [14 x i8] c"hoverProvider\00" @.str.6774 = private unnamed_addr constant [19 x i8] c"definitionProvider\00" @.str.6775 = private unnamed_addr constant [23 x i8] c"documentSymbolProvider\00" @.str.6776 = private unnamed_addr constant [2 x i8] c".\00" @.str.6777 = private unnamed_addr constant [18 x i8] c"triggerCharacters\00" @.str.6778 = private unnamed_addr constant [19 x i8] c"completionProvider\00" @.str.6779 = private unnamed_addr constant [2 x i8] c"(\00" @.str.6780 = private unnamed_addr constant [2 x i8] c",\00" @.str.6781 = private unnamed_addr constant [18 x i8] c"triggerCharacters\00" @.str.6782 = private unnamed_addr constant [22 x i8] c"signatureHelpProvider\00" @.str.6783 = private unnamed_addr constant [13 x i8] c"capabilities\00" @.str.6784 = private unnamed_addr constant [5 x i8] c"name\00" @.str.6785 = private unnamed_addr constant [6 x i8] c"finch\00" @.str.6786 = private unnamed_addr constant [11 x i8] c"serverInfo\00" @.str.6787 = private unnamed_addr constant [9 x i8] c"shutdown\00" @.str.6788 = private unnamed_addr constant [5 x i8] c"exit\00" @.str.6789 = private unnamed_addr constant [21 x i8] c"textDocument/didOpen\00" @.str.6790 = private unnamed_addr constant [23 x i8] c"textDocument/didChange\00" @.str.6791 = private unnamed_addr constant [15 x i8] c"contentChanges\00" @.str.6792 = private unnamed_addr constant [5 x i8] c"text\00" @.str.6793 = private unnamed_addr constant [1 x i8] c"\00" @.str.6794 = private unnamed_addr constant [21 x i8] c"textDocument/didSave\00" @.str.6795 = private unnamed_addr constant [22 x i8] c"textDocument/didClose\00" @.str.6796 = private unnamed_addr constant [4 x i8] c"uri\00" @.str.6797 = private unnamed_addr constant [12 x i8] c"diagnostics\00" @.str.6798 = private unnamed_addr constant [32 x i8] c"textDocument/publishDiagnostics\00" @.str.6799 = private unnamed_addr constant [19 x i8] c"textDocument/hover\00" @.str.6800 = private unnamed_addr constant [24 x i8] c"textDocument/definition\00" @.str.6801 = private unnamed_addr constant [24 x i8] c"textDocument/completion\00" @.str.6802 = private unnamed_addr constant [28 x i8] c"textDocument/documentSymbol\00" @.str.6803 = private unnamed_addr constant [27 x i8] c"textDocument/signatureHelp\00" @.str.6804 = private unnamed_addr constant [9 x i8] c"position\00" @.str.6805 = private unnamed_addr constant [5 x i8] c"line\00" @.str.6806 = private unnamed_addr constant [9 x i8] c"position\00" @.str.6807 = private unnamed_addr constant [10 x i8] c"character\00" @.str.6808 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6809 = private unnamed_addr constant [1 x i8] c"\00" @.str.6810 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6811 = private unnamed_addr constant [19 x i8] c"textDocument/hover\00" @.str.6812 = private unnamed_addr constant [24 x i8] c"textDocument/definition\00" @.str.6813 = private unnamed_addr constant [24 x i8] c"textDocument/completion\00" @.str.6814 = private unnamed_addr constant [28 x i8] c"textDocument/documentSymbol\00" @.str.6815 = private unnamed_addr constant [16 x i8] c"/tmp/finch_lsp_\00" @.str.6816 = private unnamed_addr constant [9 x i8] c"rm -rf '\00" @.str.6817 = private unnamed_addr constant [2 x i8] c"'\00" @.str.6818 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6819 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6820 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6821 = private unnamed_addr constant [2 x i8] c"\22\00" @.str.6822 = private unnamed_addr constant [3 x i8] c"\5C\22\00" @.str.6823 = private unnamed_addr constant [3 x i8] c"\5C\5C\00" @.str.6824 = private unnamed_addr constant [3 x i8] c"\5Cn\00" @.str.6825 = private unnamed_addr constant [3 x i8] c"\5Cr\00" @.str.6826 = private unnamed_addr constant [3 x i8] c"\5Ct\00" @.str.6827 = private unnamed_addr constant [5 x i8] c"\5Cu00\00" @.str.6828 = private unnamed_addr constant [2 x i8] c"\22\00" @.str.6829 = private unnamed_addr constant [1 x i8] c"\00" @.str.6830 = private unnamed_addr constant [17 x i8] c"0123456789abcdef\00" @.str.6831 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6832 = private unnamed_addr constant [1 x i8] c"\00" @.str.6833 = private unnamed_addr constant [1 x i8] c"\00" @.str.6834 = private unnamed_addr constant [2 x i8] c",\00" @.str.6835 = private unnamed_addr constant [2 x i8] c":\00" @.str.6836 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.6837 = private unnamed_addr constant [3 x i8] c": \00" @.str.6838 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6839 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.6840 = private unnamed_addr constant [5 x i8] c"null\00" @.str.6841 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6842 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.6843 = private unnamed_addr constant [5 x i8] c"true\00" @.str.6844 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6845 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.6846 = private unnamed_addr constant [6 x i8] c"false\00" @.str.6847 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6848 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.6849 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6850 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.6851 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6852 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.6853 = private unnamed_addr constant [3 x i8] c"[]\00" @.str.6854 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6855 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.6856 = private unnamed_addr constant [2 x i8] c"[\00" @.str.6857 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6858 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.6859 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6860 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.6861 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6862 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.6863 = private unnamed_addr constant [2 x i8] c"]\00" @.str.6864 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6865 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.6866 = private unnamed_addr constant [3 x i8] c"{}\00" @.str.6867 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6868 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.6869 = private unnamed_addr constant [2 x i8] c"{\00" @.str.6870 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6871 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.6872 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6873 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.6874 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6875 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6876 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.6877 = private unnamed_addr constant [2 x i8] c"}\00" @.str.6878 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6879 = private unnamed_addr constant [36 x i8] c"no arm of this match fits the value\00" @.str.6880 = private unnamed_addr constant [1 x i8] c"\00" @.str.6881 = private unnamed_addr constant [1 x i8] c"\00" @.str.6882 = private unnamed_addr constant [1 x i8] c"\00" @.str.6883 = private unnamed_addr constant [3 x i8] c" \00" @.str.6884 = private unnamed_addr constant [1 x i8] c"\00" @.str.6885 = private unnamed_addr constant [1 x i8] c"\00" @.str.6886 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6887 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.6888 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6889 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.6890 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6891 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.6892 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6893 = private unnamed_addr constant [6 x i8] c"line \00" @.str.6894 = private unnamed_addr constant [10 x i8] c", column \00" @.str.6895 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6896 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.6897 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6898 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.6899 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6900 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.6901 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6902 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.6903 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6904 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6905 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.6906 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6907 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.6908 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6909 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.6910 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6911 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.6912 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6913 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6914 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.6915 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6916 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.6917 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6918 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6919 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.6920 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6921 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.6922 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6923 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6924 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.6925 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6926 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.6927 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6928 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6929 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.6930 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6931 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.6932 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6933 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.6934 = private unnamed_addr constant [27 x i8] c"json: the text ends where \00" @.str.6935 = private unnamed_addr constant [13 x i8] c" should be (\00" @.str.6936 = private unnamed_addr constant [2 x i8] c")\00" @.str.6937 = private unnamed_addr constant [14 x i8] c"json: found '\00" @.str.6938 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6939 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.6940 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6941 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.6942 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6943 = private unnamed_addr constant [9 x i8] c"' where \00" @.str.6944 = private unnamed_addr constant [13 x i8] c" should be (\00" @.str.6945 = private unnamed_addr constant [2 x i8] c")\00" @.str.6946 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6947 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.6948 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6949 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.6950 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6951 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.6952 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6953 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6954 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.6955 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6956 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.6957 = private unnamed_addr constant [2 x i8] c"'\00" @.str.6958 = private unnamed_addr constant [2 x i8] c"'\00" @.str.6959 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6960 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.6961 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6962 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.6963 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6964 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.6965 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6966 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.6967 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6968 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.6969 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6970 = private unnamed_addr constant [20 x i8] c"a hexadecimal digit\00" @.str.6971 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6972 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.6973 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6974 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.6975 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6976 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6977 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.6978 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6979 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.6980 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6981 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.6982 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6983 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.6984 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6985 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.6986 = private unnamed_addr constant [31 x i8] c"json: a text is never closed (\00" @.str.6987 = private unnamed_addr constant [2 x i8] c")\00" @.str.6988 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6989 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.6990 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6991 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.6992 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6993 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6994 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.6995 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6996 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6997 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.6998 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.6999 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7000 = private unnamed_addr constant [1 x i8] c"\00" @.str.7001 = private unnamed_addr constant [56 x i8] c"json: a line break or control character inside a text (\00" @.str.7002 = private unnamed_addr constant [2 x i8] c")\00" @.str.7003 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7004 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7005 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7006 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7007 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7008 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7009 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7010 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7011 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7012 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7013 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7014 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.7015 = private unnamed_addr constant [2 x i8] c"\09\00" @.str.7016 = private unnamed_addr constant [2 x i8] c"\0D\00" @.str.7017 = private unnamed_addr constant [3 x i8] c"\5Cu\00" @.str.7018 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7019 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7020 = private unnamed_addr constant [23 x i8] c"json: unknown escape \5C\00" @.str.7021 = private unnamed_addr constant [13 x i8] c" in a text (\00" @.str.7022 = private unnamed_addr constant [2 x i8] c")\00" @.str.7023 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7024 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7025 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7026 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7027 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7028 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7029 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7030 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7031 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7032 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7033 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7034 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7035 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7036 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7037 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7038 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7039 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7040 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7041 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7042 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7043 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7044 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7045 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7046 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7047 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7048 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7049 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7050 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7051 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7052 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7053 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7054 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7055 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7056 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7057 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7058 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7059 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7060 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7061 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7062 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7063 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7064 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7065 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7066 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7067 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7068 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7069 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7070 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7071 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7072 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7073 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7074 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7075 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7076 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7077 = private unnamed_addr constant [9 x i8] c"a number\00" @.str.7078 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7079 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7080 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7081 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7082 = private unnamed_addr constant [8 x i8] c"a value\00" @.str.7083 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7084 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7085 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7086 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7087 = private unnamed_addr constant [16 x i8] c"a key in quotes\00" @.str.7088 = private unnamed_addr constant [4 x i8] c"':'\00" @.str.7089 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7090 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7091 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7092 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7093 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7094 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7095 = private unnamed_addr constant [11 x i8] c"',' or '}'\00" @.str.7096 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7097 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7098 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7099 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7100 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7101 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7102 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7103 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7104 = private unnamed_addr constant [11 x i8] c"',' or ']'\00" @.str.7105 = private unnamed_addr constant [5 x i8] c"true\00" @.str.7106 = private unnamed_addr constant [6 x i8] c"false\00" @.str.7107 = private unnamed_addr constant [5 x i8] c"null\00" @.str.7108 = private unnamed_addr constant [8 x i8] c"a value\00" @.str.7109 = private unnamed_addr constant [20 x i8] c"the end of the text\00" declare void @finch_panic(ptr, i64, ptr) noreturn cold declare void @finch_panic_index(ptr, i64, i64, i64) noreturn cold declare ptr @finch_alloc(i64) declare void @finch_str_copy(ptr, ptr) declare void @finch_str_own(ptr) declare void @finch_str_concat(ptr, ptr, ptr) declare i32 @finch_str_eq(ptr, ptr) declare i64 @finch_str_cmp(ptr, ptr) declare void @finch_buf_add(ptr, ptr, i64) declare void @finch_buf_int(ptr, i64) declare void @finch_buf_uint(ptr, i64) declare void @finch_buf_float(ptr, double) declare void @finch_buf_bool(ptr, i32) declare void @finch_buf_ptr(ptr, ptr) declare void @finch_buf_char(ptr, i8, i32) declare void @finch_buf_str(ptr, ptr, i32) declare void @finch_buf_print(ptr) declare void @finch_str_from_int(ptr, i64) declare void @finch_str_from_uint(ptr, i64) declare void @finch_str_from_float(ptr, double) declare void @finch_str_from_char(ptr, i8 signext) declare void @finch_str_from_bool(ptr, i32) declare i64 @finch_str_to_int(ptr, ptr, i64) declare double @finch_str_to_float(ptr, ptr, i64) declare void @finch_str_sub(ptr, ptr, i64, i64, ptr, i64) declare i64 @finch_str_find(ptr, ptr) declare i32 @finch_str_starts(ptr, ptr) declare i32 @finch_str_ends(ptr, ptr) declare void @finch_str_trim(ptr, ptr) declare void @finch_str_upper(ptr, ptr) declare void @finch_str_lower(ptr, ptr) declare void @finch_str_replace(ptr, ptr, ptr, ptr) declare void @finch_str_split(ptr, ptr, ptr) declare void @finch_str_join(ptr, ptr, ptr) declare void @finch_str_repeat(ptr, ptr, i64) declare void @finch_bytes_from_str(ptr, ptr) declare i64 @finch_map_find(ptr, ptr, i64, i64, i32) declare i64 @finch_map_slot(ptr, ptr, i64, i64, i32, ptr) declare void @finch_map_remove_at(ptr, i64, i64) declare void @finch_map_clear(ptr) declare void @finch_map_clone_raw(ptr, ptr, i64) declare void @finch_map_missing(ptr, i64, ptr) noreturn cold declare void @finch_map_changed(ptr, i64) noreturn cold declare void @finch_arr_reserve(ptr, i64, i64) declare void @finch_arr_clone_raw(ptr, ptr, i64) declare void @finch_arr_make(ptr, i64, i64) declare void @finch_arr_resize(ptr, i64, i64) declare void @finch_arr_insert_gap(ptr, i64, i64, ptr, i64) declare void @finch_arr_remove_gap(ptr, i64, i64) declare void @qsort(ptr, i64, i64, ptr) declare void @finch_args(ptr, i32, ptr) declare void @finch_input(ptr, ptr) declare i32 @finch_file_exists(ptr) declare i32 @finch_str_try_int(ptr, ptr, ptr) declare i32 @finch_str_try_float(ptr, ptr, ptr) declare i32 @finch_try_read_file(ptr, ptr, ptr) declare i32 @finch_try_write_file(ptr, ptr, ptr) declare i32 @finch_try_delete_file(ptr, ptr) declare void @finch_report_error(ptr) declare void @finch_read_file(ptr, ptr, ptr, i64) declare i32 @finch_write_file(ptr, ptr) declare i64 @finch_shell(ptr) declare i32 @finch_delete_file(ptr) declare i32 @printf(ptr, ...) declare i32 @fflush(ptr) declare void @finch_str_from_c(ptr, ptr) declare void @finch_on_fatal(ptr) declare ptr @finch_std_stream(i32) declare void @finch_str_from_bytes(ptr, ptr) declare void @exit(i32) noreturn declare void @free(ptr) define internal { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca i64, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t3 = load i64, ptr %t2 %t4 = sub i64 %t3, 1 store i64 %t4, ptr %a5 br label %while.cond1 while.cond1: %t6 = load i64, ptr %a5 %t7 = icmp sge i64 %t6, 0 br label %logic.from4 logic.from4: br i1 %t7, label %logic.rhs5, label %logic.end6 logic.rhs5: %t8 = load i64, ptr %a5 %t9 = load { ptr, i64, i64 }, ptr %a1 %t10 = extractvalue { ptr, i64, i64 } %t9, 1 %t11 = icmp uge i64 %t8, %t10 br i1 %t11, label %range7, label %inrange8 range7: call void @finch_panic_index(ptr @.str.1, i64 20, i64 %t8, i64 %t10) unreachable inrange8: %t12 = extractvalue { ptr, i64, i64 } %t9, 0 %t13 = getelementptr inbounds i8, ptr %t12, i64 %t8 %t14 = load i8, ptr %t13 %t15 = icmp ne i8 %t14, 47 br label %logic.rend9 logic.rend9: br label %logic.end6 logic.end6: %t16 = phi i1 [ false, %logic.from4 ], [ %t15, %logic.rend9 ] br i1 %t16, label %while.body2, label %while.end3 while.body2: %t17 = load i64, ptr %a5 %t18 = sub i64 %t17, 1 store i64 %t18, ptr %a5 br label %while.cond1 while.end3: %t19 = load i64, ptr %a5 %t20 = icmp slt i64 %t19, 0 br i1 %t20, label %then10, label %endif12 then10: ret { ptr, i64, i64 } { ptr @.str.2, i64 1, i64 0 } endif12: %t21 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t21, ptr %a22 %t24 = load i64, ptr %a5 call void @finch_str_sub(ptr %a23, ptr %a22, i64 0, i64 %t24, ptr @.str.3, i64 26) %t25 = load { ptr, i64, i64 }, ptr %a23 ret { ptr, i64, i64 } %t25 } define internal { ptr, i64, i64 } @finch.main.stem({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca i64, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t2, ptr %a3 %t5 = load { ptr, i64, i64 }, ptr %a1 %t6 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t5) %t7 = extractvalue { ptr, i64, i64 } %t6, 1 %t8 = add i64 %t7, 1 %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t10 = load i64, ptr %t9 call void @finch_str_sub(ptr %a4, ptr %a3, i64 %t8, i64 %t10, ptr @.str.4, i64 30) %t11 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t11, ptr %a12 %t13 = load { ptr, i64, i64 }, ptr %a1 %t14 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t13) store { ptr, i64, i64 } %t14, ptr %a15 store { ptr, i64, i64 } { ptr @.str.5, i64 1, i64 0 }, ptr %a16 %t17 = call i32 @finch_str_eq(ptr %a15, ptr %a16) %t18 = icmp ne i32 %t17, 0 br label %logic.from13 logic.from13: br i1 %t18, label %logic.rhs14, label %logic.end15 logic.rhs14: %t19 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t19, ptr %a20 store { ptr, i64, i64 } { ptr @.str.7, i64 2, i64 0 }, ptr %a22 %t23 = call i32 @finch_str_starts(ptr %a20, ptr %a22) %t24 = icmp ne i32 %t23, 0 %t25 = xor i1 %t24, true br label %logic.rend16 logic.rend16: br label %logic.end15 logic.end15: %t26 = phi i1 [ false, %logic.from13 ], [ %t25, %logic.rend16 ] br i1 %t26, label %then17, label %endif19 then17: %t27 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t27, ptr %a28 call void @finch_str_copy(ptr %a29, ptr %a28) %t30 = load { ptr, i64, i64 }, ptr %a29 store { ptr, i64, i64 } %t30, ptr %a12 br label %endif19 endif19: %t31 = load { ptr, i64, i64 }, ptr %a12 store { ptr, i64, i64 } %t31, ptr %a32 store { ptr, i64, i64 } { ptr @.str.9, i64 1, i64 0 }, ptr %a34 %t35 = call i64 @finch_str_find(ptr %a32, ptr %a34) store i64 %t35, ptr %a36 %t37 = load i64, ptr %a36 %t38 = icmp sgt i64 %t37, 0 br i1 %t38, label %then20, label %endif22 then20: %t39 = load { ptr, i64, i64 }, ptr %a12 store { ptr, i64, i64 } %t39, ptr %a40 %t42 = load i64, ptr %a36 call void @finch_str_sub(ptr %a41, ptr %a40, i64 0, i64 %t42, ptr @.str.10, i64 36) %t43 = load { ptr, i64, i64 }, ptr %a41 ret { ptr, i64, i64 } %t43 endif22: %t44 = load { ptr, i64, i64 }, ptr %a12 store { ptr, i64, i64 } %t44, ptr %a45 call void @finch_str_copy(ptr %a46, ptr %a45) %t47 = load { ptr, i64, i64 }, ptr %a46 ret { ptr, i64, i64 } %t47 } define internal { ptr, i64, i64 } @finch.main.textOfFile(ptr %p0, { ptr, i64, i64 } %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca i64, align 16 %a11 = alloca i64, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca i64, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null br i1 %t4, label %panic23, label %ok24 panic23: call void @finch_panic(ptr @.str.11, i64 53, ptr @.str.12) unreachable ok24: %t5 = getelementptr inbounds %S.main.Loader, ptr %t3, i32 0, i32 6 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 %t7 = load { ptr, i64, i64 }, ptr %a2 store i64 -1, ptr %a8 %t9 = load i64, ptr %t6 %t10 = load ptr, ptr %t5 store i64 0, ptr %a11 br label %find.cond25 find.cond25: %t12 = load i64, ptr %a11 %t13 = icmp slt i64 %t12, %t9 br i1 %t13, label %find.body26, label %find.end29 find.body26: %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t10, i64 %t12 %t15 = load { ptr, i64, i64 }, ptr %t14 store { ptr, i64, i64 } %t15, ptr %a16 store { ptr, i64, i64 } %t7, ptr %a17 %t18 = call i32 @finch_str_eq(ptr %a16, ptr %a17) %t19 = icmp ne i32 %t18, 0 br i1 %t19, label %find.hit27, label %find.next28 find.hit27: store i64 %t12, ptr %a8 br label %find.end29 find.next28: %t20 = add i64 %t12, 1 store i64 %t20, ptr %a11 br label %find.cond25 find.end29: %t21 = load i64, ptr %a8 store i64 %t21, ptr %a22 %t23 = load i64, ptr %a22 %t24 = icmp sge i64 %t23, 0 br i1 %t24, label %then30, label %endif32 then30: %t25 = load ptr, ptr %a1 %t26 = icmp eq ptr %t25, null br i1 %t26, label %panic33, label %ok34 panic33: call void @finch_panic(ptr @.str.13, i64 55, ptr @.str.14) unreachable ok34: %t27 = getelementptr inbounds %S.main.Loader, ptr %t25, i32 0, i32 7 %t28 = load i64, ptr %a22 %t29 = load { ptr, i64, i64 }, ptr %t27 %t30 = extractvalue { ptr, i64, i64 } %t29, 1 %t31 = icmp uge i64 %t28, %t30 br i1 %t31, label %range35, label %inrange36 range35: call void @finch_panic_index(ptr @.str.15, i64 55, i64 %t28, i64 %t30) unreachable inrange36: %t32 = extractvalue { ptr, i64, i64 } %t29, 0 %t33 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 %t28 %t34 = load { ptr, i64, i64 }, ptr %t33 store { ptr, i64, i64 } %t34, ptr %a35 call void @finch_read_file(ptr %a36, ptr %a35, ptr @.str.16, i64 55) %t37 = load { ptr, i64, i64 }, ptr %a36 ret { ptr, i64, i64 } %t37 endif32: %t38 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t38, ptr %a39 call void @finch_read_file(ptr %a40, ptr %a39, ptr @.str.17, i64 57) %t41 = load { ptr, i64, i64 }, ptr %a40 ret { ptr, i64, i64 } %t41 } define internal { ptr, i64, i64 } @finch.main.findModule(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca i64, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca { ptr, i64, i64 }, align 16 %a104 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca { ptr, i64, i64 }, align 16 %a115 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca { ptr, i64, i64 }, align 16 %a117 = alloca { ptr, i64, i64 }, align 16 %a119 = alloca { ptr, i64, i64 }, align 16 %a120 = alloca { ptr, i64, i64 }, align 16 %a121 = alloca { ptr, i64, i64 }, align 16 %a123 = alloca { ptr, i64, i64 }, align 16 %a127 = alloca { ptr, i64, i64 }, align 16 %a128 = alloca { ptr, i64, i64 }, align 16 %a129 = alloca { ptr, i64, i64 }, align 16 %a132 = alloca { ptr, i64, i64 }, align 16 %a133 = alloca { ptr, i64, i64 }, align 16 %a134 = alloca { ptr, i64, i64 }, align 16 %a136 = alloca { ptr, i64, i64 }, align 16 %a137 = alloca { ptr, i64, i64 }, align 16 %a138 = alloca { ptr, i64, i64 }, align 16 %a144 = alloca { ptr, i64, i64 }, align 16 %a145 = alloca { ptr, i64, i64 }, align 16 %a146 = alloca { ptr, i64, i64 }, align 16 %a148 = alloca { ptr, i64, i64 }, align 16 %a149 = alloca { ptr, i64, i64 }, align 16 %a150 = alloca { ptr, i64, i64 }, align 16 %a153 = alloca { ptr, i64, i64 }, align 16 %a154 = alloca { ptr, i64, i64 }, align 16 %a155 = alloca { ptr, i64, i64 }, align 16 %a158 = alloca { ptr, i64, i64 }, align 16 %a159 = alloca { ptr, i64, i64 }, align 16 %a160 = alloca { ptr, i64, i64 }, align 16 %a162 = alloca { ptr, i64, i64 }, align 16 %a163 = alloca { ptr, i64, i64 }, align 16 %a164 = alloca { ptr, i64, i64 }, align 16 %a166 = alloca { ptr, i64, i64 }, align 16 %a170 = alloca { ptr, i64, i64 }, align 16 %a171 = alloca { ptr, i64, i64 }, align 16 %a172 = alloca { ptr, i64, i64 }, align 16 %a175 = alloca { ptr, i64, i64 }, align 16 %a176 = alloca { ptr, i64, i64 }, align 16 %a177 = alloca { ptr, i64, i64 }, align 16 %a179 = alloca { ptr, i64, i64 }, align 16 %a180 = alloca { ptr, i64, i64 }, align 16 %a181 = alloca { ptr, i64, i64 }, align 16 %a195 = alloca { ptr, i64, i64 }, align 16 %a196 = alloca { ptr, i64, i64 }, align 16 %a197 = alloca { ptr, i64, i64 }, align 16 %a200 = alloca { ptr, i64, i64 }, align 16 %a201 = alloca { ptr, i64, i64 }, align 16 %a202 = alloca { ptr, i64, i64 }, align 16 %a204 = alloca { ptr, i64, i64 }, align 16 %a205 = alloca { ptr, i64, i64 }, align 16 %a206 = alloca { ptr, i64, i64 }, align 16 %a212 = alloca { ptr, i64, i64 }, align 16 %a213 = alloca { ptr, i64, i64 }, align 16 %a214 = alloca { ptr, i64, i64 }, align 16 %a216 = alloca { ptr, i64, i64 }, align 16 %a217 = alloca { ptr, i64, i64 }, align 16 %a218 = alloca { ptr, i64, i64 }, align 16 %a220 = alloca { ptr, i64, i64 }, align 16 %a227 = alloca { ptr, i64, i64 }, align 16 %a228 = alloca { ptr, i64, i64 }, align 16 %a229 = alloca { ptr, i64, i64 }, align 16 %a232 = alloca { ptr, i64, i64 }, align 16 %a233 = alloca { ptr, i64, i64 }, align 16 %a234 = alloca { ptr, i64, i64 }, align 16 %a236 = alloca { ptr, i64, i64 }, align 16 %a237 = alloca { ptr, i64, i64 }, align 16 %a238 = alloca { ptr, i64, i64 }, align 16 %a244 = alloca { ptr, i64, i64 }, align 16 %a245 = alloca { ptr, i64, i64 }, align 16 %a246 = alloca { ptr, i64, i64 }, align 16 %a248 = alloca { ptr, i64, i64 }, align 16 %a249 = alloca { ptr, i64, i64 }, align 16 %a250 = alloca { ptr, i64, i64 }, align 16 %a256 = alloca { ptr, i64, i64 }, align 16 %a257 = alloca { ptr, i64, i64 }, align 16 %a258 = alloca { ptr, i64, i64 }, align 16 %a261 = alloca { ptr, i64, i64 }, align 16 %a262 = alloca { ptr, i64, i64 }, align 16 %a263 = alloca { ptr, i64, i64 }, align 16 %a265 = alloca { ptr, i64, i64 }, align 16 %a266 = alloca { ptr, i64, i64 }, align 16 %a267 = alloca { ptr, i64, i64 }, align 16 %a269 = alloca { ptr, i64, i64 }, align 16 %a276 = alloca { ptr, i64, i64 }, align 16 %a277 = alloca { ptr, i64, i64 }, align 16 %a278 = alloca { ptr, i64, i64 }, align 16 %a281 = alloca { ptr, i64, i64 }, align 16 %a282 = alloca { ptr, i64, i64 }, align 16 %a283 = alloca { ptr, i64, i64 }, align 16 %a285 = alloca { ptr, i64, i64 }, align 16 %a286 = alloca { ptr, i64, i64 }, align 16 %a287 = alloca { ptr, i64, i64 }, align 16 %a290 = alloca { ptr, i64, i64 }, align 16 %a291 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 %t4 = load { ptr, i64, i64 }, ptr %a2 %t5 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t4) store { ptr, i64, i64 } %t5, ptr %a7 store { ptr, i64, i64 } { ptr @.str.18, i64 1, i64 0 }, ptr %a8 call void @finch_str_concat(ptr %a6, ptr %a7, ptr %a8) %t9 = load { ptr, i64, i64 }, ptr %a6 %t10 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t9, ptr %a12 store { ptr, i64, i64 } %t10, ptr %a13 call void @finch_str_concat(ptr %a11, ptr %a12, ptr %a13) %t14 = load { ptr, i64, i64 }, ptr %a11 store { ptr, i64, i64 } %t14, ptr %a16 store { ptr, i64, i64 } { ptr @.str.19, i64 4, i64 0 }, ptr %a17 call void @finch_str_concat(ptr %a15, ptr %a16, ptr %a17) %t18 = load { ptr, i64, i64 }, ptr %a15 store { ptr, i64, i64 } %t18, ptr %a19 %t20 = load { ptr, i64, i64 }, ptr %a2 %t21 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t20) store { ptr, i64, i64 } %t21, ptr %a23 store { ptr, i64, i64 } { ptr @.str.20, i64 1, i64 0 }, ptr %a24 call void @finch_str_concat(ptr %a22, ptr %a23, ptr %a24) %t25 = load { ptr, i64, i64 }, ptr %a22 %t26 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t25, ptr %a28 store { ptr, i64, i64 } %t26, ptr %a29 call void @finch_str_concat(ptr %a27, ptr %a28, ptr %a29) %t30 = load { ptr, i64, i64 }, ptr %a27 store { ptr, i64, i64 } %t30, ptr %a32 store { ptr, i64, i64 } { ptr @.str.21, i64 1, i64 0 }, ptr %a33 call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33) %t34 = load { ptr, i64, i64 }, ptr %a31 %t35 = load ptr, ptr %a1 %t36 = icmp eq ptr %t35, null br i1 %t36, label %panic37, label %ok38 panic37: call void @finch_panic(ptr @.str.22, i64 65, ptr @.str.23) unreachable ok38: %t37 = getelementptr inbounds %S.main.Loader, ptr %t35, i32 0, i32 3 %t38 = load { ptr, i64, i64 }, ptr %t37 store { ptr, i64, i64 } %t34, ptr %a40 store { ptr, i64, i64 } %t38, ptr %a41 call void @finch_str_concat(ptr %a39, ptr %a40, ptr %a41) %t42 = load { ptr, i64, i64 }, ptr %a39 store { ptr, i64, i64 } %t42, ptr %a44 store { ptr, i64, i64 } { ptr @.str.24, i64 4, i64 0 }, ptr %a45 call void @finch_str_concat(ptr %a43, ptr %a44, ptr %a45) %t46 = load { ptr, i64, i64 }, ptr %a43 store { ptr, i64, i64 } %t46, ptr %a47 %t48 = call i32 @finch_file_exists(ptr %a47) %t49 = icmp ne i32 %t48, 0 br i1 %t49, label %then39, label %endif41 then39: %t50 = load { ptr, i64, i64 }, ptr %a2 %t51 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t50) store { ptr, i64, i64 } %t51, ptr %a53 store { ptr, i64, i64 } { ptr @.str.25, i64 1, i64 0 }, ptr %a54 call void @finch_str_concat(ptr %a52, ptr %a53, ptr %a54) %t55 = load { ptr, i64, i64 }, ptr %a52 %t56 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t55, ptr %a58 store { ptr, i64, i64 } %t56, ptr %a59 call void @finch_str_concat(ptr %a57, ptr %a58, ptr %a59) %t60 = load { ptr, i64, i64 }, ptr %a57 store { ptr, i64, i64 } %t60, ptr %a62 store { ptr, i64, i64 } { ptr @.str.26, i64 1, i64 0 }, ptr %a63 call void @finch_str_concat(ptr %a61, ptr %a62, ptr %a63) %t64 = load { ptr, i64, i64 }, ptr %a61 %t65 = load ptr, ptr %a1 %t66 = icmp eq ptr %t65, null br i1 %t66, label %panic42, label %ok43 panic42: call void @finch_panic(ptr @.str.27, i64 66, ptr @.str.28) unreachable ok43: %t67 = getelementptr inbounds %S.main.Loader, ptr %t65, i32 0, i32 3 %t68 = load { ptr, i64, i64 }, ptr %t67 store { ptr, i64, i64 } %t64, ptr %a70 store { ptr, i64, i64 } %t68, ptr %a71 call void @finch_str_concat(ptr %a69, ptr %a70, ptr %a71) %t72 = load { ptr, i64, i64 }, ptr %a69 store { ptr, i64, i64 } %t72, ptr %a74 store { ptr, i64, i64 } { ptr @.str.29, i64 4, i64 0 }, ptr %a75 call void @finch_str_concat(ptr %a73, ptr %a74, ptr %a75) %t76 = load { ptr, i64, i64 }, ptr %a73 ret { ptr, i64, i64 } %t76 endif41: %t77 = load { ptr, i64, i64 }, ptr %a19 store { ptr, i64, i64 } %t77, ptr %a78 %t79 = call i32 @finch_file_exists(ptr %a78) %t80 = icmp ne i32 %t79, 0 br i1 %t80, label %then44, label %endif46 then44: %t81 = load { ptr, i64, i64 }, ptr %a19 store { ptr, i64, i64 } %t81, ptr %a82 call void @finch_str_copy(ptr %a83, ptr %a82) %t84 = load { ptr, i64, i64 }, ptr %a83 ret { ptr, i64, i64 } %t84 endif46: %t85 = load ptr, ptr %a1 %t86 = icmp eq ptr %t85, null br i1 %t86, label %panic47, label %ok48 panic47: call void @finch_panic(ptr @.str.30, i64 71, ptr @.str.31) unreachable ok48: %t87 = getelementptr inbounds %S.main.Loader, ptr %t85, i32 0, i32 5 store i64 0, ptr %a88 br label %each.cond49 each.cond49: %t89 = getelementptr inbounds { ptr, i64, i64 }, ptr %t87, i32 0, i32 1 %t90 = load i64, ptr %t89 %t91 = load i64, ptr %a88 %t92 = icmp slt i64 %t91, %t90 br i1 %t92, label %each.body50, label %each.end52 each.body50: %t93 = load ptr, ptr %t87 %t94 = getelementptr inbounds { ptr, i64, i64 }, ptr %t93, i64 %t91 %t95 = load { ptr, i64, i64 }, ptr %t94 store { ptr, i64, i64 } %t95, ptr %a96 %t97 = load { ptr, i64, i64 }, ptr %a96 store { ptr, i64, i64 } %t97, ptr %a99 store { ptr, i64, i64 } { ptr @.str.32, i64 1, i64 0 }, ptr %a100 call void @finch_str_concat(ptr %a98, ptr %a99, ptr %a100) %t101 = load { ptr, i64, i64 }, ptr %a98 %t102 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t101, ptr %a104 store { ptr, i64, i64 } %t102, ptr %a105 call void @finch_str_concat(ptr %a103, ptr %a104, ptr %a105) %t106 = load { ptr, i64, i64 }, ptr %a103 store { ptr, i64, i64 } %t106, ptr %a108 store { ptr, i64, i64 } { ptr @.str.33, i64 1, i64 0 }, ptr %a109 call void @finch_str_concat(ptr %a107, ptr %a108, ptr %a109) %t110 = load { ptr, i64, i64 }, ptr %a107 %t111 = load ptr, ptr %a1 %t112 = icmp eq ptr %t111, null br i1 %t112, label %panic53, label %ok54 panic53: call void @finch_panic(ptr @.str.34, i64 72, ptr @.str.35) unreachable ok54: %t113 = getelementptr inbounds %S.main.Loader, ptr %t111, i32 0, i32 3 %t114 = load { ptr, i64, i64 }, ptr %t113 store { ptr, i64, i64 } %t110, ptr %a116 store { ptr, i64, i64 } %t114, ptr %a117 call void @finch_str_concat(ptr %a115, ptr %a116, ptr %a117) %t118 = load { ptr, i64, i64 }, ptr %a115 store { ptr, i64, i64 } %t118, ptr %a120 store { ptr, i64, i64 } { ptr @.str.36, i64 4, i64 0 }, ptr %a121 call void @finch_str_concat(ptr %a119, ptr %a120, ptr %a121) %t122 = load { ptr, i64, i64 }, ptr %a119 store { ptr, i64, i64 } %t122, ptr %a123 %t124 = call i32 @finch_file_exists(ptr %a123) %t125 = icmp ne i32 %t124, 0 br i1 %t125, label %then55, label %endif57 then55: %t126 = load { ptr, i64, i64 }, ptr %a96 store { ptr, i64, i64 } %t126, ptr %a128 store { ptr, i64, i64 } { ptr @.str.37, i64 1, i64 0 }, ptr %a129 call void @finch_str_concat(ptr %a127, ptr %a128, ptr %a129) %t130 = load { ptr, i64, i64 }, ptr %a127 %t131 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t130, ptr %a133 store { ptr, i64, i64 } %t131, ptr %a134 call void @finch_str_concat(ptr %a132, ptr %a133, ptr %a134) %t135 = load { ptr, i64, i64 }, ptr %a132 store { ptr, i64, i64 } %t135, ptr %a137 store { ptr, i64, i64 } { ptr @.str.38, i64 1, i64 0 }, ptr %a138 call void @finch_str_concat(ptr %a136, ptr %a137, ptr %a138) %t139 = load { ptr, i64, i64 }, ptr %a136 %t140 = load ptr, ptr %a1 %t141 = icmp eq ptr %t140, null br i1 %t141, label %panic58, label %ok59 panic58: call void @finch_panic(ptr @.str.39, i64 73, ptr @.str.40) unreachable ok59: %t142 = getelementptr inbounds %S.main.Loader, ptr %t140, i32 0, i32 3 %t143 = load { ptr, i64, i64 }, ptr %t142 store { ptr, i64, i64 } %t139, ptr %a145 store { ptr, i64, i64 } %t143, ptr %a146 call void @finch_str_concat(ptr %a144, ptr %a145, ptr %a146) %t147 = load { ptr, i64, i64 }, ptr %a144 store { ptr, i64, i64 } %t147, ptr %a149 store { ptr, i64, i64 } { ptr @.str.41, i64 4, i64 0 }, ptr %a150 call void @finch_str_concat(ptr %a148, ptr %a149, ptr %a150) %t151 = load { ptr, i64, i64 }, ptr %a148 ret { ptr, i64, i64 } %t151 endif57: %t152 = load { ptr, i64, i64 }, ptr %a96 store { ptr, i64, i64 } %t152, ptr %a154 store { ptr, i64, i64 } { ptr @.str.42, i64 1, i64 0 }, ptr %a155 call void @finch_str_concat(ptr %a153, ptr %a154, ptr %a155) %t156 = load { ptr, i64, i64 }, ptr %a153 %t157 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t156, ptr %a159 store { ptr, i64, i64 } %t157, ptr %a160 call void @finch_str_concat(ptr %a158, ptr %a159, ptr %a160) %t161 = load { ptr, i64, i64 }, ptr %a158 store { ptr, i64, i64 } %t161, ptr %a163 store { ptr, i64, i64 } { ptr @.str.43, i64 4, i64 0 }, ptr %a164 call void @finch_str_concat(ptr %a162, ptr %a163, ptr %a164) %t165 = load { ptr, i64, i64 }, ptr %a162 store { ptr, i64, i64 } %t165, ptr %a166 %t167 = call i32 @finch_file_exists(ptr %a166) %t168 = icmp ne i32 %t167, 0 br i1 %t168, label %then60, label %endif62 then60: %t169 = load { ptr, i64, i64 }, ptr %a96 store { ptr, i64, i64 } %t169, ptr %a171 store { ptr, i64, i64 } { ptr @.str.44, i64 1, i64 0 }, ptr %a172 call void @finch_str_concat(ptr %a170, ptr %a171, ptr %a172) %t173 = load { ptr, i64, i64 }, ptr %a170 %t174 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t173, ptr %a176 store { ptr, i64, i64 } %t174, ptr %a177 call void @finch_str_concat(ptr %a175, ptr %a176, ptr %a177) %t178 = load { ptr, i64, i64 }, ptr %a175 store { ptr, i64, i64 } %t178, ptr %a180 store { ptr, i64, i64 } { ptr @.str.45, i64 4, i64 0 }, ptr %a181 call void @finch_str_concat(ptr %a179, ptr %a180, ptr %a181) %t182 = load { ptr, i64, i64 }, ptr %a179 ret { ptr, i64, i64 } %t182 endif62: br label %each.step51 each.step51: %t183 = load i64, ptr %a88 %t184 = add i64 %t183, 1 store i64 %t184, ptr %a88 br label %each.cond49 each.end52: %t185 = load ptr, ptr %a1 %t186 = icmp eq ptr %t185, null br i1 %t186, label %panic63, label %ok64 panic63: call void @finch_panic(ptr @.str.46, i64 79, ptr @.str.47) unreachable ok64: %t187 = getelementptr inbounds %S.main.Loader, ptr %t185, i32 0, i32 4 %t188 = getelementptr inbounds { ptr, i64, i64 }, ptr %t187, i32 0, i32 1 %t189 = load i64, ptr %t188 %t190 = icmp sgt i64 %t189, 0 br i1 %t190, label %then65, label %endif67 then65: %t191 = load ptr, ptr %a1 %t192 = icmp eq ptr %t191, null br i1 %t192, label %panic68, label %ok69 panic68: call void @finch_panic(ptr @.str.48, i64 80, ptr @.str.49) unreachable ok69: %t193 = getelementptr inbounds %S.main.Loader, ptr %t191, i32 0, i32 4 %t194 = load { ptr, i64, i64 }, ptr %t193 store { ptr, i64, i64 } %t194, ptr %a196 store { ptr, i64, i64 } { ptr @.str.50, i64 1, i64 0 }, ptr %a197 call void @finch_str_concat(ptr %a195, ptr %a196, ptr %a197) %t198 = load { ptr, i64, i64 }, ptr %a195 %t199 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t198, ptr %a201 store { ptr, i64, i64 } %t199, ptr %a202 call void @finch_str_concat(ptr %a200, ptr %a201, ptr %a202) %t203 = load { ptr, i64, i64 }, ptr %a200 store { ptr, i64, i64 } %t203, ptr %a205 store { ptr, i64, i64 } { ptr @.str.51, i64 1, i64 0 }, ptr %a206 call void @finch_str_concat(ptr %a204, ptr %a205, ptr %a206) %t207 = load { ptr, i64, i64 }, ptr %a204 %t208 = load ptr, ptr %a1 %t209 = icmp eq ptr %t208, null br i1 %t209, label %panic70, label %ok71 panic70: call void @finch_panic(ptr @.str.52, i64 80, ptr @.str.53) unreachable ok71: %t210 = getelementptr inbounds %S.main.Loader, ptr %t208, i32 0, i32 3 %t211 = load { ptr, i64, i64 }, ptr %t210 store { ptr, i64, i64 } %t207, ptr %a213 store { ptr, i64, i64 } %t211, ptr %a214 call void @finch_str_concat(ptr %a212, ptr %a213, ptr %a214) %t215 = load { ptr, i64, i64 }, ptr %a212 store { ptr, i64, i64 } %t215, ptr %a217 store { ptr, i64, i64 } { ptr @.str.54, i64 4, i64 0 }, ptr %a218 call void @finch_str_concat(ptr %a216, ptr %a217, ptr %a218) %t219 = load { ptr, i64, i64 }, ptr %a216 store { ptr, i64, i64 } %t219, ptr %a220 %t221 = call i32 @finch_file_exists(ptr %a220) %t222 = icmp ne i32 %t221, 0 br i1 %t222, label %then72, label %endif74 then72: %t223 = load ptr, ptr %a1 %t224 = icmp eq ptr %t223, null br i1 %t224, label %panic75, label %ok76 panic75: call void @finch_panic(ptr @.str.55, i64 81, ptr @.str.56) unreachable ok76: %t225 = getelementptr inbounds %S.main.Loader, ptr %t223, i32 0, i32 4 %t226 = load { ptr, i64, i64 }, ptr %t225 store { ptr, i64, i64 } %t226, ptr %a228 store { ptr, i64, i64 } { ptr @.str.57, i64 1, i64 0 }, ptr %a229 call void @finch_str_concat(ptr %a227, ptr %a228, ptr %a229) %t230 = load { ptr, i64, i64 }, ptr %a227 %t231 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t230, ptr %a233 store { ptr, i64, i64 } %t231, ptr %a234 call void @finch_str_concat(ptr %a232, ptr %a233, ptr %a234) %t235 = load { ptr, i64, i64 }, ptr %a232 store { ptr, i64, i64 } %t235, ptr %a237 store { ptr, i64, i64 } { ptr @.str.58, i64 1, i64 0 }, ptr %a238 call void @finch_str_concat(ptr %a236, ptr %a237, ptr %a238) %t239 = load { ptr, i64, i64 }, ptr %a236 %t240 = load ptr, ptr %a1 %t241 = icmp eq ptr %t240, null br i1 %t241, label %panic77, label %ok78 panic77: call void @finch_panic(ptr @.str.59, i64 81, ptr @.str.60) unreachable ok78: %t242 = getelementptr inbounds %S.main.Loader, ptr %t240, i32 0, i32 3 %t243 = load { ptr, i64, i64 }, ptr %t242 store { ptr, i64, i64 } %t239, ptr %a245 store { ptr, i64, i64 } %t243, ptr %a246 call void @finch_str_concat(ptr %a244, ptr %a245, ptr %a246) %t247 = load { ptr, i64, i64 }, ptr %a244 store { ptr, i64, i64 } %t247, ptr %a249 store { ptr, i64, i64 } { ptr @.str.61, i64 4, i64 0 }, ptr %a250 call void @finch_str_concat(ptr %a248, ptr %a249, ptr %a250) %t251 = load { ptr, i64, i64 }, ptr %a248 ret { ptr, i64, i64 } %t251 endif74: %t252 = load ptr, ptr %a1 %t253 = icmp eq ptr %t252, null br i1 %t253, label %panic79, label %ok80 panic79: call void @finch_panic(ptr @.str.62, i64 83, ptr @.str.63) unreachable ok80: %t254 = getelementptr inbounds %S.main.Loader, ptr %t252, i32 0, i32 4 %t255 = load { ptr, i64, i64 }, ptr %t254 store { ptr, i64, i64 } %t255, ptr %a257 store { ptr, i64, i64 } { ptr @.str.64, i64 1, i64 0 }, ptr %a258 call void @finch_str_concat(ptr %a256, ptr %a257, ptr %a258) %t259 = load { ptr, i64, i64 }, ptr %a256 %t260 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t259, ptr %a262 store { ptr, i64, i64 } %t260, ptr %a263 call void @finch_str_concat(ptr %a261, ptr %a262, ptr %a263) %t264 = load { ptr, i64, i64 }, ptr %a261 store { ptr, i64, i64 } %t264, ptr %a266 store { ptr, i64, i64 } { ptr @.str.65, i64 4, i64 0 }, ptr %a267 call void @finch_str_concat(ptr %a265, ptr %a266, ptr %a267) %t268 = load { ptr, i64, i64 }, ptr %a265 store { ptr, i64, i64 } %t268, ptr %a269 %t270 = call i32 @finch_file_exists(ptr %a269) %t271 = icmp ne i32 %t270, 0 br i1 %t271, label %then81, label %endif83 then81: %t272 = load ptr, ptr %a1 %t273 = icmp eq ptr %t272, null br i1 %t273, label %panic84, label %ok85 panic84: call void @finch_panic(ptr @.str.66, i64 84, ptr @.str.67) unreachable ok85: %t274 = getelementptr inbounds %S.main.Loader, ptr %t272, i32 0, i32 4 %t275 = load { ptr, i64, i64 }, ptr %t274 store { ptr, i64, i64 } %t275, ptr %a277 store { ptr, i64, i64 } { ptr @.str.68, i64 1, i64 0 }, ptr %a278 call void @finch_str_concat(ptr %a276, ptr %a277, ptr %a278) %t279 = load { ptr, i64, i64 }, ptr %a276 %t280 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t279, ptr %a282 store { ptr, i64, i64 } %t280, ptr %a283 call void @finch_str_concat(ptr %a281, ptr %a282, ptr %a283) %t284 = load { ptr, i64, i64 }, ptr %a281 store { ptr, i64, i64 } %t284, ptr %a286 store { ptr, i64, i64 } { ptr @.str.69, i64 4, i64 0 }, ptr %a287 call void @finch_str_concat(ptr %a285, ptr %a286, ptr %a287) %t288 = load { ptr, i64, i64 }, ptr %a285 ret { ptr, i64, i64 } %t288 endif83: br label %endif67 endif67: %t289 = load { ptr, i64, i64 }, ptr %a19 store { ptr, i64, i64 } %t289, ptr %a290 call void @finch_str_copy(ptr %a291, ptr %a290) %t292 = load { ptr, i64, i64 }, ptr %a291 ret { ptr, i64, i64 } %t292 } define internal void @finch.copy.arr_str(ptr %dst, ptr %src) { entry: %a5 = alloca i64, align 16 call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t1 = load ptr, ptr %dst %t2 = load ptr, ptr %src %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 %t4 = load i64, ptr %t3 store i64 0, ptr %a5 br label %n.cond107 n.cond107: %t6 = load i64, ptr %a5 %t7 = icmp slt i64 %t6, %t4 br i1 %t7, label %n.body108, label %n.end109 n.body108: %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1, i64 %t6 %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 %t6 call void @finch_str_copy(ptr %t8, ptr %t9) %t10 = load i64, ptr %a5 %t11 = add i64 %t10, 1 store i64 %t11, ptr %a5 br label %n.cond107 n.end109: ret void } define internal void @finch.copy.arr_S_ast_Type(ptr %dst, ptr %src) { entry: %a5 = alloca i64, align 16 call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) %t1 = load ptr, ptr %dst %t2 = load ptr, ptr %src %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 %t4 = load i64, ptr %t3 store i64 0, ptr %a5 br label %n.cond115 n.cond115: %t6 = load i64, ptr %a5 %t7 = icmp slt i64 %t6, %t4 br i1 %t7, label %n.body116, label %n.end117 n.body116: %t8 = getelementptr inbounds %S.ast.Type, ptr %t1, i64 %t6 %t9 = getelementptr inbounds %S.ast.Type, ptr %t2, i64 %t6 call void @finch.copy.S_ast_Type(ptr %t8, ptr %t9) %t10 = load i64, ptr %a5 %t11 = add i64 %t10, 1 store i64 %t11, ptr %a5 br label %n.cond115 n.end117: ret void } define internal void @finch.copy.S_ast_Type(ptr %dst, ptr %src) { entry: %t1 = load %S.ast.Type, ptr %src store %S.ast.Type %t1, ptr %dst %t2 = getelementptr inbounds %S.ast.Type, ptr %dst, i32 0, i32 0 %t3 = getelementptr inbounds %S.ast.Type, ptr %src, i32 0, i32 0 call void @finch_str_copy(ptr %t2, ptr %t3) %t4 = getelementptr inbounds %S.ast.Type, ptr %dst, i32 0, i32 1 %t5 = getelementptr inbounds %S.ast.Type, ptr %src, i32 0, i32 1 call void @finch.copy.arr_S_ast_Type(ptr %t4, ptr %t5) %t6 = getelementptr inbounds %S.ast.Type, ptr %dst, i32 0, i32 2 %t7 = getelementptr inbounds %S.ast.Type, ptr %src, i32 0, i32 2 call void @finch_str_copy(ptr %t6, ptr %t7) %t8 = getelementptr inbounds %S.ast.Type, ptr %dst, i32 0, i32 3 %t9 = getelementptr inbounds %S.ast.Type, ptr %src, i32 0, i32 3 call void @finch_str_copy(ptr %t8, ptr %t9) ret void } define internal void @finch.copy.S_ast_Node(ptr %dst, ptr %src) { entry: %t1 = load %S.ast.Node, ptr %src store %S.ast.Node %t1, ptr %dst %t2 = getelementptr inbounds %S.ast.Node, ptr %dst, i32 0, i32 0 %t3 = getelementptr inbounds %S.ast.Node, ptr %src, i32 0, i32 0 call void @finch_str_copy(ptr %t2, ptr %t3) %t4 = getelementptr inbounds %S.ast.Node, ptr %dst, i32 0, i32 1 %t5 = getelementptr inbounds %S.ast.Node, ptr %src, i32 0, i32 1 call void @finch_str_copy(ptr %t4, ptr %t5) %t6 = getelementptr inbounds %S.ast.Node, ptr %dst, i32 0, i32 2 %t7 = getelementptr inbounds %S.ast.Node, ptr %src, i32 0, i32 2 call void @finch_str_copy(ptr %t6, ptr %t7) %t8 = getelementptr inbounds %S.ast.Node, ptr %dst, i32 0, i32 3 %t9 = getelementptr inbounds %S.ast.Node, ptr %src, i32 0, i32 3 call void @finch.copy.arr_str(ptr %t8, ptr %t9) %t10 = getelementptr inbounds %S.ast.Node, ptr %dst, i32 0, i32 4 %t11 = getelementptr inbounds %S.ast.Node, ptr %src, i32 0, i32 4 call void @finch_str_copy(ptr %t10, ptr %t11) %t12 = getelementptr inbounds %S.ast.Node, ptr %dst, i32 0, i32 5 %t13 = getelementptr inbounds %S.ast.Node, ptr %src, i32 0, i32 5 call void @finch.copy.S_ast_Type(ptr %t12, ptr %t13) %t14 = getelementptr inbounds %S.ast.Node, ptr %dst, i32 0, i32 9 %t15 = getelementptr inbounds %S.ast.Node, ptr %src, i32 0, i32 9 call void @finch.copy.arr_S_ast_Node(ptr %t14, ptr %t15) %t16 = getelementptr inbounds %S.ast.Node, ptr %dst, i32 0, i32 10 %t17 = getelementptr inbounds %S.ast.Node, ptr %src, i32 0, i32 10 call void @finch.copy.arr_str(ptr %t16, ptr %t17) ret void } define internal void @finch.copy.arr_S_ast_Node(ptr %dst, ptr %src) { entry: %a5 = alloca i64, align 16 call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t1 = load ptr, ptr %dst %t2 = load ptr, ptr %src %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 %t4 = load i64, ptr %t3 store i64 0, ptr %a5 br label %n.cond112 n.cond112: %t6 = load i64, ptr %a5 %t7 = icmp slt i64 %t6, %t4 br i1 %t7, label %n.body113, label %n.end114 n.body113: %t8 = getelementptr inbounds %S.ast.Node, ptr %t1, i64 %t6 %t9 = getelementptr inbounds %S.ast.Node, ptr %t2, i64 %t6 call void @finch.copy.S_ast_Node(ptr %t8, ptr %t9) %t10 = load i64, ptr %a5 %t11 = add i64 %t10, 1 store i64 %t11, ptr %a5 br label %n.cond112 n.end114: ret void } define internal void @finch.copy.S_ast_Program(ptr %dst, ptr %src) { entry: %t1 = load %S.ast.Program, ptr %src store %S.ast.Program %t1, ptr %dst %t2 = getelementptr inbounds %S.ast.Program, ptr %dst, i32 0, i32 0 %t3 = getelementptr inbounds %S.ast.Program, ptr %src, i32 0, i32 0 call void @finch_str_copy(ptr %t2, ptr %t3) %t4 = getelementptr inbounds %S.ast.Program, ptr %dst, i32 0, i32 1 %t5 = getelementptr inbounds %S.ast.Program, ptr %src, i32 0, i32 1 call void @finch_str_copy(ptr %t4, ptr %t5) %t6 = getelementptr inbounds %S.ast.Program, ptr %dst, i32 0, i32 2 %t7 = getelementptr inbounds %S.ast.Program, ptr %src, i32 0, i32 2 call void @finch.copy.arr_str(ptr %t6, ptr %t7) %t8 = getelementptr inbounds %S.ast.Program, ptr %dst, i32 0, i32 3 %t9 = getelementptr inbounds %S.ast.Program, ptr %src, i32 0, i32 3 call void @finch.copy.arr_str(ptr %t8, ptr %t9) %t10 = getelementptr inbounds %S.ast.Program, ptr %dst, i32 0, i32 4 %t11 = getelementptr inbounds %S.ast.Program, ptr %src, i32 0, i32 4 call void @finch.copy.arr_str(ptr %t10, ptr %t11) %t12 = getelementptr inbounds %S.ast.Program, ptr %dst, i32 0, i32 5 %t13 = getelementptr inbounds %S.ast.Program, ptr %src, i32 0, i32 5 call void @finch.copy.arr_str(ptr %t12, ptr %t13) %t14 = getelementptr inbounds %S.ast.Program, ptr %dst, i32 0, i32 6 %t15 = getelementptr inbounds %S.ast.Program, ptr %src, i32 0, i32 6 call void @finch.copy.arr_S_ast_Node(ptr %t14, ptr %t15) %t16 = getelementptr inbounds %S.ast.Program, ptr %dst, i32 0, i32 7 %t17 = getelementptr inbounds %S.ast.Program, ptr %src, i32 0, i32 7 call void @finch.copy.arr_S_ast_Node(ptr %t16, ptr %t17) %t18 = getelementptr inbounds %S.ast.Program, ptr %dst, i32 0, i32 8 %t19 = getelementptr inbounds %S.ast.Program, ptr %src, i32 0, i32 8 call void @finch.copy.arr_S_ast_Node(ptr %t18, ptr %t19) ret void } define internal void @finch.main.load(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca i64, align 16 %a17 = alloca i64, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca i64, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca %S.ast.Program, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca { ptr, i64, i64 }, align 16 %a113 = alloca { ptr, i64, i64 }, align 16 %a114 = alloca { ptr, i64, i64 }, align 16 %a118 = alloca { ptr, i64, i64 }, align 16 %a119 = alloca { ptr, i64, i64 }, align 16 %a121 = alloca { ptr, i64, i64 }, align 16 %a127 = alloca %S.ast.Program, align 16 %a128 = alloca %S.ast.Program, align 16 %a134 = alloca i64, align 16 %a142 = alloca { ptr, i64, i64 }, align 16 %a148 = alloca i64, align 16 %a151 = alloca i64, align 16 %a156 = alloca { ptr, i64, i64 }, align 16 %a157 = alloca { ptr, i64, i64 }, align 16 %a169 = alloca { ptr, i64, i64 }, align 16 %a170 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 %t4 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t4, ptr %a5 %t6 = call i32 @finch_file_exists(ptr %a5) %t7 = icmp ne i32 %t6, 0 %t8 = xor i1 %t7, true br label %logic.from86 logic.from86: br i1 %t8, label %logic.rhs87, label %logic.end88 logic.rhs87: %t9 = load ptr, ptr %a1 %t10 = icmp eq ptr %t9, null br i1 %t10, label %panic89, label %ok90 panic89: call void @finch_panic(ptr @.str.70, i64 91, ptr @.str.71) unreachable ok90: %t11 = getelementptr inbounds %S.main.Loader, ptr %t9, i32 0, i32 6 %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t11, i32 0, i32 1 %t13 = load { ptr, i64, i64 }, ptr %a2 store i64 -1, ptr %a14 %t15 = load i64, ptr %t12 %t16 = load ptr, ptr %t11 store i64 0, ptr %a17 br label %find.cond91 find.cond91: %t18 = load i64, ptr %a17 %t19 = icmp slt i64 %t18, %t15 br i1 %t19, label %find.body92, label %find.end95 find.body92: %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t16, i64 %t18 %t21 = load { ptr, i64, i64 }, ptr %t20 store { ptr, i64, i64 } %t21, ptr %a22 store { ptr, i64, i64 } %t13, ptr %a23 %t24 = call i32 @finch_str_eq(ptr %a22, ptr %a23) %t25 = icmp ne i32 %t24, 0 br i1 %t25, label %find.hit93, label %find.next94 find.hit93: store i64 %t18, ptr %a14 br label %find.end95 find.next94: %t26 = add i64 %t18, 1 store i64 %t26, ptr %a17 br label %find.cond91 find.end95: %t27 = load i64, ptr %a14 %t28 = icmp sge i64 %t27, 0 %t29 = xor i1 %t28, true br label %logic.rend96 logic.rend96: br label %logic.end88 logic.end88: %t30 = phi i1 [ false, %logic.from86 ], [ %t29, %logic.rend96 ] br i1 %t30, label %then97, label %endif99 then97: %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 %t32 = load i64, ptr %t31 %t33 = icmp sgt i64 %t32, 0 br i1 %t33, label %then100, label %else101 then100: %t34 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } { ptr @.str.72, i64 30, i64 0 }, ptr %a36 store { ptr, i64, i64 } %t34, ptr %a37 call void @finch_str_concat(ptr %a35, ptr %a36, ptr %a37) %t38 = load { ptr, i64, i64 }, ptr %a35 store { ptr, i64, i64 } %t38, ptr %a40 store { ptr, i64, i64 } { ptr @.str.73, i64 14, i64 0 }, ptr %a41 call void @finch_str_concat(ptr %a39, ptr %a40, ptr %a41) %t42 = load { ptr, i64, i64 }, ptr %a39 %t43 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t42, ptr %a45 store { ptr, i64, i64 } %t43, ptr %a46 call void @finch_str_concat(ptr %a44, ptr %a45, ptr %a46) %t47 = load { ptr, i64, i64 }, ptr %a44 store { ptr, i64, i64 } %t47, ptr %a49 store { ptr, i64, i64 } { ptr @.str.74, i64 1, i64 0 }, ptr %a50 call void @finch_str_concat(ptr %a48, ptr %a49, ptr %a50) %t51 = load { ptr, i64, i64 }, ptr %a48 %t52 = extractvalue { ptr, i64, i64 } %t51, 1 %t53 = trunc i64 %t52 to i32 %t54 = extractvalue { ptr, i64, i64 } %t51, 0 %t55 = icmp eq ptr %t54, null %t56 = select i1 %t55, ptr @.str.75, ptr %t54 %t57 = call i32 (ptr, ...) @printf(ptr @.str.76, i32 %t53, ptr %t56) %t58 = call i32 (ptr, ...) @printf(ptr @.str.77) br label %endif102 else101: %t59 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.78, i64 19, i64 0 }, ptr %a61 store { ptr, i64, i64 } %t59, ptr %a62 call void @finch_str_concat(ptr %a60, ptr %a61, ptr %a62) %t63 = load { ptr, i64, i64 }, ptr %a60 store { ptr, i64, i64 } %t63, ptr %a65 store { ptr, i64, i64 } { ptr @.str.79, i64 1, i64 0 }, ptr %a66 call void @finch_str_concat(ptr %a64, ptr %a65, ptr %a66) %t67 = load { ptr, i64, i64 }, ptr %a64 %t68 = extractvalue { ptr, i64, i64 } %t67, 1 %t69 = trunc i64 %t68 to i32 %t70 = extractvalue { ptr, i64, i64 } %t67, 0 %t71 = icmp eq ptr %t70, null %t72 = select i1 %t71, ptr @.str.80, ptr %t70 %t73 = call i32 (ptr, ...) @printf(ptr @.str.81, i32 %t69, ptr %t72) %t74 = call i32 (ptr, ...) @printf(ptr @.str.82) br label %endif102 endif102: %t75 = trunc i64 1 to i32 %t76 = call i32 @fflush(ptr null) call void @exit(i32 %t75) br label %endif99 endif99: %t77 = load ptr, ptr %a1 %t78 = load { ptr, i64, i64 }, ptr %a2 %t79 = call { ptr, i64, i64 } @finch.main.textOfFile(ptr %t77, { ptr, i64, i64 } %t78) store { ptr, i64, i64 } %t79, ptr %a80 %t81 = load ptr, ptr %a1 %t82 = icmp eq ptr %t81, null br i1 %t82, label %panic103, label %ok104 panic103: call void @finch_panic(ptr @.str.83, i64 100, ptr @.str.84) unreachable ok104: %t83 = getelementptr inbounds %S.main.Loader, ptr %t81, i32 0, i32 1 %t84 = getelementptr inbounds { ptr, i64, i64 }, ptr %t83, i32 0, i32 1 %t85 = load i64, ptr %t84 store i64 %t85, ptr %a86 %t87 = load ptr, ptr %a1 %t88 = icmp eq ptr %t87, null br i1 %t88, label %panic105, label %ok106 panic105: call void @finch_panic(ptr @.str.85, i64 101, ptr @.str.86) unreachable ok106: %t89 = getelementptr inbounds %S.main.Loader, ptr %t87, i32 0, i32 1 %t90 = getelementptr inbounds { ptr, i64, i64 }, ptr %t89, i32 0, i32 1 %t91 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t91, ptr %a92 call void @finch_str_copy(ptr %a93, ptr %a92) %t94 = load { ptr, i64, i64 }, ptr %a93 %t95 = load i64, ptr %t90 %t96 = add i64 %t95, 1 call void @finch_arr_reserve(ptr %t89, i64 %t96, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t97 = load ptr, ptr %t89 %t98 = getelementptr inbounds { ptr, i64, i64 }, ptr %t97, i64 %t95 store { ptr, i64, i64 } %t94, ptr %t98 store i64 %t96, ptr %t90 %t99 = load { ptr, i64, i64 }, ptr %a80 %t100 = load { ptr, i64, i64 }, ptr %a2 %t101 = call { ptr, i64, i64 } @finch.lexer.lex({ ptr, i64, i64 } %t99, { ptr, i64, i64 } %t100) %t102 = load i64, ptr %a86 %t103 = load { ptr, i64, i64 }, ptr %a2 %t104 = call %S.ast.Program @finch.parser.parse({ ptr, i64, i64 } %t101, i64 %t102, { ptr, i64, i64 } %t103) store %S.ast.Program %t104, ptr %a105 %t106 = load { ptr, i64, i64 }, ptr %a3 %t107 = getelementptr inbounds %S.ast.Program, ptr %a105, i32 0, i32 0 store { ptr, i64, i64 } %t106, ptr %a108 call void @finch_str_copy(ptr %a109, ptr %a108) %t110 = load { ptr, i64, i64 }, ptr %a109 store { ptr, i64, i64 } %t110, ptr %t107 %t111 = load { ptr, i64, i64 }, ptr %a2 %t112 = getelementptr inbounds %S.ast.Program, ptr %a105, i32 0, i32 1 store { ptr, i64, i64 } %t111, ptr %a113 call void @finch_str_copy(ptr %a114, ptr %a113) %t115 = load { ptr, i64, i64 }, ptr %a114 store { ptr, i64, i64 } %t115, ptr %t112 %t116 = getelementptr inbounds %S.ast.Program, ptr %a105, i32 0, i32 2 %t117 = load { ptr, i64, i64 }, ptr %t116 store { ptr, i64, i64 } %t117, ptr %a118 call void @finch.copy.arr_str(ptr %a119, ptr %a118) %t120 = load { ptr, i64, i64 }, ptr %a119 store { ptr, i64, i64 } %t120, ptr %a121 %t122 = load ptr, ptr %a1 %t123 = icmp eq ptr %t122, null br i1 %t123, label %panic110, label %ok111 panic110: call void @finch_panic(ptr @.str.87, i64 106, ptr @.str.88) unreachable ok111: %t124 = getelementptr inbounds %S.main.Loader, ptr %t122, i32 0, i32 0 %t125 = getelementptr inbounds { ptr, i64, i64 }, ptr %t124, i32 0, i32 1 %t126 = load %S.ast.Program, ptr %a105 store %S.ast.Program %t126, ptr %a127 call void @finch.copy.S_ast_Program(ptr %a128, ptr %a127) %t129 = load %S.ast.Program, ptr %a128 %t130 = load i64, ptr %t125 %t131 = add i64 %t130, 1 call void @finch_arr_reserve(ptr %t124, i64 %t131, i64 ptrtoint (ptr getelementptr (%S.ast.Program, ptr null, i32 1) to i64)) %t132 = load ptr, ptr %t124 %t133 = getelementptr inbounds %S.ast.Program, ptr %t132, i64 %t130 store %S.ast.Program %t129, ptr %t133 store i64 %t131, ptr %t125 store i64 0, ptr %a134 br label %each.cond118 each.cond118: %t135 = getelementptr inbounds { ptr, i64, i64 }, ptr %a121, i32 0, i32 1 %t136 = load i64, ptr %t135 %t137 = load i64, ptr %a134 %t138 = icmp slt i64 %t137, %t136 br i1 %t138, label %each.body119, label %each.end121 each.body119: %t139 = load ptr, ptr %a121 %t140 = getelementptr inbounds { ptr, i64, i64 }, ptr %t139, i64 %t137 %t141 = load { ptr, i64, i64 }, ptr %t140 store { ptr, i64, i64 } %t141, ptr %a142 %t143 = load ptr, ptr %a1 %t144 = icmp eq ptr %t143, null br i1 %t144, label %panic122, label %ok123 panic122: call void @finch_panic(ptr @.str.89, i64 108, ptr @.str.90) unreachable ok123: %t145 = getelementptr inbounds %S.main.Loader, ptr %t143, i32 0, i32 2 %t146 = getelementptr inbounds { ptr, i64, i64 }, ptr %t145, i32 0, i32 1 %t147 = load { ptr, i64, i64 }, ptr %a142 store i64 -1, ptr %a148 %t149 = load i64, ptr %t146 %t150 = load ptr, ptr %t145 store i64 0, ptr %a151 br label %find.cond124 find.cond124: %t152 = load i64, ptr %a151 %t153 = icmp slt i64 %t152, %t149 br i1 %t153, label %find.body125, label %find.end128 find.body125: %t154 = getelementptr inbounds { ptr, i64, i64 }, ptr %t150, i64 %t152 %t155 = load { ptr, i64, i64 }, ptr %t154 store { ptr, i64, i64 } %t155, ptr %a156 store { ptr, i64, i64 } %t147, ptr %a157 %t158 = call i32 @finch_str_eq(ptr %a156, ptr %a157) %t159 = icmp ne i32 %t158, 0 br i1 %t159, label %find.hit126, label %find.next127 find.hit126: store i64 %t152, ptr %a148 br label %find.end128 find.next127: %t160 = add i64 %t152, 1 store i64 %t160, ptr %a151 br label %find.cond124 find.end128: %t161 = load i64, ptr %a148 %t162 = icmp sge i64 %t161, 0 %t163 = xor i1 %t162, true br i1 %t163, label %then129, label %endif131 then129: %t164 = load ptr, ptr %a1 %t165 = icmp eq ptr %t164, null br i1 %t165, label %panic132, label %ok133 panic132: call void @finch_panic(ptr @.str.91, i64 109, ptr @.str.92) unreachable ok133: %t166 = getelementptr inbounds %S.main.Loader, ptr %t164, i32 0, i32 2 %t167 = getelementptr inbounds { ptr, i64, i64 }, ptr %t166, i32 0, i32 1 %t168 = load { ptr, i64, i64 }, ptr %a142 store { ptr, i64, i64 } %t168, ptr %a169 call void @finch_str_copy(ptr %a170, ptr %a169) %t171 = load { ptr, i64, i64 }, ptr %a170 %t172 = load i64, ptr %t167 %t173 = add i64 %t172, 1 call void @finch_arr_reserve(ptr %t166, i64 %t173, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t174 = load ptr, ptr %t166 %t175 = getelementptr inbounds { ptr, i64, i64 }, ptr %t174, i64 %t172 store { ptr, i64, i64 } %t171, ptr %t175 store i64 %t173, ptr %t167 %t176 = load ptr, ptr %a1 %t177 = load ptr, ptr %a1 %t178 = load { ptr, i64, i64 }, ptr %a2 %t179 = load { ptr, i64, i64 }, ptr %a142 %t180 = call { ptr, i64, i64 } @finch.main.findModule(ptr %t177, { ptr, i64, i64 } %t178, { ptr, i64, i64 } %t179) %t181 = load { ptr, i64, i64 }, ptr %a142 call void @finch.main.load(ptr %t176, { ptr, i64, i64 } %t180, { ptr, i64, i64 } %t181) br label %endif131 endif131: br label %each.step120 each.step120: %t182 = load i64, ptr %a134 %t183 = add i64 %t182, 1 store i64 %t183, ptr %a134 br label %each.cond118 each.end121: ret void } define internal void @finch.main.usage() { entry: %t1 = extractvalue { ptr, i64, i64 } { ptr @.str.93, i64 41, i64 0 }, 1 %t2 = trunc i64 %t1 to i32 %t3 = extractvalue { ptr, i64, i64 } { ptr @.str.93, i64 41, i64 0 }, 0 %t4 = icmp eq ptr %t3, null %t5 = select i1 %t4, ptr @.str.94, ptr %t3 %t6 = call i32 (ptr, ...) @printf(ptr @.str.95, i32 %t2, ptr %t5) %t7 = call i32 (ptr, ...) @printf(ptr @.str.96) %t8 = extractvalue { ptr, i64, i64 } { ptr @.str.97, i64 6, i64 0 }, 1 %t9 = trunc i64 %t8 to i32 %t10 = extractvalue { ptr, i64, i64 } { ptr @.str.97, i64 6, i64 0 }, 0 %t11 = icmp eq ptr %t10, null %t12 = select i1 %t11, ptr @.str.98, ptr %t10 %t13 = call i32 (ptr, ...) @printf(ptr @.str.99, i32 %t9, ptr %t12) %t14 = call i32 (ptr, ...) @printf(ptr @.str.100) %t15 = extractvalue { ptr, i64, i64 } { ptr @.str.101, i64 60, i64 0 }, 1 %t16 = trunc i64 %t15 to i32 %t17 = extractvalue { ptr, i64, i64 } { ptr @.str.101, i64 60, i64 0 }, 0 %t18 = icmp eq ptr %t17, null %t19 = select i1 %t18, ptr @.str.102, ptr %t17 %t20 = call i32 (ptr, ...) @printf(ptr @.str.103, i32 %t16, ptr %t19) %t21 = call i32 (ptr, ...) @printf(ptr @.str.104) %t22 = extractvalue { ptr, i64, i64 } { ptr @.str.105, i64 52, i64 0 }, 1 %t23 = trunc i64 %t22 to i32 %t24 = extractvalue { ptr, i64, i64 } { ptr @.str.105, i64 52, i64 0 }, 0 %t25 = icmp eq ptr %t24, null %t26 = select i1 %t25, ptr @.str.106, ptr %t24 %t27 = call i32 (ptr, ...) @printf(ptr @.str.107, i32 %t23, ptr %t26) %t28 = call i32 (ptr, ...) @printf(ptr @.str.108) %t29 = extractvalue { ptr, i64, i64 } { ptr @.str.109, i64 54, i64 0 }, 1 %t30 = trunc i64 %t29 to i32 %t31 = extractvalue { ptr, i64, i64 } { ptr @.str.109, i64 54, i64 0 }, 0 %t32 = icmp eq ptr %t31, null %t33 = select i1 %t32, ptr @.str.110, ptr %t31 %t34 = call i32 (ptr, ...) @printf(ptr @.str.111, i32 %t30, ptr %t33) %t35 = call i32 (ptr, ...) @printf(ptr @.str.112) %t36 = extractvalue { ptr, i64, i64 } { ptr @.str.113, i64 53, i64 0 }, 1 %t37 = trunc i64 %t36 to i32 %t38 = extractvalue { ptr, i64, i64 } { ptr @.str.113, i64 53, i64 0 }, 0 %t39 = icmp eq ptr %t38, null %t40 = select i1 %t39, ptr @.str.114, ptr %t38 %t41 = call i32 (ptr, ...) @printf(ptr @.str.115, i32 %t37, ptr %t40) %t42 = call i32 (ptr, ...) @printf(ptr @.str.116) %t43 = extractvalue { ptr, i64, i64 } { ptr @.str.117, i64 90, i64 0 }, 1 %t44 = trunc i64 %t43 to i32 %t45 = extractvalue { ptr, i64, i64 } { ptr @.str.117, i64 90, i64 0 }, 0 %t46 = icmp eq ptr %t45, null %t47 = select i1 %t46, ptr @.str.118, ptr %t45 %t48 = call i32 (ptr, ...) @printf(ptr @.str.119, i32 %t44, ptr %t47) %t49 = call i32 (ptr, ...) @printf(ptr @.str.120) %t50 = extractvalue { ptr, i64, i64 } { ptr @.str.121, i64 8, i64 0 }, 1 %t51 = trunc i64 %t50 to i32 %t52 = extractvalue { ptr, i64, i64 } { ptr @.str.121, i64 8, i64 0 }, 0 %t53 = icmp eq ptr %t52, null %t54 = select i1 %t53, ptr @.str.122, ptr %t52 %t55 = call i32 (ptr, ...) @printf(ptr @.str.123, i32 %t51, ptr %t54) %t56 = call i32 (ptr, ...) @printf(ptr @.str.124) %t57 = extractvalue { ptr, i64, i64 } { ptr @.str.125, i64 53, i64 0 }, 1 %t58 = trunc i64 %t57 to i32 %t59 = extractvalue { ptr, i64, i64 } { ptr @.str.125, i64 53, i64 0 }, 0 %t60 = icmp eq ptr %t59, null %t61 = select i1 %t60, ptr @.str.126, ptr %t59 %t62 = call i32 (ptr, ...) @printf(ptr @.str.127, i32 %t58, ptr %t61) %t63 = call i32 (ptr, ...) @printf(ptr @.str.128) %t64 = extractvalue { ptr, i64, i64 } { ptr @.str.129, i64 76, i64 0 }, 1 %t65 = trunc i64 %t64 to i32 %t66 = extractvalue { ptr, i64, i64 } { ptr @.str.129, i64 76, i64 0 }, 0 %t67 = icmp eq ptr %t66, null %t68 = select i1 %t67, ptr @.str.130, ptr %t66 %t69 = call i32 (ptr, ...) @printf(ptr @.str.131, i32 %t65, ptr %t68) %t70 = call i32 (ptr, ...) @printf(ptr @.str.132) %t71 = extractvalue { ptr, i64, i64 } { ptr @.str.133, i64 57, i64 0 }, 1 %t72 = trunc i64 %t71 to i32 %t73 = extractvalue { ptr, i64, i64 } { ptr @.str.133, i64 57, i64 0 }, 0 %t74 = icmp eq ptr %t73, null %t75 = select i1 %t74, ptr @.str.134, ptr %t73 %t76 = call i32 (ptr, ...) @printf(ptr @.str.135, i32 %t72, ptr %t75) %t77 = call i32 (ptr, ...) @printf(ptr @.str.136) %t78 = extractvalue { ptr, i64, i64 } { ptr @.str.137, i64 66, i64 0 }, 1 %t79 = trunc i64 %t78 to i32 %t80 = extractvalue { ptr, i64, i64 } { ptr @.str.137, i64 66, i64 0 }, 0 %t81 = icmp eq ptr %t80, null %t82 = select i1 %t81, ptr @.str.138, ptr %t80 %t83 = call i32 (ptr, ...) @printf(ptr @.str.139, i32 %t79, ptr %t82) %t84 = call i32 (ptr, ...) @printf(ptr @.str.140) %t85 = extractvalue { ptr, i64, i64 } { ptr @.str.141, i64 101, i64 0 }, 1 %t86 = trunc i64 %t85 to i32 %t87 = extractvalue { ptr, i64, i64 } { ptr @.str.141, i64 101, i64 0 }, 0 %t88 = icmp eq ptr %t87, null %t89 = select i1 %t88, ptr @.str.142, ptr %t87 %t90 = call i32 (ptr, ...) @printf(ptr @.str.143, i32 %t86, ptr %t89) %t91 = call i32 (ptr, ...) @printf(ptr @.str.144) %t92 = trunc i64 1 to i32 %t93 = call i32 @fflush(ptr null) call void @exit(i32 %t92) ret void } define internal void @finch.copy.S_platform_Target(ptr %dst, ptr %src) { entry: %t1 = load %S.platform.Target, ptr %src store %S.platform.Target %t1, ptr %dst %t2 = getelementptr inbounds %S.platform.Target, ptr %dst, i32 0, i32 0 %t3 = getelementptr inbounds %S.platform.Target, ptr %src, i32 0, i32 0 call void @finch_str_copy(ptr %t2, ptr %t3) %t4 = getelementptr inbounds %S.platform.Target, ptr %dst, i32 0, i32 6 %t5 = getelementptr inbounds %S.platform.Target, ptr %src, i32 0, i32 6 call void @finch_str_copy(ptr %t4, ptr %t5) %t6 = getelementptr inbounds %S.platform.Target, ptr %dst, i32 0, i32 7 %t7 = getelementptr inbounds %S.platform.Target, ptr %src, i32 0, i32 7 call void @finch_str_copy(ptr %t6, ptr %t7) %t8 = getelementptr inbounds %S.platform.Target, ptr %dst, i32 0, i32 8 %t9 = getelementptr inbounds %S.platform.Target, ptr %src, i32 0, i32 8 call void @finch_str_copy(ptr %t8, ptr %t9) ret void } define internal i64 @finch.main.main({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a85 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca { ptr, i64, i64 }, align 16 %a104 = alloca i1, align 16 %a105 = alloca i1, align 16 %a106 = alloca i1, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca { ptr, i64, i64 }, align 16 %a110 = alloca { ptr, i64, i64 }, align 16 %a111 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 %a113 = alloca { ptr, i64, i64 }, align 16 %a114 = alloca i64, align 16 %a126 = alloca { ptr, i64, i64 }, align 16 %a127 = alloca { ptr, i64, i64 }, align 16 %a129 = alloca { ptr, i64, i64 }, align 16 %a131 = alloca { ptr, i64, i64 }, align 16 %a132 = alloca { ptr, i64, i64 }, align 16 %a141 = alloca { ptr, i64, i64 }, align 16 %a142 = alloca { ptr, i64, i64 }, align 16 %a149 = alloca { ptr, i64, i64 }, align 16 %a150 = alloca { ptr, i64, i64 }, align 16 %a160 = alloca { ptr, i64, i64 }, align 16 %a161 = alloca { ptr, i64, i64 }, align 16 %a173 = alloca { ptr, i64, i64 }, align 16 %a174 = alloca { ptr, i64, i64 }, align 16 %a179 = alloca { ptr, i64, i64 }, align 16 %a180 = alloca { ptr, i64, i64 }, align 16 %a184 = alloca { ptr, i64, i64 }, align 16 %a185 = alloca { ptr, i64, i64 }, align 16 %a190 = alloca { ptr, i64, i64 }, align 16 %a191 = alloca { ptr, i64, i64 }, align 16 %a195 = alloca { ptr, i64, i64 }, align 16 %a196 = alloca { ptr, i64, i64 }, align 16 %a214 = alloca { ptr, i64, i64 }, align 16 %a215 = alloca { ptr, i64, i64 }, align 16 %a224 = alloca { ptr, i64, i64 }, align 16 %a225 = alloca { ptr, i64, i64 }, align 16 %a226 = alloca { ptr, i64, i64 }, align 16 %a235 = alloca { ptr, i64, i64 }, align 16 %a236 = alloca { ptr, i64, i64 }, align 16 %a245 = alloca { ptr, i64, i64 }, align 16 %a246 = alloca { ptr, i64, i64 }, align 16 %a264 = alloca { ptr, i64, i64 }, align 16 %a265 = alloca { ptr, i64, i64 }, align 16 %a274 = alloca { ptr, i64, i64 }, align 16 %a275 = alloca { ptr, i64, i64 }, align 16 %a292 = alloca { ptr, i64, i64 }, align 16 %a293 = alloca { ptr, i64, i64 }, align 16 %a294 = alloca { ptr, i64, i64 }, align 16 %a295 = alloca { ptr, i64, i64 }, align 16 %a297 = alloca { ptr, i64, i64 }, align 16 %a305 = alloca { ptr, i64, i64 }, align 16 %a306 = alloca { ptr, i64, i64 }, align 16 %a319 = alloca { ptr, i64, i64 }, align 16 %a320 = alloca { ptr, i64, i64 }, align 16 %a329 = alloca { ptr, i64, i64 }, align 16 %a330 = alloca { ptr, i64, i64 }, align 16 %a334 = alloca { ptr, i64, i64 }, align 16 %a335 = alloca { ptr, i64, i64 }, align 16 %a352 = alloca { ptr, i64, i64 }, align 16 %a353 = alloca { ptr, i64, i64 }, align 16 %a358 = alloca { ptr, i64, i64 }, align 16 %a359 = alloca { ptr, i64, i64 }, align 16 %a364 = alloca { ptr, i64, i64 }, align 16 %a365 = alloca { ptr, i64, i64 }, align 16 %a375 = alloca %S.platform.Target, align 16 %a377 = alloca { ptr, i64, i64 }, align 16 %a378 = alloca { ptr, i64, i64 }, align 16 %a383 = alloca { ptr, i64, i64 }, align 16 %a384 = alloca { ptr, i64, i64 }, align 16 %a385 = alloca { ptr, i64, i64 }, align 16 %a389 = alloca { ptr, i64, i64 }, align 16 %a390 = alloca { ptr, i64, i64 }, align 16 %a391 = alloca { ptr, i64, i64 }, align 16 %a400 = alloca { ptr, i64, i64 }, align 16 %a401 = alloca { ptr, i64, i64 }, align 16 %a402 = alloca { ptr, i64, i64 }, align 16 %a407 = alloca { ptr, i64, i64 }, align 16 %a408 = alloca { ptr, i64, i64 }, align 16 %a409 = alloca { ptr, i64, i64 }, align 16 %a411 = alloca { ptr, i64, i64 }, align 16 %a412 = alloca { ptr, i64, i64 }, align 16 %a413 = alloca { ptr, i64, i64 }, align 16 %a416 = alloca { ptr, i64, i64 }, align 16 %a417 = alloca { ptr, i64, i64 }, align 16 %a418 = alloca { ptr, i64, i64 }, align 16 %a420 = alloca { ptr, i64, i64 }, align 16 %a421 = alloca { ptr, i64, i64 }, align 16 %a422 = alloca { ptr, i64, i64 }, align 16 %a429 = alloca { ptr, i64, i64 }, align 16 %a430 = alloca { ptr, i64, i64 }, align 16 %a431 = alloca { ptr, i64, i64 }, align 16 %a433 = alloca %S.main.Loader, align 16 %a448 = alloca { ptr, i64, i64 }, align 16 %a449 = alloca { ptr, i64, i64 }, align 16 %a450 = alloca { ptr, i64, i64 }, align 16 %a459 = alloca { ptr, i64, i64 }, align 16 %a460 = alloca { ptr, i64, i64 }, align 16 %a461 = alloca { ptr, i64, i64 }, align 16 %a470 = alloca { ptr, i64, i64 }, align 16 %a471 = alloca { ptr, i64, i64 }, align 16 %a472 = alloca { ptr, i64, i64 }, align 16 %a483 = alloca { ptr, i64, i64 }, align 16 %a484 = alloca i64, align 16 %a492 = alloca { ptr, i64, i64 }, align 16 %a498 = alloca { ptr, i64, i64 }, align 16 %a499 = alloca { ptr, i64, i64 }, align 16 %a500 = alloca { ptr, i64, i64 }, align 16 %a502 = alloca { ptr, i64, i64 }, align 16 %a508 = alloca { ptr, i64, i64 }, align 16 %a509 = alloca { ptr, i64, i64 }, align 16 %a515 = alloca { ptr, i64, i64 }, align 16 %a516 = alloca { ptr, i64, i64 }, align 16 %a520 = alloca { ptr, i64, i64 }, align 16 %a521 = alloca { ptr, i64, i64 }, align 16 %a527 = alloca { ptr, i64, i64 }, align 16 %a529 = alloca { ptr, i64, i64 }, align 16 %a530 = alloca { ptr, i64, i64 }, align 16 %a531 = alloca { ptr, i64, i64 }, align 16 %a532 = alloca { ptr, i64, i64 }, align 16 %a534 = alloca { ptr, i64, i64 }, align 16 %a535 = alloca i64, align 16 %a543 = alloca { ptr, i64, i64 }, align 16 %a550 = alloca { ptr, i64, i64 }, align 16 %a551 = alloca { ptr, i64, i64 }, align 16 %a560 = alloca { ptr, i64, i64 }, align 16 %a561 = alloca { ptr, i64, i64 }, align 16 %a563 = alloca { ptr, i64, i64 }, align 16 %a564 = alloca { ptr, i64, i64 }, align 16 %a566 = alloca { ptr, i64, i64 }, align 16 %a568 = alloca { ptr, i64, i64 }, align 16 %a569 = alloca { ptr, i64, i64 }, align 16 %a571 = alloca { ptr, i64, i64 }, align 16 %a573 = alloca i64, align 16 %a581 = alloca %S.ast.Program, align 16 %a585 = alloca { ptr, i64, i64 }, align 16 %a588 = alloca i64, align 16 %a591 = alloca i64, align 16 %a596 = alloca { ptr, i64, i64 }, align 16 %a597 = alloca { ptr, i64, i64 }, align 16 %a606 = alloca { ptr, i64, i64 }, align 16 %a607 = alloca { ptr, i64, i64 }, align 16 %a616 = alloca i64, align 16 %a628 = alloca i64, align 16 %a631 = alloca i64, align 16 %a636 = alloca { ptr, i64, i64 }, align 16 %a637 = alloca { ptr, i64, i64 }, align 16 %a653 = alloca { ptr, i64, i64 }, align 16 %a654 = alloca { ptr, i64, i64 }, align 16 %a669 = alloca { ptr, i64, i64 }, align 16 %a670 = alloca { ptr, i64, i64 }, align 16 %a681 = alloca { ptr, i64, i64 }, align 16 %a682 = alloca { ptr, i64, i64 }, align 16 %a692 = alloca i64, align 16 %a700 = alloca { ptr, i64, i64 }, align 16 %a702 = alloca { ptr, i64, i64 }, align 16 %a703 = alloca { ptr, i64, i64 }, align 16 %a704 = alloca { ptr, i64, i64 }, align 16 %a708 = alloca { ptr, i64, i64 }, align 16 %a709 = alloca { ptr, i64, i64 }, align 16 %a710 = alloca { ptr, i64, i64 }, align 16 %a715 = alloca { ptr, i64, i64 }, align 16 %a716 = alloca { ptr, i64, i64 }, align 16 %a717 = alloca { ptr, i64, i64 }, align 16 %a723 = alloca { ptr, i64, i64 }, align 16 %a724 = alloca { ptr, i64, i64 }, align 16 %a725 = alloca { ptr, i64, i64 }, align 16 %a728 = alloca { ptr, i64, i64 }, align 16 %a729 = alloca { ptr, i64, i64 }, align 16 %a730 = alloca { ptr, i64, i64 }, align 16 %a738 = alloca { ptr, i64, i64 }, align 16 %a739 = alloca { ptr, i64, i64 }, align 16 %a749 = alloca { ptr, i64, i64 }, align 16 %a754 = alloca { ptr, i64, i64 }, align 16 %a755 = alloca { ptr, i64, i64 }, align 16 %a769 = alloca { ptr, i64, i64 }, align 16 %a778 = alloca %S.cimport.CImports, align 16 %a787 = alloca { ptr, i64, i64 }, align 16 %a788 = alloca { ptr, i64, i64 }, align 16 %a798 = alloca { ptr, i64, i64 }, align 16 %a800 = alloca { ptr, i64, i64 }, align 16 %a801 = alloca { ptr, i64, i64 }, align 16 %a805 = alloca %S.platform.Target, align 16 %a806 = alloca %S.platform.Target, align 16 %a810 = alloca { ptr, i64, i64 }, align 16 %a812 = alloca { ptr, i64, i64 }, align 16 %a813 = alloca { ptr, i64, i64 }, align 16 %a817 = alloca { ptr, i64, i64 }, align 16 %a818 = alloca { ptr, i64, i64 }, align 16 %a834 = alloca { ptr, i64, i64 }, align 16 %a836 = alloca { ptr, i64, i64 }, align 16 %a837 = alloca { ptr, i64, i64 }, align 16 %a839 = alloca { ptr, i64, i64 }, align 16 %a850 = alloca { ptr, i64, i64 }, align 16 %a851 = alloca { ptr, i64, i64 }, align 16 %a852 = alloca { ptr, i64, i64 }, align 16 %a855 = alloca { ptr, i64, i64 }, align 16 %a866 = alloca { ptr, i64, i64 }, align 16 %a867 = alloca { ptr, i64, i64 }, align 16 %a868 = alloca { ptr, i64, i64 }, align 16 %a871 = alloca { ptr, i64, i64 }, align 16 %a882 = alloca { ptr, i64, i64 }, align 16 %a883 = alloca { ptr, i64, i64 }, align 16 %a884 = alloca { ptr, i64, i64 }, align 16 %a887 = alloca { ptr, i64, i64 }, align 16 %a891 = alloca { ptr, i64, i64 }, align 16 %a896 = alloca { ptr, i64, i64 }, align 16 %a907 = alloca { ptr, i64, i64 }, align 16 %a911 = alloca { ptr, i64, i64 }, align 16 %a912 = alloca { ptr, i64, i64 }, align 16 %a913 = alloca { ptr, i64, i64 }, align 16 %a916 = alloca { ptr, i64, i64 }, align 16 %a917 = alloca { ptr, i64, i64 }, align 16 %a921 = alloca { ptr, i64, i64 }, align 16 %a922 = alloca { ptr, i64, i64 }, align 16 %a926 = alloca { ptr, i64, i64 }, align 16 %a927 = alloca { ptr, i64, i64 }, align 16 %a931 = alloca { ptr, i64, i64 }, align 16 %a932 = alloca { ptr, i64, i64 }, align 16 %a936 = alloca { ptr, i64, i64 }, align 16 %a937 = alloca { ptr, i64, i64 }, align 16 %a943 = alloca { ptr, i64, i64 }, align 16 %a944 = alloca { ptr, i64, i64 }, align 16 %a952 = alloca { ptr, i64, i64 }, align 16 %a953 = alloca { ptr, i64, i64 }, align 16 %a956 = alloca { ptr, i64, i64 }, align 16 %a957 = alloca i64, align 16 %a965 = alloca { ptr, i64, i64 }, align 16 %a979 = alloca { ptr, i64, i64 }, align 16 %a980 = alloca { ptr, i64, i64 }, align 16 %a981 = alloca { ptr, i64, i64 }, align 16 %a983 = alloca { ptr, i64, i64 }, align 16 %a984 = alloca { ptr, i64, i64 }, align 16 %a985 = alloca { ptr, i64, i64 }, align 16 %a988 = alloca { ptr, i64, i64 }, align 16 %a989 = alloca { ptr, i64, i64 }, align 16 %a991 = alloca { ptr, i64, i64 }, align 16 %a992 = alloca { ptr, i64, i64 }, align 16 %a993 = alloca { ptr, i64, i64 }, align 16 %a995 = alloca { ptr, i64, i64 }, align 16 %a996 = alloca { ptr, i64, i64 }, align 16 %a998 = alloca i64, align 16 %a1001 = alloca { ptr, i64, i64 }, align 16 %a1002 = alloca { ptr, i64, i64 }, align 16 %a1003 = alloca { ptr, i64, i64 }, align 16 %a1005 = alloca { ptr, i64, i64 }, align 16 %a1006 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t3 = load i64, ptr %t2 %t4 = icmp eq i64 %t3, 2 br label %logic.from134 logic.from134: br i1 %t4, label %logic.rhs135, label %logic.end136 logic.rhs135: %t5 = load { ptr, i64, i64 }, ptr %a1 %t6 = extractvalue { ptr, i64, i64 } %t5, 1 %t7 = icmp uge i64 1, %t6 br i1 %t7, label %range137, label %inrange138 range137: call void @finch_panic_index(ptr @.str.145, i64 133, i64 1, i64 %t6) unreachable inrange138: %t8 = extractvalue { ptr, i64, i64 } %t5, 0 %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t8, i64 1 %t10 = load { ptr, i64, i64 }, ptr %t9 store { ptr, i64, i64 } %t10, ptr %a11 store { ptr, i64, i64 } { ptr @.str.146, i64 7, i64 0 }, ptr %a12 %t13 = call i32 @finch_str_eq(ptr %a11, ptr %a12) %t14 = icmp ne i32 %t13, 0 br label %logic.from139 logic.from139: br i1 %t14, label %logic.end141, label %logic.rhs140 logic.rhs140: %t15 = load { ptr, i64, i64 }, ptr %a1 %t16 = extractvalue { ptr, i64, i64 } %t15, 1 %t17 = icmp uge i64 1, %t16 br i1 %t17, label %range142, label %inrange143 range142: call void @finch_panic_index(ptr @.str.147, i64 133, i64 1, i64 %t16) unreachable inrange143: %t18 = extractvalue { ptr, i64, i64 } %t15, 0 %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t18, i64 1 %t20 = load { ptr, i64, i64 }, ptr %t19 store { ptr, i64, i64 } %t20, ptr %a21 store { ptr, i64, i64 } { ptr @.str.148, i64 9, i64 0 }, ptr %a22 %t23 = call i32 @finch_str_eq(ptr %a21, ptr %a22) %t24 = icmp ne i32 %t23, 0 br label %logic.rend144 logic.rend144: br label %logic.end141 logic.end141: %t25 = phi i1 [ true, %logic.from139 ], [ %t24, %logic.rend144 ] br label %logic.rend145 logic.rend145: br label %logic.end136 logic.end136: %t26 = phi i1 [ false, %logic.from134 ], [ %t25, %logic.rend145 ] br i1 %t26, label %then146, label %endif148 then146: %t27 = extractvalue { ptr, i64, i64 } { ptr @.str.149, i64 46, i64 0 }, 1 %t28 = trunc i64 %t27 to i32 %t29 = extractvalue { ptr, i64, i64 } { ptr @.str.149, i64 46, i64 0 }, 0 %t30 = icmp eq ptr %t29, null %t31 = select i1 %t30, ptr @.str.150, ptr %t29 %t32 = call i32 (ptr, ...) @printf(ptr @.str.151, i32 %t28, ptr %t31) %t33 = call i32 (ptr, ...) @printf(ptr @.str.152) ret i64 0 endif148: %t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t35 = load i64, ptr %t34 %t36 = icmp eq i64 %t35, 2 br label %logic.from149 logic.from149: br i1 %t36, label %logic.rhs150, label %logic.end151 logic.rhs150: %t37 = load { ptr, i64, i64 }, ptr %a1 %t38 = extractvalue { ptr, i64, i64 } %t37, 1 %t39 = icmp uge i64 1, %t38 br i1 %t39, label %range152, label %inrange153 range152: call void @finch_panic_index(ptr @.str.153, i64 137, i64 1, i64 %t38) unreachable inrange153: %t40 = extractvalue { ptr, i64, i64 } %t37, 0 %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %t40, i64 1 %t42 = load { ptr, i64, i64 }, ptr %t41 store { ptr, i64, i64 } %t42, ptr %a43 store { ptr, i64, i64 } { ptr @.str.154, i64 3, i64 0 }, ptr %a44 %t45 = call i32 @finch_str_eq(ptr %a43, ptr %a44) %t46 = icmp ne i32 %t45, 0 br label %logic.rend154 logic.rend154: br label %logic.end151 logic.end151: %t47 = phi i1 [ false, %logic.from149 ], [ %t46, %logic.rend154 ] br i1 %t47, label %then155, label %endif157 then155: %t48 = load { ptr, i64, i64 }, ptr %a1 %t49 = extractvalue { ptr, i64, i64 } %t48, 1 %t50 = icmp uge i64 0, %t49 br i1 %t50, label %range158, label %inrange159 range158: call void @finch_panic_index(ptr @.str.155, i64 138, i64 0, i64 %t49) unreachable inrange159: %t51 = extractvalue { ptr, i64, i64 } %t48, 0 %t52 = getelementptr inbounds { ptr, i64, i64 }, ptr %t51, i64 0 %t53 = load { ptr, i64, i64 }, ptr %t52 %t54 = call i64 @finch.lsp.run({ ptr, i64, i64 } %t53) ret i64 %t54 endif157: %t55 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t56 = load i64, ptr %t55 %t57 = icmp slt i64 %t56, 3 br i1 %t57, label %then160, label %endif162 then160: call void @finch.main.usage() br label %endif162 endif162: %t58 = load { ptr, i64, i64 }, ptr %a1 %t59 = extractvalue { ptr, i64, i64 } %t58, 1 %t60 = icmp uge i64 1, %t59 br i1 %t60, label %range163, label %inrange164 range163: call void @finch_panic_index(ptr @.str.156, i64 143, i64 1, i64 %t59) unreachable inrange164: %t61 = extractvalue { ptr, i64, i64 } %t58, 0 %t62 = getelementptr inbounds { ptr, i64, i64 }, ptr %t61, i64 1 %t63 = load { ptr, i64, i64 }, ptr %t62 store { ptr, i64, i64 } %t63, ptr %a64 call void @finch_str_copy(ptr %a65, ptr %a64) %t66 = load { ptr, i64, i64 }, ptr %a65 store { ptr, i64, i64 } %t66, ptr %a67 %t68 = load { ptr, i64, i64 }, ptr %a1 %t69 = extractvalue { ptr, i64, i64 } %t68, 1 %t70 = icmp uge i64 2, %t69 br i1 %t70, label %range165, label %inrange166 range165: call void @finch_panic_index(ptr @.str.157, i64 144, i64 2, i64 %t69) unreachable inrange166: %t71 = extractvalue { ptr, i64, i64 } %t68, 0 %t72 = getelementptr inbounds { ptr, i64, i64 }, ptr %t71, i64 2 %t73 = load { ptr, i64, i64 }, ptr %t72 store { ptr, i64, i64 } %t73, ptr %a74 call void @finch_str_copy(ptr %a75, ptr %a74) %t76 = load { ptr, i64, i64 }, ptr %a75 store { ptr, i64, i64 } %t76, ptr %a77 %t78 = load { ptr, i64, i64 }, ptr %a67 store { ptr, i64, i64 } %t78, ptr %a79 store { ptr, i64, i64 } { ptr @.str.158, i64 5, i64 0 }, ptr %a80 %t81 = call i32 @finch_str_eq(ptr %a79, ptr %a80) %t82 = icmp eq i32 %t81, 0 br label %logic.from167 logic.from167: br i1 %t82, label %logic.rhs168, label %logic.end169 logic.rhs168: %t83 = load { ptr, i64, i64 }, ptr %a67 store { ptr, i64, i64 } %t83, ptr %a84 store { ptr, i64, i64 } { ptr @.str.159, i64 3, i64 0 }, ptr %a85 %t86 = call i32 @finch_str_eq(ptr %a84, ptr %a85) %t87 = icmp eq i32 %t86, 0 br label %logic.rend170 logic.rend170: br label %logic.end169 logic.end169: %t88 = phi i1 [ false, %logic.from167 ], [ %t87, %logic.rend170 ] br label %logic.from171 logic.from171: br i1 %t88, label %logic.rhs172, label %logic.end173 logic.rhs172: %t89 = load { ptr, i64, i64 }, ptr %a67 store { ptr, i64, i64 } %t89, ptr %a90 store { ptr, i64, i64 } { ptr @.str.160, i64 2, i64 0 }, ptr %a91 %t92 = call i32 @finch_str_eq(ptr %a90, ptr %a91) %t93 = icmp eq i32 %t92, 0 br label %logic.rend174 logic.rend174: br label %logic.end173 logic.end173: %t94 = phi i1 [ false, %logic.from171 ], [ %t93, %logic.rend174 ] br label %logic.from175 logic.from175: br i1 %t94, label %logic.rhs176, label %logic.end177 logic.rhs176: %t95 = load { ptr, i64, i64 }, ptr %a67 store { ptr, i64, i64 } %t95, ptr %a96 store { ptr, i64, i64 } { ptr @.str.161, i64 5, i64 0 }, ptr %a97 %t98 = call i32 @finch_str_eq(ptr %a96, ptr %a97) %t99 = icmp eq i32 %t98, 0 br label %logic.rend178 logic.rend178: br label %logic.end177 logic.end177: %t100 = phi i1 [ false, %logic.from175 ], [ %t99, %logic.rend178 ] br i1 %t100, label %then179, label %endif181 then179: call void @finch.main.usage() br label %endif181 endif181: %t101 = load { ptr, i64, i64 }, ptr %a77 %t102 = call { ptr, i64, i64 } @finch.main.stem({ ptr, i64, i64 } %t101) store { ptr, i64, i64 } %t102, ptr %a103 store i1 false, ptr %a104 store i1 false, ptr %a105 store i1 false, ptr %a106 store { ptr, i64, i64 } { ptr @.str.162, i64 0, i64 0 }, ptr %a107 store { ptr, i64, i64 } { ptr @.str.163, i64 3, i64 0 }, ptr %a108 store { ptr, i64, i64 } zeroinitializer, ptr %a109 store { ptr, i64, i64 } zeroinitializer, ptr %a110 store { ptr, i64, i64 } zeroinitializer, ptr %a111 store { ptr, i64, i64 } zeroinitializer, ptr %a112 store { ptr, i64, i64 } zeroinitializer, ptr %a113 store i64 3, ptr %a114 br label %while.cond182 while.cond182: %t115 = load i64, ptr %a114 %t116 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t117 = load i64, ptr %t116 %t118 = icmp slt i64 %t115, %t117 br i1 %t118, label %while.body183, label %while.end184 while.body183: %t119 = load i64, ptr %a114 %t120 = load { ptr, i64, i64 }, ptr %a1 %t121 = extractvalue { ptr, i64, i64 } %t120, 1 %t122 = icmp uge i64 %t119, %t121 br i1 %t122, label %range185, label %inrange186 range185: call void @finch_panic_index(ptr @.str.164, i64 161, i64 %t119, i64 %t121) unreachable inrange186: %t123 = extractvalue { ptr, i64, i64 } %t120, 0 %t124 = getelementptr inbounds { ptr, i64, i64 }, ptr %t123, i64 %t119 %t125 = load { ptr, i64, i64 }, ptr %t124 store { ptr, i64, i64 } %t125, ptr %a126 call void @finch_str_copy(ptr %a127, ptr %a126) %t128 = load { ptr, i64, i64 }, ptr %a127 store { ptr, i64, i64 } %t128, ptr %a129 %t130 = load { ptr, i64, i64 }, ptr %a67 store { ptr, i64, i64 } %t130, ptr %a131 store { ptr, i64, i64 } { ptr @.str.165, i64 3, i64 0 }, ptr %a132 %t133 = call i32 @finch_str_eq(ptr %a131, ptr %a132) %t134 = icmp ne i32 %t133, 0 br label %logic.from187 logic.from187: br i1 %t134, label %logic.rhs188, label %logic.end189 logic.rhs188: %t135 = getelementptr inbounds { ptr, i64, i64 }, ptr %a113, i32 0, i32 1 %t136 = load i64, ptr %t135 %t137 = icmp sgt i64 %t136, 0 br label %logic.rend190 logic.rend190: br label %logic.end189 logic.end189: %t138 = phi i1 [ false, %logic.from187 ], [ %t137, %logic.rend190 ] br i1 %t138, label %then191, label %else192 then191: %t139 = getelementptr inbounds { ptr, i64, i64 }, ptr %a113, i32 0, i32 1 %t140 = load { ptr, i64, i64 }, ptr %a129 store { ptr, i64, i64 } %t140, ptr %a141 call void @finch_str_copy(ptr %a142, ptr %a141) %t143 = load { ptr, i64, i64 }, ptr %a142 %t144 = load i64, ptr %t139 %t145 = add i64 %t144, 1 call void @finch_arr_reserve(ptr %a113, i64 %t145, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t146 = load ptr, ptr %a113 %t147 = getelementptr inbounds { ptr, i64, i64 }, ptr %t146, i64 %t144 store { ptr, i64, i64 } %t143, ptr %t147 store i64 %t145, ptr %t139 br label %endif193 else192: %t148 = load { ptr, i64, i64 }, ptr %a129 store { ptr, i64, i64 } %t148, ptr %a149 store { ptr, i64, i64 } { ptr @.str.166, i64 2, i64 0 }, ptr %a150 %t151 = call i32 @finch_str_eq(ptr %a149, ptr %a150) %t152 = icmp ne i32 %t151, 0 br label %logic.from194 logic.from194: br i1 %t152, label %logic.rhs195, label %logic.end196 logic.rhs195: %t153 = load i64, ptr %a114 %t154 = add i64 %t153, 1 %t155 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t156 = load i64, ptr %t155 %t157 = icmp slt i64 %t154, %t156 br label %logic.rend197 logic.rend197: br label %logic.end196 logic.end196: %t158 = phi i1 [ false, %logic.from194 ], [ %t157, %logic.rend197 ] br label %logic.from198 logic.from198: br i1 %t158, label %logic.rhs199, label %logic.end200 logic.rhs199: %t159 = load { ptr, i64, i64 }, ptr %a67 store { ptr, i64, i64 } %t159, ptr %a160 store { ptr, i64, i64 } { ptr @.str.167, i64 5, i64 0 }, ptr %a161 %t162 = call i32 @finch_str_eq(ptr %a160, ptr %a161) %t163 = icmp ne i32 %t162, 0 br label %logic.rend201 logic.rend201: br label %logic.end200 logic.end200: %t164 = phi i1 [ false, %logic.from198 ], [ %t163, %logic.rend201 ] br i1 %t164, label %then202, label %else203 then202: %t165 = load i64, ptr %a114 %t166 = add i64 %t165, 1 %t167 = load { ptr, i64, i64 }, ptr %a1 %t168 = extractvalue { ptr, i64, i64 } %t167, 1 %t169 = icmp uge i64 %t166, %t168 br i1 %t169, label %range205, label %inrange206 range205: call void @finch_panic_index(ptr @.str.168, i64 165, i64 %t166, i64 %t168) unreachable inrange206: %t170 = extractvalue { ptr, i64, i64 } %t167, 0 %t171 = getelementptr inbounds { ptr, i64, i64 }, ptr %t170, i64 %t166 %t172 = load { ptr, i64, i64 }, ptr %t171 store { ptr, i64, i64 } %t172, ptr %a173 call void @finch_str_copy(ptr %a174, ptr %a173) %t175 = load { ptr, i64, i64 }, ptr %a174 store { ptr, i64, i64 } %t175, ptr %a103 store i1 true, ptr %a104 %t176 = load i64, ptr %a114 %t177 = add i64 %t176, 1 store i64 %t177, ptr %a114 br label %endif204 else203: %t178 = load { ptr, i64, i64 }, ptr %a129 store { ptr, i64, i64 } %t178, ptr %a179 store { ptr, i64, i64 } { ptr @.str.169, i64 8, i64 0 }, ptr %a180 %t181 = call i32 @finch_str_eq(ptr %a179, ptr %a180) %t182 = icmp ne i32 %t181, 0 br label %logic.from207 logic.from207: br i1 %t182, label %logic.rhs208, label %logic.end209 logic.rhs208: %t183 = load { ptr, i64, i64 }, ptr %a67 store { ptr, i64, i64 } %t183, ptr %a184 store { ptr, i64, i64 } { ptr @.str.170, i64 5, i64 0 }, ptr %a185 %t186 = call i32 @finch_str_eq(ptr %a184, ptr %a185) %t187 = icmp ne i32 %t186, 0 br label %logic.rend210 logic.rend210: br label %logic.end209 logic.end209: %t188 = phi i1 [ false, %logic.from207 ], [ %t187, %logic.rend210 ] br i1 %t188, label %then211, label %else212 then211: store i1 true, ptr %a105 br label %endif213 else212: %t189 = load { ptr, i64, i64 }, ptr %a129 store { ptr, i64, i64 } %t189, ptr %a190 store { ptr, i64, i64 } { ptr @.str.171, i64 3, i64 0 }, ptr %a191 %t192 = call i32 @finch_str_eq(ptr %a190, ptr %a191) %t193 = icmp ne i32 %t192, 0 br i1 %t193, label %then214, label %else215 then214: store { ptr, i64, i64 } { ptr @.str.172, i64 3, i64 0 }, ptr %a108 br label %endif216 else215: %t194 = load { ptr, i64, i64 }, ptr %a129 store { ptr, i64, i64 } %t194, ptr %a195 store { ptr, i64, i64 } { ptr @.str.173, i64 2, i64 0 }, ptr %a196 %t197 = call i32 @finch_str_eq(ptr %a195, ptr %a196) %t198 = icmp ne i32 %t197, 0 br label %logic.from217 logic.from217: br i1 %t198, label %logic.rhs218, label %logic.end219 logic.rhs218: %t199 = load i64, ptr %a114 %t200 = add i64 %t199, 1 %t201 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t202 = load i64, ptr %t201 %t203 = icmp slt i64 %t200, %t202 br label %logic.rend220 logic.rend220: br label %logic.end219 logic.end219: %t204 = phi i1 [ false, %logic.from217 ], [ %t203, %logic.rend220 ] br i1 %t204, label %then221, label %else222 then221: %t205 = getelementptr inbounds { ptr, i64, i64 }, ptr %a109, i32 0, i32 1 %t206 = load i64, ptr %a114 %t207 = add i64 %t206, 1 %t208 = load { ptr, i64, i64 }, ptr %a1 %t209 = extractvalue { ptr, i64, i64 } %t208, 1 %t210 = icmp uge i64 %t207, %t209 br i1 %t210, label %range224, label %inrange225 range224: call void @finch_panic_index(ptr @.str.174, i64 173, i64 %t207, i64 %t209) unreachable inrange225: %t211 = extractvalue { ptr, i64, i64 } %t208, 0 %t212 = getelementptr inbounds { ptr, i64, i64 }, ptr %t211, i64 %t207 %t213 = load { ptr, i64, i64 }, ptr %t212 store { ptr, i64, i64 } %t213, ptr %a214 call void @finch_str_copy(ptr %a215, ptr %a214) %t216 = load { ptr, i64, i64 }, ptr %a215 %t217 = load i64, ptr %t205 %t218 = add i64 %t217, 1 call void @finch_arr_reserve(ptr %a109, i64 %t218, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t219 = load ptr, ptr %a109 %t220 = getelementptr inbounds { ptr, i64, i64 }, ptr %t219, i64 %t217 store { ptr, i64, i64 } %t216, ptr %t220 store i64 %t218, ptr %t205 %t221 = load i64, ptr %a114 %t222 = add i64 %t221, 1 store i64 %t222, ptr %a114 br label %endif223 else222: %t223 = load { ptr, i64, i64 }, ptr %a129 store { ptr, i64, i64 } %t223, ptr %a224 store { ptr, i64, i64 } { ptr @.str.176, i64 2, i64 0 }, ptr %a226 %t227 = call i32 @finch_str_starts(ptr %a224, ptr %a226) %t228 = icmp ne i32 %t227, 0 br label %logic.from226 logic.from226: br i1 %t228, label %logic.rhs227, label %logic.end228 logic.rhs227: %t229 = getelementptr inbounds { ptr, i64, i64 }, ptr %a129, i32 0, i32 1 %t230 = load i64, ptr %t229 %t231 = icmp sgt i64 %t230, 2 br label %logic.rend229 logic.rend229: br label %logic.end228 logic.end228: %t232 = phi i1 [ false, %logic.from226 ], [ %t231, %logic.rend229 ] br i1 %t232, label %then230, label %else231 then230: %t233 = getelementptr inbounds { ptr, i64, i64 }, ptr %a109, i32 0, i32 1 %t234 = load { ptr, i64, i64 }, ptr %a129 store { ptr, i64, i64 } %t234, ptr %a235 %t237 = getelementptr inbounds { ptr, i64, i64 }, ptr %a129, i32 0, i32 1 %t238 = load i64, ptr %t237 call void @finch_str_sub(ptr %a236, ptr %a235, i64 2, i64 %t238, ptr @.str.177, i64 176) %t239 = load { ptr, i64, i64 }, ptr %a236 %t240 = load i64, ptr %t233 %t241 = add i64 %t240, 1 call void @finch_arr_reserve(ptr %a109, i64 %t241, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t242 = load ptr, ptr %a109 %t243 = getelementptr inbounds { ptr, i64, i64 }, ptr %t242, i64 %t240 store { ptr, i64, i64 } %t239, ptr %t243 store i64 %t241, ptr %t233 br label %endif232 else231: %t244 = load { ptr, i64, i64 }, ptr %a129 store { ptr, i64, i64 } %t244, ptr %a245 store { ptr, i64, i64 } { ptr @.str.178, i64 2, i64 0 }, ptr %a246 %t247 = call i32 @finch_str_eq(ptr %a245, ptr %a246) %t248 = icmp ne i32 %t247, 0 br label %logic.from233 logic.from233: br i1 %t248, label %logic.rhs234, label %logic.end235 logic.rhs234: %t249 = load i64, ptr %a114 %t250 = add i64 %t249, 1 %t251 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t252 = load i64, ptr %t251 %t253 = icmp slt i64 %t250, %t252 br label %logic.rend236 logic.rend236: br label %logic.end235 logic.end235: %t254 = phi i1 [ false, %logic.from233 ], [ %t253, %logic.rend236 ] br i1 %t254, label %then237, label %else238 then237: %t255 = getelementptr inbounds { ptr, i64, i64 }, ptr %a110, i32 0, i32 1 %t256 = load i64, ptr %a114 %t257 = add i64 %t256, 1 %t258 = load { ptr, i64, i64 }, ptr %a1 %t259 = extractvalue { ptr, i64, i64 } %t258, 1 %t260 = icmp uge i64 %t257, %t259 br i1 %t260, label %range240, label %inrange241 range240: call void @finch_panic_index(ptr @.str.179, i64 178, i64 %t257, i64 %t259) unreachable inrange241: %t261 = extractvalue { ptr, i64, i64 } %t258, 0 %t262 = getelementptr inbounds { ptr, i64, i64 }, ptr %t261, i64 %t257 %t263 = load { ptr, i64, i64 }, ptr %t262 store { ptr, i64, i64 } %t263, ptr %a264 call void @finch_str_copy(ptr %a265, ptr %a264) %t266 = load { ptr, i64, i64 }, ptr %a265 %t267 = load i64, ptr %t255 %t268 = add i64 %t267, 1 call void @finch_arr_reserve(ptr %a110, i64 %t268, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t269 = load ptr, ptr %a110 %t270 = getelementptr inbounds { ptr, i64, i64 }, ptr %t269, i64 %t267 store { ptr, i64, i64 } %t266, ptr %t270 store i64 %t268, ptr %t255 %t271 = load i64, ptr %a114 %t272 = add i64 %t271, 1 store i64 %t272, ptr %a114 br label %endif239 else238: %t273 = load { ptr, i64, i64 }, ptr %a129 store { ptr, i64, i64 } %t273, ptr %a274 store { ptr, i64, i64 } { ptr @.str.180, i64 9, i64 0 }, ptr %a275 %t276 = call i32 @finch_str_eq(ptr %a274, ptr %a275) %t277 = icmp ne i32 %t276, 0 br label %logic.from242 logic.from242: br i1 %t277, label %logic.rhs243, label %logic.end244 logic.rhs243: %t278 = load i64, ptr %a114 %t279 = add i64 %t278, 1 %t280 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t281 = load i64, ptr %t280 %t282 = icmp slt i64 %t279, %t281 br label %logic.rend245 logic.rend245: br label %logic.end244 logic.end244: %t283 = phi i1 [ false, %logic.from242 ], [ %t282, %logic.rend245 ] br i1 %t283, label %then246, label %else247 then246: %t284 = load i64, ptr %a114 %t285 = add i64 %t284, 1 %t286 = load { ptr, i64, i64 }, ptr %a1 %t287 = extractvalue { ptr, i64, i64 } %t286, 1 %t288 = icmp uge i64 %t285, %t287 br i1 %t288, label %range249, label %inrange250 range249: call void @finch_panic_index(ptr @.str.181, i64 181, i64 %t285, i64 %t287) unreachable inrange250: %t289 = extractvalue { ptr, i64, i64 } %t286, 0 %t290 = getelementptr inbounds { ptr, i64, i64 }, ptr %t289, i64 %t285 %t291 = load { ptr, i64, i64 }, ptr %t290 store { ptr, i64, i64 } %t291, ptr %a292 store { ptr, i64, i64 } { ptr @.str.183, i64 1, i64 0 }, ptr %a294 call void @finch_str_split(ptr %a295, ptr %a292, ptr %a294) %t296 = load { ptr, i64, i64 }, ptr %a295 store { ptr, i64, i64 } %t296, ptr %a297 %t298 = getelementptr inbounds { ptr, i64, i64 }, ptr %a111, i32 0, i32 1 %t299 = load { ptr, i64, i64 }, ptr %a297 %t300 = extractvalue { ptr, i64, i64 } %t299, 1 %t301 = icmp uge i64 0, %t300 br i1 %t301, label %range251, label %inrange252 range251: call void @finch_panic_index(ptr @.str.184, i64 182, i64 0, i64 %t300) unreachable inrange252: %t302 = extractvalue { ptr, i64, i64 } %t299, 0 %t303 = getelementptr inbounds { ptr, i64, i64 }, ptr %t302, i64 0 %t304 = load { ptr, i64, i64 }, ptr %t303 store { ptr, i64, i64 } %t304, ptr %a305 call void @finch_str_copy(ptr %a306, ptr %a305) %t307 = load { ptr, i64, i64 }, ptr %a306 %t308 = load i64, ptr %t298 %t309 = add i64 %t308, 1 call void @finch_arr_reserve(ptr %a111, i64 %t309, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t310 = load ptr, ptr %a111 %t311 = getelementptr inbounds { ptr, i64, i64 }, ptr %t310, i64 %t308 store { ptr, i64, i64 } %t307, ptr %t311 store i64 %t309, ptr %t298 %t312 = getelementptr inbounds { ptr, i64, i64 }, ptr %a112, i32 0, i32 1 %t313 = load { ptr, i64, i64 }, ptr %a297 %t314 = extractvalue { ptr, i64, i64 } %t313, 1 %t315 = icmp uge i64 1, %t314 br i1 %t315, label %range253, label %inrange254 range253: call void @finch_panic_index(ptr @.str.185, i64 183, i64 1, i64 %t314) unreachable inrange254: %t316 = extractvalue { ptr, i64, i64 } %t313, 0 %t317 = getelementptr inbounds { ptr, i64, i64 }, ptr %t316, i64 1 %t318 = load { ptr, i64, i64 }, ptr %t317 store { ptr, i64, i64 } %t318, ptr %a319 call void @finch_str_copy(ptr %a320, ptr %a319) %t321 = load { ptr, i64, i64 }, ptr %a320 %t322 = load i64, ptr %t312 %t323 = add i64 %t322, 1 call void @finch_arr_reserve(ptr %a112, i64 %t323, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t324 = load ptr, ptr %a112 %t325 = getelementptr inbounds { ptr, i64, i64 }, ptr %t324, i64 %t322 store { ptr, i64, i64 } %t321, ptr %t325 store i64 %t323, ptr %t312 %t326 = load i64, ptr %a114 %t327 = add i64 %t326, 1 store i64 %t327, ptr %a114 br label %endif248 else247: %t328 = load { ptr, i64, i64 }, ptr %a129 store { ptr, i64, i64 } %t328, ptr %a329 store { ptr, i64, i64 } { ptr @.str.186, i64 2, i64 0 }, ptr %a330 %t331 = call i32 @finch_str_eq(ptr %a329, ptr %a330) %t332 = icmp ne i32 %t331, 0 br i1 %t332, label %then255, label %else256 then255: store i1 true, ptr %a106 br label %endif257 else256: %t333 = load { ptr, i64, i64 }, ptr %a129 store { ptr, i64, i64 } %t333, ptr %a334 store { ptr, i64, i64 } { ptr @.str.187, i64 8, i64 0 }, ptr %a335 %t336 = call i32 @finch_str_eq(ptr %a334, ptr %a335) %t337 = icmp ne i32 %t336, 0 br label %logic.from258 logic.from258: br i1 %t337, label %logic.rhs259, label %logic.end260 logic.rhs259: %t338 = load i64, ptr %a114 %t339 = add i64 %t338, 1 %t340 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t341 = load i64, ptr %t340 %t342 = icmp slt i64 %t339, %t341 br label %logic.rend261 logic.rend261: br label %logic.end260 logic.end260: %t343 = phi i1 [ false, %logic.from258 ], [ %t342, %logic.rend261 ] br i1 %t343, label %then262, label %else263 then262: %t344 = load i64, ptr %a114 %t345 = add i64 %t344, 1 %t346 = load { ptr, i64, i64 }, ptr %a1 %t347 = extractvalue { ptr, i64, i64 } %t346, 1 %t348 = icmp uge i64 %t345, %t347 br i1 %t348, label %range265, label %inrange266 range265: call void @finch_panic_index(ptr @.str.188, i64 188, i64 %t345, i64 %t347) unreachable inrange266: %t349 = extractvalue { ptr, i64, i64 } %t346, 0 %t350 = getelementptr inbounds { ptr, i64, i64 }, ptr %t349, i64 %t345 %t351 = load { ptr, i64, i64 }, ptr %t350 store { ptr, i64, i64 } %t351, ptr %a352 call void @finch_str_copy(ptr %a353, ptr %a352) %t354 = load { ptr, i64, i64 }, ptr %a353 store { ptr, i64, i64 } %t354, ptr %a107 %t355 = load i64, ptr %a114 %t356 = add i64 %t355, 1 store i64 %t356, ptr %a114 br label %endif264 else263: %t357 = load { ptr, i64, i64 }, ptr %a67 store { ptr, i64, i64 } %t357, ptr %a358 store { ptr, i64, i64 } { ptr @.str.189, i64 3, i64 0 }, ptr %a359 %t360 = call i32 @finch_str_eq(ptr %a358, ptr %a359) %t361 = icmp ne i32 %t360, 0 br i1 %t361, label %then267, label %else268 then267: %t362 = getelementptr inbounds { ptr, i64, i64 }, ptr %a113, i32 0, i32 1 %t363 = load { ptr, i64, i64 }, ptr %a129 store { ptr, i64, i64 } %t363, ptr %a364 call void @finch_str_copy(ptr %a365, ptr %a364) %t366 = load { ptr, i64, i64 }, ptr %a365 %t367 = load i64, ptr %t362 %t368 = add i64 %t367, 1 call void @finch_arr_reserve(ptr %a113, i64 %t368, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t369 = load ptr, ptr %a113 %t370 = getelementptr inbounds { ptr, i64, i64 }, ptr %t369, i64 %t367 store { ptr, i64, i64 } %t366, ptr %t370 store i64 %t368, ptr %t362 br label %endif269 else268: call void @finch.main.usage() br label %endif269 endif269: br label %endif264 endif264: br label %endif257 endif257: br label %endif248 endif248: br label %endif239 endif239: br label %endif232 endif232: br label %endif223 endif223: br label %endif216 endif216: br label %endif213 endif213: br label %endif204 endif204: br label %endif193 endif193: %t371 = load i64, ptr %a114 %t372 = add i64 %t371, 1 store i64 %t372, ptr %a114 br label %while.cond182 while.end184: %t373 = load { ptr, i64, i64 }, ptr %a107 %t374 = call %S.platform.Target @finch.platform.select({ ptr, i64, i64 } %t373) store %S.platform.Target %t374, ptr %a375 %t376 = load { ptr, i64, i64 }, ptr %a67 store { ptr, i64, i64 } %t376, ptr %a377 store { ptr, i64, i64 } { ptr @.str.190, i64 3, i64 0 }, ptr %a378 %t379 = call i32 @finch_str_eq(ptr %a377, ptr %a378) %t380 = icmp ne i32 %t379, 0 br i1 %t380, label %then270, label %else271 then270: %t381 = load { ptr, i64, i64 }, ptr %a77 %t382 = call { ptr, i64, i64 } @finch.main.stem({ ptr, i64, i64 } %t381) store { ptr, i64, i64 } { ptr @.str.191, i64 15, i64 0 }, ptr %a384 store { ptr, i64, i64 } %t382, ptr %a385 call void @finch_str_concat(ptr %a383, ptr %a384, ptr %a385) %t386 = load { ptr, i64, i64 }, ptr %a383 %t387 = getelementptr inbounds %S.platform.Target, ptr %a375, i32 0, i32 6 %t388 = load { ptr, i64, i64 }, ptr %t387 store { ptr, i64, i64 } %t386, ptr %a390 store { ptr, i64, i64 } %t388, ptr %a391 call void @finch_str_concat(ptr %a389, ptr %a390, ptr %a391) %t392 = load { ptr, i64, i64 }, ptr %a389 store { ptr, i64, i64 } %t392, ptr %a103 br label %endif272 else271: %t393 = load i1, ptr %a105 br label %logic.from273 logic.from273: br i1 %t393, label %logic.rhs274, label %logic.end275 logic.rhs274: %t394 = load i1, ptr %a104 %t395 = xor i1 %t394, true br label %logic.rend276 logic.rend276: br label %logic.end275 logic.end275: %t396 = phi i1 [ false, %logic.from273 ], [ %t395, %logic.rend276 ] br i1 %t396, label %then277, label %else278 then277: %t397 = getelementptr inbounds %S.platform.Target, ptr %a375, i32 0, i32 1 %t398 = load i1, ptr %t397 br i1 %t398, label %then280, label %else281 then280: %t399 = load { ptr, i64, i64 }, ptr %a103 store { ptr, i64, i64 } %t399, ptr %a401 store { ptr, i64, i64 } { ptr @.str.192, i64 4, i64 0 }, ptr %a402 call void @finch_str_concat(ptr %a400, ptr %a401, ptr %a402) %t403 = load { ptr, i64, i64 }, ptr %a400 store { ptr, i64, i64 } %t403, ptr %a103 br label %endif282 else281: %t404 = getelementptr inbounds %S.platform.Target, ptr %a375, i32 0, i32 3 %t405 = load i1, ptr %t404 br i1 %t405, label %then283, label %else284 then283: %t406 = load { ptr, i64, i64 }, ptr %a103 store { ptr, i64, i64 } { ptr @.str.193, i64 3, i64 0 }, ptr %a408 store { ptr, i64, i64 } %t406, ptr %a409 call void @finch_str_concat(ptr %a407, ptr %a408, ptr %a409) %t410 = load { ptr, i64, i64 }, ptr %a407 store { ptr, i64, i64 } %t410, ptr %a412 store { ptr, i64, i64 } { ptr @.str.194, i64 6, i64 0 }, ptr %a413 call void @finch_str_concat(ptr %a411, ptr %a412, ptr %a413) %t414 = load { ptr, i64, i64 }, ptr %a411 store { ptr, i64, i64 } %t414, ptr %a103 br label %endif285 else284: %t415 = load { ptr, i64, i64 }, ptr %a103 store { ptr, i64, i64 } { ptr @.str.195, i64 3, i64 0 }, ptr %a417 store { ptr, i64, i64 } %t415, ptr %a418 call void @finch_str_concat(ptr %a416, ptr %a417, ptr %a418) %t419 = load { ptr, i64, i64 }, ptr %a416 store { ptr, i64, i64 } %t419, ptr %a421 store { ptr, i64, i64 } { ptr @.str.196, i64 3, i64 0 }, ptr %a422 call void @finch_str_concat(ptr %a420, ptr %a421, ptr %a422) %t423 = load { ptr, i64, i64 }, ptr %a420 store { ptr, i64, i64 } %t423, ptr %a103 br label %endif285 endif285: br label %endif282 endif282: br label %endif279 else278: %t424 = load i1, ptr %a104 %t425 = xor i1 %t424, true br i1 %t425, label %then286, label %endif288 then286: %t426 = load { ptr, i64, i64 }, ptr %a103 %t427 = getelementptr inbounds %S.platform.Target, ptr %a375, i32 0, i32 6 %t428 = load { ptr, i64, i64 }, ptr %t427 store { ptr, i64, i64 } %t426, ptr %a430 store { ptr, i64, i64 } %t428, ptr %a431 call void @finch_str_concat(ptr %a429, ptr %a430, ptr %a431) %t432 = load { ptr, i64, i64 }, ptr %a429 store { ptr, i64, i64 } %t432, ptr %a103 br label %endif288 endif288: br label %endif279 endif279: br label %endif272 endif272: store %S.main.Loader zeroinitializer, ptr %a433 %t434 = getelementptr inbounds %S.main.Loader, ptr %a433, i32 0, i32 3 store { ptr, i64, i64 } { ptr @.str.197, i64 5, i64 0 }, ptr %t434 %t435 = getelementptr inbounds %S.platform.Target, ptr %a375, i32 0, i32 1 %t436 = load i1, ptr %t435 br i1 %t436, label %then289, label %else290 then289: %t437 = getelementptr inbounds %S.main.Loader, ptr %a433, i32 0, i32 3 store { ptr, i64, i64 } { ptr @.str.198, i64 7, i64 0 }, ptr %t437 br label %endif291 else290: %t438 = getelementptr inbounds %S.platform.Target, ptr %a375, i32 0, i32 3 %t439 = load i1, ptr %t438 br i1 %t439, label %then292, label %endif294 then292: %t440 = getelementptr inbounds %S.main.Loader, ptr %a433, i32 0, i32 3 store { ptr, i64, i64 } { ptr @.str.199, i64 5, i64 0 }, ptr %t440 br label %endif294 endif294: br label %endif291 endif291: %t441 = load { ptr, i64, i64 }, ptr %a1 %t442 = extractvalue { ptr, i64, i64 } %t441, 1 %t443 = icmp uge i64 0, %t442 br i1 %t443, label %range295, label %inrange296 range295: call void @finch_panic_index(ptr @.str.200, i64 219, i64 0, i64 %t442) unreachable inrange296: %t444 = extractvalue { ptr, i64, i64 } %t441, 0 %t445 = getelementptr inbounds { ptr, i64, i64 }, ptr %t444, i64 0 %t446 = load { ptr, i64, i64 }, ptr %t445 %t447 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t446) store { ptr, i64, i64 } %t447, ptr %a449 store { ptr, i64, i64 } { ptr @.str.201, i64 7, i64 0 }, ptr %a450 call void @finch_str_concat(ptr %a448, ptr %a449, ptr %a450) %t451 = load { ptr, i64, i64 }, ptr %a448 %t452 = load { ptr, i64, i64 }, ptr %a1 %t453 = extractvalue { ptr, i64, i64 } %t452, 1 %t454 = icmp uge i64 0, %t453 br i1 %t454, label %range297, label %inrange298 range297: call void @finch_panic_index(ptr @.str.202, i64 219, i64 0, i64 %t453) unreachable inrange298: %t455 = extractvalue { ptr, i64, i64 } %t452, 0 %t456 = getelementptr inbounds { ptr, i64, i64 }, ptr %t455, i64 0 %t457 = load { ptr, i64, i64 }, ptr %t456 %t458 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t457) store { ptr, i64, i64 } %t458, ptr %a460 store { ptr, i64, i64 } { ptr @.str.203, i64 4, i64 0 }, ptr %a461 call void @finch_str_concat(ptr %a459, ptr %a460, ptr %a461) %t462 = load { ptr, i64, i64 }, ptr %a459 %t463 = load { ptr, i64, i64 }, ptr %a1 %t464 = extractvalue { ptr, i64, i64 } %t463, 1 %t465 = icmp uge i64 0, %t464 br i1 %t465, label %range299, label %inrange300 range299: call void @finch_panic_index(ptr @.str.204, i64 219, i64 0, i64 %t464) unreachable inrange300: %t466 = extractvalue { ptr, i64, i64 } %t463, 0 %t467 = getelementptr inbounds { ptr, i64, i64 }, ptr %t466, i64 0 %t468 = load { ptr, i64, i64 }, ptr %t467 %t469 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t468) store { ptr, i64, i64 } %t469, ptr %a471 store { ptr, i64, i64 } { ptr @.str.205, i64 19, i64 0 }, ptr %a472 call void @finch_str_concat(ptr %a470, ptr %a471, ptr %a472) %t473 = load { ptr, i64, i64 }, ptr %a470 %t474 = mul i64 4, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t475 = call ptr @finch_alloc(i64 %t474) %t476 = getelementptr inbounds { ptr, i64, i64 }, ptr %t475, i64 0 store { ptr, i64, i64 } %t451, ptr %t476 %t477 = getelementptr inbounds { ptr, i64, i64 }, ptr %t475, i64 1 store { ptr, i64, i64 } %t462, ptr %t477 %t478 = getelementptr inbounds { ptr, i64, i64 }, ptr %t475, i64 2 store { ptr, i64, i64 } %t473, ptr %t478 %t479 = getelementptr inbounds { ptr, i64, i64 }, ptr %t475, i64 3 store { ptr, i64, i64 } { ptr @.str.206, i64 3, i64 0 }, ptr %t479 %t480 = insertvalue { ptr, i64, i64 } undef, ptr %t475, 0 %t481 = insertvalue { ptr, i64, i64 } %t480, i64 4, 1 %t482 = insertvalue { ptr, i64, i64 } %t481, i64 4, 2 store { ptr, i64, i64 } %t482, ptr %a483 store i64 0, ptr %a484 br label %each.cond301 each.cond301: %t485 = getelementptr inbounds { ptr, i64, i64 }, ptr %a483, i32 0, i32 1 %t486 = load i64, ptr %t485 %t487 = load i64, ptr %a484 %t488 = icmp slt i64 %t487, %t486 br i1 %t488, label %each.body302, label %each.end304 each.body302: %t489 = load ptr, ptr %a483 %t490 = getelementptr inbounds { ptr, i64, i64 }, ptr %t489, i64 %t487 %t491 = load { ptr, i64, i64 }, ptr %t490 store { ptr, i64, i64 } %t491, ptr %a492 %t493 = getelementptr inbounds %S.main.Loader, ptr %a433, i32 0, i32 4 %t494 = getelementptr inbounds { ptr, i64, i64 }, ptr %t493, i32 0, i32 1 %t495 = load i64, ptr %t494 %t496 = icmp eq i64 %t495, 0 br label %logic.from305 logic.from305: br i1 %t496, label %logic.rhs306, label %logic.end307 logic.rhs306: %t497 = load { ptr, i64, i64 }, ptr %a492 store { ptr, i64, i64 } %t497, ptr %a499 store { ptr, i64, i64 } { ptr @.str.207, i64 9, i64 0 }, ptr %a500 call void @finch_str_concat(ptr %a498, ptr %a499, ptr %a500) %t501 = load { ptr, i64, i64 }, ptr %a498 store { ptr, i64, i64 } %t501, ptr %a502 %t503 = call i32 @finch_file_exists(ptr %a502) %t504 = icmp ne i32 %t503, 0 br label %logic.rend308 logic.rend308: br label %logic.end307 logic.end307: %t505 = phi i1 [ false, %logic.from305 ], [ %t504, %logic.rend308 ] br i1 %t505, label %then309, label %endif311 then309: %t506 = load { ptr, i64, i64 }, ptr %a492 %t507 = getelementptr inbounds %S.main.Loader, ptr %a433, i32 0, i32 4 store { ptr, i64, i64 } %t506, ptr %a508 call void @finch_str_copy(ptr %a509, ptr %a508) %t510 = load { ptr, i64, i64 }, ptr %a509 store { ptr, i64, i64 } %t510, ptr %t507 br label %endif311 endif311: br label %each.step303 each.step303: %t511 = load i64, ptr %a484 %t512 = add i64 %t511, 1 store i64 %t512, ptr %a484 br label %each.cond301 each.end304: %t513 = load { ptr, i64, i64 }, ptr %a111 %t514 = getelementptr inbounds %S.main.Loader, ptr %a433, i32 0, i32 6 store { ptr, i64, i64 } %t513, ptr %a515 call void @finch.copy.arr_str(ptr %a516, ptr %a515) %t517 = load { ptr, i64, i64 }, ptr %a516 store { ptr, i64, i64 } %t517, ptr %t514 %t518 = load { ptr, i64, i64 }, ptr %a112 %t519 = getelementptr inbounds %S.main.Loader, ptr %a433, i32 0, i32 7 store { ptr, i64, i64 } %t518, ptr %a520 call void @finch.copy.arr_str(ptr %a521, ptr %a520) %t522 = load { ptr, i64, i64 }, ptr %a521 store { ptr, i64, i64 } %t522, ptr %t519 %t523 = extractvalue { ptr, i64, i64 } { ptr @.str.208, i64 10, i64 0 }, 0 %t524 = icmp eq ptr %t523, null %t525 = select i1 %t524, ptr @.str.209, ptr %t523 %t526 = call ptr @getenv(ptr %t525) store { ptr, i64, i64 } zeroinitializer, ptr %a527 call void @finch_str_from_c(ptr %a527, ptr %t526) %t528 = load { ptr, i64, i64 }, ptr %a527 store { ptr, i64, i64 } %t528, ptr %a529 store { ptr, i64, i64 } { ptr @.str.211, i64 1, i64 0 }, ptr %a531 call void @finch_str_split(ptr %a532, ptr %a529, ptr %a531) %t533 = load { ptr, i64, i64 }, ptr %a532 store { ptr, i64, i64 } %t533, ptr %a534 store i64 0, ptr %a535 br label %each.cond312 each.cond312: %t536 = getelementptr inbounds { ptr, i64, i64 }, ptr %a534, i32 0, i32 1 %t537 = load i64, ptr %t536 %t538 = load i64, ptr %a535 %t539 = icmp slt i64 %t538, %t537 br i1 %t539, label %each.body313, label %each.end315 each.body313: %t540 = load ptr, ptr %a534 %t541 = getelementptr inbounds { ptr, i64, i64 }, ptr %t540, i64 %t538 %t542 = load { ptr, i64, i64 }, ptr %t541 store { ptr, i64, i64 } %t542, ptr %a543 %t544 = getelementptr inbounds { ptr, i64, i64 }, ptr %a543, i32 0, i32 1 %t545 = load i64, ptr %t544 %t546 = icmp sgt i64 %t545, 0 br i1 %t546, label %then316, label %endif318 then316: %t547 = getelementptr inbounds %S.main.Loader, ptr %a433, i32 0, i32 5 %t548 = getelementptr inbounds { ptr, i64, i64 }, ptr %t547, i32 0, i32 1 %t549 = load { ptr, i64, i64 }, ptr %a543 store { ptr, i64, i64 } %t549, ptr %a550 call void @finch_str_copy(ptr %a551, ptr %a550) %t552 = load { ptr, i64, i64 }, ptr %a551 %t553 = load i64, ptr %t548 %t554 = add i64 %t553, 1 call void @finch_arr_reserve(ptr %t547, i64 %t554, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t555 = load ptr, ptr %t547 %t556 = getelementptr inbounds { ptr, i64, i64 }, ptr %t555, i64 %t553 store { ptr, i64, i64 } %t552, ptr %t556 store i64 %t554, ptr %t548 br label %endif318 endif318: br label %each.step314 each.step314: %t557 = load i64, ptr %a535 %t558 = add i64 %t557, 1 store i64 %t558, ptr %a535 br label %each.cond312 each.end315: %t559 = load { ptr, i64, i64 }, ptr %a77 call void @finch.main.load(ptr %a433, { ptr, i64, i64 } %t559, { ptr, i64, i64 } { ptr @.str.212, i64 0, i64 0 }) store { ptr, i64, i64 } zeroinitializer, ptr %a560 store { ptr, i64, i64 } zeroinitializer, ptr %a561 %t562 = load { ptr, i64, i64 }, ptr %a110 store { ptr, i64, i64 } %t562, ptr %a563 call void @finch.copy.arr_str(ptr %a564, ptr %a563) %t565 = load { ptr, i64, i64 }, ptr %a564 store { ptr, i64, i64 } %t565, ptr %a566 %t567 = load { ptr, i64, i64 }, ptr %a109 store { ptr, i64, i64 } %t567, ptr %a568 call void @finch.copy.arr_str(ptr %a569, ptr %a568) %t570 = load { ptr, i64, i64 }, ptr %a569 store { ptr, i64, i64 } %t570, ptr %a571 %t572 = getelementptr inbounds %S.main.Loader, ptr %a433, i32 0, i32 0 store i64 0, ptr %a573 br label %each.cond319 each.cond319: %t574 = getelementptr inbounds { ptr, i64, i64 }, ptr %t572, i32 0, i32 1 %t575 = load i64, ptr %t574 %t576 = load i64, ptr %a573 %t577 = icmp slt i64 %t576, %t575 br i1 %t577, label %each.body320, label %each.end322 each.body320: %t578 = load ptr, ptr %t572 %t579 = getelementptr inbounds %S.ast.Program, ptr %t578, i64 %t576 %t580 = load %S.ast.Program, ptr %t579 store %S.ast.Program %t580, ptr %a581 %t582 = getelementptr inbounds %S.ast.Program, ptr %a581, i32 0, i32 1 %t583 = load { ptr, i64, i64 }, ptr %t582 %t584 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t583) store { ptr, i64, i64 } %t584, ptr %a585 %t586 = getelementptr inbounds { ptr, i64, i64 }, ptr %a566, i32 0, i32 1 %t587 = load { ptr, i64, i64 }, ptr %a585 store i64 -1, ptr %a588 %t589 = load i64, ptr %t586 %t590 = load ptr, ptr %a566 store i64 0, ptr %a591 br label %find.cond323 find.cond323: %t592 = load i64, ptr %a591 %t593 = icmp slt i64 %t592, %t589 br i1 %t593, label %find.body324, label %find.end327 find.body324: %t594 = getelementptr inbounds { ptr, i64, i64 }, ptr %t590, i64 %t592 %t595 = load { ptr, i64, i64 }, ptr %t594 store { ptr, i64, i64 } %t595, ptr %a596 store { ptr, i64, i64 } %t587, ptr %a597 %t598 = call i32 @finch_str_eq(ptr %a596, ptr %a597) %t599 = icmp ne i32 %t598, 0 br i1 %t599, label %find.hit325, label %find.next326 find.hit325: store i64 %t592, ptr %a588 br label %find.end327 find.next326: %t600 = add i64 %t592, 1 store i64 %t600, ptr %a591 br label %find.cond323 find.end327: %t601 = load i64, ptr %a588 %t602 = icmp sge i64 %t601, 0 %t603 = xor i1 %t602, true br i1 %t603, label %then328, label %endif330 then328: %t604 = getelementptr inbounds { ptr, i64, i64 }, ptr %a566, i32 0, i32 1 %t605 = load { ptr, i64, i64 }, ptr %a585 store { ptr, i64, i64 } %t605, ptr %a606 call void @finch_str_copy(ptr %a607, ptr %a606) %t608 = load { ptr, i64, i64 }, ptr %a607 %t609 = load i64, ptr %t604 %t610 = add i64 %t609, 1 call void @finch_arr_reserve(ptr %a566, i64 %t610, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t611 = load ptr, ptr %a566 %t612 = getelementptr inbounds { ptr, i64, i64 }, ptr %t611, i64 %t609 store { ptr, i64, i64 } %t608, ptr %t612 store i64 %t610, ptr %t604 br label %endif330 endif330: %t613 = getelementptr inbounds %S.ast.Program, ptr %a581, i32 0, i32 3 %t614 = getelementptr inbounds { ptr, i64, i64 }, ptr %t613, i32 0, i32 1 %t615 = load i64, ptr %t614 store i64 0, ptr %a616 br label %for.cond331 for.cond331: %t617 = load i64, ptr %a616 %t618 = icmp slt i64 %t617, %t615 br i1 %t618, label %for.body332, label %for.end334 for.body332: %t619 = getelementptr inbounds { ptr, i64, i64 }, ptr %a561, i32 0, i32 1 %t620 = getelementptr inbounds %S.ast.Program, ptr %a581, i32 0, i32 3 %t621 = load i64, ptr %a616 %t622 = load { ptr, i64, i64 }, ptr %t620 %t623 = extractvalue { ptr, i64, i64 } %t622, 1 %t624 = icmp uge i64 %t621, %t623 br i1 %t624, label %range335, label %inrange336 range335: call void @finch_panic_index(ptr @.str.213, i64 244, i64 %t621, i64 %t623) unreachable inrange336: %t625 = extractvalue { ptr, i64, i64 } %t622, 0 %t626 = getelementptr inbounds { ptr, i64, i64 }, ptr %t625, i64 %t621 %t627 = load { ptr, i64, i64 }, ptr %t626 store i64 -1, ptr %a628 %t629 = load i64, ptr %t619 %t630 = load ptr, ptr %a561 store i64 0, ptr %a631 br label %find.cond337 find.cond337: %t632 = load i64, ptr %a631 %t633 = icmp slt i64 %t632, %t629 br i1 %t633, label %find.body338, label %find.end341 find.body338: %t634 = getelementptr inbounds { ptr, i64, i64 }, ptr %t630, i64 %t632 %t635 = load { ptr, i64, i64 }, ptr %t634 store { ptr, i64, i64 } %t635, ptr %a636 store { ptr, i64, i64 } %t627, ptr %a637 %t638 = call i32 @finch_str_eq(ptr %a636, ptr %a637) %t639 = icmp ne i32 %t638, 0 br i1 %t639, label %find.hit339, label %find.next340 find.hit339: store i64 %t632, ptr %a628 br label %find.end341 find.next340: %t640 = add i64 %t632, 1 store i64 %t640, ptr %a631 br label %find.cond337 find.end341: %t641 = load i64, ptr %a628 %t642 = icmp sge i64 %t641, 0 %t643 = xor i1 %t642, true br i1 %t643, label %then342, label %endif344 then342: %t644 = getelementptr inbounds { ptr, i64, i64 }, ptr %a561, i32 0, i32 1 %t645 = getelementptr inbounds %S.ast.Program, ptr %a581, i32 0, i32 3 %t646 = load i64, ptr %a616 %t647 = load { ptr, i64, i64 }, ptr %t645 %t648 = extractvalue { ptr, i64, i64 } %t647, 1 %t649 = icmp uge i64 %t646, %t648 br i1 %t649, label %range345, label %inrange346 range345: call void @finch_panic_index(ptr @.str.214, i64 245, i64 %t646, i64 %t648) unreachable inrange346: %t650 = extractvalue { ptr, i64, i64 } %t647, 0 %t651 = getelementptr inbounds { ptr, i64, i64 }, ptr %t650, i64 %t646 %t652 = load { ptr, i64, i64 }, ptr %t651 store { ptr, i64, i64 } %t652, ptr %a653 call void @finch_str_copy(ptr %a654, ptr %a653) %t655 = load { ptr, i64, i64 }, ptr %a654 %t656 = load i64, ptr %t644 %t657 = add i64 %t656, 1 call void @finch_arr_reserve(ptr %a561, i64 %t657, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t658 = load ptr, ptr %a561 %t659 = getelementptr inbounds { ptr, i64, i64 }, ptr %t658, i64 %t656 store { ptr, i64, i64 } %t655, ptr %t659 store i64 %t657, ptr %t644 %t660 = getelementptr inbounds { ptr, i64, i64 }, ptr %a560, i32 0, i32 1 %t661 = getelementptr inbounds %S.ast.Program, ptr %a581, i32 0, i32 3 %t662 = load i64, ptr %a616 %t663 = load { ptr, i64, i64 }, ptr %t661 %t664 = extractvalue { ptr, i64, i64 } %t663, 1 %t665 = icmp uge i64 %t662, %t664 br i1 %t665, label %range347, label %inrange348 range347: call void @finch_panic_index(ptr @.str.215, i64 246, i64 %t662, i64 %t664) unreachable inrange348: %t666 = extractvalue { ptr, i64, i64 } %t663, 0 %t667 = getelementptr inbounds { ptr, i64, i64 }, ptr %t666, i64 %t662 %t668 = load { ptr, i64, i64 }, ptr %t667 store { ptr, i64, i64 } %t668, ptr %a669 call void @finch_str_copy(ptr %a670, ptr %a669) %t671 = load { ptr, i64, i64 }, ptr %a670 %t672 = insertvalue %S.cimport.Header zeroinitializer, { ptr, i64, i64 } %t671, 0 %t673 = getelementptr inbounds %S.ast.Program, ptr %a581, i32 0, i32 4 %t674 = load i64, ptr %a616 %t675 = load { ptr, i64, i64 }, ptr %t673 %t676 = extractvalue { ptr, i64, i64 } %t675, 1 %t677 = icmp uge i64 %t674, %t676 br i1 %t677, label %range349, label %inrange350 range349: call void @finch_panic_index(ptr @.str.216, i64 246, i64 %t674, i64 %t676) unreachable inrange350: %t678 = extractvalue { ptr, i64, i64 } %t675, 0 %t679 = getelementptr inbounds { ptr, i64, i64 }, ptr %t678, i64 %t674 %t680 = load { ptr, i64, i64 }, ptr %t679 store { ptr, i64, i64 } %t680, ptr %a681 call void @finch_str_copy(ptr %a682, ptr %a681) %t683 = load { ptr, i64, i64 }, ptr %a682 %t684 = insertvalue %S.cimport.Header %t672, { ptr, i64, i64 } %t683, 1 %t685 = load i64, ptr %t660 %t686 = add i64 %t685, 1 call void @finch_arr_reserve(ptr %a560, i64 %t686, i64 ptrtoint (ptr getelementptr (%S.cimport.Header, ptr null, i32 1) to i64)) %t687 = load ptr, ptr %a560 %t688 = getelementptr inbounds %S.cimport.Header, ptr %t687, i64 %t685 store %S.cimport.Header %t684, ptr %t688 store i64 %t686, ptr %t660 br label %endif344 endif344: br label %for.step333 for.step333: %t689 = load i64, ptr %a616 %t690 = add i64 %t689, 1 store i64 %t690, ptr %a616 br label %for.cond331 for.end334: %t691 = getelementptr inbounds %S.ast.Program, ptr %a581, i32 0, i32 5 store i64 0, ptr %a692 br label %each.cond351 each.cond351: %t693 = getelementptr inbounds { ptr, i64, i64 }, ptr %t691, i32 0, i32 1 %t694 = load i64, ptr %t693 %t695 = load i64, ptr %a692 %t696 = icmp slt i64 %t695, %t694 br i1 %t696, label %each.body352, label %each.end354 each.body352: %t697 = load ptr, ptr %t691 %t698 = getelementptr inbounds { ptr, i64, i64 }, ptr %t697, i64 %t695 %t699 = load { ptr, i64, i64 }, ptr %t698 store { ptr, i64, i64 } %t699, ptr %a700 %t701 = load { ptr, i64, i64 }, ptr %a700 store { ptr, i64, i64 } %t701, ptr %a702 store { ptr, i64, i64 } { ptr @.str.218, i64 2, i64 0 }, ptr %a704 %t705 = call i32 @finch_str_ends(ptr %a702, ptr %a704) %t706 = icmp ne i32 %t705, 0 br label %logic.from355 logic.from355: br i1 %t706, label %logic.end357, label %logic.rhs356 logic.rhs356: %t707 = load { ptr, i64, i64 }, ptr %a700 store { ptr, i64, i64 } %t707, ptr %a708 store { ptr, i64, i64 } { ptr @.str.220, i64 2, i64 0 }, ptr %a710 %t711 = call i32 @finch_str_ends(ptr %a708, ptr %a710) %t712 = icmp ne i32 %t711, 0 br label %logic.rend358 logic.rend358: br label %logic.end357 logic.end357: %t713 = phi i1 [ true, %logic.from355 ], [ %t712, %logic.rend358 ] br label %logic.from359 logic.from359: br i1 %t713, label %logic.end361, label %logic.rhs360 logic.rhs360: %t714 = load { ptr, i64, i64 }, ptr %a700 store { ptr, i64, i64 } %t714, ptr %a715 store { ptr, i64, i64 } { ptr @.str.222, i64 2, i64 0 }, ptr %a717 %t718 = call i32 @finch_str_ends(ptr %a715, ptr %a717) %t719 = icmp ne i32 %t718, 0 br label %logic.rend362 logic.rend362: br label %logic.end361 logic.end361: %t720 = phi i1 [ true, %logic.from359 ], [ %t719, %logic.rend362 ] br i1 %t720, label %then363, label %else364 then363: %t721 = getelementptr inbounds { ptr, i64, i64 }, ptr %a571, i32 0, i32 1 %t722 = load { ptr, i64, i64 }, ptr %a585 store { ptr, i64, i64 } %t722, ptr %a724 store { ptr, i64, i64 } { ptr @.str.223, i64 1, i64 0 }, ptr %a725 call void @finch_str_concat(ptr %a723, ptr %a724, ptr %a725) %t726 = load { ptr, i64, i64 }, ptr %a723 %t727 = load { ptr, i64, i64 }, ptr %a700 store { ptr, i64, i64 } %t726, ptr %a729 store { ptr, i64, i64 } %t727, ptr %a730 call void @finch_str_concat(ptr %a728, ptr %a729, ptr %a730) %t731 = load { ptr, i64, i64 }, ptr %a728 %t732 = load i64, ptr %t721 %t733 = add i64 %t732, 1 call void @finch_arr_reserve(ptr %a571, i64 %t733, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t734 = load ptr, ptr %a571 %t735 = getelementptr inbounds { ptr, i64, i64 }, ptr %t734, i64 %t732 store { ptr, i64, i64 } %t731, ptr %t735 store i64 %t733, ptr %t721 br label %endif365 else364: %t736 = getelementptr inbounds { ptr, i64, i64 }, ptr %a571, i32 0, i32 1 %t737 = load { ptr, i64, i64 }, ptr %a700 store { ptr, i64, i64 } %t737, ptr %a738 call void @finch_str_copy(ptr %a739, ptr %a738) %t740 = load { ptr, i64, i64 }, ptr %a739 %t741 = load i64, ptr %t736 %t742 = add i64 %t741, 1 call void @finch_arr_reserve(ptr %a571, i64 %t742, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t743 = load ptr, ptr %a571 %t744 = getelementptr inbounds { ptr, i64, i64 }, ptr %t743, i64 %t741 store { ptr, i64, i64 } %t740, ptr %t744 store i64 %t742, ptr %t736 br label %endif365 endif365: br label %each.step353 each.step353: %t745 = load i64, ptr %a692 %t746 = add i64 %t745, 1 store i64 %t746, ptr %a692 br label %each.cond351 each.end354: br label %each.step321 each.step321: %t747 = load i64, ptr %a573 %t748 = add i64 %t747, 1 store i64 %t748, ptr %a573 br label %each.cond319 each.end322: store { ptr, i64, i64 } { ptr @.str.224, i64 0, i64 0 }, ptr %a749 %t750 = getelementptr inbounds %S.platform.Target, ptr %a375, i32 0, i32 5 %t751 = load i1, ptr %t750 br i1 %t751, label %then366, label %endif368 then366: %t752 = getelementptr inbounds %S.platform.Target, ptr %a375, i32 0, i32 0 %t753 = load { ptr, i64, i64 }, ptr %t752 store { ptr, i64, i64 } %t753, ptr %a754 call void @finch_str_copy(ptr %a755, ptr %a754) %t756 = load { ptr, i64, i64 }, ptr %a755 store { ptr, i64, i64 } %t756, ptr %a749 br label %endif368 endif368: %t757 = load { ptr, i64, i64 }, ptr %a560 %t758 = load { ptr, i64, i64 }, ptr %a566 %t759 = load { ptr, i64, i64 }, ptr %a749 %t760 = getelementptr inbounds %S.platform.Target, ptr %a375, i32 0, i32 1 %t761 = load i1, ptr %t760 %t762 = getelementptr inbounds %S.platform.Target, ptr %a375, i32 0, i32 7 %t763 = load { ptr, i64, i64 }, ptr %t762 %t764 = call { i1, %S.cimport.CImports, { ptr, i64, i64 } } @finch.cimport.importHeaders({ ptr, i64, i64 } %t757, { ptr, i64, i64 } %t758, { ptr, i64, i64 } %t759, i1 %t761, { ptr, i64, i64 } %t763) %t765 = extractvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t764, 0 %t766 = xor i1 %t765, true %t767 = extractvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t764, 2 %t768 = extractvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t764, 1 br i1 %t766, label %or.failed369, label %or.ok370 or.failed369: store { ptr, i64, i64 } %t767, ptr %a769 %t770 = load { ptr, i64, i64 }, ptr %a769 %t771 = extractvalue { ptr, i64, i64 } %t770, 1 %t772 = trunc i64 %t771 to i32 %t773 = extractvalue { ptr, i64, i64 } %t770, 0 %t774 = icmp eq ptr %t773, null %t775 = select i1 %t774, ptr @.str.225, ptr %t773 %t776 = call i32 (ptr, ...) @printf(ptr @.str.226, i32 %t772, ptr %t775) %t777 = call i32 (ptr, ...) @printf(ptr @.str.227) ret i64 1 or.ok370: store %S.cimport.CImports %t768, ptr %a778 %t779 = getelementptr inbounds %S.main.Loader, ptr %a433, i32 0, i32 0 %t780 = load { ptr, i64, i64 }, ptr %t779 %t781 = getelementptr inbounds %S.main.Loader, ptr %a433, i32 0, i32 1 %t782 = load { ptr, i64, i64 }, ptr %t781 %t783 = load %S.cimport.CImports, ptr %a778 %t784 = load i1, ptr %a105 %t785 = insertvalue %S.gen.Options zeroinitializer, i1 %t784, 0 %t786 = load { ptr, i64, i64 }, ptr %a67 store { ptr, i64, i64 } %t786, ptr %a787 store { ptr, i64, i64 } { ptr @.str.228, i64 5, i64 0 }, ptr %a788 %t789 = call i32 @finch_str_eq(ptr %a787, ptr %a788) %t790 = icmp ne i32 %t789, 0 %t791 = insertvalue %S.gen.Options %t785, i1 %t790, 1 %t792 = load i1, ptr %a106 %t793 = insertvalue %S.gen.Options %t791, i1 %t792, 2 %t794 = extractvalue { ptr, i64, i64 } { ptr @.str.229, i64 3, i64 0 }, 0 %t795 = icmp eq ptr %t794, null %t796 = select i1 %t795, ptr @.str.230, ptr %t794 %t797 = call ptr @getenv(ptr %t796) store { ptr, i64, i64 } zeroinitializer, ptr %a798 call void @finch_str_from_c(ptr %a798, ptr %t797) %t799 = load { ptr, i64, i64 }, ptr %a798 store { ptr, i64, i64 } %t799, ptr %a800 call void @finch_str_copy(ptr %a801, ptr %a800) %t802 = load { ptr, i64, i64 }, ptr %a801 %t803 = insertvalue %S.gen.Options %t793, { ptr, i64, i64 } %t802, 3 %t804 = load %S.platform.Target, ptr %a375 store %S.platform.Target %t804, ptr %a805 call void @finch.copy.S_platform_Target(ptr %a806, ptr %a805) %t807 = load %S.platform.Target, ptr %a806 %t808 = insertvalue %S.gen.Options %t803, %S.platform.Target %t807, 4 %t809 = call { ptr, i64, i64 } @finch.gen.generate({ ptr, i64, i64 } %t780, { ptr, i64, i64 } %t782, %S.cimport.CImports %t783, %S.gen.Options %t808) store { ptr, i64, i64 } %t809, ptr %a810 %t811 = load { ptr, i64, i64 }, ptr %a67 store { ptr, i64, i64 } %t811, ptr %a812 store { ptr, i64, i64 } { ptr @.str.231, i64 2, i64 0 }, ptr %a813 %t814 = call i32 @finch_str_eq(ptr %a812, ptr %a813) %t815 = icmp ne i32 %t814, 0 br label %logic.from371 logic.from371: br i1 %t815, label %logic.end373, label %logic.rhs372 logic.rhs372: %t816 = load { ptr, i64, i64 }, ptr %a67 store { ptr, i64, i64 } %t816, ptr %a817 store { ptr, i64, i64 } { ptr @.str.232, i64 5, i64 0 }, ptr %a818 %t819 = call i32 @finch_str_eq(ptr %a817, ptr %a818) %t820 = icmp ne i32 %t819, 0 br label %logic.rend374 logic.rend374: br label %logic.end373 logic.end373: %t821 = phi i1 [ true, %logic.from371 ], [ %t820, %logic.rend374 ] br i1 %t821, label %then375, label %endif377 then375: %t822 = load { ptr, i64, i64 }, ptr %a810 %t823 = extractvalue { ptr, i64, i64 } %t822, 1 %t824 = trunc i64 %t823 to i32 %t825 = extractvalue { ptr, i64, i64 } %t822, 0 %t826 = icmp eq ptr %t825, null %t827 = select i1 %t826, ptr @.str.233, ptr %t825 %t828 = call i32 (ptr, ...) @printf(ptr @.str.234, i32 %t824, ptr %t827) %t829 = call i32 (ptr, ...) @printf(ptr @.str.235) ret i64 0 endif377: %t830 = extractvalue { ptr, i64, i64 } { ptr @.str.236, i64 8, i64 0 }, 0 %t831 = icmp eq ptr %t830, null %t832 = select i1 %t831, ptr @.str.237, ptr %t830 %t833 = call ptr @getenv(ptr %t832) store { ptr, i64, i64 } zeroinitializer, ptr %a834 call void @finch_str_from_c(ptr %a834, ptr %t833) %t835 = load { ptr, i64, i64 }, ptr %a834 store { ptr, i64, i64 } %t835, ptr %a836 call void @finch_str_copy(ptr %a837, ptr %a836) %t838 = load { ptr, i64, i64 }, ptr %a837 store { ptr, i64, i64 } %t838, ptr %a839 %t840 = getelementptr inbounds { ptr, i64, i64 }, ptr %a839, i32 0, i32 1 %t841 = load i64, ptr %t840 %t842 = icmp eq i64 %t841, 0 br i1 %t842, label %then378, label %endif380 then378: %t843 = load { ptr, i64, i64 }, ptr %a1 %t844 = extractvalue { ptr, i64, i64 } %t843, 1 %t845 = icmp uge i64 0, %t844 br i1 %t845, label %range381, label %inrange382 range381: call void @finch_panic_index(ptr @.str.238, i64 274, i64 0, i64 %t844) unreachable inrange382: %t846 = extractvalue { ptr, i64, i64 } %t843, 0 %t847 = getelementptr inbounds { ptr, i64, i64 }, ptr %t846, i64 0 %t848 = load { ptr, i64, i64 }, ptr %t847 %t849 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t848) store { ptr, i64, i64 } %t849, ptr %a851 store { ptr, i64, i64 } { ptr @.str.239, i64 22, i64 0 }, ptr %a852 call void @finch_str_concat(ptr %a850, ptr %a851, ptr %a852) %t853 = load { ptr, i64, i64 }, ptr %a850 store { ptr, i64, i64 } %t853, ptr %a839 br label %endif380 endif380: %t854 = load { ptr, i64, i64 }, ptr %a839 store { ptr, i64, i64 } %t854, ptr %a855 %t856 = call i32 @finch_file_exists(ptr %a855) %t857 = icmp ne i32 %t856, 0 %t858 = xor i1 %t857, true br i1 %t858, label %then383, label %endif385 then383: %t859 = load { ptr, i64, i64 }, ptr %a1 %t860 = extractvalue { ptr, i64, i64 } %t859, 1 %t861 = icmp uge i64 0, %t860 br i1 %t861, label %range386, label %inrange387 range386: call void @finch_panic_index(ptr @.str.240, i64 277, i64 0, i64 %t860) unreachable inrange387: %t862 = extractvalue { ptr, i64, i64 } %t859, 0 %t863 = getelementptr inbounds { ptr, i64, i64 }, ptr %t862, i64 0 %t864 = load { ptr, i64, i64 }, ptr %t863 %t865 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t864) store { ptr, i64, i64 } %t865, ptr %a867 store { ptr, i64, i64 } { ptr @.str.241, i64 19, i64 0 }, ptr %a868 call void @finch_str_concat(ptr %a866, ptr %a867, ptr %a868) %t869 = load { ptr, i64, i64 }, ptr %a866 store { ptr, i64, i64 } %t869, ptr %a839 br label %endif385 endif385: %t870 = load { ptr, i64, i64 }, ptr %a839 store { ptr, i64, i64 } %t870, ptr %a871 %t872 = call i32 @finch_file_exists(ptr %a871) %t873 = icmp ne i32 %t872, 0 %t874 = xor i1 %t873, true br i1 %t874, label %then388, label %endif390 then388: %t875 = load { ptr, i64, i64 }, ptr %a1 %t876 = extractvalue { ptr, i64, i64 } %t875, 1 %t877 = icmp uge i64 0, %t876 br i1 %t877, label %range391, label %inrange392 range391: call void @finch_panic_index(ptr @.str.242, i64 280, i64 0, i64 %t876) unreachable inrange392: %t878 = extractvalue { ptr, i64, i64 } %t875, 0 %t879 = getelementptr inbounds { ptr, i64, i64 }, ptr %t878, i64 0 %t880 = load { ptr, i64, i64 }, ptr %t879 %t881 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t880) store { ptr, i64, i64 } %t881, ptr %a883 store { ptr, i64, i64 } { ptr @.str.243, i64 34, i64 0 }, ptr %a884 call void @finch_str_concat(ptr %a882, ptr %a883, ptr %a884) %t885 = load { ptr, i64, i64 }, ptr %a882 store { ptr, i64, i64 } %t885, ptr %a839 br label %endif390 endif390: %t886 = load { ptr, i64, i64 }, ptr %a839 store { ptr, i64, i64 } %t886, ptr %a887 %t888 = call i32 @finch_file_exists(ptr %a887) %t889 = icmp ne i32 %t888, 0 %t890 = xor i1 %t889, true br label %logic.from393 logic.from393: br i1 %t890, label %logic.rhs394, label %logic.end395 logic.rhs394: store { ptr, i64, i64 } { ptr @.str.244, i64 18, i64 0 }, ptr %a891 %t892 = call i32 @finch_file_exists(ptr %a891) %t893 = icmp ne i32 %t892, 0 br label %logic.rend396 logic.rend396: br label %logic.end395 logic.end395: %t894 = phi i1 [ false, %logic.from393 ], [ %t893, %logic.rend396 ] br i1 %t894, label %then397, label %endif399 then397: store { ptr, i64, i64 } { ptr @.str.245, i64 18, i64 0 }, ptr %a839 br label %endif399 endif399: %t895 = load { ptr, i64, i64 }, ptr %a839 store { ptr, i64, i64 } %t895, ptr %a896 %t897 = call i32 @finch_file_exists(ptr %a896) %t898 = icmp ne i32 %t897, 0 %t899 = xor i1 %t898, true br i1 %t899, label %then400, label %endif402 then400: %t900 = extractvalue { ptr, i64, i64 } { ptr @.str.246, i64 56, i64 0 }, 1 %t901 = trunc i64 %t900 to i32 %t902 = extractvalue { ptr, i64, i64 } { ptr @.str.246, i64 56, i64 0 }, 0 %t903 = icmp eq ptr %t902, null %t904 = select i1 %t903, ptr @.str.247, ptr %t902 %t905 = call i32 (ptr, ...) @printf(ptr @.str.248, i32 %t901, ptr %t904) %t906 = call i32 (ptr, ...) @printf(ptr @.str.249) ret i64 1 endif402: store { ptr, i64, i64 } { ptr @.str.250, i64 0, i64 0 }, ptr %a907 %t908 = load i1, ptr %a105 br i1 %t908, label %then403, label %endif405 then403: store { ptr, i64, i64 } { ptr @.str.251, i64 6, i64 0 }, ptr %a907 br label %endif405 endif405: %t909 = load i1, ptr %a106 br i1 %t909, label %then406, label %endif408 then406: %t910 = load { ptr, i64, i64 }, ptr %a907 store { ptr, i64, i64 } %t910, ptr %a912 store { ptr, i64, i64 } { ptr @.str.252, i64 3, i64 0 }, ptr %a913 call void @finch_str_concat(ptr %a911, ptr %a912, ptr %a913) %t914 = load { ptr, i64, i64 }, ptr %a911 store { ptr, i64, i64 } %t914, ptr %a907 br label %endif408 endif408: %t915 = load { ptr, i64, i64 }, ptr %a103 store { ptr, i64, i64 } %t915, ptr %a916 call void @finch_str_copy(ptr %a917, ptr %a916) %t918 = load { ptr, i64, i64 }, ptr %a917 %t919 = insertvalue %S.linker.Build zeroinitializer, { ptr, i64, i64 } %t918, 0 %t920 = load { ptr, i64, i64 }, ptr %a810 store { ptr, i64, i64 } %t920, ptr %a921 call void @finch_str_copy(ptr %a922, ptr %a921) %t923 = load { ptr, i64, i64 }, ptr %a922 %t924 = insertvalue %S.linker.Build %t919, { ptr, i64, i64 } %t923, 1 %t925 = load { ptr, i64, i64 }, ptr %a839 store { ptr, i64, i64 } %t925, ptr %a926 call void @finch_str_copy(ptr %a927, ptr %a926) %t928 = load { ptr, i64, i64 }, ptr %a927 %t929 = insertvalue %S.linker.Build %t924, { ptr, i64, i64 } %t928, 2 %t930 = load { ptr, i64, i64 }, ptr %a108 store { ptr, i64, i64 } %t930, ptr %a931 call void @finch_str_copy(ptr %a932, ptr %a931) %t933 = load { ptr, i64, i64 }, ptr %a932 %t934 = insertvalue %S.linker.Build %t929, { ptr, i64, i64 } %t933, 3 %t935 = load { ptr, i64, i64 }, ptr %a907 store { ptr, i64, i64 } %t935, ptr %a936 call void @finch_str_copy(ptr %a937, ptr %a936) %t938 = load { ptr, i64, i64 }, ptr %a937 %t939 = insertvalue %S.linker.Build %t934, { ptr, i64, i64 } %t938, 4 %t940 = load i1, ptr %a105 %t941 = insertvalue %S.linker.Build %t939, i1 %t940, 5 %t942 = load { ptr, i64, i64 }, ptr %a571 store { ptr, i64, i64 } %t942, ptr %a943 call void @finch.copy.arr_str(ptr %a944, ptr %a943) %t945 = load { ptr, i64, i64 }, ptr %a944 %t946 = insertvalue %S.linker.Build %t941, { ptr, i64, i64 } %t945, 6 %t947 = load %S.platform.Target, ptr %a375 %t948 = load %S.cimport.CImports, ptr %a778 %t949 = call i64 @finch.linker.build(%S.linker.Build %t946, %S.platform.Target %t947, %S.cimport.CImports %t948) %t950 = icmp ne i64 %t949, 0 br i1 %t950, label %then409, label %endif411 then409: ret i64 1 endif411: %t951 = load { ptr, i64, i64 }, ptr %a67 store { ptr, i64, i64 } %t951, ptr %a952 store { ptr, i64, i64 } { ptr @.str.253, i64 3, i64 0 }, ptr %a953 %t954 = call i32 @finch_str_eq(ptr %a952, ptr %a953) %t955 = icmp ne i32 %t954, 0 br i1 %t955, label %then412, label %endif414 then412: store { ptr, i64, i64 } zeroinitializer, ptr %a956 store i64 0, ptr %a957 br label %each.cond415 each.cond415: %t958 = getelementptr inbounds { ptr, i64, i64 }, ptr %a113, i32 0, i32 1 %t959 = load i64, ptr %t958 %t960 = load i64, ptr %a957 %t961 = icmp slt i64 %t960, %t959 br i1 %t961, label %each.body416, label %each.end418 each.body416: %t962 = load ptr, ptr %a113 %t963 = getelementptr inbounds { ptr, i64, i64 }, ptr %t962, i64 %t960 %t964 = load { ptr, i64, i64 }, ptr %t963 store { ptr, i64, i64 } %t964, ptr %a965 %t966 = getelementptr inbounds { ptr, i64, i64 }, ptr %a956, i32 0, i32 1 %t967 = load { ptr, i64, i64 }, ptr %a965 %t968 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t967) %t969 = load i64, ptr %t966 %t970 = add i64 %t969, 1 call void @finch_arr_reserve(ptr %a956, i64 %t970, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t971 = load ptr, ptr %a956 %t972 = getelementptr inbounds { ptr, i64, i64 }, ptr %t971, i64 %t969 store { ptr, i64, i64 } %t968, ptr %t972 store i64 %t970, ptr %t966 br label %each.step417 each.step417: %t973 = load i64, ptr %a957 %t974 = add i64 %t973, 1 store i64 %t974, ptr %a957 br label %each.cond415 each.end418: %t975 = getelementptr inbounds %S.platform.Target, ptr %a375, i32 0, i32 8 %t976 = load { ptr, i64, i64 }, ptr %t975 %t977 = load { ptr, i64, i64 }, ptr %a103 %t978 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t977) store { ptr, i64, i64 } %t976, ptr %a980 store { ptr, i64, i64 } %t978, ptr %a981 call void @finch_str_concat(ptr %a979, ptr %a980, ptr %a981) %t982 = load { ptr, i64, i64 }, ptr %a979 store { ptr, i64, i64 } %t982, ptr %a984 store { ptr, i64, i64 } { ptr @.str.254, i64 1, i64 0 }, ptr %a985 call void @finch_str_concat(ptr %a983, ptr %a984, ptr %a985) %t986 = load { ptr, i64, i64 }, ptr %a983 %t987 = getelementptr inbounds { ptr, i64, i64 }, ptr %a956, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.255, i64 1, i64 0 }, ptr %a988 call void @finch_str_join(ptr %a989, ptr %a956, ptr %a988) %t990 = load { ptr, i64, i64 }, ptr %a989 store { ptr, i64, i64 } %t986, ptr %a992 store { ptr, i64, i64 } %t990, ptr %a993 call void @finch_str_concat(ptr %a991, ptr %a992, ptr %a993) %t994 = load { ptr, i64, i64 }, ptr %a991 store { ptr, i64, i64 } %t994, ptr %a996 call void @finch_str_copy(ptr %a995, ptr %a996) %t997 = call i64 @finch_shell(ptr %a995) store i64 %t997, ptr %a998 %t999 = load { ptr, i64, i64 }, ptr %a103 %t1000 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t999) store { ptr, i64, i64 } { ptr @.str.256, i64 6, i64 0 }, ptr %a1002 store { ptr, i64, i64 } %t1000, ptr %a1003 call void @finch_str_concat(ptr %a1001, ptr %a1002, ptr %a1003) %t1004 = load { ptr, i64, i64 }, ptr %a1001 store { ptr, i64, i64 } %t1004, ptr %a1006 call void @finch_str_copy(ptr %a1005, ptr %a1006) %t1007 = call i64 @finch_shell(ptr %a1005) %t1008 = load i64, ptr %a998 ret i64 %t1008 endif414: ret i64 0 } define internal i1 @finch.lexer.isAlpha(i8 %p0) { entry: %a1 = alloca i8, align 16 store i8 %p0, ptr %a1 %t2 = load i8, ptr %a1 %t3 = icmp uge i8 %t2, 97 br label %logic.from419 logic.from419: br i1 %t3, label %logic.rhs420, label %logic.end421 logic.rhs420: %t4 = load i8, ptr %a1 %t5 = icmp ule i8 %t4, 122 br label %logic.rend422 logic.rend422: br label %logic.end421 logic.end421: %t6 = phi i1 [ false, %logic.from419 ], [ %t5, %logic.rend422 ] br label %logic.from423 logic.from423: br i1 %t6, label %logic.end425, label %logic.rhs424 logic.rhs424: %t7 = load i8, ptr %a1 %t8 = icmp uge i8 %t7, 65 br label %logic.from426 logic.from426: br i1 %t8, label %logic.rhs427, label %logic.end428 logic.rhs427: %t9 = load i8, ptr %a1 %t10 = icmp ule i8 %t9, 90 br label %logic.rend429 logic.rend429: br label %logic.end428 logic.end428: %t11 = phi i1 [ false, %logic.from426 ], [ %t10, %logic.rend429 ] br label %logic.rend430 logic.rend430: br label %logic.end425 logic.end425: %t12 = phi i1 [ true, %logic.from423 ], [ %t11, %logic.rend430 ] br label %logic.from431 logic.from431: br i1 %t12, label %logic.end433, label %logic.rhs432 logic.rhs432: %t13 = load i8, ptr %a1 %t14 = icmp eq i8 %t13, 95 br label %logic.rend434 logic.rend434: br label %logic.end433 logic.end433: %t15 = phi i1 [ true, %logic.from431 ], [ %t14, %logic.rend434 ] ret i1 %t15 } define internal i1 @finch.lexer.isDigit(i8 %p0) { entry: %a1 = alloca i8, align 16 store i8 %p0, ptr %a1 %t2 = load i8, ptr %a1 %t3 = icmp uge i8 %t2, 48 br label %logic.from435 logic.from435: br i1 %t3, label %logic.rhs436, label %logic.end437 logic.rhs436: %t4 = load i8, ptr %a1 %t5 = icmp ule i8 %t4, 57 br label %logic.rend438 logic.rend438: br label %logic.end437 logic.end437: %t6 = phi i1 [ false, %logic.from435 ], [ %t5, %logic.rend438 ] ret i1 %t6 } define internal i1 @finch.lexer.isHex(i8 %p0) { entry: %a1 = alloca i8, align 16 store i8 %p0, ptr %a1 %t2 = load i8, ptr %a1 %t3 = call i1 @finch.lexer.isDigit(i8 %t2) br label %logic.from439 logic.from439: br i1 %t3, label %logic.end441, label %logic.rhs440 logic.rhs440: %t4 = load i8, ptr %a1 %t5 = icmp uge i8 %t4, 97 br label %logic.from442 logic.from442: br i1 %t5, label %logic.rhs443, label %logic.end444 logic.rhs443: %t6 = load i8, ptr %a1 %t7 = icmp ule i8 %t6, 102 br label %logic.rend445 logic.rend445: br label %logic.end444 logic.end444: %t8 = phi i1 [ false, %logic.from442 ], [ %t7, %logic.rend445 ] br label %logic.rend446 logic.rend446: br label %logic.end441 logic.end441: %t9 = phi i1 [ true, %logic.from439 ], [ %t8, %logic.rend446 ] br label %logic.from447 logic.from447: br i1 %t9, label %logic.end449, label %logic.rhs448 logic.rhs448: %t10 = load i8, ptr %a1 %t11 = icmp uge i8 %t10, 65 br label %logic.from450 logic.from450: br i1 %t11, label %logic.rhs451, label %logic.end452 logic.rhs451: %t12 = load i8, ptr %a1 %t13 = icmp ule i8 %t12, 70 br label %logic.rend453 logic.rend453: br label %logic.end452 logic.end452: %t14 = phi i1 [ false, %logic.from450 ], [ %t13, %logic.rend453 ] br label %logic.rend454 logic.rend454: br label %logic.end449 logic.end449: %t15 = phi i1 [ true, %logic.from447 ], [ %t14, %logic.rend454 ] ret i1 %t15 } define internal i1 @finch.lexer.isKeyword({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca i64, align 16 %a34 = alloca i64, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = mul i64 21, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t3 = call ptr @finch_alloc(i64 %t2) %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 0 store { ptr, i64, i64 } { ptr @.str.257, i64 2, i64 0 }, ptr %t4 %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 1 store { ptr, i64, i64 } { ptr @.str.258, i64 6, i64 0 }, ptr %t5 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 2 store { ptr, i64, i64 } { ptr @.str.259, i64 2, i64 0 }, ptr %t6 %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 3 store { ptr, i64, i64 } { ptr @.str.260, i64 4, i64 0 }, ptr %t7 %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 4 store { ptr, i64, i64 } { ptr @.str.261, i64 5, i64 0 }, ptr %t8 %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 5 store { ptr, i64, i64 } { ptr @.str.262, i64 3, i64 0 }, ptr %t9 %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 6 store { ptr, i64, i64 } { ptr @.str.263, i64 2, i64 0 }, ptr %t10 %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 7 store { ptr, i64, i64 } { ptr @.str.264, i64 5, i64 0 }, ptr %t11 %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 8 store { ptr, i64, i64 } { ptr @.str.265, i64 8, i64 0 }, ptr %t12 %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 9 store { ptr, i64, i64 } { ptr @.str.266, i64 4, i64 0 }, ptr %t13 %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 10 store { ptr, i64, i64 } { ptr @.str.267, i64 5, i64 0 }, ptr %t14 %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 11 store { ptr, i64, i64 } { ptr @.str.268, i64 4, i64 0 }, ptr %t15 %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 12 store { ptr, i64, i64 } { ptr @.str.269, i64 6, i64 0 }, ptr %t16 %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 13 store { ptr, i64, i64 } { ptr @.str.270, i64 4, i64 0 }, ptr %t17 %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 14 store { ptr, i64, i64 } { ptr @.str.271, i64 6, i64 0 }, ptr %t18 %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 15 store { ptr, i64, i64 } { ptr @.str.272, i64 5, i64 0 }, ptr %t19 %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 16 store { ptr, i64, i64 } { ptr @.str.273, i64 2, i64 0 }, ptr %t20 %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 17 store { ptr, i64, i64 } { ptr @.str.274, i64 3, i64 0 }, ptr %t21 %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 18 store { ptr, i64, i64 } { ptr @.str.275, i64 4, i64 0 }, ptr %t22 %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 19 store { ptr, i64, i64 } { ptr @.str.276, i64 5, i64 0 }, ptr %t23 %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 20 store { ptr, i64, i64 } { ptr @.str.277, i64 6, i64 0 }, ptr %t24 %t25 = insertvalue { ptr, i64, i64 } undef, ptr %t3, 0 %t26 = insertvalue { ptr, i64, i64 } %t25, i64 21, 1 %t27 = insertvalue { ptr, i64, i64 } %t26, i64 21, 2 store { ptr, i64, i64 } %t27, ptr %a28 %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %a28, i32 0, i32 1 %t30 = load { ptr, i64, i64 }, ptr %a1 store i64 -1, ptr %a31 %t32 = load i64, ptr %t29 %t33 = load ptr, ptr %a28 store i64 0, ptr %a34 br label %find.cond455 find.cond455: %t35 = load i64, ptr %a34 %t36 = icmp slt i64 %t35, %t32 br i1 %t36, label %find.body456, label %find.end459 find.body456: %t37 = getelementptr inbounds { ptr, i64, i64 }, ptr %t33, i64 %t35 %t38 = load { ptr, i64, i64 }, ptr %t37 store { ptr, i64, i64 } %t38, ptr %a39 store { ptr, i64, i64 } %t30, ptr %a40 %t41 = call i32 @finch_str_eq(ptr %a39, ptr %a40) %t42 = icmp ne i32 %t41, 0 br i1 %t42, label %find.hit457, label %find.next458 find.hit457: store i64 %t35, ptr %a31 br label %find.end459 find.next458: %t43 = add i64 %t35, 1 store i64 %t43, ptr %a34 br label %find.cond455 find.end459: %t44 = load i64, ptr %a31 %t45 = icmp sge i64 %t44, 0 ret i1 %t45 } define internal void @finch.lexer.fail(ptr %p0, i64 %p1, i64 %p2, { ptr, i64, i64 } %p3) { entry: %a1 = alloca ptr, align 16 %a2 = alloca i64, align 16 %a3 = alloca i64, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store i64 %p1, ptr %a2 store i64 %p2, ptr %a3 store { ptr, i64, i64 } %p3, ptr %a4 %t5 = load ptr, ptr %a1 %t6 = icmp eq ptr %t5, null br i1 %t6, label %panic460, label %ok461 panic460: call void @finch_panic(ptr @.str.278, i64 41, ptr @.str.279) unreachable ok461: %t7 = getelementptr inbounds %S.lexer.Lexer, ptr %t5, i32 0, i32 1 %t8 = load { ptr, i64, i64 }, ptr %t7 store { ptr, i64, i64 } %t8, ptr %a10 store { ptr, i64, i64 } { ptr @.str.280, i64 1, i64 0 }, ptr %a11 call void @finch_str_concat(ptr %a9, ptr %a10, ptr %a11) %t12 = load { ptr, i64, i64 }, ptr %a9 %t13 = load i64, ptr %a2 call void @finch_str_from_int(ptr %a14, i64 %t13) %t15 = load { ptr, i64, i64 }, ptr %a14 store { ptr, i64, i64 } %t12, ptr %a17 store { ptr, i64, i64 } %t15, ptr %a18 call void @finch_str_concat(ptr %a16, ptr %a17, ptr %a18) %t19 = load { ptr, i64, i64 }, ptr %a16 store { ptr, i64, i64 } %t19, ptr %a21 store { ptr, i64, i64 } { ptr @.str.281, i64 1, i64 0 }, ptr %a22 call void @finch_str_concat(ptr %a20, ptr %a21, ptr %a22) %t23 = load { ptr, i64, i64 }, ptr %a20 %t24 = load i64, ptr %a3 call void @finch_str_from_int(ptr %a25, i64 %t24) %t26 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t23, ptr %a28 store { ptr, i64, i64 } %t26, ptr %a29 call void @finch_str_concat(ptr %a27, ptr %a28, ptr %a29) %t30 = load { ptr, i64, i64 }, ptr %a27 store { ptr, i64, i64 } %t30, ptr %a32 store { ptr, i64, i64 } { ptr @.str.282, i64 9, i64 0 }, ptr %a33 call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33) %t34 = load { ptr, i64, i64 }, ptr %a31 %t35 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t34, ptr %a37 store { ptr, i64, i64 } %t35, ptr %a38 call void @finch_str_concat(ptr %a36, ptr %a37, ptr %a38) %t39 = load { ptr, i64, i64 }, ptr %a36 %t40 = extractvalue { ptr, i64, i64 } %t39, 1 %t41 = trunc i64 %t40 to i32 %t42 = extractvalue { ptr, i64, i64 } %t39, 0 %t43 = icmp eq ptr %t42, null %t44 = select i1 %t43, ptr @.str.283, ptr %t42 %t45 = call i32 (ptr, ...) @printf(ptr @.str.284, i32 %t41, ptr %t44) %t46 = call i32 (ptr, ...) @printf(ptr @.str.285) %t47 = trunc i64 1 to i32 %t48 = call i32 @fflush(ptr null) call void @exit(i32 %t47) ret void } define internal i8 @finch.lexer.peek(ptr %p0, i64 %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca i64, align 16 store ptr %p0, ptr %a1 store i64 %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null br i1 %t4, label %panic462, label %ok463 panic462: call void @finch_panic(ptr @.str.286, i64 46, ptr @.str.287) unreachable ok463: %t5 = getelementptr inbounds %S.lexer.Lexer, ptr %t3, i32 0, i32 2 %t6 = load i64, ptr %t5 %t7 = load i64, ptr %a2 %t8 = add i64 %t6, %t7 %t9 = load ptr, ptr %a1 %t10 = icmp eq ptr %t9, null br i1 %t10, label %panic464, label %ok465 panic464: call void @finch_panic(ptr @.str.288, i64 46, ptr @.str.289) unreachable ok465: %t11 = getelementptr inbounds %S.lexer.Lexer, ptr %t9, i32 0, i32 0 %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t11, i32 0, i32 1 %t13 = load i64, ptr %t12 %t14 = icmp slt i64 %t8, %t13 br i1 %t14, label %then466, label %endif468 then466: %t15 = load ptr, ptr %a1 %t16 = icmp eq ptr %t15, null br i1 %t16, label %panic469, label %ok470 panic469: call void @finch_panic(ptr @.str.290, i64 47, ptr @.str.291) unreachable ok470: %t17 = getelementptr inbounds %S.lexer.Lexer, ptr %t15, i32 0, i32 0 %t18 = load ptr, ptr %a1 %t19 = icmp eq ptr %t18, null br i1 %t19, label %panic471, label %ok472 panic471: call void @finch_panic(ptr @.str.292, i64 47, ptr @.str.293) unreachable ok472: %t20 = getelementptr inbounds %S.lexer.Lexer, ptr %t18, i32 0, i32 2 %t21 = load i64, ptr %t20 %t22 = load i64, ptr %a2 %t23 = add i64 %t21, %t22 %t24 = load { ptr, i64, i64 }, ptr %t17 %t25 = extractvalue { ptr, i64, i64 } %t24, 1 %t26 = icmp uge i64 %t23, %t25 br i1 %t26, label %range473, label %inrange474 range473: call void @finch_panic_index(ptr @.str.294, i64 47, i64 %t23, i64 %t25) unreachable inrange474: %t27 = extractvalue { ptr, i64, i64 } %t24, 0 %t28 = getelementptr inbounds i8, ptr %t27, i64 %t23 %t29 = load i8, ptr %t28 ret i8 %t29 endif468: %t30 = trunc i64 0 to i8 ret i8 %t30 } define internal void @finch.lexer.advance(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a15 = alloca i8, align 16 store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = icmp eq ptr %t2, null br i1 %t3, label %panic475, label %ok476 panic475: call void @finch_panic(ptr @.str.295, i64 53, ptr @.str.296) unreachable ok476: %t4 = getelementptr inbounds %S.lexer.Lexer, ptr %t2, i32 0, i32 0 %t5 = load ptr, ptr %a1 %t6 = icmp eq ptr %t5, null br i1 %t6, label %panic477, label %ok478 panic477: call void @finch_panic(ptr @.str.297, i64 53, ptr @.str.298) unreachable ok478: %t7 = getelementptr inbounds %S.lexer.Lexer, ptr %t5, i32 0, i32 2 %t8 = load i64, ptr %t7 %t9 = load { ptr, i64, i64 }, ptr %t4 %t10 = extractvalue { ptr, i64, i64 } %t9, 1 %t11 = icmp uge i64 %t8, %t10 br i1 %t11, label %range479, label %inrange480 range479: call void @finch_panic_index(ptr @.str.299, i64 53, i64 %t8, i64 %t10) unreachable inrange480: %t12 = extractvalue { ptr, i64, i64 } %t9, 0 %t13 = getelementptr inbounds i8, ptr %t12, i64 %t8 %t14 = load i8, ptr %t13 store i8 %t14, ptr %a15 %t16 = load i8, ptr %a15 %t17 = icmp eq i8 %t16, 10 br i1 %t17, label %then481, label %else482 then481: %t18 = load ptr, ptr %a1 %t19 = icmp eq ptr %t18, null br i1 %t19, label %panic484, label %ok485 panic484: call void @finch_panic(ptr @.str.300, i64 55, ptr @.str.301) unreachable ok485: %t20 = getelementptr inbounds %S.lexer.Lexer, ptr %t18, i32 0, i32 3 %t21 = load i64, ptr %t20 %t22 = add i64 %t21, 1 store i64 %t22, ptr %t20 %t23 = load ptr, ptr %a1 %t24 = icmp eq ptr %t23, null br i1 %t24, label %panic486, label %ok487 panic486: call void @finch_panic(ptr @.str.302, i64 56, ptr @.str.303) unreachable ok487: %t25 = getelementptr inbounds %S.lexer.Lexer, ptr %t23, i32 0, i32 4 store i64 1, ptr %t25 %t26 = load ptr, ptr %a1 %t27 = icmp eq ptr %t26, null br i1 %t27, label %panic488, label %ok489 panic488: call void @finch_panic(ptr @.str.304, i64 57, ptr @.str.305) unreachable ok489: %t28 = getelementptr inbounds %S.lexer.Lexer, ptr %t26, i32 0, i32 5 store i1 true, ptr %t28 br label %endif483 else482: %t29 = load i8, ptr %a15 %t30 = zext i8 %t29 to i64 %t31 = and i64 %t30, 192 %t32 = icmp ne i64 %t31, 128 br i1 %t32, label %then490, label %endif492 then490: %t33 = load ptr, ptr %a1 %t34 = icmp eq ptr %t33, null br i1 %t34, label %panic493, label %ok494 panic493: call void @finch_panic(ptr @.str.306, i64 59, ptr @.str.307) unreachable ok494: %t35 = getelementptr inbounds %S.lexer.Lexer, ptr %t33, i32 0, i32 4 %t36 = load i64, ptr %t35 %t37 = add i64 %t36, 1 store i64 %t37, ptr %t35 br label %endif492 endif492: br label %endif483 endif483: %t38 = load ptr, ptr %a1 %t39 = icmp eq ptr %t38, null br i1 %t39, label %panic495, label %ok496 panic495: call void @finch_panic(ptr @.str.308, i64 61, ptr @.str.309) unreachable ok496: %t40 = getelementptr inbounds %S.lexer.Lexer, ptr %t38, i32 0, i32 2 %t41 = load i64, ptr %t40 %t42 = add i64 %t41, 1 store i64 %t42, ptr %t40 ret void } define internal { ptr, i64, i64 } @finch.lexer.operator(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca i64, align 16 %a57 = alloca i64, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 %t2 = mul i64 16, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t3 = call ptr @finch_alloc(i64 %t2) %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 0 store { ptr, i64, i64 } { ptr @.str.310, i64 2, i64 0 }, ptr %t4 %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 1 store { ptr, i64, i64 } { ptr @.str.311, i64 2, i64 0 }, ptr %t5 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 2 store { ptr, i64, i64 } { ptr @.str.312, i64 2, i64 0 }, ptr %t6 %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 3 store { ptr, i64, i64 } { ptr @.str.313, i64 2, i64 0 }, ptr %t7 %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 4 store { ptr, i64, i64 } { ptr @.str.314, i64 2, i64 0 }, ptr %t8 %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 5 store { ptr, i64, i64 } { ptr @.str.315, i64 2, i64 0 }, ptr %t9 %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 6 store { ptr, i64, i64 } { ptr @.str.316, i64 2, i64 0 }, ptr %t10 %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 7 store { ptr, i64, i64 } { ptr @.str.317, i64 2, i64 0 }, ptr %t11 %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 8 store { ptr, i64, i64 } { ptr @.str.318, i64 2, i64 0 }, ptr %t12 %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 9 store { ptr, i64, i64 } { ptr @.str.319, i64 2, i64 0 }, ptr %t13 %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 10 store { ptr, i64, i64 } { ptr @.str.320, i64 2, i64 0 }, ptr %t14 %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 11 store { ptr, i64, i64 } { ptr @.str.321, i64 2, i64 0 }, ptr %t15 %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 12 store { ptr, i64, i64 } { ptr @.str.322, i64 2, i64 0 }, ptr %t16 %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 13 store { ptr, i64, i64 } { ptr @.str.323, i64 2, i64 0 }, ptr %t17 %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 14 store { ptr, i64, i64 } { ptr @.str.324, i64 2, i64 0 }, ptr %t18 %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 15 store { ptr, i64, i64 } { ptr @.str.325, i64 2, i64 0 }, ptr %t19 %t20 = insertvalue { ptr, i64, i64 } undef, ptr %t3, 0 %t21 = insertvalue { ptr, i64, i64 } %t20, i64 16, 1 %t22 = insertvalue { ptr, i64, i64 } %t21, i64 16, 2 store { ptr, i64, i64 } %t22, ptr %a23 %t24 = load ptr, ptr %a1 %t25 = icmp eq ptr %t24, null br i1 %t25, label %panic497, label %ok498 panic497: call void @finch_panic(ptr @.str.326, i64 67, ptr @.str.327) unreachable ok498: %t26 = getelementptr inbounds %S.lexer.Lexer, ptr %t24, i32 0, i32 2 %t27 = load i64, ptr %t26 %t28 = add i64 %t27, 1 %t29 = load ptr, ptr %a1 %t30 = icmp eq ptr %t29, null br i1 %t30, label %panic499, label %ok500 panic499: call void @finch_panic(ptr @.str.328, i64 67, ptr @.str.329) unreachable ok500: %t31 = getelementptr inbounds %S.lexer.Lexer, ptr %t29, i32 0, i32 0 %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %t31, i32 0, i32 1 %t33 = load i64, ptr %t32 %t34 = icmp slt i64 %t28, %t33 br i1 %t34, label %then501, label %endif503 then501: %t35 = load ptr, ptr %a1 %t36 = icmp eq ptr %t35, null br i1 %t36, label %panic504, label %ok505 panic504: call void @finch_panic(ptr @.str.330, i64 68, ptr @.str.331) unreachable ok505: %t37 = getelementptr inbounds %S.lexer.Lexer, ptr %t35, i32 0, i32 0 %t38 = load { ptr, i64, i64 }, ptr %t37 store { ptr, i64, i64 } %t38, ptr %a39 %t41 = load ptr, ptr %a1 %t42 = icmp eq ptr %t41, null br i1 %t42, label %panic506, label %ok507 panic506: call void @finch_panic(ptr @.str.333, i64 68, ptr @.str.334) unreachable ok507: %t43 = getelementptr inbounds %S.lexer.Lexer, ptr %t41, i32 0, i32 2 %t44 = load i64, ptr %t43 %t45 = load ptr, ptr %a1 %t46 = icmp eq ptr %t45, null br i1 %t46, label %panic508, label %ok509 panic508: call void @finch_panic(ptr @.str.335, i64 68, ptr @.str.336) unreachable ok509: %t47 = getelementptr inbounds %S.lexer.Lexer, ptr %t45, i32 0, i32 2 %t48 = load i64, ptr %t47 %t49 = add i64 %t48, 2 call void @finch_str_sub(ptr %a40, ptr %a39, i64 %t44, i64 %t49, ptr @.str.332, i64 68) %t50 = load { ptr, i64, i64 }, ptr %a40 store { ptr, i64, i64 } %t50, ptr %a51 %t52 = getelementptr inbounds { ptr, i64, i64 }, ptr %a23, i32 0, i32 1 %t53 = load { ptr, i64, i64 }, ptr %a51 store i64 -1, ptr %a54 %t55 = load i64, ptr %t52 %t56 = load ptr, ptr %a23 store i64 0, ptr %a57 br label %find.cond510 find.cond510: %t58 = load i64, ptr %a57 %t59 = icmp slt i64 %t58, %t55 br i1 %t59, label %find.body511, label %find.end514 find.body511: %t60 = getelementptr inbounds { ptr, i64, i64 }, ptr %t56, i64 %t58 %t61 = load { ptr, i64, i64 }, ptr %t60 store { ptr, i64, i64 } %t61, ptr %a62 store { ptr, i64, i64 } %t53, ptr %a63 %t64 = call i32 @finch_str_eq(ptr %a62, ptr %a63) %t65 = icmp ne i32 %t64, 0 br i1 %t65, label %find.hit512, label %find.next513 find.hit512: store i64 %t58, ptr %a54 br label %find.end514 find.next513: %t66 = add i64 %t58, 1 store i64 %t66, ptr %a57 br label %find.cond510 find.end514: %t67 = load i64, ptr %a54 %t68 = icmp sge i64 %t67, 0 br i1 %t68, label %then515, label %endif517 then515: %t69 = load { ptr, i64, i64 }, ptr %a51 ret { ptr, i64, i64 } %t69 endif517: br label %endif503 endif503: store { ptr, i64, i64 } { ptr @.str.337, i64 22, i64 0 }, ptr %a70 %t71 = load ptr, ptr %a1 %t72 = icmp eq ptr %t71, null br i1 %t72, label %panic518, label %ok519 panic518: call void @finch_panic(ptr @.str.338, i64 74, ptr @.str.339) unreachable ok519: %t73 = getelementptr inbounds %S.lexer.Lexer, ptr %t71, i32 0, i32 0 %t74 = load { ptr, i64, i64 }, ptr %t73 store { ptr, i64, i64 } %t74, ptr %a75 %t77 = load ptr, ptr %a1 %t78 = icmp eq ptr %t77, null br i1 %t78, label %panic520, label %ok521 panic520: call void @finch_panic(ptr @.str.341, i64 74, ptr @.str.342) unreachable ok521: %t79 = getelementptr inbounds %S.lexer.Lexer, ptr %t77, i32 0, i32 2 %t80 = load i64, ptr %t79 %t81 = load ptr, ptr %a1 %t82 = icmp eq ptr %t81, null br i1 %t82, label %panic522, label %ok523 panic522: call void @finch_panic(ptr @.str.343, i64 74, ptr @.str.344) unreachable ok523: %t83 = getelementptr inbounds %S.lexer.Lexer, ptr %t81, i32 0, i32 2 %t84 = load i64, ptr %t83 %t85 = add i64 %t84, 1 call void @finch_str_sub(ptr %a76, ptr %a75, i64 %t80, i64 %t85, ptr @.str.340, i64 74) %t86 = load { ptr, i64, i64 }, ptr %a76 store { ptr, i64, i64 } %t86, ptr %a87 %t88 = load { ptr, i64, i64 }, ptr %a70 store { ptr, i64, i64 } %t88, ptr %a89 %t91 = load { ptr, i64, i64 }, ptr %a87 store { ptr, i64, i64 } %t91, ptr %a92 %t93 = call i64 @finch_str_find(ptr %a89, ptr %a92) %t94 = icmp sge i64 %t93, 0 br i1 %t94, label %then524, label %endif526 then524: %t95 = load { ptr, i64, i64 }, ptr %a87 store { ptr, i64, i64 } %t95, ptr %a96 call void @finch_str_copy(ptr %a97, ptr %a96) %t98 = load { ptr, i64, i64 }, ptr %a97 ret { ptr, i64, i64 } %t98 endif526: ret { ptr, i64, i64 } { ptr @.str.346, i64 0, i64 0 } } define internal i8 @finch.lexer.escape(ptr %p0, i8 %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca i8, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store i8 %p1, ptr %a2 %t3 = load i8, ptr %a2 %t4 = icmp eq i8 %t3, 110 br i1 %t4, label %then527, label %endif529 then527: ret i8 10 endif529: %t5 = load i8, ptr %a2 %t6 = icmp eq i8 %t5, 116 br i1 %t6, label %then530, label %endif532 then530: ret i8 9 endif532: %t7 = load i8, ptr %a2 %t8 = icmp eq i8 %t7, 114 br i1 %t8, label %then533, label %endif535 then533: ret i8 13 endif535: %t9 = load i8, ptr %a2 %t10 = icmp eq i8 %t9, 48 br i1 %t10, label %then536, label %endif538 then536: %t11 = trunc i64 0 to i8 ret i8 %t11 endif538: %t12 = load i8, ptr %a2 %t13 = icmp eq i8 %t12, 92 br label %logic.from539 logic.from539: br i1 %t13, label %logic.end541, label %logic.rhs540 logic.rhs540: %t14 = load i8, ptr %a2 %t15 = icmp eq i8 %t14, 34 br label %logic.rend542 logic.rend542: br label %logic.end541 logic.end541: %t16 = phi i1 [ true, %logic.from539 ], [ %t15, %logic.rend542 ] br label %logic.from543 logic.from543: br i1 %t16, label %logic.end545, label %logic.rhs544 logic.rhs544: %t17 = load i8, ptr %a2 %t18 = icmp eq i8 %t17, 39 br label %logic.rend546 logic.rend546: br label %logic.end545 logic.end545: %t19 = phi i1 [ true, %logic.from543 ], [ %t18, %logic.rend546 ] br i1 %t19, label %then547, label %endif549 then547: %t20 = load i8, ptr %a2 ret i8 %t20 endif549: %t21 = load ptr, ptr %a1 %t22 = load ptr, ptr %a1 %t23 = icmp eq ptr %t22, null br i1 %t23, label %panic550, label %ok551 panic550: call void @finch_panic(ptr @.str.347, i64 97, ptr @.str.348) unreachable ok551: %t24 = getelementptr inbounds %S.lexer.Lexer, ptr %t22, i32 0, i32 3 %t25 = load i64, ptr %t24 %t26 = load ptr, ptr %a1 %t27 = icmp eq ptr %t26, null br i1 %t27, label %panic552, label %ok553 panic552: call void @finch_panic(ptr @.str.349, i64 97, ptr @.str.350) unreachable ok553: %t28 = getelementptr inbounds %S.lexer.Lexer, ptr %t26, i32 0, i32 4 %t29 = load i64, ptr %t28 %t30 = sub i64 %t29, 1 %t31 = load i8, ptr %a2 call void @finch_str_from_char(ptr %a32, i8 signext %t31) %t33 = load { ptr, i64, i64 }, ptr %a32 store { ptr, i64, i64 } { ptr @.str.351, i64 16, i64 0 }, ptr %a35 store { ptr, i64, i64 } %t33, ptr %a36 call void @finch_str_concat(ptr %a34, ptr %a35, ptr %a36) %t37 = load { ptr, i64, i64 }, ptr %a34 call void @finch.lexer.fail(ptr %t21, i64 %t25, i64 %t30, { ptr, i64, i64 } %t37) %t38 = load i8, ptr %a2 ret i8 %t38 } define internal void @finch.copy.S_lexer_Token(ptr %dst, ptr %src) { entry: %t1 = load %S.lexer.Token, ptr %src store %S.lexer.Token %t1, ptr %dst %t2 = getelementptr inbounds %S.lexer.Token, ptr %dst, i32 0, i32 0 %t3 = getelementptr inbounds %S.lexer.Token, ptr %src, i32 0, i32 0 call void @finch_str_copy(ptr %t2, ptr %t3) %t4 = getelementptr inbounds %S.lexer.Token, ptr %dst, i32 0, i32 1 %t5 = getelementptr inbounds %S.lexer.Token, ptr %src, i32 0, i32 1 call void @finch_str_copy(ptr %t4, ptr %t5) ret void } define internal void @finch.copy.arr_S_lexer_Token(ptr %dst, ptr %src) { entry: %a5 = alloca i64, align 16 call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.lexer.Token, ptr null, i32 1) to i64)) %t1 = load ptr, ptr %dst %t2 = load ptr, ptr %src %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 %t4 = load i64, ptr %t3 store i64 0, ptr %a5 br label %n.cond860 n.cond860: %t6 = load i64, ptr %a5 %t7 = icmp slt i64 %t6, %t4 br i1 %t7, label %n.body861, label %n.end862 n.body861: %t8 = getelementptr inbounds %S.lexer.Token, ptr %t1, i64 %t6 %t9 = getelementptr inbounds %S.lexer.Token, ptr %t2, i64 %t6 call void @finch.copy.S_lexer_Token(ptr %t8, ptr %t9) %t10 = load i64, ptr %a5 %t11 = add i64 %t10, 1 store i64 %t11, ptr %a5 br label %n.cond860 n.end862: ret void } define internal { ptr, i64, i64 } @finch.lexer.lex({ ptr, i64, i64 } %p0, { ptr, i64, i64 } %p1) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca %S.lexer.Lexer, align 16 %a18 = alloca ptr, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca i8, align 16 %a98 = alloca i64, align 16 %a103 = alloca i64, align 16 %a169 = alloca %S.lexer.Token, align 16 %a177 = alloca i64, align 16 %a225 = alloca { ptr, i64, i64 }, align 16 %a226 = alloca { ptr, i64, i64 }, align 16 %a241 = alloca { ptr, i64, i64 }, align 16 %a242 = alloca { ptr, i64, i64 }, align 16 %a395 = alloca { ptr, i64, i64 }, align 16 %a396 = alloca { ptr, i64, i64 }, align 16 %a403 = alloca { ptr, i64, i64 }, align 16 %a404 = alloca { ptr, i64, i64 }, align 16 %a405 = alloca { ptr, i64, i64 }, align 16 %a406 = alloca { ptr, i64, i64 }, align 16 %a415 = alloca i8, align 16 %a421 = alloca { ptr, i64, i64 }, align 16 %a448 = alloca i8, align 16 %a454 = alloca i8, align 16 %a461 = alloca { ptr, i64, i64 }, align 16 %a469 = alloca { ptr, i64, i64 }, align 16 %a470 = alloca { ptr, i64, i64 }, align 16 %a487 = alloca { ptr, i64, i64 }, align 16 %a491 = alloca i64, align 16 %a504 = alloca { ptr, i64, i64 }, align 16 %a517 = alloca { ptr, i64, i64 }, align 16 %a518 = alloca { ptr, i64, i64 }, align 16 %a530 = alloca { ptr, i64, i64 }, align 16 %a531 = alloca { ptr, i64, i64 }, align 16 %a532 = alloca { ptr, i64, i64 }, align 16 %a534 = alloca { ptr, i64, i64 }, align 16 %a535 = alloca { ptr, i64, i64 }, align 16 %a536 = alloca { ptr, i64, i64 }, align 16 %a539 = alloca { ptr, i64, i64 }, align 16 %a540 = alloca { ptr, i64, i64 }, align 16 %a541 = alloca { ptr, i64, i64 }, align 16 %a545 = alloca i64, align 16 %a553 = alloca { ptr, i64, i64 }, align 16 %a554 = alloca { ptr, i64, i64 }, align 16 %a558 = alloca { ptr, i64, i64 }, align 16 %a559 = alloca { ptr, i64, i64 }, align 16 %a563 = alloca %S.lexer.Token, align 16 %a564 = alloca %S.lexer.Token, align 16 %a589 = alloca { ptr, i64, i64 }, align 16 %a590 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t3, ptr %a4 call void @finch_str_copy(ptr %a5, ptr %a4) %t6 = load { ptr, i64, i64 }, ptr %a5 %t7 = insertvalue %S.lexer.Lexer zeroinitializer, { ptr, i64, i64 } %t6, 0 %t8 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t8, ptr %a9 call void @finch_str_copy(ptr %a10, ptr %a9) %t11 = load { ptr, i64, i64 }, ptr %a10 %t12 = insertvalue %S.lexer.Lexer %t7, { ptr, i64, i64 } %t11, 1 %t13 = insertvalue %S.lexer.Lexer %t12, i64 0, 2 %t14 = insertvalue %S.lexer.Lexer %t13, i64 1, 3 %t15 = insertvalue %S.lexer.Lexer %t14, i64 1, 4 %t16 = insertvalue %S.lexer.Lexer %t15, i1 true, 5 store %S.lexer.Lexer %t16, ptr %a17 store ptr %a17, ptr %a18 store { ptr, i64, i64 } zeroinitializer, ptr %a19 br label %while.cond554 while.cond554: %t20 = load ptr, ptr %a18 %t21 = icmp eq ptr %t20, null br i1 %t21, label %panic557, label %ok558 panic557: call void @finch_panic(ptr @.str.352, i64 105, ptr @.str.353) unreachable ok558: %t22 = getelementptr inbounds %S.lexer.Lexer, ptr %t20, i32 0, i32 2 %t23 = load i64, ptr %t22 %t24 = load ptr, ptr %a18 %t25 = icmp eq ptr %t24, null br i1 %t25, label %panic559, label %ok560 panic559: call void @finch_panic(ptr @.str.354, i64 105, ptr @.str.355) unreachable ok560: %t26 = getelementptr inbounds %S.lexer.Lexer, ptr %t24, i32 0, i32 0 %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %t26, i32 0, i32 1 %t28 = load i64, ptr %t27 %t29 = icmp slt i64 %t23, %t28 br i1 %t29, label %while.body555, label %while.end556 while.body555: %t30 = load ptr, ptr %a18 %t31 = icmp eq ptr %t30, null br i1 %t31, label %panic561, label %ok562 panic561: call void @finch_panic(ptr @.str.356, i64 106, ptr @.str.357) unreachable ok562: %t32 = getelementptr inbounds %S.lexer.Lexer, ptr %t30, i32 0, i32 0 %t33 = load ptr, ptr %a18 %t34 = icmp eq ptr %t33, null br i1 %t34, label %panic563, label %ok564 panic563: call void @finch_panic(ptr @.str.358, i64 106, ptr @.str.359) unreachable ok564: %t35 = getelementptr inbounds %S.lexer.Lexer, ptr %t33, i32 0, i32 2 %t36 = load i64, ptr %t35 %t37 = load { ptr, i64, i64 }, ptr %t32 %t38 = extractvalue { ptr, i64, i64 } %t37, 1 %t39 = icmp uge i64 %t36, %t38 br i1 %t39, label %range565, label %inrange566 range565: call void @finch_panic_index(ptr @.str.360, i64 106, i64 %t36, i64 %t38) unreachable inrange566: %t40 = extractvalue { ptr, i64, i64 } %t37, 0 %t41 = getelementptr inbounds i8, ptr %t40, i64 %t36 %t42 = load i8, ptr %t41 store i8 %t42, ptr %a43 %t44 = load i8, ptr %a43 %t45 = icmp eq i8 %t44, 32 br label %logic.from567 logic.from567: br i1 %t45, label %logic.end569, label %logic.rhs568 logic.rhs568: %t46 = load i8, ptr %a43 %t47 = icmp eq i8 %t46, 9 br label %logic.rend570 logic.rend570: br label %logic.end569 logic.end569: %t48 = phi i1 [ true, %logic.from567 ], [ %t47, %logic.rend570 ] br label %logic.from571 logic.from571: br i1 %t48, label %logic.end573, label %logic.rhs572 logic.rhs572: %t49 = load i8, ptr %a43 %t50 = icmp eq i8 %t49, 10 br label %logic.rend574 logic.rend574: br label %logic.end573 logic.end573: %t51 = phi i1 [ true, %logic.from571 ], [ %t50, %logic.rend574 ] br label %logic.from575 logic.from575: br i1 %t51, label %logic.end577, label %logic.rhs576 logic.rhs576: %t52 = load i8, ptr %a43 %t53 = icmp eq i8 %t52, 13 br label %logic.rend578 logic.rend578: br label %logic.end577 logic.end577: %t54 = phi i1 [ true, %logic.from575 ], [ %t53, %logic.rend578 ] br i1 %t54, label %then579, label %endif581 then579: %t55 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t55) br label %while.cond554 endif581: %t56 = load i8, ptr %a43 %t57 = icmp eq i8 %t56, 47 br label %logic.from582 logic.from582: br i1 %t57, label %logic.rhs583, label %logic.end584 logic.rhs583: %t58 = load ptr, ptr %a18 %t59 = call i8 @finch.lexer.peek(ptr %t58, i64 1) %t60 = icmp eq i8 %t59, 47 br label %logic.rend585 logic.rend585: br label %logic.end584 logic.end584: %t61 = phi i1 [ false, %logic.from582 ], [ %t60, %logic.rend585 ] br i1 %t61, label %then586, label %endif588 then586: br label %while.cond589 while.cond589: %t62 = load ptr, ptr %a18 %t63 = icmp eq ptr %t62, null br i1 %t63, label %panic592, label %ok593 panic592: call void @finch_panic(ptr @.str.361, i64 112, ptr @.str.362) unreachable ok593: %t64 = getelementptr inbounds %S.lexer.Lexer, ptr %t62, i32 0, i32 2 %t65 = load i64, ptr %t64 %t66 = load ptr, ptr %a18 %t67 = icmp eq ptr %t66, null br i1 %t67, label %panic594, label %ok595 panic594: call void @finch_panic(ptr @.str.363, i64 112, ptr @.str.364) unreachable ok595: %t68 = getelementptr inbounds %S.lexer.Lexer, ptr %t66, i32 0, i32 0 %t69 = getelementptr inbounds { ptr, i64, i64 }, ptr %t68, i32 0, i32 1 %t70 = load i64, ptr %t69 %t71 = icmp slt i64 %t65, %t70 br label %logic.from596 logic.from596: br i1 %t71, label %logic.rhs597, label %logic.end598 logic.rhs597: %t72 = load ptr, ptr %a18 %t73 = icmp eq ptr %t72, null br i1 %t73, label %panic599, label %ok600 panic599: call void @finch_panic(ptr @.str.365, i64 112, ptr @.str.366) unreachable ok600: %t74 = getelementptr inbounds %S.lexer.Lexer, ptr %t72, i32 0, i32 0 %t75 = load ptr, ptr %a18 %t76 = icmp eq ptr %t75, null br i1 %t76, label %panic601, label %ok602 panic601: call void @finch_panic(ptr @.str.367, i64 112, ptr @.str.368) unreachable ok602: %t77 = getelementptr inbounds %S.lexer.Lexer, ptr %t75, i32 0, i32 2 %t78 = load i64, ptr %t77 %t79 = load { ptr, i64, i64 }, ptr %t74 %t80 = extractvalue { ptr, i64, i64 } %t79, 1 %t81 = icmp uge i64 %t78, %t80 br i1 %t81, label %range603, label %inrange604 range603: call void @finch_panic_index(ptr @.str.369, i64 112, i64 %t78, i64 %t80) unreachable inrange604: %t82 = extractvalue { ptr, i64, i64 } %t79, 0 %t83 = getelementptr inbounds i8, ptr %t82, i64 %t78 %t84 = load i8, ptr %t83 %t85 = icmp ne i8 %t84, 10 br label %logic.rend605 logic.rend605: br label %logic.end598 logic.end598: %t86 = phi i1 [ false, %logic.from596 ], [ %t85, %logic.rend605 ] br i1 %t86, label %while.body590, label %while.end591 while.body590: %t87 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t87) br label %while.cond589 while.end591: br label %while.cond554 endif588: %t88 = load i8, ptr %a43 %t89 = icmp eq i8 %t88, 47 br label %logic.from606 logic.from606: br i1 %t89, label %logic.rhs607, label %logic.end608 logic.rhs607: %t90 = load ptr, ptr %a18 %t91 = call i8 @finch.lexer.peek(ptr %t90, i64 1) %t92 = icmp eq i8 %t91, 42 br label %logic.rend609 logic.rend609: br label %logic.end608 logic.end608: %t93 = phi i1 [ false, %logic.from606 ], [ %t92, %logic.rend609 ] br i1 %t93, label %then610, label %endif612 then610: %t94 = load ptr, ptr %a18 %t95 = icmp eq ptr %t94, null br i1 %t95, label %panic613, label %ok614 panic613: call void @finch_panic(ptr @.str.370, i64 118, ptr @.str.371) unreachable ok614: %t96 = getelementptr inbounds %S.lexer.Lexer, ptr %t94, i32 0, i32 3 %t97 = load i64, ptr %t96 store i64 %t97, ptr %a98 %t99 = load ptr, ptr %a18 %t100 = icmp eq ptr %t99, null br i1 %t100, label %panic615, label %ok616 panic615: call void @finch_panic(ptr @.str.372, i64 119, ptr @.str.373) unreachable ok616: %t101 = getelementptr inbounds %S.lexer.Lexer, ptr %t99, i32 0, i32 4 %t102 = load i64, ptr %t101 store i64 %t102, ptr %a103 %t104 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t104) %t105 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t105) br label %while.cond617 while.cond617: %t106 = load ptr, ptr %a18 %t107 = icmp eq ptr %t106, null br i1 %t107, label %panic620, label %ok621 panic620: call void @finch_panic(ptr @.str.374, i64 122, ptr @.str.375) unreachable ok621: %t108 = getelementptr inbounds %S.lexer.Lexer, ptr %t106, i32 0, i32 2 %t109 = load i64, ptr %t108 %t110 = load ptr, ptr %a18 %t111 = icmp eq ptr %t110, null br i1 %t111, label %panic622, label %ok623 panic622: call void @finch_panic(ptr @.str.376, i64 122, ptr @.str.377) unreachable ok623: %t112 = getelementptr inbounds %S.lexer.Lexer, ptr %t110, i32 0, i32 0 %t113 = getelementptr inbounds { ptr, i64, i64 }, ptr %t112, i32 0, i32 1 %t114 = load i64, ptr %t113 %t115 = icmp slt i64 %t109, %t114 br label %logic.from624 logic.from624: br i1 %t115, label %logic.rhs625, label %logic.end626 logic.rhs625: %t116 = load ptr, ptr %a18 %t117 = icmp eq ptr %t116, null br i1 %t117, label %panic627, label %ok628 panic627: call void @finch_panic(ptr @.str.378, i64 122, ptr @.str.379) unreachable ok628: %t118 = getelementptr inbounds %S.lexer.Lexer, ptr %t116, i32 0, i32 0 %t119 = load ptr, ptr %a18 %t120 = icmp eq ptr %t119, null br i1 %t120, label %panic629, label %ok630 panic629: call void @finch_panic(ptr @.str.380, i64 122, ptr @.str.381) unreachable ok630: %t121 = getelementptr inbounds %S.lexer.Lexer, ptr %t119, i32 0, i32 2 %t122 = load i64, ptr %t121 %t123 = load { ptr, i64, i64 }, ptr %t118 %t124 = extractvalue { ptr, i64, i64 } %t123, 1 %t125 = icmp uge i64 %t122, %t124 br i1 %t125, label %range631, label %inrange632 range631: call void @finch_panic_index(ptr @.str.382, i64 122, i64 %t122, i64 %t124) unreachable inrange632: %t126 = extractvalue { ptr, i64, i64 } %t123, 0 %t127 = getelementptr inbounds i8, ptr %t126, i64 %t122 %t128 = load i8, ptr %t127 %t129 = icmp eq i8 %t128, 42 br label %logic.from633 logic.from633: br i1 %t129, label %logic.rhs634, label %logic.end635 logic.rhs634: %t130 = load ptr, ptr %a18 %t131 = call i8 @finch.lexer.peek(ptr %t130, i64 1) %t132 = icmp eq i8 %t131, 47 br label %logic.rend636 logic.rend636: br label %logic.end635 logic.end635: %t133 = phi i1 [ false, %logic.from633 ], [ %t132, %logic.rend636 ] %t134 = xor i1 %t133, true br label %logic.rend637 logic.rend637: br label %logic.end626 logic.end626: %t135 = phi i1 [ false, %logic.from624 ], [ %t134, %logic.rend637 ] br i1 %t135, label %while.body618, label %while.end619 while.body618: %t136 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t136) br label %while.cond617 while.end619: %t137 = load ptr, ptr %a18 %t138 = icmp eq ptr %t137, null br i1 %t138, label %panic638, label %ok639 panic638: call void @finch_panic(ptr @.str.383, i64 125, ptr @.str.384) unreachable ok639: %t139 = getelementptr inbounds %S.lexer.Lexer, ptr %t137, i32 0, i32 2 %t140 = load i64, ptr %t139 %t141 = load ptr, ptr %a18 %t142 = icmp eq ptr %t141, null br i1 %t142, label %panic640, label %ok641 panic640: call void @finch_panic(ptr @.str.385, i64 125, ptr @.str.386) unreachable ok641: %t143 = getelementptr inbounds %S.lexer.Lexer, ptr %t141, i32 0, i32 0 %t144 = getelementptr inbounds { ptr, i64, i64 }, ptr %t143, i32 0, i32 1 %t145 = load i64, ptr %t144 %t146 = icmp sge i64 %t140, %t145 br i1 %t146, label %then642, label %endif644 then642: %t147 = load ptr, ptr %a18 %t148 = load i64, ptr %a98 %t149 = load i64, ptr %a103 call void @finch.lexer.fail(ptr %t147, i64 %t148, i64 %t149, { ptr, i64, i64 } { ptr @.str.387, i64 36, i64 0 }) br label %endif644 endif644: %t150 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t150) %t151 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t151) br label %while.cond554 endif612: %t152 = insertvalue %S.lexer.Token zeroinitializer, { ptr, i64, i64 } { ptr @.str.388, i64 0, i64 0 }, 0 %t153 = insertvalue %S.lexer.Token %t152, { ptr, i64, i64 } { ptr @.str.389, i64 0, i64 0 }, 1 %t154 = load ptr, ptr %a18 %t155 = icmp eq ptr %t154, null br i1 %t155, label %panic645, label %ok646 panic645: call void @finch_panic(ptr @.str.390, i64 133, ptr @.str.391) unreachable ok646: %t156 = getelementptr inbounds %S.lexer.Lexer, ptr %t154, i32 0, i32 3 %t157 = load i64, ptr %t156 %t158 = insertvalue %S.lexer.Token %t153, i64 %t157, 2 %t159 = load ptr, ptr %a18 %t160 = icmp eq ptr %t159, null br i1 %t160, label %panic647, label %ok648 panic647: call void @finch_panic(ptr @.str.392, i64 133, ptr @.str.393) unreachable ok648: %t161 = getelementptr inbounds %S.lexer.Lexer, ptr %t159, i32 0, i32 4 %t162 = load i64, ptr %t161 %t163 = insertvalue %S.lexer.Token %t158, i64 %t162, 3 %t164 = load ptr, ptr %a18 %t165 = icmp eq ptr %t164, null br i1 %t165, label %panic649, label %ok650 panic649: call void @finch_panic(ptr @.str.394, i64 133, ptr @.str.395) unreachable ok650: %t166 = getelementptr inbounds %S.lexer.Lexer, ptr %t164, i32 0, i32 5 %t167 = load i1, ptr %t166 %t168 = insertvalue %S.lexer.Token %t163, i1 %t167, 4 store %S.lexer.Token %t168, ptr %a169 %t170 = load ptr, ptr %a18 %t171 = icmp eq ptr %t170, null br i1 %t171, label %panic651, label %ok652 panic651: call void @finch_panic(ptr @.str.396, i64 134, ptr @.str.397) unreachable ok652: %t172 = getelementptr inbounds %S.lexer.Lexer, ptr %t170, i32 0, i32 5 store i1 false, ptr %t172 %t173 = load ptr, ptr %a18 %t174 = icmp eq ptr %t173, null br i1 %t174, label %panic653, label %ok654 panic653: call void @finch_panic(ptr @.str.398, i64 135, ptr @.str.399) unreachable ok654: %t175 = getelementptr inbounds %S.lexer.Lexer, ptr %t173, i32 0, i32 2 %t176 = load i64, ptr %t175 store i64 %t176, ptr %a177 %t178 = load i8, ptr %a43 %t179 = call i1 @finch.lexer.isAlpha(i8 %t178) br i1 %t179, label %then655, label %else656 then655: br label %while.cond658 while.cond658: %t180 = load ptr, ptr %a18 %t181 = icmp eq ptr %t180, null br i1 %t181, label %panic661, label %ok662 panic661: call void @finch_panic(ptr @.str.400, i64 137, ptr @.str.401) unreachable ok662: %t182 = getelementptr inbounds %S.lexer.Lexer, ptr %t180, i32 0, i32 2 %t183 = load i64, ptr %t182 %t184 = load ptr, ptr %a18 %t185 = icmp eq ptr %t184, null br i1 %t185, label %panic663, label %ok664 panic663: call void @finch_panic(ptr @.str.402, i64 137, ptr @.str.403) unreachable ok664: %t186 = getelementptr inbounds %S.lexer.Lexer, ptr %t184, i32 0, i32 0 %t187 = getelementptr inbounds { ptr, i64, i64 }, ptr %t186, i32 0, i32 1 %t188 = load i64, ptr %t187 %t189 = icmp slt i64 %t183, %t188 br label %logic.from665 logic.from665: br i1 %t189, label %logic.rhs666, label %logic.end667 logic.rhs666: %t190 = load ptr, ptr %a18 %t191 = icmp eq ptr %t190, null br i1 %t191, label %panic668, label %ok669 panic668: call void @finch_panic(ptr @.str.404, i64 137, ptr @.str.405) unreachable ok669: %t192 = getelementptr inbounds %S.lexer.Lexer, ptr %t190, i32 0, i32 0 %t193 = load ptr, ptr %a18 %t194 = icmp eq ptr %t193, null br i1 %t194, label %panic670, label %ok671 panic670: call void @finch_panic(ptr @.str.406, i64 137, ptr @.str.407) unreachable ok671: %t195 = getelementptr inbounds %S.lexer.Lexer, ptr %t193, i32 0, i32 2 %t196 = load i64, ptr %t195 %t197 = load { ptr, i64, i64 }, ptr %t192 %t198 = extractvalue { ptr, i64, i64 } %t197, 1 %t199 = icmp uge i64 %t196, %t198 br i1 %t199, label %range672, label %inrange673 range672: call void @finch_panic_index(ptr @.str.408, i64 137, i64 %t196, i64 %t198) unreachable inrange673: %t200 = extractvalue { ptr, i64, i64 } %t197, 0 %t201 = getelementptr inbounds i8, ptr %t200, i64 %t196 %t202 = load i8, ptr %t201 %t203 = call i1 @finch.lexer.isAlpha(i8 %t202) br label %logic.from674 logic.from674: br i1 %t203, label %logic.end676, label %logic.rhs675 logic.rhs675: %t204 = load ptr, ptr %a18 %t205 = icmp eq ptr %t204, null br i1 %t205, label %panic677, label %ok678 panic677: call void @finch_panic(ptr @.str.409, i64 137, ptr @.str.410) unreachable ok678: %t206 = getelementptr inbounds %S.lexer.Lexer, ptr %t204, i32 0, i32 0 %t207 = load ptr, ptr %a18 %t208 = icmp eq ptr %t207, null br i1 %t208, label %panic679, label %ok680 panic679: call void @finch_panic(ptr @.str.411, i64 137, ptr @.str.412) unreachable ok680: %t209 = getelementptr inbounds %S.lexer.Lexer, ptr %t207, i32 0, i32 2 %t210 = load i64, ptr %t209 %t211 = load { ptr, i64, i64 }, ptr %t206 %t212 = extractvalue { ptr, i64, i64 } %t211, 1 %t213 = icmp uge i64 %t210, %t212 br i1 %t213, label %range681, label %inrange682 range681: call void @finch_panic_index(ptr @.str.413, i64 137, i64 %t210, i64 %t212) unreachable inrange682: %t214 = extractvalue { ptr, i64, i64 } %t211, 0 %t215 = getelementptr inbounds i8, ptr %t214, i64 %t210 %t216 = load i8, ptr %t215 %t217 = call i1 @finch.lexer.isDigit(i8 %t216) br label %logic.rend683 logic.rend683: br label %logic.end676 logic.end676: %t218 = phi i1 [ true, %logic.from674 ], [ %t217, %logic.rend683 ] br label %logic.rend684 logic.rend684: br label %logic.end667 logic.end667: %t219 = phi i1 [ false, %logic.from665 ], [ %t218, %logic.rend684 ] br i1 %t219, label %while.body659, label %while.end660 while.body659: %t220 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t220) br label %while.cond658 while.end660: %t221 = load ptr, ptr %a18 %t222 = icmp eq ptr %t221, null br i1 %t222, label %panic685, label %ok686 panic685: call void @finch_panic(ptr @.str.414, i64 140, ptr @.str.415) unreachable ok686: %t223 = getelementptr inbounds %S.lexer.Lexer, ptr %t221, i32 0, i32 0 %t224 = load { ptr, i64, i64 }, ptr %t223 store { ptr, i64, i64 } %t224, ptr %a225 %t227 = load i64, ptr %a177 %t228 = load ptr, ptr %a18 %t229 = icmp eq ptr %t228, null br i1 %t229, label %panic687, label %ok688 panic687: call void @finch_panic(ptr @.str.417, i64 140, ptr @.str.418) unreachable ok688: %t230 = getelementptr inbounds %S.lexer.Lexer, ptr %t228, i32 0, i32 2 %t231 = load i64, ptr %t230 call void @finch_str_sub(ptr %a226, ptr %a225, i64 %t227, i64 %t231, ptr @.str.416, i64 140) %t232 = load { ptr, i64, i64 }, ptr %a226 %t233 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 1 store { ptr, i64, i64 } %t232, ptr %t233 %t234 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 0 store { ptr, i64, i64 } { ptr @.str.419, i64 5, i64 0 }, ptr %t234 %t235 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 1 %t236 = load { ptr, i64, i64 }, ptr %t235 %t237 = call i1 @finch.lexer.isKeyword({ ptr, i64, i64 } %t236) br i1 %t237, label %then689, label %endif691 then689: %t238 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 1 %t239 = load { ptr, i64, i64 }, ptr %t238 %t240 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 0 store { ptr, i64, i64 } %t239, ptr %a241 call void @finch_str_copy(ptr %a242, ptr %a241) %t243 = load { ptr, i64, i64 }, ptr %a242 store { ptr, i64, i64 } %t243, ptr %t240 br label %endif691 endif691: br label %endif657 else656: %t244 = load i8, ptr %a43 %t245 = call i1 @finch.lexer.isDigit(i8 %t244) br i1 %t245, label %then692, label %else693 then692: %t246 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 0 store { ptr, i64, i64 } { ptr @.str.420, i64 3, i64 0 }, ptr %t246 %t247 = load i8, ptr %a43 %t248 = icmp eq i8 %t247, 48 br label %logic.from695 logic.from695: br i1 %t248, label %logic.rhs696, label %logic.end697 logic.rhs696: %t249 = load ptr, ptr %a18 %t250 = call i8 @finch.lexer.peek(ptr %t249, i64 1) %t251 = icmp eq i8 %t250, 120 br label %logic.from698 logic.from698: br i1 %t251, label %logic.end700, label %logic.rhs699 logic.rhs699: %t252 = load ptr, ptr %a18 %t253 = call i8 @finch.lexer.peek(ptr %t252, i64 1) %t254 = icmp eq i8 %t253, 88 br label %logic.rend701 logic.rend701: br label %logic.end700 logic.end700: %t255 = phi i1 [ true, %logic.from698 ], [ %t254, %logic.rend701 ] br label %logic.rend702 logic.rend702: br label %logic.end697 logic.end697: %t256 = phi i1 [ false, %logic.from695 ], [ %t255, %logic.rend702 ] br i1 %t256, label %then703, label %else704 then703: %t257 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t257) %t258 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t258) br label %while.cond706 while.cond706: %t259 = load ptr, ptr %a18 %t260 = icmp eq ptr %t259, null br i1 %t260, label %panic709, label %ok710 panic709: call void @finch_panic(ptr @.str.421, i64 150, ptr @.str.422) unreachable ok710: %t261 = getelementptr inbounds %S.lexer.Lexer, ptr %t259, i32 0, i32 2 %t262 = load i64, ptr %t261 %t263 = load ptr, ptr %a18 %t264 = icmp eq ptr %t263, null br i1 %t264, label %panic711, label %ok712 panic711: call void @finch_panic(ptr @.str.423, i64 150, ptr @.str.424) unreachable ok712: %t265 = getelementptr inbounds %S.lexer.Lexer, ptr %t263, i32 0, i32 0 %t266 = getelementptr inbounds { ptr, i64, i64 }, ptr %t265, i32 0, i32 1 %t267 = load i64, ptr %t266 %t268 = icmp slt i64 %t262, %t267 br label %logic.from713 logic.from713: br i1 %t268, label %logic.rhs714, label %logic.end715 logic.rhs714: %t269 = load ptr, ptr %a18 %t270 = icmp eq ptr %t269, null br i1 %t270, label %panic716, label %ok717 panic716: call void @finch_panic(ptr @.str.425, i64 150, ptr @.str.426) unreachable ok717: %t271 = getelementptr inbounds %S.lexer.Lexer, ptr %t269, i32 0, i32 0 %t272 = load ptr, ptr %a18 %t273 = icmp eq ptr %t272, null br i1 %t273, label %panic718, label %ok719 panic718: call void @finch_panic(ptr @.str.427, i64 150, ptr @.str.428) unreachable ok719: %t274 = getelementptr inbounds %S.lexer.Lexer, ptr %t272, i32 0, i32 2 %t275 = load i64, ptr %t274 %t276 = load { ptr, i64, i64 }, ptr %t271 %t277 = extractvalue { ptr, i64, i64 } %t276, 1 %t278 = icmp uge i64 %t275, %t277 br i1 %t278, label %range720, label %inrange721 range720: call void @finch_panic_index(ptr @.str.429, i64 150, i64 %t275, i64 %t277) unreachable inrange721: %t279 = extractvalue { ptr, i64, i64 } %t276, 0 %t280 = getelementptr inbounds i8, ptr %t279, i64 %t275 %t281 = load i8, ptr %t280 %t282 = call i1 @finch.lexer.isHex(i8 %t281) br label %logic.from722 logic.from722: br i1 %t282, label %logic.end724, label %logic.rhs723 logic.rhs723: %t283 = load ptr, ptr %a18 %t284 = icmp eq ptr %t283, null br i1 %t284, label %panic725, label %ok726 panic725: call void @finch_panic(ptr @.str.430, i64 150, ptr @.str.431) unreachable ok726: %t285 = getelementptr inbounds %S.lexer.Lexer, ptr %t283, i32 0, i32 0 %t286 = load ptr, ptr %a18 %t287 = icmp eq ptr %t286, null br i1 %t287, label %panic727, label %ok728 panic727: call void @finch_panic(ptr @.str.432, i64 150, ptr @.str.433) unreachable ok728: %t288 = getelementptr inbounds %S.lexer.Lexer, ptr %t286, i32 0, i32 2 %t289 = load i64, ptr %t288 %t290 = load { ptr, i64, i64 }, ptr %t285 %t291 = extractvalue { ptr, i64, i64 } %t290, 1 %t292 = icmp uge i64 %t289, %t291 br i1 %t292, label %range729, label %inrange730 range729: call void @finch_panic_index(ptr @.str.434, i64 150, i64 %t289, i64 %t291) unreachable inrange730: %t293 = extractvalue { ptr, i64, i64 } %t290, 0 %t294 = getelementptr inbounds i8, ptr %t293, i64 %t289 %t295 = load i8, ptr %t294 %t296 = icmp eq i8 %t295, 95 br label %logic.rend731 logic.rend731: br label %logic.end724 logic.end724: %t297 = phi i1 [ true, %logic.from722 ], [ %t296, %logic.rend731 ] br label %logic.rend732 logic.rend732: br label %logic.end715 logic.end715: %t298 = phi i1 [ false, %logic.from713 ], [ %t297, %logic.rend732 ] br i1 %t298, label %while.body707, label %while.end708 while.body707: %t299 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t299) br label %while.cond706 while.end708: br label %endif705 else704: br label %while.cond733 while.cond733: %t300 = load ptr, ptr %a18 %t301 = icmp eq ptr %t300, null br i1 %t301, label %panic736, label %ok737 panic736: call void @finch_panic(ptr @.str.435, i64 154, ptr @.str.436) unreachable ok737: %t302 = getelementptr inbounds %S.lexer.Lexer, ptr %t300, i32 0, i32 2 %t303 = load i64, ptr %t302 %t304 = load ptr, ptr %a18 %t305 = icmp eq ptr %t304, null br i1 %t305, label %panic738, label %ok739 panic738: call void @finch_panic(ptr @.str.437, i64 154, ptr @.str.438) unreachable ok739: %t306 = getelementptr inbounds %S.lexer.Lexer, ptr %t304, i32 0, i32 0 %t307 = getelementptr inbounds { ptr, i64, i64 }, ptr %t306, i32 0, i32 1 %t308 = load i64, ptr %t307 %t309 = icmp slt i64 %t303, %t308 br label %logic.from740 logic.from740: br i1 %t309, label %logic.rhs741, label %logic.end742 logic.rhs741: %t310 = load ptr, ptr %a18 %t311 = icmp eq ptr %t310, null br i1 %t311, label %panic743, label %ok744 panic743: call void @finch_panic(ptr @.str.439, i64 154, ptr @.str.440) unreachable ok744: %t312 = getelementptr inbounds %S.lexer.Lexer, ptr %t310, i32 0, i32 0 %t313 = load ptr, ptr %a18 %t314 = icmp eq ptr %t313, null br i1 %t314, label %panic745, label %ok746 panic745: call void @finch_panic(ptr @.str.441, i64 154, ptr @.str.442) unreachable ok746: %t315 = getelementptr inbounds %S.lexer.Lexer, ptr %t313, i32 0, i32 2 %t316 = load i64, ptr %t315 %t317 = load { ptr, i64, i64 }, ptr %t312 %t318 = extractvalue { ptr, i64, i64 } %t317, 1 %t319 = icmp uge i64 %t316, %t318 br i1 %t319, label %range747, label %inrange748 range747: call void @finch_panic_index(ptr @.str.443, i64 154, i64 %t316, i64 %t318) unreachable inrange748: %t320 = extractvalue { ptr, i64, i64 } %t317, 0 %t321 = getelementptr inbounds i8, ptr %t320, i64 %t316 %t322 = load i8, ptr %t321 %t323 = call i1 @finch.lexer.isDigit(i8 %t322) br label %logic.from749 logic.from749: br i1 %t323, label %logic.end751, label %logic.rhs750 logic.rhs750: %t324 = load ptr, ptr %a18 %t325 = icmp eq ptr %t324, null br i1 %t325, label %panic752, label %ok753 panic752: call void @finch_panic(ptr @.str.444, i64 154, ptr @.str.445) unreachable ok753: %t326 = getelementptr inbounds %S.lexer.Lexer, ptr %t324, i32 0, i32 0 %t327 = load ptr, ptr %a18 %t328 = icmp eq ptr %t327, null br i1 %t328, label %panic754, label %ok755 panic754: call void @finch_panic(ptr @.str.446, i64 154, ptr @.str.447) unreachable ok755: %t329 = getelementptr inbounds %S.lexer.Lexer, ptr %t327, i32 0, i32 2 %t330 = load i64, ptr %t329 %t331 = load { ptr, i64, i64 }, ptr %t326 %t332 = extractvalue { ptr, i64, i64 } %t331, 1 %t333 = icmp uge i64 %t330, %t332 br i1 %t333, label %range756, label %inrange757 range756: call void @finch_panic_index(ptr @.str.448, i64 154, i64 %t330, i64 %t332) unreachable inrange757: %t334 = extractvalue { ptr, i64, i64 } %t331, 0 %t335 = getelementptr inbounds i8, ptr %t334, i64 %t330 %t336 = load i8, ptr %t335 %t337 = icmp eq i8 %t336, 95 br label %logic.rend758 logic.rend758: br label %logic.end751 logic.end751: %t338 = phi i1 [ true, %logic.from749 ], [ %t337, %logic.rend758 ] br label %logic.rend759 logic.rend759: br label %logic.end742 logic.end742: %t339 = phi i1 [ false, %logic.from740 ], [ %t338, %logic.rend759 ] br i1 %t339, label %while.body734, label %while.end735 while.body734: %t340 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t340) br label %while.cond733 while.end735: %t341 = load ptr, ptr %a18 %t342 = call i8 @finch.lexer.peek(ptr %t341, i64 0) %t343 = icmp eq i8 %t342, 46 br label %logic.from760 logic.from760: br i1 %t343, label %logic.rhs761, label %logic.end762 logic.rhs761: %t344 = load ptr, ptr %a18 %t345 = call i8 @finch.lexer.peek(ptr %t344, i64 1) %t346 = call i1 @finch.lexer.isDigit(i8 %t345) br label %logic.rend763 logic.rend763: br label %logic.end762 logic.end762: %t347 = phi i1 [ false, %logic.from760 ], [ %t346, %logic.rend763 ] br i1 %t347, label %then764, label %endif766 then764: %t348 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 0 store { ptr, i64, i64 } { ptr @.str.449, i64 5, i64 0 }, ptr %t348 %t349 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t349) br label %while.cond767 while.cond767: %t350 = load ptr, ptr %a18 %t351 = icmp eq ptr %t350, null br i1 %t351, label %panic770, label %ok771 panic770: call void @finch_panic(ptr @.str.450, i64 160, ptr @.str.451) unreachable ok771: %t352 = getelementptr inbounds %S.lexer.Lexer, ptr %t350, i32 0, i32 2 %t353 = load i64, ptr %t352 %t354 = load ptr, ptr %a18 %t355 = icmp eq ptr %t354, null br i1 %t355, label %panic772, label %ok773 panic772: call void @finch_panic(ptr @.str.452, i64 160, ptr @.str.453) unreachable ok773: %t356 = getelementptr inbounds %S.lexer.Lexer, ptr %t354, i32 0, i32 0 %t357 = getelementptr inbounds { ptr, i64, i64 }, ptr %t356, i32 0, i32 1 %t358 = load i64, ptr %t357 %t359 = icmp slt i64 %t353, %t358 br label %logic.from774 logic.from774: br i1 %t359, label %logic.rhs775, label %logic.end776 logic.rhs775: %t360 = load ptr, ptr %a18 %t361 = icmp eq ptr %t360, null br i1 %t361, label %panic777, label %ok778 panic777: call void @finch_panic(ptr @.str.454, i64 160, ptr @.str.455) unreachable ok778: %t362 = getelementptr inbounds %S.lexer.Lexer, ptr %t360, i32 0, i32 0 %t363 = load ptr, ptr %a18 %t364 = icmp eq ptr %t363, null br i1 %t364, label %panic779, label %ok780 panic779: call void @finch_panic(ptr @.str.456, i64 160, ptr @.str.457) unreachable ok780: %t365 = getelementptr inbounds %S.lexer.Lexer, ptr %t363, i32 0, i32 2 %t366 = load i64, ptr %t365 %t367 = load { ptr, i64, i64 }, ptr %t362 %t368 = extractvalue { ptr, i64, i64 } %t367, 1 %t369 = icmp uge i64 %t366, %t368 br i1 %t369, label %range781, label %inrange782 range781: call void @finch_panic_index(ptr @.str.458, i64 160, i64 %t366, i64 %t368) unreachable inrange782: %t370 = extractvalue { ptr, i64, i64 } %t367, 0 %t371 = getelementptr inbounds i8, ptr %t370, i64 %t366 %t372 = load i8, ptr %t371 %t373 = call i1 @finch.lexer.isDigit(i8 %t372) br label %logic.from783 logic.from783: br i1 %t373, label %logic.end785, label %logic.rhs784 logic.rhs784: %t374 = load ptr, ptr %a18 %t375 = icmp eq ptr %t374, null br i1 %t375, label %panic786, label %ok787 panic786: call void @finch_panic(ptr @.str.459, i64 160, ptr @.str.460) unreachable ok787: %t376 = getelementptr inbounds %S.lexer.Lexer, ptr %t374, i32 0, i32 0 %t377 = load ptr, ptr %a18 %t378 = icmp eq ptr %t377, null br i1 %t378, label %panic788, label %ok789 panic788: call void @finch_panic(ptr @.str.461, i64 160, ptr @.str.462) unreachable ok789: %t379 = getelementptr inbounds %S.lexer.Lexer, ptr %t377, i32 0, i32 2 %t380 = load i64, ptr %t379 %t381 = load { ptr, i64, i64 }, ptr %t376 %t382 = extractvalue { ptr, i64, i64 } %t381, 1 %t383 = icmp uge i64 %t380, %t382 br i1 %t383, label %range790, label %inrange791 range790: call void @finch_panic_index(ptr @.str.463, i64 160, i64 %t380, i64 %t382) unreachable inrange791: %t384 = extractvalue { ptr, i64, i64 } %t381, 0 %t385 = getelementptr inbounds i8, ptr %t384, i64 %t380 %t386 = load i8, ptr %t385 %t387 = icmp eq i8 %t386, 95 br label %logic.rend792 logic.rend792: br label %logic.end785 logic.end785: %t388 = phi i1 [ true, %logic.from783 ], [ %t387, %logic.rend792 ] br label %logic.rend793 logic.rend793: br label %logic.end776 logic.end776: %t389 = phi i1 [ false, %logic.from774 ], [ %t388, %logic.rend793 ] br i1 %t389, label %while.body768, label %while.end769 while.body768: %t390 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t390) br label %while.cond767 while.end769: br label %endif766 endif766: br label %endif705 endif705: %t391 = load ptr, ptr %a18 %t392 = icmp eq ptr %t391, null br i1 %t392, label %panic794, label %ok795 panic794: call void @finch_panic(ptr @.str.464, i64 165, ptr @.str.465) unreachable ok795: %t393 = getelementptr inbounds %S.lexer.Lexer, ptr %t391, i32 0, i32 0 %t394 = load { ptr, i64, i64 }, ptr %t393 store { ptr, i64, i64 } %t394, ptr %a395 %t397 = load i64, ptr %a177 %t398 = load ptr, ptr %a18 %t399 = icmp eq ptr %t398, null br i1 %t399, label %panic796, label %ok797 panic796: call void @finch_panic(ptr @.str.467, i64 165, ptr @.str.468) unreachable ok797: %t400 = getelementptr inbounds %S.lexer.Lexer, ptr %t398, i32 0, i32 2 %t401 = load i64, ptr %t400 call void @finch_str_sub(ptr %a396, ptr %a395, i64 %t397, i64 %t401, ptr @.str.466, i64 165) %t402 = load { ptr, i64, i64 }, ptr %a396 store { ptr, i64, i64 } %t402, ptr %a403 store { ptr, i64, i64 } { ptr @.str.470, i64 1, i64 0 }, ptr %a405 store { ptr, i64, i64 } { ptr @.str.471, i64 0, i64 0 }, ptr %a406 call void @finch_str_replace(ptr %a404, ptr %a403, ptr %a405, ptr %a406) %t407 = load { ptr, i64, i64 }, ptr %a404 %t408 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 1 store { ptr, i64, i64 } %t407, ptr %t408 br label %endif694 else693: %t409 = load i8, ptr %a43 %t410 = icmp eq i8 %t409, 34 br label %logic.from798 logic.from798: br i1 %t410, label %logic.end800, label %logic.rhs799 logic.rhs799: %t411 = load i8, ptr %a43 %t412 = icmp eq i8 %t411, 39 br label %logic.rend801 logic.rend801: br label %logic.end800 logic.end800: %t413 = phi i1 [ true, %logic.from798 ], [ %t412, %logic.rend801 ] br i1 %t413, label %then802, label %else803 then802: %t414 = load i8, ptr %a43 store i8 %t414, ptr %a415 %t416 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 0 store { ptr, i64, i64 } { ptr @.str.472, i64 6, i64 0 }, ptr %t416 %t417 = load i8, ptr %a415 %t418 = icmp eq i8 %t417, 39 br i1 %t418, label %then805, label %endif807 then805: %t419 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 0 store { ptr, i64, i64 } { ptr @.str.473, i64 4, i64 0 }, ptr %t419 br label %endif807 endif807: %t420 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t420) store { ptr, i64, i64 } zeroinitializer, ptr %a421 br label %while.cond808 while.cond808: %t422 = load ptr, ptr %a18 %t423 = call i8 @finch.lexer.peek(ptr %t422, i64 0) %t424 = load i8, ptr %a415 %t425 = icmp ne i8 %t423, %t424 br i1 %t425, label %while.body809, label %while.end810 while.body809: %t426 = load ptr, ptr %a18 %t427 = call i8 @finch.lexer.peek(ptr %t426, i64 0) %t428 = trunc i64 0 to i8 %t429 = icmp eq i8 %t427, %t428 br label %logic.from811 logic.from811: br i1 %t429, label %logic.end813, label %logic.rhs812 logic.rhs812: %t430 = load ptr, ptr %a18 %t431 = call i8 @finch.lexer.peek(ptr %t430, i64 0) %t432 = icmp eq i8 %t431, 10 br label %logic.rend814 logic.rend814: br label %logic.end813 logic.end813: %t433 = phi i1 [ true, %logic.from811 ], [ %t432, %logic.rend814 ] br i1 %t433, label %then815, label %endif817 then815: %t434 = load i8, ptr %a415 %t435 = icmp eq i8 %t434, 34 br i1 %t435, label %then818, label %endif820 then818: %t436 = load ptr, ptr %a18 %t437 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 2 %t438 = load i64, ptr %t437 %t439 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 3 %t440 = load i64, ptr %t439 call void @finch.lexer.fail(ptr %t436, i64 %t438, i64 %t440, { ptr, i64, i64 } { ptr @.str.474, i64 34, i64 0 }) br label %endif820 endif820: %t441 = load ptr, ptr %a18 %t442 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 2 %t443 = load i64, ptr %t442 %t444 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 3 %t445 = load i64, ptr %t444 call void @finch.lexer.fail(ptr %t441, i64 %t443, i64 %t445, { ptr, i64, i64 } { ptr @.str.475, i64 32, i64 0 }) br label %endif817 endif817: %t446 = load ptr, ptr %a18 %t447 = call i8 @finch.lexer.peek(ptr %t446, i64 0) store i8 %t447, ptr %a448 %t449 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t449) %t450 = load i8, ptr %a448 %t451 = icmp eq i8 %t450, 92 br i1 %t451, label %then821, label %endif823 then821: %t452 = load ptr, ptr %a18 %t453 = call i8 @finch.lexer.peek(ptr %t452, i64 0) store i8 %t453, ptr %a454 %t455 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t455) %t456 = load ptr, ptr %a18 %t457 = load i8, ptr %a454 %t458 = call i8 @finch.lexer.escape(ptr %t456, i8 %t457) store i8 %t458, ptr %a448 br label %endif823 endif823: %t459 = getelementptr inbounds { ptr, i64, i64 }, ptr %a421, i32 0, i32 1 %t460 = load i8, ptr %a448 call void @finch_str_from_char(ptr %a461, i8 signext %t460) %t462 = load { ptr, i64, i64 }, ptr %a461 %t463 = load i64, ptr %t459 %t464 = add i64 %t463, 1 call void @finch_arr_reserve(ptr %a421, i64 %t464, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t465 = load ptr, ptr %a421 %t466 = getelementptr inbounds { ptr, i64, i64 }, ptr %t465, i64 %t463 store { ptr, i64, i64 } %t462, ptr %t466 store i64 %t464, ptr %t459 br label %while.cond808 while.end810: %t467 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t467) %t468 = getelementptr inbounds { ptr, i64, i64 }, ptr %a421, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.476, i64 0, i64 0 }, ptr %a469 call void @finch_str_join(ptr %a470, ptr %a421, ptr %a469) %t471 = load { ptr, i64, i64 }, ptr %a470 %t472 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 1 store { ptr, i64, i64 } %t471, ptr %t472 %t473 = load i8, ptr %a415 %t474 = icmp eq i8 %t473, 39 br label %logic.from824 logic.from824: br i1 %t474, label %logic.rhs825, label %logic.end826 logic.rhs825: %t475 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 1 %t476 = getelementptr inbounds { ptr, i64, i64 }, ptr %t475, i32 0, i32 1 %t477 = load i64, ptr %t476 %t478 = icmp ne i64 %t477, 1 br label %logic.rend827 logic.rend827: br label %logic.end826 logic.end826: %t479 = phi i1 [ false, %logic.from824 ], [ %t478, %logic.rend827 ] br i1 %t479, label %then828, label %endif830 then828: %t480 = load ptr, ptr %a18 %t481 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 2 %t482 = load i64, ptr %t481 %t483 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 3 %t484 = load i64, ptr %t483 call void @finch.lexer.fail(ptr %t480, i64 %t482, i64 %t484, { ptr, i64, i64 } { ptr @.str.477, i64 44, i64 0 }) br label %endif830 endif830: br label %endif804 else803: %t485 = load ptr, ptr %a18 %t486 = call { ptr, i64, i64 } @finch.lexer.operator(ptr %t485) store { ptr, i64, i64 } %t486, ptr %a487 %t488 = getelementptr inbounds { ptr, i64, i64 }, ptr %a487, i32 0, i32 1 %t489 = load i64, ptr %t488 %t490 = icmp eq i64 %t489, 0 br i1 %t490, label %then831, label %endif833 then831: store i64 1, ptr %a491 %t492 = load i8, ptr %a43 %t493 = zext i8 %t492 to i64 %t494 = and i64 %t493, 224 %t495 = icmp eq i64 %t494, 192 br i1 %t495, label %then834, label %else835 then834: store i64 2, ptr %a491 br label %endif836 else835: %t496 = load i8, ptr %a43 %t497 = zext i8 %t496 to i64 %t498 = and i64 %t497, 240 %t499 = icmp eq i64 %t498, 224 br i1 %t499, label %then837, label %else838 then837: store i64 3, ptr %a491 br label %endif839 else838: %t500 = load i8, ptr %a43 %t501 = zext i8 %t500 to i64 %t502 = and i64 %t501, 248 %t503 = icmp eq i64 %t502, 240 br i1 %t503, label %then840, label %endif842 then840: store i64 4, ptr %a491 br label %endif842 endif842: br label %endif839 endif839: br label %endif836 endif836: store { ptr, i64, i64 } { ptr @.str.478, i64 0, i64 0 }, ptr %a504 %t505 = load i8, ptr %a43 %t506 = zext i8 %t505 to i64 %t507 = icmp sge i64 %t506, 128 br i1 %t507, label %then843, label %endif845 then843: store { ptr, i64, i64 } { ptr @.str.479, i64 74, i64 0 }, ptr %a504 br label %endif845 endif845: %t508 = load ptr, ptr %a18 %t509 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 2 %t510 = load i64, ptr %t509 %t511 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 3 %t512 = load i64, ptr %t511 %t513 = load ptr, ptr %a18 %t514 = icmp eq ptr %t513, null br i1 %t514, label %panic846, label %ok847 panic846: call void @finch_panic(ptr @.str.481, i64 211, ptr @.str.482) unreachable ok847: %t515 = getelementptr inbounds %S.lexer.Lexer, ptr %t513, i32 0, i32 0 %t516 = load { ptr, i64, i64 }, ptr %t515 store { ptr, i64, i64 } %t516, ptr %a517 %t519 = load ptr, ptr %a18 %t520 = icmp eq ptr %t519, null br i1 %t520, label %panic848, label %ok849 panic848: call void @finch_panic(ptr @.str.484, i64 211, ptr @.str.485) unreachable ok849: %t521 = getelementptr inbounds %S.lexer.Lexer, ptr %t519, i32 0, i32 2 %t522 = load i64, ptr %t521 %t523 = load ptr, ptr %a18 %t524 = icmp eq ptr %t523, null br i1 %t524, label %panic850, label %ok851 panic850: call void @finch_panic(ptr @.str.486, i64 211, ptr @.str.487) unreachable ok851: %t525 = getelementptr inbounds %S.lexer.Lexer, ptr %t523, i32 0, i32 2 %t526 = load i64, ptr %t525 %t527 = load i64, ptr %a491 %t528 = add i64 %t526, %t527 call void @finch_str_sub(ptr %a518, ptr %a517, i64 %t522, i64 %t528, ptr @.str.483, i64 211) %t529 = load { ptr, i64, i64 }, ptr %a518 store { ptr, i64, i64 } { ptr @.str.480, i64 22, i64 0 }, ptr %a531 store { ptr, i64, i64 } %t529, ptr %a532 call void @finch_str_concat(ptr %a530, ptr %a531, ptr %a532) %t533 = load { ptr, i64, i64 }, ptr %a530 store { ptr, i64, i64 } %t533, ptr %a535 store { ptr, i64, i64 } { ptr @.str.488, i64 1, i64 0 }, ptr %a536 call void @finch_str_concat(ptr %a534, ptr %a535, ptr %a536) %t537 = load { ptr, i64, i64 }, ptr %a534 %t538 = load { ptr, i64, i64 }, ptr %a504 store { ptr, i64, i64 } %t537, ptr %a540 store { ptr, i64, i64 } %t538, ptr %a541 call void @finch_str_concat(ptr %a539, ptr %a540, ptr %a541) %t542 = load { ptr, i64, i64 }, ptr %a539 call void @finch.lexer.fail(ptr %t508, i64 %t510, i64 %t512, { ptr, i64, i64 } %t542) br label %endif833 endif833: %t543 = getelementptr inbounds { ptr, i64, i64 }, ptr %a487, i32 0, i32 1 %t544 = load i64, ptr %t543 store i64 0, ptr %a545 br label %for.cond852 for.cond852: %t546 = load i64, ptr %a545 %t547 = icmp slt i64 %t546, %t544 br i1 %t547, label %for.body853, label %for.end855 for.body853: %t548 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t548) br label %for.step854 for.step854: %t549 = load i64, ptr %a545 %t550 = add i64 %t549, 1 store i64 %t550, ptr %a545 br label %for.cond852 for.end855: %t551 = load { ptr, i64, i64 }, ptr %a487 %t552 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 0 store { ptr, i64, i64 } %t551, ptr %a553 call void @finch_str_copy(ptr %a554, ptr %a553) %t555 = load { ptr, i64, i64 }, ptr %a554 store { ptr, i64, i64 } %t555, ptr %t552 %t556 = load { ptr, i64, i64 }, ptr %a487 %t557 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 1 store { ptr, i64, i64 } %t556, ptr %a558 call void @finch_str_copy(ptr %a559, ptr %a558) %t560 = load { ptr, i64, i64 }, ptr %a559 store { ptr, i64, i64 } %t560, ptr %t557 br label %endif804 endif804: br label %endif694 endif694: br label %endif657 endif657: %t561 = getelementptr inbounds { ptr, i64, i64 }, ptr %a19, i32 0, i32 1 %t562 = load %S.lexer.Token, ptr %a169 store %S.lexer.Token %t562, ptr %a563 call void @finch.copy.S_lexer_Token(ptr %a564, ptr %a563) %t565 = load %S.lexer.Token, ptr %a564 %t566 = load i64, ptr %t561 %t567 = add i64 %t566, 1 call void @finch_arr_reserve(ptr %a19, i64 %t567, i64 ptrtoint (ptr getelementptr (%S.lexer.Token, ptr null, i32 1) to i64)) %t568 = load ptr, ptr %a19 %t569 = getelementptr inbounds %S.lexer.Token, ptr %t568, i64 %t566 store %S.lexer.Token %t565, ptr %t569 store i64 %t567, ptr %t561 br label %while.cond554 while.end556: %t570 = getelementptr inbounds { ptr, i64, i64 }, ptr %a19, i32 0, i32 1 %t571 = insertvalue %S.lexer.Token zeroinitializer, { ptr, i64, i64 } { ptr @.str.489, i64 3, i64 0 }, 0 %t572 = insertvalue %S.lexer.Token %t571, { ptr, i64, i64 } { ptr @.str.490, i64 0, i64 0 }, 1 %t573 = load ptr, ptr %a18 %t574 = icmp eq ptr %t573, null br i1 %t574, label %panic856, label %ok857 panic856: call void @finch_panic(ptr @.str.491, i64 221, ptr @.str.492) unreachable ok857: %t575 = getelementptr inbounds %S.lexer.Lexer, ptr %t573, i32 0, i32 3 %t576 = load i64, ptr %t575 %t577 = insertvalue %S.lexer.Token %t572, i64 %t576, 2 %t578 = load ptr, ptr %a18 %t579 = icmp eq ptr %t578, null br i1 %t579, label %panic858, label %ok859 panic858: call void @finch_panic(ptr @.str.493, i64 221, ptr @.str.494) unreachable ok859: %t580 = getelementptr inbounds %S.lexer.Lexer, ptr %t578, i32 0, i32 4 %t581 = load i64, ptr %t580 %t582 = insertvalue %S.lexer.Token %t577, i64 %t581, 3 %t583 = insertvalue %S.lexer.Token %t582, i1 true, 4 %t584 = load i64, ptr %t570 %t585 = add i64 %t584, 1 call void @finch_arr_reserve(ptr %a19, i64 %t585, i64 ptrtoint (ptr getelementptr (%S.lexer.Token, ptr null, i32 1) to i64)) %t586 = load ptr, ptr %a19 %t587 = getelementptr inbounds %S.lexer.Token, ptr %t586, i64 %t584 store %S.lexer.Token %t583, ptr %t587 store i64 %t585, ptr %t570 %t588 = load { ptr, i64, i64 }, ptr %a19 store { ptr, i64, i64 } %t588, ptr %a589 call void @finch.copy.arr_S_lexer_Token(ptr %a590, ptr %a589) %t591 = load { ptr, i64, i64 }, ptr %a590 ret { ptr, i64, i64 } %t591 } define internal %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t2, ptr %a3 call void @finch_str_copy(ptr %a4, ptr %a3) %t5 = load { ptr, i64, i64 }, ptr %a4 %t6 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } %t5, 0 ret %S.ast.Type %t6 } define internal %S.ast.Type @finch.ast.arrayOf(%S.ast.Type %p0) { entry: %a1 = alloca %S.ast.Type, align 16 %a3 = alloca %S.ast.Type, align 16 %a7 = alloca %S.ast.Type, align 16 %a8 = alloca %S.ast.Type, align 16 %a15 = alloca %S.ast.Type, align 16 %a16 = alloca %S.ast.Type, align 16 store %S.ast.Type %p0, ptr %a1 %t2 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.495, i64 5, i64 0 }, 0 store %S.ast.Type %t2, ptr %a3 %t4 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i32 0, i32 1 %t6 = load %S.ast.Type, ptr %a1 store %S.ast.Type %t6, ptr %a7 call void @finch.copy.S_ast_Type(ptr %a8, ptr %a7) %t9 = load %S.ast.Type, ptr %a8 %t10 = load i64, ptr %t5 %t11 = add i64 %t10, 1 call void @finch_arr_reserve(ptr %t4, i64 %t11, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) %t12 = load ptr, ptr %t4 %t13 = getelementptr inbounds %S.ast.Type, ptr %t12, i64 %t10 store %S.ast.Type %t9, ptr %t13 store i64 %t11, ptr %t5 %t14 = load %S.ast.Type, ptr %a3 store %S.ast.Type %t14, ptr %a15 call void @finch.copy.S_ast_Type(ptr %a16, ptr %a15) %t17 = load %S.ast.Type, ptr %a16 ret %S.ast.Type %t17 } define internal %S.ast.Type @finch.ast.mapOf(%S.ast.Type %p0, %S.ast.Type %p1) { entry: %a1 = alloca %S.ast.Type, align 16 %a2 = alloca %S.ast.Type, align 16 %a4 = alloca %S.ast.Type, align 16 %a8 = alloca %S.ast.Type, align 16 %a9 = alloca %S.ast.Type, align 16 %a18 = alloca %S.ast.Type, align 16 %a19 = alloca %S.ast.Type, align 16 %a26 = alloca %S.ast.Type, align 16 %a27 = alloca %S.ast.Type, align 16 store %S.ast.Type %p0, ptr %a1 store %S.ast.Type %p1, ptr %a2 %t3 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.496, i64 3, i64 0 }, 0 store %S.ast.Type %t3, ptr %a4 %t5 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 1 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 %t7 = load %S.ast.Type, ptr %a1 store %S.ast.Type %t7, ptr %a8 call void @finch.copy.S_ast_Type(ptr %a9, ptr %a8) %t10 = load %S.ast.Type, ptr %a9 %t11 = load i64, ptr %t6 %t12 = add i64 %t11, 1 call void @finch_arr_reserve(ptr %t5, i64 %t12, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) %t13 = load ptr, ptr %t5 %t14 = getelementptr inbounds %S.ast.Type, ptr %t13, i64 %t11 store %S.ast.Type %t10, ptr %t14 store i64 %t12, ptr %t6 %t15 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 1 %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t15, i32 0, i32 1 %t17 = load %S.ast.Type, ptr %a2 store %S.ast.Type %t17, ptr %a18 call void @finch.copy.S_ast_Type(ptr %a19, ptr %a18) %t20 = load %S.ast.Type, ptr %a19 %t21 = load i64, ptr %t16 %t22 = add i64 %t21, 1 call void @finch_arr_reserve(ptr %t15, i64 %t22, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) %t23 = load ptr, ptr %t15 %t24 = getelementptr inbounds %S.ast.Type, ptr %t23, i64 %t21 store %S.ast.Type %t20, ptr %t24 store i64 %t22, ptr %t16 %t25 = load %S.ast.Type, ptr %a4 store %S.ast.Type %t25, ptr %a26 call void @finch.copy.S_ast_Type(ptr %a27, ptr %a26) %t28 = load %S.ast.Type, ptr %a27 ret %S.ast.Type %t28 } define internal %S.ast.Type @finch.ast.ptrTo(%S.ast.Type %p0) { entry: %a1 = alloca %S.ast.Type, align 16 %a3 = alloca %S.ast.Type, align 16 %a7 = alloca %S.ast.Type, align 16 %a8 = alloca %S.ast.Type, align 16 %a15 = alloca %S.ast.Type, align 16 %a16 = alloca %S.ast.Type, align 16 store %S.ast.Type %p0, ptr %a1 %t2 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.497, i64 3, i64 0 }, 0 store %S.ast.Type %t2, ptr %a3 %t4 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i32 0, i32 1 %t6 = load %S.ast.Type, ptr %a1 store %S.ast.Type %t6, ptr %a7 call void @finch.copy.S_ast_Type(ptr %a8, ptr %a7) %t9 = load %S.ast.Type, ptr %a8 %t10 = load i64, ptr %t5 %t11 = add i64 %t10, 1 call void @finch_arr_reserve(ptr %t4, i64 %t11, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) %t12 = load ptr, ptr %t4 %t13 = getelementptr inbounds %S.ast.Type, ptr %t12, i64 %t10 store %S.ast.Type %t9, ptr %t13 store i64 %t11, ptr %t5 %t14 = load %S.ast.Type, ptr %a3 store %S.ast.Type %t14, ptr %a15 call void @finch.copy.S_ast_Type(ptr %a16, ptr %a15) %t17 = load %S.ast.Type, ptr %a16 ret %S.ast.Type %t17 } define internal i1 @finch.ast.same(%S.ast.Type %p0, %S.ast.Type %p1) { entry: %a1 = alloca %S.ast.Type, align 16 %a2 = alloca %S.ast.Type, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca i64, align 16 store %S.ast.Type %p0, ptr %a1 store %S.ast.Type %p1, ptr %a2 %t3 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t4 = load { ptr, i64, i64 }, ptr %t3 %t5 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t6 = load { ptr, i64, i64 }, ptr %t5 store { ptr, i64, i64 } %t4, ptr %a7 store { ptr, i64, i64 } %t6, ptr %a8 %t9 = call i32 @finch_str_eq(ptr %a7, ptr %a8) %t10 = icmp eq i32 %t9, 0 br i1 %t10, label %then863, label %endif865 then863: ret i1 false endif865: %t11 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t12 = load { ptr, i64, i64 }, ptr %t11 store { ptr, i64, i64 } %t12, ptr %a13 store { ptr, i64, i64 } { ptr @.str.498, i64 6, i64 0 }, ptr %a14 %t15 = call i32 @finch_str_eq(ptr %a13, ptr %a14) %t16 = icmp ne i32 %t15, 0 br label %logic.from866 logic.from866: br i1 %t16, label %logic.end868, label %logic.rhs867 logic.rhs867: %t17 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t18 = load { ptr, i64, i64 }, ptr %t17 store { ptr, i64, i64 } %t18, ptr %a19 store { ptr, i64, i64 } { ptr @.str.499, i64 5, i64 0 }, ptr %a20 %t21 = call i32 @finch_str_eq(ptr %a19, ptr %a20) %t22 = icmp ne i32 %t21, 0 br label %logic.rend869 logic.rend869: br label %logic.end868 logic.end868: %t23 = phi i1 [ true, %logic.from866 ], [ %t22, %logic.rend869 ] br label %logic.from870 logic.from870: br i1 %t23, label %logic.end872, label %logic.rhs871 logic.rhs871: %t24 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t25 = load { ptr, i64, i64 }, ptr %t24 store { ptr, i64, i64 } %t25, ptr %a26 store { ptr, i64, i64 } { ptr @.str.500, i64 4, i64 0 }, ptr %a27 %t28 = call i32 @finch_str_eq(ptr %a26, ptr %a27) %t29 = icmp ne i32 %t28, 0 br label %logic.rend873 logic.rend873: br label %logic.end872 logic.end872: %t30 = phi i1 [ true, %logic.from870 ], [ %t29, %logic.rend873 ] br i1 %t30, label %then874, label %endif876 then874: %t31 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 2 %t32 = load { ptr, i64, i64 }, ptr %t31 %t33 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t34 = load { ptr, i64, i64 }, ptr %t33 store { ptr, i64, i64 } %t32, ptr %a35 store { ptr, i64, i64 } %t34, ptr %a36 %t37 = call i32 @finch_str_eq(ptr %a35, ptr %a36) %t38 = icmp ne i32 %t37, 0 br label %logic.from877 logic.from877: br i1 %t38, label %logic.rhs878, label %logic.end879 logic.rhs878: %t39 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 3 %t40 = load { ptr, i64, i64 }, ptr %t39 %t41 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t42 = load { ptr, i64, i64 }, ptr %t41 store { ptr, i64, i64 } %t40, ptr %a43 store { ptr, i64, i64 } %t42, ptr %a44 %t45 = call i32 @finch_str_eq(ptr %a43, ptr %a44) %t46 = icmp ne i32 %t45, 0 br label %logic.rend880 logic.rend880: br label %logic.end879 logic.end879: %t47 = phi i1 [ false, %logic.from877 ], [ %t46, %logic.rend880 ] ret i1 %t47 endif876: %t48 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t49 = load { ptr, i64, i64 }, ptr %t48 store { ptr, i64, i64 } %t49, ptr %a50 store { ptr, i64, i64 } { ptr @.str.501, i64 5, i64 0 }, ptr %a51 %t52 = call i32 @finch_str_eq(ptr %a50, ptr %a51) %t53 = icmp ne i32 %t52, 0 br label %logic.from881 logic.from881: br i1 %t53, label %logic.rhs882, label %logic.end883 logic.rhs882: %t54 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 4 %t55 = load i64, ptr %t54 %t56 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 4 %t57 = load i64, ptr %t56 %t58 = icmp ne i64 %t55, %t57 br label %logic.rend884 logic.rend884: br label %logic.end883 logic.end883: %t59 = phi i1 [ false, %logic.from881 ], [ %t58, %logic.rend884 ] br i1 %t59, label %then885, label %endif887 then885: ret i1 false endif887: %t60 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t61 = load { ptr, i64, i64 }, ptr %t60 store { ptr, i64, i64 } %t61, ptr %a62 store { ptr, i64, i64 } { ptr @.str.502, i64 5, i64 0 }, ptr %a63 %t64 = call i32 @finch_str_eq(ptr %a62, ptr %a63) %t65 = icmp ne i32 %t64, 0 br label %logic.from888 logic.from888: br i1 %t65, label %logic.end890, label %logic.rhs889 logic.rhs889: %t66 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t67 = load { ptr, i64, i64 }, ptr %t66 store { ptr, i64, i64 } %t67, ptr %a68 store { ptr, i64, i64 } { ptr @.str.503, i64 3, i64 0 }, ptr %a69 %t70 = call i32 @finch_str_eq(ptr %a68, ptr %a69) %t71 = icmp ne i32 %t70, 0 br label %logic.rend891 logic.rend891: br label %logic.end890 logic.end890: %t72 = phi i1 [ true, %logic.from888 ], [ %t71, %logic.rend891 ] br label %logic.from892 logic.from892: br i1 %t72, label %logic.end894, label %logic.rhs893 logic.rhs893: %t73 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t74 = load { ptr, i64, i64 }, ptr %t73 store { ptr, i64, i64 } %t74, ptr %a75 store { ptr, i64, i64 } { ptr @.str.504, i64 3, i64 0 }, ptr %a76 %t77 = call i32 @finch_str_eq(ptr %a75, ptr %a76) %t78 = icmp ne i32 %t77, 0 br label %logic.rend895 logic.rend895: br label %logic.end894 logic.end894: %t79 = phi i1 [ true, %logic.from892 ], [ %t78, %logic.rend895 ] br label %logic.from896 logic.from896: br i1 %t79, label %logic.end898, label %logic.rhs897 logic.rhs897: %t80 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t81 = load { ptr, i64, i64 }, ptr %t80 store { ptr, i64, i64 } %t81, ptr %a82 store { ptr, i64, i64 } { ptr @.str.505, i64 5, i64 0 }, ptr %a83 %t84 = call i32 @finch_str_eq(ptr %a82, ptr %a83) %t85 = icmp ne i32 %t84, 0 br label %logic.rend899 logic.rend899: br label %logic.end898 logic.end898: %t86 = phi i1 [ true, %logic.from896 ], [ %t85, %logic.rend899 ] br i1 %t86, label %then900, label %endif902 then900: %t87 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 %t88 = getelementptr inbounds { ptr, i64, i64 }, ptr %t87, i32 0, i32 1 %t89 = load i64, ptr %t88 %t90 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t91 = getelementptr inbounds { ptr, i64, i64 }, ptr %t90, i32 0, i32 1 %t92 = load i64, ptr %t91 %t93 = icmp ne i64 %t89, %t92 br i1 %t93, label %then903, label %endif905 then903: ret i1 false endif905: %t94 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 %t95 = getelementptr inbounds { ptr, i64, i64 }, ptr %t94, i32 0, i32 1 %t96 = load i64, ptr %t95 store i64 0, ptr %a97 br label %for.cond906 for.cond906: %t98 = load i64, ptr %a97 %t99 = icmp slt i64 %t98, %t96 br i1 %t99, label %for.body907, label %for.end909 for.body907: %t100 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 %t101 = load i64, ptr %a97 %t102 = load { ptr, i64, i64 }, ptr %t100 %t103 = extractvalue { ptr, i64, i64 } %t102, 1 %t104 = icmp uge i64 %t101, %t103 br i1 %t104, label %range910, label %inrange911 range910: call void @finch_panic_index(ptr @.str.506, i64 54, i64 %t101, i64 %t103) unreachable inrange911: %t105 = extractvalue { ptr, i64, i64 } %t102, 0 %t106 = getelementptr inbounds %S.ast.Type, ptr %t105, i64 %t101 %t107 = load %S.ast.Type, ptr %t106 %t108 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t109 = load i64, ptr %a97 %t110 = load { ptr, i64, i64 }, ptr %t108 %t111 = extractvalue { ptr, i64, i64 } %t110, 1 %t112 = icmp uge i64 %t109, %t111 br i1 %t112, label %range912, label %inrange913 range912: call void @finch_panic_index(ptr @.str.507, i64 54, i64 %t109, i64 %t111) unreachable inrange913: %t113 = extractvalue { ptr, i64, i64 } %t110, 0 %t114 = getelementptr inbounds %S.ast.Type, ptr %t113, i64 %t109 %t115 = load %S.ast.Type, ptr %t114 %t116 = call i1 @finch.ast.same(%S.ast.Type %t107, %S.ast.Type %t115) %t117 = xor i1 %t116, true br i1 %t117, label %then914, label %endif916 then914: ret i1 false endif916: br label %for.step908 for.step908: %t118 = load i64, ptr %a97 %t119 = add i64 %t118, 1 store i64 %t119, ptr %a97 br label %for.cond906 for.end909: ret i1 true endif902: ret i1 true } define internal { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %p0) { entry: %a1 = alloca %S.ast.Type, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca { ptr, i64, i64 }, align 16 %a104 = alloca { ptr, i64, i64 }, align 16 %a106 = alloca { ptr, i64, i64 }, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 %a113 = alloca { ptr, i64, i64 }, align 16 %a118 = alloca { ptr, i64, i64 }, align 16 %a119 = alloca { ptr, i64, i64 }, align 16 %a125 = alloca { ptr, i64, i64 }, align 16 %a126 = alloca { ptr, i64, i64 }, align 16 %a136 = alloca { ptr, i64, i64 }, align 16 %a137 = alloca { ptr, i64, i64 }, align 16 %a138 = alloca { ptr, i64, i64 }, align 16 %a142 = alloca { ptr, i64, i64 }, align 16 %a143 = alloca { ptr, i64, i64 }, align 16 %a144 = alloca { ptr, i64, i64 }, align 16 %a148 = alloca { ptr, i64, i64 }, align 16 %a149 = alloca { ptr, i64, i64 }, align 16 %a153 = alloca { ptr, i64, i64 }, align 16 %a154 = alloca { ptr, i64, i64 }, align 16 %a159 = alloca { ptr, i64, i64 }, align 16 %a160 = alloca { ptr, i64, i64 }, align 16 store %S.ast.Type %p0, ptr %a1 %t2 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t3 = load { ptr, i64, i64 }, ptr %t2 store { ptr, i64, i64 } %t3, ptr %a4 store { ptr, i64, i64 } { ptr @.str.508, i64 5, i64 0 }, ptr %a5 %t6 = call i32 @finch_str_eq(ptr %a4, ptr %a5) %t7 = icmp ne i32 %t6, 0 br i1 %t7, label %then917, label %endif919 then917: %t8 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 %t9 = load { ptr, i64, i64 }, ptr %t8 %t10 = extractvalue { ptr, i64, i64 } %t9, 1 %t11 = icmp uge i64 0, %t10 br i1 %t11, label %range920, label %inrange921 range920: call void @finch_panic_index(ptr @.str.510, i64 65, i64 0, i64 %t10) unreachable inrange921: %t12 = extractvalue { ptr, i64, i64 } %t9, 0 %t13 = getelementptr inbounds %S.ast.Type, ptr %t12, i64 0 %t14 = load %S.ast.Type, ptr %t13 %t15 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t14) store { ptr, i64, i64 } { ptr @.str.509, i64 2, i64 0 }, ptr %a17 store { ptr, i64, i64 } %t15, ptr %a18 call void @finch_str_concat(ptr %a16, ptr %a17, ptr %a18) %t19 = load { ptr, i64, i64 }, ptr %a16 ret { ptr, i64, i64 } %t19 endif919: %t20 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t21 = load { ptr, i64, i64 }, ptr %t20 store { ptr, i64, i64 } %t21, ptr %a22 store { ptr, i64, i64 } { ptr @.str.511, i64 5, i64 0 }, ptr %a23 %t24 = call i32 @finch_str_eq(ptr %a22, ptr %a23) %t25 = icmp ne i32 %t24, 0 br i1 %t25, label %then922, label %endif924 then922: %t26 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 4 %t27 = load i64, ptr %t26 call void @finch_str_from_int(ptr %a28, i64 %t27) %t29 = load { ptr, i64, i64 }, ptr %a28 store { ptr, i64, i64 } { ptr @.str.512, i64 1, i64 0 }, ptr %a31 store { ptr, i64, i64 } %t29, ptr %a32 call void @finch_str_concat(ptr %a30, ptr %a31, ptr %a32) %t33 = load { ptr, i64, i64 }, ptr %a30 store { ptr, i64, i64 } %t33, ptr %a35 store { ptr, i64, i64 } { ptr @.str.513, i64 1, i64 0 }, ptr %a36 call void @finch_str_concat(ptr %a34, ptr %a35, ptr %a36) %t37 = load { ptr, i64, i64 }, ptr %a34 %t38 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 %t39 = load { ptr, i64, i64 }, ptr %t38 %t40 = extractvalue { ptr, i64, i64 } %t39, 1 %t41 = icmp uge i64 0, %t40 br i1 %t41, label %range925, label %inrange926 range925: call void @finch_panic_index(ptr @.str.514, i64 68, i64 0, i64 %t40) unreachable inrange926: %t42 = extractvalue { ptr, i64, i64 } %t39, 0 %t43 = getelementptr inbounds %S.ast.Type, ptr %t42, i64 0 %t44 = load %S.ast.Type, ptr %t43 %t45 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t44) store { ptr, i64, i64 } %t37, ptr %a47 store { ptr, i64, i64 } %t45, ptr %a48 call void @finch_str_concat(ptr %a46, ptr %a47, ptr %a48) %t49 = load { ptr, i64, i64 }, ptr %a46 ret { ptr, i64, i64 } %t49 endif924: %t50 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t51 = load { ptr, i64, i64 }, ptr %t50 store { ptr, i64, i64 } %t51, ptr %a52 store { ptr, i64, i64 } { ptr @.str.515, i64 3, i64 0 }, ptr %a53 %t54 = call i32 @finch_str_eq(ptr %a52, ptr %a53) %t55 = icmp ne i32 %t54, 0 br i1 %t55, label %then927, label %endif929 then927: %t56 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 %t57 = load { ptr, i64, i64 }, ptr %t56 %t58 = extractvalue { ptr, i64, i64 } %t57, 1 %t59 = icmp uge i64 0, %t58 br i1 %t59, label %range930, label %inrange931 range930: call void @finch_panic_index(ptr @.str.517, i64 71, i64 0, i64 %t58) unreachable inrange931: %t60 = extractvalue { ptr, i64, i64 } %t57, 0 %t61 = getelementptr inbounds %S.ast.Type, ptr %t60, i64 0 %t62 = load %S.ast.Type, ptr %t61 %t63 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t62) store { ptr, i64, i64 } { ptr @.str.516, i64 4, i64 0 }, ptr %a65 store { ptr, i64, i64 } %t63, ptr %a66 call void @finch_str_concat(ptr %a64, ptr %a65, ptr %a66) %t67 = load { ptr, i64, i64 }, ptr %a64 store { ptr, i64, i64 } %t67, ptr %a69 store { ptr, i64, i64 } { ptr @.str.518, i64 1, i64 0 }, ptr %a70 call void @finch_str_concat(ptr %a68, ptr %a69, ptr %a70) %t71 = load { ptr, i64, i64 }, ptr %a68 %t72 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 %t73 = load { ptr, i64, i64 }, ptr %t72 %t74 = extractvalue { ptr, i64, i64 } %t73, 1 %t75 = icmp uge i64 1, %t74 br i1 %t75, label %range932, label %inrange933 range932: call void @finch_panic_index(ptr @.str.519, i64 71, i64 1, i64 %t74) unreachable inrange933: %t76 = extractvalue { ptr, i64, i64 } %t73, 0 %t77 = getelementptr inbounds %S.ast.Type, ptr %t76, i64 1 %t78 = load %S.ast.Type, ptr %t77 %t79 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t78) store { ptr, i64, i64 } %t71, ptr %a81 store { ptr, i64, i64 } %t79, ptr %a82 call void @finch_str_concat(ptr %a80, ptr %a81, ptr %a82) %t83 = load { ptr, i64, i64 }, ptr %a80 ret { ptr, i64, i64 } %t83 endif929: %t84 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t85 = load { ptr, i64, i64 }, ptr %t84 store { ptr, i64, i64 } %t85, ptr %a86 store { ptr, i64, i64 } { ptr @.str.520, i64 3, i64 0 }, ptr %a87 %t88 = call i32 @finch_str_eq(ptr %a86, ptr %a87) %t89 = icmp ne i32 %t88, 0 br i1 %t89, label %then934, label %endif936 then934: %t90 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 %t91 = getelementptr inbounds { ptr, i64, i64 }, ptr %t90, i32 0, i32 1 %t92 = load i64, ptr %t91 %t93 = icmp eq i64 %t92, 0 br i1 %t93, label %then937, label %endif939 then937: ret { ptr, i64, i64 } { ptr @.str.521, i64 3, i64 0 } endif939: %t94 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 %t95 = load { ptr, i64, i64 }, ptr %t94 %t96 = extractvalue { ptr, i64, i64 } %t95, 1 %t97 = icmp uge i64 0, %t96 br i1 %t97, label %range940, label %inrange941 range940: call void @finch_panic_index(ptr @.str.523, i64 77, i64 0, i64 %t96) unreachable inrange941: %t98 = extractvalue { ptr, i64, i64 } %t95, 0 %t99 = getelementptr inbounds %S.ast.Type, ptr %t98, i64 0 %t100 = load %S.ast.Type, ptr %t99 %t101 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t100) store { ptr, i64, i64 } { ptr @.str.522, i64 4, i64 0 }, ptr %a103 store { ptr, i64, i64 } %t101, ptr %a104 call void @finch_str_concat(ptr %a102, ptr %a103, ptr %a104) %t105 = load { ptr, i64, i64 }, ptr %a102 store { ptr, i64, i64 } %t105, ptr %a107 store { ptr, i64, i64 } { ptr @.str.524, i64 1, i64 0 }, ptr %a108 call void @finch_str_concat(ptr %a106, ptr %a107, ptr %a108) %t109 = load { ptr, i64, i64 }, ptr %a106 ret { ptr, i64, i64 } %t109 endif936: %t110 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t111 = load { ptr, i64, i64 }, ptr %t110 store { ptr, i64, i64 } %t111, ptr %a112 store { ptr, i64, i64 } { ptr @.str.525, i64 6, i64 0 }, ptr %a113 %t114 = call i32 @finch_str_eq(ptr %a112, ptr %a113) %t115 = icmp ne i32 %t114, 0 br label %logic.from942 logic.from942: br i1 %t115, label %logic.end944, label %logic.rhs943 logic.rhs943: %t116 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t117 = load { ptr, i64, i64 }, ptr %t116 store { ptr, i64, i64 } %t117, ptr %a118 store { ptr, i64, i64 } { ptr @.str.526, i64 5, i64 0 }, ptr %a119 %t120 = call i32 @finch_str_eq(ptr %a118, ptr %a119) %t121 = icmp ne i32 %t120, 0 br label %logic.rend945 logic.rend945: br label %logic.end944 logic.end944: %t122 = phi i1 [ true, %logic.from942 ], [ %t121, %logic.rend945 ] br label %logic.from946 logic.from946: br i1 %t122, label %logic.end948, label %logic.rhs947 logic.rhs947: %t123 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t124 = load { ptr, i64, i64 }, ptr %t123 store { ptr, i64, i64 } %t124, ptr %a125 store { ptr, i64, i64 } { ptr @.str.527, i64 4, i64 0 }, ptr %a126 %t127 = call i32 @finch_str_eq(ptr %a125, ptr %a126) %t128 = icmp ne i32 %t127, 0 br label %logic.rend949 logic.rend949: br label %logic.end948 logic.end948: %t129 = phi i1 [ true, %logic.from946 ], [ %t128, %logic.rend949 ] br i1 %t129, label %then950, label %endif952 then950: %t130 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 3 %t131 = getelementptr inbounds { ptr, i64, i64 }, ptr %t130, i32 0, i32 1 %t132 = load i64, ptr %t131 %t133 = icmp sgt i64 %t132, 0 br i1 %t133, label %then953, label %endif955 then953: %t134 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 3 %t135 = load { ptr, i64, i64 }, ptr %t134 store { ptr, i64, i64 } %t135, ptr %a137 store { ptr, i64, i64 } { ptr @.str.528, i64 1, i64 0 }, ptr %a138 call void @finch_str_concat(ptr %a136, ptr %a137, ptr %a138) %t139 = load { ptr, i64, i64 }, ptr %a136 %t140 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 2 %t141 = load { ptr, i64, i64 }, ptr %t140 store { ptr, i64, i64 } %t139, ptr %a143 store { ptr, i64, i64 } %t141, ptr %a144 call void @finch_str_concat(ptr %a142, ptr %a143, ptr %a144) %t145 = load { ptr, i64, i64 }, ptr %a142 ret { ptr, i64, i64 } %t145 endif955: %t146 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 2 %t147 = load { ptr, i64, i64 }, ptr %t146 store { ptr, i64, i64 } %t147, ptr %a148 call void @finch_str_copy(ptr %a149, ptr %a148) %t150 = load { ptr, i64, i64 }, ptr %a149 ret { ptr, i64, i64 } %t150 endif952: %t151 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t152 = load { ptr, i64, i64 }, ptr %t151 store { ptr, i64, i64 } %t152, ptr %a153 store { ptr, i64, i64 } { ptr @.str.529, i64 4, i64 0 }, ptr %a154 %t155 = call i32 @finch_str_eq(ptr %a153, ptr %a154) %t156 = icmp ne i32 %t155, 0 br i1 %t156, label %then956, label %endif958 then956: ret { ptr, i64, i64 } { ptr @.str.530, i64 7, i64 0 } endif958: %t157 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t158 = load { ptr, i64, i64 }, ptr %t157 store { ptr, i64, i64 } %t158, ptr %a159 call void @finch_str_copy(ptr %a160, ptr %a159) %t161 = load { ptr, i64, i64 }, ptr %a160 ret { ptr, i64, i64 } %t161 } define internal void @finch.parser.fail(ptr %p0, %S.lexer.Token %p1, { ptr, i64, i64 } %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.lexer.Token, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.lexer.Token %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = icmp eq ptr %t4, null br i1 %t5, label %panic959, label %ok960 panic959: call void @finch_panic(ptr @.str.531, i64 14, ptr @.str.532) unreachable ok960: %t6 = getelementptr inbounds %S.parser.Parser, ptr %t4, i32 0, i32 4 %t7 = load { ptr, i64, i64 }, ptr %t6 store { ptr, i64, i64 } %t7, ptr %a9 store { ptr, i64, i64 } { ptr @.str.533, i64 1, i64 0 }, ptr %a10 call void @finch_str_concat(ptr %a8, ptr %a9, ptr %a10) %t11 = load { ptr, i64, i64 }, ptr %a8 %t12 = getelementptr inbounds %S.lexer.Token, ptr %a2, i32 0, i32 2 %t13 = load i64, ptr %t12 call void @finch_str_from_int(ptr %a14, i64 %t13) %t15 = load { ptr, i64, i64 }, ptr %a14 store { ptr, i64, i64 } %t11, ptr %a17 store { ptr, i64, i64 } %t15, ptr %a18 call void @finch_str_concat(ptr %a16, ptr %a17, ptr %a18) %t19 = load { ptr, i64, i64 }, ptr %a16 store { ptr, i64, i64 } %t19, ptr %a21 store { ptr, i64, i64 } { ptr @.str.534, i64 1, i64 0 }, ptr %a22 call void @finch_str_concat(ptr %a20, ptr %a21, ptr %a22) %t23 = load { ptr, i64, i64 }, ptr %a20 %t24 = getelementptr inbounds %S.lexer.Token, ptr %a2, i32 0, i32 3 %t25 = load i64, ptr %t24 call void @finch_str_from_int(ptr %a26, i64 %t25) %t27 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } %t23, ptr %a29 store { ptr, i64, i64 } %t27, ptr %a30 call void @finch_str_concat(ptr %a28, ptr %a29, ptr %a30) %t31 = load { ptr, i64, i64 }, ptr %a28 store { ptr, i64, i64 } %t31, ptr %a33 store { ptr, i64, i64 } { ptr @.str.535, i64 9, i64 0 }, ptr %a34 call void @finch_str_concat(ptr %a32, ptr %a33, ptr %a34) %t35 = load { ptr, i64, i64 }, ptr %a32 %t36 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t35, ptr %a38 store { ptr, i64, i64 } %t36, ptr %a39 call void @finch_str_concat(ptr %a37, ptr %a38, ptr %a39) %t40 = load { ptr, i64, i64 }, ptr %a37 %t41 = extractvalue { ptr, i64, i64 } %t40, 1 %t42 = trunc i64 %t41 to i32 %t43 = extractvalue { ptr, i64, i64 } %t40, 0 %t44 = icmp eq ptr %t43, null %t45 = select i1 %t44, ptr @.str.536, ptr %t43 %t46 = call i32 (ptr, ...) @printf(ptr @.str.537, i32 %t42, ptr %t45) %t47 = call i32 (ptr, ...) @printf(ptr @.str.538) %t48 = trunc i64 1 to i32 %t49 = call i32 @fflush(ptr null) call void @exit(i32 %t48) ret void } define internal %S.lexer.Token @finch.parser.cur(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a15 = alloca %S.lexer.Token, align 16 %a16 = alloca %S.lexer.Token, align 16 store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = icmp eq ptr %t2, null br i1 %t3, label %panic961, label %ok962 panic961: call void @finch_panic(ptr @.str.539, i64 19, ptr @.str.540) unreachable ok962: %t4 = getelementptr inbounds %S.parser.Parser, ptr %t2, i32 0, i32 0 %t5 = load ptr, ptr %a1 %t6 = icmp eq ptr %t5, null br i1 %t6, label %panic963, label %ok964 panic963: call void @finch_panic(ptr @.str.541, i64 19, ptr @.str.542) unreachable ok964: %t7 = getelementptr inbounds %S.parser.Parser, ptr %t5, i32 0, i32 1 %t8 = load i64, ptr %t7 %t9 = load { ptr, i64, i64 }, ptr %t4 %t10 = extractvalue { ptr, i64, i64 } %t9, 1 %t11 = icmp uge i64 %t8, %t10 br i1 %t11, label %range965, label %inrange966 range965: call void @finch_panic_index(ptr @.str.543, i64 19, i64 %t8, i64 %t10) unreachable inrange966: %t12 = extractvalue { ptr, i64, i64 } %t9, 0 %t13 = getelementptr inbounds %S.lexer.Token, ptr %t12, i64 %t8 %t14 = load %S.lexer.Token, ptr %t13 store %S.lexer.Token %t14, ptr %a15 call void @finch.copy.S_lexer_Token(ptr %a16, ptr %a15) %t17 = load %S.lexer.Token, ptr %a16 ret %S.lexer.Token %t17 } define internal { ptr, i64, i64 } @finch.parser.curKind(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = icmp eq ptr %t2, null br i1 %t3, label %panic967, label %ok968 panic967: call void @finch_panic(ptr @.str.544, i64 23, ptr @.str.545) unreachable ok968: %t4 = getelementptr inbounds %S.parser.Parser, ptr %t2, i32 0, i32 0 %t5 = load ptr, ptr %a1 %t6 = icmp eq ptr %t5, null br i1 %t6, label %panic969, label %ok970 panic969: call void @finch_panic(ptr @.str.546, i64 23, ptr @.str.547) unreachable ok970: %t7 = getelementptr inbounds %S.parser.Parser, ptr %t5, i32 0, i32 1 %t8 = load i64, ptr %t7 %t9 = load { ptr, i64, i64 }, ptr %t4 %t10 = extractvalue { ptr, i64, i64 } %t9, 1 %t11 = icmp uge i64 %t8, %t10 br i1 %t11, label %range971, label %inrange972 range971: call void @finch_panic_index(ptr @.str.548, i64 23, i64 %t8, i64 %t10) unreachable inrange972: %t12 = extractvalue { ptr, i64, i64 } %t9, 0 %t13 = getelementptr inbounds %S.lexer.Token, ptr %t12, i64 %t8 %t14 = getelementptr inbounds %S.lexer.Token, ptr %t13, i32 0, i32 0 %t15 = load { ptr, i64, i64 }, ptr %t14 store { ptr, i64, i64 } %t15, ptr %a16 call void @finch_str_copy(ptr %a17, ptr %a16) %t18 = load { ptr, i64, i64 }, ptr %a17 ret { ptr, i64, i64 } %t18 } define internal { ptr, i64, i64 } @finch.parser.peekKind(ptr %p0, i64 %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca i64, align 16 %a9 = alloca i64, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store i64 %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null br i1 %t4, label %panic973, label %ok974 panic973: call void @finch_panic(ptr @.str.549, i64 27, ptr @.str.550) unreachable ok974: %t5 = getelementptr inbounds %S.parser.Parser, ptr %t3, i32 0, i32 1 %t6 = load i64, ptr %t5 %t7 = load i64, ptr %a2 %t8 = add i64 %t6, %t7 store i64 %t8, ptr %a9 %t10 = load i64, ptr %a9 %t11 = load ptr, ptr %a1 %t12 = icmp eq ptr %t11, null br i1 %t12, label %panic975, label %ok976 panic975: call void @finch_panic(ptr @.str.551, i64 28, ptr @.str.552) unreachable ok976: %t13 = getelementptr inbounds %S.parser.Parser, ptr %t11, i32 0, i32 0 %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i32 0, i32 1 %t15 = load i64, ptr %t14 %t16 = icmp sge i64 %t10, %t15 br i1 %t16, label %then977, label %endif979 then977: %t17 = load ptr, ptr %a1 %t18 = icmp eq ptr %t17, null br i1 %t18, label %panic980, label %ok981 panic980: call void @finch_panic(ptr @.str.553, i64 29, ptr @.str.554) unreachable ok981: %t19 = getelementptr inbounds %S.parser.Parser, ptr %t17, i32 0, i32 0 %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t19, i32 0, i32 1 %t21 = load i64, ptr %t20 %t22 = sub i64 %t21, 1 store i64 %t22, ptr %a9 br label %endif979 endif979: %t23 = load ptr, ptr %a1 %t24 = icmp eq ptr %t23, null br i1 %t24, label %panic982, label %ok983 panic982: call void @finch_panic(ptr @.str.555, i64 31, ptr @.str.556) unreachable ok983: %t25 = getelementptr inbounds %S.parser.Parser, ptr %t23, i32 0, i32 0 %t26 = load i64, ptr %a9 %t27 = load { ptr, i64, i64 }, ptr %t25 %t28 = extractvalue { ptr, i64, i64 } %t27, 1 %t29 = icmp uge i64 %t26, %t28 br i1 %t29, label %range984, label %inrange985 range984: call void @finch_panic_index(ptr @.str.557, i64 31, i64 %t26, i64 %t28) unreachable inrange985: %t30 = extractvalue { ptr, i64, i64 } %t27, 0 %t31 = getelementptr inbounds %S.lexer.Token, ptr %t30, i64 %t26 %t32 = getelementptr inbounds %S.lexer.Token, ptr %t31, i32 0, i32 0 %t33 = load { ptr, i64, i64 }, ptr %t32 store { ptr, i64, i64 } %t33, ptr %a34 call void @finch_str_copy(ptr %a35, ptr %a34) %t36 = load { ptr, i64, i64 }, ptr %a35 ret { ptr, i64, i64 } %t36 } define internal i1 @finch.parser.at(ptr %p0, { ptr, i64, i64 } %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null br i1 %t4, label %panic986, label %ok987 panic986: call void @finch_panic(ptr @.str.558, i64 35, ptr @.str.559) unreachable ok987: %t5 = getelementptr inbounds %S.parser.Parser, ptr %t3, i32 0, i32 0 %t6 = load ptr, ptr %a1 %t7 = icmp eq ptr %t6, null br i1 %t7, label %panic988, label %ok989 panic988: call void @finch_panic(ptr @.str.560, i64 35, ptr @.str.561) unreachable ok989: %t8 = getelementptr inbounds %S.parser.Parser, ptr %t6, i32 0, i32 1 %t9 = load i64, ptr %t8 %t10 = load { ptr, i64, i64 }, ptr %t5 %t11 = extractvalue { ptr, i64, i64 } %t10, 1 %t12 = icmp uge i64 %t9, %t11 br i1 %t12, label %range990, label %inrange991 range990: call void @finch_panic_index(ptr @.str.562, i64 35, i64 %t9, i64 %t11) unreachable inrange991: %t13 = extractvalue { ptr, i64, i64 } %t10, 0 %t14 = getelementptr inbounds %S.lexer.Token, ptr %t13, i64 %t9 %t15 = getelementptr inbounds %S.lexer.Token, ptr %t14, i32 0, i32 0 %t16 = load { ptr, i64, i64 }, ptr %t15 %t17 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t16, ptr %a18 store { ptr, i64, i64 } %t17, ptr %a19 %t20 = call i32 @finch_str_eq(ptr %a18, ptr %a19) %t21 = icmp ne i32 %t20, 0 ret i1 %t21 } define internal %S.lexer.Token @finch.parser.next(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a15 = alloca %S.lexer.Token, align 16 %a16 = alloca %S.lexer.Token, align 16 %a18 = alloca %S.lexer.Token, align 16 %a25 = alloca %S.lexer.Token, align 16 %a26 = alloca %S.lexer.Token, align 16 store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = icmp eq ptr %t2, null br i1 %t3, label %panic992, label %ok993 panic992: call void @finch_panic(ptr @.str.563, i64 39, ptr @.str.564) unreachable ok993: %t4 = getelementptr inbounds %S.parser.Parser, ptr %t2, i32 0, i32 0 %t5 = load ptr, ptr %a1 %t6 = icmp eq ptr %t5, null br i1 %t6, label %panic994, label %ok995 panic994: call void @finch_panic(ptr @.str.565, i64 39, ptr @.str.566) unreachable ok995: %t7 = getelementptr inbounds %S.parser.Parser, ptr %t5, i32 0, i32 1 %t8 = load i64, ptr %t7 %t9 = load { ptr, i64, i64 }, ptr %t4 %t10 = extractvalue { ptr, i64, i64 } %t9, 1 %t11 = icmp uge i64 %t8, %t10 br i1 %t11, label %range996, label %inrange997 range996: call void @finch_panic_index(ptr @.str.567, i64 39, i64 %t8, i64 %t10) unreachable inrange997: %t12 = extractvalue { ptr, i64, i64 } %t9, 0 %t13 = getelementptr inbounds %S.lexer.Token, ptr %t12, i64 %t8 %t14 = load %S.lexer.Token, ptr %t13 store %S.lexer.Token %t14, ptr %a15 call void @finch.copy.S_lexer_Token(ptr %a16, ptr %a15) %t17 = load %S.lexer.Token, ptr %a16 store %S.lexer.Token %t17, ptr %a18 %t19 = load ptr, ptr %a1 %t20 = icmp eq ptr %t19, null br i1 %t20, label %panic998, label %ok999 panic998: call void @finch_panic(ptr @.str.568, i64 40, ptr @.str.569) unreachable ok999: %t21 = getelementptr inbounds %S.parser.Parser, ptr %t19, i32 0, i32 1 %t22 = load i64, ptr %t21 %t23 = add i64 %t22, 1 store i64 %t23, ptr %t21 %t24 = load %S.lexer.Token, ptr %a18 store %S.lexer.Token %t24, ptr %a25 call void @finch.copy.S_lexer_Token(ptr %a26, ptr %a25) %t27 = load %S.lexer.Token, ptr %a26 ret %S.lexer.Token %t27 } define internal i1 @finch.parser.accept(ptr %p0, { ptr, i64, i64 } %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = load { ptr, i64, i64 }, ptr %a2 %t5 = call i1 @finch.parser.at(ptr %t3, { ptr, i64, i64 } %t4) br i1 %t5, label %then1000, label %endif1002 then1000: %t6 = load ptr, ptr %a1 %t7 = icmp eq ptr %t6, null br i1 %t7, label %panic1003, label %ok1004 panic1003: call void @finch_panic(ptr @.str.570, i64 46, ptr @.str.571) unreachable ok1004: %t8 = getelementptr inbounds %S.parser.Parser, ptr %t6, i32 0, i32 1 %t9 = load i64, ptr %t8 %t10 = add i64 %t9, 1 store i64 %t10, ptr %t8 ret i1 true endif1002: ret i1 false } define internal { ptr, i64, i64 } @finch.parser.describe(%S.lexer.Token %p0) { entry: %a1 = alloca %S.lexer.Token, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 store %S.lexer.Token %p0, ptr %a1 %t2 = getelementptr inbounds %S.lexer.Token, ptr %a1, i32 0, i32 0 %t3 = load { ptr, i64, i64 }, ptr %t2 store { ptr, i64, i64 } %t3, ptr %a4 store { ptr, i64, i64 } { ptr @.str.572, i64 5, i64 0 }, ptr %a5 %t6 = call i32 @finch_str_eq(ptr %a4, ptr %a5) %t7 = icmp ne i32 %t6, 0 br i1 %t7, label %then1005, label %endif1007 then1005: %t8 = getelementptr inbounds %S.lexer.Token, ptr %a1, i32 0, i32 1 %t9 = load { ptr, i64, i64 }, ptr %t8 store { ptr, i64, i64 } { ptr @.str.573, i64 1, i64 0 }, ptr %a11 store { ptr, i64, i64 } %t9, ptr %a12 call void @finch_str_concat(ptr %a10, ptr %a11, ptr %a12) %t13 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t13, ptr %a15 store { ptr, i64, i64 } { ptr @.str.574, i64 1, i64 0 }, ptr %a16 call void @finch_str_concat(ptr %a14, ptr %a15, ptr %a16) %t17 = load { ptr, i64, i64 }, ptr %a14 ret { ptr, i64, i64 } %t17 endif1007: %t18 = getelementptr inbounds %S.lexer.Token, ptr %a1, i32 0, i32 0 %t19 = load { ptr, i64, i64 }, ptr %t18 store { ptr, i64, i64 } %t19, ptr %a20 store { ptr, i64, i64 } { ptr @.str.575, i64 3, i64 0 }, ptr %a21 %t22 = call i32 @finch_str_eq(ptr %a20, ptr %a21) %t23 = icmp ne i32 %t22, 0 br i1 %t23, label %then1008, label %endif1010 then1008: ret { ptr, i64, i64 } { ptr @.str.576, i64 11, i64 0 } endif1010: %t24 = getelementptr inbounds %S.lexer.Token, ptr %a1, i32 0, i32 0 %t25 = load { ptr, i64, i64 }, ptr %t24 store { ptr, i64, i64 } %t25, ptr %a26 store { ptr, i64, i64 } { ptr @.str.577, i64 3, i64 0 }, ptr %a27 %t28 = call i32 @finch_str_eq(ptr %a26, ptr %a27) %t29 = icmp ne i32 %t28, 0 br label %logic.from1011 logic.from1011: br i1 %t29, label %logic.end1013, label %logic.rhs1012 logic.rhs1012: %t30 = getelementptr inbounds %S.lexer.Token, ptr %a1, i32 0, i32 0 %t31 = load { ptr, i64, i64 }, ptr %t30 store { ptr, i64, i64 } %t31, ptr %a32 store { ptr, i64, i64 } { ptr @.str.578, i64 5, i64 0 }, ptr %a33 %t34 = call i32 @finch_str_eq(ptr %a32, ptr %a33) %t35 = icmp ne i32 %t34, 0 br label %logic.rend1014 logic.rend1014: br label %logic.end1013 logic.end1013: %t36 = phi i1 [ true, %logic.from1011 ], [ %t35, %logic.rend1014 ] br i1 %t36, label %then1015, label %endif1017 then1015: ret { ptr, i64, i64 } { ptr @.str.579, i64 8, i64 0 } endif1017: %t37 = getelementptr inbounds %S.lexer.Token, ptr %a1, i32 0, i32 0 %t38 = load { ptr, i64, i64 }, ptr %t37 store { ptr, i64, i64 } %t38, ptr %a39 store { ptr, i64, i64 } { ptr @.str.580, i64 6, i64 0 }, ptr %a40 %t41 = call i32 @finch_str_eq(ptr %a39, ptr %a40) %t42 = icmp ne i32 %t41, 0 br i1 %t42, label %then1018, label %endif1020 then1018: ret { ptr, i64, i64 } { ptr @.str.581, i64 8, i64 0 } endif1020: %t43 = getelementptr inbounds %S.lexer.Token, ptr %a1, i32 0, i32 0 %t44 = load { ptr, i64, i64 }, ptr %t43 store { ptr, i64, i64 } %t44, ptr %a45 store { ptr, i64, i64 } { ptr @.str.582, i64 4, i64 0 }, ptr %a46 %t47 = call i32 @finch_str_eq(ptr %a45, ptr %a46) %t48 = icmp ne i32 %t47, 0 br i1 %t48, label %then1021, label %endif1023 then1021: ret { ptr, i64, i64 } { ptr @.str.583, i64 6, i64 0 } endif1023: %t49 = getelementptr inbounds %S.lexer.Token, ptr %a1, i32 0, i32 0 %t50 = load { ptr, i64, i64 }, ptr %t49 store { ptr, i64, i64 } { ptr @.str.584, i64 1, i64 0 }, ptr %a52 store { ptr, i64, i64 } %t50, ptr %a53 call void @finch_str_concat(ptr %a51, ptr %a52, ptr %a53) %t54 = load { ptr, i64, i64 }, ptr %a51 store { ptr, i64, i64 } %t54, ptr %a56 store { ptr, i64, i64 } { ptr @.str.585, i64 1, i64 0 }, ptr %a57 call void @finch_str_concat(ptr %a55, ptr %a56, ptr %a57) %t58 = load { ptr, i64, i64 }, ptr %a55 ret { ptr, i64, i64 } %t58 } define internal %S.lexer.Token @finch.parser.expect(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = load { ptr, i64, i64 }, ptr %a2 %t6 = call i1 @finch.parser.at(ptr %t4, { ptr, i64, i64 } %t5) %t7 = xor i1 %t6, true br i1 %t7, label %then1024, label %endif1026 then1024: %t8 = load ptr, ptr %a1 %t9 = load ptr, ptr %a1 %t10 = call %S.lexer.Token @finch.parser.cur(ptr %t9) %t11 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } { ptr @.str.586, i64 9, i64 0 }, ptr %a13 store { ptr, i64, i64 } %t11, ptr %a14 call void @finch_str_concat(ptr %a12, ptr %a13, ptr %a14) %t15 = load { ptr, i64, i64 }, ptr %a12 store { ptr, i64, i64 } %t15, ptr %a17 store { ptr, i64, i64 } { ptr @.str.587, i64 8, i64 0 }, ptr %a18 call void @finch_str_concat(ptr %a16, ptr %a17, ptr %a18) %t19 = load { ptr, i64, i64 }, ptr %a16 %t20 = load ptr, ptr %a1 %t21 = call %S.lexer.Token @finch.parser.cur(ptr %t20) %t22 = call { ptr, i64, i64 } @finch.parser.describe(%S.lexer.Token %t21) store { ptr, i64, i64 } %t19, ptr %a24 store { ptr, i64, i64 } %t22, ptr %a25 call void @finch_str_concat(ptr %a23, ptr %a24, ptr %a25) %t26 = load { ptr, i64, i64 }, ptr %a23 call void @finch.parser.fail(ptr %t8, %S.lexer.Token %t10, { ptr, i64, i64 } %t26) br label %endif1026 endif1026: %t27 = load ptr, ptr %a1 %t28 = call %S.lexer.Token @finch.parser.next(ptr %t27) ret %S.lexer.Token %t28 } define internal i1 @finch.parser.sameLine(ptr %p0) { entry: %a1 = alloca ptr, align 16 store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = icmp eq ptr %t2, null br i1 %t3, label %panic1027, label %ok1028 panic1027: call void @finch_panic(ptr @.str.588, i64 79, ptr @.str.589) unreachable ok1028: %t4 = getelementptr inbounds %S.parser.Parser, ptr %t2, i32 0, i32 2 %t5 = load i64, ptr %t4 %t6 = icmp sgt i64 %t5, 0 br label %logic.from1029 logic.from1029: br i1 %t6, label %logic.end1031, label %logic.rhs1030 logic.rhs1030: %t7 = load ptr, ptr %a1 %t8 = icmp eq ptr %t7, null br i1 %t8, label %panic1032, label %ok1033 panic1032: call void @finch_panic(ptr @.str.590, i64 79, ptr @.str.591) unreachable ok1033: %t9 = getelementptr inbounds %S.parser.Parser, ptr %t7, i32 0, i32 0 %t10 = load ptr, ptr %a1 %t11 = icmp eq ptr %t10, null br i1 %t11, label %panic1034, label %ok1035 panic1034: call void @finch_panic(ptr @.str.592, i64 79, ptr @.str.593) unreachable ok1035: %t12 = getelementptr inbounds %S.parser.Parser, ptr %t10, i32 0, i32 1 %t13 = load i64, ptr %t12 %t14 = load { ptr, i64, i64 }, ptr %t9 %t15 = extractvalue { ptr, i64, i64 } %t14, 1 %t16 = icmp uge i64 %t13, %t15 br i1 %t16, label %range1036, label %inrange1037 range1036: call void @finch_panic_index(ptr @.str.594, i64 79, i64 %t13, i64 %t15) unreachable inrange1037: %t17 = extractvalue { ptr, i64, i64 } %t14, 0 %t18 = getelementptr inbounds %S.lexer.Token, ptr %t17, i64 %t13 %t19 = getelementptr inbounds %S.lexer.Token, ptr %t18, i32 0, i32 4 %t20 = load i1, ptr %t19 %t21 = xor i1 %t20, true br label %logic.rend1038 logic.rend1038: br label %logic.end1031 logic.end1031: %t22 = phi i1 [ true, %logic.from1029 ], [ %t21, %logic.rend1038 ] ret i1 %t22 } define internal %S.ast.Node @finch.parser.node(ptr %p0, { ptr, i64, i64 } %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca %S.lexer.Token, align 16 %a17 = alloca %S.lexer.Token, align 16 %a19 = alloca %S.lexer.Token, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null br i1 %t4, label %panic1039, label %ok1040 panic1039: call void @finch_panic(ptr @.str.595, i64 83, ptr @.str.596) unreachable ok1040: %t5 = getelementptr inbounds %S.parser.Parser, ptr %t3, i32 0, i32 0 %t6 = load ptr, ptr %a1 %t7 = icmp eq ptr %t6, null br i1 %t7, label %panic1041, label %ok1042 panic1041: call void @finch_panic(ptr @.str.597, i64 83, ptr @.str.598) unreachable ok1042: %t8 = getelementptr inbounds %S.parser.Parser, ptr %t6, i32 0, i32 1 %t9 = load i64, ptr %t8 %t10 = load { ptr, i64, i64 }, ptr %t5 %t11 = extractvalue { ptr, i64, i64 } %t10, 1 %t12 = icmp uge i64 %t9, %t11 br i1 %t12, label %range1043, label %inrange1044 range1043: call void @finch_panic_index(ptr @.str.599, i64 83, i64 %t9, i64 %t11) unreachable inrange1044: %t13 = extractvalue { ptr, i64, i64 } %t10, 0 %t14 = getelementptr inbounds %S.lexer.Token, ptr %t13, i64 %t9 %t15 = load %S.lexer.Token, ptr %t14 store %S.lexer.Token %t15, ptr %a16 call void @finch.copy.S_lexer_Token(ptr %a17, ptr %a16) %t18 = load %S.lexer.Token, ptr %a17 store %S.lexer.Token %t18, ptr %a19 %t20 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t20, ptr %a21 call void @finch_str_copy(ptr %a22, ptr %a21) %t23 = load { ptr, i64, i64 }, ptr %a22 %t24 = insertvalue %S.ast.Node zeroinitializer, { ptr, i64, i64 } %t23, 0 %t25 = getelementptr inbounds %S.lexer.Token, ptr %a19, i32 0, i32 2 %t26 = load i64, ptr %t25 %t27 = insertvalue %S.ast.Node %t24, i64 %t26, 11 %t28 = getelementptr inbounds %S.lexer.Token, ptr %a19, i32 0, i32 3 %t29 = load i64, ptr %t28 %t30 = insertvalue %S.ast.Node %t27, i64 %t29, 12 %t31 = load ptr, ptr %a1 %t32 = icmp eq ptr %t31, null br i1 %t32, label %panic1045, label %ok1046 panic1045: call void @finch_panic(ptr @.str.600, i64 84, ptr @.str.601) unreachable ok1046: %t33 = getelementptr inbounds %S.parser.Parser, ptr %t31, i32 0, i32 3 %t34 = load i64, ptr %t33 %t35 = insertvalue %S.ast.Node %t30, i64 %t34, 13 ret %S.ast.Node %t35 } define internal i1 @finch.parser.isTypeName({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca i64, align 16 %a29 = alloca i64, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = mul i64 16, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t3 = call ptr @finch_alloc(i64 %t2) %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 0 store { ptr, i64, i64 } { ptr @.str.602, i64 3, i64 0 }, ptr %t4 %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 1 store { ptr, i64, i64 } { ptr @.str.603, i64 5, i64 0 }, ptr %t5 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 2 store { ptr, i64, i64 } { ptr @.str.604, i64 4, i64 0 }, ptr %t6 %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 3 store { ptr, i64, i64 } { ptr @.str.605, i64 4, i64 0 }, ptr %t7 %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 4 store { ptr, i64, i64 } { ptr @.str.606, i64 3, i64 0 }, ptr %t8 %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 5 store { ptr, i64, i64 } { ptr @.str.607, i64 3, i64 0 }, ptr %t9 %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 6 store { ptr, i64, i64 } { ptr @.str.608, i64 2, i64 0 }, ptr %t10 %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 7 store { ptr, i64, i64 } { ptr @.str.609, i64 3, i64 0 }, ptr %t11 %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 8 store { ptr, i64, i64 } { ptr @.str.610, i64 3, i64 0 }, ptr %t12 %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 9 store { ptr, i64, i64 } { ptr @.str.611, i64 3, i64 0 }, ptr %t13 %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 10 store { ptr, i64, i64 } { ptr @.str.612, i64 2, i64 0 }, ptr %t14 %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 11 store { ptr, i64, i64 } { ptr @.str.613, i64 3, i64 0 }, ptr %t15 %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 12 store { ptr, i64, i64 } { ptr @.str.614, i64 3, i64 0 }, ptr %t16 %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 13 store { ptr, i64, i64 } { ptr @.str.615, i64 3, i64 0 }, ptr %t17 %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 14 store { ptr, i64, i64 } { ptr @.str.616, i64 3, i64 0 }, ptr %t18 %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 15 store { ptr, i64, i64 } { ptr @.str.617, i64 3, i64 0 }, ptr %t19 %t20 = insertvalue { ptr, i64, i64 } undef, ptr %t3, 0 %t21 = insertvalue { ptr, i64, i64 } %t20, i64 16, 1 %t22 = insertvalue { ptr, i64, i64 } %t21, i64 16, 2 store { ptr, i64, i64 } %t22, ptr %a23 %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %a23, i32 0, i32 1 %t25 = load { ptr, i64, i64 }, ptr %a1 store i64 -1, ptr %a26 %t27 = load i64, ptr %t24 %t28 = load ptr, ptr %a23 store i64 0, ptr %a29 br label %find.cond1047 find.cond1047: %t30 = load i64, ptr %a29 %t31 = icmp slt i64 %t30, %t27 br i1 %t31, label %find.body1048, label %find.end1051 find.body1048: %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %t28, i64 %t30 %t33 = load { ptr, i64, i64 }, ptr %t32 store { ptr, i64, i64 } %t33, ptr %a34 store { ptr, i64, i64 } %t25, ptr %a35 %t36 = call i32 @finch_str_eq(ptr %a34, ptr %a35) %t37 = icmp ne i32 %t36, 0 br i1 %t37, label %find.hit1049, label %find.next1050 find.hit1049: store i64 %t30, ptr %a26 br label %find.end1051 find.next1050: %t38 = add i64 %t30, 1 store i64 %t38, ptr %a29 br label %find.cond1047 find.end1051: %t39 = load i64, ptr %a26 %t40 = icmp sge i64 %t39, 0 ret i1 %t40 } define internal %S.ast.Type @finch.parser.parseType(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca %S.ast.Type, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca %S.ast.Type, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a85 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca %S.ast.Type, align 16 %a94 = alloca { ptr, i64, i64 }, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca { ptr, i64, i64 }, align 16 %a104 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca { ptr, i64, i64 }, align 16 %a110 = alloca { ptr, i64, i64 }, align 16 %a122 = alloca { ptr, i64, i64 }, align 16 %a123 = alloca { ptr, i64, i64 }, align 16 %a143 = alloca %S.ast.Type, align 16 %a144 = alloca %S.ast.Type, align 16 store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = call i1 @finch.parser.accept(ptr %t2, { ptr, i64, i64 } { ptr @.str.618, i64 1, i64 0 }) br i1 %t3, label %then1052, label %endif1054 then1052: %t4 = load ptr, ptr %a1 %t5 = call %S.lexer.Token @finch.parser.expect(ptr %t4, { ptr, i64, i64 } { ptr @.str.619, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.620, i64 36, i64 0 }) %t6 = load ptr, ptr %a1 %t7 = call %S.ast.Type @finch.parser.parseType(ptr %t6) %t8 = call %S.ast.Type @finch.ast.arrayOf(%S.ast.Type %t7) ret %S.ast.Type %t8 endif1054: %t9 = load ptr, ptr %a1 %t10 = call i1 @finch.parser.at(ptr %t9, { ptr, i64, i64 } { ptr @.str.621, i64 5, i64 0 }) %t11 = xor i1 %t10, true br i1 %t11, label %then1055, label %endif1057 then1055: %t12 = load ptr, ptr %a1 %t13 = load ptr, ptr %a1 %t14 = call %S.lexer.Token @finch.parser.cur(ptr %t13) %t15 = load ptr, ptr %a1 %t16 = call %S.lexer.Token @finch.parser.cur(ptr %t15) %t17 = call { ptr, i64, i64 } @finch.parser.describe(%S.lexer.Token %t16) store { ptr, i64, i64 } { ptr @.str.622, i64 11, i64 0 }, ptr %a19 store { ptr, i64, i64 } %t17, ptr %a20 call void @finch_str_concat(ptr %a18, ptr %a19, ptr %a20) %t21 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t21, ptr %a23 store { ptr, i64, i64 } { ptr @.str.623, i64 56, i64 0 }, ptr %a24 call void @finch_str_concat(ptr %a22, ptr %a23, ptr %a24) %t25 = load { ptr, i64, i64 }, ptr %a22 call void @finch.parser.fail(ptr %t12, %S.lexer.Token %t14, { ptr, i64, i64 } %t25) br label %endif1057 endif1057: %t26 = load ptr, ptr %a1 %t27 = call %S.lexer.Token @finch.parser.next(ptr %t26) %t28 = extractvalue %S.lexer.Token %t27, 1 store { ptr, i64, i64 } %t28, ptr %a29 call void @finch_str_copy(ptr %a30, ptr %a29) %t31 = load { ptr, i64, i64 }, ptr %a30 store { ptr, i64, i64 } %t31, ptr %a32 %t33 = load { ptr, i64, i64 }, ptr %a32 store { ptr, i64, i64 } %t33, ptr %a34 store { ptr, i64, i64 } { ptr @.str.624, i64 3, i64 0 }, ptr %a35 %t36 = call i32 @finch_str_eq(ptr %a34, ptr %a35) %t37 = icmp ne i32 %t36, 0 br label %logic.from1058 logic.from1058: br i1 %t37, label %logic.rhs1059, label %logic.end1060 logic.rhs1059: %t38 = load ptr, ptr %a1 %t39 = call i1 @finch.parser.at(ptr %t38, { ptr, i64, i64 } { ptr @.str.625, i64 1, i64 0 }) br label %logic.rend1061 logic.rend1061: br label %logic.end1060 logic.end1060: %t40 = phi i1 [ false, %logic.from1058 ], [ %t39, %logic.rend1061 ] br i1 %t40, label %then1062, label %endif1064 then1062: %t41 = load ptr, ptr %a1 %t42 = call %S.lexer.Token @finch.parser.next(ptr %t41) %t43 = load ptr, ptr %a1 %t44 = call %S.ast.Type @finch.parser.parseType(ptr %t43) store %S.ast.Type %t44, ptr %a45 %t46 = load ptr, ptr %a1 %t47 = call %S.lexer.Token @finch.parser.expect(ptr %t46, { ptr, i64, i64 } { ptr @.str.626, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.627, i64 39, i64 0 }) %t48 = load %S.ast.Type, ptr %a45 %t49 = load ptr, ptr %a1 %t50 = call %S.ast.Type @finch.parser.parseType(ptr %t49) %t51 = call %S.ast.Type @finch.ast.mapOf(%S.ast.Type %t48, %S.ast.Type %t50) ret %S.ast.Type %t51 endif1064: %t52 = load { ptr, i64, i64 }, ptr %a32 %t53 = call i1 @finch.parser.isTypeName({ ptr, i64, i64 } %t52) br i1 %t53, label %then1065, label %endif1067 then1065: %t54 = load { ptr, i64, i64 }, ptr %a32 store { ptr, i64, i64 } %t54, ptr %a55 store { ptr, i64, i64 } { ptr @.str.628, i64 3, i64 0 }, ptr %a56 %t57 = call i32 @finch_str_eq(ptr %a55, ptr %a56) %t58 = icmp ne i32 %t57, 0 br label %logic.from1068 logic.from1068: br i1 %t58, label %logic.rhs1069, label %logic.end1070 logic.rhs1069: %t59 = load ptr, ptr %a1 %t60 = call i1 @finch.parser.accept(ptr %t59, { ptr, i64, i64 } { ptr @.str.629, i64 1, i64 0 }) br label %logic.rend1071 logic.rend1071: br label %logic.end1070 logic.end1070: %t61 = phi i1 [ false, %logic.from1068 ], [ %t60, %logic.rend1071 ] br i1 %t61, label %then1072, label %endif1074 then1072: %t62 = load ptr, ptr %a1 %t63 = call %S.ast.Type @finch.parser.parseType(ptr %t62) %t64 = call %S.ast.Type @finch.ast.ptrTo(%S.ast.Type %t63) store %S.ast.Type %t64, ptr %a65 %t66 = load ptr, ptr %a1 %t67 = call %S.lexer.Token @finch.parser.expect(ptr %t66, { ptr, i64, i64 } { ptr @.str.630, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.631, i64 3, i64 0 }) %t68 = load %S.ast.Type, ptr %a65 ret %S.ast.Type %t68 endif1074: %t69 = load { ptr, i64, i64 }, ptr %a32 store { ptr, i64, i64 } %t69, ptr %a70 store { ptr, i64, i64 } { ptr @.str.632, i64 3, i64 0 }, ptr %a71 %t72 = call i32 @finch_str_eq(ptr %a70, ptr %a71) %t73 = icmp ne i32 %t72, 0 br i1 %t73, label %then1075, label %endif1077 then1075: %t74 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.633, i64 3, i64 0 }) ret %S.ast.Type %t74 endif1077: %t75 = load { ptr, i64, i64 }, ptr %a32 store { ptr, i64, i64 } %t75, ptr %a76 store { ptr, i64, i64 } { ptr @.str.634, i64 3, i64 0 }, ptr %a77 %t78 = call i32 @finch_str_eq(ptr %a76, ptr %a77) %t79 = icmp ne i32 %t78, 0 br i1 %t79, label %then1078, label %endif1080 then1078: %t80 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.635, i64 5, i64 0 }) ret %S.ast.Type %t80 endif1080: %t81 = load { ptr, i64, i64 }, ptr %a32 %t82 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } %t81) ret %S.ast.Type %t82 endif1067: %t83 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.636, i64 5, i64 0 }, 0 %t84 = load { ptr, i64, i64 }, ptr %a32 store { ptr, i64, i64 } %t84, ptr %a85 call void @finch_str_copy(ptr %a86, ptr %a85) %t87 = load { ptr, i64, i64 }, ptr %a86 %t88 = insertvalue %S.ast.Type %t83, { ptr, i64, i64 } %t87, 2 store %S.ast.Type %t88, ptr %a89 %t90 = load ptr, ptr %a1 %t91 = call i1 @finch.parser.at(ptr %t90, { ptr, i64, i64 } { ptr @.str.637, i64 1, i64 0 }) br label %logic.from1081 logic.from1081: br i1 %t91, label %logic.rhs1082, label %logic.end1083 logic.rhs1082: %t92 = load ptr, ptr %a1 %t93 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t92, i64 1) store { ptr, i64, i64 } %t93, ptr %a94 store { ptr, i64, i64 } { ptr @.str.638, i64 5, i64 0 }, ptr %a95 %t96 = call i32 @finch_str_eq(ptr %a94, ptr %a95) %t97 = icmp ne i32 %t96, 0 br label %logic.rend1084 logic.rend1084: br label %logic.end1083 logic.end1083: %t98 = phi i1 [ false, %logic.from1081 ], [ %t97, %logic.rend1084 ] br i1 %t98, label %then1085, label %endif1087 then1085: %t99 = load ptr, ptr %a1 %t100 = call %S.lexer.Token @finch.parser.next(ptr %t99) %t101 = load { ptr, i64, i64 }, ptr %a32 %t102 = getelementptr inbounds %S.ast.Type, ptr %a89, i32 0, i32 3 store { ptr, i64, i64 } %t101, ptr %a103 call void @finch_str_copy(ptr %a104, ptr %a103) %t105 = load { ptr, i64, i64 }, ptr %a104 store { ptr, i64, i64 } %t105, ptr %t102 %t106 = load ptr, ptr %a1 %t107 = call %S.lexer.Token @finch.parser.next(ptr %t106) %t108 = extractvalue %S.lexer.Token %t107, 1 store { ptr, i64, i64 } %t108, ptr %a109 call void @finch_str_copy(ptr %a110, ptr %a109) %t111 = load { ptr, i64, i64 }, ptr %a110 %t112 = getelementptr inbounds %S.ast.Type, ptr %a89, i32 0, i32 2 store { ptr, i64, i64 } %t111, ptr %t112 br label %endif1087 endif1087: %t113 = load ptr, ptr %a1 %t114 = call i1 @finch.parser.at(ptr %t113, { ptr, i64, i64 } { ptr @.str.639, i64 1, i64 0 }) br label %logic.from1088 logic.from1088: br i1 %t114, label %logic.rhs1089, label %logic.end1090 logic.rhs1089: %t115 = load ptr, ptr %a1 %t116 = call %S.lexer.Token @finch.parser.cur(ptr %t115) %t117 = extractvalue %S.lexer.Token %t116, 4 %t118 = xor i1 %t117, true br label %logic.rend1091 logic.rend1091: br label %logic.end1090 logic.end1090: %t119 = phi i1 [ false, %logic.from1088 ], [ %t118, %logic.rend1091 ] br label %logic.from1092 logic.from1092: br i1 %t119, label %logic.rhs1093, label %logic.end1094 logic.rhs1093: %t120 = load ptr, ptr %a1 %t121 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t120, i64 1) store { ptr, i64, i64 } %t121, ptr %a122 store { ptr, i64, i64 } { ptr @.str.640, i64 1, i64 0 }, ptr %a123 %t124 = call i32 @finch_str_eq(ptr %a122, ptr %a123) %t125 = icmp eq i32 %t124, 0 br label %logic.rend1095 logic.rend1095: br label %logic.end1094 logic.end1094: %t126 = phi i1 [ false, %logic.from1092 ], [ %t125, %logic.rend1095 ] br i1 %t126, label %then1096, label %endif1098 then1096: %t127 = load ptr, ptr %a1 %t128 = call %S.lexer.Token @finch.parser.next(ptr %t127) br label %while.cond1099 while.cond1099: br label %while.body1100 while.body1100: %t129 = getelementptr inbounds %S.ast.Type, ptr %a89, i32 0, i32 1 %t130 = getelementptr inbounds { ptr, i64, i64 }, ptr %t129, i32 0, i32 1 %t131 = load ptr, ptr %a1 %t132 = call %S.ast.Type @finch.parser.parseType(ptr %t131) %t133 = load i64, ptr %t130 %t134 = add i64 %t133, 1 call void @finch_arr_reserve(ptr %t129, i64 %t134, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) %t135 = load ptr, ptr %t129 %t136 = getelementptr inbounds %S.ast.Type, ptr %t135, i64 %t133 store %S.ast.Type %t132, ptr %t136 store i64 %t134, ptr %t130 %t137 = load ptr, ptr %a1 %t138 = call i1 @finch.parser.accept(ptr %t137, { ptr, i64, i64 } { ptr @.str.641, i64 1, i64 0 }) %t139 = xor i1 %t138, true br i1 %t139, label %then1102, label %endif1104 then1102: br label %while.end1101 endif1104: br label %while.cond1099 while.end1101: %t140 = load ptr, ptr %a1 %t141 = call %S.lexer.Token @finch.parser.expect(ptr %t140, { ptr, i64, i64 } { ptr @.str.642, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.643, i64 28, i64 0 }) br label %endif1098 endif1098: %t142 = load %S.ast.Type, ptr %a89 store %S.ast.Type %t142, ptr %a143 call void @finch.copy.S_ast_Type(ptr %a144, ptr %a143) %t145 = load %S.ast.Type, ptr %a144 ret %S.ast.Type %t145 } define internal i1 @finch.parser.genericDeclAhead(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca i64, align 16 %a25 = alloca i64, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a85 = alloca { ptr, i64, i64 }, align 16 %a104 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = call i1 @finch.parser.at(ptr %t2, { ptr, i64, i64 } { ptr @.str.644, i64 5, i64 0 }) %t4 = xor i1 %t3, true br label %logic.from1105 logic.from1105: br i1 %t4, label %logic.end1107, label %logic.rhs1106 logic.rhs1106: %t5 = load ptr, ptr %a1 %t6 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t5, i64 1) store { ptr, i64, i64 } %t6, ptr %a7 store { ptr, i64, i64 } { ptr @.str.645, i64 1, i64 0 }, ptr %a8 %t9 = call i32 @finch_str_eq(ptr %a7, ptr %a8) %t10 = icmp eq i32 %t9, 0 br label %logic.rend1108 logic.rend1108: br label %logic.end1107 logic.end1107: %t11 = phi i1 [ true, %logic.from1105 ], [ %t10, %logic.rend1108 ] br label %logic.from1109 logic.from1109: br i1 %t11, label %logic.end1111, label %logic.rhs1110 logic.rhs1110: %t12 = load ptr, ptr %a1 %t13 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t12, i64 2) store { ptr, i64, i64 } %t13, ptr %a14 store { ptr, i64, i64 } { ptr @.str.646, i64 1, i64 0 }, ptr %a15 %t16 = call i32 @finch_str_eq(ptr %a14, ptr %a15) %t17 = icmp ne i32 %t16, 0 br label %logic.rend1112 logic.rend1112: br label %logic.end1111 logic.end1111: %t18 = phi i1 [ true, %logic.from1109 ], [ %t17, %logic.rend1112 ] br i1 %t18, label %then1113, label %endif1115 then1113: ret i1 false endif1115: store i64 0, ptr %a19 %t20 = load ptr, ptr %a1 %t21 = icmp eq ptr %t20, null br i1 %t21, label %panic1116, label %ok1117 panic1116: call void @finch_panic(ptr @.str.647, i64 148, ptr @.str.648) unreachable ok1117: %t22 = getelementptr inbounds %S.parser.Parser, ptr %t20, i32 0, i32 1 %t23 = load i64, ptr %t22 %t24 = add i64 %t23, 1 store i64 %t24, ptr %a25 br label %while.cond1118 while.cond1118: %t26 = load i64, ptr %a25 %t27 = load ptr, ptr %a1 %t28 = icmp eq ptr %t27, null br i1 %t28, label %panic1121, label %ok1122 panic1121: call void @finch_panic(ptr @.str.649, i64 149, ptr @.str.650) unreachable ok1122: %t29 = getelementptr inbounds %S.parser.Parser, ptr %t27, i32 0, i32 0 %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i32 0, i32 1 %t31 = load i64, ptr %t30 %t32 = icmp slt i64 %t26, %t31 br i1 %t32, label %while.body1119, label %while.end1120 while.body1119: %t33 = load ptr, ptr %a1 %t34 = icmp eq ptr %t33, null br i1 %t34, label %panic1123, label %ok1124 panic1123: call void @finch_panic(ptr @.str.651, i64 150, ptr @.str.652) unreachable ok1124: %t35 = getelementptr inbounds %S.parser.Parser, ptr %t33, i32 0, i32 0 %t36 = load i64, ptr %a25 %t37 = load { ptr, i64, i64 }, ptr %t35 %t38 = extractvalue { ptr, i64, i64 } %t37, 1 %t39 = icmp uge i64 %t36, %t38 br i1 %t39, label %range1125, label %inrange1126 range1125: call void @finch_panic_index(ptr @.str.653, i64 150, i64 %t36, i64 %t38) unreachable inrange1126: %t40 = extractvalue { ptr, i64, i64 } %t37, 0 %t41 = getelementptr inbounds %S.lexer.Token, ptr %t40, i64 %t36 %t42 = getelementptr inbounds %S.lexer.Token, ptr %t41, i32 0, i32 0 %t43 = load { ptr, i64, i64 }, ptr %t42 store { ptr, i64, i64 } %t43, ptr %a44 call void @finch_str_copy(ptr %a45, ptr %a44) %t46 = load { ptr, i64, i64 }, ptr %a45 store { ptr, i64, i64 } %t46, ptr %a47 %t48 = load { ptr, i64, i64 }, ptr %a47 store { ptr, i64, i64 } %t48, ptr %a49 store { ptr, i64, i64 } { ptr @.str.654, i64 1, i64 0 }, ptr %a50 %t51 = call i32 @finch_str_eq(ptr %a49, ptr %a50) %t52 = icmp ne i32 %t51, 0 br i1 %t52, label %then1127, label %else1128 then1127: %t53 = load i64, ptr %a19 %t54 = add i64 %t53, 1 store i64 %t54, ptr %a19 br label %endif1129 else1128: %t55 = load { ptr, i64, i64 }, ptr %a47 store { ptr, i64, i64 } %t55, ptr %a56 store { ptr, i64, i64 } { ptr @.str.655, i64 1, i64 0 }, ptr %a57 %t58 = call i32 @finch_str_eq(ptr %a56, ptr %a57) %t59 = icmp ne i32 %t58, 0 br i1 %t59, label %then1130, label %else1131 then1130: %t60 = load i64, ptr %a19 %t61 = sub i64 %t60, 1 store i64 %t61, ptr %a19 %t62 = load i64, ptr %a19 %t63 = icmp eq i64 %t62, 0 br i1 %t63, label %then1133, label %endif1135 then1133: %t64 = load i64, ptr %a25 %t65 = add i64 %t64, 1 %t66 = load ptr, ptr %a1 %t67 = icmp eq ptr %t66, null br i1 %t67, label %panic1136, label %ok1137 panic1136: call void @finch_panic(ptr @.str.656, i64 156, ptr @.str.657) unreachable ok1137: %t68 = getelementptr inbounds %S.parser.Parser, ptr %t66, i32 0, i32 0 %t69 = getelementptr inbounds { ptr, i64, i64 }, ptr %t68, i32 0, i32 1 %t70 = load i64, ptr %t69 %t71 = icmp slt i64 %t65, %t70 br label %logic.from1138 logic.from1138: br i1 %t71, label %logic.rhs1139, label %logic.end1140 logic.rhs1139: %t72 = load ptr, ptr %a1 %t73 = icmp eq ptr %t72, null br i1 %t73, label %panic1141, label %ok1142 panic1141: call void @finch_panic(ptr @.str.658, i64 156, ptr @.str.659) unreachable ok1142: %t74 = getelementptr inbounds %S.parser.Parser, ptr %t72, i32 0, i32 0 %t75 = load i64, ptr %a25 %t76 = add i64 %t75, 1 %t77 = load { ptr, i64, i64 }, ptr %t74 %t78 = extractvalue { ptr, i64, i64 } %t77, 1 %t79 = icmp uge i64 %t76, %t78 br i1 %t79, label %range1143, label %inrange1144 range1143: call void @finch_panic_index(ptr @.str.660, i64 156, i64 %t76, i64 %t78) unreachable inrange1144: %t80 = extractvalue { ptr, i64, i64 } %t77, 0 %t81 = getelementptr inbounds %S.lexer.Token, ptr %t80, i64 %t76 %t82 = getelementptr inbounds %S.lexer.Token, ptr %t81, i32 0, i32 0 %t83 = load { ptr, i64, i64 }, ptr %t82 store { ptr, i64, i64 } %t83, ptr %a84 store { ptr, i64, i64 } { ptr @.str.661, i64 5, i64 0 }, ptr %a85 %t86 = call i32 @finch_str_eq(ptr %a84, ptr %a85) %t87 = icmp ne i32 %t86, 0 br label %logic.rend1145 logic.rend1145: br label %logic.end1140 logic.end1140: %t88 = phi i1 [ false, %logic.from1138 ], [ %t87, %logic.rend1145 ] br label %logic.from1146 logic.from1146: br i1 %t88, label %logic.rhs1147, label %logic.end1148 logic.rhs1147: %t89 = load ptr, ptr %a1 %t90 = icmp eq ptr %t89, null br i1 %t90, label %panic1149, label %ok1150 panic1149: call void @finch_panic(ptr @.str.662, i64 156, ptr @.str.663) unreachable ok1150: %t91 = getelementptr inbounds %S.parser.Parser, ptr %t89, i32 0, i32 0 %t92 = load i64, ptr %a25 %t93 = add i64 %t92, 1 %t94 = load { ptr, i64, i64 }, ptr %t91 %t95 = extractvalue { ptr, i64, i64 } %t94, 1 %t96 = icmp uge i64 %t93, %t95 br i1 %t96, label %range1151, label %inrange1152 range1151: call void @finch_panic_index(ptr @.str.664, i64 156, i64 %t93, i64 %t95) unreachable inrange1152: %t97 = extractvalue { ptr, i64, i64 } %t94, 0 %t98 = getelementptr inbounds %S.lexer.Token, ptr %t97, i64 %t93 %t99 = getelementptr inbounds %S.lexer.Token, ptr %t98, i32 0, i32 4 %t100 = load i1, ptr %t99 %t101 = xor i1 %t100, true br label %logic.rend1153 logic.rend1153: br label %logic.end1148 logic.end1148: %t102 = phi i1 [ false, %logic.from1146 ], [ %t101, %logic.rend1153 ] ret i1 %t102 endif1135: br label %endif1132 else1131: %t103 = load { ptr, i64, i64 }, ptr %a47 store { ptr, i64, i64 } %t103, ptr %a104 store { ptr, i64, i64 } { ptr @.str.665, i64 3, i64 0 }, ptr %a105 %t106 = call i32 @finch_str_eq(ptr %a104, ptr %a105) %t107 = icmp ne i32 %t106, 0 br label %logic.from1154 logic.from1154: br i1 %t107, label %logic.end1156, label %logic.rhs1155 logic.rhs1155: %t108 = load ptr, ptr %a1 %t109 = icmp eq ptr %t108, null br i1 %t109, label %panic1157, label %ok1158 panic1157: call void @finch_panic(ptr @.str.666, i64 158, ptr @.str.667) unreachable ok1158: %t110 = getelementptr inbounds %S.parser.Parser, ptr %t108, i32 0, i32 0 %t111 = load i64, ptr %a25 %t112 = load { ptr, i64, i64 }, ptr %t110 %t113 = extractvalue { ptr, i64, i64 } %t112, 1 %t114 = icmp uge i64 %t111, %t113 br i1 %t114, label %range1159, label %inrange1160 range1159: call void @finch_panic_index(ptr @.str.668, i64 158, i64 %t111, i64 %t113) unreachable inrange1160: %t115 = extractvalue { ptr, i64, i64 } %t112, 0 %t116 = getelementptr inbounds %S.lexer.Token, ptr %t115, i64 %t111 %t117 = getelementptr inbounds %S.lexer.Token, ptr %t116, i32 0, i32 4 %t118 = load i1, ptr %t117 br label %logic.from1161 logic.from1161: br i1 %t118, label %logic.rhs1162, label %logic.end1163 logic.rhs1162: %t119 = load i64, ptr %a19 %t120 = icmp eq i64 %t119, 0 br label %logic.rend1164 logic.rend1164: br label %logic.end1163 logic.end1163: %t121 = phi i1 [ false, %logic.from1161 ], [ %t120, %logic.rend1164 ] br label %logic.rend1165 logic.rend1165: br label %logic.end1156 logic.end1156: %t122 = phi i1 [ true, %logic.from1154 ], [ %t121, %logic.rend1165 ] br i1 %t122, label %then1166, label %endif1168 then1166: ret i1 false endif1168: br label %endif1132 endif1132: br label %endif1129 endif1129: %t123 = load i64, ptr %a25 %t124 = add i64 %t123, 1 store i64 %t124, ptr %a25 br label %while.cond1118 while.end1120: ret i1 false } define internal i1 @finch.parser.genericCallAheadFrom(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a9 = alloca i1, align 16 store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = icmp eq ptr %t2, null br i1 %t3, label %panic1169, label %ok1170 panic1169: call void @finch_panic(ptr @.str.669, i64 168, ptr @.str.670) unreachable ok1170: %t4 = getelementptr inbounds %S.parser.Parser, ptr %t2, i32 0, i32 1 %t5 = load i64, ptr %t4 %t6 = sub i64 %t5, 1 store i64 %t6, ptr %t4 %t7 = load ptr, ptr %a1 %t8 = call i1 @finch.parser.genericCallAhead(ptr %t7) store i1 %t8, ptr %a9 %t10 = load ptr, ptr %a1 %t11 = icmp eq ptr %t10, null br i1 %t11, label %panic1171, label %ok1172 panic1171: call void @finch_panic(ptr @.str.671, i64 170, ptr @.str.672) unreachable ok1172: %t12 = getelementptr inbounds %S.parser.Parser, ptr %t10, i32 0, i32 1 %t13 = load i64, ptr %t12 %t14 = add i64 %t13, 1 store i64 %t14, ptr %t12 %t15 = load i1, ptr %a9 ret i1 %t15 } define internal i1 @finch.parser.genericCallAhead(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca i64, align 16 %a37 = alloca i64, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca { ptr, i64, i64 }, align 16 %a117 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t2, i64 1) store { ptr, i64, i64 } %t3, ptr %a4 store { ptr, i64, i64 } { ptr @.str.673, i64 1, i64 0 }, ptr %a5 %t6 = call i32 @finch_str_eq(ptr %a4, ptr %a5) %t7 = icmp eq i32 %t6, 0 br label %logic.from1173 logic.from1173: br i1 %t7, label %logic.end1175, label %logic.rhs1174 logic.rhs1174: %t8 = load ptr, ptr %a1 %t9 = icmp eq ptr %t8, null br i1 %t9, label %panic1176, label %ok1177 panic1176: call void @finch_panic(ptr @.str.674, i64 176, ptr @.str.675) unreachable ok1177: %t10 = getelementptr inbounds %S.parser.Parser, ptr %t8, i32 0, i32 0 %t11 = load ptr, ptr %a1 %t12 = icmp eq ptr %t11, null br i1 %t12, label %panic1178, label %ok1179 panic1178: call void @finch_panic(ptr @.str.676, i64 176, ptr @.str.677) unreachable ok1179: %t13 = getelementptr inbounds %S.parser.Parser, ptr %t11, i32 0, i32 1 %t14 = load i64, ptr %t13 %t15 = add i64 %t14, 1 %t16 = load { ptr, i64, i64 }, ptr %t10 %t17 = extractvalue { ptr, i64, i64 } %t16, 1 %t18 = icmp uge i64 %t15, %t17 br i1 %t18, label %range1180, label %inrange1181 range1180: call void @finch_panic_index(ptr @.str.678, i64 176, i64 %t15, i64 %t17) unreachable inrange1181: %t19 = extractvalue { ptr, i64, i64 } %t16, 0 %t20 = getelementptr inbounds %S.lexer.Token, ptr %t19, i64 %t15 %t21 = getelementptr inbounds %S.lexer.Token, ptr %t20, i32 0, i32 4 %t22 = load i1, ptr %t21 br label %logic.rend1182 logic.rend1182: br label %logic.end1175 logic.end1175: %t23 = phi i1 [ true, %logic.from1173 ], [ %t22, %logic.rend1182 ] br label %logic.from1183 logic.from1183: br i1 %t23, label %logic.end1185, label %logic.rhs1184 logic.rhs1184: %t24 = load ptr, ptr %a1 %t25 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t24, i64 2) store { ptr, i64, i64 } %t25, ptr %a26 store { ptr, i64, i64 } { ptr @.str.679, i64 1, i64 0 }, ptr %a27 %t28 = call i32 @finch_str_eq(ptr %a26, ptr %a27) %t29 = icmp ne i32 %t28, 0 br label %logic.rend1186 logic.rend1186: br label %logic.end1185 logic.end1185: %t30 = phi i1 [ true, %logic.from1183 ], [ %t29, %logic.rend1186 ] br i1 %t30, label %then1187, label %endif1189 then1187: ret i1 false endif1189: store i64 0, ptr %a31 %t32 = load ptr, ptr %a1 %t33 = icmp eq ptr %t32, null br i1 %t33, label %panic1190, label %ok1191 panic1190: call void @finch_panic(ptr @.str.680, i64 180, ptr @.str.681) unreachable ok1191: %t34 = getelementptr inbounds %S.parser.Parser, ptr %t32, i32 0, i32 1 %t35 = load i64, ptr %t34 %t36 = add i64 %t35, 1 store i64 %t36, ptr %a37 br label %while.cond1192 while.cond1192: %t38 = load i64, ptr %a37 %t39 = load ptr, ptr %a1 %t40 = icmp eq ptr %t39, null br i1 %t40, label %panic1195, label %ok1196 panic1195: call void @finch_panic(ptr @.str.682, i64 181, ptr @.str.683) unreachable ok1196: %t41 = getelementptr inbounds %S.parser.Parser, ptr %t39, i32 0, i32 0 %t42 = getelementptr inbounds { ptr, i64, i64 }, ptr %t41, i32 0, i32 1 %t43 = load i64, ptr %t42 %t44 = icmp slt i64 %t38, %t43 br i1 %t44, label %while.body1193, label %while.end1194 while.body1193: %t45 = load ptr, ptr %a1 %t46 = icmp eq ptr %t45, null br i1 %t46, label %panic1197, label %ok1198 panic1197: call void @finch_panic(ptr @.str.684, i64 182, ptr @.str.685) unreachable ok1198: %t47 = getelementptr inbounds %S.parser.Parser, ptr %t45, i32 0, i32 0 %t48 = load i64, ptr %a37 %t49 = load { ptr, i64, i64 }, ptr %t47 %t50 = extractvalue { ptr, i64, i64 } %t49, 1 %t51 = icmp uge i64 %t48, %t50 br i1 %t51, label %range1199, label %inrange1200 range1199: call void @finch_panic_index(ptr @.str.686, i64 182, i64 %t48, i64 %t50) unreachable inrange1200: %t52 = extractvalue { ptr, i64, i64 } %t49, 0 %t53 = getelementptr inbounds %S.lexer.Token, ptr %t52, i64 %t48 %t54 = getelementptr inbounds %S.lexer.Token, ptr %t53, i32 0, i32 0 %t55 = load { ptr, i64, i64 }, ptr %t54 store { ptr, i64, i64 } %t55, ptr %a56 call void @finch_str_copy(ptr %a57, ptr %a56) %t58 = load { ptr, i64, i64 }, ptr %a57 store { ptr, i64, i64 } %t58, ptr %a59 %t60 = load { ptr, i64, i64 }, ptr %a59 store { ptr, i64, i64 } %t60, ptr %a61 store { ptr, i64, i64 } { ptr @.str.687, i64 1, i64 0 }, ptr %a62 %t63 = call i32 @finch_str_eq(ptr %a61, ptr %a62) %t64 = icmp ne i32 %t63, 0 br i1 %t64, label %then1201, label %else1202 then1201: %t65 = load i64, ptr %a31 %t66 = add i64 %t65, 1 store i64 %t66, ptr %a31 br label %endif1203 else1202: %t67 = load { ptr, i64, i64 }, ptr %a59 store { ptr, i64, i64 } %t67, ptr %a68 store { ptr, i64, i64 } { ptr @.str.688, i64 1, i64 0 }, ptr %a69 %t70 = call i32 @finch_str_eq(ptr %a68, ptr %a69) %t71 = icmp ne i32 %t70, 0 br i1 %t71, label %then1204, label %else1205 then1204: %t72 = load i64, ptr %a31 %t73 = sub i64 %t72, 1 store i64 %t73, ptr %a31 %t74 = load i64, ptr %a31 %t75 = icmp eq i64 %t74, 0 br i1 %t75, label %then1207, label %endif1209 then1207: %t76 = load i64, ptr %a37 %t77 = add i64 %t76, 1 %t78 = load ptr, ptr %a1 %t79 = icmp eq ptr %t78, null br i1 %t79, label %panic1210, label %ok1211 panic1210: call void @finch_panic(ptr @.str.689, i64 188, ptr @.str.690) unreachable ok1211: %t80 = getelementptr inbounds %S.parser.Parser, ptr %t78, i32 0, i32 0 %t81 = getelementptr inbounds { ptr, i64, i64 }, ptr %t80, i32 0, i32 1 %t82 = load i64, ptr %t81 %t83 = icmp slt i64 %t77, %t82 br label %logic.from1212 logic.from1212: br i1 %t83, label %logic.rhs1213, label %logic.end1214 logic.rhs1213: %t84 = load ptr, ptr %a1 %t85 = icmp eq ptr %t84, null br i1 %t85, label %panic1215, label %ok1216 panic1215: call void @finch_panic(ptr @.str.691, i64 188, ptr @.str.692) unreachable ok1216: %t86 = getelementptr inbounds %S.parser.Parser, ptr %t84, i32 0, i32 0 %t87 = load i64, ptr %a37 %t88 = add i64 %t87, 1 %t89 = load { ptr, i64, i64 }, ptr %t86 %t90 = extractvalue { ptr, i64, i64 } %t89, 1 %t91 = icmp uge i64 %t88, %t90 br i1 %t91, label %range1217, label %inrange1218 range1217: call void @finch_panic_index(ptr @.str.693, i64 188, i64 %t88, i64 %t90) unreachable inrange1218: %t92 = extractvalue { ptr, i64, i64 } %t89, 0 %t93 = getelementptr inbounds %S.lexer.Token, ptr %t92, i64 %t88 %t94 = getelementptr inbounds %S.lexer.Token, ptr %t93, i32 0, i32 0 %t95 = load { ptr, i64, i64 }, ptr %t94 store { ptr, i64, i64 } %t95, ptr %a96 store { ptr, i64, i64 } { ptr @.str.694, i64 1, i64 0 }, ptr %a97 %t98 = call i32 @finch_str_eq(ptr %a96, ptr %a97) %t99 = icmp ne i32 %t98, 0 br label %logic.rend1219 logic.rend1219: br label %logic.end1214 logic.end1214: %t100 = phi i1 [ false, %logic.from1212 ], [ %t99, %logic.rend1219 ] br label %logic.from1220 logic.from1220: br i1 %t100, label %logic.rhs1221, label %logic.end1222 logic.rhs1221: %t101 = load ptr, ptr %a1 %t102 = icmp eq ptr %t101, null br i1 %t102, label %panic1223, label %ok1224 panic1223: call void @finch_panic(ptr @.str.695, i64 188, ptr @.str.696) unreachable ok1224: %t103 = getelementptr inbounds %S.parser.Parser, ptr %t101, i32 0, i32 0 %t104 = load i64, ptr %a37 %t105 = add i64 %t104, 1 %t106 = load { ptr, i64, i64 }, ptr %t103 %t107 = extractvalue { ptr, i64, i64 } %t106, 1 %t108 = icmp uge i64 %t105, %t107 br i1 %t108, label %range1225, label %inrange1226 range1225: call void @finch_panic_index(ptr @.str.697, i64 188, i64 %t105, i64 %t107) unreachable inrange1226: %t109 = extractvalue { ptr, i64, i64 } %t106, 0 %t110 = getelementptr inbounds %S.lexer.Token, ptr %t109, i64 %t105 %t111 = getelementptr inbounds %S.lexer.Token, ptr %t110, i32 0, i32 4 %t112 = load i1, ptr %t111 %t113 = xor i1 %t112, true br label %logic.rend1227 logic.rend1227: br label %logic.end1222 logic.end1222: %t114 = phi i1 [ false, %logic.from1220 ], [ %t113, %logic.rend1227 ] ret i1 %t114 endif1209: br label %endif1206 else1205: %t115 = load { ptr, i64, i64 }, ptr %a59 store { ptr, i64, i64 } %t115, ptr %a116 store { ptr, i64, i64 } { ptr @.str.698, i64 3, i64 0 }, ptr %a117 %t118 = call i32 @finch_str_eq(ptr %a116, ptr %a117) %t119 = icmp ne i32 %t118, 0 br label %logic.from1228 logic.from1228: br i1 %t119, label %logic.end1230, label %logic.rhs1229 logic.rhs1229: %t120 = load ptr, ptr %a1 %t121 = icmp eq ptr %t120, null br i1 %t121, label %panic1231, label %ok1232 panic1231: call void @finch_panic(ptr @.str.699, i64 190, ptr @.str.700) unreachable ok1232: %t122 = getelementptr inbounds %S.parser.Parser, ptr %t120, i32 0, i32 0 %t123 = load i64, ptr %a37 %t124 = load { ptr, i64, i64 }, ptr %t122 %t125 = extractvalue { ptr, i64, i64 } %t124, 1 %t126 = icmp uge i64 %t123, %t125 br i1 %t126, label %range1233, label %inrange1234 range1233: call void @finch_panic_index(ptr @.str.701, i64 190, i64 %t123, i64 %t125) unreachable inrange1234: %t127 = extractvalue { ptr, i64, i64 } %t124, 0 %t128 = getelementptr inbounds %S.lexer.Token, ptr %t127, i64 %t123 %t129 = getelementptr inbounds %S.lexer.Token, ptr %t128, i32 0, i32 4 %t130 = load i1, ptr %t129 br label %logic.rend1235 logic.rend1235: br label %logic.end1230 logic.end1230: %t131 = phi i1 [ true, %logic.from1228 ], [ %t130, %logic.rend1235 ] br i1 %t131, label %then1236, label %endif1238 then1236: ret i1 false endif1238: br label %endif1206 endif1206: br label %endif1203 endif1203: %t132 = load i64, ptr %a37 %t133 = add i64 %t132, 1 store i64 %t133, ptr %a37 br label %while.cond1192 while.end1194: ret i1 false } define internal i1 @finch.parser.atDeclaration(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = call i1 @finch.parser.genericDeclAhead(ptr %t2) br i1 %t3, label %then1239, label %endif1241 then1239: ret i1 true endif1241: %t4 = load ptr, ptr %a1 %t5 = call i1 @finch.parser.at(ptr %t4, { ptr, i64, i64 } { ptr @.str.702, i64 1, i64 0 }) br i1 %t5, label %then1242, label %endif1244 then1242: %t6 = load ptr, ptr %a1 %t7 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t6, i64 1) store { ptr, i64, i64 } %t7, ptr %a8 store { ptr, i64, i64 } { ptr @.str.703, i64 1, i64 0 }, ptr %a9 %t10 = call i32 @finch_str_eq(ptr %a8, ptr %a9) %t11 = icmp ne i32 %t10, 0 ret i1 %t11 endif1244: %t12 = load ptr, ptr %a1 %t13 = call i1 @finch.parser.at(ptr %t12, { ptr, i64, i64 } { ptr @.str.704, i64 5, i64 0 }) %t14 = xor i1 %t13, true br i1 %t14, label %then1245, label %endif1247 then1245: ret i1 false endif1247: %t15 = load ptr, ptr %a1 %t16 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t15, i64 1) store { ptr, i64, i64 } %t16, ptr %a17 %t18 = load { ptr, i64, i64 }, ptr %a17 store { ptr, i64, i64 } %t18, ptr %a19 store { ptr, i64, i64 } { ptr @.str.705, i64 5, i64 0 }, ptr %a20 %t21 = call i32 @finch_str_eq(ptr %a19, ptr %a20) %t22 = icmp ne i32 %t21, 0 br i1 %t22, label %then1248, label %endif1250 then1248: %t23 = load ptr, ptr %a1 %t24 = icmp eq ptr %t23, null br i1 %t24, label %panic1251, label %ok1252 panic1251: call void @finch_panic(ptr @.str.706, i64 210, ptr @.str.707) unreachable ok1252: %t25 = getelementptr inbounds %S.parser.Parser, ptr %t23, i32 0, i32 0 %t26 = load ptr, ptr %a1 %t27 = icmp eq ptr %t26, null br i1 %t27, label %panic1253, label %ok1254 panic1253: call void @finch_panic(ptr @.str.708, i64 210, ptr @.str.709) unreachable ok1254: %t28 = getelementptr inbounds %S.parser.Parser, ptr %t26, i32 0, i32 1 %t29 = load i64, ptr %t28 %t30 = add i64 %t29, 1 %t31 = load { ptr, i64, i64 }, ptr %t25 %t32 = extractvalue { ptr, i64, i64 } %t31, 1 %t33 = icmp uge i64 %t30, %t32 br i1 %t33, label %range1255, label %inrange1256 range1255: call void @finch_panic_index(ptr @.str.710, i64 210, i64 %t30, i64 %t32) unreachable inrange1256: %t34 = extractvalue { ptr, i64, i64 } %t31, 0 %t35 = getelementptr inbounds %S.lexer.Token, ptr %t34, i64 %t30 %t36 = getelementptr inbounds %S.lexer.Token, ptr %t35, i32 0, i32 4 %t37 = load i1, ptr %t36 %t38 = xor i1 %t37, true ret i1 %t38 endif1250: %t39 = load ptr, ptr %a1 %t40 = call %S.lexer.Token @finch.parser.cur(ptr %t39) %t41 = extractvalue %S.lexer.Token %t40, 1 store { ptr, i64, i64 } %t41, ptr %a42 call void @finch_str_copy(ptr %a43, ptr %a42) %t44 = load { ptr, i64, i64 }, ptr %a43 store { ptr, i64, i64 } %t44, ptr %a45 store { ptr, i64, i64 } { ptr @.str.711, i64 3, i64 0 }, ptr %a46 %t47 = call i32 @finch_str_eq(ptr %a45, ptr %a46) %t48 = icmp ne i32 %t47, 0 br label %logic.from1257 logic.from1257: br i1 %t48, label %logic.end1259, label %logic.rhs1258 logic.rhs1258: %t49 = load ptr, ptr %a1 %t50 = call %S.lexer.Token @finch.parser.cur(ptr %t49) %t51 = extractvalue %S.lexer.Token %t50, 1 store { ptr, i64, i64 } %t51, ptr %a52 call void @finch_str_copy(ptr %a53, ptr %a52) %t54 = load { ptr, i64, i64 }, ptr %a53 store { ptr, i64, i64 } %t54, ptr %a55 store { ptr, i64, i64 } { ptr @.str.712, i64 3, i64 0 }, ptr %a56 %t57 = call i32 @finch_str_eq(ptr %a55, ptr %a56) %t58 = icmp ne i32 %t57, 0 br label %logic.rend1260 logic.rend1260: br label %logic.end1259 logic.end1259: %t59 = phi i1 [ true, %logic.from1257 ], [ %t58, %logic.rend1260 ] br label %logic.from1261 logic.from1261: br i1 %t59, label %logic.rhs1262, label %logic.end1263 logic.rhs1262: %t60 = load { ptr, i64, i64 }, ptr %a17 store { ptr, i64, i64 } %t60, ptr %a61 store { ptr, i64, i64 } { ptr @.str.713, i64 1, i64 0 }, ptr %a62 %t63 = call i32 @finch_str_eq(ptr %a61, ptr %a62) %t64 = icmp ne i32 %t63, 0 br label %logic.rend1264 logic.rend1264: br label %logic.end1263 logic.end1263: %t65 = phi i1 [ false, %logic.from1261 ], [ %t64, %logic.rend1264 ] br i1 %t65, label %then1265, label %endif1267 then1265: ret i1 true endif1267: %t66 = load { ptr, i64, i64 }, ptr %a17 store { ptr, i64, i64 } %t66, ptr %a67 store { ptr, i64, i64 } { ptr @.str.714, i64 1, i64 0 }, ptr %a68 %t69 = call i32 @finch_str_eq(ptr %a67, ptr %a68) %t70 = icmp ne i32 %t69, 0 br label %logic.from1268 logic.from1268: br i1 %t70, label %logic.rhs1269, label %logic.end1270 logic.rhs1269: %t71 = load ptr, ptr %a1 %t72 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t71, i64 2) store { ptr, i64, i64 } %t72, ptr %a73 store { ptr, i64, i64 } { ptr @.str.715, i64 5, i64 0 }, ptr %a74 %t75 = call i32 @finch_str_eq(ptr %a73, ptr %a74) %t76 = icmp ne i32 %t75, 0 br label %logic.rend1271 logic.rend1271: br label %logic.end1270 logic.end1270: %t77 = phi i1 [ false, %logic.from1268 ], [ %t76, %logic.rend1271 ] br label %logic.from1272 logic.from1272: br i1 %t77, label %logic.rhs1273, label %logic.end1274 logic.rhs1273: %t78 = load ptr, ptr %a1 %t79 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t78, i64 3) store { ptr, i64, i64 } %t79, ptr %a80 store { ptr, i64, i64 } { ptr @.str.716, i64 5, i64 0 }, ptr %a81 %t82 = call i32 @finch_str_eq(ptr %a80, ptr %a81) %t83 = icmp ne i32 %t82, 0 br label %logic.rend1275 logic.rend1275: br label %logic.end1274 logic.end1274: %t84 = phi i1 [ false, %logic.from1272 ], [ %t83, %logic.rend1275 ] br label %logic.from1276 logic.from1276: br i1 %t84, label %logic.rhs1277, label %logic.end1278 logic.rhs1277: %t85 = load ptr, ptr %a1 %t86 = icmp eq ptr %t85, null br i1 %t86, label %panic1279, label %ok1280 panic1279: call void @finch_panic(ptr @.str.717, i64 215, ptr @.str.718) unreachable ok1280: %t87 = getelementptr inbounds %S.parser.Parser, ptr %t85, i32 0, i32 0 %t88 = load ptr, ptr %a1 %t89 = icmp eq ptr %t88, null br i1 %t89, label %panic1281, label %ok1282 panic1281: call void @finch_panic(ptr @.str.719, i64 215, ptr @.str.720) unreachable ok1282: %t90 = getelementptr inbounds %S.parser.Parser, ptr %t88, i32 0, i32 1 %t91 = load i64, ptr %t90 %t92 = add i64 %t91, 3 %t93 = load { ptr, i64, i64 }, ptr %t87 %t94 = extractvalue { ptr, i64, i64 } %t93, 1 %t95 = icmp uge i64 %t92, %t94 br i1 %t95, label %range1283, label %inrange1284 range1283: call void @finch_panic_index(ptr @.str.721, i64 215, i64 %t92, i64 %t94) unreachable inrange1284: %t96 = extractvalue { ptr, i64, i64 } %t93, 0 %t97 = getelementptr inbounds %S.lexer.Token, ptr %t96, i64 %t92 %t98 = getelementptr inbounds %S.lexer.Token, ptr %t97, i32 0, i32 4 %t99 = load i1, ptr %t98 %t100 = xor i1 %t99, true br label %logic.rend1285 logic.rend1285: br label %logic.end1278 logic.end1278: %t101 = phi i1 [ false, %logic.from1276 ], [ %t100, %logic.rend1285 ] ret i1 %t101 } define internal void @finch.parser.endOfStatement(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = call i1 @finch.parser.at(ptr %t2, { ptr, i64, i64 } { ptr @.str.722, i64 1, i64 0 }) br label %logic.from1286 logic.from1286: br i1 %t3, label %logic.end1288, label %logic.rhs1287 logic.rhs1287: %t4 = load ptr, ptr %a1 %t5 = call i1 @finch.parser.at(ptr %t4, { ptr, i64, i64 } { ptr @.str.723, i64 3, i64 0 }) br label %logic.rend1289 logic.rend1289: br label %logic.end1288 logic.end1288: %t6 = phi i1 [ true, %logic.from1286 ], [ %t5, %logic.rend1289 ] br label %logic.from1290 logic.from1290: br i1 %t6, label %logic.end1292, label %logic.rhs1291 logic.rhs1291: %t7 = load ptr, ptr %a1 %t8 = call %S.lexer.Token @finch.parser.cur(ptr %t7) %t9 = extractvalue %S.lexer.Token %t8, 4 br label %logic.rend1293 logic.rend1293: br label %logic.end1292 logic.end1292: %t10 = phi i1 [ true, %logic.from1290 ], [ %t9, %logic.rend1293 ] br i1 %t10, label %then1294, label %endif1296 then1294: ret void endif1296: %t11 = load ptr, ptr %a1 %t12 = load ptr, ptr %a1 %t13 = call %S.lexer.Token @finch.parser.cur(ptr %t12) %t14 = load ptr, ptr %a1 %t15 = call %S.lexer.Token @finch.parser.cur(ptr %t14) %t16 = call { ptr, i64, i64 } @finch.parser.describe(%S.lexer.Token %t15) store { ptr, i64, i64 } { ptr @.str.724, i64 11, i64 0 }, ptr %a18 store { ptr, i64, i64 } %t16, ptr %a19 call void @finch_str_concat(ptr %a17, ptr %a18, ptr %a19) %t20 = load { ptr, i64, i64 }, ptr %a17 store { ptr, i64, i64 } %t20, ptr %a22 store { ptr, i64, i64 } { ptr @.str.725, i64 37, i64 0 }, ptr %a23 call void @finch_str_concat(ptr %a21, ptr %a22, ptr %a23) %t24 = load { ptr, i64, i64 }, ptr %a21 call void @finch.parser.fail(ptr %t11, %S.lexer.Token %t13, { ptr, i64, i64 } %t24) ret void } define internal %S.ast.Program @finch.parser.parseProgram(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Program, align 16 %a10 = alloca %S.lexer.Token, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca %S.lexer.Token, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a85 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca { ptr, i64, i64 }, align 16 %a104 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca i1, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 %a113 = alloca { ptr, i64, i64 }, align 16 %a114 = alloca { ptr, i64, i64 }, align 16 %a118 = alloca { ptr, i64, i64 }, align 16 %a119 = alloca { ptr, i64, i64 }, align 16 %a120 = alloca { ptr, i64, i64 }, align 16 %a125 = alloca { ptr, i64, i64 }, align 16 %a126 = alloca { ptr, i64, i64 }, align 16 %a127 = alloca { ptr, i64, i64 }, align 16 %a137 = alloca { ptr, i64, i64 }, align 16 %a138 = alloca { ptr, i64, i64 }, align 16 %a173 = alloca %S.ast.Program, align 16 %a174 = alloca %S.ast.Program, align 16 store ptr %p0, ptr %a1 store %S.ast.Program zeroinitializer, ptr %a2 br label %while.cond1297 while.cond1297: %t3 = load ptr, ptr %a1 %t4 = call i1 @finch.parser.at(ptr %t3, { ptr, i64, i64 } { ptr @.str.726, i64 3, i64 0 }) %t5 = xor i1 %t4, true br i1 %t5, label %while.body1298, label %while.end1299 while.body1298: %t6 = load ptr, ptr %a1 %t7 = call i1 @finch.parser.at(ptr %t6, { ptr, i64, i64 } { ptr @.str.727, i64 6, i64 0 }) br i1 %t7, label %then1300, label %else1301 then1300: %t8 = load ptr, ptr %a1 %t9 = call %S.lexer.Token @finch.parser.next(ptr %t8) store %S.lexer.Token %t9, ptr %a10 %t11 = load ptr, ptr %a1 %t12 = call i1 @finch.parser.at(ptr %t11, { ptr, i64, i64 } { ptr @.str.728, i64 6, i64 0 }) br i1 %t12, label %then1303, label %else1304 then1303: %t13 = getelementptr inbounds %S.ast.Program, ptr %a2, i32 0, i32 4 %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i32 0, i32 1 %t15 = load ptr, ptr %a1 %t16 = icmp eq ptr %t15, null br i1 %t16, label %panic1306, label %ok1307 panic1306: call void @finch_panic(ptr @.str.729, i64 233, ptr @.str.730) unreachable ok1307: %t17 = getelementptr inbounds %S.parser.Parser, ptr %t15, i32 0, i32 4 %t18 = load { ptr, i64, i64 }, ptr %t17 store { ptr, i64, i64 } %t18, ptr %a20 store { ptr, i64, i64 } { ptr @.str.731, i64 1, i64 0 }, ptr %a21 call void @finch_str_concat(ptr %a19, ptr %a20, ptr %a21) %t22 = load { ptr, i64, i64 }, ptr %a19 %t23 = getelementptr inbounds %S.lexer.Token, ptr %a10, i32 0, i32 2 %t24 = load i64, ptr %t23 call void @finch_str_from_int(ptr %a25, i64 %t24) %t26 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t22, ptr %a28 store { ptr, i64, i64 } %t26, ptr %a29 call void @finch_str_concat(ptr %a27, ptr %a28, ptr %a29) %t30 = load { ptr, i64, i64 }, ptr %a27 store { ptr, i64, i64 } %t30, ptr %a32 store { ptr, i64, i64 } { ptr @.str.732, i64 1, i64 0 }, ptr %a33 call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33) %t34 = load { ptr, i64, i64 }, ptr %a31 %t35 = getelementptr inbounds %S.lexer.Token, ptr %a10, i32 0, i32 3 %t36 = load i64, ptr %t35 call void @finch_str_from_int(ptr %a37, i64 %t36) %t38 = load { ptr, i64, i64 }, ptr %a37 store { ptr, i64, i64 } %t34, ptr %a40 store { ptr, i64, i64 } %t38, ptr %a41 call void @finch_str_concat(ptr %a39, ptr %a40, ptr %a41) %t42 = load { ptr, i64, i64 }, ptr %a39 %t43 = load i64, ptr %t14 %t44 = add i64 %t43, 1 call void @finch_arr_reserve(ptr %t13, i64 %t44, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t45 = load ptr, ptr %t13 %t46 = getelementptr inbounds { ptr, i64, i64 }, ptr %t45, i64 %t43 store { ptr, i64, i64 } %t42, ptr %t46 store i64 %t44, ptr %t14 %t47 = getelementptr inbounds %S.ast.Program, ptr %a2, i32 0, i32 3 %t48 = getelementptr inbounds { ptr, i64, i64 }, ptr %t47, i32 0, i32 1 %t49 = load ptr, ptr %a1 %t50 = call %S.lexer.Token @finch.parser.next(ptr %t49) %t51 = extractvalue %S.lexer.Token %t50, 1 store { ptr, i64, i64 } %t51, ptr %a52 call void @finch_str_copy(ptr %a53, ptr %a52) %t54 = load { ptr, i64, i64 }, ptr %a53 %t55 = load i64, ptr %t48 %t56 = add i64 %t55, 1 call void @finch_arr_reserve(ptr %t47, i64 %t56, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t57 = load ptr, ptr %t47 %t58 = getelementptr inbounds { ptr, i64, i64 }, ptr %t57, i64 %t55 store { ptr, i64, i64 } %t54, ptr %t58 store i64 %t56, ptr %t48 br label %endif1305 else1304: %t59 = load ptr, ptr %a1 %t60 = call i1 @finch.parser.at(ptr %t59, { ptr, i64, i64 } { ptr @.str.733, i64 5, i64 0 }) %t61 = xor i1 %t60, true br i1 %t61, label %then1308, label %endif1310 then1308: %t62 = load ptr, ptr %a1 %t63 = load %S.lexer.Token, ptr %a10 call void @finch.parser.fail(ptr %t62, %S.lexer.Token %t63, { ptr, i64, i64 } { ptr @.str.734, i64 51, i64 0 }) br label %endif1310 endif1310: %t64 = getelementptr inbounds %S.ast.Program, ptr %a2, i32 0, i32 2 %t65 = getelementptr inbounds { ptr, i64, i64 }, ptr %t64, i32 0, i32 1 %t66 = load ptr, ptr %a1 %t67 = call %S.lexer.Token @finch.parser.next(ptr %t66) %t68 = extractvalue %S.lexer.Token %t67, 1 store { ptr, i64, i64 } %t68, ptr %a69 call void @finch_str_copy(ptr %a70, ptr %a69) %t71 = load { ptr, i64, i64 }, ptr %a70 %t72 = load i64, ptr %t65 %t73 = add i64 %t72, 1 call void @finch_arr_reserve(ptr %t64, i64 %t73, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t74 = load ptr, ptr %t64 %t75 = getelementptr inbounds { ptr, i64, i64 }, ptr %t74, i64 %t72 store { ptr, i64, i64 } %t71, ptr %t75 store i64 %t73, ptr %t65 br label %endif1305 endif1305: br label %endif1302 else1301: %t76 = load ptr, ptr %a1 %t77 = call i1 @finch.parser.at(ptr %t76, { ptr, i64, i64 } { ptr @.str.735, i64 4, i64 0 }) br i1 %t77, label %then1311, label %else1312 then1311: %t78 = load ptr, ptr %a1 %t79 = call %S.lexer.Token @finch.parser.next(ptr %t78) store %S.lexer.Token %t79, ptr %a80 %t81 = load ptr, ptr %a1 %t82 = call %S.lexer.Token @finch.parser.expect(ptr %t81, { ptr, i64, i64 } { ptr @.str.736, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.737, i64 42, i64 0 }) %t83 = extractvalue %S.lexer.Token %t82, 1 store { ptr, i64, i64 } %t83, ptr %a84 call void @finch_str_copy(ptr %a85, ptr %a84) %t86 = load { ptr, i64, i64 }, ptr %a85 store { ptr, i64, i64 } %t86, ptr %a87 %t88 = load { ptr, i64, i64 }, ptr %a87 store { ptr, i64, i64 } %t88, ptr %a89 store { ptr, i64, i64 } { ptr @.str.739, i64 2, i64 0 }, ptr %a91 %t92 = call i32 @finch_str_ends(ptr %a89, ptr %a91) %t93 = icmp ne i32 %t92, 0 br label %logic.from1314 logic.from1314: br i1 %t93, label %logic.end1316, label %logic.rhs1315 logic.rhs1315: %t94 = load { ptr, i64, i64 }, ptr %a87 store { ptr, i64, i64 } %t94, ptr %a95 store { ptr, i64, i64 } { ptr @.str.741, i64 2, i64 0 }, ptr %a97 %t98 = call i32 @finch_str_ends(ptr %a95, ptr %a97) %t99 = icmp ne i32 %t98, 0 br label %logic.rend1317 logic.rend1317: br label %logic.end1316 logic.end1316: %t100 = phi i1 [ true, %logic.from1314 ], [ %t99, %logic.rend1317 ] br label %logic.from1318 logic.from1318: br i1 %t100, label %logic.end1320, label %logic.rhs1319 logic.rhs1319: %t101 = load { ptr, i64, i64 }, ptr %a87 store { ptr, i64, i64 } %t101, ptr %a102 store { ptr, i64, i64 } { ptr @.str.743, i64 2, i64 0 }, ptr %a104 %t105 = call i32 @finch_str_ends(ptr %a102, ptr %a104) %t106 = icmp ne i32 %t105, 0 br label %logic.rend1321 logic.rend1321: br label %logic.end1320 logic.end1320: %t107 = phi i1 [ true, %logic.from1318 ], [ %t106, %logic.rend1321 ] store i1 %t107, ptr %a108 %t109 = load i1, ptr %a108 %t110 = xor i1 %t109, true br label %logic.from1322 logic.from1322: br i1 %t110, label %logic.rhs1323, label %logic.end1324 logic.rhs1323: %t111 = load { ptr, i64, i64 }, ptr %a87 store { ptr, i64, i64 } %t111, ptr %a112 store { ptr, i64, i64 } { ptr @.str.745, i64 3, i64 0 }, ptr %a114 %t115 = call i32 @finch_str_starts(ptr %a112, ptr %a114) %t116 = icmp ne i32 %t115, 0 br label %logic.from1325 logic.from1325: br i1 %t116, label %logic.end1327, label %logic.rhs1326 logic.rhs1326: %t117 = load { ptr, i64, i64 }, ptr %a87 store { ptr, i64, i64 } %t117, ptr %a118 store { ptr, i64, i64 } { ptr @.str.747, i64 3, i64 0 }, ptr %a120 %t121 = call i64 @finch_str_find(ptr %a118, ptr %a120) %t122 = icmp sge i64 %t121, 0 br label %logic.rend1328 logic.rend1328: br label %logic.end1327 logic.end1327: %t123 = phi i1 [ true, %logic.from1325 ], [ %t122, %logic.rend1328 ] br label %logic.from1329 logic.from1329: br i1 %t123, label %logic.end1331, label %logic.rhs1330 logic.rhs1330: %t124 = load { ptr, i64, i64 }, ptr %a87 store { ptr, i64, i64 } %t124, ptr %a125 store { ptr, i64, i64 } { ptr @.str.749, i64 1, i64 0 }, ptr %a127 %t128 = call i64 @finch_str_find(ptr %a125, ptr %a127) %t129 = icmp sge i64 %t128, 0 br label %logic.rend1332 logic.rend1332: br label %logic.end1331 logic.end1331: %t130 = phi i1 [ true, %logic.from1329 ], [ %t129, %logic.rend1332 ] br label %logic.rend1333 logic.rend1333: br label %logic.end1324 logic.end1324: %t131 = phi i1 [ false, %logic.from1322 ], [ %t130, %logic.rend1333 ] br i1 %t131, label %then1334, label %endif1336 then1334: %t132 = load ptr, ptr %a1 %t133 = load %S.lexer.Token, ptr %a80 call void @finch.parser.fail(ptr %t132, %S.lexer.Token %t133, { ptr, i64, i64 } { ptr @.str.750, i64 65, i64 0 }) br label %endif1336 endif1336: %t134 = getelementptr inbounds %S.ast.Program, ptr %a2, i32 0, i32 5 %t135 = getelementptr inbounds { ptr, i64, i64 }, ptr %t134, i32 0, i32 1 %t136 = load { ptr, i64, i64 }, ptr %a87 store { ptr, i64, i64 } %t136, ptr %a137 call void @finch_str_copy(ptr %a138, ptr %a137) %t139 = load { ptr, i64, i64 }, ptr %a138 %t140 = load i64, ptr %t135 %t141 = add i64 %t140, 1 call void @finch_arr_reserve(ptr %t134, i64 %t141, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t142 = load ptr, ptr %t134 %t143 = getelementptr inbounds { ptr, i64, i64 }, ptr %t142, i64 %t140 store { ptr, i64, i64 } %t139, ptr %t143 store i64 %t141, ptr %t135 br label %endif1313 else1312: %t144 = load ptr, ptr %a1 %t145 = call i1 @finch.parser.at(ptr %t144, { ptr, i64, i64 } { ptr @.str.751, i64 6, i64 0 }) br i1 %t145, label %then1337, label %else1338 then1337: %t146 = getelementptr inbounds %S.ast.Program, ptr %a2, i32 0, i32 6 %t147 = getelementptr inbounds { ptr, i64, i64 }, ptr %t146, i32 0, i32 1 %t148 = load ptr, ptr %a1 %t149 = call %S.ast.Node @finch.parser.parseStruct(ptr %t148) %t150 = load i64, ptr %t147 %t151 = add i64 %t150, 1 call void @finch_arr_reserve(ptr %t146, i64 %t151, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t152 = load ptr, ptr %t146 %t153 = getelementptr inbounds %S.ast.Node, ptr %t152, i64 %t150 store %S.ast.Node %t149, ptr %t153 store i64 %t151, ptr %t147 br label %endif1339 else1338: %t154 = load ptr, ptr %a1 %t155 = call i1 @finch.parser.at(ptr %t154, { ptr, i64, i64 } { ptr @.str.752, i64 4, i64 0 }) br i1 %t155, label %then1340, label %else1341 then1340: %t156 = getelementptr inbounds %S.ast.Program, ptr %a2, i32 0, i32 7 %t157 = getelementptr inbounds { ptr, i64, i64 }, ptr %t156, i32 0, i32 1 %t158 = load ptr, ptr %a1 %t159 = call %S.ast.Node @finch.parser.parseEnum(ptr %t158) %t160 = load i64, ptr %t157 %t161 = add i64 %t160, 1 call void @finch_arr_reserve(ptr %t156, i64 %t161, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t162 = load ptr, ptr %t156 %t163 = getelementptr inbounds %S.ast.Node, ptr %t162, i64 %t160 store %S.ast.Node %t159, ptr %t163 store i64 %t161, ptr %t157 br label %endif1342 else1341: %t164 = getelementptr inbounds %S.ast.Program, ptr %a2, i32 0, i32 8 %t165 = getelementptr inbounds { ptr, i64, i64 }, ptr %t164, i32 0, i32 1 %t166 = load ptr, ptr %a1 %t167 = call %S.ast.Node @finch.parser.parseFn(ptr %t166) %t168 = load i64, ptr %t165 %t169 = add i64 %t168, 1 call void @finch_arr_reserve(ptr %t164, i64 %t169, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t170 = load ptr, ptr %t164 %t171 = getelementptr inbounds %S.ast.Node, ptr %t170, i64 %t168 store %S.ast.Node %t167, ptr %t171 store i64 %t169, ptr %t165 br label %endif1342 endif1342: br label %endif1339 endif1339: br label %endif1313 endif1313: br label %endif1302 endif1302: br label %while.cond1297 while.end1299: %t172 = load %S.ast.Program, ptr %a2 store %S.ast.Program %t172, ptr %a173 call void @finch.copy.S_ast_Program(ptr %a174, ptr %a173) %t175 = load %S.ast.Program, ptr %a174 ret %S.ast.Program %t175 } define internal %S.ast.Node @finch.parser.parseEnum(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a4 = alloca %S.ast.Node, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca %S.ast.Node, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca %S.ast.Node, align 16 %a55 = alloca %S.ast.Node, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a85 = alloca %S.ast.Node, align 16 %a86 = alloca %S.ast.Node, align 16 store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = call %S.ast.Node @finch.parser.node(ptr %t2, { ptr, i64, i64 } { ptr @.str.753, i64 4, i64 0 }) store %S.ast.Node %t3, ptr %a4 %t5 = load ptr, ptr %a1 %t6 = call %S.lexer.Token @finch.parser.expect(ptr %t5, { ptr, i64, i64 } { ptr @.str.754, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.755, i64 6, i64 0 }) %t7 = load ptr, ptr %a1 %t8 = call %S.lexer.Token @finch.parser.expect(ptr %t7, { ptr, i64, i64 } { ptr @.str.756, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.757, i64 12, i64 0 }) %t9 = extractvalue %S.lexer.Token %t8, 1 store { ptr, i64, i64 } %t9, ptr %a10 call void @finch_str_copy(ptr %a11, ptr %a10) %t12 = load { ptr, i64, i64 }, ptr %a11 %t13 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 1 store { ptr, i64, i64 } %t12, ptr %t13 %t14 = load ptr, ptr %a1 %t15 = call %S.lexer.Token @finch.parser.expect(ptr %t14, { ptr, i64, i64 } { ptr @.str.758, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.759, i64 3, i64 0 }) br label %while.cond1343 while.cond1343: %t16 = load ptr, ptr %a1 %t17 = call i1 @finch.parser.at(ptr %t16, { ptr, i64, i64 } { ptr @.str.760, i64 1, i64 0 }) %t18 = xor i1 %t17, true br i1 %t18, label %while.body1344, label %while.end1345 while.body1344: %t19 = load ptr, ptr %a1 %t20 = call i1 @finch.parser.at(ptr %t19, { ptr, i64, i64 } { ptr @.str.761, i64 3, i64 0 }) br i1 %t20, label %then1346, label %endif1348 then1346: %t21 = load ptr, ptr %a1 %t22 = load ptr, ptr %a1 %t23 = call %S.lexer.Token @finch.parser.cur(ptr %t22) call void @finch.parser.fail(ptr %t21, %S.lexer.Token %t23, { ptr, i64, i64 } { ptr @.str.762, i64 37, i64 0 }) br label %endif1348 endif1348: %t24 = load ptr, ptr %a1 %t25 = call %S.ast.Node @finch.parser.node(ptr %t24, { ptr, i64, i64 } { ptr @.str.763, i64 7, i64 0 }) store %S.ast.Node %t25, ptr %a26 %t27 = load ptr, ptr %a1 %t28 = call %S.lexer.Token @finch.parser.expect(ptr %t27, { ptr, i64, i64 } { ptr @.str.764, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.765, i64 24, i64 0 }) %t29 = extractvalue %S.lexer.Token %t28, 1 store { ptr, i64, i64 } %t29, ptr %a30 call void @finch_str_copy(ptr %a31, ptr %a30) %t32 = load { ptr, i64, i64 }, ptr %a31 %t33 = getelementptr inbounds %S.ast.Node, ptr %a26, i32 0, i32 1 store { ptr, i64, i64 } %t32, ptr %t33 %t34 = load ptr, ptr %a1 %t35 = call i1 @finch.parser.accept(ptr %t34, { ptr, i64, i64 } { ptr @.str.766, i64 1, i64 0 }) br i1 %t35, label %then1349, label %endif1351 then1349: store { ptr, i64, i64 } { ptr @.str.767, i64 0, i64 0 }, ptr %a36 %t37 = load ptr, ptr %a1 %t38 = call i1 @finch.parser.accept(ptr %t37, { ptr, i64, i64 } { ptr @.str.768, i64 1, i64 0 }) br i1 %t38, label %then1352, label %endif1354 then1352: store { ptr, i64, i64 } { ptr @.str.769, i64 1, i64 0 }, ptr %a36 br label %endif1354 endif1354: %t39 = load { ptr, i64, i64 }, ptr %a36 %t40 = load ptr, ptr %a1 %t41 = call %S.lexer.Token @finch.parser.expect(ptr %t40, { ptr, i64, i64 } { ptr @.str.770, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.771, i64 30, i64 0 }) %t42 = extractvalue %S.lexer.Token %t41, 1 store { ptr, i64, i64 } %t42, ptr %a43 call void @finch_str_copy(ptr %a44, ptr %a43) %t45 = load { ptr, i64, i64 }, ptr %a44 store { ptr, i64, i64 } %t39, ptr %a47 store { ptr, i64, i64 } %t45, ptr %a48 call void @finch_str_concat(ptr %a46, ptr %a47, ptr %a48) %t49 = load { ptr, i64, i64 }, ptr %a46 %t50 = getelementptr inbounds %S.ast.Node, ptr %a26, i32 0, i32 4 store { ptr, i64, i64 } %t49, ptr %t50 br label %endif1351 endif1351: %t51 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 %t52 = getelementptr inbounds { ptr, i64, i64 }, ptr %t51, i32 0, i32 1 %t53 = load %S.ast.Node, ptr %a26 store %S.ast.Node %t53, ptr %a54 call void @finch.copy.S_ast_Node(ptr %a55, ptr %a54) %t56 = load %S.ast.Node, ptr %a55 %t57 = load i64, ptr %t52 %t58 = add i64 %t57, 1 call void @finch_arr_reserve(ptr %t51, i64 %t58, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t59 = load ptr, ptr %t51 %t60 = getelementptr inbounds %S.ast.Node, ptr %t59, i64 %t57 store %S.ast.Node %t56, ptr %t60 store i64 %t58, ptr %t52 %t61 = load ptr, ptr %a1 %t62 = call i1 @finch.parser.accept(ptr %t61, { ptr, i64, i64 } { ptr @.str.772, i64 1, i64 0 }) %t63 = xor i1 %t62, true br i1 %t63, label %then1355, label %endif1357 then1355: %t64 = load ptr, ptr %a1 call void @finch.parser.endOfStatement(ptr %t64) br label %endif1357 endif1357: br label %while.cond1343 while.end1345: %t65 = load ptr, ptr %a1 %t66 = call %S.lexer.Token @finch.parser.next(ptr %t65) %t67 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 %t68 = getelementptr inbounds { ptr, i64, i64 }, ptr %t67, i32 0, i32 1 %t69 = load i64, ptr %t68 %t70 = icmp eq i64 %t69, 0 br i1 %t70, label %then1358, label %endif1360 then1358: %t71 = load ptr, ptr %a1 %t72 = load ptr, ptr %a1 %t73 = call %S.lexer.Token @finch.parser.cur(ptr %t72) %t74 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 1 %t75 = load { ptr, i64, i64 }, ptr %t74 store { ptr, i64, i64 } { ptr @.str.773, i64 9, i64 0 }, ptr %a77 store { ptr, i64, i64 } %t75, ptr %a78 call void @finch_str_concat(ptr %a76, ptr %a77, ptr %a78) %t79 = load { ptr, i64, i64 }, ptr %a76 store { ptr, i64, i64 } %t79, ptr %a81 store { ptr, i64, i64 } { ptr @.str.774, i64 16, i64 0 }, ptr %a82 call void @finch_str_concat(ptr %a80, ptr %a81, ptr %a82) %t83 = load { ptr, i64, i64 }, ptr %a80 call void @finch.parser.fail(ptr %t71, %S.lexer.Token %t73, { ptr, i64, i64 } %t83) br label %endif1360 endif1360: %t84 = load %S.ast.Node, ptr %a4 store %S.ast.Node %t84, ptr %a85 call void @finch.copy.S_ast_Node(ptr %a86, ptr %a85) %t87 = load %S.ast.Node, ptr %a86 ret %S.ast.Node %t87 } define internal %S.ast.Node @finch.parser.parseMatch(ptr %p0, i1 %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca i1, align 16 %a5 = alloca %S.ast.Node, align 16 %a24 = alloca i64, align 16 %a38 = alloca %S.ast.Node, align 16 %a41 = alloca %S.ast.Node, align 16 %a59 = alloca %S.ast.Node, align 16 %a60 = alloca %S.ast.Node, align 16 %a101 = alloca %S.ast.Node, align 16 %a102 = alloca %S.ast.Node, align 16 %a126 = alloca %S.ast.Node, align 16 %a127 = alloca %S.ast.Node, align 16 store ptr %p0, ptr %a1 store i1 %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = call %S.ast.Node @finch.parser.node(ptr %t3, { ptr, i64, i64 } { ptr @.str.775, i64 5, i64 0 }) store %S.ast.Node %t4, ptr %a5 %t6 = load i1, ptr %a2 %t7 = getelementptr inbounds %S.ast.Node, ptr %a5, i32 0, i32 6 store i1 %t6, ptr %t7 %t8 = load ptr, ptr %a1 %t9 = call %S.lexer.Token @finch.parser.expect(ptr %t8, { ptr, i64, i64 } { ptr @.str.776, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.777, i64 7, i64 0 }) %t10 = getelementptr inbounds %S.ast.Node, ptr %a5, i32 0, i32 9 %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t10, i32 0, i32 1 %t12 = load ptr, ptr %a1 %t13 = call %S.ast.Node @finch.parser.parseExpr(ptr %t12) %t14 = load i64, ptr %t11 %t15 = add i64 %t14, 1 call void @finch_arr_reserve(ptr %t10, i64 %t15, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t16 = load ptr, ptr %t10 %t17 = getelementptr inbounds %S.ast.Node, ptr %t16, i64 %t14 store %S.ast.Node %t13, ptr %t17 store i64 %t15, ptr %t11 %t18 = load ptr, ptr %a1 %t19 = call %S.lexer.Token @finch.parser.expect(ptr %t18, { ptr, i64, i64 } { ptr @.str.778, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.779, i64 3, i64 0 }) %t20 = load ptr, ptr %a1 %t21 = icmp eq ptr %t20, null br i1 %t21, label %panic1361, label %ok1362 panic1361: call void @finch_panic(ptr @.str.780, i64 300, ptr @.str.781) unreachable ok1362: %t22 = getelementptr inbounds %S.parser.Parser, ptr %t20, i32 0, i32 2 %t23 = load i64, ptr %t22 store i64 %t23, ptr %a24 %t25 = load ptr, ptr %a1 %t26 = icmp eq ptr %t25, null br i1 %t26, label %panic1363, label %ok1364 panic1363: call void @finch_panic(ptr @.str.782, i64 301, ptr @.str.783) unreachable ok1364: %t27 = getelementptr inbounds %S.parser.Parser, ptr %t25, i32 0, i32 2 store i64 0, ptr %t27 br label %while.cond1365 while.cond1365: %t28 = load ptr, ptr %a1 %t29 = call i1 @finch.parser.at(ptr %t28, { ptr, i64, i64 } { ptr @.str.784, i64 1, i64 0 }) %t30 = xor i1 %t29, true br i1 %t30, label %while.body1366, label %while.end1367 while.body1366: %t31 = load ptr, ptr %a1 %t32 = call i1 @finch.parser.at(ptr %t31, { ptr, i64, i64 } { ptr @.str.785, i64 3, i64 0 }) br i1 %t32, label %then1368, label %endif1370 then1368: %t33 = load ptr, ptr %a1 %t34 = load ptr, ptr %a1 %t35 = call %S.lexer.Token @finch.parser.cur(ptr %t34) call void @finch.parser.fail(ptr %t33, %S.lexer.Token %t35, { ptr, i64, i64 } { ptr @.str.786, i64 37, i64 0 }) br label %endif1370 endif1370: %t36 = load ptr, ptr %a1 %t37 = call %S.ast.Node @finch.parser.node(ptr %t36, { ptr, i64, i64 } { ptr @.str.787, i64 3, i64 0 }) store %S.ast.Node %t37, ptr %a38 %t39 = load ptr, ptr %a1 %t40 = call %S.ast.Node @finch.parser.node(ptr %t39, { ptr, i64, i64 } { ptr @.str.788, i64 8, i64 0 }) store %S.ast.Node %t40, ptr %a41 %t42 = load ptr, ptr %a1 %t43 = call i1 @finch.parser.accept(ptr %t42, { ptr, i64, i64 } { ptr @.str.789, i64 4, i64 0 }) br i1 %t43, label %then1371, label %else1372 then1371: %t44 = getelementptr inbounds %S.ast.Node, ptr %a38, i32 0, i32 6 store i1 true, ptr %t44 br label %endif1373 else1372: br label %while.cond1374 while.cond1374: br label %while.body1375 while.body1375: %t45 = getelementptr inbounds %S.ast.Node, ptr %a41, i32 0, i32 9 %t46 = getelementptr inbounds { ptr, i64, i64 }, ptr %t45, i32 0, i32 1 %t47 = load ptr, ptr %a1 %t48 = call %S.ast.Node @finch.parser.parseExpr(ptr %t47) %t49 = load i64, ptr %t46 %t50 = add i64 %t49, 1 call void @finch_arr_reserve(ptr %t45, i64 %t50, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t51 = load ptr, ptr %t45 %t52 = getelementptr inbounds %S.ast.Node, ptr %t51, i64 %t49 store %S.ast.Node %t48, ptr %t52 store i64 %t50, ptr %t46 %t53 = load ptr, ptr %a1 %t54 = call i1 @finch.parser.accept(ptr %t53, { ptr, i64, i64 } { ptr @.str.790, i64 1, i64 0 }) %t55 = xor i1 %t54, true br i1 %t55, label %then1377, label %endif1379 then1377: br label %while.end1376 endif1379: br label %while.cond1374 while.end1376: br label %endif1373 endif1373: %t56 = getelementptr inbounds %S.ast.Node, ptr %a38, i32 0, i32 9 %t57 = getelementptr inbounds { ptr, i64, i64 }, ptr %t56, i32 0, i32 1 %t58 = load %S.ast.Node, ptr %a41 store %S.ast.Node %t58, ptr %a59 call void @finch.copy.S_ast_Node(ptr %a60, ptr %a59) %t61 = load %S.ast.Node, ptr %a60 %t62 = load i64, ptr %t57 %t63 = add i64 %t62, 1 call void @finch_arr_reserve(ptr %t56, i64 %t63, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t64 = load ptr, ptr %t56 %t65 = getelementptr inbounds %S.ast.Node, ptr %t64, i64 %t62 store %S.ast.Node %t61, ptr %t65 store i64 %t63, ptr %t57 %t66 = load ptr, ptr %a1 %t67 = call %S.lexer.Token @finch.parser.expect(ptr %t66, { ptr, i64, i64 } { ptr @.str.791, i64 2, i64 0 }, { ptr, i64, i64 } { ptr @.str.792, i64 57, i64 0 }) %t68 = load ptr, ptr %a1 %t69 = call i1 @finch.parser.at(ptr %t68, { ptr, i64, i64 } { ptr @.str.793, i64 1, i64 0 }) br label %logic.from1380 logic.from1380: br i1 %t69, label %logic.rhs1381, label %logic.end1382 logic.rhs1381: %t70 = load i1, ptr %a2 %t71 = xor i1 %t70, true br label %logic.rend1383 logic.rend1383: br label %logic.end1382 logic.end1382: %t72 = phi i1 [ false, %logic.from1380 ], [ %t71, %logic.rend1383 ] br i1 %t72, label %then1384, label %else1385 then1384: %t73 = getelementptr inbounds %S.ast.Node, ptr %a38, i32 0, i32 9 %t74 = getelementptr inbounds { ptr, i64, i64 }, ptr %t73, i32 0, i32 1 %t75 = load ptr, ptr %a1 %t76 = call %S.ast.Node @finch.parser.parseBlock(ptr %t75) %t77 = load i64, ptr %t74 %t78 = add i64 %t77, 1 call void @finch_arr_reserve(ptr %t73, i64 %t78, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t79 = load ptr, ptr %t73 %t80 = getelementptr inbounds %S.ast.Node, ptr %t79, i64 %t77 store %S.ast.Node %t76, ptr %t80 store i64 %t78, ptr %t74 br label %endif1386 else1385: %t81 = load i1, ptr %a2 br i1 %t81, label %then1387, label %else1388 then1387: %t82 = getelementptr inbounds %S.ast.Node, ptr %a38, i32 0, i32 9 %t83 = getelementptr inbounds { ptr, i64, i64 }, ptr %t82, i32 0, i32 1 %t84 = load ptr, ptr %a1 %t85 = call %S.ast.Node @finch.parser.parseExpr(ptr %t84) %t86 = load i64, ptr %t83 %t87 = add i64 %t86, 1 call void @finch_arr_reserve(ptr %t82, i64 %t87, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t88 = load ptr, ptr %t82 %t89 = getelementptr inbounds %S.ast.Node, ptr %t88, i64 %t86 store %S.ast.Node %t85, ptr %t89 store i64 %t87, ptr %t83 br label %endif1389 else1388: %t90 = getelementptr inbounds %S.ast.Node, ptr %a38, i32 0, i32 9 %t91 = getelementptr inbounds { ptr, i64, i64 }, ptr %t90, i32 0, i32 1 %t92 = load ptr, ptr %a1 %t93 = call %S.ast.Node @finch.parser.parseStatement(ptr %t92) %t94 = load i64, ptr %t91 %t95 = add i64 %t94, 1 call void @finch_arr_reserve(ptr %t90, i64 %t95, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t96 = load ptr, ptr %t90 %t97 = getelementptr inbounds %S.ast.Node, ptr %t96, i64 %t94 store %S.ast.Node %t93, ptr %t97 store i64 %t95, ptr %t91 br label %endif1389 endif1389: br label %endif1386 endif1386: %t98 = getelementptr inbounds %S.ast.Node, ptr %a5, i32 0, i32 9 %t99 = getelementptr inbounds { ptr, i64, i64 }, ptr %t98, i32 0, i32 1 %t100 = load %S.ast.Node, ptr %a38 store %S.ast.Node %t100, ptr %a101 call void @finch.copy.S_ast_Node(ptr %a102, ptr %a101) %t103 = load %S.ast.Node, ptr %a102 %t104 = load i64, ptr %t99 %t105 = add i64 %t104, 1 call void @finch_arr_reserve(ptr %t98, i64 %t105, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t106 = load ptr, ptr %t98 %t107 = getelementptr inbounds %S.ast.Node, ptr %t106, i64 %t104 store %S.ast.Node %t103, ptr %t107 store i64 %t105, ptr %t99 %t108 = load ptr, ptr %a1 %t109 = call i1 @finch.parser.accept(ptr %t108, { ptr, i64, i64 } { ptr @.str.794, i64 1, i64 0 }) %t110 = xor i1 %t109, true br i1 %t110, label %then1390, label %endif1392 then1390: %t111 = load ptr, ptr %a1 call void @finch.parser.endOfStatement(ptr %t111) br label %endif1392 endif1392: br label %while.cond1365 while.end1367: %t112 = load i64, ptr %a24 %t113 = load ptr, ptr %a1 %t114 = icmp eq ptr %t113, null br i1 %t114, label %panic1393, label %ok1394 panic1393: call void @finch_panic(ptr @.str.795, i64 332, ptr @.str.796) unreachable ok1394: %t115 = getelementptr inbounds %S.parser.Parser, ptr %t113, i32 0, i32 2 store i64 %t112, ptr %t115 %t116 = load ptr, ptr %a1 %t117 = call %S.lexer.Token @finch.parser.next(ptr %t116) %t118 = getelementptr inbounds %S.ast.Node, ptr %a5, i32 0, i32 9 %t119 = getelementptr inbounds { ptr, i64, i64 }, ptr %t118, i32 0, i32 1 %t120 = load i64, ptr %t119 %t121 = icmp eq i64 %t120, 1 br i1 %t121, label %then1395, label %endif1397 then1395: %t122 = load ptr, ptr %a1 %t123 = load ptr, ptr %a1 %t124 = call %S.lexer.Token @finch.parser.cur(ptr %t123) call void @finch.parser.fail(ptr %t122, %S.lexer.Token %t124, { ptr, i64, i64 } { ptr @.str.797, i64 30, i64 0 }) br label %endif1397 endif1397: %t125 = load %S.ast.Node, ptr %a5 store %S.ast.Node %t125, ptr %a126 call void @finch.copy.S_ast_Node(ptr %a127, ptr %a126) %t128 = load %S.ast.Node, ptr %a127 ret %S.ast.Node %t128 } define internal { ptr, i64, i64 } @finch.parser.parseTParams(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } zeroinitializer, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = call %S.lexer.Token @finch.parser.expect(ptr %t3, { ptr, i64, i64 } { ptr @.str.798, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.799, i64 3, i64 0 }) br label %while.cond1398 while.cond1398: br label %while.body1399 while.body1399: %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t6 = load ptr, ptr %a1 %t7 = call %S.lexer.Token @finch.parser.expect(ptr %t6, { ptr, i64, i64 } { ptr @.str.800, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.801, i64 29, i64 0 }) %t8 = extractvalue %S.lexer.Token %t7, 1 store { ptr, i64, i64 } %t8, ptr %a9 call void @finch_str_copy(ptr %a10, ptr %a9) %t11 = load { ptr, i64, i64 }, ptr %a10 %t12 = load i64, ptr %t5 %t13 = add i64 %t12, 1 call void @finch_arr_reserve(ptr %a2, i64 %t13, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t14 = load ptr, ptr %a2 %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t14, i64 %t12 store { ptr, i64, i64 } %t11, ptr %t15 store i64 %t13, ptr %t5 %t16 = load ptr, ptr %a1 %t17 = call i1 @finch.parser.accept(ptr %t16, { ptr, i64, i64 } { ptr @.str.802, i64 1, i64 0 }) %t18 = xor i1 %t17, true br i1 %t18, label %then1401, label %endif1403 then1401: br label %while.end1400 endif1403: br label %while.cond1398 while.end1400: %t19 = load ptr, ptr %a1 %t20 = call %S.lexer.Token @finch.parser.expect(ptr %t19, { ptr, i64, i64 } { ptr @.str.803, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.804, i64 29, i64 0 }) %t21 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t21, ptr %a22 call void @finch.copy.arr_str(ptr %a23, ptr %a22) %t24 = load { ptr, i64, i64 }, ptr %a23 ret { ptr, i64, i64 } %t24 } define internal %S.ast.Node @finch.parser.parseStruct(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a4 = alloca %S.ast.Node, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca %S.ast.Node, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a72 = alloca %S.ast.Node, align 16 %a73 = alloca %S.ast.Node, align 16 %a83 = alloca %S.ast.Node, align 16 %a84 = alloca %S.ast.Node, align 16 store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = call %S.ast.Node @finch.parser.node(ptr %t2, { ptr, i64, i64 } { ptr @.str.805, i64 6, i64 0 }) store %S.ast.Node %t3, ptr %a4 %t5 = load ptr, ptr %a1 %t6 = call %S.lexer.Token @finch.parser.expect(ptr %t5, { ptr, i64, i64 } { ptr @.str.806, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.807, i64 8, i64 0 }) %t7 = load ptr, ptr %a1 %t8 = call %S.lexer.Token @finch.parser.expect(ptr %t7, { ptr, i64, i64 } { ptr @.str.808, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.809, i64 13, i64 0 }) %t9 = extractvalue %S.lexer.Token %t8, 1 store { ptr, i64, i64 } %t9, ptr %a10 call void @finch_str_copy(ptr %a11, ptr %a10) %t12 = load { ptr, i64, i64 }, ptr %a11 %t13 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 1 store { ptr, i64, i64 } %t12, ptr %t13 %t14 = load ptr, ptr %a1 %t15 = call i1 @finch.parser.at(ptr %t14, { ptr, i64, i64 } { ptr @.str.810, i64 1, i64 0 }) br i1 %t15, label %then1404, label %endif1406 then1404: %t16 = load ptr, ptr %a1 %t17 = call { ptr, i64, i64 } @finch.parser.parseTParams(ptr %t16) %t18 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 3 store { ptr, i64, i64 } %t17, ptr %t18 br label %endif1406 endif1406: %t19 = load ptr, ptr %a1 %t20 = call %S.lexer.Token @finch.parser.expect(ptr %t19, { ptr, i64, i64 } { ptr @.str.811, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.812, i64 3, i64 0 }) br label %while.cond1407 while.cond1407: %t21 = load ptr, ptr %a1 %t22 = call i1 @finch.parser.at(ptr %t21, { ptr, i64, i64 } { ptr @.str.813, i64 1, i64 0 }) %t23 = xor i1 %t22, true br i1 %t23, label %while.body1408, label %while.end1409 while.body1408: %t24 = load ptr, ptr %a1 %t25 = call i1 @finch.parser.at(ptr %t24, { ptr, i64, i64 } { ptr @.str.814, i64 3, i64 0 }) br i1 %t25, label %then1410, label %endif1412 then1410: %t26 = load ptr, ptr %a1 %t27 = load ptr, ptr %a1 %t28 = call %S.lexer.Token @finch.parser.cur(ptr %t27) call void @finch.parser.fail(ptr %t26, %S.lexer.Token %t28, { ptr, i64, i64 } { ptr @.str.815, i64 38, i64 0 }) br label %endif1412 endif1412: %t29 = load ptr, ptr %a1 %t30 = call %S.ast.Node @finch.parser.node(ptr %t29, { ptr, i64, i64 } { ptr @.str.816, i64 5, i64 0 }) store %S.ast.Node %t30, ptr %a31 %t32 = load ptr, ptr %a1 %t33 = call i1 @finch.parser.atDeclaration(ptr %t32) %t34 = xor i1 %t33, true br i1 %t34, label %then1413, label %endif1415 then1413: %t35 = load ptr, ptr %a1 %t36 = load ptr, ptr %a1 %t37 = call %S.lexer.Token @finch.parser.cur(ptr %t36) %t38 = load ptr, ptr %a1 %t39 = call %S.lexer.Token @finch.parser.cur(ptr %t38) %t40 = call { ptr, i64, i64 } @finch.parser.describe(%S.lexer.Token %t39) store { ptr, i64, i64 } { ptr @.str.817, i64 11, i64 0 }, ptr %a42 store { ptr, i64, i64 } %t40, ptr %a43 call void @finch_str_concat(ptr %a41, ptr %a42, ptr %a43) %t44 = load { ptr, i64, i64 }, ptr %a41 store { ptr, i64, i64 } %t44, ptr %a46 store { ptr, i64, i64 } { ptr @.str.818, i64 28, i64 0 }, ptr %a47 call void @finch_str_concat(ptr %a45, ptr %a46, ptr %a47) %t48 = load { ptr, i64, i64 }, ptr %a45 call void @finch.parser.fail(ptr %t35, %S.lexer.Token %t37, { ptr, i64, i64 } %t48) br label %endif1415 endif1415: %t49 = load ptr, ptr %a1 %t50 = call %S.ast.Type @finch.parser.parseType(ptr %t49) %t51 = getelementptr inbounds %S.ast.Node, ptr %a31, i32 0, i32 5 store %S.ast.Type %t50, ptr %t51 %t52 = load ptr, ptr %a1 %t53 = call %S.lexer.Token @finch.parser.expect(ptr %t52, { ptr, i64, i64 } { ptr @.str.819, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.820, i64 12, i64 0 }) %t54 = extractvalue %S.lexer.Token %t53, 1 store { ptr, i64, i64 } %t54, ptr %a55 call void @finch_str_copy(ptr %a56, ptr %a55) %t57 = load { ptr, i64, i64 }, ptr %a56 %t58 = getelementptr inbounds %S.ast.Node, ptr %a31, i32 0, i32 1 store { ptr, i64, i64 } %t57, ptr %t58 %t59 = load ptr, ptr %a1 %t60 = call i1 @finch.parser.accept(ptr %t59, { ptr, i64, i64 } { ptr @.str.821, i64 1, i64 0 }) br i1 %t60, label %then1416, label %endif1418 then1416: %t61 = getelementptr inbounds %S.ast.Node, ptr %a31, i32 0, i32 9 %t62 = getelementptr inbounds { ptr, i64, i64 }, ptr %t61, i32 0, i32 1 %t63 = load ptr, ptr %a1 %t64 = call %S.ast.Node @finch.parser.parseExpr(ptr %t63) %t65 = load i64, ptr %t62 %t66 = add i64 %t65, 1 call void @finch_arr_reserve(ptr %t61, i64 %t66, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t67 = load ptr, ptr %t61 %t68 = getelementptr inbounds %S.ast.Node, ptr %t67, i64 %t65 store %S.ast.Node %t64, ptr %t68 store i64 %t66, ptr %t62 br label %endif1418 endif1418: %t69 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 %t70 = getelementptr inbounds { ptr, i64, i64 }, ptr %t69, i32 0, i32 1 %t71 = load %S.ast.Node, ptr %a31 store %S.ast.Node %t71, ptr %a72 call void @finch.copy.S_ast_Node(ptr %a73, ptr %a72) %t74 = load %S.ast.Node, ptr %a73 %t75 = load i64, ptr %t70 %t76 = add i64 %t75, 1 call void @finch_arr_reserve(ptr %t69, i64 %t76, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t77 = load ptr, ptr %t69 %t78 = getelementptr inbounds %S.ast.Node, ptr %t77, i64 %t75 store %S.ast.Node %t74, ptr %t78 store i64 %t76, ptr %t70 %t79 = load ptr, ptr %a1 call void @finch.parser.endOfStatement(ptr %t79) br label %while.cond1407 while.end1409: %t80 = load ptr, ptr %a1 %t81 = call %S.lexer.Token @finch.parser.next(ptr %t80) %t82 = load %S.ast.Node, ptr %a4 store %S.ast.Node %t82, ptr %a83 call void @finch.copy.S_ast_Node(ptr %a84, ptr %a83) %t85 = load %S.ast.Node, ptr %a84 ret %S.ast.Node %t85 } define internal %S.ast.Node @finch.parser.parseFn(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a4 = alloca %S.ast.Node, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca %S.ast.Node, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca %S.ast.Node, align 16 %a77 = alloca %S.ast.Node, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 %a113 = alloca { ptr, i64, i64 }, align 16 %a123 = alloca { ptr, i64, i64 }, align 16 %a124 = alloca { ptr, i64, i64 }, align 16 %a125 = alloca { ptr, i64, i64 }, align 16 %a127 = alloca { ptr, i64, i64 }, align 16 %a128 = alloca { ptr, i64, i64 }, align 16 %a129 = alloca { ptr, i64, i64 }, align 16 %a153 = alloca %S.ast.Node, align 16 %a154 = alloca %S.ast.Node, align 16 store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = call %S.ast.Node @finch.parser.node(ptr %t2, { ptr, i64, i64 } { ptr @.str.822, i64 2, i64 0 }) store %S.ast.Node %t3, ptr %a4 %t5 = load ptr, ptr %a1 %t6 = call i1 @finch.parser.accept(ptr %t5, { ptr, i64, i64 } { ptr @.str.823, i64 6, i64 0 }) %t7 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 8 store i1 %t6, ptr %t7 %t8 = load ptr, ptr %a1 %t9 = call i1 @finch.parser.at(ptr %t8, { ptr, i64, i64 } { ptr @.str.824, i64 5, i64 0 }) br label %logic.from1419 logic.from1419: br i1 %t9, label %logic.rhs1420, label %logic.end1421 logic.rhs1420: %t10 = load ptr, ptr %a1 %t11 = call %S.lexer.Token @finch.parser.cur(ptr %t10) %t12 = extractvalue %S.lexer.Token %t11, 1 store { ptr, i64, i64 } %t12, ptr %a13 call void @finch_str_copy(ptr %a14, ptr %a13) %t15 = load { ptr, i64, i64 }, ptr %a14 %t16 = call i1 @finch.parser.isTypeName({ ptr, i64, i64 } %t15) br label %logic.rend1422 logic.rend1422: br label %logic.end1421 logic.end1421: %t17 = phi i1 [ false, %logic.from1419 ], [ %t16, %logic.rend1422 ] br i1 %t17, label %then1423, label %endif1425 then1423: %t18 = load ptr, ptr %a1 %t19 = load ptr, ptr %a1 %t20 = call %S.lexer.Token @finch.parser.cur(ptr %t19) call void @finch.parser.fail(ptr %t18, %S.lexer.Token %t20, { ptr, i64, i64 } { ptr @.str.825, i64 68, i64 0 }) br label %endif1425 endif1425: %t21 = load ptr, ptr %a1 %t22 = call %S.lexer.Token @finch.parser.expect(ptr %t21, { ptr, i64, i64 } { ptr @.str.826, i64 2, i64 0 }, { ptr, i64, i64 } { ptr @.str.827, i64 26, i64 0 }) %t23 = load ptr, ptr %a1 %t24 = call %S.lexer.Token @finch.parser.expect(ptr %t23, { ptr, i64, i64 } { ptr @.str.828, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.829, i64 15, i64 0 }) %t25 = extractvalue %S.lexer.Token %t24, 1 store { ptr, i64, i64 } %t25, ptr %a26 call void @finch_str_copy(ptr %a27, ptr %a26) %t28 = load { ptr, i64, i64 }, ptr %a27 %t29 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 1 store { ptr, i64, i64 } %t28, ptr %t29 %t30 = load ptr, ptr %a1 %t31 = call i1 @finch.parser.at(ptr %t30, { ptr, i64, i64 } { ptr @.str.830, i64 1, i64 0 }) br i1 %t31, label %then1426, label %endif1428 then1426: %t32 = load ptr, ptr %a1 %t33 = call { ptr, i64, i64 } @finch.parser.parseTParams(ptr %t32) %t34 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 3 store { ptr, i64, i64 } %t33, ptr %t34 br label %endif1428 endif1428: %t35 = load ptr, ptr %a1 %t36 = call i1 @finch.parser.accept(ptr %t35, { ptr, i64, i64 } { ptr @.str.831, i64 1, i64 0 }) br i1 %t36, label %then1429, label %endif1431 then1429: %t37 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 1 %t38 = load { ptr, i64, i64 }, ptr %t37 %t39 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 2 store { ptr, i64, i64 } %t38, ptr %a40 call void @finch_str_copy(ptr %a41, ptr %a40) %t42 = load { ptr, i64, i64 }, ptr %a41 store { ptr, i64, i64 } %t42, ptr %t39 %t43 = load ptr, ptr %a1 %t44 = call %S.lexer.Token @finch.parser.expect(ptr %t43, { ptr, i64, i64 } { ptr @.str.832, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.833, i64 13, i64 0 }) %t45 = extractvalue %S.lexer.Token %t44, 1 store { ptr, i64, i64 } %t45, ptr %a46 call void @finch_str_copy(ptr %a47, ptr %a46) %t48 = load { ptr, i64, i64 }, ptr %a47 %t49 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 1 store { ptr, i64, i64 } %t48, ptr %t49 br label %endif1431 endif1431: %t50 = load ptr, ptr %a1 %t51 = call %S.lexer.Token @finch.parser.expect(ptr %t50, { ptr, i64, i64 } { ptr @.str.834, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.835, i64 3, i64 0 }) %t52 = load ptr, ptr %a1 %t53 = icmp eq ptr %t52, null br i1 %t53, label %panic1432, label %ok1433 panic1432: call void @finch_panic(ptr @.str.836, i64 398, ptr @.str.837) unreachable ok1433: %t54 = getelementptr inbounds %S.parser.Parser, ptr %t52, i32 0, i32 2 %t55 = load i64, ptr %t54 %t56 = add i64 %t55, 1 store i64 %t56, ptr %t54 %t57 = load ptr, ptr %a1 %t58 = call i1 @finch.parser.at(ptr %t57, { ptr, i64, i64 } { ptr @.str.838, i64 1, i64 0 }) %t59 = xor i1 %t58, true br i1 %t59, label %then1434, label %endif1436 then1434: br label %while.cond1437 while.cond1437: br label %while.body1438 while.body1438: %t60 = load ptr, ptr %a1 %t61 = call %S.ast.Node @finch.parser.node(ptr %t60, { ptr, i64, i64 } { ptr @.str.839, i64 5, i64 0 }) store %S.ast.Node %t61, ptr %a62 %t63 = load ptr, ptr %a1 %t64 = call %S.ast.Type @finch.parser.parseType(ptr %t63) %t65 = getelementptr inbounds %S.ast.Node, ptr %a62, i32 0, i32 5 store %S.ast.Type %t64, ptr %t65 %t66 = load ptr, ptr %a1 %t67 = call %S.lexer.Token @finch.parser.expect(ptr %t66, { ptr, i64, i64 } { ptr @.str.840, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.841, i64 16, i64 0 }) %t68 = extractvalue %S.lexer.Token %t67, 1 store { ptr, i64, i64 } %t68, ptr %a69 call void @finch_str_copy(ptr %a70, ptr %a69) %t71 = load { ptr, i64, i64 }, ptr %a70 %t72 = getelementptr inbounds %S.ast.Node, ptr %a62, i32 0, i32 1 store { ptr, i64, i64 } %t71, ptr %t72 %t73 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 %t74 = getelementptr inbounds { ptr, i64, i64 }, ptr %t73, i32 0, i32 1 %t75 = load %S.ast.Node, ptr %a62 store %S.ast.Node %t75, ptr %a76 call void @finch.copy.S_ast_Node(ptr %a77, ptr %a76) %t78 = load %S.ast.Node, ptr %a77 %t79 = load i64, ptr %t74 %t80 = add i64 %t79, 1 call void @finch_arr_reserve(ptr %t73, i64 %t80, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t81 = load ptr, ptr %t73 %t82 = getelementptr inbounds %S.ast.Node, ptr %t81, i64 %t79 store %S.ast.Node %t78, ptr %t82 store i64 %t80, ptr %t74 %t83 = load ptr, ptr %a1 %t84 = call i1 @finch.parser.accept(ptr %t83, { ptr, i64, i64 } { ptr @.str.842, i64 1, i64 0 }) %t85 = xor i1 %t84, true br i1 %t85, label %then1440, label %endif1442 then1440: br label %while.end1439 endif1442: br label %while.cond1437 while.end1439: br label %endif1436 endif1436: %t86 = load ptr, ptr %a1 %t87 = icmp eq ptr %t86, null br i1 %t87, label %panic1443, label %ok1444 panic1443: call void @finch_panic(ptr @.str.843, i64 410, ptr @.str.844) unreachable ok1444: %t88 = getelementptr inbounds %S.parser.Parser, ptr %t86, i32 0, i32 2 %t89 = load i64, ptr %t88 %t90 = sub i64 %t89, 1 store i64 %t90, ptr %t88 %t91 = load ptr, ptr %a1 %t92 = call %S.lexer.Token @finch.parser.expect(ptr %t91, { ptr, i64, i64 } { ptr @.str.845, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.846, i64 3, i64 0 }) %t93 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.847, i64 4, i64 0 }) %t94 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 5 store %S.ast.Type %t93, ptr %t94 %t95 = load ptr, ptr %a1 %t96 = call i1 @finch.parser.accept(ptr %t95, { ptr, i64, i64 } { ptr @.str.848, i64 2, i64 0 }) br i1 %t96, label %then1445, label %endif1447 then1445: %t97 = load ptr, ptr %a1 %t98 = call i1 @finch.parser.at(ptr %t97, { ptr, i64, i64 } { ptr @.str.849, i64 1, i64 0 }) %t99 = xor i1 %t98, true br i1 %t99, label %then1448, label %endif1450 then1448: %t100 = load ptr, ptr %a1 %t101 = call %S.ast.Type @finch.parser.parseType(ptr %t100) %t102 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 5 store %S.ast.Type %t101, ptr %t102 br label %endif1450 endif1450: %t103 = load ptr, ptr %a1 %t104 = call i1 @finch.parser.accept(ptr %t103, { ptr, i64, i64 } { ptr @.str.850, i64 1, i64 0 }) %t105 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 7 store i1 %t104, ptr %t105 %t106 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 7 %t107 = load i1, ptr %t106 %t108 = xor i1 %t107, true br label %logic.from1451 logic.from1451: br i1 %t108, label %logic.rhs1452, label %logic.end1453 logic.rhs1452: %t109 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 5 %t110 = getelementptr inbounds %S.ast.Type, ptr %t109, i32 0, i32 0 %t111 = load { ptr, i64, i64 }, ptr %t110 store { ptr, i64, i64 } %t111, ptr %a112 store { ptr, i64, i64 } { ptr @.str.851, i64 4, i64 0 }, ptr %a113 %t114 = call i32 @finch_str_eq(ptr %a112, ptr %a113) %t115 = icmp ne i32 %t114, 0 br label %logic.rend1454 logic.rend1454: br label %logic.end1453 logic.end1453: %t116 = phi i1 [ false, %logic.from1451 ], [ %t115, %logic.rend1454 ] br i1 %t116, label %then1455, label %endif1457 then1455: %t117 = load ptr, ptr %a1 %t118 = load ptr, ptr %a1 %t119 = call %S.lexer.Token @finch.parser.cur(ptr %t118) %t120 = load ptr, ptr %a1 %t121 = call %S.lexer.Token @finch.parser.cur(ptr %t120) %t122 = call { ptr, i64, i64 } @finch.parser.describe(%S.lexer.Token %t121) store { ptr, i64, i64 } { ptr @.str.852, i64 11, i64 0 }, ptr %a124 store { ptr, i64, i64 } %t122, ptr %a125 call void @finch_str_concat(ptr %a123, ptr %a124, ptr %a125) %t126 = load { ptr, i64, i64 }, ptr %a123 store { ptr, i64, i64 } %t126, ptr %a128 store { ptr, i64, i64 } { ptr @.str.853, i64 61, i64 0 }, ptr %a129 call void @finch_str_concat(ptr %a127, ptr %a128, ptr %a129) %t130 = load { ptr, i64, i64 }, ptr %a127 call void @finch.parser.fail(ptr %t117, %S.lexer.Token %t119, { ptr, i64, i64 } %t130) br label %endif1457 endif1457: br label %endif1447 endif1447: %t131 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 %t132 = getelementptr inbounds { ptr, i64, i64 }, ptr %t131, i32 0, i32 1 %t133 = load ptr, ptr %a1 %t134 = call %S.ast.Node @finch.parser.parseBlock(ptr %t133) %t135 = load i64, ptr %t132 %t136 = add i64 %t135, 1 call void @finch_arr_reserve(ptr %t131, i64 %t136, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t137 = load ptr, ptr %t131 %t138 = getelementptr inbounds %S.ast.Node, ptr %t137, i64 %t135 store %S.ast.Node %t134, ptr %t138 store i64 %t136, ptr %t132 %t139 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 %t140 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 %t141 = getelementptr inbounds { ptr, i64, i64 }, ptr %t140, i32 0, i32 1 %t142 = load i64, ptr %t141 %t143 = sub i64 %t142, 1 %t144 = load { ptr, i64, i64 }, ptr %t139 %t145 = extractvalue { ptr, i64, i64 } %t144, 1 %t146 = icmp uge i64 %t143, %t145 br i1 %t146, label %range1458, label %inrange1459 range1458: call void @finch_panic_index(ptr @.str.854, i64 423, i64 %t143, i64 %t145) unreachable inrange1459: %t147 = extractvalue { ptr, i64, i64 } %t144, 0 %t148 = getelementptr inbounds %S.ast.Node, ptr %t147, i64 %t143 %t149 = getelementptr inbounds %S.ast.Node, ptr %t148, i32 0, i32 14 %t150 = load i64, ptr %t149 %t151 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 14 store i64 %t150, ptr %t151 %t152 = load %S.ast.Node, ptr %a4 store %S.ast.Node %t152, ptr %a153 call void @finch.copy.S_ast_Node(ptr %a154, ptr %a153) %t155 = load %S.ast.Node, ptr %a154 ret %S.ast.Node %t155 } define internal %S.ast.Node @finch.parser.parseBlock(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a4 = alloca %S.ast.Node, align 16 %a11 = alloca i64, align 16 %a43 = alloca %S.ast.Node, align 16 %a44 = alloca %S.ast.Node, align 16 store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = call %S.ast.Node @finch.parser.node(ptr %t2, { ptr, i64, i64 } { ptr @.str.855, i64 5, i64 0 }) store %S.ast.Node %t3, ptr %a4 %t5 = load ptr, ptr %a1 %t6 = call %S.lexer.Token @finch.parser.expect(ptr %t5, { ptr, i64, i64 } { ptr @.str.856, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.857, i64 3, i64 0 }) %t7 = load ptr, ptr %a1 %t8 = icmp eq ptr %t7, null br i1 %t8, label %panic1460, label %ok1461 panic1460: call void @finch_panic(ptr @.str.858, i64 432, ptr @.str.859) unreachable ok1461: %t9 = getelementptr inbounds %S.parser.Parser, ptr %t7, i32 0, i32 2 %t10 = load i64, ptr %t9 store i64 %t10, ptr %a11 %t12 = load ptr, ptr %a1 %t13 = icmp eq ptr %t12, null br i1 %t13, label %panic1462, label %ok1463 panic1462: call void @finch_panic(ptr @.str.860, i64 433, ptr @.str.861) unreachable ok1463: %t14 = getelementptr inbounds %S.parser.Parser, ptr %t12, i32 0, i32 2 store i64 0, ptr %t14 br label %while.cond1464 while.cond1464: %t15 = load ptr, ptr %a1 %t16 = call i1 @finch.parser.at(ptr %t15, { ptr, i64, i64 } { ptr @.str.862, i64 1, i64 0 }) %t17 = xor i1 %t16, true br i1 %t17, label %while.body1465, label %while.end1466 while.body1465: %t18 = load ptr, ptr %a1 %t19 = call i1 @finch.parser.at(ptr %t18, { ptr, i64, i64 } { ptr @.str.863, i64 3, i64 0 }) br i1 %t19, label %then1467, label %endif1469 then1467: %t20 = load ptr, ptr %a1 %t21 = load ptr, ptr %a1 %t22 = call %S.lexer.Token @finch.parser.cur(ptr %t21) call void @finch.parser.fail(ptr %t20, %S.lexer.Token %t22, { ptr, i64, i64 } { ptr @.str.864, i64 35, i64 0 }) br label %endif1469 endif1469: %t23 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %t23, i32 0, i32 1 %t25 = load ptr, ptr %a1 %t26 = call %S.ast.Node @finch.parser.parseStatement(ptr %t25) %t27 = load i64, ptr %t24 %t28 = add i64 %t27, 1 call void @finch_arr_reserve(ptr %t23, i64 %t28, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t29 = load ptr, ptr %t23 %t30 = getelementptr inbounds %S.ast.Node, ptr %t29, i64 %t27 store %S.ast.Node %t26, ptr %t30 store i64 %t28, ptr %t24 %t31 = load ptr, ptr %a1 call void @finch.parser.endOfStatement(ptr %t31) br label %while.cond1464 while.end1466: %t32 = load i64, ptr %a11 %t33 = load ptr, ptr %a1 %t34 = icmp eq ptr %t33, null br i1 %t34, label %panic1470, label %ok1471 panic1470: call void @finch_panic(ptr @.str.865, i64 441, ptr @.str.866) unreachable ok1471: %t35 = getelementptr inbounds %S.parser.Parser, ptr %t33, i32 0, i32 2 store i64 %t32, ptr %t35 %t36 = load ptr, ptr %a1 %t37 = call %S.lexer.Token @finch.parser.cur(ptr %t36) %t38 = extractvalue %S.lexer.Token %t37, 2 %t39 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 14 store i64 %t38, ptr %t39 %t40 = load ptr, ptr %a1 %t41 = call %S.lexer.Token @finch.parser.next(ptr %t40) %t42 = load %S.ast.Node, ptr %a4 store %S.ast.Node %t42, ptr %a43 call void @finch.copy.S_ast_Node(ptr %a44, ptr %a43) %t45 = load %S.ast.Node, ptr %a44 ret %S.ast.Node %t45 } define internal %S.ast.Node @finch.parser.parseStatement(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca %S.ast.Node, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca %S.ast.Node, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca { ptr, i64, i64 }, align 16 %a104 = alloca { ptr, i64, i64 }, align 16 %a110 = alloca { ptr, i64, i64 }, align 16 %a111 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca %S.ast.Node, align 16 %a137 = alloca { ptr, i64, i64 }, align 16 %a138 = alloca { ptr, i64, i64 }, align 16 %a142 = alloca { ptr, i64, i64 }, align 16 %a143 = alloca { ptr, i64, i64 }, align 16 %a150 = alloca %S.ast.Node, align 16 %a155 = alloca { ptr, i64, i64 }, align 16 %a156 = alloca { ptr, i64, i64 }, align 16 %a162 = alloca { ptr, i64, i64 }, align 16 %a163 = alloca { ptr, i64, i64 }, align 16 %a168 = alloca %S.ast.Node, align 16 %a186 = alloca { ptr, i64, i64 }, align 16 %a187 = alloca { ptr, i64, i64 }, align 16 %a191 = alloca { ptr, i64, i64 }, align 16 %a192 = alloca { ptr, i64, i64 }, align 16 %a197 = alloca { ptr, i64, i64 }, align 16 %a198 = alloca { ptr, i64, i64 }, align 16 %a203 = alloca { ptr, i64, i64 }, align 16 %a204 = alloca { ptr, i64, i64 }, align 16 %a212 = alloca { ptr, i64, i64 }, align 16 %a213 = alloca { ptr, i64, i64 }, align 16 %a214 = alloca { ptr, i64, i64 }, align 16 %a216 = alloca { ptr, i64, i64 }, align 16 %a217 = alloca { ptr, i64, i64 }, align 16 %a218 = alloca { ptr, i64, i64 }, align 16 %a224 = alloca %S.ast.Node, align 16 %a232 = alloca { ptr, i64, i64 }, align 16 %a233 = alloca { ptr, i64, i64 }, align 16 %a251 = alloca { ptr, i64, i64 }, align 16 %a252 = alloca { ptr, i64, i64 }, align 16 %a258 = alloca %S.ast.Node, align 16 %a262 = alloca { ptr, i64, i64 }, align 16 %a263 = alloca { ptr, i64, i64 }, align 16 %a279 = alloca %S.lexer.Token, align 16 %a282 = alloca %S.ast.Node, align 16 %a294 = alloca { ptr, i64, i64 }, align 16 %a298 = alloca i64, align 16 %a301 = alloca i64, align 16 %a306 = alloca { ptr, i64, i64 }, align 16 %a307 = alloca { ptr, i64, i64 }, align 16 %a318 = alloca { ptr, i64, i64 }, align 16 %a319 = alloca { ptr, i64, i64 }, align 16 %a324 = alloca { ptr, i64, i64 }, align 16 %a325 = alloca { ptr, i64, i64 }, align 16 %a331 = alloca { ptr, i64, i64 }, align 16 %a332 = alloca { ptr, i64, i64 }, align 16 %a350 = alloca %S.ast.Node, align 16 %a354 = alloca { ptr, i64, i64 }, align 16 %a355 = alloca { ptr, i64, i64 }, align 16 %a361 = alloca %S.ast.Node, align 16 %a362 = alloca %S.ast.Node, align 16 %a379 = alloca { ptr, i64, i64 }, align 16 %a380 = alloca { ptr, i64, i64 }, align 16 %a385 = alloca { ptr, i64, i64 }, align 16 %a386 = alloca { ptr, i64, i64 }, align 16 %a392 = alloca { ptr, i64, i64 }, align 16 %a393 = alloca { ptr, i64, i64 }, align 16 %a399 = alloca { ptr, i64, i64 }, align 16 %a400 = alloca { ptr, i64, i64 }, align 16 %a418 = alloca %S.ast.Node, align 16 %a422 = alloca %S.ast.Node, align 16 %a423 = alloca %S.ast.Node, align 16 %a430 = alloca %S.ast.Node, align 16 %a431 = alloca %S.ast.Node, align 16 store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = call { ptr, i64, i64 } @finch.parser.curKind(ptr %t2) store { ptr, i64, i64 } %t3, ptr %a4 %t5 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t5, ptr %a6 store { ptr, i64, i64 } { ptr @.str.867, i64 2, i64 0 }, ptr %a7 %t8 = call i32 @finch_str_eq(ptr %a6, ptr %a7) %t9 = icmp ne i32 %t8, 0 br i1 %t9, label %then1472, label %endif1474 then1472: %t10 = load ptr, ptr %a1 %t11 = call %S.ast.Node @finch.parser.parseIf(ptr %t10) ret %S.ast.Node %t11 endif1474: %t12 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t12, ptr %a13 store { ptr, i64, i64 } { ptr @.str.868, i64 5, i64 0 }, ptr %a14 %t15 = call i32 @finch_str_eq(ptr %a13, ptr %a14) %t16 = icmp ne i32 %t15, 0 br i1 %t16, label %then1475, label %endif1477 then1475: %t17 = load ptr, ptr %a1 %t18 = call %S.ast.Node @finch.parser.node(ptr %t17, { ptr, i64, i64 } { ptr @.str.869, i64 5, i64 0 }) store %S.ast.Node %t18, ptr %a19 %t20 = load ptr, ptr %a1 %t21 = call %S.lexer.Token @finch.parser.next(ptr %t20) %t22 = getelementptr inbounds %S.ast.Node, ptr %a19, i32 0, i32 9 %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t22, i32 0, i32 1 %t24 = load ptr, ptr %a1 %t25 = call %S.ast.Node @finch.parser.parseExpr(ptr %t24) %t26 = load i64, ptr %t23 %t27 = add i64 %t26, 1 call void @finch_arr_reserve(ptr %t22, i64 %t27, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t28 = load ptr, ptr %t22 %t29 = getelementptr inbounds %S.ast.Node, ptr %t28, i64 %t26 store %S.ast.Node %t25, ptr %t29 store i64 %t27, ptr %t23 %t30 = getelementptr inbounds %S.ast.Node, ptr %a19, i32 0, i32 9 %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t30, i32 0, i32 1 %t32 = load ptr, ptr %a1 %t33 = call %S.ast.Node @finch.parser.parseBlock(ptr %t32) %t34 = load i64, ptr %t31 %t35 = add i64 %t34, 1 call void @finch_arr_reserve(ptr %t30, i64 %t35, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t36 = load ptr, ptr %t30 %t37 = getelementptr inbounds %S.ast.Node, ptr %t36, i64 %t34 store %S.ast.Node %t33, ptr %t37 store i64 %t35, ptr %t31 %t38 = load %S.ast.Node, ptr %a19 ret %S.ast.Node %t38 endif1477: %t39 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t39, ptr %a40 store { ptr, i64, i64 } { ptr @.str.870, i64 3, i64 0 }, ptr %a41 %t42 = call i32 @finch_str_eq(ptr %a40, ptr %a41) %t43 = icmp ne i32 %t42, 0 br i1 %t43, label %then1478, label %endif1480 then1478: %t44 = load ptr, ptr %a1 %t45 = call %S.ast.Node @finch.parser.node(ptr %t44, { ptr, i64, i64 } { ptr @.str.871, i64 3, i64 0 }) store %S.ast.Node %t45, ptr %a46 %t47 = load ptr, ptr %a1 %t48 = call %S.lexer.Token @finch.parser.next(ptr %t47) %t49 = load ptr, ptr %a1 %t50 = call %S.lexer.Token @finch.parser.expect(ptr %t49, { ptr, i64, i64 } { ptr @.str.872, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.873, i64 20, i64 0 }) %t51 = extractvalue %S.lexer.Token %t50, 1 store { ptr, i64, i64 } %t51, ptr %a52 call void @finch_str_copy(ptr %a53, ptr %a52) %t54 = load { ptr, i64, i64 }, ptr %a53 %t55 = getelementptr inbounds %S.ast.Node, ptr %a46, i32 0, i32 1 store { ptr, i64, i64 } %t54, ptr %t55 %t56 = load ptr, ptr %a1 %t57 = call i1 @finch.parser.accept(ptr %t56, { ptr, i64, i64 } { ptr @.str.874, i64 1, i64 0 }) br i1 %t57, label %then1481, label %endif1483 then1481: %t58 = load ptr, ptr %a1 %t59 = call %S.lexer.Token @finch.parser.expect(ptr %t58, { ptr, i64, i64 } { ptr @.str.875, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.876, i64 27, i64 0 }) %t60 = extractvalue %S.lexer.Token %t59, 1 store { ptr, i64, i64 } %t60, ptr %a61 call void @finch_str_copy(ptr %a62, ptr %a61) %t63 = load { ptr, i64, i64 }, ptr %a62 %t64 = getelementptr inbounds %S.ast.Node, ptr %a46, i32 0, i32 4 store { ptr, i64, i64 } %t63, ptr %t64 br label %endif1483 endif1483: %t65 = load ptr, ptr %a1 %t66 = call %S.lexer.Token @finch.parser.expect(ptr %t65, { ptr, i64, i64 } { ptr @.str.877, i64 2, i64 0 }, { ptr, i64, i64 } { ptr @.str.878, i64 4, i64 0 }) %t67 = getelementptr inbounds %S.ast.Node, ptr %a46, i32 0, i32 9 %t68 = getelementptr inbounds { ptr, i64, i64 }, ptr %t67, i32 0, i32 1 %t69 = load ptr, ptr %a1 %t70 = call %S.ast.Node @finch.parser.parseExpr(ptr %t69) %t71 = load i64, ptr %t68 %t72 = add i64 %t71, 1 call void @finch_arr_reserve(ptr %t67, i64 %t72, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t73 = load ptr, ptr %t67 %t74 = getelementptr inbounds %S.ast.Node, ptr %t73, i64 %t71 store %S.ast.Node %t70, ptr %t74 store i64 %t72, ptr %t68 %t75 = load ptr, ptr %a1 %t76 = call i1 @finch.parser.accept(ptr %t75, { ptr, i64, i64 } { ptr @.str.879, i64 2, i64 0 }) br i1 %t76, label %then1484, label %else1485 then1484: %t77 = getelementptr inbounds %S.ast.Node, ptr %a46, i32 0, i32 4 %t78 = getelementptr inbounds { ptr, i64, i64 }, ptr %t77, i32 0, i32 1 %t79 = load i64, ptr %t78 %t80 = icmp sgt i64 %t79, 0 br i1 %t80, label %then1487, label %endif1489 then1487: %t81 = load ptr, ptr %a1 %t82 = load ptr, ptr %a1 %t83 = call %S.lexer.Token @finch.parser.cur(ptr %t82) call void @finch.parser.fail(ptr %t81, %S.lexer.Token %t83, { ptr, i64, i64 } { ptr @.str.880, i64 55, i64 0 }) br label %endif1489 endif1489: %t84 = getelementptr inbounds %S.ast.Node, ptr %a46, i32 0, i32 9 %t85 = getelementptr inbounds { ptr, i64, i64 }, ptr %t84, i32 0, i32 1 %t86 = load ptr, ptr %a1 %t87 = call %S.ast.Node @finch.parser.parseExpr(ptr %t86) %t88 = load i64, ptr %t85 %t89 = add i64 %t88, 1 call void @finch_arr_reserve(ptr %t84, i64 %t89, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t90 = load ptr, ptr %t84 %t91 = getelementptr inbounds %S.ast.Node, ptr %t90, i64 %t88 store %S.ast.Node %t87, ptr %t91 store i64 %t89, ptr %t85 br label %endif1486 else1485: %t92 = getelementptr inbounds %S.ast.Node, ptr %a46, i32 0, i32 0 store { ptr, i64, i64 } { ptr @.str.881, i64 4, i64 0 }, ptr %t92 br label %endif1486 endif1486: %t93 = getelementptr inbounds %S.ast.Node, ptr %a46, i32 0, i32 9 %t94 = getelementptr inbounds { ptr, i64, i64 }, ptr %t93, i32 0, i32 1 %t95 = load ptr, ptr %a1 %t96 = call %S.ast.Node @finch.parser.parseBlock(ptr %t95) %t97 = load i64, ptr %t94 %t98 = add i64 %t97, 1 call void @finch_arr_reserve(ptr %t93, i64 %t98, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t99 = load ptr, ptr %t93 %t100 = getelementptr inbounds %S.ast.Node, ptr %t99, i64 %t97 store %S.ast.Node %t96, ptr %t100 store i64 %t98, ptr %t94 %t101 = load %S.ast.Node, ptr %a46 ret %S.ast.Node %t101 endif1480: %t102 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t102, ptr %a103 store { ptr, i64, i64 } { ptr @.str.882, i64 5, i64 0 }, ptr %a104 %t105 = call i32 @finch_str_eq(ptr %a103, ptr %a104) %t106 = icmp ne i32 %t105, 0 br i1 %t106, label %then1490, label %endif1492 then1490: %t107 = load ptr, ptr %a1 %t108 = call %S.ast.Node @finch.parser.parseMatch(ptr %t107, i1 false) ret %S.ast.Node %t108 endif1492: %t109 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t109, ptr %a110 store { ptr, i64, i64 } { ptr @.str.883, i64 6, i64 0 }, ptr %a111 %t112 = call i32 @finch_str_eq(ptr %a110, ptr %a111) %t113 = icmp ne i32 %t112, 0 br i1 %t113, label %then1493, label %endif1495 then1493: %t114 = load ptr, ptr %a1 %t115 = call %S.ast.Node @finch.parser.node(ptr %t114, { ptr, i64, i64 } { ptr @.str.884, i64 6, i64 0 }) store %S.ast.Node %t115, ptr %a116 %t117 = load ptr, ptr %a1 %t118 = call %S.lexer.Token @finch.parser.next(ptr %t117) %t119 = load ptr, ptr %a1 %t120 = call i1 @finch.parser.at(ptr %t119, { ptr, i64, i64 } { ptr @.str.885, i64 1, i64 0 }) %t121 = xor i1 %t120, true br label %logic.from1496 logic.from1496: br i1 %t121, label %logic.rhs1497, label %logic.end1498 logic.rhs1497: %t122 = load ptr, ptr %a1 %t123 = call %S.lexer.Token @finch.parser.cur(ptr %t122) %t124 = extractvalue %S.lexer.Token %t123, 4 %t125 = xor i1 %t124, true br label %logic.rend1499 logic.rend1499: br label %logic.end1498 logic.end1498: %t126 = phi i1 [ false, %logic.from1496 ], [ %t125, %logic.rend1499 ] br i1 %t126, label %then1500, label %endif1502 then1500: %t127 = getelementptr inbounds %S.ast.Node, ptr %a116, i32 0, i32 9 %t128 = getelementptr inbounds { ptr, i64, i64 }, ptr %t127, i32 0, i32 1 %t129 = load ptr, ptr %a1 %t130 = call %S.ast.Node @finch.parser.parseExpr(ptr %t129) %t131 = load i64, ptr %t128 %t132 = add i64 %t131, 1 call void @finch_arr_reserve(ptr %t127, i64 %t132, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t133 = load ptr, ptr %t127 %t134 = getelementptr inbounds %S.ast.Node, ptr %t133, i64 %t131 store %S.ast.Node %t130, ptr %t134 store i64 %t132, ptr %t128 br label %endif1502 endif1502: %t135 = load %S.ast.Node, ptr %a116 ret %S.ast.Node %t135 endif1495: %t136 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t136, ptr %a137 store { ptr, i64, i64 } { ptr @.str.886, i64 5, i64 0 }, ptr %a138 %t139 = call i32 @finch_str_eq(ptr %a137, ptr %a138) %t140 = icmp ne i32 %t139, 0 br label %logic.from1503 logic.from1503: br i1 %t140, label %logic.end1505, label %logic.rhs1504 logic.rhs1504: %t141 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t141, ptr %a142 store { ptr, i64, i64 } { ptr @.str.887, i64 8, i64 0 }, ptr %a143 %t144 = call i32 @finch_str_eq(ptr %a142, ptr %a143) %t145 = icmp ne i32 %t144, 0 br label %logic.rend1506 logic.rend1506: br label %logic.end1505 logic.end1505: %t146 = phi i1 [ true, %logic.from1503 ], [ %t145, %logic.rend1506 ] br i1 %t146, label %then1507, label %endif1509 then1507: %t147 = load ptr, ptr %a1 %t148 = load { ptr, i64, i64 }, ptr %a4 %t149 = call %S.ast.Node @finch.parser.node(ptr %t147, { ptr, i64, i64 } %t148) store %S.ast.Node %t149, ptr %a150 %t151 = load ptr, ptr %a1 %t152 = call %S.lexer.Token @finch.parser.next(ptr %t151) %t153 = load %S.ast.Node, ptr %a150 ret %S.ast.Node %t153 endif1509: %t154 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t154, ptr %a155 store { ptr, i64, i64 } { ptr @.str.888, i64 1, i64 0 }, ptr %a156 %t157 = call i32 @finch_str_eq(ptr %a155, ptr %a156) %t158 = icmp ne i32 %t157, 0 br i1 %t158, label %then1510, label %endif1512 then1510: %t159 = load ptr, ptr %a1 %t160 = call %S.ast.Node @finch.parser.parseBlock(ptr %t159) ret %S.ast.Node %t160 endif1512: %t161 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t161, ptr %a162 store { ptr, i64, i64 } { ptr @.str.889, i64 5, i64 0 }, ptr %a163 %t164 = call i32 @finch_str_eq(ptr %a162, ptr %a163) %t165 = icmp ne i32 %t164, 0 br i1 %t165, label %then1513, label %endif1515 then1513: %t166 = load ptr, ptr %a1 %t167 = call %S.ast.Node @finch.parser.node(ptr %t166, { ptr, i64, i64 } { ptr @.str.890, i64 5, i64 0 }) store %S.ast.Node %t167, ptr %a168 %t169 = load ptr, ptr %a1 %t170 = call %S.lexer.Token @finch.parser.next(ptr %t169) %t171 = load ptr, ptr %a1 %t172 = call i1 @finch.parser.at(ptr %t171, { ptr, i64, i64 } { ptr @.str.891, i64 5, i64 0 }) br i1 %t172, label %then1516, label %endif1518 then1516: %t173 = load ptr, ptr %a1 %t174 = load ptr, ptr %a1 %t175 = call %S.lexer.Token @finch.parser.cur(ptr %t174) call void @finch.parser.fail(ptr %t173, %S.lexer.Token %t175, { ptr, i64, i64 } { ptr @.str.892, i64 33, i64 0 }) br label %endif1518 endif1518: %t176 = getelementptr inbounds %S.ast.Node, ptr %a168, i32 0, i32 9 %t177 = getelementptr inbounds { ptr, i64, i64 }, ptr %t176, i32 0, i32 1 %t178 = load ptr, ptr %a1 %t179 = call %S.ast.Node @finch.parser.parseStatement(ptr %t178) %t180 = load i64, ptr %t177 %t181 = add i64 %t180, 1 call void @finch_arr_reserve(ptr %t176, i64 %t181, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t182 = load ptr, ptr %t176 %t183 = getelementptr inbounds %S.ast.Node, ptr %t182, i64 %t180 store %S.ast.Node %t179, ptr %t183 store i64 %t181, ptr %t177 %t184 = load %S.ast.Node, ptr %a168 ret %S.ast.Node %t184 endif1515: %t185 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t185, ptr %a186 store { ptr, i64, i64 } { ptr @.str.893, i64 2, i64 0 }, ptr %a187 %t188 = call i32 @finch_str_eq(ptr %a186, ptr %a187) %t189 = icmp ne i32 %t188, 0 br label %logic.from1519 logic.from1519: br i1 %t189, label %logic.end1521, label %logic.rhs1520 logic.rhs1520: %t190 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t190, ptr %a191 store { ptr, i64, i64 } { ptr @.str.894, i64 6, i64 0 }, ptr %a192 %t193 = call i32 @finch_str_eq(ptr %a191, ptr %a192) %t194 = icmp ne i32 %t193, 0 br label %logic.rend1522 logic.rend1522: br label %logic.end1521 logic.end1521: %t195 = phi i1 [ true, %logic.from1519 ], [ %t194, %logic.rend1522 ] br label %logic.from1523 logic.from1523: br i1 %t195, label %logic.end1525, label %logic.rhs1524 logic.rhs1524: %t196 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t196, ptr %a197 store { ptr, i64, i64 } { ptr @.str.895, i64 6, i64 0 }, ptr %a198 %t199 = call i32 @finch_str_eq(ptr %a197, ptr %a198) %t200 = icmp ne i32 %t199, 0 br label %logic.rend1526 logic.rend1526: br label %logic.end1525 logic.end1525: %t201 = phi i1 [ true, %logic.from1523 ], [ %t200, %logic.rend1526 ] br label %logic.from1527 logic.from1527: br i1 %t201, label %logic.end1529, label %logic.rhs1528 logic.rhs1528: %t202 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t202, ptr %a203 store { ptr, i64, i64 } { ptr @.str.896, i64 4, i64 0 }, ptr %a204 %t205 = call i32 @finch_str_eq(ptr %a203, ptr %a204) %t206 = icmp ne i32 %t205, 0 br label %logic.rend1530 logic.rend1530: br label %logic.end1529 logic.end1529: %t207 = phi i1 [ true, %logic.from1527 ], [ %t206, %logic.rend1530 ] br i1 %t207, label %then1531, label %endif1533 then1531: %t208 = load ptr, ptr %a1 %t209 = load ptr, ptr %a1 %t210 = call %S.lexer.Token @finch.parser.cur(ptr %t209) %t211 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } { ptr @.str.897, i64 1, i64 0 }, ptr %a213 store { ptr, i64, i64 } %t211, ptr %a214 call void @finch_str_concat(ptr %a212, ptr %a213, ptr %a214) %t215 = load { ptr, i64, i64 }, ptr %a212 store { ptr, i64, i64 } %t215, ptr %a217 store { ptr, i64, i64 } { ptr @.str.898, i64 48, i64 0 }, ptr %a218 call void @finch_str_concat(ptr %a216, ptr %a217, ptr %a218) %t219 = load { ptr, i64, i64 }, ptr %a216 call void @finch.parser.fail(ptr %t208, %S.lexer.Token %t210, { ptr, i64, i64 } %t219) br label %endif1533 endif1533: %t220 = load ptr, ptr %a1 %t221 = call i1 @finch.parser.atDeclaration(ptr %t220) br i1 %t221, label %then1534, label %endif1536 then1534: %t222 = load ptr, ptr %a1 %t223 = call %S.ast.Node @finch.parser.node(ptr %t222, { ptr, i64, i64 } { ptr @.str.899, i64 4, i64 0 }) store %S.ast.Node %t223, ptr %a224 %t225 = getelementptr inbounds %S.ast.Node, ptr %a224, i32 0, i32 6 store i1 true, ptr %t225 %t226 = load ptr, ptr %a1 %t227 = call %S.ast.Type @finch.parser.parseType(ptr %t226) %t228 = getelementptr inbounds %S.ast.Node, ptr %a224, i32 0, i32 5 store %S.ast.Type %t227, ptr %t228 %t229 = load ptr, ptr %a1 %t230 = call %S.lexer.Token @finch.parser.expect(ptr %t229, { ptr, i64, i64 } { ptr @.str.900, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.901, i64 15, i64 0 }) %t231 = extractvalue %S.lexer.Token %t230, 1 store { ptr, i64, i64 } %t231, ptr %a232 call void @finch_str_copy(ptr %a233, ptr %a232) %t234 = load { ptr, i64, i64 }, ptr %a233 %t235 = getelementptr inbounds %S.ast.Node, ptr %a224, i32 0, i32 1 store { ptr, i64, i64 } %t234, ptr %t235 %t236 = load ptr, ptr %a1 %t237 = call i1 @finch.parser.accept(ptr %t236, { ptr, i64, i64 } { ptr @.str.902, i64 1, i64 0 }) br i1 %t237, label %then1537, label %endif1539 then1537: %t238 = getelementptr inbounds %S.ast.Node, ptr %a224, i32 0, i32 9 %t239 = getelementptr inbounds { ptr, i64, i64 }, ptr %t238, i32 0, i32 1 %t240 = load ptr, ptr %a1 %t241 = call %S.ast.Node @finch.parser.parseExpr(ptr %t240) %t242 = load i64, ptr %t239 %t243 = add i64 %t242, 1 call void @finch_arr_reserve(ptr %t238, i64 %t243, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t244 = load ptr, ptr %t238 %t245 = getelementptr inbounds %S.ast.Node, ptr %t244, i64 %t242 store %S.ast.Node %t241, ptr %t245 store i64 %t243, ptr %t239 br label %endif1539 endif1539: %t246 = load %S.ast.Node, ptr %a224 ret %S.ast.Node %t246 endif1536: %t247 = load ptr, ptr %a1 %t248 = call i1 @finch.parser.at(ptr %t247, { ptr, i64, i64 } { ptr @.str.903, i64 5, i64 0 }) br label %logic.from1540 logic.from1540: br i1 %t248, label %logic.rhs1541, label %logic.end1542 logic.rhs1541: %t249 = load ptr, ptr %a1 %t250 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t249, i64 1) store { ptr, i64, i64 } %t250, ptr %a251 store { ptr, i64, i64 } { ptr @.str.904, i64 2, i64 0 }, ptr %a252 %t253 = call i32 @finch_str_eq(ptr %a251, ptr %a252) %t254 = icmp ne i32 %t253, 0 br label %logic.rend1543 logic.rend1543: br label %logic.end1542 logic.end1542: %t255 = phi i1 [ false, %logic.from1540 ], [ %t254, %logic.rend1543 ] br i1 %t255, label %then1544, label %endif1546 then1544: %t256 = load ptr, ptr %a1 %t257 = call %S.ast.Node @finch.parser.node(ptr %t256, { ptr, i64, i64 } { ptr @.str.905, i64 4, i64 0 }) store %S.ast.Node %t257, ptr %a258 %t259 = load ptr, ptr %a1 %t260 = call %S.lexer.Token @finch.parser.next(ptr %t259) %t261 = extractvalue %S.lexer.Token %t260, 1 store { ptr, i64, i64 } %t261, ptr %a262 call void @finch_str_copy(ptr %a263, ptr %a262) %t264 = load { ptr, i64, i64 }, ptr %a263 %t265 = getelementptr inbounds %S.ast.Node, ptr %a258, i32 0, i32 1 store { ptr, i64, i64 } %t264, ptr %t265 %t266 = load ptr, ptr %a1 %t267 = call %S.lexer.Token @finch.parser.next(ptr %t266) %t268 = getelementptr inbounds %S.ast.Node, ptr %a258, i32 0, i32 9 %t269 = getelementptr inbounds { ptr, i64, i64 }, ptr %t268, i32 0, i32 1 %t270 = load ptr, ptr %a1 %t271 = call %S.ast.Node @finch.parser.parseExpr(ptr %t270) %t272 = load i64, ptr %t269 %t273 = add i64 %t272, 1 call void @finch_arr_reserve(ptr %t268, i64 %t273, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t274 = load ptr, ptr %t268 %t275 = getelementptr inbounds %S.ast.Node, ptr %t274, i64 %t272 store %S.ast.Node %t271, ptr %t275 store i64 %t273, ptr %t269 %t276 = load %S.ast.Node, ptr %a258 ret %S.ast.Node %t276 endif1546: %t277 = load ptr, ptr %a1 %t278 = call %S.lexer.Token @finch.parser.cur(ptr %t277) store %S.lexer.Token %t278, ptr %a279 %t280 = load ptr, ptr %a1 %t281 = call %S.ast.Node @finch.parser.parseExpr(ptr %t280) store %S.ast.Node %t281, ptr %a282 %t283 = mul i64 6, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t284 = call ptr @finch_alloc(i64 %t283) %t285 = getelementptr inbounds { ptr, i64, i64 }, ptr %t284, i64 0 store { ptr, i64, i64 } { ptr @.str.906, i64 1, i64 0 }, ptr %t285 %t286 = getelementptr inbounds { ptr, i64, i64 }, ptr %t284, i64 1 store { ptr, i64, i64 } { ptr @.str.907, i64 2, i64 0 }, ptr %t286 %t287 = getelementptr inbounds { ptr, i64, i64 }, ptr %t284, i64 2 store { ptr, i64, i64 } { ptr @.str.908, i64 2, i64 0 }, ptr %t287 %t288 = getelementptr inbounds { ptr, i64, i64 }, ptr %t284, i64 3 store { ptr, i64, i64 } { ptr @.str.909, i64 2, i64 0 }, ptr %t288 %t289 = getelementptr inbounds { ptr, i64, i64 }, ptr %t284, i64 4 store { ptr, i64, i64 } { ptr @.str.910, i64 2, i64 0 }, ptr %t289 %t290 = getelementptr inbounds { ptr, i64, i64 }, ptr %t284, i64 5 store { ptr, i64, i64 } { ptr @.str.911, i64 2, i64 0 }, ptr %t290 %t291 = insertvalue { ptr, i64, i64 } undef, ptr %t284, 0 %t292 = insertvalue { ptr, i64, i64 } %t291, i64 6, 1 %t293 = insertvalue { ptr, i64, i64 } %t292, i64 6, 2 store { ptr, i64, i64 } %t293, ptr %a294 %t295 = getelementptr inbounds { ptr, i64, i64 }, ptr %a294, i32 0, i32 1 %t296 = load ptr, ptr %a1 %t297 = call { ptr, i64, i64 } @finch.parser.curKind(ptr %t296) store i64 -1, ptr %a298 %t299 = load i64, ptr %t295 %t300 = load ptr, ptr %a294 store i64 0, ptr %a301 br label %find.cond1547 find.cond1547: %t302 = load i64, ptr %a301 %t303 = icmp slt i64 %t302, %t299 br i1 %t303, label %find.body1548, label %find.end1551 find.body1548: %t304 = getelementptr inbounds { ptr, i64, i64 }, ptr %t300, i64 %t302 %t305 = load { ptr, i64, i64 }, ptr %t304 store { ptr, i64, i64 } %t305, ptr %a306 store { ptr, i64, i64 } %t297, ptr %a307 %t308 = call i32 @finch_str_eq(ptr %a306, ptr %a307) %t309 = icmp ne i32 %t308, 0 br i1 %t309, label %find.hit1549, label %find.next1550 find.hit1549: store i64 %t302, ptr %a298 br label %find.end1551 find.next1550: %t310 = add i64 %t302, 1 store i64 %t310, ptr %a301 br label %find.cond1547 find.end1551: %t311 = load i64, ptr %a298 %t312 = icmp sge i64 %t311, 0 br label %logic.from1552 logic.from1552: br i1 %t312, label %logic.rhs1553, label %logic.end1554 logic.rhs1553: %t313 = load ptr, ptr %a1 %t314 = call i1 @finch.parser.sameLine(ptr %t313) br label %logic.rend1555 logic.rend1555: br label %logic.end1554 logic.end1554: %t315 = phi i1 [ false, %logic.from1552 ], [ %t314, %logic.rend1555 ] br i1 %t315, label %then1556, label %endif1558 then1556: %t316 = getelementptr inbounds %S.ast.Node, ptr %a282, i32 0, i32 0 %t317 = load { ptr, i64, i64 }, ptr %t316 store { ptr, i64, i64 } %t317, ptr %a318 store { ptr, i64, i64 } { ptr @.str.912, i64 3, i64 0 }, ptr %a319 %t320 = call i32 @finch_str_eq(ptr %a318, ptr %a319) %t321 = icmp eq i32 %t320, 0 br label %logic.from1559 logic.from1559: br i1 %t321, label %logic.rhs1560, label %logic.end1561 logic.rhs1560: %t322 = getelementptr inbounds %S.ast.Node, ptr %a282, i32 0, i32 0 %t323 = load { ptr, i64, i64 }, ptr %t322 store { ptr, i64, i64 } %t323, ptr %a324 store { ptr, i64, i64 } { ptr @.str.913, i64 6, i64 0 }, ptr %a325 %t326 = call i32 @finch_str_eq(ptr %a324, ptr %a325) %t327 = icmp eq i32 %t326, 0 br label %logic.rend1562 logic.rend1562: br label %logic.end1561 logic.end1561: %t328 = phi i1 [ false, %logic.from1559 ], [ %t327, %logic.rend1562 ] br label %logic.from1563 logic.from1563: br i1 %t328, label %logic.rhs1564, label %logic.end1565 logic.rhs1564: %t329 = getelementptr inbounds %S.ast.Node, ptr %a282, i32 0, i32 0 %t330 = load { ptr, i64, i64 }, ptr %t329 store { ptr, i64, i64 } %t330, ptr %a331 store { ptr, i64, i64 } { ptr @.str.914, i64 5, i64 0 }, ptr %a332 %t333 = call i32 @finch_str_eq(ptr %a331, ptr %a332) %t334 = icmp eq i32 %t333, 0 br label %logic.rend1566 logic.rend1566: br label %logic.end1565 logic.end1565: %t335 = phi i1 [ false, %logic.from1563 ], [ %t334, %logic.rend1566 ] br i1 %t335, label %then1567, label %endif1569 then1567: %t336 = load ptr, ptr %a1 %t337 = load %S.lexer.Token, ptr %a279 call void @finch.parser.fail(ptr %t336, %S.lexer.Token %t337, { ptr, i64, i64 } { ptr @.str.915, i64 66, i64 0 }) br label %endif1569 endif1569: %t338 = insertvalue %S.ast.Node zeroinitializer, { ptr, i64, i64 } { ptr @.str.916, i64 6, i64 0 }, 0 %t339 = getelementptr inbounds %S.lexer.Token, ptr %a279, i32 0, i32 2 %t340 = load i64, ptr %t339 %t341 = insertvalue %S.ast.Node %t338, i64 %t340, 11 %t342 = getelementptr inbounds %S.lexer.Token, ptr %a279, i32 0, i32 3 %t343 = load i64, ptr %t342 %t344 = insertvalue %S.ast.Node %t341, i64 %t343, 12 %t345 = load ptr, ptr %a1 %t346 = icmp eq ptr %t345, null br i1 %t346, label %panic1570, label %ok1571 panic1570: call void @finch_panic(ptr @.str.917, i64 536, ptr @.str.918) unreachable ok1571: %t347 = getelementptr inbounds %S.parser.Parser, ptr %t345, i32 0, i32 3 %t348 = load i64, ptr %t347 %t349 = insertvalue %S.ast.Node %t344, i64 %t348, 13 store %S.ast.Node %t349, ptr %a350 %t351 = load ptr, ptr %a1 %t352 = call %S.lexer.Token @finch.parser.next(ptr %t351) %t353 = extractvalue %S.lexer.Token %t352, 0 store { ptr, i64, i64 } %t353, ptr %a354 call void @finch_str_copy(ptr %a355, ptr %a354) %t356 = load { ptr, i64, i64 }, ptr %a355 %t357 = getelementptr inbounds %S.ast.Node, ptr %a350, i32 0, i32 1 store { ptr, i64, i64 } %t356, ptr %t357 %t358 = getelementptr inbounds %S.ast.Node, ptr %a350, i32 0, i32 9 %t359 = getelementptr inbounds { ptr, i64, i64 }, ptr %t358, i32 0, i32 1 %t360 = load %S.ast.Node, ptr %a282 store %S.ast.Node %t360, ptr %a361 call void @finch.copy.S_ast_Node(ptr %a362, ptr %a361) %t363 = load %S.ast.Node, ptr %a362 %t364 = load i64, ptr %t359 %t365 = add i64 %t364, 1 call void @finch_arr_reserve(ptr %t358, i64 %t365, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t366 = load ptr, ptr %t358 %t367 = getelementptr inbounds %S.ast.Node, ptr %t366, i64 %t364 store %S.ast.Node %t363, ptr %t367 store i64 %t365, ptr %t359 %t368 = getelementptr inbounds %S.ast.Node, ptr %a350, i32 0, i32 9 %t369 = getelementptr inbounds { ptr, i64, i64 }, ptr %t368, i32 0, i32 1 %t370 = load ptr, ptr %a1 %t371 = call %S.ast.Node @finch.parser.parseExpr(ptr %t370) %t372 = load i64, ptr %t369 %t373 = add i64 %t372, 1 call void @finch_arr_reserve(ptr %t368, i64 %t373, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t374 = load ptr, ptr %t368 %t375 = getelementptr inbounds %S.ast.Node, ptr %t374, i64 %t372 store %S.ast.Node %t371, ptr %t375 store i64 %t373, ptr %t369 %t376 = load %S.ast.Node, ptr %a350 ret %S.ast.Node %t376 endif1558: %t377 = getelementptr inbounds %S.ast.Node, ptr %a282, i32 0, i32 0 %t378 = load { ptr, i64, i64 }, ptr %t377 store { ptr, i64, i64 } %t378, ptr %a379 store { ptr, i64, i64 } { ptr @.str.919, i64 4, i64 0 }, ptr %a380 %t381 = call i32 @finch_str_eq(ptr %a379, ptr %a380) %t382 = icmp eq i32 %t381, 0 br label %logic.from1572 logic.from1572: br i1 %t382, label %logic.rhs1573, label %logic.end1574 logic.rhs1573: %t383 = getelementptr inbounds %S.ast.Node, ptr %a282, i32 0, i32 0 %t384 = load { ptr, i64, i64 }, ptr %t383 store { ptr, i64, i64 } %t384, ptr %a385 store { ptr, i64, i64 } { ptr @.str.920, i64 6, i64 0 }, ptr %a386 %t387 = call i32 @finch_str_eq(ptr %a385, ptr %a386) %t388 = icmp eq i32 %t387, 0 br label %logic.rend1575 logic.rend1575: br label %logic.end1574 logic.end1574: %t389 = phi i1 [ false, %logic.from1572 ], [ %t388, %logic.rend1575 ] br label %logic.from1576 logic.from1576: br i1 %t389, label %logic.rhs1577, label %logic.end1578 logic.rhs1577: %t390 = getelementptr inbounds %S.ast.Node, ptr %a282, i32 0, i32 0 %t391 = load { ptr, i64, i64 }, ptr %t390 store { ptr, i64, i64 } %t391, ptr %a392 store { ptr, i64, i64 } { ptr @.str.921, i64 3, i64 0 }, ptr %a393 %t394 = call i32 @finch_str_eq(ptr %a392, ptr %a393) %t395 = icmp eq i32 %t394, 0 br label %logic.rend1579 logic.rend1579: br label %logic.end1578 logic.end1578: %t396 = phi i1 [ false, %logic.from1576 ], [ %t395, %logic.rend1579 ] br label %logic.from1580 logic.from1580: br i1 %t396, label %logic.rhs1581, label %logic.end1582 logic.rhs1581: %t397 = getelementptr inbounds %S.ast.Node, ptr %a282, i32 0, i32 0 %t398 = load { ptr, i64, i64 }, ptr %t397 store { ptr, i64, i64 } %t398, ptr %a399 store { ptr, i64, i64 } { ptr @.str.922, i64 2, i64 0 }, ptr %a400 %t401 = call i32 @finch_str_eq(ptr %a399, ptr %a400) %t402 = icmp eq i32 %t401, 0 br label %logic.rend1583 logic.rend1583: br label %logic.end1582 logic.end1582: %t403 = phi i1 [ false, %logic.from1580 ], [ %t402, %logic.rend1583 ] br i1 %t403, label %then1584, label %endif1586 then1584: %t404 = load ptr, ptr %a1 %t405 = load %S.lexer.Token, ptr %a279 call void @finch.parser.fail(ptr %t404, %S.lexer.Token %t405, { ptr, i64, i64 } { ptr @.str.923, i64 37, i64 0 }) br label %endif1586 endif1586: %t406 = insertvalue %S.ast.Node zeroinitializer, { ptr, i64, i64 } { ptr @.str.924, i64 4, i64 0 }, 0 %t407 = getelementptr inbounds %S.lexer.Token, ptr %a279, i32 0, i32 2 %t408 = load i64, ptr %t407 %t409 = insertvalue %S.ast.Node %t406, i64 %t408, 11 %t410 = getelementptr inbounds %S.lexer.Token, ptr %a279, i32 0, i32 3 %t411 = load i64, ptr %t410 %t412 = insertvalue %S.ast.Node %t409, i64 %t411, 12 %t413 = load ptr, ptr %a1 %t414 = icmp eq ptr %t413, null br i1 %t414, label %panic1587, label %ok1588 panic1587: call void @finch_panic(ptr @.str.925, i64 545, ptr @.str.926) unreachable ok1588: %t415 = getelementptr inbounds %S.parser.Parser, ptr %t413, i32 0, i32 3 %t416 = load i64, ptr %t415 %t417 = insertvalue %S.ast.Node %t412, i64 %t416, 13 store %S.ast.Node %t417, ptr %a418 %t419 = getelementptr inbounds %S.ast.Node, ptr %a418, i32 0, i32 9 %t420 = getelementptr inbounds { ptr, i64, i64 }, ptr %t419, i32 0, i32 1 %t421 = load %S.ast.Node, ptr %a282 store %S.ast.Node %t421, ptr %a422 call void @finch.copy.S_ast_Node(ptr %a423, ptr %a422) %t424 = load %S.ast.Node, ptr %a423 %t425 = load i64, ptr %t420 %t426 = add i64 %t425, 1 call void @finch_arr_reserve(ptr %t419, i64 %t426, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t427 = load ptr, ptr %t419 %t428 = getelementptr inbounds %S.ast.Node, ptr %t427, i64 %t425 store %S.ast.Node %t424, ptr %t428 store i64 %t426, ptr %t420 %t429 = load %S.ast.Node, ptr %a418 store %S.ast.Node %t429, ptr %a430 call void @finch.copy.S_ast_Node(ptr %a431, ptr %a430) %t432 = load %S.ast.Node, ptr %a431 ret %S.ast.Node %t432 } define internal %S.ast.Node @finch.parser.parseIf(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a4 = alloca %S.ast.Node, align 16 %a44 = alloca %S.ast.Node, align 16 %a45 = alloca %S.ast.Node, align 16 store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = call %S.ast.Node @finch.parser.node(ptr %t2, { ptr, i64, i64 } { ptr @.str.927, i64 2, i64 0 }) store %S.ast.Node %t3, ptr %a4 %t5 = load ptr, ptr %a1 %t6 = call %S.lexer.Token @finch.parser.expect(ptr %t5, { ptr, i64, i64 } { ptr @.str.928, i64 2, i64 0 }, { ptr, i64, i64 } { ptr @.str.929, i64 4, i64 0 }) %t7 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t7, i32 0, i32 1 %t9 = load ptr, ptr %a1 %t10 = call %S.ast.Node @finch.parser.parseExpr(ptr %t9) %t11 = load i64, ptr %t8 %t12 = add i64 %t11, 1 call void @finch_arr_reserve(ptr %t7, i64 %t12, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t13 = load ptr, ptr %t7 %t14 = getelementptr inbounds %S.ast.Node, ptr %t13, i64 %t11 store %S.ast.Node %t10, ptr %t14 store i64 %t12, ptr %t8 %t15 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t15, i32 0, i32 1 %t17 = load ptr, ptr %a1 %t18 = call %S.ast.Node @finch.parser.parseBlock(ptr %t17) %t19 = load i64, ptr %t16 %t20 = add i64 %t19, 1 call void @finch_arr_reserve(ptr %t15, i64 %t20, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t21 = load ptr, ptr %t15 %t22 = getelementptr inbounds %S.ast.Node, ptr %t21, i64 %t19 store %S.ast.Node %t18, ptr %t22 store i64 %t20, ptr %t16 %t23 = load ptr, ptr %a1 %t24 = call i1 @finch.parser.accept(ptr %t23, { ptr, i64, i64 } { ptr @.str.930, i64 4, i64 0 }) br i1 %t24, label %then1589, label %endif1591 then1589: %t25 = load ptr, ptr %a1 %t26 = call i1 @finch.parser.at(ptr %t25, { ptr, i64, i64 } { ptr @.str.931, i64 2, i64 0 }) br i1 %t26, label %then1592, label %else1593 then1592: %t27 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 %t28 = getelementptr inbounds { ptr, i64, i64 }, ptr %t27, i32 0, i32 1 %t29 = load ptr, ptr %a1 %t30 = call %S.ast.Node @finch.parser.parseIf(ptr %t29) %t31 = load i64, ptr %t28 %t32 = add i64 %t31, 1 call void @finch_arr_reserve(ptr %t27, i64 %t32, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t33 = load ptr, ptr %t27 %t34 = getelementptr inbounds %S.ast.Node, ptr %t33, i64 %t31 store %S.ast.Node %t30, ptr %t34 store i64 %t32, ptr %t28 br label %endif1594 else1593: %t35 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 %t36 = getelementptr inbounds { ptr, i64, i64 }, ptr %t35, i32 0, i32 1 %t37 = load ptr, ptr %a1 %t38 = call %S.ast.Node @finch.parser.parseBlock(ptr %t37) %t39 = load i64, ptr %t36 %t40 = add i64 %t39, 1 call void @finch_arr_reserve(ptr %t35, i64 %t40, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t41 = load ptr, ptr %t35 %t42 = getelementptr inbounds %S.ast.Node, ptr %t41, i64 %t39 store %S.ast.Node %t38, ptr %t42 store i64 %t40, ptr %t36 br label %endif1594 endif1594: br label %endif1591 endif1591: %t43 = load %S.ast.Node, ptr %a4 store %S.ast.Node %t43, ptr %a44 call void @finch.copy.S_ast_Node(ptr %a45, ptr %a44) %t46 = load %S.ast.Node, ptr %a45 ret %S.ast.Node %t46 } define internal i64 @finch.parser.binaryLevel({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca { ptr, i64, i64 }, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca { ptr, i64, i64 }, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t2, ptr %a3 store { ptr, i64, i64 } { ptr @.str.932, i64 2, i64 0 }, ptr %a4 %t5 = call i32 @finch_str_eq(ptr %a3, ptr %a4) %t6 = icmp ne i32 %t5, 0 br i1 %t6, label %then1595, label %endif1597 then1595: ret i64 1 endif1597: %t7 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t7, ptr %a8 store { ptr, i64, i64 } { ptr @.str.933, i64 2, i64 0 }, ptr %a9 %t10 = call i32 @finch_str_eq(ptr %a8, ptr %a9) %t11 = icmp ne i32 %t10, 0 br i1 %t11, label %then1598, label %endif1600 then1598: ret i64 2 endif1600: %t12 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t12, ptr %a13 store { ptr, i64, i64 } { ptr @.str.934, i64 2, i64 0 }, ptr %a14 %t15 = call i32 @finch_str_eq(ptr %a13, ptr %a14) %t16 = icmp ne i32 %t15, 0 br label %logic.from1601 logic.from1601: br i1 %t16, label %logic.end1603, label %logic.rhs1602 logic.rhs1602: %t17 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t17, ptr %a18 store { ptr, i64, i64 } { ptr @.str.935, i64 2, i64 0 }, ptr %a19 %t20 = call i32 @finch_str_eq(ptr %a18, ptr %a19) %t21 = icmp ne i32 %t20, 0 br label %logic.rend1604 logic.rend1604: br label %logic.end1603 logic.end1603: %t22 = phi i1 [ true, %logic.from1601 ], [ %t21, %logic.rend1604 ] br label %logic.from1605 logic.from1605: br i1 %t22, label %logic.end1607, label %logic.rhs1606 logic.rhs1606: %t23 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t23, ptr %a24 store { ptr, i64, i64 } { ptr @.str.936, i64 1, i64 0 }, ptr %a25 %t26 = call i32 @finch_str_eq(ptr %a24, ptr %a25) %t27 = icmp ne i32 %t26, 0 br label %logic.rend1608 logic.rend1608: br label %logic.end1607 logic.end1607: %t28 = phi i1 [ true, %logic.from1605 ], [ %t27, %logic.rend1608 ] br label %logic.from1609 logic.from1609: br i1 %t28, label %logic.end1611, label %logic.rhs1610 logic.rhs1610: %t29 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t29, ptr %a30 store { ptr, i64, i64 } { ptr @.str.937, i64 2, i64 0 }, ptr %a31 %t32 = call i32 @finch_str_eq(ptr %a30, ptr %a31) %t33 = icmp ne i32 %t32, 0 br label %logic.rend1612 logic.rend1612: br label %logic.end1611 logic.end1611: %t34 = phi i1 [ true, %logic.from1609 ], [ %t33, %logic.rend1612 ] br label %logic.from1613 logic.from1613: br i1 %t34, label %logic.end1615, label %logic.rhs1614 logic.rhs1614: %t35 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t35, ptr %a36 store { ptr, i64, i64 } { ptr @.str.938, i64 1, i64 0 }, ptr %a37 %t38 = call i32 @finch_str_eq(ptr %a36, ptr %a37) %t39 = icmp ne i32 %t38, 0 br label %logic.rend1616 logic.rend1616: br label %logic.end1615 logic.end1615: %t40 = phi i1 [ true, %logic.from1613 ], [ %t39, %logic.rend1616 ] br label %logic.from1617 logic.from1617: br i1 %t40, label %logic.end1619, label %logic.rhs1618 logic.rhs1618: %t41 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t41, ptr %a42 store { ptr, i64, i64 } { ptr @.str.939, i64 2, i64 0 }, ptr %a43 %t44 = call i32 @finch_str_eq(ptr %a42, ptr %a43) %t45 = icmp ne i32 %t44, 0 br label %logic.rend1620 logic.rend1620: br label %logic.end1619 logic.end1619: %t46 = phi i1 [ true, %logic.from1617 ], [ %t45, %logic.rend1620 ] br i1 %t46, label %then1621, label %endif1623 then1621: ret i64 3 endif1623: %t47 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t47, ptr %a48 store { ptr, i64, i64 } { ptr @.str.940, i64 1, i64 0 }, ptr %a49 %t50 = call i32 @finch_str_eq(ptr %a48, ptr %a49) %t51 = icmp ne i32 %t50, 0 br label %logic.from1624 logic.from1624: br i1 %t51, label %logic.end1626, label %logic.rhs1625 logic.rhs1625: %t52 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t52, ptr %a53 store { ptr, i64, i64 } { ptr @.str.941, i64 1, i64 0 }, ptr %a54 %t55 = call i32 @finch_str_eq(ptr %a53, ptr %a54) %t56 = icmp ne i32 %t55, 0 br label %logic.rend1627 logic.rend1627: br label %logic.end1626 logic.end1626: %t57 = phi i1 [ true, %logic.from1624 ], [ %t56, %logic.rend1627 ] br label %logic.from1628 logic.from1628: br i1 %t57, label %logic.end1630, label %logic.rhs1629 logic.rhs1629: %t58 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t58, ptr %a59 store { ptr, i64, i64 } { ptr @.str.942, i64 1, i64 0 }, ptr %a60 %t61 = call i32 @finch_str_eq(ptr %a59, ptr %a60) %t62 = icmp ne i32 %t61, 0 br label %logic.rend1631 logic.rend1631: br label %logic.end1630 logic.end1630: %t63 = phi i1 [ true, %logic.from1628 ], [ %t62, %logic.rend1631 ] br label %logic.from1632 logic.from1632: br i1 %t63, label %logic.end1634, label %logic.rhs1633 logic.rhs1633: %t64 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t64, ptr %a65 store { ptr, i64, i64 } { ptr @.str.943, i64 1, i64 0 }, ptr %a66 %t67 = call i32 @finch_str_eq(ptr %a65, ptr %a66) %t68 = icmp ne i32 %t67, 0 br label %logic.rend1635 logic.rend1635: br label %logic.end1634 logic.end1634: %t69 = phi i1 [ true, %logic.from1632 ], [ %t68, %logic.rend1635 ] br i1 %t69, label %then1636, label %endif1638 then1636: ret i64 4 endif1638: %t70 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t70, ptr %a71 store { ptr, i64, i64 } { ptr @.str.944, i64 1, i64 0 }, ptr %a72 %t73 = call i32 @finch_str_eq(ptr %a71, ptr %a72) %t74 = icmp ne i32 %t73, 0 br label %logic.from1639 logic.from1639: br i1 %t74, label %logic.end1641, label %logic.rhs1640 logic.rhs1640: %t75 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t75, ptr %a76 store { ptr, i64, i64 } { ptr @.str.945, i64 1, i64 0 }, ptr %a77 %t78 = call i32 @finch_str_eq(ptr %a76, ptr %a77) %t79 = icmp ne i32 %t78, 0 br label %logic.rend1642 logic.rend1642: br label %logic.end1641 logic.end1641: %t80 = phi i1 [ true, %logic.from1639 ], [ %t79, %logic.rend1642 ] br label %logic.from1643 logic.from1643: br i1 %t80, label %logic.end1645, label %logic.rhs1644 logic.rhs1644: %t81 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t81, ptr %a82 store { ptr, i64, i64 } { ptr @.str.946, i64 1, i64 0 }, ptr %a83 %t84 = call i32 @finch_str_eq(ptr %a82, ptr %a83) %t85 = icmp ne i32 %t84, 0 br label %logic.rend1646 logic.rend1646: br label %logic.end1645 logic.end1645: %t86 = phi i1 [ true, %logic.from1643 ], [ %t85, %logic.rend1646 ] br label %logic.from1647 logic.from1647: br i1 %t86, label %logic.end1649, label %logic.rhs1648 logic.rhs1648: %t87 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t87, ptr %a88 store { ptr, i64, i64 } { ptr @.str.947, i64 2, i64 0 }, ptr %a89 %t90 = call i32 @finch_str_eq(ptr %a88, ptr %a89) %t91 = icmp ne i32 %t90, 0 br label %logic.rend1650 logic.rend1650: br label %logic.end1649 logic.end1649: %t92 = phi i1 [ true, %logic.from1647 ], [ %t91, %logic.rend1650 ] br label %logic.from1651 logic.from1651: br i1 %t92, label %logic.end1653, label %logic.rhs1652 logic.rhs1652: %t93 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t93, ptr %a94 store { ptr, i64, i64 } { ptr @.str.948, i64 2, i64 0 }, ptr %a95 %t96 = call i32 @finch_str_eq(ptr %a94, ptr %a95) %t97 = icmp ne i32 %t96, 0 br label %logic.rend1654 logic.rend1654: br label %logic.end1653 logic.end1653: %t98 = phi i1 [ true, %logic.from1651 ], [ %t97, %logic.rend1654 ] br label %logic.from1655 logic.from1655: br i1 %t98, label %logic.end1657, label %logic.rhs1656 logic.rhs1656: %t99 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t99, ptr %a100 store { ptr, i64, i64 } { ptr @.str.949, i64 1, i64 0 }, ptr %a101 %t102 = call i32 @finch_str_eq(ptr %a100, ptr %a101) %t103 = icmp ne i32 %t102, 0 br label %logic.rend1658 logic.rend1658: br label %logic.end1657 logic.end1657: %t104 = phi i1 [ true, %logic.from1655 ], [ %t103, %logic.rend1658 ] br i1 %t104, label %then1659, label %endif1661 then1659: ret i64 5 endif1661: ret i64 0 } define internal %S.ast.Node @finch.parser.parseExpr(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a4 = alloca %S.ast.Node, align 16 %a13 = alloca %S.ast.Node, align 16 %a14 = alloca %S.ast.Node, align 16 %a18 = alloca %S.ast.Node, align 16 %a24 = alloca %S.ast.Node, align 16 %a25 = alloca %S.ast.Node, align 16 %a51 = alloca %S.ast.Node, align 16 %a52 = alloca %S.ast.Node, align 16 store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = call %S.ast.Node @finch.parser.parseBinary(ptr %t2, i64 1) store %S.ast.Node %t3, ptr %a4 %t5 = load ptr, ptr %a1 %t6 = call i1 @finch.parser.sameLine(ptr %t5) %t7 = xor i1 %t6, true br label %logic.from1662 logic.from1662: br i1 %t7, label %logic.end1664, label %logic.rhs1663 logic.rhs1663: %t8 = load ptr, ptr %a1 %t9 = call i1 @finch.parser.at(ptr %t8, { ptr, i64, i64 } { ptr @.str.950, i64 2, i64 0 }) %t10 = xor i1 %t9, true br label %logic.rend1665 logic.rend1665: br label %logic.end1664 logic.end1664: %t11 = phi i1 [ true, %logic.from1662 ], [ %t10, %logic.rend1665 ] br i1 %t11, label %then1666, label %endif1668 then1666: %t12 = load %S.ast.Node, ptr %a4 store %S.ast.Node %t12, ptr %a13 call void @finch.copy.S_ast_Node(ptr %a14, ptr %a13) %t15 = load %S.ast.Node, ptr %a14 ret %S.ast.Node %t15 endif1668: %t16 = load ptr, ptr %a1 %t17 = call %S.ast.Node @finch.parser.node(ptr %t16, { ptr, i64, i64 } { ptr @.str.951, i64 2, i64 0 }) store %S.ast.Node %t17, ptr %a18 %t19 = load ptr, ptr %a1 %t20 = call %S.lexer.Token @finch.parser.next(ptr %t19) %t21 = getelementptr inbounds %S.ast.Node, ptr %a18, i32 0, i32 9 %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %t21, i32 0, i32 1 %t23 = load %S.ast.Node, ptr %a4 store %S.ast.Node %t23, ptr %a24 call void @finch.copy.S_ast_Node(ptr %a25, ptr %a24) %t26 = load %S.ast.Node, ptr %a25 %t27 = load i64, ptr %t22 %t28 = add i64 %t27, 1 call void @finch_arr_reserve(ptr %t21, i64 %t28, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t29 = load ptr, ptr %t21 %t30 = getelementptr inbounds %S.ast.Node, ptr %t29, i64 %t27 store %S.ast.Node %t26, ptr %t30 store i64 %t28, ptr %t22 %t31 = load ptr, ptr %a1 %t32 = call i1 @finch.parser.at(ptr %t31, { ptr, i64, i64 } { ptr @.str.952, i64 1, i64 0 }) br i1 %t32, label %then1669, label %else1670 then1669: %t33 = getelementptr inbounds %S.ast.Node, ptr %a18, i32 0, i32 6 store i1 true, ptr %t33 %t34 = getelementptr inbounds %S.ast.Node, ptr %a18, i32 0, i32 9 %t35 = getelementptr inbounds { ptr, i64, i64 }, ptr %t34, i32 0, i32 1 %t36 = load ptr, ptr %a1 %t37 = call %S.ast.Node @finch.parser.parseBlock(ptr %t36) %t38 = load i64, ptr %t35 %t39 = add i64 %t38, 1 call void @finch_arr_reserve(ptr %t34, i64 %t39, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t40 = load ptr, ptr %t34 %t41 = getelementptr inbounds %S.ast.Node, ptr %t40, i64 %t38 store %S.ast.Node %t37, ptr %t41 store i64 %t39, ptr %t35 br label %endif1671 else1670: %t42 = getelementptr inbounds %S.ast.Node, ptr %a18, i32 0, i32 9 %t43 = getelementptr inbounds { ptr, i64, i64 }, ptr %t42, i32 0, i32 1 %t44 = load ptr, ptr %a1 %t45 = call %S.ast.Node @finch.parser.parseExpr(ptr %t44) %t46 = load i64, ptr %t43 %t47 = add i64 %t46, 1 call void @finch_arr_reserve(ptr %t42, i64 %t47, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t48 = load ptr, ptr %t42 %t49 = getelementptr inbounds %S.ast.Node, ptr %t48, i64 %t46 store %S.ast.Node %t45, ptr %t49 store i64 %t47, ptr %t43 br label %endif1671 endif1671: %t50 = load %S.ast.Node, ptr %a18 store %S.ast.Node %t50, ptr %a51 call void @finch.copy.S_ast_Node(ptr %a52, ptr %a51) %t53 = load %S.ast.Node, ptr %a52 ret %S.ast.Node %t53 } define internal %S.ast.Node @finch.parser.parseBinary(ptr %p0, i64 %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca i64, align 16 %a11 = alloca %S.ast.Node, align 16 %a22 = alloca %S.ast.Node, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca %S.ast.Node, align 16 %a34 = alloca %S.ast.Node, align 16 %a51 = alloca %S.ast.Node, align 16 %a52 = alloca %S.ast.Node, align 16 %a55 = alloca %S.ast.Node, align 16 %a56 = alloca %S.ast.Node, align 16 store ptr %p0, ptr %a1 store i64 %p1, ptr %a2 %t3 = load i64, ptr %a2 %t4 = icmp sgt i64 %t3, 5 br i1 %t4, label %then1672, label %endif1674 then1672: %t5 = load ptr, ptr %a1 %t6 = call %S.ast.Node @finch.parser.parseUnary(ptr %t5) ret %S.ast.Node %t6 endif1674: %t7 = load ptr, ptr %a1 %t8 = load i64, ptr %a2 %t9 = add i64 %t8, 1 %t10 = call %S.ast.Node @finch.parser.parseBinary(ptr %t7, i64 %t9) store %S.ast.Node %t10, ptr %a11 br label %while.cond1675 while.cond1675: %t12 = load ptr, ptr %a1 %t13 = call i1 @finch.parser.sameLine(ptr %t12) br label %logic.from1678 logic.from1678: br i1 %t13, label %logic.rhs1679, label %logic.end1680 logic.rhs1679: %t14 = load ptr, ptr %a1 %t15 = call { ptr, i64, i64 } @finch.parser.curKind(ptr %t14) %t16 = call i64 @finch.parser.binaryLevel({ ptr, i64, i64 } %t15) %t17 = load i64, ptr %a2 %t18 = icmp eq i64 %t16, %t17 br label %logic.rend1681 logic.rend1681: br label %logic.end1680 logic.end1680: %t19 = phi i1 [ false, %logic.from1678 ], [ %t18, %logic.rend1681 ] br i1 %t19, label %while.body1676, label %while.end1677 while.body1676: %t20 = load ptr, ptr %a1 %t21 = call %S.ast.Node @finch.parser.node(ptr %t20, { ptr, i64, i64 } { ptr @.str.953, i64 6, i64 0 }) store %S.ast.Node %t21, ptr %a22 %t23 = load ptr, ptr %a1 %t24 = call %S.lexer.Token @finch.parser.next(ptr %t23) %t25 = extractvalue %S.lexer.Token %t24, 0 store { ptr, i64, i64 } %t25, ptr %a26 call void @finch_str_copy(ptr %a27, ptr %a26) %t28 = load { ptr, i64, i64 }, ptr %a27 %t29 = getelementptr inbounds %S.ast.Node, ptr %a22, i32 0, i32 1 store { ptr, i64, i64 } %t28, ptr %t29 %t30 = getelementptr inbounds %S.ast.Node, ptr %a22, i32 0, i32 9 %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t30, i32 0, i32 1 %t32 = load %S.ast.Node, ptr %a11 store %S.ast.Node %t32, ptr %a33 call void @finch.copy.S_ast_Node(ptr %a34, ptr %a33) %t35 = load %S.ast.Node, ptr %a34 %t36 = load i64, ptr %t31 %t37 = add i64 %t36, 1 call void @finch_arr_reserve(ptr %t30, i64 %t37, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t38 = load ptr, ptr %t30 %t39 = getelementptr inbounds %S.ast.Node, ptr %t38, i64 %t36 store %S.ast.Node %t35, ptr %t39 store i64 %t37, ptr %t31 %t40 = getelementptr inbounds %S.ast.Node, ptr %a22, i32 0, i32 9 %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %t40, i32 0, i32 1 %t42 = load ptr, ptr %a1 %t43 = load i64, ptr %a2 %t44 = add i64 %t43, 1 %t45 = call %S.ast.Node @finch.parser.parseBinary(ptr %t42, i64 %t44) %t46 = load i64, ptr %t41 %t47 = add i64 %t46, 1 call void @finch_arr_reserve(ptr %t40, i64 %t47, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t48 = load ptr, ptr %t40 %t49 = getelementptr inbounds %S.ast.Node, ptr %t48, i64 %t46 store %S.ast.Node %t45, ptr %t49 store i64 %t47, ptr %t41 %t50 = load %S.ast.Node, ptr %a22 store %S.ast.Node %t50, ptr %a51 call void @finch.copy.S_ast_Node(ptr %a52, ptr %a51) %t53 = load %S.ast.Node, ptr %a52 store %S.ast.Node %t53, ptr %a11 br label %while.cond1675 while.end1677: %t54 = load %S.ast.Node, ptr %a11 store %S.ast.Node %t54, ptr %a55 call void @finch.copy.S_ast_Node(ptr %a56, ptr %a55) %t57 = load %S.ast.Node, ptr %a56 ret %S.ast.Node %t57 } define internal %S.ast.Node @finch.parser.parseUnary(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a6 = alloca %S.ast.Node, align 16 %a28 = alloca %S.ast.Node, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = call i1 @finch.parser.at(ptr %t2, { ptr, i64, i64 } { ptr @.str.954, i64 3, i64 0 }) br i1 %t3, label %then1682, label %endif1684 then1682: %t4 = load ptr, ptr %a1 %t5 = call %S.ast.Node @finch.parser.node(ptr %t4, { ptr, i64, i64 } { ptr @.str.955, i64 3, i64 0 }) store %S.ast.Node %t5, ptr %a6 %t7 = load ptr, ptr %a1 %t8 = call %S.lexer.Token @finch.parser.next(ptr %t7) %t9 = getelementptr inbounds %S.ast.Node, ptr %a6, i32 0, i32 9 %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t9, i32 0, i32 1 %t11 = load ptr, ptr %a1 %t12 = call %S.ast.Node @finch.parser.parsePostfix(ptr %t11) %t13 = load i64, ptr %t10 %t14 = add i64 %t13, 1 call void @finch_arr_reserve(ptr %t9, i64 %t14, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t15 = load ptr, ptr %t9 %t16 = getelementptr inbounds %S.ast.Node, ptr %t15, i64 %t13 store %S.ast.Node %t12, ptr %t16 store i64 %t14, ptr %t10 %t17 = load %S.ast.Node, ptr %a6 ret %S.ast.Node %t17 endif1684: %t18 = load ptr, ptr %a1 %t19 = call i1 @finch.parser.at(ptr %t18, { ptr, i64, i64 } { ptr @.str.956, i64 1, i64 0 }) br label %logic.from1685 logic.from1685: br i1 %t19, label %logic.end1687, label %logic.rhs1686 logic.rhs1686: %t20 = load ptr, ptr %a1 %t21 = call i1 @finch.parser.at(ptr %t20, { ptr, i64, i64 } { ptr @.str.957, i64 1, i64 0 }) br label %logic.rend1688 logic.rend1688: br label %logic.end1687 logic.end1687: %t22 = phi i1 [ true, %logic.from1685 ], [ %t21, %logic.rend1688 ] br label %logic.from1689 logic.from1689: br i1 %t22, label %logic.end1691, label %logic.rhs1690 logic.rhs1690: %t23 = load ptr, ptr %a1 %t24 = call i1 @finch.parser.at(ptr %t23, { ptr, i64, i64 } { ptr @.str.958, i64 1, i64 0 }) br label %logic.rend1692 logic.rend1692: br label %logic.end1691 logic.end1691: %t25 = phi i1 [ true, %logic.from1689 ], [ %t24, %logic.rend1692 ] br i1 %t25, label %then1693, label %endif1695 then1693: %t26 = load ptr, ptr %a1 %t27 = call %S.ast.Node @finch.parser.node(ptr %t26, { ptr, i64, i64 } { ptr @.str.959, i64 5, i64 0 }) store %S.ast.Node %t27, ptr %a28 %t29 = load ptr, ptr %a1 %t30 = call %S.lexer.Token @finch.parser.next(ptr %t29) %t31 = extractvalue %S.lexer.Token %t30, 0 store { ptr, i64, i64 } %t31, ptr %a32 call void @finch_str_copy(ptr %a33, ptr %a32) %t34 = load { ptr, i64, i64 }, ptr %a33 %t35 = getelementptr inbounds %S.ast.Node, ptr %a28, i32 0, i32 1 store { ptr, i64, i64 } %t34, ptr %t35 %t36 = getelementptr inbounds %S.ast.Node, ptr %a28, i32 0, i32 9 %t37 = getelementptr inbounds { ptr, i64, i64 }, ptr %t36, i32 0, i32 1 %t38 = load ptr, ptr %a1 %t39 = call %S.ast.Node @finch.parser.parseUnary(ptr %t38) %t40 = load i64, ptr %t37 %t41 = add i64 %t40, 1 call void @finch_arr_reserve(ptr %t36, i64 %t41, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t42 = load ptr, ptr %t36 %t43 = getelementptr inbounds %S.ast.Node, ptr %t42, i64 %t40 store %S.ast.Node %t39, ptr %t43 store i64 %t41, ptr %t37 %t44 = load %S.ast.Node, ptr %a28 ret %S.ast.Node %t44 endif1695: %t45 = load ptr, ptr %a1 %t46 = call %S.ast.Node @finch.parser.parsePostfix(ptr %t45) ret %S.ast.Node %t46 } define internal void @finch.parser.parseArgs(ptr %p0, ptr %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca ptr, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store ptr %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = call %S.lexer.Token @finch.parser.expect(ptr %t3, { ptr, i64, i64 } { ptr @.str.960, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.961, i64 3, i64 0 }) %t5 = load ptr, ptr %a1 %t6 = icmp eq ptr %t5, null br i1 %t6, label %panic1696, label %ok1697 panic1696: call void @finch_panic(ptr @.str.962, i64 638, ptr @.str.963) unreachable ok1697: %t7 = getelementptr inbounds %S.parser.Parser, ptr %t5, i32 0, i32 2 %t8 = load i64, ptr %t7 %t9 = add i64 %t8, 1 store i64 %t9, ptr %t7 %t10 = load ptr, ptr %a1 %t11 = call i1 @finch.parser.at(ptr %t10, { ptr, i64, i64 } { ptr @.str.964, i64 1, i64 0 }) %t12 = xor i1 %t11, true br i1 %t12, label %then1698, label %endif1700 then1698: br label %while.cond1701 while.cond1701: %t13 = load ptr, ptr %a1 %t14 = call i1 @finch.parser.at(ptr %t13, { ptr, i64, i64 } { ptr @.str.965, i64 1, i64 0 }) %t15 = xor i1 %t14, true br i1 %t15, label %while.body1702, label %while.end1703 while.body1702: store { ptr, i64, i64 } { ptr @.str.966, i64 0, i64 0 }, ptr %a16 %t17 = load ptr, ptr %a1 %t18 = call i1 @finch.parser.at(ptr %t17, { ptr, i64, i64 } { ptr @.str.967, i64 5, i64 0 }) br label %logic.from1704 logic.from1704: br i1 %t18, label %logic.rhs1705, label %logic.end1706 logic.rhs1705: %t19 = load ptr, ptr %a1 %t20 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t19, i64 1) store { ptr, i64, i64 } %t20, ptr %a21 store { ptr, i64, i64 } { ptr @.str.968, i64 1, i64 0 }, ptr %a22 %t23 = call i32 @finch_str_eq(ptr %a21, ptr %a22) %t24 = icmp ne i32 %t23, 0 br label %logic.rend1707 logic.rend1707: br label %logic.end1706 logic.end1706: %t25 = phi i1 [ false, %logic.from1704 ], [ %t24, %logic.rend1707 ] br i1 %t25, label %then1708, label %endif1710 then1708: %t26 = load ptr, ptr %a1 %t27 = call %S.lexer.Token @finch.parser.next(ptr %t26) %t28 = extractvalue %S.lexer.Token %t27, 1 store { ptr, i64, i64 } %t28, ptr %a29 call void @finch_str_copy(ptr %a30, ptr %a29) %t31 = load { ptr, i64, i64 }, ptr %a30 store { ptr, i64, i64 } %t31, ptr %a16 %t32 = load ptr, ptr %a1 %t33 = call %S.lexer.Token @finch.parser.next(ptr %t32) br label %endif1710 endif1710: %t34 = load ptr, ptr %a2 %t35 = icmp eq ptr %t34, null br i1 %t35, label %panic1711, label %ok1712 panic1711: call void @finch_panic(ptr @.str.969, i64 646, ptr @.str.970) unreachable ok1712: %t36 = getelementptr inbounds %S.ast.Node, ptr %t34, i32 0, i32 10 %t37 = getelementptr inbounds { ptr, i64, i64 }, ptr %t36, i32 0, i32 1 %t38 = load { ptr, i64, i64 }, ptr %a16 store { ptr, i64, i64 } %t38, ptr %a39 call void @finch_str_copy(ptr %a40, ptr %a39) %t41 = load { ptr, i64, i64 }, ptr %a40 %t42 = load i64, ptr %t37 %t43 = add i64 %t42, 1 call void @finch_arr_reserve(ptr %t36, i64 %t43, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t44 = load ptr, ptr %t36 %t45 = getelementptr inbounds { ptr, i64, i64 }, ptr %t44, i64 %t42 store { ptr, i64, i64 } %t41, ptr %t45 store i64 %t43, ptr %t37 %t46 = load ptr, ptr %a2 %t47 = icmp eq ptr %t46, null br i1 %t47, label %panic1713, label %ok1714 panic1713: call void @finch_panic(ptr @.str.971, i64 647, ptr @.str.972) unreachable ok1714: %t48 = getelementptr inbounds %S.ast.Node, ptr %t46, i32 0, i32 9 %t49 = getelementptr inbounds { ptr, i64, i64 }, ptr %t48, i32 0, i32 1 %t50 = load ptr, ptr %a1 %t51 = call %S.ast.Node @finch.parser.parseExpr(ptr %t50) %t52 = load i64, ptr %t49 %t53 = add i64 %t52, 1 call void @finch_arr_reserve(ptr %t48, i64 %t53, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t54 = load ptr, ptr %t48 %t55 = getelementptr inbounds %S.ast.Node, ptr %t54, i64 %t52 store %S.ast.Node %t51, ptr %t55 store i64 %t53, ptr %t49 %t56 = load ptr, ptr %a1 %t57 = call i1 @finch.parser.accept(ptr %t56, { ptr, i64, i64 } { ptr @.str.973, i64 1, i64 0 }) %t58 = xor i1 %t57, true br i1 %t58, label %then1715, label %endif1717 then1715: br label %while.end1703 endif1717: br label %while.cond1701 while.end1703: br label %endif1700 endif1700: %t59 = load ptr, ptr %a1 %t60 = icmp eq ptr %t59, null br i1 %t60, label %panic1718, label %ok1719 panic1718: call void @finch_panic(ptr @.str.974, i64 653, ptr @.str.975) unreachable ok1719: %t61 = getelementptr inbounds %S.parser.Parser, ptr %t59, i32 0, i32 2 %t62 = load i64, ptr %t61 %t63 = sub i64 %t62, 1 store i64 %t63, ptr %t61 %t64 = load ptr, ptr %a1 %t65 = call %S.lexer.Token @finch.parser.expect(ptr %t64, { ptr, i64, i64 } { ptr @.str.976, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.977, i64 3, i64 0 }) ret void } define internal %S.ast.Node @finch.parser.parsePostfix(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a4 = alloca %S.ast.Node, align 16 %a11 = alloca %S.ast.Node, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca %S.ast.Node, align 16 %a25 = alloca %S.ast.Node, align 16 %a41 = alloca %S.ast.Node, align 16 %a42 = alloca %S.ast.Node, align 16 %a48 = alloca %S.ast.Node, align 16 %a59 = alloca %S.ast.Node, align 16 %a60 = alloca %S.ast.Node, align 16 %a82 = alloca %S.ast.Node, align 16 %a83 = alloca %S.ast.Node, align 16 %a86 = alloca %S.ast.Node, align 16 %a87 = alloca %S.ast.Node, align 16 %a90 = alloca %S.ast.Node, align 16 %a91 = alloca %S.ast.Node, align 16 store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = call %S.ast.Node @finch.parser.parsePrimary(ptr %t2) store %S.ast.Node %t3, ptr %a4 br label %while.cond1720 while.cond1720: %t5 = load ptr, ptr %a1 %t6 = call i1 @finch.parser.sameLine(ptr %t5) br i1 %t6, label %while.body1721, label %while.end1722 while.body1721: %t7 = load ptr, ptr %a1 %t8 = call i1 @finch.parser.at(ptr %t7, { ptr, i64, i64 } { ptr @.str.978, i64 1, i64 0 }) br i1 %t8, label %then1723, label %else1724 then1723: %t9 = load ptr, ptr %a1 %t10 = call %S.ast.Node @finch.parser.node(ptr %t9, { ptr, i64, i64 } { ptr @.str.979, i64 6, i64 0 }) store %S.ast.Node %t10, ptr %a11 %t12 = load ptr, ptr %a1 %t13 = call %S.lexer.Token @finch.parser.next(ptr %t12) %t14 = load ptr, ptr %a1 %t15 = call %S.lexer.Token @finch.parser.expect(ptr %t14, { ptr, i64, i64 } { ptr @.str.980, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.981, i64 16, i64 0 }) %t16 = extractvalue %S.lexer.Token %t15, 1 store { ptr, i64, i64 } %t16, ptr %a17 call void @finch_str_copy(ptr %a18, ptr %a17) %t19 = load { ptr, i64, i64 }, ptr %a18 %t20 = getelementptr inbounds %S.ast.Node, ptr %a11, i32 0, i32 1 store { ptr, i64, i64 } %t19, ptr %t20 %t21 = getelementptr inbounds %S.ast.Node, ptr %a11, i32 0, i32 9 %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %t21, i32 0, i32 1 %t23 = load %S.ast.Node, ptr %a4 store %S.ast.Node %t23, ptr %a24 call void @finch.copy.S_ast_Node(ptr %a25, ptr %a24) %t26 = load %S.ast.Node, ptr %a25 %t27 = load i64, ptr %t22 %t28 = add i64 %t27, 1 call void @finch_arr_reserve(ptr %t21, i64 %t28, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t29 = load ptr, ptr %t21 %t30 = getelementptr inbounds %S.ast.Node, ptr %t29, i64 %t27 store %S.ast.Node %t26, ptr %t30 store i64 %t28, ptr %t22 %t31 = load ptr, ptr %a1 %t32 = call i1 @finch.parser.at(ptr %t31, { ptr, i64, i64 } { ptr @.str.982, i64 1, i64 0 }) br label %logic.from1726 logic.from1726: br i1 %t32, label %logic.rhs1727, label %logic.end1728 logic.rhs1727: %t33 = load ptr, ptr %a1 %t34 = call %S.lexer.Token @finch.parser.cur(ptr %t33) %t35 = extractvalue %S.lexer.Token %t34, 4 %t36 = xor i1 %t35, true br label %logic.rend1729 logic.rend1729: br label %logic.end1728 logic.end1728: %t37 = phi i1 [ false, %logic.from1726 ], [ %t36, %logic.rend1729 ] br i1 %t37, label %then1730, label %endif1732 then1730: %t38 = getelementptr inbounds %S.ast.Node, ptr %a11, i32 0, i32 0 store { ptr, i64, i64 } { ptr @.str.983, i64 6, i64 0 }, ptr %t38 %t39 = load ptr, ptr %a1 call void @finch.parser.parseArgs(ptr %t39, ptr %a11) br label %endif1732 endif1732: %t40 = load %S.ast.Node, ptr %a11 store %S.ast.Node %t40, ptr %a41 call void @finch.copy.S_ast_Node(ptr %a42, ptr %a41) %t43 = load %S.ast.Node, ptr %a42 store %S.ast.Node %t43, ptr %a4 br label %endif1725 else1724: %t44 = load ptr, ptr %a1 %t45 = call i1 @finch.parser.at(ptr %t44, { ptr, i64, i64 } { ptr @.str.984, i64 1, i64 0 }) br i1 %t45, label %then1733, label %else1734 then1733: %t46 = load ptr, ptr %a1 %t47 = call %S.ast.Node @finch.parser.node(ptr %t46, { ptr, i64, i64 } { ptr @.str.985, i64 5, i64 0 }) store %S.ast.Node %t47, ptr %a48 %t49 = load ptr, ptr %a1 %t50 = call %S.lexer.Token @finch.parser.next(ptr %t49) %t51 = load ptr, ptr %a1 %t52 = icmp eq ptr %t51, null br i1 %t52, label %panic1736, label %ok1737 panic1736: call void @finch_panic(ptr @.str.986, i64 673, ptr @.str.987) unreachable ok1737: %t53 = getelementptr inbounds %S.parser.Parser, ptr %t51, i32 0, i32 2 %t54 = load i64, ptr %t53 %t55 = add i64 %t54, 1 store i64 %t55, ptr %t53 %t56 = getelementptr inbounds %S.ast.Node, ptr %a48, i32 0, i32 9 %t57 = getelementptr inbounds { ptr, i64, i64 }, ptr %t56, i32 0, i32 1 %t58 = load %S.ast.Node, ptr %a4 store %S.ast.Node %t58, ptr %a59 call void @finch.copy.S_ast_Node(ptr %a60, ptr %a59) %t61 = load %S.ast.Node, ptr %a60 %t62 = load i64, ptr %t57 %t63 = add i64 %t62, 1 call void @finch_arr_reserve(ptr %t56, i64 %t63, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t64 = load ptr, ptr %t56 %t65 = getelementptr inbounds %S.ast.Node, ptr %t64, i64 %t62 store %S.ast.Node %t61, ptr %t65 store i64 %t63, ptr %t57 %t66 = getelementptr inbounds %S.ast.Node, ptr %a48, i32 0, i32 9 %t67 = getelementptr inbounds { ptr, i64, i64 }, ptr %t66, i32 0, i32 1 %t68 = load ptr, ptr %a1 %t69 = call %S.ast.Node @finch.parser.parseExpr(ptr %t68) %t70 = load i64, ptr %t67 %t71 = add i64 %t70, 1 call void @finch_arr_reserve(ptr %t66, i64 %t71, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t72 = load ptr, ptr %t66 %t73 = getelementptr inbounds %S.ast.Node, ptr %t72, i64 %t70 store %S.ast.Node %t69, ptr %t73 store i64 %t71, ptr %t67 %t74 = load ptr, ptr %a1 %t75 = icmp eq ptr %t74, null br i1 %t75, label %panic1738, label %ok1739 panic1738: call void @finch_panic(ptr @.str.988, i64 676, ptr @.str.989) unreachable ok1739: %t76 = getelementptr inbounds %S.parser.Parser, ptr %t74, i32 0, i32 2 %t77 = load i64, ptr %t76 %t78 = sub i64 %t77, 1 store i64 %t78, ptr %t76 %t79 = load ptr, ptr %a1 %t80 = call %S.lexer.Token @finch.parser.expect(ptr %t79, { ptr, i64, i64 } { ptr @.str.990, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.991, i64 3, i64 0 }) %t81 = load %S.ast.Node, ptr %a48 store %S.ast.Node %t81, ptr %a82 call void @finch.copy.S_ast_Node(ptr %a83, ptr %a82) %t84 = load %S.ast.Node, ptr %a83 store %S.ast.Node %t84, ptr %a4 br label %endif1735 else1734: %t85 = load %S.ast.Node, ptr %a4 store %S.ast.Node %t85, ptr %a86 call void @finch.copy.S_ast_Node(ptr %a87, ptr %a86) %t88 = load %S.ast.Node, ptr %a87 ret %S.ast.Node %t88 endif1735: br label %endif1725 endif1725: br label %while.cond1720 while.end1722: %t89 = load %S.ast.Node, ptr %a4 store %S.ast.Node %t89, ptr %a90 call void @finch.copy.S_ast_Node(ptr %a91, ptr %a90) %t92 = load %S.ast.Node, ptr %a91 ret %S.ast.Node %t92 } define internal %S.ast.Node @finch.parser.parsePrimary(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a4 = alloca %S.lexer.Token, align 16 %a7 = alloca %S.ast.Node, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca %S.ast.Node, align 16 %a46 = alloca %S.ast.Node, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca %S.ast.Node, align 16 %a64 = alloca %S.ast.Node, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca %S.ast.Node, align 16 %a87 = alloca %S.ast.Node, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca %S.ast.Node, align 16 %a99 = alloca %S.ast.Node, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca { ptr, i64, i64 }, align 16 %a115 = alloca %S.ast.Node, align 16 %a125 = alloca { ptr, i64, i64 }, align 16 %a126 = alloca { ptr, i64, i64 }, align 16 %a132 = alloca { ptr, i64, i64 }, align 16 %a133 = alloca { ptr, i64, i64 }, align 16 %a148 = alloca { ptr, i64, i64 }, align 16 %a149 = alloca { ptr, i64, i64 }, align 16 %a177 = alloca { ptr, i64, i64 }, align 16 %a178 = alloca { ptr, i64, i64 }, align 16 %a202 = alloca %S.ast.Node, align 16 %a203 = alloca %S.ast.Node, align 16 %a206 = alloca { ptr, i64, i64 }, align 16 %a207 = alloca { ptr, i64, i64 }, align 16 %a215 = alloca { ptr, i64, i64 }, align 16 %a216 = alloca { ptr, i64, i64 }, align 16 %a235 = alloca { ptr, i64, i64 }, align 16 %a236 = alloca { ptr, i64, i64 }, align 16 %a264 = alloca %S.ast.Node, align 16 %a265 = alloca %S.ast.Node, align 16 %a277 = alloca %S.ast.Node, align 16 %a278 = alloca %S.ast.Node, align 16 %a282 = alloca %S.ast.Node, align 16 %a283 = alloca %S.ast.Node, align 16 %a289 = alloca { ptr, i64, i64 }, align 16 %a290 = alloca { ptr, i64, i64 }, align 16 %a291 = alloca { ptr, i64, i64 }, align 16 %a293 = alloca { ptr, i64, i64 }, align 16 %a294 = alloca { ptr, i64, i64 }, align 16 %a295 = alloca { ptr, i64, i64 }, align 16 %a298 = alloca %S.ast.Node, align 16 %a299 = alloca %S.ast.Node, align 16 store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = call %S.lexer.Token @finch.parser.cur(ptr %t2) store %S.lexer.Token %t3, ptr %a4 %t5 = load ptr, ptr %a1 %t6 = call %S.ast.Node @finch.parser.node(ptr %t5, { ptr, i64, i64 } { ptr @.str.992, i64 0, i64 0 }) store %S.ast.Node %t6, ptr %a7 %t8 = getelementptr inbounds %S.lexer.Token, ptr %a4, i32 0, i32 0 %t9 = load { ptr, i64, i64 }, ptr %t8 store { ptr, i64, i64 } %t9, ptr %a10 call void @finch_str_copy(ptr %a11, ptr %a10) %t12 = load { ptr, i64, i64 }, ptr %a11 store { ptr, i64, i64 } %t12, ptr %a13 %t14 = load { ptr, i64, i64 }, ptr %a13 store { ptr, i64, i64 } %t14, ptr %a15 store { ptr, i64, i64 } { ptr @.str.993, i64 3, i64 0 }, ptr %a16 %t17 = call i32 @finch_str_eq(ptr %a15, ptr %a16) %t18 = icmp ne i32 %t17, 0 br label %logic.from1740 logic.from1740: br i1 %t18, label %logic.end1742, label %logic.rhs1741 logic.rhs1741: %t19 = load { ptr, i64, i64 }, ptr %a13 store { ptr, i64, i64 } %t19, ptr %a20 store { ptr, i64, i64 } { ptr @.str.994, i64 5, i64 0 }, ptr %a21 %t22 = call i32 @finch_str_eq(ptr %a20, ptr %a21) %t23 = icmp ne i32 %t22, 0 br label %logic.rend1743 logic.rend1743: br label %logic.end1742 logic.end1742: %t24 = phi i1 [ true, %logic.from1740 ], [ %t23, %logic.rend1743 ] br label %logic.from1744 logic.from1744: br i1 %t24, label %logic.end1746, label %logic.rhs1745 logic.rhs1745: %t25 = load { ptr, i64, i64 }, ptr %a13 store { ptr, i64, i64 } %t25, ptr %a26 store { ptr, i64, i64 } { ptr @.str.995, i64 4, i64 0 }, ptr %a27 %t28 = call i32 @finch_str_eq(ptr %a26, ptr %a27) %t29 = icmp ne i32 %t28, 0 br label %logic.rend1747 logic.rend1747: br label %logic.end1746 logic.end1746: %t30 = phi i1 [ true, %logic.from1744 ], [ %t29, %logic.rend1747 ] br i1 %t30, label %then1748, label %endif1750 then1748: %t31 = load ptr, ptr %a1 %t32 = call %S.lexer.Token @finch.parser.next(ptr %t31) %t33 = load { ptr, i64, i64 }, ptr %a13 %t34 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0 store { ptr, i64, i64 } %t33, ptr %a35 call void @finch_str_copy(ptr %a36, ptr %a35) %t37 = load { ptr, i64, i64 }, ptr %a36 store { ptr, i64, i64 } %t37, ptr %t34 %t38 = getelementptr inbounds %S.lexer.Token, ptr %a4, i32 0, i32 1 %t39 = load { ptr, i64, i64 }, ptr %t38 %t40 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 4 store { ptr, i64, i64 } %t39, ptr %a41 call void @finch_str_copy(ptr %a42, ptr %a41) %t43 = load { ptr, i64, i64 }, ptr %a42 store { ptr, i64, i64 } %t43, ptr %t40 %t44 = load %S.ast.Node, ptr %a7 store %S.ast.Node %t44, ptr %a45 call void @finch.copy.S_ast_Node(ptr %a46, ptr %a45) %t47 = load %S.ast.Node, ptr %a46 ret %S.ast.Node %t47 endif1750: %t48 = load { ptr, i64, i64 }, ptr %a13 store { ptr, i64, i64 } %t48, ptr %a49 store { ptr, i64, i64 } { ptr @.str.996, i64 6, i64 0 }, ptr %a50 %t51 = call i32 @finch_str_eq(ptr %a49, ptr %a50) %t52 = icmp ne i32 %t51, 0 br i1 %t52, label %then1751, label %endif1753 then1751: %t53 = load ptr, ptr %a1 %t54 = call %S.lexer.Token @finch.parser.next(ptr %t53) %t55 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0 store { ptr, i64, i64 } { ptr @.str.997, i64 3, i64 0 }, ptr %t55 %t56 = getelementptr inbounds %S.lexer.Token, ptr %a4, i32 0, i32 1 %t57 = load { ptr, i64, i64 }, ptr %t56 %t58 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 4 store { ptr, i64, i64 } %t57, ptr %a59 call void @finch_str_copy(ptr %a60, ptr %a59) %t61 = load { ptr, i64, i64 }, ptr %a60 store { ptr, i64, i64 } %t61, ptr %t58 %t62 = load %S.ast.Node, ptr %a7 store %S.ast.Node %t62, ptr %a63 call void @finch.copy.S_ast_Node(ptr %a64, ptr %a63) %t65 = load %S.ast.Node, ptr %a64 ret %S.ast.Node %t65 endif1753: %t66 = load { ptr, i64, i64 }, ptr %a13 store { ptr, i64, i64 } %t66, ptr %a67 store { ptr, i64, i64 } { ptr @.str.998, i64 4, i64 0 }, ptr %a68 %t69 = call i32 @finch_str_eq(ptr %a67, ptr %a68) %t70 = icmp ne i32 %t69, 0 br label %logic.from1754 logic.from1754: br i1 %t70, label %logic.end1756, label %logic.rhs1755 logic.rhs1755: %t71 = load { ptr, i64, i64 }, ptr %a13 store { ptr, i64, i64 } %t71, ptr %a72 store { ptr, i64, i64 } { ptr @.str.999, i64 5, i64 0 }, ptr %a73 %t74 = call i32 @finch_str_eq(ptr %a72, ptr %a73) %t75 = icmp ne i32 %t74, 0 br label %logic.rend1757 logic.rend1757: br label %logic.end1756 logic.end1756: %t76 = phi i1 [ true, %logic.from1754 ], [ %t75, %logic.rend1757 ] br i1 %t76, label %then1758, label %endif1760 then1758: %t77 = load ptr, ptr %a1 %t78 = call %S.lexer.Token @finch.parser.next(ptr %t77) %t79 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0 store { ptr, i64, i64 } { ptr @.str.1000, i64 4, i64 0 }, ptr %t79 %t80 = load { ptr, i64, i64 }, ptr %a13 %t81 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 4 store { ptr, i64, i64 } %t80, ptr %a82 call void @finch_str_copy(ptr %a83, ptr %a82) %t84 = load { ptr, i64, i64 }, ptr %a83 store { ptr, i64, i64 } %t84, ptr %t81 %t85 = load %S.ast.Node, ptr %a7 store %S.ast.Node %t85, ptr %a86 call void @finch.copy.S_ast_Node(ptr %a87, ptr %a86) %t88 = load %S.ast.Node, ptr %a87 ret %S.ast.Node %t88 endif1760: %t89 = load { ptr, i64, i64 }, ptr %a13 store { ptr, i64, i64 } %t89, ptr %a90 store { ptr, i64, i64 } { ptr @.str.1001, i64 4, i64 0 }, ptr %a91 %t92 = call i32 @finch_str_eq(ptr %a90, ptr %a91) %t93 = icmp ne i32 %t92, 0 br i1 %t93, label %then1761, label %endif1763 then1761: %t94 = load ptr, ptr %a1 %t95 = call %S.lexer.Token @finch.parser.next(ptr %t94) %t96 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0 store { ptr, i64, i64 } { ptr @.str.1002, i64 4, i64 0 }, ptr %t96 %t97 = load %S.ast.Node, ptr %a7 store %S.ast.Node %t97, ptr %a98 call void @finch.copy.S_ast_Node(ptr %a99, ptr %a98) %t100 = load %S.ast.Node, ptr %a99 ret %S.ast.Node %t100 endif1763: %t101 = load { ptr, i64, i64 }, ptr %a13 store { ptr, i64, i64 } %t101, ptr %a102 store { ptr, i64, i64 } { ptr @.str.1003, i64 1, i64 0 }, ptr %a103 %t104 = call i32 @finch_str_eq(ptr %a102, ptr %a103) %t105 = icmp ne i32 %t104, 0 br i1 %t105, label %then1764, label %endif1766 then1764: %t106 = load ptr, ptr %a1 %t107 = call %S.lexer.Token @finch.parser.next(ptr %t106) %t108 = load ptr, ptr %a1 %t109 = icmp eq ptr %t108, null br i1 %t109, label %panic1767, label %ok1768 panic1767: call void @finch_panic(ptr @.str.1004, i64 715, ptr @.str.1005) unreachable ok1768: %t110 = getelementptr inbounds %S.parser.Parser, ptr %t108, i32 0, i32 2 %t111 = load i64, ptr %t110 %t112 = add i64 %t111, 1 store i64 %t112, ptr %t110 %t113 = load ptr, ptr %a1 %t114 = call %S.ast.Node @finch.parser.parseExpr(ptr %t113) store %S.ast.Node %t114, ptr %a115 %t116 = load ptr, ptr %a1 %t117 = icmp eq ptr %t116, null br i1 %t117, label %panic1769, label %ok1770 panic1769: call void @finch_panic(ptr @.str.1006, i64 717, ptr @.str.1007) unreachable ok1770: %t118 = getelementptr inbounds %S.parser.Parser, ptr %t116, i32 0, i32 2 %t119 = load i64, ptr %t118 %t120 = sub i64 %t119, 1 store i64 %t120, ptr %t118 %t121 = load ptr, ptr %a1 %t122 = call %S.lexer.Token @finch.parser.expect(ptr %t121, { ptr, i64, i64 } { ptr @.str.1008, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.1009, i64 3, i64 0 }) %t123 = load %S.ast.Node, ptr %a115 ret %S.ast.Node %t123 endif1766: %t124 = load { ptr, i64, i64 }, ptr %a13 store { ptr, i64, i64 } %t124, ptr %a125 store { ptr, i64, i64 } { ptr @.str.1010, i64 5, i64 0 }, ptr %a126 %t127 = call i32 @finch_str_eq(ptr %a125, ptr %a126) %t128 = icmp ne i32 %t127, 0 br i1 %t128, label %then1771, label %endif1773 then1771: %t129 = load ptr, ptr %a1 %t130 = call %S.ast.Node @finch.parser.parseMatch(ptr %t129, i1 true) ret %S.ast.Node %t130 endif1773: %t131 = load { ptr, i64, i64 }, ptr %a13 store { ptr, i64, i64 } %t131, ptr %a132 store { ptr, i64, i64 } { ptr @.str.1011, i64 1, i64 0 }, ptr %a133 %t134 = call i32 @finch_str_eq(ptr %a132, ptr %a133) %t135 = icmp ne i32 %t134, 0 br i1 %t135, label %then1774, label %endif1776 then1774: %t136 = load ptr, ptr %a1 %t137 = call %S.lexer.Token @finch.parser.next(ptr %t136) %t138 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0 store { ptr, i64, i64 } { ptr @.str.1012, i64 5, i64 0 }, ptr %t138 %t139 = load ptr, ptr %a1 %t140 = icmp eq ptr %t139, null br i1 %t140, label %panic1777, label %ok1778 panic1777: call void @finch_panic(ptr @.str.1013, i64 727, ptr @.str.1014) unreachable ok1778: %t141 = getelementptr inbounds %S.parser.Parser, ptr %t139, i32 0, i32 2 %t142 = load i64, ptr %t141 %t143 = add i64 %t142, 1 store i64 %t143, ptr %t141 %t144 = load ptr, ptr %a1 %t145 = call i1 @finch.parser.at(ptr %t144, { ptr, i64, i64 } { ptr @.str.1015, i64 1, i64 0 }) br label %logic.from1779 logic.from1779: br i1 %t145, label %logic.rhs1780, label %logic.end1781 logic.rhs1780: %t146 = load ptr, ptr %a1 %t147 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t146, i64 1) store { ptr, i64, i64 } %t147, ptr %a148 store { ptr, i64, i64 } { ptr @.str.1016, i64 1, i64 0 }, ptr %a149 %t150 = call i32 @finch_str_eq(ptr %a148, ptr %a149) %t151 = icmp ne i32 %t150, 0 br label %logic.rend1782 logic.rend1782: br label %logic.end1781 logic.end1781: %t152 = phi i1 [ false, %logic.from1779 ], [ %t151, %logic.rend1782 ] br i1 %t152, label %then1783, label %endif1785 then1783: %t153 = load ptr, ptr %a1 %t154 = call %S.lexer.Token @finch.parser.next(ptr %t153) %t155 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0 store { ptr, i64, i64 } { ptr @.str.1017, i64 3, i64 0 }, ptr %t155 br label %endif1785 endif1785: br label %while.cond1786 while.cond1786: %t156 = load ptr, ptr %a1 %t157 = call i1 @finch.parser.at(ptr %t156, { ptr, i64, i64 } { ptr @.str.1018, i64 1, i64 0 }) %t158 = xor i1 %t157, true br i1 %t158, label %while.body1787, label %while.end1788 while.body1787: %t159 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 9 %t160 = getelementptr inbounds { ptr, i64, i64 }, ptr %t159, i32 0, i32 1 %t161 = load ptr, ptr %a1 %t162 = call %S.ast.Node @finch.parser.parseExpr(ptr %t161) %t163 = load i64, ptr %t160 %t164 = add i64 %t163, 1 call void @finch_arr_reserve(ptr %t159, i64 %t164, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t165 = load ptr, ptr %t159 %t166 = getelementptr inbounds %S.ast.Node, ptr %t165, i64 %t163 store %S.ast.Node %t162, ptr %t166 store i64 %t164, ptr %t160 %t167 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 9 %t168 = getelementptr inbounds { ptr, i64, i64 }, ptr %t167, i32 0, i32 1 %t169 = load i64, ptr %t168 %t170 = icmp eq i64 %t169, 1 br label %logic.from1789 logic.from1789: br i1 %t170, label %logic.rhs1790, label %logic.end1791 logic.rhs1790: %t171 = load ptr, ptr %a1 %t172 = call i1 @finch.parser.at(ptr %t171, { ptr, i64, i64 } { ptr @.str.1019, i64 1, i64 0 }) br label %logic.rend1792 logic.rend1792: br label %logic.end1791 logic.end1791: %t173 = phi i1 [ false, %logic.from1789 ], [ %t172, %logic.rend1792 ] br i1 %t173, label %then1793, label %endif1795 then1793: %t174 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0 store { ptr, i64, i64 } { ptr @.str.1020, i64 3, i64 0 }, ptr %t174 br label %endif1795 endif1795: %t175 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0 %t176 = load { ptr, i64, i64 }, ptr %t175 store { ptr, i64, i64 } %t176, ptr %a177 store { ptr, i64, i64 } { ptr @.str.1021, i64 3, i64 0 }, ptr %a178 %t179 = call i32 @finch_str_eq(ptr %a177, ptr %a178) %t180 = icmp ne i32 %t179, 0 br i1 %t180, label %then1796, label %endif1798 then1796: %t181 = load ptr, ptr %a1 %t182 = call %S.lexer.Token @finch.parser.expect(ptr %t181, { ptr, i64, i64 } { ptr @.str.1022, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.1023, i64 41, i64 0 }) %t183 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 9 %t184 = getelementptr inbounds { ptr, i64, i64 }, ptr %t183, i32 0, i32 1 %t185 = load ptr, ptr %a1 %t186 = call %S.ast.Node @finch.parser.parseExpr(ptr %t185) %t187 = load i64, ptr %t184 %t188 = add i64 %t187, 1 call void @finch_arr_reserve(ptr %t183, i64 %t188, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t189 = load ptr, ptr %t183 %t190 = getelementptr inbounds %S.ast.Node, ptr %t189, i64 %t187 store %S.ast.Node %t186, ptr %t190 store i64 %t188, ptr %t184 br label %endif1798 endif1798: %t191 = load ptr, ptr %a1 %t192 = call i1 @finch.parser.accept(ptr %t191, { ptr, i64, i64 } { ptr @.str.1024, i64 1, i64 0 }) %t193 = xor i1 %t192, true br i1 %t193, label %then1799, label %endif1801 then1799: br label %while.end1788 endif1801: br label %while.cond1786 while.end1788: %t194 = load ptr, ptr %a1 %t195 = icmp eq ptr %t194, null br i1 %t195, label %panic1802, label %ok1803 panic1802: call void @finch_panic(ptr @.str.1025, i64 745, ptr @.str.1026) unreachable ok1803: %t196 = getelementptr inbounds %S.parser.Parser, ptr %t194, i32 0, i32 2 %t197 = load i64, ptr %t196 %t198 = sub i64 %t197, 1 store i64 %t198, ptr %t196 %t199 = load ptr, ptr %a1 %t200 = call %S.lexer.Token @finch.parser.expect(ptr %t199, { ptr, i64, i64 } { ptr @.str.1027, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.1028, i64 3, i64 0 }) %t201 = load %S.ast.Node, ptr %a7 store %S.ast.Node %t201, ptr %a202 call void @finch.copy.S_ast_Node(ptr %a203, ptr %a202) %t204 = load %S.ast.Node, ptr %a203 ret %S.ast.Node %t204 endif1776: %t205 = load { ptr, i64, i64 }, ptr %a13 store { ptr, i64, i64 } %t205, ptr %a206 store { ptr, i64, i64 } { ptr @.str.1029, i64 5, i64 0 }, ptr %a207 %t208 = call i32 @finch_str_eq(ptr %a206, ptr %a207) %t209 = icmp ne i32 %t208, 0 br i1 %t209, label %then1804, label %endif1806 then1804: %t210 = load ptr, ptr %a1 %t211 = call %S.lexer.Token @finch.parser.next(ptr %t210) %t212 = getelementptr inbounds %S.lexer.Token, ptr %a4, i32 0, i32 1 %t213 = load { ptr, i64, i64 }, ptr %t212 %t214 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 1 store { ptr, i64, i64 } %t213, ptr %a215 call void @finch_str_copy(ptr %a216, ptr %a215) %t217 = load { ptr, i64, i64 }, ptr %a216 store { ptr, i64, i64 } %t217, ptr %t214 %t218 = load ptr, ptr %a1 %t219 = call i1 @finch.parser.at(ptr %t218, { ptr, i64, i64 } { ptr @.str.1030, i64 1, i64 0 }) br label %logic.from1807 logic.from1807: br i1 %t219, label %logic.rhs1808, label %logic.end1809 logic.rhs1808: %t220 = load ptr, ptr %a1 %t221 = icmp eq ptr %t220, null br i1 %t221, label %panic1810, label %ok1811 panic1810: call void @finch_panic(ptr @.str.1031, i64 752, ptr @.str.1032) unreachable ok1811: %t222 = getelementptr inbounds %S.parser.Parser, ptr %t220, i32 0, i32 0 %t223 = load ptr, ptr %a1 %t224 = icmp eq ptr %t223, null br i1 %t224, label %panic1812, label %ok1813 panic1812: call void @finch_panic(ptr @.str.1033, i64 752, ptr @.str.1034) unreachable ok1813: %t225 = getelementptr inbounds %S.parser.Parser, ptr %t223, i32 0, i32 1 %t226 = load i64, ptr %t225 %t227 = sub i64 %t226, 1 %t228 = load { ptr, i64, i64 }, ptr %t222 %t229 = extractvalue { ptr, i64, i64 } %t228, 1 %t230 = icmp uge i64 %t227, %t229 br i1 %t230, label %range1814, label %inrange1815 range1814: call void @finch_panic_index(ptr @.str.1035, i64 752, i64 %t227, i64 %t229) unreachable inrange1815: %t231 = extractvalue { ptr, i64, i64 } %t228, 0 %t232 = getelementptr inbounds %S.lexer.Token, ptr %t231, i64 %t227 %t233 = getelementptr inbounds %S.lexer.Token, ptr %t232, i32 0, i32 0 %t234 = load { ptr, i64, i64 }, ptr %t233 store { ptr, i64, i64 } %t234, ptr %a235 store { ptr, i64, i64 } { ptr @.str.1036, i64 5, i64 0 }, ptr %a236 %t237 = call i32 @finch_str_eq(ptr %a235, ptr %a236) %t238 = icmp ne i32 %t237, 0 br label %logic.rend1816 logic.rend1816: br label %logic.end1809 logic.end1809: %t239 = phi i1 [ false, %logic.from1807 ], [ %t238, %logic.rend1816 ] br label %logic.from1817 logic.from1817: br i1 %t239, label %logic.rhs1818, label %logic.end1819 logic.rhs1818: %t240 = load ptr, ptr %a1 %t241 = call i1 @finch.parser.genericCallAheadFrom(ptr %t240) br label %logic.rend1820 logic.rend1820: br label %logic.end1819 logic.end1819: %t242 = phi i1 [ false, %logic.from1817 ], [ %t241, %logic.rend1820 ] br i1 %t242, label %then1821, label %endif1823 then1821: %t243 = load ptr, ptr %a1 %t244 = call %S.lexer.Token @finch.parser.next(ptr %t243) %t245 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.1037, i64 5, i64 0 }, 0 %t246 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 5 store %S.ast.Type %t245, ptr %t246 br label %while.cond1824 while.cond1824: br label %while.body1825 while.body1825: %t247 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 5 %t248 = getelementptr inbounds %S.ast.Type, ptr %t247, i32 0, i32 1 %t249 = getelementptr inbounds { ptr, i64, i64 }, ptr %t248, i32 0, i32 1 %t250 = load ptr, ptr %a1 %t251 = call %S.ast.Type @finch.parser.parseType(ptr %t250) %t252 = load i64, ptr %t249 %t253 = add i64 %t252, 1 call void @finch_arr_reserve(ptr %t248, i64 %t253, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) %t254 = load ptr, ptr %t248 %t255 = getelementptr inbounds %S.ast.Type, ptr %t254, i64 %t252 store %S.ast.Type %t251, ptr %t255 store i64 %t253, ptr %t249 %t256 = load ptr, ptr %a1 %t257 = call i1 @finch.parser.accept(ptr %t256, { ptr, i64, i64 } { ptr @.str.1038, i64 1, i64 0 }) %t258 = xor i1 %t257, true br i1 %t258, label %then1827, label %endif1829 then1827: br label %while.end1826 endif1829: br label %while.cond1824 while.end1826: %t259 = load ptr, ptr %a1 %t260 = call %S.lexer.Token @finch.parser.expect(ptr %t259, { ptr, i64, i64 } { ptr @.str.1039, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.1040, i64 28, i64 0 }) %t261 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0 store { ptr, i64, i64 } { ptr @.str.1041, i64 4, i64 0 }, ptr %t261 %t262 = load ptr, ptr %a1 call void @finch.parser.parseArgs(ptr %t262, ptr %a7) %t263 = load %S.ast.Node, ptr %a7 store %S.ast.Node %t263, ptr %a264 call void @finch.copy.S_ast_Node(ptr %a265, ptr %a264) %t266 = load %S.ast.Node, ptr %a265 ret %S.ast.Node %t266 endif1823: %t267 = load ptr, ptr %a1 %t268 = call i1 @finch.parser.at(ptr %t267, { ptr, i64, i64 } { ptr @.str.1042, i64 1, i64 0 }) br label %logic.from1830 logic.from1830: br i1 %t268, label %logic.rhs1831, label %logic.end1832 logic.rhs1831: %t269 = load ptr, ptr %a1 %t270 = call %S.lexer.Token @finch.parser.cur(ptr %t269) %t271 = extractvalue %S.lexer.Token %t270, 4 %t272 = xor i1 %t271, true br label %logic.rend1833 logic.rend1833: br label %logic.end1832 logic.end1832: %t273 = phi i1 [ false, %logic.from1830 ], [ %t272, %logic.rend1833 ] br i1 %t273, label %then1834, label %endif1836 then1834: %t274 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0 store { ptr, i64, i64 } { ptr @.str.1043, i64 4, i64 0 }, ptr %t274 %t275 = load ptr, ptr %a1 call void @finch.parser.parseArgs(ptr %t275, ptr %a7) %t276 = load %S.ast.Node, ptr %a7 store %S.ast.Node %t276, ptr %a277 call void @finch.copy.S_ast_Node(ptr %a278, ptr %a277) %t279 = load %S.ast.Node, ptr %a278 ret %S.ast.Node %t279 endif1836: %t280 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0 store { ptr, i64, i64 } { ptr @.str.1044, i64 3, i64 0 }, ptr %t280 %t281 = load %S.ast.Node, ptr %a7 store %S.ast.Node %t281, ptr %a282 call void @finch.copy.S_ast_Node(ptr %a283, ptr %a282) %t284 = load %S.ast.Node, ptr %a283 ret %S.ast.Node %t284 endif1806: %t285 = load ptr, ptr %a1 %t286 = load %S.lexer.Token, ptr %a4 %t287 = load %S.lexer.Token, ptr %a4 %t288 = call { ptr, i64, i64 } @finch.parser.describe(%S.lexer.Token %t287) store { ptr, i64, i64 } { ptr @.str.1045, i64 11, i64 0 }, ptr %a290 store { ptr, i64, i64 } %t288, ptr %a291 call void @finch_str_concat(ptr %a289, ptr %a290, ptr %a291) %t292 = load { ptr, i64, i64 }, ptr %a289 store { ptr, i64, i64 } %t292, ptr %a294 store { ptr, i64, i64 } { ptr @.str.1046, i64 19, i64 0 }, ptr %a295 call void @finch_str_concat(ptr %a293, ptr %a294, ptr %a295) %t296 = load { ptr, i64, i64 }, ptr %a293 call void @finch.parser.fail(ptr %t285, %S.lexer.Token %t286, { ptr, i64, i64 } %t296) %t297 = load %S.ast.Node, ptr %a7 store %S.ast.Node %t297, ptr %a298 call void @finch.copy.S_ast_Node(ptr %a299, ptr %a298) %t300 = load %S.ast.Node, ptr %a299 ret %S.ast.Node %t300 } define internal %S.ast.Program @finch.parser.parse({ ptr, i64, i64 } %p0, i64 %p1, { ptr, i64, i64 } %p2) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a2 = alloca i64, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca %S.parser.Parser, align 16 store { ptr, i64, i64 } %p0, ptr %a1 store i64 %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 %t4 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t4, ptr %a5 call void @finch.copy.arr_S_lexer_Token(ptr %a6, ptr %a5) %t7 = load { ptr, i64, i64 }, ptr %a6 %t8 = insertvalue %S.parser.Parser zeroinitializer, { ptr, i64, i64 } %t7, 0 %t9 = insertvalue %S.parser.Parser %t8, i64 0, 1 %t10 = insertvalue %S.parser.Parser %t9, i64 0, 2 %t11 = load i64, ptr %a2 %t12 = insertvalue %S.parser.Parser %t10, i64 %t11, 3 %t13 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t13, ptr %a14 call void @finch_str_copy(ptr %a15, ptr %a14) %t16 = load { ptr, i64, i64 }, ptr %a15 %t17 = insertvalue %S.parser.Parser %t12, { ptr, i64, i64 } %t16, 4 store %S.parser.Parser %t17, ptr %a18 %t19 = call %S.ast.Program @finch.parser.parseProgram(ptr %a18) ret %S.ast.Program %t19 } define internal { ptr, i64, i64 } @finch.gen.esc({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t2, ptr %a3 store { ptr, i64, i64 } { ptr @.str.1048, i64 1, i64 0 }, ptr %a5 store { ptr, i64, i64 } { ptr @.str.1049, i64 2, i64 0 }, ptr %a6 call void @finch_str_replace(ptr %a4, ptr %a3, ptr %a5, ptr %a6) %t7 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t7, ptr %a8 store { ptr, i64, i64 } { ptr @.str.1051, i64 1, i64 0 }, ptr %a10 store { ptr, i64, i64 } { ptr @.str.1052, i64 2, i64 0 }, ptr %a11 call void @finch_str_replace(ptr %a9, ptr %a8, ptr %a10, ptr %a11) %t12 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t12, ptr %a13 store { ptr, i64, i64 } { ptr @.str.1054, i64 1, i64 0 }, ptr %a15 store { ptr, i64, i64 } { ptr @.str.1055, i64 1, i64 0 }, ptr %a16 call void @finch_str_replace(ptr %a14, ptr %a13, ptr %a15, ptr %a16) %t17 = load { ptr, i64, i64 }, ptr %a14 ret { ptr, i64, i64 } %t17 } define internal void @finch.gen.noteRef(ptr %p0, %S.ast.Node %p1, i64 %p2, i64 %p3, { ptr, i64, i64 } %p4, { ptr, i64, i64 } %p5, i64 %p6, i64 %p7) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a3 = alloca i64, align 16 %a4 = alloca i64, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca i64, align 16 %a8 = alloca i64, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a85 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca { ptr, i64, i64 }, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca { ptr, i64, i64 }, align 16 %a104 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 %a106 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 store i64 %p2, ptr %a3 store i64 %p3, ptr %a4 store { ptr, i64, i64 } %p4, ptr %a5 store { ptr, i64, i64 } %p5, ptr %a6 store i64 %p6, ptr %a7 store i64 %p7, ptr %a8 %t9 = load ptr, ptr %a1 %t10 = icmp eq ptr %t9, null br i1 %t10, label %panic1837, label %ok1838 panic1837: call void @finch_panic(ptr @.str.1056, i64 195, ptr @.str.1057) unreachable ok1838: %t11 = getelementptr inbounds %S.gen.Gen, ptr %t9, i32 0, i32 26 %t12 = load i1, ptr %t11 %t13 = xor i1 %t12, true br i1 %t13, label %then1839, label %endif1841 then1839: ret void endif1841: %t14 = load ptr, ptr %a1 %t15 = icmp eq ptr %t14, null br i1 %t15, label %panic1842, label %ok1843 panic1842: call void @finch_panic(ptr @.str.1058, i64 198, ptr @.str.1059) unreachable ok1843: %t16 = getelementptr inbounds %S.gen.Gen, ptr %t14, i32 0, i32 27 %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t16, i32 0, i32 1 %t18 = load ptr, ptr %a1 %t19 = icmp eq ptr %t18, null br i1 %t19, label %panic1844, label %ok1845 panic1844: call void @finch_panic(ptr @.str.1061, i64 198, ptr @.str.1062) unreachable ok1845: %t20 = getelementptr inbounds %S.gen.Gen, ptr %t18, i32 0, i32 1 %t21 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 %t22 = load i64, ptr %t21 %t23 = load { ptr, i64, i64 }, ptr %t20 %t24 = extractvalue { ptr, i64, i64 } %t23, 1 %t25 = icmp uge i64 %t22, %t24 br i1 %t25, label %range1846, label %inrange1847 range1846: call void @finch_panic_index(ptr @.str.1063, i64 198, i64 %t22, i64 %t24) unreachable inrange1847: %t26 = extractvalue { ptr, i64, i64 } %t23, 0 %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %t26, i64 %t22 %t28 = load { ptr, i64, i64 }, ptr %t27 store { ptr, i64, i64 } { ptr @.str.1060, i64 3, i64 0 }, ptr %a30 store { ptr, i64, i64 } %t28, ptr %a31 call void @finch_str_concat(ptr %a29, ptr %a30, ptr %a31) %t32 = load { ptr, i64, i64 }, ptr %a29 store { ptr, i64, i64 } %t32, ptr %a34 store { ptr, i64, i64 } { ptr @.str.1064, i64 1, i64 0 }, ptr %a35 call void @finch_str_concat(ptr %a33, ptr %a34, ptr %a35) %t36 = load { ptr, i64, i64 }, ptr %a33 %t37 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 %t38 = load i64, ptr %t37 call void @finch_str_from_int(ptr %a39, i64 %t38) %t40 = load { ptr, i64, i64 }, ptr %a39 store { ptr, i64, i64 } %t36, ptr %a42 store { ptr, i64, i64 } %t40, ptr %a43 call void @finch_str_concat(ptr %a41, ptr %a42, ptr %a43) %t44 = load { ptr, i64, i64 }, ptr %a41 store { ptr, i64, i64 } %t44, ptr %a46 store { ptr, i64, i64 } { ptr @.str.1065, i64 1, i64 0 }, ptr %a47 call void @finch_str_concat(ptr %a45, ptr %a46, ptr %a47) %t48 = load { ptr, i64, i64 }, ptr %a45 %t49 = load i64, ptr %a3 call void @finch_str_from_int(ptr %a50, i64 %t49) %t51 = load { ptr, i64, i64 }, ptr %a50 store { ptr, i64, i64 } %t48, ptr %a53 store { ptr, i64, i64 } %t51, ptr %a54 call void @finch_str_concat(ptr %a52, ptr %a53, ptr %a54) %t55 = load { ptr, i64, i64 }, ptr %a52 store { ptr, i64, i64 } %t55, ptr %a57 store { ptr, i64, i64 } { ptr @.str.1066, i64 1, i64 0 }, ptr %a58 call void @finch_str_concat(ptr %a56, ptr %a57, ptr %a58) %t59 = load { ptr, i64, i64 }, ptr %a56 %t60 = load i64, ptr %a4 call void @finch_str_from_int(ptr %a61, i64 %t60) %t62 = load { ptr, i64, i64 }, ptr %a61 store { ptr, i64, i64 } %t59, ptr %a64 store { ptr, i64, i64 } %t62, ptr %a65 call void @finch_str_concat(ptr %a63, ptr %a64, ptr %a65) %t66 = load { ptr, i64, i64 }, ptr %a63 store { ptr, i64, i64 } %t66, ptr %a68 store { ptr, i64, i64 } { ptr @.str.1067, i64 1, i64 0 }, ptr %a69 call void @finch_str_concat(ptr %a67, ptr %a68, ptr %a69) %t70 = load { ptr, i64, i64 }, ptr %a67 %t71 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t70, ptr %a73 store { ptr, i64, i64 } %t71, ptr %a74 call void @finch_str_concat(ptr %a72, ptr %a73, ptr %a74) %t75 = load { ptr, i64, i64 }, ptr %a72 store { ptr, i64, i64 } %t75, ptr %a77 store { ptr, i64, i64 } { ptr @.str.1068, i64 1, i64 0 }, ptr %a78 call void @finch_str_concat(ptr %a76, ptr %a77, ptr %a78) %t79 = load { ptr, i64, i64 }, ptr %a76 %t80 = load i64, ptr %a7 call void @finch_str_from_int(ptr %a81, i64 %t80) %t82 = load { ptr, i64, i64 }, ptr %a81 store { ptr, i64, i64 } %t79, ptr %a84 store { ptr, i64, i64 } %t82, ptr %a85 call void @finch_str_concat(ptr %a83, ptr %a84, ptr %a85) %t86 = load { ptr, i64, i64 }, ptr %a83 store { ptr, i64, i64 } %t86, ptr %a88 store { ptr, i64, i64 } { ptr @.str.1069, i64 1, i64 0 }, ptr %a89 call void @finch_str_concat(ptr %a87, ptr %a88, ptr %a89) %t90 = load { ptr, i64, i64 }, ptr %a87 %t91 = load i64, ptr %a8 call void @finch_str_from_int(ptr %a92, i64 %t91) %t93 = load { ptr, i64, i64 }, ptr %a92 store { ptr, i64, i64 } %t90, ptr %a95 store { ptr, i64, i64 } %t93, ptr %a96 call void @finch_str_concat(ptr %a94, ptr %a95, ptr %a96) %t97 = load { ptr, i64, i64 }, ptr %a94 store { ptr, i64, i64 } %t97, ptr %a99 store { ptr, i64, i64 } { ptr @.str.1070, i64 1, i64 0 }, ptr %a100 call void @finch_str_concat(ptr %a98, ptr %a99, ptr %a100) %t101 = load { ptr, i64, i64 }, ptr %a98 %t102 = load { ptr, i64, i64 }, ptr %a5 %t103 = call { ptr, i64, i64 } @finch.gen.esc({ ptr, i64, i64 } %t102) store { ptr, i64, i64 } %t101, ptr %a105 store { ptr, i64, i64 } %t103, ptr %a106 call void @finch_str_concat(ptr %a104, ptr %a105, ptr %a106) %t107 = load { ptr, i64, i64 }, ptr %a104 %t108 = load i64, ptr %t17 %t109 = add i64 %t108, 1 call void @finch_arr_reserve(ptr %t16, i64 %t109, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t110 = load ptr, ptr %t16 %t111 = getelementptr inbounds { ptr, i64, i64 }, ptr %t110, i64 %t108 store { ptr, i64, i64 } %t107, ptr %t111 store i64 %t109, ptr %t17 ret void } define internal { ptr, i64, i64 } @finch.gen.sigText(%S.gen.FnSig %p0) { entry: %a1 = alloca %S.gen.FnSig, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca i64, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca { ptr, i64, i64 }, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca { ptr, i64, i64 }, align 16 %a111 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 %a113 = alloca { ptr, i64, i64 }, align 16 %a118 = alloca { ptr, i64, i64 }, align 16 %a119 = alloca { ptr, i64, i64 }, align 16 %a123 = alloca { ptr, i64, i64 }, align 16 %a124 = alloca { ptr, i64, i64 }, align 16 %a125 = alloca { ptr, i64, i64 }, align 16 %a130 = alloca { ptr, i64, i64 }, align 16 %a131 = alloca { ptr, i64, i64 }, align 16 %a132 = alloca { ptr, i64, i64 }, align 16 %a135 = alloca { ptr, i64, i64 }, align 16 %a136 = alloca { ptr, i64, i64 }, align 16 store %S.gen.FnSig %p0, ptr %a1 store { ptr, i64, i64 } zeroinitializer, ptr %a2 %t3 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 13 %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i32 0, i32 1 %t5 = load i64, ptr %t4 store i64 0, ptr %a6 br label %for.cond1848 for.cond1848: %t7 = load i64, ptr %a6 %t8 = icmp slt i64 %t7, %t5 br i1 %t8, label %for.body1849, label %for.end1851 for.body1849: %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t10 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 13 %t11 = load i64, ptr %a6 %t12 = load { ptr, i64, i64 }, ptr %t10 %t13 = extractvalue { ptr, i64, i64 } %t12, 1 %t14 = icmp uge i64 %t11, %t13 br i1 %t14, label %range1852, label %inrange1853 range1852: call void @finch_panic_index(ptr @.str.1071, i64 205, i64 %t11, i64 %t13) unreachable inrange1853: %t15 = extractvalue { ptr, i64, i64 } %t12, 0 %t16 = getelementptr inbounds %S.ast.Type, ptr %t15, i64 %t11 %t17 = load %S.ast.Type, ptr %t16 %t18 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t17) store { ptr, i64, i64 } %t18, ptr %a20 store { ptr, i64, i64 } { ptr @.str.1072, i64 1, i64 0 }, ptr %a21 call void @finch_str_concat(ptr %a19, ptr %a20, ptr %a21) %t22 = load { ptr, i64, i64 }, ptr %a19 %t23 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 14 %t24 = load i64, ptr %a6 %t25 = load { ptr, i64, i64 }, ptr %t23 %t26 = extractvalue { ptr, i64, i64 } %t25, 1 %t27 = icmp uge i64 %t24, %t26 br i1 %t27, label %range1854, label %inrange1855 range1854: call void @finch_panic_index(ptr @.str.1073, i64 205, i64 %t24, i64 %t26) unreachable inrange1855: %t28 = extractvalue { ptr, i64, i64 } %t25, 0 %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %t28, i64 %t24 %t30 = load { ptr, i64, i64 }, ptr %t29 store { ptr, i64, i64 } %t22, ptr %a32 store { ptr, i64, i64 } %t30, ptr %a33 call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33) %t34 = load { ptr, i64, i64 }, ptr %a31 %t35 = load i64, ptr %t9 %t36 = add i64 %t35, 1 call void @finch_arr_reserve(ptr %a2, i64 %t36, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t37 = load ptr, ptr %a2 %t38 = getelementptr inbounds { ptr, i64, i64 }, ptr %t37, i64 %t35 store { ptr, i64, i64 } %t34, ptr %t38 store i64 %t36, ptr %t9 br label %for.step1850 for.step1850: %t39 = load i64, ptr %a6 %t40 = add i64 %t39, 1 store i64 %t40, ptr %a6 br label %for.cond1848 for.end1851: %t41 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 1 %t42 = load { ptr, i64, i64 }, ptr %t41 store { ptr, i64, i64 } %t42, ptr %a43 call void @finch_str_copy(ptr %a44, ptr %a43) %t45 = load { ptr, i64, i64 }, ptr %a44 store { ptr, i64, i64 } %t45, ptr %a46 %t47 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 2 %t48 = getelementptr inbounds { ptr, i64, i64 }, ptr %t47, i32 0, i32 1 %t49 = load i64, ptr %t48 %t50 = icmp sgt i64 %t49, 0 br i1 %t50, label %then1856, label %endif1858 then1856: %t51 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 2 %t52 = load { ptr, i64, i64 }, ptr %t51 store { ptr, i64, i64 } %t52, ptr %a54 store { ptr, i64, i64 } { ptr @.str.1074, i64 1, i64 0 }, ptr %a55 call void @finch_str_concat(ptr %a53, ptr %a54, ptr %a55) %t56 = load { ptr, i64, i64 }, ptr %a53 %t57 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 1 %t58 = load { ptr, i64, i64 }, ptr %t57 store { ptr, i64, i64 } %t56, ptr %a60 store { ptr, i64, i64 } %t58, ptr %a61 call void @finch_str_concat(ptr %a59, ptr %a60, ptr %a61) %t62 = load { ptr, i64, i64 }, ptr %a59 store { ptr, i64, i64 } %t62, ptr %a46 br label %endif1858 endif1858: %t63 = load { ptr, i64, i64 }, ptr %a46 store { ptr, i64, i64 } { ptr @.str.1075, i64 3, i64 0 }, ptr %a65 store { ptr, i64, i64 } %t63, ptr %a66 call void @finch_str_concat(ptr %a64, ptr %a65, ptr %a66) %t67 = load { ptr, i64, i64 }, ptr %a64 store { ptr, i64, i64 } %t67, ptr %a69 store { ptr, i64, i64 } { ptr @.str.1076, i64 1, i64 0 }, ptr %a70 call void @finch_str_concat(ptr %a68, ptr %a69, ptr %a70) %t71 = load { ptr, i64, i64 }, ptr %a68 %t72 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.1077, i64 2, i64 0 }, ptr %a73 call void @finch_str_join(ptr %a74, ptr %a2, ptr %a73) %t75 = load { ptr, i64, i64 }, ptr %a74 store { ptr, i64, i64 } %t71, ptr %a77 store { ptr, i64, i64 } %t75, ptr %a78 call void @finch_str_concat(ptr %a76, ptr %a77, ptr %a78) %t79 = load { ptr, i64, i64 }, ptr %a76 store { ptr, i64, i64 } %t79, ptr %a81 store { ptr, i64, i64 } { ptr @.str.1078, i64 1, i64 0 }, ptr %a82 call void @finch_str_concat(ptr %a80, ptr %a81, ptr %a82) %t83 = load { ptr, i64, i64 }, ptr %a80 store { ptr, i64, i64 } %t83, ptr %a84 %t85 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 9 %t86 = load i1, ptr %t85 br i1 %t86, label %then1859, label %else1860 then1859: %t87 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 12 %t88 = getelementptr inbounds %S.ast.Type, ptr %t87, i32 0, i32 0 %t89 = load { ptr, i64, i64 }, ptr %t88 store { ptr, i64, i64 } %t89, ptr %a90 store { ptr, i64, i64 } { ptr @.str.1079, i64 4, i64 0 }, ptr %a91 %t92 = call i32 @finch_str_eq(ptr %a90, ptr %a91) %t93 = icmp ne i32 %t92, 0 br i1 %t93, label %then1862, label %else1863 then1862: %t94 = load { ptr, i64, i64 }, ptr %a84 store { ptr, i64, i64 } %t94, ptr %a96 store { ptr, i64, i64 } { ptr @.str.1080, i64 5, i64 0 }, ptr %a97 call void @finch_str_concat(ptr %a95, ptr %a96, ptr %a97) %t98 = load { ptr, i64, i64 }, ptr %a95 store { ptr, i64, i64 } %t98, ptr %a84 br label %endif1864 else1863: %t99 = load { ptr, i64, i64 }, ptr %a84 store { ptr, i64, i64 } %t99, ptr %a101 store { ptr, i64, i64 } { ptr @.str.1081, i64 4, i64 0 }, ptr %a102 call void @finch_str_concat(ptr %a100, ptr %a101, ptr %a102) %t103 = load { ptr, i64, i64 }, ptr %a100 %t104 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 12 %t105 = load %S.ast.Type, ptr %t104 %t106 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t105) store { ptr, i64, i64 } %t103, ptr %a108 store { ptr, i64, i64 } %t106, ptr %a109 call void @finch_str_concat(ptr %a107, ptr %a108, ptr %a109) %t110 = load { ptr, i64, i64 }, ptr %a107 store { ptr, i64, i64 } %t110, ptr %a112 store { ptr, i64, i64 } { ptr @.str.1082, i64 1, i64 0 }, ptr %a113 call void @finch_str_concat(ptr %a111, ptr %a112, ptr %a113) %t114 = load { ptr, i64, i64 }, ptr %a111 store { ptr, i64, i64 } %t114, ptr %a84 br label %endif1864 endif1864: br label %endif1861 else1860: %t115 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 12 %t116 = getelementptr inbounds %S.ast.Type, ptr %t115, i32 0, i32 0 %t117 = load { ptr, i64, i64 }, ptr %t116 store { ptr, i64, i64 } %t117, ptr %a118 store { ptr, i64, i64 } { ptr @.str.1083, i64 4, i64 0 }, ptr %a119 %t120 = call i32 @finch_str_eq(ptr %a118, ptr %a119) %t121 = icmp eq i32 %t120, 0 br i1 %t121, label %then1865, label %endif1867 then1865: %t122 = load { ptr, i64, i64 }, ptr %a84 store { ptr, i64, i64 } %t122, ptr %a124 store { ptr, i64, i64 } { ptr @.str.1084, i64 4, i64 0 }, ptr %a125 call void @finch_str_concat(ptr %a123, ptr %a124, ptr %a125) %t126 = load { ptr, i64, i64 }, ptr %a123 %t127 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 12 %t128 = load %S.ast.Type, ptr %t127 %t129 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t128) store { ptr, i64, i64 } %t126, ptr %a131 store { ptr, i64, i64 } %t129, ptr %a132 call void @finch_str_concat(ptr %a130, ptr %a131, ptr %a132) %t133 = load { ptr, i64, i64 }, ptr %a130 store { ptr, i64, i64 } %t133, ptr %a84 br label %endif1867 endif1867: br label %endif1861 endif1861: %t134 = load { ptr, i64, i64 }, ptr %a84 store { ptr, i64, i64 } %t134, ptr %a135 call void @finch_str_copy(ptr %a136, ptr %a135) %t137 = load { ptr, i64, i64 }, ptr %a136 ret { ptr, i64, i64 } %t137 } define internal void @finch.gen.noteCall(ptr %p0, %S.ast.Node %p1, %S.gen.FnSig %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a3 = alloca %S.gen.FnSig, align 16 %a11 = alloca i64, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca %S.ast.Node, align 16 %a41 = alloca %S.ast.Node, align 16 %a43 = alloca %S.ast.Node, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 store %S.gen.FnSig %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = icmp eq ptr %t4, null br i1 %t5, label %panic1868, label %ok1869 panic1868: call void @finch_panic(ptr @.str.1085, i64 226, ptr @.str.1086) unreachable ok1869: %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 26 %t7 = load i1, ptr %t6 %t8 = xor i1 %t7, true br i1 %t8, label %then1870, label %endif1872 then1870: ret void endif1872: %t9 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 %t10 = load i64, ptr %t9 store i64 %t10, ptr %a11 %t12 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 %t13 = load { ptr, i64, i64 }, ptr %t12 store { ptr, i64, i64 } %t13, ptr %a14 store { ptr, i64, i64 } { ptr @.str.1087, i64 6, i64 0 }, ptr %a15 %t16 = call i32 @finch_str_eq(ptr %a14, ptr %a15) %t17 = icmp ne i32 %t16, 0 br i1 %t17, label %then1873, label %endif1875 then1873: %t18 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 %t19 = load i64, ptr %t18 %t20 = add i64 %t19, 1 store i64 %t20, ptr %a11 br label %endif1875 endif1875: %t21 = load ptr, ptr %a1 %t22 = icmp eq ptr %t21, null br i1 %t22, label %panic1876, label %ok1877 panic1876: call void @finch_panic(ptr @.str.1088, i64 233, ptr @.str.1089) unreachable ok1877: %t23 = getelementptr inbounds %S.gen.Gen, ptr %t21, i32 0, i32 0 %t24 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 16 %t25 = load i64, ptr %t24 %t26 = load { ptr, i64, i64 }, ptr %t23 %t27 = extractvalue { ptr, i64, i64 } %t26, 1 %t28 = icmp uge i64 %t25, %t27 br i1 %t28, label %range1878, label %inrange1879 range1878: call void @finch_panic_index(ptr @.str.1090, i64 233, i64 %t25, i64 %t27) unreachable inrange1879: %t29 = extractvalue { ptr, i64, i64 } %t26, 0 %t30 = getelementptr inbounds %S.ast.Program, ptr %t29, i64 %t25 %t31 = getelementptr inbounds %S.ast.Program, ptr %t30, i32 0, i32 8 %t32 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 17 %t33 = load i64, ptr %t32 %t34 = load { ptr, i64, i64 }, ptr %t31 %t35 = extractvalue { ptr, i64, i64 } %t34, 1 %t36 = icmp uge i64 %t33, %t35 br i1 %t36, label %range1880, label %inrange1881 range1880: call void @finch_panic_index(ptr @.str.1091, i64 233, i64 %t33, i64 %t35) unreachable inrange1881: %t37 = extractvalue { ptr, i64, i64 } %t34, 0 %t38 = getelementptr inbounds %S.ast.Node, ptr %t37, i64 %t33 %t39 = load %S.ast.Node, ptr %t38 store %S.ast.Node %t39, ptr %a40 call void @finch.copy.S_ast_Node(ptr %a41, ptr %a40) %t42 = load %S.ast.Node, ptr %a41 store %S.ast.Node %t42, ptr %a43 %t44 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 1 %t45 = load { ptr, i64, i64 }, ptr %t44 store { ptr, i64, i64 } %t45, ptr %a46 call void @finch_str_copy(ptr %a47, ptr %a46) %t48 = load { ptr, i64, i64 }, ptr %a47 store { ptr, i64, i64 } %t48, ptr %a49 %t50 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 7 %t51 = getelementptr inbounds { ptr, i64, i64 }, ptr %t50, i32 0, i32 1 %t52 = load i64, ptr %t51 %t53 = icmp sgt i64 %t52, 0 br label %logic.from1882 logic.from1882: br i1 %t53, label %logic.rhs1883, label %logic.end1884 logic.rhs1883: %t54 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 2 %t55 = getelementptr inbounds { ptr, i64, i64 }, ptr %t54, i32 0, i32 1 %t56 = load i64, ptr %t55 %t57 = icmp eq i64 %t56, 0 br label %logic.rend1885 logic.rend1885: br label %logic.end1884 logic.end1884: %t58 = phi i1 [ false, %logic.from1882 ], [ %t57, %logic.rend1885 ] br i1 %t58, label %then1886, label %endif1888 then1886: %t59 = getelementptr inbounds %S.ast.Node, ptr %a43, i32 0, i32 1 %t60 = load { ptr, i64, i64 }, ptr %t59 store { ptr, i64, i64 } %t60, ptr %a61 call void @finch_str_copy(ptr %a62, ptr %a61) %t63 = load { ptr, i64, i64 }, ptr %a62 store { ptr, i64, i64 } %t63, ptr %a49 br label %endif1888 endif1888: %t64 = load ptr, ptr %a1 %t65 = load %S.ast.Node, ptr %a2 %t66 = load i64, ptr %a11 %t67 = getelementptr inbounds { ptr, i64, i64 }, ptr %a49, i32 0, i32 1 %t68 = load i64, ptr %t67 %t69 = load %S.gen.FnSig, ptr %a3 %t70 = call { ptr, i64, i64 } @finch.gen.sigText(%S.gen.FnSig %t69) store { ptr, i64, i64 } { ptr @.str.1092, i64 9, i64 0 }, ptr %a72 store { ptr, i64, i64 } %t70, ptr %a73 call void @finch_str_concat(ptr %a71, ptr %a72, ptr %a73) %t74 = load { ptr, i64, i64 }, ptr %a71 store { ptr, i64, i64 } %t74, ptr %a76 store { ptr, i64, i64 } { ptr @.str.1093, i64 4, i64 0 }, ptr %a77 call void @finch_str_concat(ptr %a75, ptr %a76, ptr %a77) %t78 = load { ptr, i64, i64 }, ptr %a75 %t79 = load ptr, ptr %a1 %t80 = icmp eq ptr %t79, null br i1 %t80, label %panic1889, label %ok1890 panic1889: call void @finch_panic(ptr @.str.1094, i64 238, ptr @.str.1095) unreachable ok1890: %t81 = getelementptr inbounds %S.gen.Gen, ptr %t79, i32 0, i32 1 %t82 = getelementptr inbounds %S.ast.Node, ptr %a43, i32 0, i32 13 %t83 = load i64, ptr %t82 %t84 = load { ptr, i64, i64 }, ptr %t81 %t85 = extractvalue { ptr, i64, i64 } %t84, 1 %t86 = icmp uge i64 %t83, %t85 br i1 %t86, label %range1891, label %inrange1892 range1891: call void @finch_panic_index(ptr @.str.1096, i64 238, i64 %t83, i64 %t85) unreachable inrange1892: %t87 = extractvalue { ptr, i64, i64 } %t84, 0 %t88 = getelementptr inbounds { ptr, i64, i64 }, ptr %t87, i64 %t83 %t89 = load { ptr, i64, i64 }, ptr %t88 %t90 = getelementptr inbounds %S.ast.Node, ptr %a43, i32 0, i32 11 %t91 = load i64, ptr %t90 %t92 = getelementptr inbounds %S.ast.Node, ptr %a43, i32 0, i32 12 %t93 = load i64, ptr %t92 %t94 = add i64 %t93, 3 call void @finch.gen.noteRef(ptr %t64, %S.ast.Node %t65, i64 %t66, i64 %t68, { ptr, i64, i64 } %t78, { ptr, i64, i64 } %t89, i64 %t91, i64 %t94) ret void } define internal void @finch.copy.arr_bool(ptr %dst, ptr %src) { entry: call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (i1, ptr null, i32 1) to i64)) ret void } define internal void @finch.copy.S_gen_FnSig(ptr %dst, ptr %src) { entry: %t1 = load %S.gen.FnSig, ptr %src store %S.gen.FnSig %t1, ptr %dst %t2 = getelementptr inbounds %S.gen.FnSig, ptr %dst, i32 0, i32 0 %t3 = getelementptr inbounds %S.gen.FnSig, ptr %src, i32 0, i32 0 call void @finch_str_copy(ptr %t2, ptr %t3) %t4 = getelementptr inbounds %S.gen.FnSig, ptr %dst, i32 0, i32 1 %t5 = getelementptr inbounds %S.gen.FnSig, ptr %src, i32 0, i32 1 call void @finch_str_copy(ptr %t4, ptr %t5) %t6 = getelementptr inbounds %S.gen.FnSig, ptr %dst, i32 0, i32 2 %t7 = getelementptr inbounds %S.gen.FnSig, ptr %src, i32 0, i32 2 call void @finch_str_copy(ptr %t6, ptr %t7) %t8 = getelementptr inbounds %S.gen.FnSig, ptr %dst, i32 0, i32 3 %t9 = getelementptr inbounds %S.gen.FnSig, ptr %src, i32 0, i32 3 call void @finch_str_copy(ptr %t8, ptr %t9) %t10 = getelementptr inbounds %S.gen.FnSig, ptr %dst, i32 0, i32 6 %t11 = getelementptr inbounds %S.gen.FnSig, ptr %src, i32 0, i32 6 call void @finch.copy.arr_str(ptr %t10, ptr %t11) %t12 = getelementptr inbounds %S.gen.FnSig, ptr %dst, i32 0, i32 7 %t13 = getelementptr inbounds %S.gen.FnSig, ptr %src, i32 0, i32 7 call void @finch.copy.arr_S_ast_Type(ptr %t12, ptr %t13) %t14 = getelementptr inbounds %S.gen.FnSig, ptr %dst, i32 0, i32 8 %t15 = getelementptr inbounds %S.gen.FnSig, ptr %src, i32 0, i32 8 call void @finch_str_copy(ptr %t14, ptr %t15) %t16 = getelementptr inbounds %S.gen.FnSig, ptr %dst, i32 0, i32 11 %t17 = getelementptr inbounds %S.gen.FnSig, ptr %src, i32 0, i32 11 call void @finch_str_copy(ptr %t16, ptr %t17) %t18 = getelementptr inbounds %S.gen.FnSig, ptr %dst, i32 0, i32 12 %t19 = getelementptr inbounds %S.gen.FnSig, ptr %src, i32 0, i32 12 call void @finch.copy.S_ast_Type(ptr %t18, ptr %t19) %t20 = getelementptr inbounds %S.gen.FnSig, ptr %dst, i32 0, i32 13 %t21 = getelementptr inbounds %S.gen.FnSig, ptr %src, i32 0, i32 13 call void @finch.copy.arr_S_ast_Type(ptr %t20, ptr %t21) %t22 = getelementptr inbounds %S.gen.FnSig, ptr %dst, i32 0, i32 14 %t23 = getelementptr inbounds %S.gen.FnSig, ptr %src, i32 0, i32 14 call void @finch.copy.arr_str(ptr %t22, ptr %t23) %t24 = getelementptr inbounds %S.gen.FnSig, ptr %dst, i32 0, i32 15 %t25 = getelementptr inbounds %S.gen.FnSig, ptr %src, i32 0, i32 15 call void @finch.copy.arr_bool(ptr %t24, ptr %t25) ret void } define internal void @finch.copy.S_gen_Template(ptr %dst, ptr %src) { entry: %t1 = load %S.gen.Template, ptr %src store %S.gen.Template %t1, ptr %dst %t2 = getelementptr inbounds %S.gen.Template, ptr %dst, i32 0, i32 0 %t3 = getelementptr inbounds %S.gen.Template, ptr %src, i32 0, i32 0 call void @finch_str_copy(ptr %t2, ptr %t3) %t4 = getelementptr inbounds %S.gen.Template, ptr %dst, i32 0, i32 1 %t5 = getelementptr inbounds %S.gen.Template, ptr %src, i32 0, i32 1 call void @finch_str_copy(ptr %t4, ptr %t5) %t6 = getelementptr inbounds %S.gen.Template, ptr %dst, i32 0, i32 2 %t7 = getelementptr inbounds %S.gen.Template, ptr %src, i32 0, i32 2 call void @finch_str_copy(ptr %t6, ptr %t7) %t8 = getelementptr inbounds %S.gen.Template, ptr %dst, i32 0, i32 3 %t9 = getelementptr inbounds %S.gen.Template, ptr %src, i32 0, i32 3 call void @finch.copy.arr_str(ptr %t8, ptr %t9) ret void } define internal void @finch.copy.arr_int(ptr %dst, ptr %src) { entry: call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (i64, ptr null, i32 1) to i64)) ret void } define internal void @finch.copy.S_gen_StructDef(ptr %dst, ptr %src) { entry: %t1 = load %S.gen.StructDef, ptr %src store %S.gen.StructDef %t1, ptr %dst %t2 = getelementptr inbounds %S.gen.StructDef, ptr %dst, i32 0, i32 0 %t3 = getelementptr inbounds %S.gen.StructDef, ptr %src, i32 0, i32 0 call void @finch_str_copy(ptr %t2, ptr %t3) %t4 = getelementptr inbounds %S.gen.StructDef, ptr %dst, i32 0, i32 1 %t5 = getelementptr inbounds %S.gen.StructDef, ptr %src, i32 0, i32 1 call void @finch_str_copy(ptr %t4, ptr %t5) %t6 = getelementptr inbounds %S.gen.StructDef, ptr %dst, i32 0, i32 3 %t7 = getelementptr inbounds %S.gen.StructDef, ptr %src, i32 0, i32 3 call void @finch.copy.arr_int(ptr %t6, ptr %t7) %t8 = getelementptr inbounds %S.gen.StructDef, ptr %dst, i32 0, i32 4 %t9 = getelementptr inbounds %S.gen.StructDef, ptr %src, i32 0, i32 4 call void @finch.copy.arr_int(ptr %t8, ptr %t9) %t10 = getelementptr inbounds %S.gen.StructDef, ptr %dst, i32 0, i32 5 %t11 = getelementptr inbounds %S.gen.StructDef, ptr %src, i32 0, i32 5 call void @finch_str_copy(ptr %t10, ptr %t11) %t12 = getelementptr inbounds %S.gen.StructDef, ptr %dst, i32 0, i32 6 %t13 = getelementptr inbounds %S.gen.StructDef, ptr %src, i32 0, i32 6 call void @finch.copy.arr_str(ptr %t12, ptr %t13) %t14 = getelementptr inbounds %S.gen.StructDef, ptr %dst, i32 0, i32 7 %t15 = getelementptr inbounds %S.gen.StructDef, ptr %src, i32 0, i32 7 call void @finch.copy.arr_S_ast_Type(ptr %t14, ptr %t15) %t16 = getelementptr inbounds %S.gen.StructDef, ptr %dst, i32 0, i32 8 %t17 = getelementptr inbounds %S.gen.StructDef, ptr %src, i32 0, i32 8 call void @finch_str_copy(ptr %t16, ptr %t17) %t18 = getelementptr inbounds %S.gen.StructDef, ptr %dst, i32 0, i32 11 %t19 = getelementptr inbounds %S.gen.StructDef, ptr %src, i32 0, i32 11 call void @finch.copy.arr_str(ptr %t18, ptr %t19) %t20 = getelementptr inbounds %S.gen.StructDef, ptr %dst, i32 0, i32 12 %t21 = getelementptr inbounds %S.gen.StructDef, ptr %src, i32 0, i32 12 call void @finch.copy.arr_S_ast_Type(ptr %t20, ptr %t21) ret void } define internal void @finch.gen.indexAll(ptr %p0, { ptr, i64, i64 } %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca i64, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca i64, align 16 %a38 = alloca %S.gen.FnSig, align 16 %a39 = alloca %S.gen.FnSig, align 16 %a41 = alloca %S.gen.FnSig, align 16 %a61 = alloca %S.ast.Node, align 16 %a62 = alloca %S.ast.Node, align 16 %a64 = alloca %S.ast.Node, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca i64, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca { ptr, i64, i64 }, align 16 %a114 = alloca { ptr, i64, i64 }, align 16 %a115 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca { ptr, i64, i64 }, align 16 %a118 = alloca { ptr, i64, i64 }, align 16 %a119 = alloca { ptr, i64, i64 }, align 16 %a120 = alloca { ptr, i64, i64 }, align 16 %a124 = alloca { ptr, i64, i64 }, align 16 %a125 = alloca { ptr, i64, i64 }, align 16 %a126 = alloca { ptr, i64, i64 }, align 16 %a128 = alloca { ptr, i64, i64 }, align 16 %a129 = alloca { ptr, i64, i64 }, align 16 %a130 = alloca { ptr, i64, i64 }, align 16 %a134 = alloca { ptr, i64, i64 }, align 16 %a135 = alloca { ptr, i64, i64 }, align 16 %a136 = alloca { ptr, i64, i64 }, align 16 %a138 = alloca { ptr, i64, i64 }, align 16 %a139 = alloca { ptr, i64, i64 }, align 16 %a140 = alloca { ptr, i64, i64 }, align 16 %a153 = alloca { ptr, i64, i64 }, align 16 %a154 = alloca { ptr, i64, i64 }, align 16 %a155 = alloca { ptr, i64, i64 }, align 16 %a157 = alloca { ptr, i64, i64 }, align 16 %a158 = alloca { ptr, i64, i64 }, align 16 %a159 = alloca { ptr, i64, i64 }, align 16 %a163 = alloca { ptr, i64, i64 }, align 16 %a165 = alloca { ptr, i64, i64 }, align 16 %a166 = alloca { ptr, i64, i64 }, align 16 %a167 = alloca { ptr, i64, i64 }, align 16 %a169 = alloca { ptr, i64, i64 }, align 16 %a170 = alloca { ptr, i64, i64 }, align 16 %a171 = alloca { ptr, i64, i64 }, align 16 %a175 = alloca { ptr, i64, i64 }, align 16 %a177 = alloca { ptr, i64, i64 }, align 16 %a178 = alloca { ptr, i64, i64 }, align 16 %a179 = alloca { ptr, i64, i64 }, align 16 %a181 = alloca { ptr, i64, i64 }, align 16 %a182 = alloca { ptr, i64, i64 }, align 16 %a183 = alloca { ptr, i64, i64 }, align 16 %a187 = alloca { ptr, i64, i64 }, align 16 %a189 = alloca { ptr, i64, i64 }, align 16 %a190 = alloca { ptr, i64, i64 }, align 16 %a191 = alloca { ptr, i64, i64 }, align 16 %a193 = alloca { ptr, i64, i64 }, align 16 %a194 = alloca { ptr, i64, i64 }, align 16 %a195 = alloca { ptr, i64, i64 }, align 16 %a200 = alloca { ptr, i64, i64 }, align 16 %a201 = alloca { ptr, i64, i64 }, align 16 %a202 = alloca { ptr, i64, i64 }, align 16 %a204 = alloca { ptr, i64, i64 }, align 16 %a205 = alloca { ptr, i64, i64 }, align 16 %a206 = alloca { ptr, i64, i64 }, align 16 %a209 = alloca { ptr, i64, i64 }, align 16 %a210 = alloca { ptr, i64, i64 }, align 16 %a212 = alloca { ptr, i64, i64 }, align 16 %a213 = alloca { ptr, i64, i64 }, align 16 %a214 = alloca { ptr, i64, i64 }, align 16 %a225 = alloca i64, align 16 %a233 = alloca %S.gen.Template, align 16 %a234 = alloca %S.gen.Template, align 16 %a236 = alloca %S.gen.Template, align 16 %a258 = alloca %S.ast.Node, align 16 %a259 = alloca %S.ast.Node, align 16 %a261 = alloca %S.ast.Node, align 16 %a268 = alloca { ptr, i64, i64 }, align 16 %a269 = alloca { ptr, i64, i64 }, align 16 %a270 = alloca { ptr, i64, i64 }, align 16 %a272 = alloca { ptr, i64, i64 }, align 16 %a273 = alloca { ptr, i64, i64 }, align 16 %a274 = alloca { ptr, i64, i64 }, align 16 %a278 = alloca { ptr, i64, i64 }, align 16 %a279 = alloca { ptr, i64, i64 }, align 16 %a280 = alloca { ptr, i64, i64 }, align 16 %a282 = alloca { ptr, i64, i64 }, align 16 %a283 = alloca { ptr, i64, i64 }, align 16 %a284 = alloca { ptr, i64, i64 }, align 16 %a288 = alloca { ptr, i64, i64 }, align 16 %a289 = alloca { ptr, i64, i64 }, align 16 %a290 = alloca { ptr, i64, i64 }, align 16 %a292 = alloca { ptr, i64, i64 }, align 16 %a293 = alloca { ptr, i64, i64 }, align 16 %a294 = alloca { ptr, i64, i64 }, align 16 %a307 = alloca { ptr, i64, i64 }, align 16 %a308 = alloca { ptr, i64, i64 }, align 16 %a309 = alloca { ptr, i64, i64 }, align 16 %a311 = alloca { ptr, i64, i64 }, align 16 %a312 = alloca { ptr, i64, i64 }, align 16 %a313 = alloca { ptr, i64, i64 }, align 16 %a317 = alloca { ptr, i64, i64 }, align 16 %a319 = alloca { ptr, i64, i64 }, align 16 %a320 = alloca { ptr, i64, i64 }, align 16 %a321 = alloca { ptr, i64, i64 }, align 16 %a323 = alloca { ptr, i64, i64 }, align 16 %a324 = alloca { ptr, i64, i64 }, align 16 %a325 = alloca { ptr, i64, i64 }, align 16 %a329 = alloca { ptr, i64, i64 }, align 16 %a331 = alloca { ptr, i64, i64 }, align 16 %a332 = alloca { ptr, i64, i64 }, align 16 %a333 = alloca { ptr, i64, i64 }, align 16 %a335 = alloca { ptr, i64, i64 }, align 16 %a336 = alloca { ptr, i64, i64 }, align 16 %a337 = alloca { ptr, i64, i64 }, align 16 %a341 = alloca { ptr, i64, i64 }, align 16 %a343 = alloca { ptr, i64, i64 }, align 16 %a344 = alloca { ptr, i64, i64 }, align 16 %a345 = alloca { ptr, i64, i64 }, align 16 %a347 = alloca { ptr, i64, i64 }, align 16 %a348 = alloca { ptr, i64, i64 }, align 16 %a349 = alloca { ptr, i64, i64 }, align 16 %a353 = alloca { ptr, i64, i64 }, align 16 %a354 = alloca { ptr, i64, i64 }, align 16 %a355 = alloca { ptr, i64, i64 }, align 16 %a357 = alloca { ptr, i64, i64 }, align 16 %a358 = alloca { ptr, i64, i64 }, align 16 %a359 = alloca { ptr, i64, i64 }, align 16 %a363 = alloca { ptr, i64, i64 }, align 16 %a364 = alloca { ptr, i64, i64 }, align 16 %a366 = alloca { ptr, i64, i64 }, align 16 %a367 = alloca { ptr, i64, i64 }, align 16 %a368 = alloca { ptr, i64, i64 }, align 16 %a370 = alloca { ptr, i64, i64 }, align 16 %a371 = alloca { ptr, i64, i64 }, align 16 %a372 = alloca { ptr, i64, i64 }, align 16 %a375 = alloca { ptr, i64, i64 }, align 16 %a376 = alloca { ptr, i64, i64 }, align 16 %a377 = alloca { ptr, i64, i64 }, align 16 %a379 = alloca { ptr, i64, i64 }, align 16 %a380 = alloca { ptr, i64, i64 }, align 16 %a381 = alloca { ptr, i64, i64 }, align 16 %a392 = alloca i64, align 16 %a400 = alloca %S.gen.StructDef, align 16 %a401 = alloca %S.gen.StructDef, align 16 %a403 = alloca %S.gen.StructDef, align 16 %a430 = alloca %S.ast.Node, align 16 %a431 = alloca %S.ast.Node, align 16 %a433 = alloca %S.ast.Node, align 16 %a440 = alloca { ptr, i64, i64 }, align 16 %a441 = alloca { ptr, i64, i64 }, align 16 %a442 = alloca { ptr, i64, i64 }, align 16 %a444 = alloca { ptr, i64, i64 }, align 16 %a445 = alloca { ptr, i64, i64 }, align 16 %a446 = alloca { ptr, i64, i64 }, align 16 %a450 = alloca { ptr, i64, i64 }, align 16 %a451 = alloca { ptr, i64, i64 }, align 16 %a452 = alloca { ptr, i64, i64 }, align 16 %a454 = alloca { ptr, i64, i64 }, align 16 %a455 = alloca { ptr, i64, i64 }, align 16 %a456 = alloca { ptr, i64, i64 }, align 16 %a469 = alloca { ptr, i64, i64 }, align 16 %a470 = alloca { ptr, i64, i64 }, align 16 %a471 = alloca { ptr, i64, i64 }, align 16 %a473 = alloca { ptr, i64, i64 }, align 16 %a474 = alloca { ptr, i64, i64 }, align 16 %a475 = alloca { ptr, i64, i64 }, align 16 %a479 = alloca { ptr, i64, i64 }, align 16 %a481 = alloca { ptr, i64, i64 }, align 16 %a482 = alloca { ptr, i64, i64 }, align 16 %a483 = alloca { ptr, i64, i64 }, align 16 %a485 = alloca { ptr, i64, i64 }, align 16 %a486 = alloca { ptr, i64, i64 }, align 16 %a487 = alloca { ptr, i64, i64 }, align 16 %a491 = alloca { ptr, i64, i64 }, align 16 %a493 = alloca { ptr, i64, i64 }, align 16 %a494 = alloca { ptr, i64, i64 }, align 16 %a495 = alloca { ptr, i64, i64 }, align 16 %a504 = alloca i64, align 16 %a513 = alloca { ptr, i64, i64 }, align 16 %a514 = alloca { ptr, i64, i64 }, align 16 %a515 = alloca { ptr, i64, i64 }, align 16 %a517 = alloca { ptr, i64, i64 }, align 16 %a518 = alloca { ptr, i64, i64 }, align 16 %a519 = alloca { ptr, i64, i64 }, align 16 %a523 = alloca { ptr, i64, i64 }, align 16 %a524 = alloca { ptr, i64, i64 }, align 16 %a525 = alloca { ptr, i64, i64 }, align 16 %a527 = alloca { ptr, i64, i64 }, align 16 %a528 = alloca { ptr, i64, i64 }, align 16 %a529 = alloca { ptr, i64, i64 }, align 16 %a539 = alloca { ptr, i64, i64 }, align 16 %a540 = alloca { ptr, i64, i64 }, align 16 %a541 = alloca { ptr, i64, i64 }, align 16 %a543 = alloca { ptr, i64, i64 }, align 16 %a544 = alloca { ptr, i64, i64 }, align 16 %a545 = alloca { ptr, i64, i64 }, align 16 %a556 = alloca { ptr, i64, i64 }, align 16 %a557 = alloca { ptr, i64, i64 }, align 16 %a558 = alloca { ptr, i64, i64 }, align 16 %a573 = alloca i64, align 16 %a586 = alloca i64, align 16 %a594 = alloca %S.ast.Node, align 16 %a595 = alloca %S.ast.Node, align 16 %a597 = alloca %S.ast.Node, align 16 %a598 = alloca { ptr, i64, i64 }, align 16 %a599 = alloca { ptr, i64, i64 }, align 16 %a601 = alloca i64, align 16 %a609 = alloca %S.ast.Node, align 16 %a613 = alloca { ptr, i64, i64 }, align 16 %a614 = alloca { ptr, i64, i64 }, align 16 %a623 = alloca { ptr, i64, i64 }, align 16 %a624 = alloca { ptr, i64, i64 }, align 16 %a641 = alloca { ptr, i64, i64 }, align 16 %a642 = alloca { ptr, i64, i64 }, align 16 %a643 = alloca { ptr, i64, i64 }, align 16 %a645 = alloca { ptr, i64, i64 }, align 16 %a646 = alloca { ptr, i64, i64 }, align 16 %a647 = alloca { ptr, i64, i64 }, align 16 %a651 = alloca { ptr, i64, i64 }, align 16 %a652 = alloca { ptr, i64, i64 }, align 16 %a653 = alloca { ptr, i64, i64 }, align 16 %a655 = alloca { ptr, i64, i64 }, align 16 %a656 = alloca { ptr, i64, i64 }, align 16 %a657 = alloca { ptr, i64, i64 }, align 16 %a670 = alloca { ptr, i64, i64 }, align 16 %a671 = alloca { ptr, i64, i64 }, align 16 %a672 = alloca { ptr, i64, i64 }, align 16 %a674 = alloca { ptr, i64, i64 }, align 16 %a675 = alloca { ptr, i64, i64 }, align 16 %a676 = alloca { ptr, i64, i64 }, align 16 %a680 = alloca { ptr, i64, i64 }, align 16 %a682 = alloca { ptr, i64, i64 }, align 16 %a683 = alloca { ptr, i64, i64 }, align 16 %a684 = alloca { ptr, i64, i64 }, align 16 %a686 = alloca { ptr, i64, i64 }, align 16 %a687 = alloca { ptr, i64, i64 }, align 16 %a688 = alloca { ptr, i64, i64 }, align 16 %a692 = alloca { ptr, i64, i64 }, align 16 %a694 = alloca { ptr, i64, i64 }, align 16 %a695 = alloca { ptr, i64, i64 }, align 16 %a696 = alloca { ptr, i64, i64 }, align 16 %a698 = alloca { ptr, i64, i64 }, align 16 %a699 = alloca { ptr, i64, i64 }, align 16 %a700 = alloca { ptr, i64, i64 }, align 16 %a703 = alloca { ptr, i64, i64 }, align 16 %a704 = alloca { ptr, i64, i64 }, align 16 %a705 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store i64 0, ptr %a3 br label %each.cond1893 each.cond1893: %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t5 = load i64, ptr %t4 %t6 = load i64, ptr %a3 %t7 = icmp slt i64 %t6, %t5 br i1 %t7, label %each.body1894, label %each.end1896 each.body1894: %t8 = load ptr, ptr %a2 %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t8, i64 %t6 %t10 = load { ptr, i64, i64 }, ptr %t9 store { ptr, i64, i64 } %t10, ptr %a11 %t12 = load ptr, ptr %a1 %t13 = icmp eq ptr %t12, null br i1 %t13, label %panic1897, label %ok1898 panic1897: call void @finch_panic(ptr @.str.1097, i64 244, ptr @.str.1098) unreachable ok1898: %t14 = getelementptr inbounds %S.gen.Gen, ptr %t12, i32 0, i32 27 %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t14, i32 0, i32 1 %t16 = load { ptr, i64, i64 }, ptr %a11 store { ptr, i64, i64 } { ptr @.str.1099, i64 3, i64 0 }, ptr %a18 store { ptr, i64, i64 } %t16, ptr %a19 call void @finch_str_concat(ptr %a17, ptr %a18, ptr %a19) %t20 = load { ptr, i64, i64 }, ptr %a17 %t21 = load i64, ptr %t15 %t22 = add i64 %t21, 1 call void @finch_arr_reserve(ptr %t14, i64 %t22, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t23 = load ptr, ptr %t14 %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %t23, i64 %t21 store { ptr, i64, i64 } %t20, ptr %t24 store i64 %t22, ptr %t15 br label %each.step1895 each.step1895: %t25 = load i64, ptr %a3 %t26 = add i64 %t25, 1 store i64 %t26, ptr %a3 br label %each.cond1893 each.end1896: %t27 = load ptr, ptr %a1 %t28 = icmp eq ptr %t27, null br i1 %t28, label %panic1899, label %ok1900 panic1899: call void @finch_panic(ptr @.str.1100, i64 246, ptr @.str.1101) unreachable ok1900: %t29 = getelementptr inbounds %S.gen.Gen, ptr %t27, i32 0, i32 14 store i64 0, ptr %a30 br label %each.cond1901 each.cond1901: %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i32 0, i32 1 %t32 = load i64, ptr %t31 %t33 = load i64, ptr %a30 %t34 = icmp slt i64 %t33, %t32 br i1 %t34, label %each.body1902, label %each.end1904 each.body1902: %t35 = load ptr, ptr %t29 %t36 = getelementptr inbounds %S.gen.FnSig, ptr %t35, i64 %t33 %t37 = load %S.gen.FnSig, ptr %t36 store %S.gen.FnSig %t37, ptr %a38 call void @finch.copy.S_gen_FnSig(ptr %a39, ptr %a38) %t40 = load %S.gen.FnSig, ptr %a39 store %S.gen.FnSig %t40, ptr %a41 %t42 = load ptr, ptr %a1 %t43 = icmp eq ptr %t42, null br i1 %t43, label %panic1905, label %ok1906 panic1905: call void @finch_panic(ptr @.str.1102, i64 247, ptr @.str.1103) unreachable ok1906: %t44 = getelementptr inbounds %S.gen.Gen, ptr %t42, i32 0, i32 0 %t45 = getelementptr inbounds %S.gen.FnSig, ptr %a41, i32 0, i32 16 %t46 = load i64, ptr %t45 %t47 = load { ptr, i64, i64 }, ptr %t44 %t48 = extractvalue { ptr, i64, i64 } %t47, 1 %t49 = icmp uge i64 %t46, %t48 br i1 %t49, label %range1907, label %inrange1908 range1907: call void @finch_panic_index(ptr @.str.1104, i64 247, i64 %t46, i64 %t48) unreachable inrange1908: %t50 = extractvalue { ptr, i64, i64 } %t47, 0 %t51 = getelementptr inbounds %S.ast.Program, ptr %t50, i64 %t46 %t52 = getelementptr inbounds %S.ast.Program, ptr %t51, i32 0, i32 8 %t53 = getelementptr inbounds %S.gen.FnSig, ptr %a41, i32 0, i32 17 %t54 = load i64, ptr %t53 %t55 = load { ptr, i64, i64 }, ptr %t52 %t56 = extractvalue { ptr, i64, i64 } %t55, 1 %t57 = icmp uge i64 %t54, %t56 br i1 %t57, label %range1909, label %inrange1910 range1909: call void @finch_panic_index(ptr @.str.1105, i64 247, i64 %t54, i64 %t56) unreachable inrange1910: %t58 = extractvalue { ptr, i64, i64 } %t55, 0 %t59 = getelementptr inbounds %S.ast.Node, ptr %t58, i64 %t54 %t60 = load %S.ast.Node, ptr %t59 store %S.ast.Node %t60, ptr %a61 call void @finch.copy.S_ast_Node(ptr %a62, ptr %a61) %t63 = load %S.ast.Node, ptr %a62 store %S.ast.Node %t63, ptr %a64 %t65 = getelementptr inbounds %S.gen.FnSig, ptr %a41, i32 0, i32 7 %t66 = getelementptr inbounds { ptr, i64, i64 }, ptr %t65, i32 0, i32 1 %t67 = load i64, ptr %t66 %t68 = icmp sgt i64 %t67, 0 br i1 %t68, label %then1911, label %endif1913 then1911: br label %each.step1903 endif1913: store { ptr, i64, i64 } zeroinitializer, ptr %a69 %t70 = getelementptr inbounds %S.gen.FnSig, ptr %a41, i32 0, i32 13 %t71 = getelementptr inbounds { ptr, i64, i64 }, ptr %t70, i32 0, i32 1 %t72 = load i64, ptr %t71 store i64 0, ptr %a73 br label %for.cond1914 for.cond1914: %t74 = load i64, ptr %a73 %t75 = icmp slt i64 %t74, %t72 br i1 %t75, label %for.body1915, label %for.end1917 for.body1915: %t76 = getelementptr inbounds { ptr, i64, i64 }, ptr %a69, i32 0, i32 1 %t77 = getelementptr inbounds %S.gen.FnSig, ptr %a41, i32 0, i32 13 %t78 = load i64, ptr %a73 %t79 = load { ptr, i64, i64 }, ptr %t77 %t80 = extractvalue { ptr, i64, i64 } %t79, 1 %t81 = icmp uge i64 %t78, %t80 br i1 %t81, label %range1918, label %inrange1919 range1918: call void @finch_panic_index(ptr @.str.1106, i64 253, i64 %t78, i64 %t80) unreachable inrange1919: %t82 = extractvalue { ptr, i64, i64 } %t79, 0 %t83 = getelementptr inbounds %S.ast.Type, ptr %t82, i64 %t78 %t84 = load %S.ast.Type, ptr %t83 %t85 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t84) store { ptr, i64, i64 } %t85, ptr %a87 store { ptr, i64, i64 } { ptr @.str.1107, i64 1, i64 0 }, ptr %a88 call void @finch_str_concat(ptr %a86, ptr %a87, ptr %a88) %t89 = load { ptr, i64, i64 }, ptr %a86 %t90 = getelementptr inbounds %S.gen.FnSig, ptr %a41, i32 0, i32 14 %t91 = load i64, ptr %a73 %t92 = load { ptr, i64, i64 }, ptr %t90 %t93 = extractvalue { ptr, i64, i64 } %t92, 1 %t94 = icmp uge i64 %t91, %t93 br i1 %t94, label %range1920, label %inrange1921 range1920: call void @finch_panic_index(ptr @.str.1108, i64 253, i64 %t91, i64 %t93) unreachable inrange1921: %t95 = extractvalue { ptr, i64, i64 } %t92, 0 %t96 = getelementptr inbounds { ptr, i64, i64 }, ptr %t95, i64 %t91 %t97 = load { ptr, i64, i64 }, ptr %t96 store { ptr, i64, i64 } %t89, ptr %a99 store { ptr, i64, i64 } %t97, ptr %a100 call void @finch_str_concat(ptr %a98, ptr %a99, ptr %a100) %t101 = load { ptr, i64, i64 }, ptr %a98 %t102 = load i64, ptr %t76 %t103 = add i64 %t102, 1 call void @finch_arr_reserve(ptr %a69, i64 %t103, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t104 = load ptr, ptr %a69 %t105 = getelementptr inbounds { ptr, i64, i64 }, ptr %t104, i64 %t102 store { ptr, i64, i64 } %t101, ptr %t105 store i64 %t103, ptr %t76 br label %for.step1916 for.step1916: %t106 = load i64, ptr %a73 %t107 = add i64 %t106, 1 store i64 %t107, ptr %a73 br label %for.cond1914 for.end1917: %t108 = load ptr, ptr %a1 %t109 = icmp eq ptr %t108, null br i1 %t109, label %panic1922, label %ok1923 panic1922: call void @finch_panic(ptr @.str.1109, i64 255, ptr @.str.1110) unreachable ok1923: %t110 = getelementptr inbounds %S.gen.Gen, ptr %t108, i32 0, i32 27 %t111 = getelementptr inbounds { ptr, i64, i64 }, ptr %t110, i32 0, i32 1 %t112 = getelementptr inbounds %S.gen.FnSig, ptr %a41, i32 0, i32 0 %t113 = load { ptr, i64, i64 }, ptr %t112 store { ptr, i64, i64 } { ptr @.str.1111, i64 3, i64 0 }, ptr %a115 store { ptr, i64, i64 } %t113, ptr %a116 call void @finch_str_concat(ptr %a114, ptr %a115, ptr %a116) %t117 = load { ptr, i64, i64 }, ptr %a114 store { ptr, i64, i64 } %t117, ptr %a119 store { ptr, i64, i64 } { ptr @.str.1112, i64 1, i64 0 }, ptr %a120 call void @finch_str_concat(ptr %a118, ptr %a119, ptr %a120) %t121 = load { ptr, i64, i64 }, ptr %a118 %t122 = getelementptr inbounds %S.gen.FnSig, ptr %a41, i32 0, i32 1 %t123 = load { ptr, i64, i64 }, ptr %t122 store { ptr, i64, i64 } %t121, ptr %a125 store { ptr, i64, i64 } %t123, ptr %a126 call void @finch_str_concat(ptr %a124, ptr %a125, ptr %a126) %t127 = load { ptr, i64, i64 }, ptr %a124 store { ptr, i64, i64 } %t127, ptr %a129 store { ptr, i64, i64 } { ptr @.str.1113, i64 1, i64 0 }, ptr %a130 call void @finch_str_concat(ptr %a128, ptr %a129, ptr %a130) %t131 = load { ptr, i64, i64 }, ptr %a128 %t132 = getelementptr inbounds %S.gen.FnSig, ptr %a41, i32 0, i32 2 %t133 = load { ptr, i64, i64 }, ptr %t132 store { ptr, i64, i64 } %t131, ptr %a135 store { ptr, i64, i64 } %t133, ptr %a136 call void @finch_str_concat(ptr %a134, ptr %a135, ptr %a136) %t137 = load { ptr, i64, i64 }, ptr %a134 store { ptr, i64, i64 } %t137, ptr %a139 store { ptr, i64, i64 } { ptr @.str.1114, i64 1, i64 0 }, ptr %a140 call void @finch_str_concat(ptr %a138, ptr %a139, ptr %a140) %t141 = load { ptr, i64, i64 }, ptr %a138 %t142 = load ptr, ptr %a1 %t143 = icmp eq ptr %t142, null br i1 %t143, label %panic1924, label %ok1925 panic1924: call void @finch_panic(ptr @.str.1115, i64 255, ptr @.str.1116) unreachable ok1925: %t144 = getelementptr inbounds %S.gen.Gen, ptr %t142, i32 0, i32 1 %t145 = getelementptr inbounds %S.ast.Node, ptr %a64, i32 0, i32 13 %t146 = load i64, ptr %t145 %t147 = load { ptr, i64, i64 }, ptr %t144 %t148 = extractvalue { ptr, i64, i64 } %t147, 1 %t149 = icmp uge i64 %t146, %t148 br i1 %t149, label %range1926, label %inrange1927 range1926: call void @finch_panic_index(ptr @.str.1117, i64 255, i64 %t146, i64 %t148) unreachable inrange1927: %t150 = extractvalue { ptr, i64, i64 } %t147, 0 %t151 = getelementptr inbounds { ptr, i64, i64 }, ptr %t150, i64 %t146 %t152 = load { ptr, i64, i64 }, ptr %t151 store { ptr, i64, i64 } %t141, ptr %a154 store { ptr, i64, i64 } %t152, ptr %a155 call void @finch_str_concat(ptr %a153, ptr %a154, ptr %a155) %t156 = load { ptr, i64, i64 }, ptr %a153 store { ptr, i64, i64 } %t156, ptr %a158 store { ptr, i64, i64 } { ptr @.str.1118, i64 1, i64 0 }, ptr %a159 call void @finch_str_concat(ptr %a157, ptr %a158, ptr %a159) %t160 = load { ptr, i64, i64 }, ptr %a157 %t161 = getelementptr inbounds %S.ast.Node, ptr %a64, i32 0, i32 11 %t162 = load i64, ptr %t161 call void @finch_str_from_int(ptr %a163, i64 %t162) %t164 = load { ptr, i64, i64 }, ptr %a163 store { ptr, i64, i64 } %t160, ptr %a166 store { ptr, i64, i64 } %t164, ptr %a167 call void @finch_str_concat(ptr %a165, ptr %a166, ptr %a167) %t168 = load { ptr, i64, i64 }, ptr %a165 store { ptr, i64, i64 } %t168, ptr %a170 store { ptr, i64, i64 } { ptr @.str.1119, i64 1, i64 0 }, ptr %a171 call void @finch_str_concat(ptr %a169, ptr %a170, ptr %a171) %t172 = load { ptr, i64, i64 }, ptr %a169 %t173 = getelementptr inbounds %S.ast.Node, ptr %a64, i32 0, i32 12 %t174 = load i64, ptr %t173 call void @finch_str_from_int(ptr %a175, i64 %t174) %t176 = load { ptr, i64, i64 }, ptr %a175 store { ptr, i64, i64 } %t172, ptr %a178 store { ptr, i64, i64 } %t176, ptr %a179 call void @finch_str_concat(ptr %a177, ptr %a178, ptr %a179) %t180 = load { ptr, i64, i64 }, ptr %a177 store { ptr, i64, i64 } %t180, ptr %a182 store { ptr, i64, i64 } { ptr @.str.1120, i64 1, i64 0 }, ptr %a183 call void @finch_str_concat(ptr %a181, ptr %a182, ptr %a183) %t184 = load { ptr, i64, i64 }, ptr %a181 %t185 = getelementptr inbounds %S.ast.Node, ptr %a64, i32 0, i32 14 %t186 = load i64, ptr %t185 call void @finch_str_from_int(ptr %a187, i64 %t186) %t188 = load { ptr, i64, i64 }, ptr %a187 store { ptr, i64, i64 } %t184, ptr %a190 store { ptr, i64, i64 } %t188, ptr %a191 call void @finch_str_concat(ptr %a189, ptr %a190, ptr %a191) %t192 = load { ptr, i64, i64 }, ptr %a189 store { ptr, i64, i64 } %t192, ptr %a194 store { ptr, i64, i64 } { ptr @.str.1121, i64 1, i64 0 }, ptr %a195 call void @finch_str_concat(ptr %a193, ptr %a194, ptr %a195) %t196 = load { ptr, i64, i64 }, ptr %a193 %t197 = load %S.gen.FnSig, ptr %a41 %t198 = call { ptr, i64, i64 } @finch.gen.sigText(%S.gen.FnSig %t197) %t199 = call { ptr, i64, i64 } @finch.gen.esc({ ptr, i64, i64 } %t198) store { ptr, i64, i64 } %t196, ptr %a201 store { ptr, i64, i64 } %t199, ptr %a202 call void @finch_str_concat(ptr %a200, ptr %a201, ptr %a202) %t203 = load { ptr, i64, i64 }, ptr %a200 store { ptr, i64, i64 } %t203, ptr %a205 store { ptr, i64, i64 } { ptr @.str.1122, i64 1, i64 0 }, ptr %a206 call void @finch_str_concat(ptr %a204, ptr %a205, ptr %a206) %t207 = load { ptr, i64, i64 }, ptr %a204 %t208 = getelementptr inbounds { ptr, i64, i64 }, ptr %a69, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.1123, i64 1, i64 0 }, ptr %a209 call void @finch_str_join(ptr %a210, ptr %a69, ptr %a209) %t211 = load { ptr, i64, i64 }, ptr %a210 store { ptr, i64, i64 } %t207, ptr %a213 store { ptr, i64, i64 } %t211, ptr %a214 call void @finch_str_concat(ptr %a212, ptr %a213, ptr %a214) %t215 = load { ptr, i64, i64 }, ptr %a212 %t216 = load i64, ptr %t111 %t217 = add i64 %t216, 1 call void @finch_arr_reserve(ptr %t110, i64 %t217, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t218 = load ptr, ptr %t110 %t219 = getelementptr inbounds { ptr, i64, i64 }, ptr %t218, i64 %t216 store { ptr, i64, i64 } %t215, ptr %t219 store i64 %t217, ptr %t111 br label %each.step1903 each.step1903: %t220 = load i64, ptr %a30 %t221 = add i64 %t220, 1 store i64 %t221, ptr %a30 br label %each.cond1901 each.end1904: %t222 = load ptr, ptr %a1 %t223 = icmp eq ptr %t222, null br i1 %t223, label %panic1928, label %ok1929 panic1928: call void @finch_panic(ptr @.str.1124, i64 257, ptr @.str.1125) unreachable ok1929: %t224 = getelementptr inbounds %S.gen.Gen, ptr %t222, i32 0, i32 16 store i64 0, ptr %a225 br label %each.cond1930 each.cond1930: %t226 = getelementptr inbounds { ptr, i64, i64 }, ptr %t224, i32 0, i32 1 %t227 = load i64, ptr %t226 %t228 = load i64, ptr %a225 %t229 = icmp slt i64 %t228, %t227 br i1 %t229, label %each.body1931, label %each.end1933 each.body1931: %t230 = load ptr, ptr %t224 %t231 = getelementptr inbounds %S.gen.Template, ptr %t230, i64 %t228 %t232 = load %S.gen.Template, ptr %t231 store %S.gen.Template %t232, ptr %a233 call void @finch.copy.S_gen_Template(ptr %a234, ptr %a233) %t235 = load %S.gen.Template, ptr %a234 store %S.gen.Template %t235, ptr %a236 %t237 = getelementptr inbounds %S.gen.Template, ptr %a236, i32 0, i32 6 %t238 = load i1, ptr %t237 br i1 %t238, label %then1934, label %endif1936 then1934: br label %each.step1932 endif1936: %t239 = load ptr, ptr %a1 %t240 = icmp eq ptr %t239, null br i1 %t240, label %panic1937, label %ok1938 panic1937: call void @finch_panic(ptr @.str.1126, i64 261, ptr @.str.1127) unreachable ok1938: %t241 = getelementptr inbounds %S.gen.Gen, ptr %t239, i32 0, i32 0 %t242 = getelementptr inbounds %S.gen.Template, ptr %a236, i32 0, i32 4 %t243 = load i64, ptr %t242 %t244 = load { ptr, i64, i64 }, ptr %t241 %t245 = extractvalue { ptr, i64, i64 } %t244, 1 %t246 = icmp uge i64 %t243, %t245 br i1 %t246, label %range1939, label %inrange1940 range1939: call void @finch_panic_index(ptr @.str.1128, i64 261, i64 %t243, i64 %t245) unreachable inrange1940: %t247 = extractvalue { ptr, i64, i64 } %t244, 0 %t248 = getelementptr inbounds %S.ast.Program, ptr %t247, i64 %t243 %t249 = getelementptr inbounds %S.ast.Program, ptr %t248, i32 0, i32 8 %t250 = getelementptr inbounds %S.gen.Template, ptr %a236, i32 0, i32 5 %t251 = load i64, ptr %t250 %t252 = load { ptr, i64, i64 }, ptr %t249 %t253 = extractvalue { ptr, i64, i64 } %t252, 1 %t254 = icmp uge i64 %t251, %t253 br i1 %t254, label %range1941, label %inrange1942 range1941: call void @finch_panic_index(ptr @.str.1129, i64 261, i64 %t251, i64 %t253) unreachable inrange1942: %t255 = extractvalue { ptr, i64, i64 } %t252, 0 %t256 = getelementptr inbounds %S.ast.Node, ptr %t255, i64 %t251 %t257 = load %S.ast.Node, ptr %t256 store %S.ast.Node %t257, ptr %a258 call void @finch.copy.S_ast_Node(ptr %a259, ptr %a258) %t260 = load %S.ast.Node, ptr %a259 store %S.ast.Node %t260, ptr %a261 %t262 = load ptr, ptr %a1 %t263 = icmp eq ptr %t262, null br i1 %t263, label %panic1943, label %ok1944 panic1943: call void @finch_panic(ptr @.str.1130, i64 262, ptr @.str.1131) unreachable ok1944: %t264 = getelementptr inbounds %S.gen.Gen, ptr %t262, i32 0, i32 27 %t265 = getelementptr inbounds { ptr, i64, i64 }, ptr %t264, i32 0, i32 1 %t266 = getelementptr inbounds %S.gen.Template, ptr %a236, i32 0, i32 0 %t267 = load { ptr, i64, i64 }, ptr %t266 store { ptr, i64, i64 } { ptr @.str.1132, i64 3, i64 0 }, ptr %a269 store { ptr, i64, i64 } %t267, ptr %a270 call void @finch_str_concat(ptr %a268, ptr %a269, ptr %a270) %t271 = load { ptr, i64, i64 }, ptr %a268 store { ptr, i64, i64 } %t271, ptr %a273 store { ptr, i64, i64 } { ptr @.str.1133, i64 1, i64 0 }, ptr %a274 call void @finch_str_concat(ptr %a272, ptr %a273, ptr %a274) %t275 = load { ptr, i64, i64 }, ptr %a272 %t276 = getelementptr inbounds %S.gen.Template, ptr %a236, i32 0, i32 1 %t277 = load { ptr, i64, i64 }, ptr %t276 store { ptr, i64, i64 } %t275, ptr %a279 store { ptr, i64, i64 } %t277, ptr %a280 call void @finch_str_concat(ptr %a278, ptr %a279, ptr %a280) %t281 = load { ptr, i64, i64 }, ptr %a278 store { ptr, i64, i64 } %t281, ptr %a283 store { ptr, i64, i64 } { ptr @.str.1134, i64 1, i64 0 }, ptr %a284 call void @finch_str_concat(ptr %a282, ptr %a283, ptr %a284) %t285 = load { ptr, i64, i64 }, ptr %a282 %t286 = getelementptr inbounds %S.gen.Template, ptr %a236, i32 0, i32 2 %t287 = load { ptr, i64, i64 }, ptr %t286 store { ptr, i64, i64 } %t285, ptr %a289 store { ptr, i64, i64 } %t287, ptr %a290 call void @finch_str_concat(ptr %a288, ptr %a289, ptr %a290) %t291 = load { ptr, i64, i64 }, ptr %a288 store { ptr, i64, i64 } %t291, ptr %a293 store { ptr, i64, i64 } { ptr @.str.1135, i64 1, i64 0 }, ptr %a294 call void @finch_str_concat(ptr %a292, ptr %a293, ptr %a294) %t295 = load { ptr, i64, i64 }, ptr %a292 %t296 = load ptr, ptr %a1 %t297 = icmp eq ptr %t296, null br i1 %t297, label %panic1945, label %ok1946 panic1945: call void @finch_panic(ptr @.str.1136, i64 262, ptr @.str.1137) unreachable ok1946: %t298 = getelementptr inbounds %S.gen.Gen, ptr %t296, i32 0, i32 1 %t299 = getelementptr inbounds %S.ast.Node, ptr %a261, i32 0, i32 13 %t300 = load i64, ptr %t299 %t301 = load { ptr, i64, i64 }, ptr %t298 %t302 = extractvalue { ptr, i64, i64 } %t301, 1 %t303 = icmp uge i64 %t300, %t302 br i1 %t303, label %range1947, label %inrange1948 range1947: call void @finch_panic_index(ptr @.str.1138, i64 262, i64 %t300, i64 %t302) unreachable inrange1948: %t304 = extractvalue { ptr, i64, i64 } %t301, 0 %t305 = getelementptr inbounds { ptr, i64, i64 }, ptr %t304, i64 %t300 %t306 = load { ptr, i64, i64 }, ptr %t305 store { ptr, i64, i64 } %t295, ptr %a308 store { ptr, i64, i64 } %t306, ptr %a309 call void @finch_str_concat(ptr %a307, ptr %a308, ptr %a309) %t310 = load { ptr, i64, i64 }, ptr %a307 store { ptr, i64, i64 } %t310, ptr %a312 store { ptr, i64, i64 } { ptr @.str.1139, i64 1, i64 0 }, ptr %a313 call void @finch_str_concat(ptr %a311, ptr %a312, ptr %a313) %t314 = load { ptr, i64, i64 }, ptr %a311 %t315 = getelementptr inbounds %S.ast.Node, ptr %a261, i32 0, i32 11 %t316 = load i64, ptr %t315 call void @finch_str_from_int(ptr %a317, i64 %t316) %t318 = load { ptr, i64, i64 }, ptr %a317 store { ptr, i64, i64 } %t314, ptr %a320 store { ptr, i64, i64 } %t318, ptr %a321 call void @finch_str_concat(ptr %a319, ptr %a320, ptr %a321) %t322 = load { ptr, i64, i64 }, ptr %a319 store { ptr, i64, i64 } %t322, ptr %a324 store { ptr, i64, i64 } { ptr @.str.1140, i64 1, i64 0 }, ptr %a325 call void @finch_str_concat(ptr %a323, ptr %a324, ptr %a325) %t326 = load { ptr, i64, i64 }, ptr %a323 %t327 = getelementptr inbounds %S.ast.Node, ptr %a261, i32 0, i32 12 %t328 = load i64, ptr %t327 call void @finch_str_from_int(ptr %a329, i64 %t328) %t330 = load { ptr, i64, i64 }, ptr %a329 store { ptr, i64, i64 } %t326, ptr %a332 store { ptr, i64, i64 } %t330, ptr %a333 call void @finch_str_concat(ptr %a331, ptr %a332, ptr %a333) %t334 = load { ptr, i64, i64 }, ptr %a331 store { ptr, i64, i64 } %t334, ptr %a336 store { ptr, i64, i64 } { ptr @.str.1141, i64 1, i64 0 }, ptr %a337 call void @finch_str_concat(ptr %a335, ptr %a336, ptr %a337) %t338 = load { ptr, i64, i64 }, ptr %a335 %t339 = getelementptr inbounds %S.ast.Node, ptr %a261, i32 0, i32 14 %t340 = load i64, ptr %t339 call void @finch_str_from_int(ptr %a341, i64 %t340) %t342 = load { ptr, i64, i64 }, ptr %a341 store { ptr, i64, i64 } %t338, ptr %a344 store { ptr, i64, i64 } %t342, ptr %a345 call void @finch_str_concat(ptr %a343, ptr %a344, ptr %a345) %t346 = load { ptr, i64, i64 }, ptr %a343 store { ptr, i64, i64 } %t346, ptr %a348 store { ptr, i64, i64 } { ptr @.str.1142, i64 1, i64 0 }, ptr %a349 call void @finch_str_concat(ptr %a347, ptr %a348, ptr %a349) %t350 = load { ptr, i64, i64 }, ptr %a347 %t351 = getelementptr inbounds %S.gen.Template, ptr %a236, i32 0, i32 1 %t352 = load { ptr, i64, i64 }, ptr %t351 store { ptr, i64, i64 } { ptr @.str.1143, i64 3, i64 0 }, ptr %a354 store { ptr, i64, i64 } %t352, ptr %a355 call void @finch_str_concat(ptr %a353, ptr %a354, ptr %a355) %t356 = load { ptr, i64, i64 }, ptr %a353 store { ptr, i64, i64 } %t356, ptr %a358 store { ptr, i64, i64 } { ptr @.str.1144, i64 1, i64 0 }, ptr %a359 call void @finch_str_concat(ptr %a357, ptr %a358, ptr %a359) %t360 = load { ptr, i64, i64 }, ptr %a357 %t361 = getelementptr inbounds %S.gen.Template, ptr %a236, i32 0, i32 3 %t362 = getelementptr inbounds { ptr, i64, i64 }, ptr %t361, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.1145, i64 2, i64 0 }, ptr %a363 call void @finch_str_join(ptr %a364, ptr %t361, ptr %a363) %t365 = load { ptr, i64, i64 }, ptr %a364 store { ptr, i64, i64 } %t360, ptr %a367 store { ptr, i64, i64 } %t365, ptr %a368 call void @finch_str_concat(ptr %a366, ptr %a367, ptr %a368) %t369 = load { ptr, i64, i64 }, ptr %a366 store { ptr, i64, i64 } %t369, ptr %a371 store { ptr, i64, i64 } { ptr @.str.1146, i64 6, i64 0 }, ptr %a372 call void @finch_str_concat(ptr %a370, ptr %a371, ptr %a372) %t373 = load { ptr, i64, i64 }, ptr %a370 %t374 = call { ptr, i64, i64 } @finch.gen.esc({ ptr, i64, i64 } %t373) store { ptr, i64, i64 } %t350, ptr %a376 store { ptr, i64, i64 } %t374, ptr %a377 call void @finch_str_concat(ptr %a375, ptr %a376, ptr %a377) %t378 = load { ptr, i64, i64 }, ptr %a375 store { ptr, i64, i64 } %t378, ptr %a380 store { ptr, i64, i64 } { ptr @.str.1147, i64 1, i64 0 }, ptr %a381 call void @finch_str_concat(ptr %a379, ptr %a380, ptr %a381) %t382 = load { ptr, i64, i64 }, ptr %a379 %t383 = load i64, ptr %t265 %t384 = add i64 %t383, 1 call void @finch_arr_reserve(ptr %t264, i64 %t384, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t385 = load ptr, ptr %t264 %t386 = getelementptr inbounds { ptr, i64, i64 }, ptr %t385, i64 %t383 store { ptr, i64, i64 } %t382, ptr %t386 store i64 %t384, ptr %t265 br label %each.step1932 each.step1932: %t387 = load i64, ptr %a225 %t388 = add i64 %t387, 1 store i64 %t388, ptr %a225 br label %each.cond1930 each.end1933: %t389 = load ptr, ptr %a1 %t390 = icmp eq ptr %t389, null br i1 %t390, label %panic1949, label %ok1950 panic1949: call void @finch_panic(ptr @.str.1148, i64 264, ptr @.str.1149) unreachable ok1950: %t391 = getelementptr inbounds %S.gen.Gen, ptr %t389, i32 0, i32 15 store i64 0, ptr %a392 br label %each.cond1951 each.cond1951: %t393 = getelementptr inbounds { ptr, i64, i64 }, ptr %t391, i32 0, i32 1 %t394 = load i64, ptr %t393 %t395 = load i64, ptr %a392 %t396 = icmp slt i64 %t395, %t394 br i1 %t396, label %each.body1952, label %each.end1954 each.body1952: %t397 = load ptr, ptr %t391 %t398 = getelementptr inbounds %S.gen.StructDef, ptr %t397, i64 %t395 %t399 = load %S.gen.StructDef, ptr %t398 store %S.gen.StructDef %t399, ptr %a400 call void @finch.copy.S_gen_StructDef(ptr %a401, ptr %a400) %t402 = load %S.gen.StructDef, ptr %a401 store %S.gen.StructDef %t402, ptr %a403 %t404 = getelementptr inbounds %S.gen.StructDef, ptr %a403, i32 0, i32 2 %t405 = load i1, ptr %t404 br label %logic.from1955 logic.from1955: br i1 %t405, label %logic.end1957, label %logic.rhs1956 logic.rhs1956: %t406 = getelementptr inbounds %S.gen.StructDef, ptr %a403, i32 0, i32 5 %t407 = getelementptr inbounds { ptr, i64, i64 }, ptr %t406, i32 0, i32 1 %t408 = load i64, ptr %t407 %t409 = icmp sgt i64 %t408, 0 br label %logic.rend1958 logic.rend1958: br label %logic.end1957 logic.end1957: %t410 = phi i1 [ true, %logic.from1955 ], [ %t409, %logic.rend1958 ] br i1 %t410, label %then1959, label %endif1961 then1959: br label %each.step1953 endif1961: %t411 = load ptr, ptr %a1 %t412 = icmp eq ptr %t411, null br i1 %t412, label %panic1962, label %ok1963 panic1962: call void @finch_panic(ptr @.str.1150, i64 268, ptr @.str.1151) unreachable ok1963: %t413 = getelementptr inbounds %S.gen.Gen, ptr %t411, i32 0, i32 0 %t414 = getelementptr inbounds %S.gen.StructDef, ptr %a403, i32 0, i32 13 %t415 = load i64, ptr %t414 %t416 = load { ptr, i64, i64 }, ptr %t413 %t417 = extractvalue { ptr, i64, i64 } %t416, 1 %t418 = icmp uge i64 %t415, %t417 br i1 %t418, label %range1964, label %inrange1965 range1964: call void @finch_panic_index(ptr @.str.1152, i64 268, i64 %t415, i64 %t417) unreachable inrange1965: %t419 = extractvalue { ptr, i64, i64 } %t416, 0 %t420 = getelementptr inbounds %S.ast.Program, ptr %t419, i64 %t415 %t421 = getelementptr inbounds %S.ast.Program, ptr %t420, i32 0, i32 6 %t422 = getelementptr inbounds %S.gen.StructDef, ptr %a403, i32 0, i32 14 %t423 = load i64, ptr %t422 %t424 = load { ptr, i64, i64 }, ptr %t421 %t425 = extractvalue { ptr, i64, i64 } %t424, 1 %t426 = icmp uge i64 %t423, %t425 br i1 %t426, label %range1966, label %inrange1967 range1966: call void @finch_panic_index(ptr @.str.1153, i64 268, i64 %t423, i64 %t425) unreachable inrange1967: %t427 = extractvalue { ptr, i64, i64 } %t424, 0 %t428 = getelementptr inbounds %S.ast.Node, ptr %t427, i64 %t423 %t429 = load %S.ast.Node, ptr %t428 store %S.ast.Node %t429, ptr %a430 call void @finch.copy.S_ast_Node(ptr %a431, ptr %a430) %t432 = load %S.ast.Node, ptr %a431 store %S.ast.Node %t432, ptr %a433 %t434 = load ptr, ptr %a1 %t435 = icmp eq ptr %t434, null br i1 %t435, label %panic1968, label %ok1969 panic1968: call void @finch_panic(ptr @.str.1154, i64 269, ptr @.str.1155) unreachable ok1969: %t436 = getelementptr inbounds %S.gen.Gen, ptr %t434, i32 0, i32 27 %t437 = getelementptr inbounds { ptr, i64, i64 }, ptr %t436, i32 0, i32 1 %t438 = getelementptr inbounds %S.gen.StructDef, ptr %a403, i32 0, i32 0 %t439 = load { ptr, i64, i64 }, ptr %t438 store { ptr, i64, i64 } { ptr @.str.1156, i64 3, i64 0 }, ptr %a441 store { ptr, i64, i64 } %t439, ptr %a442 call void @finch_str_concat(ptr %a440, ptr %a441, ptr %a442) %t443 = load { ptr, i64, i64 }, ptr %a440 store { ptr, i64, i64 } %t443, ptr %a445 store { ptr, i64, i64 } { ptr @.str.1157, i64 1, i64 0 }, ptr %a446 call void @finch_str_concat(ptr %a444, ptr %a445, ptr %a446) %t447 = load { ptr, i64, i64 }, ptr %a444 %t448 = getelementptr inbounds %S.gen.StructDef, ptr %a403, i32 0, i32 1 %t449 = load { ptr, i64, i64 }, ptr %t448 store { ptr, i64, i64 } %t447, ptr %a451 store { ptr, i64, i64 } %t449, ptr %a452 call void @finch_str_concat(ptr %a450, ptr %a451, ptr %a452) %t453 = load { ptr, i64, i64 }, ptr %a450 store { ptr, i64, i64 } %t453, ptr %a455 store { ptr, i64, i64 } { ptr @.str.1158, i64 1, i64 0 }, ptr %a456 call void @finch_str_concat(ptr %a454, ptr %a455, ptr %a456) %t457 = load { ptr, i64, i64 }, ptr %a454 %t458 = load ptr, ptr %a1 %t459 = icmp eq ptr %t458, null br i1 %t459, label %panic1970, label %ok1971 panic1970: call void @finch_panic(ptr @.str.1159, i64 269, ptr @.str.1160) unreachable ok1971: %t460 = getelementptr inbounds %S.gen.Gen, ptr %t458, i32 0, i32 1 %t461 = getelementptr inbounds %S.ast.Node, ptr %a433, i32 0, i32 13 %t462 = load i64, ptr %t461 %t463 = load { ptr, i64, i64 }, ptr %t460 %t464 = extractvalue { ptr, i64, i64 } %t463, 1 %t465 = icmp uge i64 %t462, %t464 br i1 %t465, label %range1972, label %inrange1973 range1972: call void @finch_panic_index(ptr @.str.1161, i64 269, i64 %t462, i64 %t464) unreachable inrange1973: %t466 = extractvalue { ptr, i64, i64 } %t463, 0 %t467 = getelementptr inbounds { ptr, i64, i64 }, ptr %t466, i64 %t462 %t468 = load { ptr, i64, i64 }, ptr %t467 store { ptr, i64, i64 } %t457, ptr %a470 store { ptr, i64, i64 } %t468, ptr %a471 call void @finch_str_concat(ptr %a469, ptr %a470, ptr %a471) %t472 = load { ptr, i64, i64 }, ptr %a469 store { ptr, i64, i64 } %t472, ptr %a474 store { ptr, i64, i64 } { ptr @.str.1162, i64 1, i64 0 }, ptr %a475 call void @finch_str_concat(ptr %a473, ptr %a474, ptr %a475) %t476 = load { ptr, i64, i64 }, ptr %a473 %t477 = getelementptr inbounds %S.ast.Node, ptr %a433, i32 0, i32 11 %t478 = load i64, ptr %t477 call void @finch_str_from_int(ptr %a479, i64 %t478) %t480 = load { ptr, i64, i64 }, ptr %a479 store { ptr, i64, i64 } %t476, ptr %a482 store { ptr, i64, i64 } %t480, ptr %a483 call void @finch_str_concat(ptr %a481, ptr %a482, ptr %a483) %t484 = load { ptr, i64, i64 }, ptr %a481 store { ptr, i64, i64 } %t484, ptr %a486 store { ptr, i64, i64 } { ptr @.str.1163, i64 1, i64 0 }, ptr %a487 call void @finch_str_concat(ptr %a485, ptr %a486, ptr %a487) %t488 = load { ptr, i64, i64 }, ptr %a485 %t489 = getelementptr inbounds %S.ast.Node, ptr %a433, i32 0, i32 12 %t490 = load i64, ptr %t489 call void @finch_str_from_int(ptr %a491, i64 %t490) %t492 = load { ptr, i64, i64 }, ptr %a491 store { ptr, i64, i64 } %t488, ptr %a494 store { ptr, i64, i64 } %t492, ptr %a495 call void @finch_str_concat(ptr %a493, ptr %a494, ptr %a495) %t496 = load { ptr, i64, i64 }, ptr %a493 %t497 = load i64, ptr %t437 %t498 = add i64 %t497, 1 call void @finch_arr_reserve(ptr %t436, i64 %t498, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t499 = load ptr, ptr %t436 %t500 = getelementptr inbounds { ptr, i64, i64 }, ptr %t499, i64 %t497 store { ptr, i64, i64 } %t496, ptr %t500 store i64 %t498, ptr %t437 %t501 = getelementptr inbounds %S.gen.StructDef, ptr %a403, i32 0, i32 11 %t502 = getelementptr inbounds { ptr, i64, i64 }, ptr %t501, i32 0, i32 1 %t503 = load i64, ptr %t502 store i64 0, ptr %a504 br label %for.cond1974 for.cond1974: %t505 = load i64, ptr %a504 %t506 = icmp slt i64 %t505, %t503 br i1 %t506, label %for.body1975, label %for.end1977 for.body1975: %t507 = load ptr, ptr %a1 %t508 = icmp eq ptr %t507, null br i1 %t508, label %panic1978, label %ok1979 panic1978: call void @finch_panic(ptr @.str.1164, i64 271, ptr @.str.1165) unreachable ok1979: %t509 = getelementptr inbounds %S.gen.Gen, ptr %t507, i32 0, i32 27 %t510 = getelementptr inbounds { ptr, i64, i64 }, ptr %t509, i32 0, i32 1 %t511 = getelementptr inbounds %S.gen.StructDef, ptr %a403, i32 0, i32 0 %t512 = load { ptr, i64, i64 }, ptr %t511 store { ptr, i64, i64 } { ptr @.str.1166, i64 4, i64 0 }, ptr %a514 store { ptr, i64, i64 } %t512, ptr %a515 call void @finch_str_concat(ptr %a513, ptr %a514, ptr %a515) %t516 = load { ptr, i64, i64 }, ptr %a513 store { ptr, i64, i64 } %t516, ptr %a518 store { ptr, i64, i64 } { ptr @.str.1167, i64 1, i64 0 }, ptr %a519 call void @finch_str_concat(ptr %a517, ptr %a518, ptr %a519) %t520 = load { ptr, i64, i64 }, ptr %a517 %t521 = getelementptr inbounds %S.gen.StructDef, ptr %a403, i32 0, i32 1 %t522 = load { ptr, i64, i64 }, ptr %t521 store { ptr, i64, i64 } %t520, ptr %a524 store { ptr, i64, i64 } %t522, ptr %a525 call void @finch_str_concat(ptr %a523, ptr %a524, ptr %a525) %t526 = load { ptr, i64, i64 }, ptr %a523 store { ptr, i64, i64 } %t526, ptr %a528 store { ptr, i64, i64 } { ptr @.str.1168, i64 1, i64 0 }, ptr %a529 call void @finch_str_concat(ptr %a527, ptr %a528, ptr %a529) %t530 = load { ptr, i64, i64 }, ptr %a527 %t531 = getelementptr inbounds %S.gen.StructDef, ptr %a403, i32 0, i32 11 %t532 = load i64, ptr %a504 %t533 = load { ptr, i64, i64 }, ptr %t531 %t534 = extractvalue { ptr, i64, i64 } %t533, 1 %t535 = icmp uge i64 %t532, %t534 br i1 %t535, label %range1980, label %inrange1981 range1980: call void @finch_panic_index(ptr @.str.1169, i64 271, i64 %t532, i64 %t534) unreachable inrange1981: %t536 = extractvalue { ptr, i64, i64 } %t533, 0 %t537 = getelementptr inbounds { ptr, i64, i64 }, ptr %t536, i64 %t532 %t538 = load { ptr, i64, i64 }, ptr %t537 store { ptr, i64, i64 } %t530, ptr %a540 store { ptr, i64, i64 } %t538, ptr %a541 call void @finch_str_concat(ptr %a539, ptr %a540, ptr %a541) %t542 = load { ptr, i64, i64 }, ptr %a539 store { ptr, i64, i64 } %t542, ptr %a544 store { ptr, i64, i64 } { ptr @.str.1170, i64 1, i64 0 }, ptr %a545 call void @finch_str_concat(ptr %a543, ptr %a544, ptr %a545) %t546 = load { ptr, i64, i64 }, ptr %a543 %t547 = getelementptr inbounds %S.gen.StructDef, ptr %a403, i32 0, i32 12 %t548 = load i64, ptr %a504 %t549 = load { ptr, i64, i64 }, ptr %t547 %t550 = extractvalue { ptr, i64, i64 } %t549, 1 %t551 = icmp uge i64 %t548, %t550 br i1 %t551, label %range1982, label %inrange1983 range1982: call void @finch_panic_index(ptr @.str.1171, i64 271, i64 %t548, i64 %t550) unreachable inrange1983: %t552 = extractvalue { ptr, i64, i64 } %t549, 0 %t553 = getelementptr inbounds %S.ast.Type, ptr %t552, i64 %t548 %t554 = load %S.ast.Type, ptr %t553 %t555 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t554) store { ptr, i64, i64 } %t546, ptr %a557 store { ptr, i64, i64 } %t555, ptr %a558 call void @finch_str_concat(ptr %a556, ptr %a557, ptr %a558) %t559 = load { ptr, i64, i64 }, ptr %a556 %t560 = load i64, ptr %t510 %t561 = add i64 %t560, 1 call void @finch_arr_reserve(ptr %t509, i64 %t561, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t562 = load ptr, ptr %t509 %t563 = getelementptr inbounds { ptr, i64, i64 }, ptr %t562, i64 %t560 store { ptr, i64, i64 } %t559, ptr %t563 store i64 %t561, ptr %t510 br label %for.step1976 for.step1976: %t564 = load i64, ptr %a504 %t565 = add i64 %t564, 1 store i64 %t565, ptr %a504 br label %for.cond1974 for.end1977: br label %each.step1953 each.step1953: %t566 = load i64, ptr %a392 %t567 = add i64 %t566, 1 store i64 %t567, ptr %a392 br label %each.cond1951 each.end1954: %t568 = load ptr, ptr %a1 %t569 = icmp eq ptr %t568, null br i1 %t569, label %panic1984, label %ok1985 panic1984: call void @finch_panic(ptr @.str.1172, i64 274, ptr @.str.1173) unreachable ok1985: %t570 = getelementptr inbounds %S.gen.Gen, ptr %t568, i32 0, i32 0 %t571 = getelementptr inbounds { ptr, i64, i64 }, ptr %t570, i32 0, i32 1 %t572 = load i64, ptr %t571 store i64 0, ptr %a573 br label %for.cond1986 for.cond1986: %t574 = load i64, ptr %a573 %t575 = icmp slt i64 %t574, %t572 br i1 %t575, label %for.body1987, label %for.end1989 for.body1987: %t576 = load ptr, ptr %a1 %t577 = icmp eq ptr %t576, null br i1 %t577, label %panic1990, label %ok1991 panic1990: call void @finch_panic(ptr @.str.1174, i64 275, ptr @.str.1175) unreachable ok1991: %t578 = getelementptr inbounds %S.gen.Gen, ptr %t576, i32 0, i32 0 %t579 = load i64, ptr %a573 %t580 = load { ptr, i64, i64 }, ptr %t578 %t581 = extractvalue { ptr, i64, i64 } %t580, 1 %t582 = icmp uge i64 %t579, %t581 br i1 %t582, label %range1992, label %inrange1993 range1992: call void @finch_panic_index(ptr @.str.1176, i64 275, i64 %t579, i64 %t581) unreachable inrange1993: %t583 = extractvalue { ptr, i64, i64 } %t580, 0 %t584 = getelementptr inbounds %S.ast.Program, ptr %t583, i64 %t579 %t585 = getelementptr inbounds %S.ast.Program, ptr %t584, i32 0, i32 7 store i64 0, ptr %a586 br label %each.cond1994 each.cond1994: %t587 = getelementptr inbounds { ptr, i64, i64 }, ptr %t585, i32 0, i32 1 %t588 = load i64, ptr %t587 %t589 = load i64, ptr %a586 %t590 = icmp slt i64 %t589, %t588 br i1 %t590, label %each.body1995, label %each.end1997 each.body1995: %t591 = load ptr, ptr %t585 %t592 = getelementptr inbounds %S.ast.Node, ptr %t591, i64 %t589 %t593 = load %S.ast.Node, ptr %t592 store %S.ast.Node %t593, ptr %a594 call void @finch.copy.S_ast_Node(ptr %a595, ptr %a594) %t596 = load %S.ast.Node, ptr %a595 store %S.ast.Node %t596, ptr %a597 store { ptr, i64, i64 } { ptr @.str.1177, i64 0, i64 0 }, ptr %a598 store { ptr, i64, i64 } zeroinitializer, ptr %a599 %t600 = getelementptr inbounds %S.ast.Node, ptr %a597, i32 0, i32 9 store i64 0, ptr %a601 br label %each.cond1998 each.cond1998: %t602 = getelementptr inbounds { ptr, i64, i64 }, ptr %t600, i32 0, i32 1 %t603 = load i64, ptr %t602 %t604 = load i64, ptr %a601 %t605 = icmp slt i64 %t604, %t603 br i1 %t605, label %each.body1999, label %each.end2001 each.body1999: %t606 = load ptr, ptr %t600 %t607 = getelementptr inbounds %S.ast.Node, ptr %t606, i64 %t604 %t608 = load %S.ast.Node, ptr %t607 store %S.ast.Node %t608, ptr %a609 %t610 = getelementptr inbounds { ptr, i64, i64 }, ptr %a599, i32 0, i32 1 %t611 = getelementptr inbounds %S.ast.Node, ptr %a609, i32 0, i32 1 %t612 = load { ptr, i64, i64 }, ptr %t611 store { ptr, i64, i64 } %t612, ptr %a613 call void @finch_str_copy(ptr %a614, ptr %a613) %t615 = load { ptr, i64, i64 }, ptr %a614 %t616 = load i64, ptr %t610 %t617 = add i64 %t616, 1 call void @finch_arr_reserve(ptr %a599, i64 %t617, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t618 = load ptr, ptr %a599 %t619 = getelementptr inbounds { ptr, i64, i64 }, ptr %t618, i64 %t616 store { ptr, i64, i64 } %t615, ptr %t619 store i64 %t617, ptr %t610 br label %each.step2000 each.step2000: %t620 = load i64, ptr %a601 %t621 = add i64 %t620, 1 store i64 %t621, ptr %a601 br label %each.cond1998 each.end2001: %t622 = getelementptr inbounds { ptr, i64, i64 }, ptr %a599, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.1178, i64 1, i64 0 }, ptr %a623 call void @finch_str_join(ptr %a624, ptr %a599, ptr %a623) %t625 = load { ptr, i64, i64 }, ptr %a624 store { ptr, i64, i64 } %t625, ptr %a598 %t626 = load ptr, ptr %a1 %t627 = icmp eq ptr %t626, null br i1 %t627, label %panic2002, label %ok2003 panic2002: call void @finch_panic(ptr @.str.1179, i64 282, ptr @.str.1180) unreachable ok2003: %t628 = getelementptr inbounds %S.gen.Gen, ptr %t626, i32 0, i32 27 %t629 = getelementptr inbounds { ptr, i64, i64 }, ptr %t628, i32 0, i32 1 %t630 = load ptr, ptr %a1 %t631 = icmp eq ptr %t630, null br i1 %t631, label %panic2004, label %ok2005 panic2004: call void @finch_panic(ptr @.str.1182, i64 282, ptr @.str.1183) unreachable ok2005: %t632 = getelementptr inbounds %S.gen.Gen, ptr %t630, i32 0, i32 0 %t633 = load i64, ptr %a573 %t634 = load { ptr, i64, i64 }, ptr %t632 %t635 = extractvalue { ptr, i64, i64 } %t634, 1 %t636 = icmp uge i64 %t633, %t635 br i1 %t636, label %range2006, label %inrange2007 range2006: call void @finch_panic_index(ptr @.str.1184, i64 282, i64 %t633, i64 %t635) unreachable inrange2007: %t637 = extractvalue { ptr, i64, i64 } %t634, 0 %t638 = getelementptr inbounds %S.ast.Program, ptr %t637, i64 %t633 %t639 = getelementptr inbounds %S.ast.Program, ptr %t638, i32 0, i32 0 %t640 = load { ptr, i64, i64 }, ptr %t639 store { ptr, i64, i64 } { ptr @.str.1181, i64 3, i64 0 }, ptr %a642 store { ptr, i64, i64 } %t640, ptr %a643 call void @finch_str_concat(ptr %a641, ptr %a642, ptr %a643) %t644 = load { ptr, i64, i64 }, ptr %a641 store { ptr, i64, i64 } %t644, ptr %a646 store { ptr, i64, i64 } { ptr @.str.1185, i64 1, i64 0 }, ptr %a647 call void @finch_str_concat(ptr %a645, ptr %a646, ptr %a647) %t648 = load { ptr, i64, i64 }, ptr %a645 %t649 = getelementptr inbounds %S.ast.Node, ptr %a597, i32 0, i32 1 %t650 = load { ptr, i64, i64 }, ptr %t649 store { ptr, i64, i64 } %t648, ptr %a652 store { ptr, i64, i64 } %t650, ptr %a653 call void @finch_str_concat(ptr %a651, ptr %a652, ptr %a653) %t654 = load { ptr, i64, i64 }, ptr %a651 store { ptr, i64, i64 } %t654, ptr %a656 store { ptr, i64, i64 } { ptr @.str.1186, i64 1, i64 0 }, ptr %a657 call void @finch_str_concat(ptr %a655, ptr %a656, ptr %a657) %t658 = load { ptr, i64, i64 }, ptr %a655 %t659 = load ptr, ptr %a1 %t660 = icmp eq ptr %t659, null br i1 %t660, label %panic2008, label %ok2009 panic2008: call void @finch_panic(ptr @.str.1187, i64 282, ptr @.str.1188) unreachable ok2009: %t661 = getelementptr inbounds %S.gen.Gen, ptr %t659, i32 0, i32 1 %t662 = getelementptr inbounds %S.ast.Node, ptr %a597, i32 0, i32 13 %t663 = load i64, ptr %t662 %t664 = load { ptr, i64, i64 }, ptr %t661 %t665 = extractvalue { ptr, i64, i64 } %t664, 1 %t666 = icmp uge i64 %t663, %t665 br i1 %t666, label %range2010, label %inrange2011 range2010: call void @finch_panic_index(ptr @.str.1189, i64 282, i64 %t663, i64 %t665) unreachable inrange2011: %t667 = extractvalue { ptr, i64, i64 } %t664, 0 %t668 = getelementptr inbounds { ptr, i64, i64 }, ptr %t667, i64 %t663 %t669 = load { ptr, i64, i64 }, ptr %t668 store { ptr, i64, i64 } %t658, ptr %a671 store { ptr, i64, i64 } %t669, ptr %a672 call void @finch_str_concat(ptr %a670, ptr %a671, ptr %a672) %t673 = load { ptr, i64, i64 }, ptr %a670 store { ptr, i64, i64 } %t673, ptr %a675 store { ptr, i64, i64 } { ptr @.str.1190, i64 1, i64 0 }, ptr %a676 call void @finch_str_concat(ptr %a674, ptr %a675, ptr %a676) %t677 = load { ptr, i64, i64 }, ptr %a674 %t678 = getelementptr inbounds %S.ast.Node, ptr %a597, i32 0, i32 11 %t679 = load i64, ptr %t678 call void @finch_str_from_int(ptr %a680, i64 %t679) %t681 = load { ptr, i64, i64 }, ptr %a680 store { ptr, i64, i64 } %t677, ptr %a683 store { ptr, i64, i64 } %t681, ptr %a684 call void @finch_str_concat(ptr %a682, ptr %a683, ptr %a684) %t685 = load { ptr, i64, i64 }, ptr %a682 store { ptr, i64, i64 } %t685, ptr %a687 store { ptr, i64, i64 } { ptr @.str.1191, i64 1, i64 0 }, ptr %a688 call void @finch_str_concat(ptr %a686, ptr %a687, ptr %a688) %t689 = load { ptr, i64, i64 }, ptr %a686 %t690 = getelementptr inbounds %S.ast.Node, ptr %a597, i32 0, i32 12 %t691 = load i64, ptr %t690 call void @finch_str_from_int(ptr %a692, i64 %t691) %t693 = load { ptr, i64, i64 }, ptr %a692 store { ptr, i64, i64 } %t689, ptr %a695 store { ptr, i64, i64 } %t693, ptr %a696 call void @finch_str_concat(ptr %a694, ptr %a695, ptr %a696) %t697 = load { ptr, i64, i64 }, ptr %a694 store { ptr, i64, i64 } %t697, ptr %a699 store { ptr, i64, i64 } { ptr @.str.1192, i64 1, i64 0 }, ptr %a700 call void @finch_str_concat(ptr %a698, ptr %a699, ptr %a700) %t701 = load { ptr, i64, i64 }, ptr %a698 %t702 = load { ptr, i64, i64 }, ptr %a598 store { ptr, i64, i64 } %t701, ptr %a704 store { ptr, i64, i64 } %t702, ptr %a705 call void @finch_str_concat(ptr %a703, ptr %a704, ptr %a705) %t706 = load { ptr, i64, i64 }, ptr %a703 %t707 = load i64, ptr %t629 %t708 = add i64 %t707, 1 call void @finch_arr_reserve(ptr %t628, i64 %t708, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t709 = load ptr, ptr %t628 %t710 = getelementptr inbounds { ptr, i64, i64 }, ptr %t709, i64 %t707 store { ptr, i64, i64 } %t706, ptr %t710 store i64 %t708, ptr %t629 br label %each.step1996 each.step1996: %t711 = load i64, ptr %a586 %t712 = add i64 %t711, 1 store i64 %t712, ptr %a586 br label %each.cond1994 each.end1997: br label %for.step1988 for.step1988: %t713 = load i64, ptr %a573 %t714 = add i64 %t713, 1 store i64 %t714, ptr %a573 br label %for.cond1986 for.end1989: ret void } define internal void @finch.gen.fail(ptr %p0, %S.ast.Node %p1, { ptr, i64, i64 } %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = icmp eq ptr %t4, null br i1 %t5, label %panic2012, label %ok2013 panic2012: call void @finch_panic(ptr @.str.1193, i64 288, ptr @.str.1194) unreachable ok2013: %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 26 %t7 = load i1, ptr %t6 br label %logic.from2014 logic.from2014: br i1 %t7, label %logic.rhs2015, label %logic.end2016 logic.rhs2015: %t8 = load ptr, ptr %a1 %t9 = icmp eq ptr %t8, null br i1 %t9, label %panic2017, label %ok2018 panic2017: call void @finch_panic(ptr @.str.1195, i64 288, ptr @.str.1196) unreachable ok2018: %t10 = getelementptr inbounds %S.gen.Gen, ptr %t8, i32 0, i32 27 %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t10, i32 0, i32 1 %t12 = load i64, ptr %t11 %t13 = icmp sgt i64 %t12, 0 br label %logic.rend2019 logic.rend2019: br label %logic.end2016 logic.end2016: %t14 = phi i1 [ false, %logic.from2014 ], [ %t13, %logic.rend2019 ] br i1 %t14, label %then2020, label %endif2022 then2020: %t15 = load ptr, ptr %a1 %t16 = icmp eq ptr %t15, null br i1 %t16, label %panic2023, label %ok2024 panic2023: call void @finch_panic(ptr @.str.1197, i64 289, ptr @.str.1198) unreachable ok2024: %t17 = getelementptr inbounds %S.gen.Gen, ptr %t15, i32 0, i32 27 %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t17, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.1199, i64 1, i64 0 }, ptr %a19 call void @finch_str_join(ptr %a20, ptr %t17, ptr %a19) %t21 = load { ptr, i64, i64 }, ptr %a20 %t22 = extractvalue { ptr, i64, i64 } %t21, 1 %t23 = trunc i64 %t22 to i32 %t24 = extractvalue { ptr, i64, i64 } %t21, 0 %t25 = icmp eq ptr %t24, null %t26 = select i1 %t25, ptr @.str.1200, ptr %t24 %t27 = call i32 (ptr, ...) @printf(ptr @.str.1201, i32 %t23, ptr %t26) %t28 = call i32 (ptr, ...) @printf(ptr @.str.1202) br label %endif2022 endif2022: %t29 = load ptr, ptr %a1 %t30 = icmp eq ptr %t29, null br i1 %t30, label %panic2025, label %ok2026 panic2025: call void @finch_panic(ptr @.str.1203, i64 291, ptr @.str.1204) unreachable ok2026: %t31 = getelementptr inbounds %S.gen.Gen, ptr %t29, i32 0, i32 1 %t32 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 %t33 = load i64, ptr %t32 %t34 = load { ptr, i64, i64 }, ptr %t31 %t35 = extractvalue { ptr, i64, i64 } %t34, 1 %t36 = icmp uge i64 %t33, %t35 br i1 %t36, label %range2027, label %inrange2028 range2027: call void @finch_panic_index(ptr @.str.1205, i64 291, i64 %t33, i64 %t35) unreachable inrange2028: %t37 = extractvalue { ptr, i64, i64 } %t34, 0 %t38 = getelementptr inbounds { ptr, i64, i64 }, ptr %t37, i64 %t33 %t39 = load { ptr, i64, i64 }, ptr %t38 store { ptr, i64, i64 } %t39, ptr %a41 store { ptr, i64, i64 } { ptr @.str.1206, i64 1, i64 0 }, ptr %a42 call void @finch_str_concat(ptr %a40, ptr %a41, ptr %a42) %t43 = load { ptr, i64, i64 }, ptr %a40 %t44 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 %t45 = load i64, ptr %t44 call void @finch_str_from_int(ptr %a46, i64 %t45) %t47 = load { ptr, i64, i64 }, ptr %a46 store { ptr, i64, i64 } %t43, ptr %a49 store { ptr, i64, i64 } %t47, ptr %a50 call void @finch_str_concat(ptr %a48, ptr %a49, ptr %a50) %t51 = load { ptr, i64, i64 }, ptr %a48 store { ptr, i64, i64 } %t51, ptr %a53 store { ptr, i64, i64 } { ptr @.str.1207, i64 1, i64 0 }, ptr %a54 call void @finch_str_concat(ptr %a52, ptr %a53, ptr %a54) %t55 = load { ptr, i64, i64 }, ptr %a52 %t56 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 %t57 = load i64, ptr %t56 call void @finch_str_from_int(ptr %a58, i64 %t57) %t59 = load { ptr, i64, i64 }, ptr %a58 store { ptr, i64, i64 } %t55, ptr %a61 store { ptr, i64, i64 } %t59, ptr %a62 call void @finch_str_concat(ptr %a60, ptr %a61, ptr %a62) %t63 = load { ptr, i64, i64 }, ptr %a60 store { ptr, i64, i64 } %t63, ptr %a65 store { ptr, i64, i64 } { ptr @.str.1208, i64 9, i64 0 }, ptr %a66 call void @finch_str_concat(ptr %a64, ptr %a65, ptr %a66) %t67 = load { ptr, i64, i64 }, ptr %a64 %t68 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t67, ptr %a70 store { ptr, i64, i64 } %t68, ptr %a71 call void @finch_str_concat(ptr %a69, ptr %a70, ptr %a71) %t72 = load { ptr, i64, i64 }, ptr %a69 %t73 = load ptr, ptr %a1 %t74 = icmp eq ptr %t73, null br i1 %t74, label %panic2029, label %ok2030 panic2029: call void @finch_panic(ptr @.str.1209, i64 291, ptr @.str.1210) unreachable ok2030: %t75 = getelementptr inbounds %S.gen.Gen, ptr %t73, i32 0, i32 19 %t76 = load { ptr, i64, i64 }, ptr %t75 store { ptr, i64, i64 } %t72, ptr %a78 store { ptr, i64, i64 } %t76, ptr %a79 call void @finch_str_concat(ptr %a77, ptr %a78, ptr %a79) %t80 = load { ptr, i64, i64 }, ptr %a77 %t81 = extractvalue { ptr, i64, i64 } %t80, 1 %t82 = trunc i64 %t81 to i32 %t83 = extractvalue { ptr, i64, i64 } %t80, 0 %t84 = icmp eq ptr %t83, null %t85 = select i1 %t84, ptr @.str.1211, ptr %t83 %t86 = call i32 (ptr, ...) @printf(ptr @.str.1212, i32 %t82, ptr %t85) %t87 = call i32 (ptr, ...) @printf(ptr @.str.1213) %t88 = trunc i64 1 to i32 %t89 = call i32 @fflush(ptr null) call void @exit(i32 %t88) ret void } define internal void @finch.gen.emit(ptr %p0, { ptr, i64, i64 } %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null br i1 %t4, label %panic2031, label %ok2032 panic2031: call void @finch_panic(ptr @.str.1214, i64 297, ptr @.str.1215) unreachable ok2032: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 34 %t6 = load i64, ptr %t5 %t7 = icmp sge i64 %t6, 0 br label %logic.from2033 logic.from2033: br i1 %t7, label %logic.rhs2034, label %logic.end2035 logic.rhs2034: %t8 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t8, ptr %a9 store { ptr, i64, i64 } { ptr @.str.1217, i64 5, i64 0 }, ptr %a11 %t12 = call i64 @finch_str_find(ptr %a9, ptr %a11) %t13 = icmp sge i64 %t12, 0 br label %logic.rend2036 logic.rend2036: br label %logic.end2035 logic.end2035: %t14 = phi i1 [ false, %logic.from2033 ], [ %t13, %logic.rend2036 ] br i1 %t14, label %then2037, label %endif2039 then2037: %t15 = load ptr, ptr %a1 %t16 = icmp eq ptr %t15, null br i1 %t16, label %panic2040, label %ok2041 panic2040: call void @finch_panic(ptr @.str.1218, i64 298, ptr @.str.1219) unreachable ok2041: %t17 = getelementptr inbounds %S.gen.Gen, ptr %t15, i32 0, i32 4 %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t17, i32 0, i32 1 %t19 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.1220, i64 2, i64 0 }, ptr %a21 store { ptr, i64, i64 } %t19, ptr %a22 call void @finch_str_concat(ptr %a20, ptr %a21, ptr %a22) %t23 = load { ptr, i64, i64 }, ptr %a20 store { ptr, i64, i64 } %t23, ptr %a25 store { ptr, i64, i64 } { ptr @.str.1221, i64 8, i64 0 }, ptr %a26 call void @finch_str_concat(ptr %a24, ptr %a25, ptr %a26) %t27 = load { ptr, i64, i64 }, ptr %a24 %t28 = load ptr, ptr %a1 %t29 = call i64 @finch.gen.dbgLocation(ptr %t28) call void @finch_str_from_int(ptr %a30, i64 %t29) %t31 = load { ptr, i64, i64 }, ptr %a30 store { ptr, i64, i64 } %t27, ptr %a33 store { ptr, i64, i64 } %t31, ptr %a34 call void @finch_str_concat(ptr %a32, ptr %a33, ptr %a34) %t35 = load { ptr, i64, i64 }, ptr %a32 %t36 = load i64, ptr %t18 %t37 = add i64 %t36, 1 call void @finch_arr_reserve(ptr %t17, i64 %t37, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t38 = load ptr, ptr %t17 %t39 = getelementptr inbounds { ptr, i64, i64 }, ptr %t38, i64 %t36 store { ptr, i64, i64 } %t35, ptr %t39 store i64 %t37, ptr %t18 ret void endif2039: %t40 = load ptr, ptr %a1 %t41 = icmp eq ptr %t40, null br i1 %t41, label %panic2042, label %ok2043 panic2042: call void @finch_panic(ptr @.str.1222, i64 301, ptr @.str.1223) unreachable ok2043: %t42 = getelementptr inbounds %S.gen.Gen, ptr %t40, i32 0, i32 4 %t43 = getelementptr inbounds { ptr, i64, i64 }, ptr %t42, i32 0, i32 1 %t44 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.1224, i64 2, i64 0 }, ptr %a46 store { ptr, i64, i64 } %t44, ptr %a47 call void @finch_str_concat(ptr %a45, ptr %a46, ptr %a47) %t48 = load { ptr, i64, i64 }, ptr %a45 %t49 = load i64, ptr %t43 %t50 = add i64 %t49, 1 call void @finch_arr_reserve(ptr %t42, i64 %t50, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t51 = load ptr, ptr %t42 %t52 = getelementptr inbounds { ptr, i64, i64 }, ptr %t51, i64 %t49 store { ptr, i64, i64 } %t48, ptr %t52 store i64 %t50, ptr %t43 ret void } define internal { ptr, i64, i64 } @finch.gen.tmpName(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = icmp eq ptr %t2, null br i1 %t3, label %panic2044, label %ok2045 panic2044: call void @finch_panic(ptr @.str.1225, i64 305, ptr @.str.1226) unreachable ok2045: %t4 = getelementptr inbounds %S.gen.Gen, ptr %t2, i32 0, i32 6 %t5 = load i64, ptr %t4 %t6 = add i64 %t5, 1 store i64 %t6, ptr %t4 %t7 = load ptr, ptr %a1 %t8 = icmp eq ptr %t7, null br i1 %t8, label %panic2046, label %ok2047 panic2046: call void @finch_panic(ptr @.str.1228, i64 306, ptr @.str.1229) unreachable ok2047: %t9 = getelementptr inbounds %S.gen.Gen, ptr %t7, i32 0, i32 6 %t10 = load i64, ptr %t9 call void @finch_str_from_int(ptr %a11, i64 %t10) %t12 = load { ptr, i64, i64 }, ptr %a11 store { ptr, i64, i64 } { ptr @.str.1227, i64 2, i64 0 }, ptr %a14 store { ptr, i64, i64 } %t12, ptr %a15 call void @finch_str_concat(ptr %a13, ptr %a14, ptr %a15) %t16 = load { ptr, i64, i64 }, ptr %a13 ret { ptr, i64, i64 } %t16 } define internal { ptr, i64, i64 } @finch.gen.newLabel(ptr %p0, { ptr, i64, i64 } %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null br i1 %t4, label %panic2048, label %ok2049 panic2048: call void @finch_panic(ptr @.str.1230, i64 310, ptr @.str.1231) unreachable ok2049: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 7 %t6 = load i64, ptr %t5 %t7 = add i64 %t6, 1 store i64 %t7, ptr %t5 %t8 = load { ptr, i64, i64 }, ptr %a2 %t9 = load ptr, ptr %a1 %t10 = icmp eq ptr %t9, null br i1 %t10, label %panic2050, label %ok2051 panic2050: call void @finch_panic(ptr @.str.1232, i64 311, ptr @.str.1233) unreachable ok2051: %t11 = getelementptr inbounds %S.gen.Gen, ptr %t9, i32 0, i32 7 %t12 = load i64, ptr %t11 call void @finch_str_from_int(ptr %a13, i64 %t12) %t14 = load { ptr, i64, i64 }, ptr %a13 store { ptr, i64, i64 } %t8, ptr %a16 store { ptr, i64, i64 } %t14, ptr %a17 call void @finch_str_concat(ptr %a15, ptr %a16, ptr %a17) %t18 = load { ptr, i64, i64 }, ptr %a15 ret { ptr, i64, i64 } %t18 } define internal void @finch.gen.label(ptr %p0, { ptr, i64, i64 } %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null br i1 %t4, label %panic2052, label %ok2053 panic2052: call void @finch_panic(ptr @.str.1234, i64 315, ptr @.str.1235) unreachable ok2053: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 4 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 %t7 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t7, ptr %a9 store { ptr, i64, i64 } { ptr @.str.1236, i64 1, i64 0 }, ptr %a10 call void @finch_str_concat(ptr %a8, ptr %a9, ptr %a10) %t11 = load { ptr, i64, i64 }, ptr %a8 %t12 = load i64, ptr %t6 %t13 = add i64 %t12, 1 call void @finch_arr_reserve(ptr %t5, i64 %t13, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t14 = load ptr, ptr %t5 %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t14, i64 %t12 store { ptr, i64, i64 } %t11, ptr %t15 store i64 %t13, ptr %t6 %t16 = load ptr, ptr %a1 %t17 = icmp eq ptr %t16, null br i1 %t17, label %panic2054, label %ok2055 panic2054: call void @finch_panic(ptr @.str.1237, i64 316, ptr @.str.1238) unreachable ok2055: %t18 = getelementptr inbounds %S.gen.Gen, ptr %t16, i32 0, i32 9 store i1 false, ptr %t18 ret void } define internal void @finch.gen.br(ptr %p0, { ptr, i64, i64 } %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null br i1 %t4, label %panic2056, label %ok2057 panic2056: call void @finch_panic(ptr @.str.1239, i64 320, ptr @.str.1240) unreachable ok2057: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 9 %t6 = load i1, ptr %t5 %t7 = xor i1 %t6, true br i1 %t7, label %then2058, label %endif2060 then2058: %t8 = load ptr, ptr %a1 %t9 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.1241, i64 10, i64 0 }, ptr %a11 store { ptr, i64, i64 } %t9, ptr %a12 call void @finch_str_concat(ptr %a10, ptr %a11, ptr %a12) %t13 = load { ptr, i64, i64 }, ptr %a10 call void @finch.gen.emit(ptr %t8, { ptr, i64, i64 } %t13) %t14 = load ptr, ptr %a1 %t15 = icmp eq ptr %t14, null br i1 %t15, label %panic2061, label %ok2062 panic2061: call void @finch_panic(ptr @.str.1242, i64 322, ptr @.str.1243) unreachable ok2062: %t16 = getelementptr inbounds %S.gen.Gen, ptr %t14, i32 0, i32 9 store i1 true, ptr %t16 br label %endif2060 endif2060: ret void } define internal void @finch.gen.condBr(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, { ptr, i64, i64 } %p3) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 store { ptr, i64, i64 } %p3, ptr %a4 %t5 = load ptr, ptr %a1 %t6 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.1244, i64 6, i64 0 }, ptr %a8 store { ptr, i64, i64 } %t6, ptr %a9 call void @finch_str_concat(ptr %a7, ptr %a8, ptr %a9) %t10 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t10, ptr %a12 store { ptr, i64, i64 } { ptr @.str.1245, i64 9, i64 0 }, ptr %a13 call void @finch_str_concat(ptr %a11, ptr %a12, ptr %a13) %t14 = load { ptr, i64, i64 }, ptr %a11 %t15 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t14, ptr %a17 store { ptr, i64, i64 } %t15, ptr %a18 call void @finch_str_concat(ptr %a16, ptr %a17, ptr %a18) %t19 = load { ptr, i64, i64 }, ptr %a16 store { ptr, i64, i64 } %t19, ptr %a21 store { ptr, i64, i64 } { ptr @.str.1246, i64 9, i64 0 }, ptr %a22 call void @finch_str_concat(ptr %a20, ptr %a21, ptr %a22) %t23 = load { ptr, i64, i64 }, ptr %a20 %t24 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t23, ptr %a26 store { ptr, i64, i64 } %t24, ptr %a27 call void @finch_str_concat(ptr %a25, ptr %a26, ptr %a27) %t28 = load { ptr, i64, i64 }, ptr %a25 call void @finch.gen.emit(ptr %t5, { ptr, i64, i64 } %t28) %t29 = load ptr, ptr %a1 %t30 = icmp eq ptr %t29, null br i1 %t30, label %panic2063, label %ok2064 panic2063: call void @finch_panic(ptr @.str.1247, i64 328, ptr @.str.1248) unreachable ok2064: %t31 = getelementptr inbounds %S.gen.Gen, ptr %t29, i32 0, i32 9 store i1 true, ptr %t31 ret void } define internal { ptr, i64, i64 } @finch.gen.alloca(ptr %p0, { ptr, i64, i64 } %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null br i1 %t4, label %panic2065, label %ok2066 panic2065: call void @finch_panic(ptr @.str.1249, i64 332, ptr @.str.1250) unreachable ok2066: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 6 %t6 = load i64, ptr %t5 %t7 = add i64 %t6, 1 store i64 %t7, ptr %t5 %t8 = load ptr, ptr %a1 %t9 = icmp eq ptr %t8, null br i1 %t9, label %panic2067, label %ok2068 panic2067: call void @finch_panic(ptr @.str.1252, i64 333, ptr @.str.1253) unreachable ok2068: %t10 = getelementptr inbounds %S.gen.Gen, ptr %t8, i32 0, i32 6 %t11 = load i64, ptr %t10 call void @finch_str_from_int(ptr %a12, i64 %t11) %t13 = load { ptr, i64, i64 }, ptr %a12 store { ptr, i64, i64 } { ptr @.str.1251, i64 2, i64 0 }, ptr %a15 store { ptr, i64, i64 } %t13, ptr %a16 call void @finch_str_concat(ptr %a14, ptr %a15, ptr %a16) %t17 = load { ptr, i64, i64 }, ptr %a14 store { ptr, i64, i64 } %t17, ptr %a18 %t19 = load ptr, ptr %a1 %t20 = icmp eq ptr %t19, null br i1 %t20, label %panic2069, label %ok2070 panic2069: call void @finch_panic(ptr @.str.1254, i64 334, ptr @.str.1255) unreachable ok2070: %t21 = getelementptr inbounds %S.gen.Gen, ptr %t19, i32 0, i32 5 %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %t21, i32 0, i32 1 %t23 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } { ptr @.str.1256, i64 2, i64 0 }, ptr %a25 store { ptr, i64, i64 } %t23, ptr %a26 call void @finch_str_concat(ptr %a24, ptr %a25, ptr %a26) %t27 = load { ptr, i64, i64 }, ptr %a24 store { ptr, i64, i64 } %t27, ptr %a29 store { ptr, i64, i64 } { ptr @.str.1257, i64 10, i64 0 }, ptr %a30 call void @finch_str_concat(ptr %a28, ptr %a29, ptr %a30) %t31 = load { ptr, i64, i64 }, ptr %a28 %t32 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t31, ptr %a34 store { ptr, i64, i64 } %t32, ptr %a35 call void @finch_str_concat(ptr %a33, ptr %a34, ptr %a35) %t36 = load { ptr, i64, i64 }, ptr %a33 store { ptr, i64, i64 } %t36, ptr %a38 store { ptr, i64, i64 } { ptr @.str.1258, i64 10, i64 0 }, ptr %a39 call void @finch_str_concat(ptr %a37, ptr %a38, ptr %a39) %t40 = load { ptr, i64, i64 }, ptr %a37 %t41 = load i64, ptr %t22 %t42 = add i64 %t41, 1 call void @finch_arr_reserve(ptr %t21, i64 %t42, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t43 = load ptr, ptr %t21 %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t43, i64 %t41 store { ptr, i64, i64 } %t40, ptr %t44 store i64 %t42, ptr %t22 %t45 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t45, ptr %a46 call void @finch_str_copy(ptr %a47, ptr %a46) %t48 = load { ptr, i64, i64 }, ptr %a47 ret { ptr, i64, i64 } %t48 } define internal { ptr, i64, i64 } @finch.gen.load(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = call { ptr, i64, i64 } @finch.gen.tmpName(ptr %t4) store { ptr, i64, i64 } %t5, ptr %a6 %t7 = load ptr, ptr %a1 %t8 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t8, ptr %a10 store { ptr, i64, i64 } { ptr @.str.1259, i64 8, i64 0 }, ptr %a11 call void @finch_str_concat(ptr %a9, ptr %a10, ptr %a11) %t12 = load { ptr, i64, i64 }, ptr %a9 %t13 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t12, ptr %a15 store { ptr, i64, i64 } %t13, ptr %a16 call void @finch_str_concat(ptr %a14, ptr %a15, ptr %a16) %t17 = load { ptr, i64, i64 }, ptr %a14 store { ptr, i64, i64 } %t17, ptr %a19 store { ptr, i64, i64 } { ptr @.str.1260, i64 6, i64 0 }, ptr %a20 call void @finch_str_concat(ptr %a18, ptr %a19, ptr %a20) %t21 = load { ptr, i64, i64 }, ptr %a18 %t22 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t21, ptr %a24 store { ptr, i64, i64 } %t22, ptr %a25 call void @finch_str_concat(ptr %a23, ptr %a24, ptr %a25) %t26 = load { ptr, i64, i64 }, ptr %a23 call void @finch.gen.emit(ptr %t7, { ptr, i64, i64 } %t26) %t27 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t27, ptr %a28 call void @finch_str_copy(ptr %a29, ptr %a28) %t30 = load { ptr, i64, i64 }, ptr %a29 ret { ptr, i64, i64 } %t30 } define internal void @finch.gen.store(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, { ptr, i64, i64 } %p3) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 store { ptr, i64, i64 } %p3, ptr %a4 %t5 = load ptr, ptr %a1 %t6 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.1261, i64 6, i64 0 }, ptr %a8 store { ptr, i64, i64 } %t6, ptr %a9 call void @finch_str_concat(ptr %a7, ptr %a8, ptr %a9) %t10 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t10, ptr %a12 store { ptr, i64, i64 } { ptr @.str.1262, i64 1, i64 0 }, ptr %a13 call void @finch_str_concat(ptr %a11, ptr %a12, ptr %a13) %t14 = load { ptr, i64, i64 }, ptr %a11 %t15 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t14, ptr %a17 store { ptr, i64, i64 } %t15, ptr %a18 call void @finch_str_concat(ptr %a16, ptr %a17, ptr %a18) %t19 = load { ptr, i64, i64 }, ptr %a16 store { ptr, i64, i64 } %t19, ptr %a21 store { ptr, i64, i64 } { ptr @.str.1263, i64 6, i64 0 }, ptr %a22 call void @finch_str_concat(ptr %a20, ptr %a21, ptr %a22) %t23 = load { ptr, i64, i64 }, ptr %a20 %t24 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t23, ptr %a26 store { ptr, i64, i64 } %t24, ptr %a27 call void @finch_str_concat(ptr %a25, ptr %a26, ptr %a27) %t28 = load { ptr, i64, i64 }, ptr %a25 call void @finch.gen.emit(ptr %t5, { ptr, i64, i64 } %t28) ret void } define internal { ptr, i64, i64 } @finch.gen.spill(ptr %p0, %S.gen.Val %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.gen.Val, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.gen.Val %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = load ptr, ptr %a1 %t5 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t6 = load %S.ast.Type, ptr %t5 %t7 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t4, %S.ast.Type %t6) %t8 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t3, { ptr, i64, i64 } %t7) store { ptr, i64, i64 } %t8, ptr %a9 %t10 = load ptr, ptr %a1 %t11 = load ptr, ptr %a1 %t12 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t13 = load %S.ast.Type, ptr %t12 %t14 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t11, %S.ast.Type %t13) %t15 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 %t16 = load { ptr, i64, i64 }, ptr %t15 %t17 = load { ptr, i64, i64 }, ptr %a9 call void @finch.gen.store(ptr %t10, { ptr, i64, i64 } %t14, { ptr, i64, i64 } %t16, { ptr, i64, i64 } %t17) %t18 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t18, ptr %a19 call void @finch_str_copy(ptr %a20, ptr %a19) %t21 = load { ptr, i64, i64 }, ptr %a20 ret { ptr, i64, i64 } %t21 } define internal { ptr, i64, i64 } @finch.gen.op(ptr %p0, { ptr, i64, i64 } %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = call { ptr, i64, i64 } @finch.gen.tmpName(ptr %t3) store { ptr, i64, i64 } %t4, ptr %a5 %t6 = load ptr, ptr %a1 %t7 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } %t7, ptr %a9 store { ptr, i64, i64 } { ptr @.str.1264, i64 3, i64 0 }, ptr %a10 call void @finch_str_concat(ptr %a8, ptr %a9, ptr %a10) %t11 = load { ptr, i64, i64 }, ptr %a8 %t12 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t11, ptr %a14 store { ptr, i64, i64 } %t12, ptr %a15 call void @finch_str_concat(ptr %a13, ptr %a14, ptr %a15) %t16 = load { ptr, i64, i64 }, ptr %a13 call void @finch.gen.emit(ptr %t6, { ptr, i64, i64 } %t16) %t17 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } %t17, ptr %a18 call void @finch_str_copy(ptr %a19, ptr %a18) %t20 = load { ptr, i64, i64 }, ptr %a19 ret { ptr, i64, i64 } %t20 } define internal i1 @finch.gen.has({ ptr, i64, i64 } %p0, { ptr, i64, i64 } %p1) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca i64, align 16 %a8 = alloca i64, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t4 = load { ptr, i64, i64 }, ptr %a2 store i64 -1, ptr %a5 %t6 = load i64, ptr %t3 %t7 = load ptr, ptr %a1 store i64 0, ptr %a8 br label %find.cond2071 find.cond2071: %t9 = load i64, ptr %a8 %t10 = icmp slt i64 %t9, %t6 br i1 %t10, label %find.body2072, label %find.end2075 find.body2072: %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t7, i64 %t9 %t12 = load { ptr, i64, i64 }, ptr %t11 store { ptr, i64, i64 } %t12, ptr %a13 store { ptr, i64, i64 } %t4, ptr %a14 %t15 = call i32 @finch_str_eq(ptr %a13, ptr %a14) %t16 = icmp ne i32 %t15, 0 br i1 %t16, label %find.hit2073, label %find.next2074 find.hit2073: store i64 %t9, ptr %a5 br label %find.end2075 find.next2074: %t17 = add i64 %t9, 1 store i64 %t17, ptr %a8 br label %find.cond2071 find.end2075: %t18 = load i64, ptr %a5 %t19 = icmp sge i64 %t18, 0 ret i1 %t19 } define internal %S.ast.Type @finch.gen.T({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = load { ptr, i64, i64 }, ptr %a1 %t3 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } %t2) ret %S.ast.Type %t3 } define internal i1 @finch.gen.isSigned(%S.ast.Type %p0) { entry: %a1 = alloca %S.ast.Type, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 store %S.ast.Type %p0, ptr %a1 %t2 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t3 = load { ptr, i64, i64 }, ptr %t2 store { ptr, i64, i64 } %t3, ptr %a4 call void @finch_str_copy(ptr %a5, ptr %a4) %t6 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } %t6, ptr %a7 %t8 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t8, ptr %a9 store { ptr, i64, i64 } { ptr @.str.1265, i64 3, i64 0 }, ptr %a10 %t11 = call i32 @finch_str_eq(ptr %a9, ptr %a10) %t12 = icmp ne i32 %t11, 0 br label %logic.from2076 logic.from2076: br i1 %t12, label %logic.end2078, label %logic.rhs2077 logic.rhs2077: %t13 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t13, ptr %a14 store { ptr, i64, i64 } { ptr @.str.1266, i64 2, i64 0 }, ptr %a15 %t16 = call i32 @finch_str_eq(ptr %a14, ptr %a15) %t17 = icmp ne i32 %t16, 0 br label %logic.rend2079 logic.rend2079: br label %logic.end2078 logic.end2078: %t18 = phi i1 [ true, %logic.from2076 ], [ %t17, %logic.rend2079 ] br label %logic.from2080 logic.from2080: br i1 %t18, label %logic.end2082, label %logic.rhs2081 logic.rhs2081: %t19 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t19, ptr %a20 store { ptr, i64, i64 } { ptr @.str.1267, i64 3, i64 0 }, ptr %a21 %t22 = call i32 @finch_str_eq(ptr %a20, ptr %a21) %t23 = icmp ne i32 %t22, 0 br label %logic.rend2083 logic.rend2083: br label %logic.end2082 logic.end2082: %t24 = phi i1 [ true, %logic.from2080 ], [ %t23, %logic.rend2083 ] br label %logic.from2084 logic.from2084: br i1 %t24, label %logic.end2086, label %logic.rhs2085 logic.rhs2085: %t25 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t25, ptr %a26 store { ptr, i64, i64 } { ptr @.str.1268, i64 3, i64 0 }, ptr %a27 %t28 = call i32 @finch_str_eq(ptr %a26, ptr %a27) %t29 = icmp ne i32 %t28, 0 br label %logic.rend2087 logic.rend2087: br label %logic.end2086 logic.end2086: %t30 = phi i1 [ true, %logic.from2084 ], [ %t29, %logic.rend2087 ] ret i1 %t30 } define internal i1 @finch.gen.isUnsigned(%S.ast.Type %p0) { entry: %a1 = alloca %S.ast.Type, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 store %S.ast.Type %p0, ptr %a1 %t2 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t3 = load { ptr, i64, i64 }, ptr %t2 store { ptr, i64, i64 } %t3, ptr %a4 call void @finch_str_copy(ptr %a5, ptr %a4) %t6 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } %t6, ptr %a7 %t8 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t8, ptr %a9 store { ptr, i64, i64 } { ptr @.str.1269, i64 2, i64 0 }, ptr %a10 %t11 = call i32 @finch_str_eq(ptr %a9, ptr %a10) %t12 = icmp ne i32 %t11, 0 br label %logic.from2088 logic.from2088: br i1 %t12, label %logic.end2090, label %logic.rhs2089 logic.rhs2089: %t13 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t13, ptr %a14 store { ptr, i64, i64 } { ptr @.str.1270, i64 3, i64 0 }, ptr %a15 %t16 = call i32 @finch_str_eq(ptr %a14, ptr %a15) %t17 = icmp ne i32 %t16, 0 br label %logic.rend2091 logic.rend2091: br label %logic.end2090 logic.end2090: %t18 = phi i1 [ true, %logic.from2088 ], [ %t17, %logic.rend2091 ] br label %logic.from2092 logic.from2092: br i1 %t18, label %logic.end2094, label %logic.rhs2093 logic.rhs2093: %t19 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t19, ptr %a20 store { ptr, i64, i64 } { ptr @.str.1271, i64 3, i64 0 }, ptr %a21 %t22 = call i32 @finch_str_eq(ptr %a20, ptr %a21) %t23 = icmp ne i32 %t22, 0 br label %logic.rend2095 logic.rend2095: br label %logic.end2094 logic.end2094: %t24 = phi i1 [ true, %logic.from2092 ], [ %t23, %logic.rend2095 ] br label %logic.from2096 logic.from2096: br i1 %t24, label %logic.end2098, label %logic.rhs2097 logic.rhs2097: %t25 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t25, ptr %a26 store { ptr, i64, i64 } { ptr @.str.1272, i64 3, i64 0 }, ptr %a27 %t28 = call i32 @finch_str_eq(ptr %a26, ptr %a27) %t29 = icmp ne i32 %t28, 0 br label %logic.rend2099 logic.rend2099: br label %logic.end2098 logic.end2098: %t30 = phi i1 [ true, %logic.from2096 ], [ %t29, %logic.rend2099 ] ret i1 %t30 } define internal i1 @finch.gen.isInt(%S.ast.Type %p0) { entry: %a1 = alloca %S.ast.Type, align 16 store %S.ast.Type %p0, ptr %a1 %t2 = load %S.ast.Type, ptr %a1 %t3 = call i1 @finch.gen.isSigned(%S.ast.Type %t2) br label %logic.from2100 logic.from2100: br i1 %t3, label %logic.end2102, label %logic.rhs2101 logic.rhs2101: %t4 = load %S.ast.Type, ptr %a1 %t5 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t4) br label %logic.rend2103 logic.rend2103: br label %logic.end2102 logic.end2102: %t6 = phi i1 [ true, %logic.from2100 ], [ %t5, %logic.rend2103 ] ret i1 %t6 } define internal i1 @finch.gen.isFloat(%S.ast.Type %p0) { entry: %a1 = alloca %S.ast.Type, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 store %S.ast.Type %p0, ptr %a1 %t2 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t3 = load { ptr, i64, i64 }, ptr %t2 store { ptr, i64, i64 } %t3, ptr %a4 store { ptr, i64, i64 } { ptr @.str.1273, i64 5, i64 0 }, ptr %a5 %t6 = call i32 @finch_str_eq(ptr %a4, ptr %a5) %t7 = icmp ne i32 %t6, 0 br label %logic.from2104 logic.from2104: br i1 %t7, label %logic.end2106, label %logic.rhs2105 logic.rhs2105: %t8 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t9 = load { ptr, i64, i64 }, ptr %t8 store { ptr, i64, i64 } %t9, ptr %a10 store { ptr, i64, i64 } { ptr @.str.1274, i64 3, i64 0 }, ptr %a11 %t12 = call i32 @finch_str_eq(ptr %a10, ptr %a11) %t13 = icmp ne i32 %t12, 0 br label %logic.rend2107 logic.rend2107: br label %logic.end2106 logic.end2106: %t14 = phi i1 [ true, %logic.from2104 ], [ %t13, %logic.rend2107 ] ret i1 %t14 } define internal i1 @finch.gen.isNumber(%S.ast.Type %p0) { entry: %a1 = alloca %S.ast.Type, align 16 store %S.ast.Type %p0, ptr %a1 %t2 = load %S.ast.Type, ptr %a1 %t3 = call i1 @finch.gen.isInt(%S.ast.Type %t2) br label %logic.from2108 logic.from2108: br i1 %t3, label %logic.end2110, label %logic.rhs2109 logic.rhs2109: %t4 = load %S.ast.Type, ptr %a1 %t5 = call i1 @finch.gen.isFloat(%S.ast.Type %t4) br label %logic.rend2111 logic.rend2111: br label %logic.end2110 logic.end2110: %t6 = phi i1 [ true, %logic.from2108 ], [ %t5, %logic.rend2111 ] ret i1 %t6 } define internal i64 @finch.gen.bitsOf(%S.ast.Type %p0) { entry: %a1 = alloca %S.ast.Type, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 store %S.ast.Type %p0, ptr %a1 %t2 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t3 = load { ptr, i64, i64 }, ptr %t2 store { ptr, i64, i64 } %t3, ptr %a4 call void @finch_str_copy(ptr %a5, ptr %a4) %t6 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } %t6, ptr %a7 %t8 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t8, ptr %a9 store { ptr, i64, i64 } { ptr @.str.1275, i64 4, i64 0 }, ptr %a10 %t11 = call i32 @finch_str_eq(ptr %a9, ptr %a10) %t12 = icmp ne i32 %t11, 0 br i1 %t12, label %then2112, label %endif2114 then2112: ret i64 1 endif2114: %t13 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t13, ptr %a14 store { ptr, i64, i64 } { ptr @.str.1276, i64 4, i64 0 }, ptr %a15 %t16 = call i32 @finch_str_eq(ptr %a14, ptr %a15) %t17 = icmp ne i32 %t16, 0 br label %logic.from2115 logic.from2115: br i1 %t17, label %logic.end2117, label %logic.rhs2116 logic.rhs2116: %t18 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t18, ptr %a19 store { ptr, i64, i64 } { ptr @.str.1277, i64 2, i64 0 }, ptr %a20 %t21 = call i32 @finch_str_eq(ptr %a19, ptr %a20) %t22 = icmp ne i32 %t21, 0 br label %logic.rend2118 logic.rend2118: br label %logic.end2117 logic.end2117: %t23 = phi i1 [ true, %logic.from2115 ], [ %t22, %logic.rend2118 ] br label %logic.from2119 logic.from2119: br i1 %t23, label %logic.end2121, label %logic.rhs2120 logic.rhs2120: %t24 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t24, ptr %a25 store { ptr, i64, i64 } { ptr @.str.1278, i64 2, i64 0 }, ptr %a26 %t27 = call i32 @finch_str_eq(ptr %a25, ptr %a26) %t28 = icmp ne i32 %t27, 0 br label %logic.rend2122 logic.rend2122: br label %logic.end2121 logic.end2121: %t29 = phi i1 [ true, %logic.from2119 ], [ %t28, %logic.rend2122 ] br i1 %t29, label %then2123, label %endif2125 then2123: ret i64 8 endif2125: %t30 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t30, ptr %a31 store { ptr, i64, i64 } { ptr @.str.1279, i64 3, i64 0 }, ptr %a32 %t33 = call i32 @finch_str_eq(ptr %a31, ptr %a32) %t34 = icmp ne i32 %t33, 0 br label %logic.from2126 logic.from2126: br i1 %t34, label %logic.end2128, label %logic.rhs2127 logic.rhs2127: %t35 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t35, ptr %a36 store { ptr, i64, i64 } { ptr @.str.1280, i64 3, i64 0 }, ptr %a37 %t38 = call i32 @finch_str_eq(ptr %a36, ptr %a37) %t39 = icmp ne i32 %t38, 0 br label %logic.rend2129 logic.rend2129: br label %logic.end2128 logic.end2128: %t40 = phi i1 [ true, %logic.from2126 ], [ %t39, %logic.rend2129 ] br i1 %t40, label %then2130, label %endif2132 then2130: ret i64 16 endif2132: %t41 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t41, ptr %a42 store { ptr, i64, i64 } { ptr @.str.1281, i64 3, i64 0 }, ptr %a43 %t44 = call i32 @finch_str_eq(ptr %a42, ptr %a43) %t45 = icmp ne i32 %t44, 0 br label %logic.from2133 logic.from2133: br i1 %t45, label %logic.end2135, label %logic.rhs2134 logic.rhs2134: %t46 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t46, ptr %a47 store { ptr, i64, i64 } { ptr @.str.1282, i64 3, i64 0 }, ptr %a48 %t49 = call i32 @finch_str_eq(ptr %a47, ptr %a48) %t50 = icmp ne i32 %t49, 0 br label %logic.rend2136 logic.rend2136: br label %logic.end2135 logic.end2135: %t51 = phi i1 [ true, %logic.from2133 ], [ %t50, %logic.rend2136 ] br label %logic.from2137 logic.from2137: br i1 %t51, label %logic.end2139, label %logic.rhs2138 logic.rhs2138: %t52 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t52, ptr %a53 store { ptr, i64, i64 } { ptr @.str.1283, i64 3, i64 0 }, ptr %a54 %t55 = call i32 @finch_str_eq(ptr %a53, ptr %a54) %t56 = icmp ne i32 %t55, 0 br label %logic.rend2140 logic.rend2140: br label %logic.end2139 logic.end2139: %t57 = phi i1 [ true, %logic.from2137 ], [ %t56, %logic.rend2140 ] br i1 %t57, label %then2141, label %endif2143 then2141: ret i64 32 endif2143: ret i64 64 } define internal i1 @finch.gen.widens(%S.ast.Type %p0, %S.ast.Type %p1) { entry: %a1 = alloca %S.ast.Type, align 16 %a2 = alloca %S.ast.Type, align 16 store %S.ast.Type %p0, ptr %a1 store %S.ast.Type %p1, ptr %a2 %t3 = load %S.ast.Type, ptr %a1 %t4 = call i1 @finch.gen.isInt(%S.ast.Type %t3) %t5 = xor i1 %t4, true br label %logic.from2144 logic.from2144: br i1 %t5, label %logic.end2146, label %logic.rhs2145 logic.rhs2145: %t6 = load %S.ast.Type, ptr %a2 %t7 = call i1 @finch.gen.isInt(%S.ast.Type %t6) %t8 = xor i1 %t7, true br label %logic.rend2147 logic.rend2147: br label %logic.end2146 logic.end2146: %t9 = phi i1 [ true, %logic.from2144 ], [ %t8, %logic.rend2147 ] br i1 %t9, label %then2148, label %endif2150 then2148: ret i1 false endif2150: %t10 = load %S.ast.Type, ptr %a1 %t11 = call i1 @finch.gen.isSigned(%S.ast.Type %t10) br label %logic.from2151 logic.from2151: br i1 %t11, label %logic.rhs2152, label %logic.end2153 logic.rhs2152: %t12 = load %S.ast.Type, ptr %a2 %t13 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t12) br label %logic.rend2154 logic.rend2154: br label %logic.end2153 logic.end2153: %t14 = phi i1 [ false, %logic.from2151 ], [ %t13, %logic.rend2154 ] br i1 %t14, label %then2155, label %endif2157 then2155: ret i1 false endif2157: %t15 = load %S.ast.Type, ptr %a2 %t16 = call i64 @finch.gen.bitsOf(%S.ast.Type %t15) %t17 = load %S.ast.Type, ptr %a1 %t18 = call i64 @finch.gen.bitsOf(%S.ast.Type %t17) %t19 = icmp sgt i64 %t16, %t18 ret i1 %t19 } define internal i1 @finch.gen.fits({ ptr, i64, i64 } %p0, %S.ast.Type %p1, %S.ast.Type %p2) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a2 = alloca %S.ast.Type, align 16 %a3 = alloca %S.ast.Type, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca i64, align 16 %a13 = alloca i64, align 16 %a31 = alloca i64, align 16 store { ptr, i64, i64 } %p0, ptr %a1 store %S.ast.Type %p1, ptr %a2 store %S.ast.Type %p2, ptr %a3 %t4 = load %S.ast.Type, ptr %a3 %t5 = call i1 @finch.gen.isInt(%S.ast.Type %t4) %t6 = xor i1 %t5, true br i1 %t6, label %then2158, label %endif2160 then2158: ret i1 false endif2160: %t7 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t7, ptr %a8 %t9 = call i64 @finch_str_to_int(ptr %a8, ptr @.str.1284, i64 427) store i64 %t9, ptr %a10 %t11 = load %S.ast.Type, ptr %a3 %t12 = call i64 @finch.gen.bitsOf(%S.ast.Type %t11) store i64 %t12, ptr %a13 %t14 = load i64, ptr %a10 %t15 = icmp slt i64 %t14, 0 br i1 %t15, label %then2161, label %endif2163 then2161: %t16 = load %S.ast.Type, ptr %a3 %t17 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t16) br i1 %t17, label %then2164, label %endif2166 then2164: ret i1 false endif2166: %t18 = load i64, ptr %a13 %t19 = icmp eq i64 %t18, 64 br i1 %t19, label %then2167, label %endif2169 then2167: ret i1 true endif2169: %t20 = load i64, ptr %a10 %t21 = load i64, ptr %a13 %t22 = sub i64 %t21, 1 %t23 = shl i64 1, %t22 %t24 = sub i64 0, %t23 %t25 = icmp sge i64 %t20, %t24 ret i1 %t25 endif2163: %t26 = load i64, ptr %a13 %t27 = icmp eq i64 %t26, 64 br i1 %t27, label %then2170, label %endif2172 then2170: ret i1 true endif2172: %t28 = load i64, ptr %a13 %t29 = shl i64 1, %t28 %t30 = sub i64 %t29, 1 store i64 %t30, ptr %a31 %t32 = load %S.ast.Type, ptr %a3 %t33 = call i1 @finch.gen.isSigned(%S.ast.Type %t32) br i1 %t33, label %then2173, label %endif2175 then2173: %t34 = load i64, ptr %a13 %t35 = sub i64 %t34, 1 %t36 = shl i64 1, %t35 %t37 = sub i64 %t36, 1 store i64 %t37, ptr %a31 br label %endif2175 endif2175: %t38 = load i64, ptr %a10 %t39 = load i64, ptr %a31 %t40 = icmp sle i64 %t38, %t39 ret i1 %t40 } define internal i64 @finch.gen.findStruct(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca i64, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = icmp eq ptr %t4, null br i1 %t5, label %panic2176, label %ok2177 panic2176: call void @finch_panic(ptr @.str.1285, i64 449, ptr @.str.1286) unreachable ok2177: %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 15 %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t6, i32 0, i32 1 %t8 = load i64, ptr %t7 store i64 0, ptr %a9 br label %for.cond2178 for.cond2178: %t10 = load i64, ptr %a9 %t11 = icmp slt i64 %t10, %t8 br i1 %t11, label %for.body2179, label %for.end2181 for.body2179: %t12 = load ptr, ptr %a1 %t13 = icmp eq ptr %t12, null br i1 %t13, label %panic2182, label %ok2183 panic2182: call void @finch_panic(ptr @.str.1287, i64 450, ptr @.str.1288) unreachable ok2183: %t14 = getelementptr inbounds %S.gen.Gen, ptr %t12, i32 0, i32 15 %t15 = load i64, ptr %a9 %t16 = load { ptr, i64, i64 }, ptr %t14 %t17 = extractvalue { ptr, i64, i64 } %t16, 1 %t18 = icmp uge i64 %t15, %t17 br i1 %t18, label %range2184, label %inrange2185 range2184: call void @finch_panic_index(ptr @.str.1289, i64 450, i64 %t15, i64 %t17) unreachable inrange2185: %t19 = extractvalue { ptr, i64, i64 } %t16, 0 %t20 = getelementptr inbounds %S.gen.StructDef, ptr %t19, i64 %t15 %t21 = getelementptr inbounds %S.gen.StructDef, ptr %t20, i32 0, i32 0 %t22 = load { ptr, i64, i64 }, ptr %t21 %t23 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t22, ptr %a24 store { ptr, i64, i64 } %t23, ptr %a25 %t26 = call i32 @finch_str_eq(ptr %a24, ptr %a25) %t27 = icmp ne i32 %t26, 0 br label %logic.from2186 logic.from2186: br i1 %t27, label %logic.rhs2187, label %logic.end2188 logic.rhs2187: %t28 = load ptr, ptr %a1 %t29 = icmp eq ptr %t28, null br i1 %t29, label %panic2189, label %ok2190 panic2189: call void @finch_panic(ptr @.str.1290, i64 450, ptr @.str.1291) unreachable ok2190: %t30 = getelementptr inbounds %S.gen.Gen, ptr %t28, i32 0, i32 15 %t31 = load i64, ptr %a9 %t32 = load { ptr, i64, i64 }, ptr %t30 %t33 = extractvalue { ptr, i64, i64 } %t32, 1 %t34 = icmp uge i64 %t31, %t33 br i1 %t34, label %range2191, label %inrange2192 range2191: call void @finch_panic_index(ptr @.str.1292, i64 450, i64 %t31, i64 %t33) unreachable inrange2192: %t35 = extractvalue { ptr, i64, i64 } %t32, 0 %t36 = getelementptr inbounds %S.gen.StructDef, ptr %t35, i64 %t31 %t37 = getelementptr inbounds %S.gen.StructDef, ptr %t36, i32 0, i32 1 %t38 = load { ptr, i64, i64 }, ptr %t37 %t39 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t38, ptr %a40 store { ptr, i64, i64 } %t39, ptr %a41 %t42 = call i32 @finch_str_eq(ptr %a40, ptr %a41) %t43 = icmp ne i32 %t42, 0 br label %logic.rend2193 logic.rend2193: br label %logic.end2188 logic.end2188: %t44 = phi i1 [ false, %logic.from2186 ], [ %t43, %logic.rend2193 ] br i1 %t44, label %then2194, label %endif2196 then2194: %t45 = load i64, ptr %a9 ret i64 %t45 endif2196: br label %for.step2180 for.step2180: %t46 = load i64, ptr %a9 %t47 = add i64 %t46, 1 store i64 %t47, ptr %a9 br label %for.cond2178 for.end2181: ret i64 -1 } define internal i64 @finch.gen.findEnum(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca i64, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = icmp eq ptr %t4, null br i1 %t5, label %panic2197, label %ok2198 panic2197: call void @finch_panic(ptr @.str.1293, i64 458, ptr @.str.1294) unreachable ok2198: %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 20 %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t6, i32 0, i32 1 %t8 = load i64, ptr %t7 store i64 0, ptr %a9 br label %for.cond2199 for.cond2199: %t10 = load i64, ptr %a9 %t11 = icmp slt i64 %t10, %t8 br i1 %t11, label %for.body2200, label %for.end2202 for.body2200: %t12 = load ptr, ptr %a1 %t13 = icmp eq ptr %t12, null br i1 %t13, label %panic2203, label %ok2204 panic2203: call void @finch_panic(ptr @.str.1295, i64 459, ptr @.str.1296) unreachable ok2204: %t14 = getelementptr inbounds %S.gen.Gen, ptr %t12, i32 0, i32 20 %t15 = load i64, ptr %a9 %t16 = load { ptr, i64, i64 }, ptr %t14 %t17 = extractvalue { ptr, i64, i64 } %t16, 1 %t18 = icmp uge i64 %t15, %t17 br i1 %t18, label %range2205, label %inrange2206 range2205: call void @finch_panic_index(ptr @.str.1297, i64 459, i64 %t15, i64 %t17) unreachable inrange2206: %t19 = extractvalue { ptr, i64, i64 } %t16, 0 %t20 = getelementptr inbounds %S.gen.EnumDef, ptr %t19, i64 %t15 %t21 = getelementptr inbounds %S.gen.EnumDef, ptr %t20, i32 0, i32 0 %t22 = load { ptr, i64, i64 }, ptr %t21 %t23 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t22, ptr %a24 store { ptr, i64, i64 } %t23, ptr %a25 %t26 = call i32 @finch_str_eq(ptr %a24, ptr %a25) %t27 = icmp ne i32 %t26, 0 br label %logic.from2207 logic.from2207: br i1 %t27, label %logic.rhs2208, label %logic.end2209 logic.rhs2208: %t28 = load ptr, ptr %a1 %t29 = icmp eq ptr %t28, null br i1 %t29, label %panic2210, label %ok2211 panic2210: call void @finch_panic(ptr @.str.1298, i64 459, ptr @.str.1299) unreachable ok2211: %t30 = getelementptr inbounds %S.gen.Gen, ptr %t28, i32 0, i32 20 %t31 = load i64, ptr %a9 %t32 = load { ptr, i64, i64 }, ptr %t30 %t33 = extractvalue { ptr, i64, i64 } %t32, 1 %t34 = icmp uge i64 %t31, %t33 br i1 %t34, label %range2212, label %inrange2213 range2212: call void @finch_panic_index(ptr @.str.1300, i64 459, i64 %t31, i64 %t33) unreachable inrange2213: %t35 = extractvalue { ptr, i64, i64 } %t32, 0 %t36 = getelementptr inbounds %S.gen.EnumDef, ptr %t35, i64 %t31 %t37 = getelementptr inbounds %S.gen.EnumDef, ptr %t36, i32 0, i32 1 %t38 = load { ptr, i64, i64 }, ptr %t37 %t39 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t38, ptr %a40 store { ptr, i64, i64 } %t39, ptr %a41 %t42 = call i32 @finch_str_eq(ptr %a40, ptr %a41) %t43 = icmp ne i32 %t42, 0 br label %logic.rend2214 logic.rend2214: br label %logic.end2209 logic.end2209: %t44 = phi i1 [ false, %logic.from2207 ], [ %t43, %logic.rend2214 ] br i1 %t44, label %then2215, label %endif2217 then2215: %t45 = load i64, ptr %a9 ret i64 %t45 endif2217: br label %for.step2201 for.step2201: %t46 = load i64, ptr %a9 %t47 = add i64 %t46, 1 store i64 %t47, ptr %a9 br label %for.cond2199 for.end2202: ret i64 -1 } define internal i64 @finch.gen.progOf(ptr %p0, { ptr, i64, i64 } %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca i64, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null br i1 %t4, label %panic2218, label %ok2219 panic2218: call void @finch_panic(ptr @.str.1301, i64 467, ptr @.str.1302) unreachable ok2219: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 0 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 %t7 = load i64, ptr %t6 store i64 0, ptr %a8 br label %for.cond2220 for.cond2220: %t9 = load i64, ptr %a8 %t10 = icmp slt i64 %t9, %t7 br i1 %t10, label %for.body2221, label %for.end2223 for.body2221: %t11 = load ptr, ptr %a1 %t12 = icmp eq ptr %t11, null br i1 %t12, label %panic2224, label %ok2225 panic2224: call void @finch_panic(ptr @.str.1303, i64 468, ptr @.str.1304) unreachable ok2225: %t13 = getelementptr inbounds %S.gen.Gen, ptr %t11, i32 0, i32 0 %t14 = load i64, ptr %a8 %t15 = load { ptr, i64, i64 }, ptr %t13 %t16 = extractvalue { ptr, i64, i64 } %t15, 1 %t17 = icmp uge i64 %t14, %t16 br i1 %t17, label %range2226, label %inrange2227 range2226: call void @finch_panic_index(ptr @.str.1305, i64 468, i64 %t14, i64 %t16) unreachable inrange2227: %t18 = extractvalue { ptr, i64, i64 } %t15, 0 %t19 = getelementptr inbounds %S.ast.Program, ptr %t18, i64 %t14 %t20 = getelementptr inbounds %S.ast.Program, ptr %t19, i32 0, i32 0 %t21 = load { ptr, i64, i64 }, ptr %t20 %t22 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t21, ptr %a23 store { ptr, i64, i64 } %t22, ptr %a24 %t25 = call i32 @finch_str_eq(ptr %a23, ptr %a24) %t26 = icmp ne i32 %t25, 0 br i1 %t26, label %then2228, label %endif2230 then2228: %t27 = load i64, ptr %a8 ret i64 %t27 endif2230: br label %for.step2222 for.step2222: %t28 = load i64, ptr %a8 %t29 = add i64 %t28, 1 store i64 %t29, ptr %a8 br label %for.cond2220 for.end2223: ret i64 -1 } define internal i1 @finch.gen.imports(ptr %p0, { ptr, i64, i64 } %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca i64, align 16 %a23 = alloca i64, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null br i1 %t4, label %panic2231, label %ok2232 panic2231: call void @finch_panic(ptr @.str.1306, i64 476, ptr @.str.1307) unreachable ok2232: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 0 %t6 = load ptr, ptr %a1 %t7 = load ptr, ptr %a1 %t8 = icmp eq ptr %t7, null br i1 %t8, label %panic2233, label %ok2234 panic2233: call void @finch_panic(ptr @.str.1308, i64 476, ptr @.str.1309) unreachable ok2234: %t9 = getelementptr inbounds %S.gen.Gen, ptr %t7, i32 0, i32 13 %t10 = load { ptr, i64, i64 }, ptr %t9 %t11 = call i64 @finch.gen.progOf(ptr %t6, { ptr, i64, i64 } %t10) %t12 = load { ptr, i64, i64 }, ptr %t5 %t13 = extractvalue { ptr, i64, i64 } %t12, 1 %t14 = icmp uge i64 %t11, %t13 br i1 %t14, label %range2235, label %inrange2236 range2235: call void @finch_panic_index(ptr @.str.1310, i64 476, i64 %t11, i64 %t13) unreachable inrange2236: %t15 = extractvalue { ptr, i64, i64 } %t12, 0 %t16 = getelementptr inbounds %S.ast.Program, ptr %t15, i64 %t11 %t17 = getelementptr inbounds %S.ast.Program, ptr %t16, i32 0, i32 2 %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t17, i32 0, i32 1 %t19 = load { ptr, i64, i64 }, ptr %a2 store i64 -1, ptr %a20 %t21 = load i64, ptr %t18 %t22 = load ptr, ptr %t17 store i64 0, ptr %a23 br label %find.cond2237 find.cond2237: %t24 = load i64, ptr %a23 %t25 = icmp slt i64 %t24, %t21 br i1 %t25, label %find.body2238, label %find.end2241 find.body2238: %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %t22, i64 %t24 %t27 = load { ptr, i64, i64 }, ptr %t26 store { ptr, i64, i64 } %t27, ptr %a28 store { ptr, i64, i64 } %t19, ptr %a29 %t30 = call i32 @finch_str_eq(ptr %a28, ptr %a29) %t31 = icmp ne i32 %t30, 0 br i1 %t31, label %find.hit2239, label %find.next2240 find.hit2239: store i64 %t24, ptr %a20 br label %find.end2241 find.next2240: %t32 = add i64 %t24, 1 store i64 %t32, ptr %a23 br label %find.cond2237 find.end2241: %t33 = load i64, ptr %a20 %t34 = icmp sge i64 %t33, 0 ret i1 %t34 } define internal %S.ast.Type @finch.gen.resolve(ptr %p0, %S.ast.Type %p1, %S.ast.Node %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Type, align 16 %a3 = alloca %S.ast.Node, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca %S.ast.Type, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca %S.ast.Type, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca %S.ast.Type, align 16 %a129 = alloca { ptr, i64, i64 }, align 16 %a130 = alloca { ptr, i64, i64 }, align 16 %a138 = alloca %S.ast.Type, align 16 %a139 = alloca %S.ast.Type, align 16 %a154 = alloca { ptr, i64, i64 }, align 16 %a155 = alloca { ptr, i64, i64 }, align 16 %a159 = alloca %S.ast.Type, align 16 %a160 = alloca %S.ast.Type, align 16 %a177 = alloca i64, align 16 %a180 = alloca i64, align 16 %a185 = alloca { ptr, i64, i64 }, align 16 %a186 = alloca { ptr, i64, i64 }, align 16 %a202 = alloca i64, align 16 %a205 = alloca i64, align 16 %a210 = alloca { ptr, i64, i64 }, align 16 %a211 = alloca { ptr, i64, i64 }, align 16 %a222 = alloca %S.ast.Type, align 16 %a223 = alloca %S.ast.Type, align 16 %a229 = alloca { ptr, i64, i64 }, align 16 %a231 = alloca i64, align 16 %a239 = alloca %S.ast.Type, align 16 %a255 = alloca { ptr, i64, i64 }, align 16 %a256 = alloca { ptr, i64, i64 }, align 16 %a258 = alloca { ptr, i64, i64 }, align 16 %a272 = alloca { ptr, i64, i64 }, align 16 %a273 = alloca { ptr, i64, i64 }, align 16 %a274 = alloca { ptr, i64, i64 }, align 16 %a276 = alloca { ptr, i64, i64 }, align 16 %a277 = alloca { ptr, i64, i64 }, align 16 %a278 = alloca { ptr, i64, i64 }, align 16 %a282 = alloca { ptr, i64, i64 }, align 16 %a283 = alloca { ptr, i64, i64 }, align 16 %a284 = alloca { ptr, i64, i64 }, align 16 %a286 = alloca { ptr, i64, i64 }, align 16 %a287 = alloca { ptr, i64, i64 }, align 16 %a288 = alloca { ptr, i64, i64 }, align 16 %a292 = alloca { ptr, i64, i64 }, align 16 %a293 = alloca { ptr, i64, i64 }, align 16 %a304 = alloca { ptr, i64, i64 }, align 16 %a305 = alloca { ptr, i64, i64 }, align 16 %a317 = alloca { ptr, i64, i64 }, align 16 %a318 = alloca { ptr, i64, i64 }, align 16 %a319 = alloca { ptr, i64, i64 }, align 16 %a321 = alloca { ptr, i64, i64 }, align 16 %a322 = alloca { ptr, i64, i64 }, align 16 %a323 = alloca { ptr, i64, i64 }, align 16 %a328 = alloca { ptr, i64, i64 }, align 16 %a329 = alloca { ptr, i64, i64 }, align 16 %a337 = alloca { ptr, i64, i64 }, align 16 %a338 = alloca { ptr, i64, i64 }, align 16 %a340 = alloca { ptr, i64, i64 }, align 16 %a354 = alloca { ptr, i64, i64 }, align 16 %a355 = alloca { ptr, i64, i64 }, align 16 %a356 = alloca { ptr, i64, i64 }, align 16 %a358 = alloca { ptr, i64, i64 }, align 16 %a359 = alloca { ptr, i64, i64 }, align 16 %a360 = alloca { ptr, i64, i64 }, align 16 %a364 = alloca { ptr, i64, i64 }, align 16 %a365 = alloca { ptr, i64, i64 }, align 16 %a366 = alloca { ptr, i64, i64 }, align 16 %a368 = alloca { ptr, i64, i64 }, align 16 %a369 = alloca { ptr, i64, i64 }, align 16 %a370 = alloca { ptr, i64, i64 }, align 16 %a374 = alloca { ptr, i64, i64 }, align 16 %a375 = alloca { ptr, i64, i64 }, align 16 %a386 = alloca { ptr, i64, i64 }, align 16 %a387 = alloca { ptr, i64, i64 }, align 16 %a391 = alloca { ptr, i64, i64 }, align 16 %a392 = alloca { ptr, i64, i64 }, align 16 %a414 = alloca { ptr, i64, i64 }, align 16 %a415 = alloca { ptr, i64, i64 }, align 16 %a423 = alloca { ptr, i64, i64 }, align 16 %a424 = alloca { ptr, i64, i64 }, align 16 %a425 = alloca { ptr, i64, i64 }, align 16 %a427 = alloca { ptr, i64, i64 }, align 16 %a428 = alloca { ptr, i64, i64 }, align 16 %a429 = alloca { ptr, i64, i64 }, align 16 %a434 = alloca { ptr, i64, i64 }, align 16 %a435 = alloca { ptr, i64, i64 }, align 16 %a439 = alloca { ptr, i64, i64 }, align 16 %a440 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Type %p1, ptr %a2 store %S.ast.Node %p2, ptr %a3 %t4 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t5 = load { ptr, i64, i64 }, ptr %t4 store { ptr, i64, i64 } %t5, ptr %a6 store { ptr, i64, i64 } { ptr @.str.1311, i64 5, i64 0 }, ptr %a7 %t8 = call i32 @finch_str_eq(ptr %a6, ptr %a7) %t9 = icmp ne i32 %t8, 0 br i1 %t9, label %then2242, label %endif2244 then2242: %t10 = load ptr, ptr %a1 %t11 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t12 = load { ptr, i64, i64 }, ptr %t11 %t13 = extractvalue { ptr, i64, i64 } %t12, 1 %t14 = icmp uge i64 0, %t13 br i1 %t14, label %range2245, label %inrange2246 range2245: call void @finch_panic_index(ptr @.str.1312, i64 481, i64 0, i64 %t13) unreachable inrange2246: %t15 = extractvalue { ptr, i64, i64 } %t12, 0 %t16 = getelementptr inbounds %S.ast.Type, ptr %t15, i64 0 %t17 = load %S.ast.Type, ptr %t16 %t18 = load %S.ast.Node, ptr %a3 %t19 = call %S.ast.Type @finch.gen.resolve(ptr %t10, %S.ast.Type %t17, %S.ast.Node %t18) %t20 = call %S.ast.Type @finch.ast.arrayOf(%S.ast.Type %t19) ret %S.ast.Type %t20 endif2244: %t21 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t22 = load { ptr, i64, i64 }, ptr %t21 store { ptr, i64, i64 } %t22, ptr %a23 store { ptr, i64, i64 } { ptr @.str.1313, i64 3, i64 0 }, ptr %a24 %t25 = call i32 @finch_str_eq(ptr %a23, ptr %a24) %t26 = icmp ne i32 %t25, 0 br i1 %t26, label %then2247, label %endif2249 then2247: %t27 = load ptr, ptr %a1 %t28 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t29 = load { ptr, i64, i64 }, ptr %t28 %t30 = extractvalue { ptr, i64, i64 } %t29, 1 %t31 = icmp uge i64 0, %t30 br i1 %t31, label %range2250, label %inrange2251 range2250: call void @finch_panic_index(ptr @.str.1314, i64 484, i64 0, i64 %t30) unreachable inrange2251: %t32 = extractvalue { ptr, i64, i64 } %t29, 0 %t33 = getelementptr inbounds %S.ast.Type, ptr %t32, i64 0 %t34 = load %S.ast.Type, ptr %t33 %t35 = load %S.ast.Node, ptr %a3 %t36 = call %S.ast.Type @finch.gen.resolve(ptr %t27, %S.ast.Type %t34, %S.ast.Node %t35) store %S.ast.Type %t36, ptr %a37 %t38 = load %S.ast.Type, ptr %a37 %t39 = call i1 @finch.gen.isInt(%S.ast.Type %t38) %t40 = xor i1 %t39, true br label %logic.from2252 logic.from2252: br i1 %t40, label %logic.rhs2253, label %logic.end2254 logic.rhs2253: %t41 = getelementptr inbounds %S.ast.Type, ptr %a37, i32 0, i32 0 %t42 = load { ptr, i64, i64 }, ptr %t41 store { ptr, i64, i64 } %t42, ptr %a43 store { ptr, i64, i64 } { ptr @.str.1315, i64 4, i64 0 }, ptr %a44 %t45 = call i32 @finch_str_eq(ptr %a43, ptr %a44) %t46 = icmp eq i32 %t45, 0 br label %logic.rend2255 logic.rend2255: br label %logic.end2254 logic.end2254: %t47 = phi i1 [ false, %logic.from2252 ], [ %t46, %logic.rend2255 ] br label %logic.from2256 logic.from2256: br i1 %t47, label %logic.rhs2257, label %logic.end2258 logic.rhs2257: %t48 = getelementptr inbounds %S.ast.Type, ptr %a37, i32 0, i32 0 %t49 = load { ptr, i64, i64 }, ptr %t48 store { ptr, i64, i64 } %t49, ptr %a50 store { ptr, i64, i64 } { ptr @.str.1316, i64 4, i64 0 }, ptr %a51 %t52 = call i32 @finch_str_eq(ptr %a50, ptr %a51) %t53 = icmp eq i32 %t52, 0 br label %logic.rend2259 logic.rend2259: br label %logic.end2258 logic.end2258: %t54 = phi i1 [ false, %logic.from2256 ], [ %t53, %logic.rend2259 ] br label %logic.from2260 logic.from2260: br i1 %t54, label %logic.rhs2261, label %logic.end2262 logic.rhs2261: %t55 = getelementptr inbounds %S.ast.Type, ptr %a37, i32 0, i32 0 %t56 = load { ptr, i64, i64 }, ptr %t55 store { ptr, i64, i64 } %t56, ptr %a57 store { ptr, i64, i64 } { ptr @.str.1317, i64 3, i64 0 }, ptr %a58 %t59 = call i32 @finch_str_eq(ptr %a57, ptr %a58) %t60 = icmp eq i32 %t59, 0 br label %logic.rend2263 logic.rend2263: br label %logic.end2262 logic.end2262: %t61 = phi i1 [ false, %logic.from2260 ], [ %t60, %logic.rend2263 ] br label %logic.from2264 logic.from2264: br i1 %t61, label %logic.rhs2265, label %logic.end2266 logic.rhs2265: %t62 = getelementptr inbounds %S.ast.Type, ptr %a37, i32 0, i32 0 %t63 = load { ptr, i64, i64 }, ptr %t62 store { ptr, i64, i64 } %t63, ptr %a64 store { ptr, i64, i64 } { ptr @.str.1318, i64 4, i64 0 }, ptr %a65 %t66 = call i32 @finch_str_eq(ptr %a64, ptr %a65) %t67 = icmp eq i32 %t66, 0 br label %logic.rend2267 logic.rend2267: br label %logic.end2266 logic.end2266: %t68 = phi i1 [ false, %logic.from2264 ], [ %t67, %logic.rend2267 ] br i1 %t68, label %then2268, label %endif2270 then2268: %t69 = load ptr, ptr %a1 %t70 = load %S.ast.Node, ptr %a3 %t71 = load %S.ast.Type, ptr %a37 %t72 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t71) store { ptr, i64, i64 } { ptr @.str.1319, i64 63, i64 0 }, ptr %a74 store { ptr, i64, i64 } %t72, ptr %a75 call void @finch_str_concat(ptr %a73, ptr %a74, ptr %a75) %t76 = load { ptr, i64, i64 }, ptr %a73 call void @finch.gen.fail(ptr %t69, %S.ast.Node %t70, { ptr, i64, i64 } %t76) br label %endif2270 endif2270: %t77 = load ptr, ptr %a1 %t78 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t79 = load { ptr, i64, i64 }, ptr %t78 %t80 = extractvalue { ptr, i64, i64 } %t79, 1 %t81 = icmp uge i64 1, %t80 br i1 %t81, label %range2271, label %inrange2272 range2271: call void @finch_panic_index(ptr @.str.1320, i64 488, i64 1, i64 %t80) unreachable inrange2272: %t82 = extractvalue { ptr, i64, i64 } %t79, 0 %t83 = getelementptr inbounds %S.ast.Type, ptr %t82, i64 1 %t84 = load %S.ast.Type, ptr %t83 %t85 = load %S.ast.Node, ptr %a3 %t86 = call %S.ast.Type @finch.gen.resolve(ptr %t77, %S.ast.Type %t84, %S.ast.Node %t85) store %S.ast.Type %t86, ptr %a87 %t88 = getelementptr inbounds %S.ast.Type, ptr %a87, i32 0, i32 0 %t89 = load { ptr, i64, i64 }, ptr %t88 store { ptr, i64, i64 } %t89, ptr %a90 store { ptr, i64, i64 } { ptr @.str.1321, i64 4, i64 0 }, ptr %a91 %t92 = call i32 @finch_str_eq(ptr %a90, ptr %a91) %t93 = icmp ne i32 %t92, 0 br i1 %t93, label %then2273, label %endif2275 then2273: %t94 = load ptr, ptr %a1 %t95 = load %S.ast.Node, ptr %a3 call void @finch.gen.fail(ptr %t94, %S.ast.Node %t95, { ptr, i64, i64 } { ptr @.str.1322, i64 41, i64 0 }) br label %endif2275 endif2275: %t96 = load %S.ast.Type, ptr %a37 %t97 = load %S.ast.Type, ptr %a87 %t98 = call %S.ast.Type @finch.ast.mapOf(%S.ast.Type %t96, %S.ast.Type %t97) ret %S.ast.Type %t98 endif2249: %t99 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t100 = load { ptr, i64, i64 }, ptr %t99 store { ptr, i64, i64 } %t100, ptr %a101 store { ptr, i64, i64 } { ptr @.str.1323, i64 5, i64 0 }, ptr %a102 %t103 = call i32 @finch_str_eq(ptr %a101, ptr %a102) %t104 = icmp ne i32 %t103, 0 br i1 %t104, label %then2276, label %endif2278 then2276: %t105 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.1324, i64 5, i64 0 }, 0 %t106 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 4 %t107 = load i64, ptr %t106 %t108 = insertvalue %S.ast.Type %t105, i64 %t107, 4 store %S.ast.Type %t108, ptr %a109 %t110 = getelementptr inbounds %S.ast.Type, ptr %a109, i32 0, i32 1 %t111 = getelementptr inbounds { ptr, i64, i64 }, ptr %t110, i32 0, i32 1 %t112 = load ptr, ptr %a1 %t113 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t114 = load { ptr, i64, i64 }, ptr %t113 %t115 = extractvalue { ptr, i64, i64 } %t114, 1 %t116 = icmp uge i64 0, %t115 br i1 %t116, label %range2279, label %inrange2280 range2279: call void @finch_panic_index(ptr @.str.1325, i64 496, i64 0, i64 %t115) unreachable inrange2280: %t117 = extractvalue { ptr, i64, i64 } %t114, 0 %t118 = getelementptr inbounds %S.ast.Type, ptr %t117, i64 0 %t119 = load %S.ast.Type, ptr %t118 %t120 = load %S.ast.Node, ptr %a3 %t121 = call %S.ast.Type @finch.gen.resolve(ptr %t112, %S.ast.Type %t119, %S.ast.Node %t120) %t122 = load i64, ptr %t111 %t123 = add i64 %t122, 1 call void @finch_arr_reserve(ptr %t110, i64 %t123, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) %t124 = load ptr, ptr %t110 %t125 = getelementptr inbounds %S.ast.Type, ptr %t124, i64 %t122 store %S.ast.Type %t121, ptr %t125 store i64 %t123, ptr %t111 %t126 = load %S.ast.Type, ptr %a109 ret %S.ast.Type %t126 endif2278: %t127 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t128 = load { ptr, i64, i64 }, ptr %t127 store { ptr, i64, i64 } %t128, ptr %a129 store { ptr, i64, i64 } { ptr @.str.1326, i64 3, i64 0 }, ptr %a130 %t131 = call i32 @finch_str_eq(ptr %a129, ptr %a130) %t132 = icmp ne i32 %t131, 0 br i1 %t132, label %then2281, label %endif2283 then2281: %t133 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t134 = getelementptr inbounds { ptr, i64, i64 }, ptr %t133, i32 0, i32 1 %t135 = load i64, ptr %t134 %t136 = icmp eq i64 %t135, 0 br i1 %t136, label %then2284, label %endif2286 then2284: %t137 = load %S.ast.Type, ptr %a2 store %S.ast.Type %t137, ptr %a138 call void @finch.copy.S_ast_Type(ptr %a139, ptr %a138) %t140 = load %S.ast.Type, ptr %a139 ret %S.ast.Type %t140 endif2286: %t141 = load ptr, ptr %a1 %t142 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t143 = load { ptr, i64, i64 }, ptr %t142 %t144 = extractvalue { ptr, i64, i64 } %t143, 1 %t145 = icmp uge i64 0, %t144 br i1 %t145, label %range2287, label %inrange2288 range2287: call void @finch_panic_index(ptr @.str.1327, i64 503, i64 0, i64 %t144) unreachable inrange2288: %t146 = extractvalue { ptr, i64, i64 } %t143, 0 %t147 = getelementptr inbounds %S.ast.Type, ptr %t146, i64 0 %t148 = load %S.ast.Type, ptr %t147 %t149 = load %S.ast.Node, ptr %a3 %t150 = call %S.ast.Type @finch.gen.resolve(ptr %t141, %S.ast.Type %t148, %S.ast.Node %t149) %t151 = call %S.ast.Type @finch.ast.ptrTo(%S.ast.Type %t150) ret %S.ast.Type %t151 endif2283: %t152 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t153 = load { ptr, i64, i64 }, ptr %t152 store { ptr, i64, i64 } %t153, ptr %a154 store { ptr, i64, i64 } { ptr @.str.1328, i64 5, i64 0 }, ptr %a155 %t156 = call i32 @finch_str_eq(ptr %a154, ptr %a155) %t157 = icmp eq i32 %t156, 0 br i1 %t157, label %then2289, label %endif2291 then2289: %t158 = load %S.ast.Type, ptr %a2 store %S.ast.Type %t158, ptr %a159 call void @finch.copy.S_ast_Type(ptr %a160, ptr %a159) %t161 = load %S.ast.Type, ptr %a160 ret %S.ast.Type %t161 endif2291: %t162 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t163 = getelementptr inbounds { ptr, i64, i64 }, ptr %t162, i32 0, i32 1 %t164 = load i64, ptr %t163 %t165 = icmp eq i64 %t164, 0 br label %logic.from2292 logic.from2292: br i1 %t165, label %logic.rhs2293, label %logic.end2294 logic.rhs2293: %t166 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t167 = getelementptr inbounds { ptr, i64, i64 }, ptr %t166, i32 0, i32 1 %t168 = load i64, ptr %t167 %t169 = icmp eq i64 %t168, 0 br label %logic.rend2295 logic.rend2295: br label %logic.end2294 logic.end2294: %t170 = phi i1 [ false, %logic.from2292 ], [ %t169, %logic.rend2295 ] br label %logic.from2296 logic.from2296: br i1 %t170, label %logic.rhs2297, label %logic.end2298 logic.rhs2297: %t171 = load ptr, ptr %a1 %t172 = icmp eq ptr %t171, null br i1 %t172, label %panic2299, label %ok2300 panic2299: call void @finch_panic(ptr @.str.1329, i64 509, ptr @.str.1330) unreachable ok2300: %t173 = getelementptr inbounds %S.gen.Gen, ptr %t171, i32 0, i32 17 %t174 = getelementptr inbounds { ptr, i64, i64 }, ptr %t173, i32 0, i32 1 %t175 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t176 = load { ptr, i64, i64 }, ptr %t175 store i64 -1, ptr %a177 %t178 = load i64, ptr %t174 %t179 = load ptr, ptr %t173 store i64 0, ptr %a180 br label %find.cond2301 find.cond2301: %t181 = load i64, ptr %a180 %t182 = icmp slt i64 %t181, %t178 br i1 %t182, label %find.body2302, label %find.end2305 find.body2302: %t183 = getelementptr inbounds { ptr, i64, i64 }, ptr %t179, i64 %t181 %t184 = load { ptr, i64, i64 }, ptr %t183 store { ptr, i64, i64 } %t184, ptr %a185 store { ptr, i64, i64 } %t176, ptr %a186 %t187 = call i32 @finch_str_eq(ptr %a185, ptr %a186) %t188 = icmp ne i32 %t187, 0 br i1 %t188, label %find.hit2303, label %find.next2304 find.hit2303: store i64 %t181, ptr %a177 br label %find.end2305 find.next2304: %t189 = add i64 %t181, 1 store i64 %t189, ptr %a180 br label %find.cond2301 find.end2305: %t190 = load i64, ptr %a177 %t191 = icmp sge i64 %t190, 0 br label %logic.rend2306 logic.rend2306: br label %logic.end2298 logic.end2298: %t192 = phi i1 [ false, %logic.from2296 ], [ %t191, %logic.rend2306 ] br i1 %t192, label %then2307, label %endif2309 then2307: %t193 = load ptr, ptr %a1 %t194 = icmp eq ptr %t193, null br i1 %t194, label %panic2310, label %ok2311 panic2310: call void @finch_panic(ptr @.str.1331, i64 510, ptr @.str.1332) unreachable ok2311: %t195 = getelementptr inbounds %S.gen.Gen, ptr %t193, i32 0, i32 18 %t196 = load ptr, ptr %a1 %t197 = icmp eq ptr %t196, null br i1 %t197, label %panic2312, label %ok2313 panic2312: call void @finch_panic(ptr @.str.1333, i64 510, ptr @.str.1334) unreachable ok2313: %t198 = getelementptr inbounds %S.gen.Gen, ptr %t196, i32 0, i32 17 %t199 = getelementptr inbounds { ptr, i64, i64 }, ptr %t198, i32 0, i32 1 %t200 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t201 = load { ptr, i64, i64 }, ptr %t200 store i64 -1, ptr %a202 %t203 = load i64, ptr %t199 %t204 = load ptr, ptr %t198 store i64 0, ptr %a205 br label %find.cond2314 find.cond2314: %t206 = load i64, ptr %a205 %t207 = icmp slt i64 %t206, %t203 br i1 %t207, label %find.body2315, label %find.end2318 find.body2315: %t208 = getelementptr inbounds { ptr, i64, i64 }, ptr %t204, i64 %t206 %t209 = load { ptr, i64, i64 }, ptr %t208 store { ptr, i64, i64 } %t209, ptr %a210 store { ptr, i64, i64 } %t201, ptr %a211 %t212 = call i32 @finch_str_eq(ptr %a210, ptr %a211) %t213 = icmp ne i32 %t212, 0 br i1 %t213, label %find.hit2316, label %find.next2317 find.hit2316: store i64 %t206, ptr %a202 br label %find.end2318 find.next2317: %t214 = add i64 %t206, 1 store i64 %t214, ptr %a205 br label %find.cond2314 find.end2318: %t215 = load i64, ptr %a202 %t216 = load { ptr, i64, i64 }, ptr %t195 %t217 = extractvalue { ptr, i64, i64 } %t216, 1 %t218 = icmp uge i64 %t215, %t217 br i1 %t218, label %range2319, label %inrange2320 range2319: call void @finch_panic_index(ptr @.str.1335, i64 510, i64 %t215, i64 %t217) unreachable inrange2320: %t219 = extractvalue { ptr, i64, i64 } %t216, 0 %t220 = getelementptr inbounds %S.ast.Type, ptr %t219, i64 %t215 %t221 = load %S.ast.Type, ptr %t220 store %S.ast.Type %t221, ptr %a222 call void @finch.copy.S_ast_Type(ptr %a223, ptr %a222) %t224 = load %S.ast.Type, ptr %a223 ret %S.ast.Type %t224 endif2309: %t225 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t226 = getelementptr inbounds { ptr, i64, i64 }, ptr %t225, i32 0, i32 1 %t227 = load i64, ptr %t226 %t228 = icmp sgt i64 %t227, 0 br i1 %t228, label %then2321, label %endif2323 then2321: store { ptr, i64, i64 } zeroinitializer, ptr %a229 %t230 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 store i64 0, ptr %a231 br label %each.cond2324 each.cond2324: %t232 = getelementptr inbounds { ptr, i64, i64 }, ptr %t230, i32 0, i32 1 %t233 = load i64, ptr %t232 %t234 = load i64, ptr %a231 %t235 = icmp slt i64 %t234, %t233 br i1 %t235, label %each.body2325, label %each.end2327 each.body2325: %t236 = load ptr, ptr %t230 %t237 = getelementptr inbounds %S.ast.Type, ptr %t236, i64 %t234 %t238 = load %S.ast.Type, ptr %t237 store %S.ast.Type %t238, ptr %a239 %t240 = getelementptr inbounds { ptr, i64, i64 }, ptr %a229, i32 0, i32 1 %t241 = load ptr, ptr %a1 %t242 = load %S.ast.Type, ptr %a239 %t243 = load %S.ast.Node, ptr %a3 %t244 = call %S.ast.Type @finch.gen.resolve(ptr %t241, %S.ast.Type %t242, %S.ast.Node %t243) %t245 = load i64, ptr %t240 %t246 = add i64 %t245, 1 call void @finch_arr_reserve(ptr %a229, i64 %t246, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) %t247 = load ptr, ptr %a229 %t248 = getelementptr inbounds %S.ast.Type, ptr %t247, i64 %t245 store %S.ast.Type %t244, ptr %t248 store i64 %t246, ptr %t240 br label %each.step2326 each.step2326: %t249 = load i64, ptr %a231 %t250 = add i64 %t249, 1 store i64 %t250, ptr %a231 br label %each.cond2324 each.end2327: %t251 = load ptr, ptr %a1 %t252 = icmp eq ptr %t251, null br i1 %t252, label %panic2328, label %ok2329 panic2328: call void @finch_panic(ptr @.str.1336, i64 518, ptr @.str.1337) unreachable ok2329: %t253 = getelementptr inbounds %S.gen.Gen, ptr %t251, i32 0, i32 13 %t254 = load { ptr, i64, i64 }, ptr %t253 store { ptr, i64, i64 } %t254, ptr %a255 call void @finch_str_copy(ptr %a256, ptr %a255) %t257 = load { ptr, i64, i64 }, ptr %a256 store { ptr, i64, i64 } %t257, ptr %a258 %t259 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t260 = getelementptr inbounds { ptr, i64, i64 }, ptr %t259, i32 0, i32 1 %t261 = load i64, ptr %t260 %t262 = icmp sgt i64 %t261, 0 br i1 %t262, label %then2330, label %endif2332 then2330: %t263 = load ptr, ptr %a1 %t264 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t265 = load { ptr, i64, i64 }, ptr %t264 %t266 = call i1 @finch.gen.imports(ptr %t263, { ptr, i64, i64 } %t265) %t267 = xor i1 %t266, true br i1 %t267, label %then2333, label %endif2335 then2333: %t268 = load ptr, ptr %a1 %t269 = load %S.ast.Node, ptr %a3 %t270 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t271 = load { ptr, i64, i64 }, ptr %t270 store { ptr, i64, i64 } { ptr @.str.1338, i64 1, i64 0 }, ptr %a273 store { ptr, i64, i64 } %t271, ptr %a274 call void @finch_str_concat(ptr %a272, ptr %a273, ptr %a274) %t275 = load { ptr, i64, i64 }, ptr %a272 store { ptr, i64, i64 } %t275, ptr %a277 store { ptr, i64, i64 } { ptr @.str.1339, i64 36, i64 0 }, ptr %a278 call void @finch_str_concat(ptr %a276, ptr %a277, ptr %a278) %t279 = load { ptr, i64, i64 }, ptr %a276 %t280 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t281 = load { ptr, i64, i64 }, ptr %t280 store { ptr, i64, i64 } %t279, ptr %a283 store { ptr, i64, i64 } %t281, ptr %a284 call void @finch_str_concat(ptr %a282, ptr %a283, ptr %a284) %t285 = load { ptr, i64, i64 }, ptr %a282 store { ptr, i64, i64 } %t285, ptr %a287 store { ptr, i64, i64 } { ptr @.str.1340, i64 1, i64 0 }, ptr %a288 call void @finch_str_concat(ptr %a286, ptr %a287, ptr %a288) %t289 = load { ptr, i64, i64 }, ptr %a286 call void @finch.gen.fail(ptr %t268, %S.ast.Node %t269, { ptr, i64, i64 } %t289) br label %endif2335 endif2335: %t290 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t291 = load { ptr, i64, i64 }, ptr %t290 store { ptr, i64, i64 } %t291, ptr %a292 call void @finch_str_copy(ptr %a293, ptr %a292) %t294 = load { ptr, i64, i64 }, ptr %a293 store { ptr, i64, i64 } %t294, ptr %a258 br label %endif2332 endif2332: %t295 = load ptr, ptr %a1 %t296 = load { ptr, i64, i64 }, ptr %a258 %t297 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t298 = load { ptr, i64, i64 }, ptr %t297 %t299 = load { ptr, i64, i64 }, ptr %a229 %t300 = load %S.ast.Node, ptr %a3 %t301 = call %S.ast.Type @finch.gen.instStruct(ptr %t295, { ptr, i64, i64 } %t296, { ptr, i64, i64 } %t298, { ptr, i64, i64 } %t299, %S.ast.Node %t300) ret %S.ast.Type %t301 endif2323: %t302 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t303 = load { ptr, i64, i64 }, ptr %t302 store { ptr, i64, i64 } %t303, ptr %a304 store { ptr, i64, i64 } { ptr @.str.1341, i64 1, i64 0 }, ptr %a305 %t306 = call i32 @finch_str_eq(ptr %a304, ptr %a305) %t307 = icmp ne i32 %t306, 0 br i1 %t307, label %then2336, label %endif2338 then2336: %t308 = load ptr, ptr %a1 %t309 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t310 = load { ptr, i64, i64 }, ptr %t309 %t311 = call i64 @finch.gen.findStruct(ptr %t308, { ptr, i64, i64 } { ptr @.str.1342, i64 1, i64 0 }, { ptr, i64, i64 } %t310) %t312 = icmp slt i64 %t311, 0 br i1 %t312, label %then2339, label %endif2341 then2339: %t313 = load ptr, ptr %a1 %t314 = load %S.ast.Node, ptr %a3 %t315 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t316 = load { ptr, i64, i64 }, ptr %t315 store { ptr, i64, i64 } { ptr @.str.1343, i64 28, i64 0 }, ptr %a318 store { ptr, i64, i64 } %t316, ptr %a319 call void @finch_str_concat(ptr %a317, ptr %a318, ptr %a319) %t320 = load { ptr, i64, i64 }, ptr %a317 store { ptr, i64, i64 } %t320, ptr %a322 store { ptr, i64, i64 } { ptr @.str.1344, i64 1, i64 0 }, ptr %a323 call void @finch_str_concat(ptr %a321, ptr %a322, ptr %a323) %t324 = load { ptr, i64, i64 }, ptr %a321 call void @finch.gen.fail(ptr %t313, %S.ast.Node %t314, { ptr, i64, i64 } %t324) br label %endif2341 endif2341: %t325 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.1345, i64 6, i64 0 }, 0 %t326 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t327 = load { ptr, i64, i64 }, ptr %t326 store { ptr, i64, i64 } %t327, ptr %a328 call void @finch_str_copy(ptr %a329, ptr %a328) %t330 = load { ptr, i64, i64 }, ptr %a329 %t331 = insertvalue %S.ast.Type %t325, { ptr, i64, i64 } %t330, 2 %t332 = insertvalue %S.ast.Type %t331, { ptr, i64, i64 } { ptr @.str.1346, i64 1, i64 0 }, 3 ret %S.ast.Type %t332 endif2338: %t333 = load ptr, ptr %a1 %t334 = icmp eq ptr %t333, null br i1 %t334, label %panic2342, label %ok2343 panic2342: call void @finch_panic(ptr @.str.1347, i64 533, ptr @.str.1348) unreachable ok2343: %t335 = getelementptr inbounds %S.gen.Gen, ptr %t333, i32 0, i32 13 %t336 = load { ptr, i64, i64 }, ptr %t335 store { ptr, i64, i64 } %t336, ptr %a337 call void @finch_str_copy(ptr %a338, ptr %a337) %t339 = load { ptr, i64, i64 }, ptr %a338 store { ptr, i64, i64 } %t339, ptr %a340 %t341 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t342 = getelementptr inbounds { ptr, i64, i64 }, ptr %t341, i32 0, i32 1 %t343 = load i64, ptr %t342 %t344 = icmp sgt i64 %t343, 0 br i1 %t344, label %then2344, label %endif2346 then2344: %t345 = load ptr, ptr %a1 %t346 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t347 = load { ptr, i64, i64 }, ptr %t346 %t348 = call i1 @finch.gen.imports(ptr %t345, { ptr, i64, i64 } %t347) %t349 = xor i1 %t348, true br i1 %t349, label %then2347, label %endif2349 then2347: %t350 = load ptr, ptr %a1 %t351 = load %S.ast.Node, ptr %a3 %t352 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t353 = load { ptr, i64, i64 }, ptr %t352 store { ptr, i64, i64 } { ptr @.str.1349, i64 1, i64 0 }, ptr %a355 store { ptr, i64, i64 } %t353, ptr %a356 call void @finch_str_concat(ptr %a354, ptr %a355, ptr %a356) %t357 = load { ptr, i64, i64 }, ptr %a354 store { ptr, i64, i64 } %t357, ptr %a359 store { ptr, i64, i64 } { ptr @.str.1350, i64 36, i64 0 }, ptr %a360 call void @finch_str_concat(ptr %a358, ptr %a359, ptr %a360) %t361 = load { ptr, i64, i64 }, ptr %a358 %t362 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t363 = load { ptr, i64, i64 }, ptr %t362 store { ptr, i64, i64 } %t361, ptr %a365 store { ptr, i64, i64 } %t363, ptr %a366 call void @finch_str_concat(ptr %a364, ptr %a365, ptr %a366) %t367 = load { ptr, i64, i64 }, ptr %a364 store { ptr, i64, i64 } %t367, ptr %a369 store { ptr, i64, i64 } { ptr @.str.1351, i64 1, i64 0 }, ptr %a370 call void @finch_str_concat(ptr %a368, ptr %a369, ptr %a370) %t371 = load { ptr, i64, i64 }, ptr %a368 call void @finch.gen.fail(ptr %t350, %S.ast.Node %t351, { ptr, i64, i64 } %t371) br label %endif2349 endif2349: %t372 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t373 = load { ptr, i64, i64 }, ptr %t372 store { ptr, i64, i64 } %t373, ptr %a374 call void @finch_str_copy(ptr %a375, ptr %a374) %t376 = load { ptr, i64, i64 }, ptr %a375 store { ptr, i64, i64 } %t376, ptr %a340 br label %endif2346 endif2346: %t377 = load ptr, ptr %a1 %t378 = load { ptr, i64, i64 }, ptr %a340 %t379 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t380 = load { ptr, i64, i64 }, ptr %t379 %t381 = call i64 @finch.gen.findEnum(ptr %t377, { ptr, i64, i64 } %t378, { ptr, i64, i64 } %t380) %t382 = icmp sge i64 %t381, 0 br i1 %t382, label %then2350, label %endif2352 then2350: %t383 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.1352, i64 4, i64 0 }, 0 %t384 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t385 = load { ptr, i64, i64 }, ptr %t384 store { ptr, i64, i64 } %t385, ptr %a386 call void @finch_str_copy(ptr %a387, ptr %a386) %t388 = load { ptr, i64, i64 }, ptr %a387 %t389 = insertvalue %S.ast.Type %t383, { ptr, i64, i64 } %t388, 2 %t390 = load { ptr, i64, i64 }, ptr %a340 store { ptr, i64, i64 } %t390, ptr %a391 call void @finch_str_copy(ptr %a392, ptr %a391) %t393 = load { ptr, i64, i64 }, ptr %a392 %t394 = insertvalue %S.ast.Type %t389, { ptr, i64, i64 } %t393, 3 ret %S.ast.Type %t394 endif2352: %t395 = load ptr, ptr %a1 %t396 = load { ptr, i64, i64 }, ptr %a340 %t397 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t398 = load { ptr, i64, i64 }, ptr %t397 %t399 = call i64 @finch.gen.findStruct(ptr %t395, { ptr, i64, i64 } %t396, { ptr, i64, i64 } %t398) %t400 = icmp slt i64 %t399, 0 br i1 %t400, label %then2353, label %endif2355 then2353: %t401 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t402 = getelementptr inbounds { ptr, i64, i64 }, ptr %t401, i32 0, i32 1 %t403 = load i64, ptr %t402 %t404 = icmp eq i64 %t403, 0 br label %logic.from2356 logic.from2356: br i1 %t404, label %logic.rhs2357, label %logic.end2358 logic.rhs2357: %t405 = load ptr, ptr %a1 %t406 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t407 = load { ptr, i64, i64 }, ptr %t406 %t408 = call i64 @finch.gen.findStruct(ptr %t405, { ptr, i64, i64 } { ptr @.str.1353, i64 1, i64 0 }, { ptr, i64, i64 } %t407) %t409 = icmp sge i64 %t408, 0 br label %logic.rend2359 logic.rend2359: br label %logic.end2358 logic.end2358: %t410 = phi i1 [ false, %logic.from2356 ], [ %t409, %logic.rend2359 ] br i1 %t410, label %then2360, label %endif2362 then2360: %t411 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.1354, i64 6, i64 0 }, 0 %t412 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t413 = load { ptr, i64, i64 }, ptr %t412 store { ptr, i64, i64 } %t413, ptr %a414 call void @finch_str_copy(ptr %a415, ptr %a414) %t416 = load { ptr, i64, i64 }, ptr %a415 %t417 = insertvalue %S.ast.Type %t411, { ptr, i64, i64 } %t416, 2 %t418 = insertvalue %S.ast.Type %t417, { ptr, i64, i64 } { ptr @.str.1355, i64 1, i64 0 }, 3 ret %S.ast.Type %t418 endif2362: %t419 = load ptr, ptr %a1 %t420 = load %S.ast.Node, ptr %a3 %t421 = load %S.ast.Type, ptr %a2 %t422 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t421) store { ptr, i64, i64 } { ptr @.str.1356, i64 24, i64 0 }, ptr %a424 store { ptr, i64, i64 } %t422, ptr %a425 call void @finch_str_concat(ptr %a423, ptr %a424, ptr %a425) %t426 = load { ptr, i64, i64 }, ptr %a423 store { ptr, i64, i64 } %t426, ptr %a428 store { ptr, i64, i64 } { ptr @.str.1357, i64 1, i64 0 }, ptr %a429 call void @finch_str_concat(ptr %a427, ptr %a428, ptr %a429) %t430 = load { ptr, i64, i64 }, ptr %a427 call void @finch.gen.fail(ptr %t419, %S.ast.Node %t420, { ptr, i64, i64 } %t430) br label %endif2355 endif2355: %t431 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.1358, i64 6, i64 0 }, 0 %t432 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t433 = load { ptr, i64, i64 }, ptr %t432 store { ptr, i64, i64 } %t433, ptr %a434 call void @finch_str_copy(ptr %a435, ptr %a434) %t436 = load { ptr, i64, i64 }, ptr %a435 %t437 = insertvalue %S.ast.Type %t431, { ptr, i64, i64 } %t436, 2 %t438 = load { ptr, i64, i64 }, ptr %a340 store { ptr, i64, i64 } %t438, ptr %a439 call void @finch_str_copy(ptr %a440, ptr %a439) %t441 = load { ptr, i64, i64 }, ptr %a440 %t442 = insertvalue %S.ast.Type %t437, { ptr, i64, i64 } %t441, 3 ret %S.ast.Type %t442 } define internal { ptr, i64, i64 } @finch.gen.mangle({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t2, ptr %a3 store { ptr, i64, i64 } { ptr @.str.1360, i64 1, i64 0 }, ptr %a5 store { ptr, i64, i64 } { ptr @.str.1361, i64 1, i64 0 }, ptr %a6 call void @finch_str_replace(ptr %a4, ptr %a3, ptr %a5, ptr %a6) %t7 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t7, ptr %a8 store { ptr, i64, i64 } { ptr @.str.1363, i64 1, i64 0 }, ptr %a10 store { ptr, i64, i64 } { ptr @.str.1364, i64 0, i64 0 }, ptr %a11 call void @finch_str_replace(ptr %a9, ptr %a8, ptr %a10, ptr %a11) %t12 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t12, ptr %a13 store { ptr, i64, i64 } { ptr @.str.1366, i64 1, i64 0 }, ptr %a15 store { ptr, i64, i64 } { ptr @.str.1367, i64 1, i64 0 }, ptr %a16 call void @finch_str_replace(ptr %a14, ptr %a13, ptr %a15, ptr %a16) %t17 = load { ptr, i64, i64 }, ptr %a14 store { ptr, i64, i64 } %t17, ptr %a18 store { ptr, i64, i64 } { ptr @.str.1369, i64 1, i64 0 }, ptr %a20 store { ptr, i64, i64 } { ptr @.str.1370, i64 0, i64 0 }, ptr %a21 call void @finch_str_replace(ptr %a19, ptr %a18, ptr %a20, ptr %a21) %t22 = load { ptr, i64, i64 }, ptr %a19 ret { ptr, i64, i64 } %t22 } define internal { ptr, i64, i64 } @finch.gen.modName({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t3 = load i64, ptr %t2 %t4 = icmp eq i64 %t3, 0 br i1 %t4, label %then2363, label %endif2365 then2363: ret { ptr, i64, i64 } { ptr @.str.1371, i64 4, i64 0 } endif2365: %t5 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t5, ptr %a6 call void @finch_str_copy(ptr %a7, ptr %a6) %t8 = load { ptr, i64, i64 }, ptr %a7 ret { ptr, i64, i64 } %t8 } define internal { ptr, i64, i64 } @finch.gen.llty(ptr %p0, %S.ast.Type %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Type, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a114 = alloca { ptr, i64, i64 }, align 16 %a115 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca { ptr, i64, i64 }, align 16 %a118 = alloca { ptr, i64, i64 }, align 16 %a119 = alloca { ptr, i64, i64 }, align 16 %a120 = alloca { ptr, i64, i64 }, align 16 %a125 = alloca { ptr, i64, i64 }, align 16 %a126 = alloca { ptr, i64, i64 }, align 16 %a127 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Type %p1, ptr %a2 %t3 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t4 = load { ptr, i64, i64 }, ptr %t3 store { ptr, i64, i64 } %t4, ptr %a5 call void @finch_str_copy(ptr %a6, ptr %a5) %t7 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t7, ptr %a8 %t9 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t9, ptr %a10 store { ptr, i64, i64 } { ptr @.str.1372, i64 4, i64 0 }, ptr %a11 %t12 = call i32 @finch_str_eq(ptr %a10, ptr %a11) %t13 = icmp ne i32 %t12, 0 br i1 %t13, label %then2366, label %endif2368 then2366: ret { ptr, i64, i64 } { ptr @.str.1373, i64 2, i64 0 } endif2368: %t14 = load %S.ast.Type, ptr %a2 %t15 = call i1 @finch.gen.isInt(%S.ast.Type %t14) br label %logic.from2369 logic.from2369: br i1 %t15, label %logic.end2371, label %logic.rhs2370 logic.rhs2370: %t16 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t16, ptr %a17 store { ptr, i64, i64 } { ptr @.str.1374, i64 4, i64 0 }, ptr %a18 %t19 = call i32 @finch_str_eq(ptr %a17, ptr %a18) %t20 = icmp ne i32 %t19, 0 br label %logic.rend2372 logic.rend2372: br label %logic.end2371 logic.end2371: %t21 = phi i1 [ true, %logic.from2369 ], [ %t20, %logic.rend2372 ] br i1 %t21, label %then2373, label %endif2375 then2373: %t22 = load %S.ast.Type, ptr %a2 %t23 = call i64 @finch.gen.bitsOf(%S.ast.Type %t22) call void @finch_str_from_int(ptr %a24, i64 %t23) %t25 = load { ptr, i64, i64 }, ptr %a24 store { ptr, i64, i64 } { ptr @.str.1375, i64 1, i64 0 }, ptr %a27 store { ptr, i64, i64 } %t25, ptr %a28 call void @finch_str_concat(ptr %a26, ptr %a27, ptr %a28) %t29 = load { ptr, i64, i64 }, ptr %a26 ret { ptr, i64, i64 } %t29 endif2375: %t30 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t30, ptr %a31 store { ptr, i64, i64 } { ptr @.str.1376, i64 5, i64 0 }, ptr %a32 %t33 = call i32 @finch_str_eq(ptr %a31, ptr %a32) %t34 = icmp ne i32 %t33, 0 br i1 %t34, label %then2376, label %endif2378 then2376: ret { ptr, i64, i64 } { ptr @.str.1377, i64 6, i64 0 } endif2378: %t35 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t35, ptr %a36 store { ptr, i64, i64 } { ptr @.str.1378, i64 3, i64 0 }, ptr %a37 %t38 = call i32 @finch_str_eq(ptr %a36, ptr %a37) %t39 = icmp ne i32 %t38, 0 br i1 %t39, label %then2379, label %endif2381 then2379: ret { ptr, i64, i64 } { ptr @.str.1379, i64 5, i64 0 } endif2381: %t40 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t40, ptr %a41 store { ptr, i64, i64 } { ptr @.str.1380, i64 3, i64 0 }, ptr %a42 %t43 = call i32 @finch_str_eq(ptr %a41, ptr %a42) %t44 = icmp ne i32 %t43, 0 br label %logic.from2382 logic.from2382: br i1 %t44, label %logic.end2384, label %logic.rhs2383 logic.rhs2383: %t45 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t45, ptr %a46 store { ptr, i64, i64 } { ptr @.str.1381, i64 5, i64 0 }, ptr %a47 %t48 = call i32 @finch_str_eq(ptr %a46, ptr %a47) %t49 = icmp ne i32 %t48, 0 br label %logic.rend2385 logic.rend2385: br label %logic.end2384 logic.end2384: %t50 = phi i1 [ true, %logic.from2382 ], [ %t49, %logic.rend2385 ] br i1 %t50, label %then2386, label %endif2388 then2386: ret { ptr, i64, i64 } { ptr @.str.1382, i64 17, i64 0 } endif2388: %t51 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t51, ptr %a52 store { ptr, i64, i64 } { ptr @.str.1383, i64 3, i64 0 }, ptr %a53 %t54 = call i32 @finch_str_eq(ptr %a52, ptr %a53) %t55 = icmp ne i32 %t54, 0 br i1 %t55, label %then2389, label %endif2391 then2389: ret { ptr, i64, i64 } { ptr @.str.1384, i64 37, i64 0 } endif2391: %t56 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t56, ptr %a57 store { ptr, i64, i64 } { ptr @.str.1385, i64 5, i64 0 }, ptr %a58 %t59 = call i32 @finch_str_eq(ptr %a57, ptr %a58) %t60 = icmp ne i32 %t59, 0 br i1 %t60, label %then2392, label %endif2394 then2392: %t61 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 4 %t62 = load i64, ptr %t61 call void @finch_str_from_int(ptr %a63, i64 %t62) %t64 = load { ptr, i64, i64 }, ptr %a63 store { ptr, i64, i64 } { ptr @.str.1386, i64 1, i64 0 }, ptr %a66 store { ptr, i64, i64 } %t64, ptr %a67 call void @finch_str_concat(ptr %a65, ptr %a66, ptr %a67) %t68 = load { ptr, i64, i64 }, ptr %a65 store { ptr, i64, i64 } %t68, ptr %a70 store { ptr, i64, i64 } { ptr @.str.1387, i64 3, i64 0 }, ptr %a71 call void @finch_str_concat(ptr %a69, ptr %a70, ptr %a71) %t72 = load { ptr, i64, i64 }, ptr %a69 %t73 = load ptr, ptr %a1 %t74 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t75 = load { ptr, i64, i64 }, ptr %t74 %t76 = extractvalue { ptr, i64, i64 } %t75, 1 %t77 = icmp uge i64 0, %t76 br i1 %t77, label %range2395, label %inrange2396 range2395: call void @finch_panic_index(ptr @.str.1388, i64 586, i64 0, i64 %t76) unreachable inrange2396: %t78 = extractvalue { ptr, i64, i64 } %t75, 0 %t79 = getelementptr inbounds %S.ast.Type, ptr %t78, i64 0 %t80 = load %S.ast.Type, ptr %t79 %t81 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t73, %S.ast.Type %t80) store { ptr, i64, i64 } %t72, ptr %a83 store { ptr, i64, i64 } %t81, ptr %a84 call void @finch_str_concat(ptr %a82, ptr %a83, ptr %a84) %t85 = load { ptr, i64, i64 }, ptr %a82 store { ptr, i64, i64 } %t85, ptr %a87 store { ptr, i64, i64 } { ptr @.str.1389, i64 1, i64 0 }, ptr %a88 call void @finch_str_concat(ptr %a86, ptr %a87, ptr %a88) %t89 = load { ptr, i64, i64 }, ptr %a86 ret { ptr, i64, i64 } %t89 endif2394: %t90 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t90, ptr %a91 store { ptr, i64, i64 } { ptr @.str.1390, i64 4, i64 0 }, ptr %a92 %t93 = call i32 @finch_str_eq(ptr %a91, ptr %a92) %t94 = icmp ne i32 %t93, 0 br i1 %t94, label %then2397, label %endif2399 then2397: ret { ptr, i64, i64 } { ptr @.str.1391, i64 3, i64 0 } endif2399: %t95 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t95, ptr %a96 store { ptr, i64, i64 } { ptr @.str.1392, i64 3, i64 0 }, ptr %a97 %t98 = call i32 @finch_str_eq(ptr %a96, ptr %a97) %t99 = icmp ne i32 %t98, 0 br label %logic.from2400 logic.from2400: br i1 %t99, label %logic.end2402, label %logic.rhs2401 logic.rhs2401: %t100 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t100, ptr %a101 store { ptr, i64, i64 } { ptr @.str.1393, i64 4, i64 0 }, ptr %a102 %t103 = call i32 @finch_str_eq(ptr %a101, ptr %a102) %t104 = icmp ne i32 %t103, 0 br label %logic.rend2403 logic.rend2403: br label %logic.end2402 logic.end2402: %t105 = phi i1 [ true, %logic.from2400 ], [ %t104, %logic.rend2403 ] br i1 %t105, label %then2404, label %endif2406 then2404: ret { ptr, i64, i64 } { ptr @.str.1394, i64 3, i64 0 } endif2406: %t106 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t106, ptr %a107 store { ptr, i64, i64 } { ptr @.str.1395, i64 4, i64 0 }, ptr %a108 %t109 = call i32 @finch_str_eq(ptr %a107, ptr %a108) %t110 = icmp ne i32 %t109, 0 br i1 %t110, label %then2407, label %endif2409 then2407: ret { ptr, i64, i64 } { ptr @.str.1396, i64 4, i64 0 } endif2409: %t111 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t112 = load { ptr, i64, i64 }, ptr %t111 %t113 = call { ptr, i64, i64 } @finch.gen.modName({ ptr, i64, i64 } %t112) store { ptr, i64, i64 } { ptr @.str.1397, i64 3, i64 0 }, ptr %a115 store { ptr, i64, i64 } %t113, ptr %a116 call void @finch_str_concat(ptr %a114, ptr %a115, ptr %a116) %t117 = load { ptr, i64, i64 }, ptr %a114 store { ptr, i64, i64 } %t117, ptr %a119 store { ptr, i64, i64 } { ptr @.str.1398, i64 1, i64 0 }, ptr %a120 call void @finch_str_concat(ptr %a118, ptr %a119, ptr %a120) %t121 = load { ptr, i64, i64 }, ptr %a118 %t122 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t123 = load { ptr, i64, i64 }, ptr %t122 %t124 = call { ptr, i64, i64 } @finch.gen.mangle({ ptr, i64, i64 } %t123) store { ptr, i64, i64 } %t121, ptr %a126 store { ptr, i64, i64 } %t124, ptr %a127 call void @finch_str_concat(ptr %a125, ptr %a126, ptr %a127) %t128 = load { ptr, i64, i64 }, ptr %a125 ret { ptr, i64, i64 } %t128 } define internal { ptr, i64, i64 } @finch.gen.retTy(ptr %p0, %S.gen.FnSig %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.gen.FnSig, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.gen.FnSig %p1, ptr %a2 %t3 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 9 %t4 = load i1, ptr %t3 %t5 = xor i1 %t4, true br i1 %t5, label %then2410, label %endif2412 then2410: %t6 = load ptr, ptr %a1 %t7 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 %t8 = load %S.ast.Type, ptr %t7 %t9 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t6, %S.ast.Type %t8) ret { ptr, i64, i64 } %t9 endif2412: store { ptr, i64, i64 } { ptr @.str.1399, i64 2, i64 0 }, ptr %a10 %t11 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 %t12 = getelementptr inbounds %S.ast.Type, ptr %t11, i32 0, i32 0 %t13 = load { ptr, i64, i64 }, ptr %t12 store { ptr, i64, i64 } %t13, ptr %a14 store { ptr, i64, i64 } { ptr @.str.1400, i64 4, i64 0 }, ptr %a15 %t16 = call i32 @finch_str_eq(ptr %a14, ptr %a15) %t17 = icmp eq i32 %t16, 0 br i1 %t17, label %then2413, label %endif2415 then2413: %t18 = load ptr, ptr %a1 %t19 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 %t20 = load %S.ast.Type, ptr %t19 %t21 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t18, %S.ast.Type %t20) store { ptr, i64, i64 } %t21, ptr %a10 br label %endif2415 endif2415: %t22 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } { ptr @.str.1401, i64 6, i64 0 }, ptr %a24 store { ptr, i64, i64 } %t22, ptr %a25 call void @finch_str_concat(ptr %a23, ptr %a24, ptr %a25) %t26 = load { ptr, i64, i64 }, ptr %a23 store { ptr, i64, i64 } %t26, ptr %a28 store { ptr, i64, i64 } { ptr @.str.1402, i64 21, i64 0 }, ptr %a29 call void @finch_str_concat(ptr %a27, ptr %a28, ptr %a29) %t30 = load { ptr, i64, i64 }, ptr %a27 ret { ptr, i64, i64 } %t30 } define internal { ptr, i64, i64 } @finch.gen.nodeKey(%S.ast.Node %p0) { entry: %a1 = alloca %S.ast.Node, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 store %S.ast.Node %p0, ptr %a1 %t2 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 0 %t3 = load { ptr, i64, i64 }, ptr %t2 store { ptr, i64, i64 } %t3, ptr %a5 store { ptr, i64, i64 } { ptr @.str.1403, i64 1, i64 0 }, ptr %a6 call void @finch_str_concat(ptr %a4, ptr %a5, ptr %a6) %t7 = load { ptr, i64, i64 }, ptr %a4 %t8 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 11 %t9 = load i64, ptr %t8 call void @finch_str_from_int(ptr %a10, i64 %t9) %t11 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t7, ptr %a13 store { ptr, i64, i64 } %t11, ptr %a14 call void @finch_str_concat(ptr %a12, ptr %a13, ptr %a14) %t15 = load { ptr, i64, i64 }, ptr %a12 store { ptr, i64, i64 } %t15, ptr %a17 store { ptr, i64, i64 } { ptr @.str.1404, i64 1, i64 0 }, ptr %a18 call void @finch_str_concat(ptr %a16, ptr %a17, ptr %a18) %t19 = load { ptr, i64, i64 }, ptr %a16 %t20 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 12 %t21 = load i64, ptr %t20 call void @finch_str_from_int(ptr %a22, i64 %t21) %t23 = load { ptr, i64, i64 }, ptr %a22 store { ptr, i64, i64 } %t19, ptr %a25 store { ptr, i64, i64 } %t23, ptr %a26 call void @finch_str_concat(ptr %a24, ptr %a25, ptr %a26) %t27 = load { ptr, i64, i64 }, ptr %a24 store { ptr, i64, i64 } %t27, ptr %a29 store { ptr, i64, i64 } { ptr @.str.1405, i64 1, i64 0 }, ptr %a30 call void @finch_str_concat(ptr %a28, ptr %a29, ptr %a30) %t31 = load { ptr, i64, i64 }, ptr %a28 %t32 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 13 %t33 = load i64, ptr %t32 call void @finch_str_from_int(ptr %a34, i64 %t33) %t35 = load { ptr, i64, i64 }, ptr %a34 store { ptr, i64, i64 } %t31, ptr %a37 store { ptr, i64, i64 } %t35, ptr %a38 call void @finch_str_concat(ptr %a36, ptr %a37, ptr %a38) %t39 = load { ptr, i64, i64 }, ptr %a36 ret { ptr, i64, i64 } %t39 } define internal { ptr, i64, i64 } @finch.gen.zeroOf(%S.ast.Type %p0) { entry: %a1 = alloca %S.ast.Type, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 store %S.ast.Type %p0, ptr %a1 %t2 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t3 = load { ptr, i64, i64 }, ptr %t2 store { ptr, i64, i64 } %t3, ptr %a4 call void @finch_str_copy(ptr %a5, ptr %a4) %t6 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } %t6, ptr %a7 %t8 = load %S.ast.Type, ptr %a1 %t9 = call i1 @finch.gen.isInt(%S.ast.Type %t8) br label %logic.from2416 logic.from2416: br i1 %t9, label %logic.end2418, label %logic.rhs2417 logic.rhs2417: %t10 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t10, ptr %a11 store { ptr, i64, i64 } { ptr @.str.1406, i64 4, i64 0 }, ptr %a12 %t13 = call i32 @finch_str_eq(ptr %a11, ptr %a12) %t14 = icmp ne i32 %t13, 0 br label %logic.rend2419 logic.rend2419: br label %logic.end2418 logic.end2418: %t15 = phi i1 [ true, %logic.from2416 ], [ %t14, %logic.rend2419 ] br label %logic.from2420 logic.from2420: br i1 %t15, label %logic.end2422, label %logic.rhs2421 logic.rhs2421: %t16 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t16, ptr %a17 store { ptr, i64, i64 } { ptr @.str.1407, i64 4, i64 0 }, ptr %a18 %t19 = call i32 @finch_str_eq(ptr %a17, ptr %a18) %t20 = icmp ne i32 %t19, 0 br label %logic.rend2423 logic.rend2423: br label %logic.end2422 logic.end2422: %t21 = phi i1 [ true, %logic.from2420 ], [ %t20, %logic.rend2423 ] br i1 %t21, label %then2424, label %endif2426 then2424: ret { ptr, i64, i64 } { ptr @.str.1408, i64 1, i64 0 } endif2426: %t22 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t22, ptr %a23 store { ptr, i64, i64 } { ptr @.str.1409, i64 4, i64 0 }, ptr %a24 %t25 = call i32 @finch_str_eq(ptr %a23, ptr %a24) %t26 = icmp ne i32 %t25, 0 br i1 %t26, label %then2427, label %endif2429 then2427: ret { ptr, i64, i64 } { ptr @.str.1410, i64 5, i64 0 } endif2429: %t27 = load %S.ast.Type, ptr %a1 %t28 = call i1 @finch.gen.isFloat(%S.ast.Type %t27) br i1 %t28, label %then2430, label %endif2432 then2430: ret { ptr, i64, i64 } { ptr @.str.1411, i64 3, i64 0 } endif2432: %t29 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t29, ptr %a30 store { ptr, i64, i64 } { ptr @.str.1412, i64 3, i64 0 }, ptr %a31 %t32 = call i32 @finch_str_eq(ptr %a30, ptr %a31) %t33 = icmp ne i32 %t32, 0 br label %logic.from2433 logic.from2433: br i1 %t33, label %logic.end2435, label %logic.rhs2434 logic.rhs2434: %t34 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t34, ptr %a35 store { ptr, i64, i64 } { ptr @.str.1413, i64 4, i64 0 }, ptr %a36 %t37 = call i32 @finch_str_eq(ptr %a35, ptr %a36) %t38 = icmp ne i32 %t37, 0 br label %logic.rend2436 logic.rend2436: br label %logic.end2435 logic.end2435: %t39 = phi i1 [ true, %logic.from2433 ], [ %t38, %logic.rend2436 ] br i1 %t39, label %then2437, label %endif2439 then2437: ret { ptr, i64, i64 } { ptr @.str.1414, i64 4, i64 0 } endif2439: ret { ptr, i64, i64 } { ptr @.str.1415, i64 15, i64 0 } } define internal { ptr, i64, i64 } @finch.gen.sizeOf(ptr %p0, %S.ast.Type %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Type, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Type %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = load %S.ast.Type, ptr %a2 %t5 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t3, %S.ast.Type %t4) store { ptr, i64, i64 } { ptr @.str.1416, i64 29, i64 0 }, ptr %a7 store { ptr, i64, i64 } %t5, ptr %a8 call void @finch_str_concat(ptr %a6, ptr %a7, ptr %a8) %t9 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t9, ptr %a11 store { ptr, i64, i64 } { ptr @.str.1417, i64 26, i64 0 }, ptr %a12 call void @finch_str_concat(ptr %a10, ptr %a11, ptr %a12) %t13 = load { ptr, i64, i64 }, ptr %a10 ret { ptr, i64, i64 } %t13 } define internal i1 @finch.gen.owning(ptr %p0, %S.ast.Type %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Type, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Type %p1, ptr %a2 %t3 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t4 = load { ptr, i64, i64 }, ptr %t3 store { ptr, i64, i64 } %t4, ptr %a5 store { ptr, i64, i64 } { ptr @.str.1418, i64 3, i64 0 }, ptr %a6 %t7 = call i32 @finch_str_eq(ptr %a5, ptr %a6) %t8 = icmp ne i32 %t7, 0 br label %logic.from2440 logic.from2440: br i1 %t8, label %logic.end2442, label %logic.rhs2441 logic.rhs2441: %t9 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t10 = load { ptr, i64, i64 }, ptr %t9 store { ptr, i64, i64 } %t10, ptr %a11 store { ptr, i64, i64 } { ptr @.str.1419, i64 5, i64 0 }, ptr %a12 %t13 = call i32 @finch_str_eq(ptr %a11, ptr %a12) %t14 = icmp ne i32 %t13, 0 br label %logic.rend2443 logic.rend2443: br label %logic.end2442 logic.end2442: %t15 = phi i1 [ true, %logic.from2440 ], [ %t14, %logic.rend2443 ] br label %logic.from2444 logic.from2444: br i1 %t15, label %logic.end2446, label %logic.rhs2445 logic.rhs2445: %t16 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t17 = load { ptr, i64, i64 }, ptr %t16 store { ptr, i64, i64 } %t17, ptr %a18 store { ptr, i64, i64 } { ptr @.str.1420, i64 3, i64 0 }, ptr %a19 %t20 = call i32 @finch_str_eq(ptr %a18, ptr %a19) %t21 = icmp ne i32 %t20, 0 br label %logic.rend2447 logic.rend2447: br label %logic.end2446 logic.end2446: %t22 = phi i1 [ true, %logic.from2444 ], [ %t21, %logic.rend2447 ] br i1 %t22, label %then2448, label %endif2450 then2448: ret i1 true endif2450: %t23 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t24 = load { ptr, i64, i64 }, ptr %t23 store { ptr, i64, i64 } %t24, ptr %a25 store { ptr, i64, i64 } { ptr @.str.1421, i64 6, i64 0 }, ptr %a26 %t27 = call i32 @finch_str_eq(ptr %a25, ptr %a26) %t28 = icmp ne i32 %t27, 0 br i1 %t28, label %then2451, label %endif2453 then2451: %t29 = load ptr, ptr %a1 %t30 = icmp eq ptr %t29, null br i1 %t30, label %panic2454, label %ok2455 panic2454: call void @finch_panic(ptr @.str.1422, i64 644, ptr @.str.1423) unreachable ok2455: %t31 = getelementptr inbounds %S.gen.Gen, ptr %t29, i32 0, i32 15 %t32 = load ptr, ptr %a1 %t33 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t34 = load { ptr, i64, i64 }, ptr %t33 %t35 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t36 = load { ptr, i64, i64 }, ptr %t35 %t37 = call i64 @finch.gen.findStruct(ptr %t32, { ptr, i64, i64 } %t34, { ptr, i64, i64 } %t36) %t38 = load { ptr, i64, i64 }, ptr %t31 %t39 = extractvalue { ptr, i64, i64 } %t38, 1 %t40 = icmp uge i64 %t37, %t39 br i1 %t40, label %range2456, label %inrange2457 range2456: call void @finch_panic_index(ptr @.str.1424, i64 644, i64 %t37, i64 %t39) unreachable inrange2457: %t41 = extractvalue { ptr, i64, i64 } %t38, 0 %t42 = getelementptr inbounds %S.gen.StructDef, ptr %t41, i64 %t37 %t43 = getelementptr inbounds %S.gen.StructDef, ptr %t42, i32 0, i32 16 %t44 = load i1, ptr %t43 ret i1 %t44 endif2453: ret i1 false } define internal { ptr, i64, i64 } @finch.gen.typeKey(%S.ast.Type %p0) { entry: %a1 = alloca %S.ast.Type, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca { ptr, i64, i64 }, align 16 %a104 = alloca { ptr, i64, i64 }, align 16 store %S.ast.Type %p0, ptr %a1 %t2 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t3 = load { ptr, i64, i64 }, ptr %t2 store { ptr, i64, i64 } %t3, ptr %a4 store { ptr, i64, i64 } { ptr @.str.1425, i64 5, i64 0 }, ptr %a5 %t6 = call i32 @finch_str_eq(ptr %a4, ptr %a5) %t7 = icmp ne i32 %t6, 0 br i1 %t7, label %then2458, label %endif2460 then2458: %t8 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 %t9 = load { ptr, i64, i64 }, ptr %t8 %t10 = extractvalue { ptr, i64, i64 } %t9, 1 %t11 = icmp uge i64 0, %t10 br i1 %t11, label %range2461, label %inrange2462 range2461: call void @finch_panic_index(ptr @.str.1427, i64 651, i64 0, i64 %t10) unreachable inrange2462: %t12 = extractvalue { ptr, i64, i64 } %t9, 0 %t13 = getelementptr inbounds %S.ast.Type, ptr %t12, i64 0 %t14 = load %S.ast.Type, ptr %t13 %t15 = call { ptr, i64, i64 } @finch.gen.typeKey(%S.ast.Type %t14) store { ptr, i64, i64 } { ptr @.str.1426, i64 4, i64 0 }, ptr %a17 store { ptr, i64, i64 } %t15, ptr %a18 call void @finch_str_concat(ptr %a16, ptr %a17, ptr %a18) %t19 = load { ptr, i64, i64 }, ptr %a16 ret { ptr, i64, i64 } %t19 endif2460: %t20 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t21 = load { ptr, i64, i64 }, ptr %t20 store { ptr, i64, i64 } %t21, ptr %a22 store { ptr, i64, i64 } { ptr @.str.1428, i64 3, i64 0 }, ptr %a23 %t24 = call i32 @finch_str_eq(ptr %a22, ptr %a23) %t25 = icmp ne i32 %t24, 0 br i1 %t25, label %then2463, label %endif2465 then2463: %t26 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 %t27 = load { ptr, i64, i64 }, ptr %t26 %t28 = extractvalue { ptr, i64, i64 } %t27, 1 %t29 = icmp uge i64 0, %t28 br i1 %t29, label %range2466, label %inrange2467 range2466: call void @finch_panic_index(ptr @.str.1430, i64 654, i64 0, i64 %t28) unreachable inrange2467: %t30 = extractvalue { ptr, i64, i64 } %t27, 0 %t31 = getelementptr inbounds %S.ast.Type, ptr %t30, i64 0 %t32 = load %S.ast.Type, ptr %t31 %t33 = call { ptr, i64, i64 } @finch.gen.typeKey(%S.ast.Type %t32) store { ptr, i64, i64 } { ptr @.str.1429, i64 4, i64 0 }, ptr %a35 store { ptr, i64, i64 } %t33, ptr %a36 call void @finch_str_concat(ptr %a34, ptr %a35, ptr %a36) %t37 = load { ptr, i64, i64 }, ptr %a34 store { ptr, i64, i64 } %t37, ptr %a39 store { ptr, i64, i64 } { ptr @.str.1431, i64 1, i64 0 }, ptr %a40 call void @finch_str_concat(ptr %a38, ptr %a39, ptr %a40) %t41 = load { ptr, i64, i64 }, ptr %a38 %t42 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 %t43 = load { ptr, i64, i64 }, ptr %t42 %t44 = extractvalue { ptr, i64, i64 } %t43, 1 %t45 = icmp uge i64 1, %t44 br i1 %t45, label %range2468, label %inrange2469 range2468: call void @finch_panic_index(ptr @.str.1432, i64 654, i64 1, i64 %t44) unreachable inrange2469: %t46 = extractvalue { ptr, i64, i64 } %t43, 0 %t47 = getelementptr inbounds %S.ast.Type, ptr %t46, i64 1 %t48 = load %S.ast.Type, ptr %t47 %t49 = call { ptr, i64, i64 } @finch.gen.typeKey(%S.ast.Type %t48) store { ptr, i64, i64 } %t41, ptr %a51 store { ptr, i64, i64 } %t49, ptr %a52 call void @finch_str_concat(ptr %a50, ptr %a51, ptr %a52) %t53 = load { ptr, i64, i64 }, ptr %a50 ret { ptr, i64, i64 } %t53 endif2465: %t54 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t55 = load { ptr, i64, i64 }, ptr %t54 store { ptr, i64, i64 } %t55, ptr %a56 store { ptr, i64, i64 } { ptr @.str.1433, i64 4, i64 0 }, ptr %a57 %t58 = call i32 @finch_str_eq(ptr %a56, ptr %a57) %t59 = icmp ne i32 %t58, 0 br i1 %t59, label %then2470, label %endif2472 then2470: %t60 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 3 %t61 = load { ptr, i64, i64 }, ptr %t60 %t62 = call { ptr, i64, i64 } @finch.gen.modName({ ptr, i64, i64 } %t61) store { ptr, i64, i64 } { ptr @.str.1434, i64 2, i64 0 }, ptr %a64 store { ptr, i64, i64 } %t62, ptr %a65 call void @finch_str_concat(ptr %a63, ptr %a64, ptr %a65) %t66 = load { ptr, i64, i64 }, ptr %a63 store { ptr, i64, i64 } %t66, ptr %a68 store { ptr, i64, i64 } { ptr @.str.1435, i64 1, i64 0 }, ptr %a69 call void @finch_str_concat(ptr %a67, ptr %a68, ptr %a69) %t70 = load { ptr, i64, i64 }, ptr %a67 %t71 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 2 %t72 = load { ptr, i64, i64 }, ptr %t71 store { ptr, i64, i64 } %t70, ptr %a74 store { ptr, i64, i64 } %t72, ptr %a75 call void @finch_str_concat(ptr %a73, ptr %a74, ptr %a75) %t76 = load { ptr, i64, i64 }, ptr %a73 ret { ptr, i64, i64 } %t76 endif2472: %t77 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t78 = load { ptr, i64, i64 }, ptr %t77 store { ptr, i64, i64 } %t78, ptr %a79 store { ptr, i64, i64 } { ptr @.str.1436, i64 6, i64 0 }, ptr %a80 %t81 = call i32 @finch_str_eq(ptr %a79, ptr %a80) %t82 = icmp ne i32 %t81, 0 br i1 %t82, label %then2473, label %endif2475 then2473: %t83 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 3 %t84 = load { ptr, i64, i64 }, ptr %t83 %t85 = call { ptr, i64, i64 } @finch.gen.modName({ ptr, i64, i64 } %t84) store { ptr, i64, i64 } { ptr @.str.1437, i64 2, i64 0 }, ptr %a87 store { ptr, i64, i64 } %t85, ptr %a88 call void @finch_str_concat(ptr %a86, ptr %a87, ptr %a88) %t89 = load { ptr, i64, i64 }, ptr %a86 store { ptr, i64, i64 } %t89, ptr %a91 store { ptr, i64, i64 } { ptr @.str.1438, i64 1, i64 0 }, ptr %a92 call void @finch_str_concat(ptr %a90, ptr %a91, ptr %a92) %t93 = load { ptr, i64, i64 }, ptr %a90 %t94 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 2 %t95 = load { ptr, i64, i64 }, ptr %t94 %t96 = call { ptr, i64, i64 } @finch.gen.mangle({ ptr, i64, i64 } %t95) store { ptr, i64, i64 } %t93, ptr %a98 store { ptr, i64, i64 } %t96, ptr %a99 call void @finch_str_concat(ptr %a97, ptr %a98, ptr %a99) %t100 = load { ptr, i64, i64 }, ptr %a97 ret { ptr, i64, i64 } %t100 endif2475: %t101 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t102 = load { ptr, i64, i64 }, ptr %t101 store { ptr, i64, i64 } %t102, ptr %a103 call void @finch_str_copy(ptr %a104, ptr %a103) %t105 = load { ptr, i64, i64 }, ptr %a104 ret { ptr, i64, i64 } %t105 } define internal { ptr, i64, i64 } @finch.gen.hex(i64 %p0) { entry: %a1 = alloca i64, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 store i64 %p0, ptr %a1 store { ptr, i64, i64 } { ptr @.str.1439, i64 16, i64 0 }, ptr %a2 %t3 = load i64, ptr %a1 %t4 = sdiv i64 %t3, 16 %t5 = load { ptr, i64, i64 }, ptr %a2 %t6 = extractvalue { ptr, i64, i64 } %t5, 1 %t7 = icmp uge i64 %t4, %t6 br i1 %t7, label %range2476, label %inrange2477 range2476: call void @finch_panic_index(ptr @.str.1440, i64 669, i64 %t4, i64 %t6) unreachable inrange2477: %t8 = extractvalue { ptr, i64, i64 } %t5, 0 %t9 = getelementptr inbounds i8, ptr %t8, i64 %t4 %t10 = load i8, ptr %t9 call void @finch_str_from_char(ptr %a11, i8 signext %t10) %t12 = load { ptr, i64, i64 }, ptr %a11 %t13 = load i64, ptr %a1 %t14 = srem i64 %t13, 16 %t15 = load { ptr, i64, i64 }, ptr %a2 %t16 = extractvalue { ptr, i64, i64 } %t15, 1 %t17 = icmp uge i64 %t14, %t16 br i1 %t17, label %range2478, label %inrange2479 range2478: call void @finch_panic_index(ptr @.str.1441, i64 669, i64 %t14, i64 %t16) unreachable inrange2479: %t18 = extractvalue { ptr, i64, i64 } %t15, 0 %t19 = getelementptr inbounds i8, ptr %t18, i64 %t14 %t20 = load i8, ptr %t19 call void @finch_str_from_char(ptr %a21, i8 signext %t20) %t22 = load { ptr, i64, i64 }, ptr %a21 store { ptr, i64, i64 } %t12, ptr %a24 store { ptr, i64, i64 } %t22, ptr %a25 call void @finch_str_concat(ptr %a23, ptr %a24, ptr %a25) %t26 = load { ptr, i64, i64 }, ptr %a23 ret { ptr, i64, i64 } %t26 } define internal { ptr, i64, i64 } @finch.gen.strGlobal(ptr %p0, { ptr, i64, i64 } %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca i64, align 16 %a28 = alloca i8, align 16 %a31 = alloca i64, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca { ptr, i64, i64 }, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca { ptr, i64, i64 }, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null br i1 %t4, label %panic2480, label %ok2481 panic2480: call void @finch_panic(ptr @.str.1442, i64 673, ptr @.str.1443) unreachable ok2481: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 8 %t6 = load i64, ptr %t5 %t7 = add i64 %t6, 1 store i64 %t7, ptr %t5 %t8 = load ptr, ptr %a1 %t9 = icmp eq ptr %t8, null br i1 %t9, label %panic2482, label %ok2483 panic2482: call void @finch_panic(ptr @.str.1445, i64 674, ptr @.str.1446) unreachable ok2483: %t10 = getelementptr inbounds %S.gen.Gen, ptr %t8, i32 0, i32 8 %t11 = load i64, ptr %t10 call void @finch_str_from_int(ptr %a12, i64 %t11) %t13 = load { ptr, i64, i64 }, ptr %a12 store { ptr, i64, i64 } { ptr @.str.1444, i64 6, i64 0 }, ptr %a15 store { ptr, i64, i64 } %t13, ptr %a16 call void @finch_str_concat(ptr %a14, ptr %a15, ptr %a16) %t17 = load { ptr, i64, i64 }, ptr %a14 store { ptr, i64, i64 } %t17, ptr %a18 store { ptr, i64, i64 } zeroinitializer, ptr %a19 store i64 0, ptr %a20 br label %each.cond2484 each.cond2484: %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t22 = load i64, ptr %t21 %t23 = load i64, ptr %a20 %t24 = icmp slt i64 %t23, %t22 br i1 %t24, label %each.body2485, label %each.end2487 each.body2485: %t25 = load ptr, ptr %a2 %t26 = getelementptr inbounds i8, ptr %t25, i64 %t23 %t27 = load i8, ptr %t26 store i8 %t27, ptr %a28 %t29 = load i8, ptr %a28 %t30 = zext i8 %t29 to i64 store i64 %t30, ptr %a31 %t32 = load i64, ptr %a31 %t33 = icmp slt i64 %t32, 0 br i1 %t33, label %then2488, label %endif2490 then2488: %t34 = load i64, ptr %a31 %t35 = add i64 %t34, 256 store i64 %t35, ptr %a31 br label %endif2490 endif2490: %t36 = load i64, ptr %a31 %t37 = icmp sge i64 %t36, 32 br label %logic.from2491 logic.from2491: br i1 %t37, label %logic.rhs2492, label %logic.end2493 logic.rhs2492: %t38 = load i64, ptr %a31 %t39 = icmp slt i64 %t38, 127 br label %logic.rend2494 logic.rend2494: br label %logic.end2493 logic.end2493: %t40 = phi i1 [ false, %logic.from2491 ], [ %t39, %logic.rend2494 ] br label %logic.from2495 logic.from2495: br i1 %t40, label %logic.rhs2496, label %logic.end2497 logic.rhs2496: %t41 = load i8, ptr %a28 %t42 = icmp ne i8 %t41, 34 br label %logic.rend2498 logic.rend2498: br label %logic.end2497 logic.end2497: %t43 = phi i1 [ false, %logic.from2495 ], [ %t42, %logic.rend2498 ] br label %logic.from2499 logic.from2499: br i1 %t43, label %logic.rhs2500, label %logic.end2501 logic.rhs2500: %t44 = load i8, ptr %a28 %t45 = icmp ne i8 %t44, 92 br label %logic.rend2502 logic.rend2502: br label %logic.end2501 logic.end2501: %t46 = phi i1 [ false, %logic.from2499 ], [ %t45, %logic.rend2502 ] br i1 %t46, label %then2503, label %else2504 then2503: %t47 = getelementptr inbounds { ptr, i64, i64 }, ptr %a19, i32 0, i32 1 %t48 = load i8, ptr %a28 call void @finch_str_from_char(ptr %a49, i8 signext %t48) %t50 = load { ptr, i64, i64 }, ptr %a49 %t51 = load i64, ptr %t47 %t52 = add i64 %t51, 1 call void @finch_arr_reserve(ptr %a19, i64 %t52, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t53 = load ptr, ptr %a19 %t54 = getelementptr inbounds { ptr, i64, i64 }, ptr %t53, i64 %t51 store { ptr, i64, i64 } %t50, ptr %t54 store i64 %t52, ptr %t47 br label %endif2505 else2504: %t55 = getelementptr inbounds { ptr, i64, i64 }, ptr %a19, i32 0, i32 1 %t56 = load i64, ptr %a31 %t57 = call { ptr, i64, i64 } @finch.gen.hex(i64 %t56) store { ptr, i64, i64 } { ptr @.str.1447, i64 1, i64 0 }, ptr %a59 store { ptr, i64, i64 } %t57, ptr %a60 call void @finch_str_concat(ptr %a58, ptr %a59, ptr %a60) %t61 = load { ptr, i64, i64 }, ptr %a58 %t62 = load i64, ptr %t55 %t63 = add i64 %t62, 1 call void @finch_arr_reserve(ptr %a19, i64 %t63, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t64 = load ptr, ptr %a19 %t65 = getelementptr inbounds { ptr, i64, i64 }, ptr %t64, i64 %t62 store { ptr, i64, i64 } %t61, ptr %t65 store i64 %t63, ptr %t55 br label %endif2505 endif2505: br label %each.step2486 each.step2486: %t66 = load i64, ptr %a20 %t67 = add i64 %t66, 1 store i64 %t67, ptr %a20 br label %each.cond2484 each.end2487: %t68 = load ptr, ptr %a1 %t69 = icmp eq ptr %t68, null br i1 %t69, label %panic2506, label %ok2507 panic2506: call void @finch_panic(ptr @.str.1448, i64 687, ptr @.str.1449) unreachable ok2507: %t70 = getelementptr inbounds %S.gen.Gen, ptr %t68, i32 0, i32 2 %t71 = getelementptr inbounds { ptr, i64, i64 }, ptr %t70, i32 0, i32 1 %t72 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t72, ptr %a74 store { ptr, i64, i64 } { ptr @.str.1450, i64 34, i64 0 }, ptr %a75 call void @finch_str_concat(ptr %a73, ptr %a74, ptr %a75) %t76 = load { ptr, i64, i64 }, ptr %a73 %t77 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t78 = load i64, ptr %t77 %t79 = add i64 %t78, 1 call void @finch_str_from_int(ptr %a80, i64 %t79) %t81 = load { ptr, i64, i64 }, ptr %a80 store { ptr, i64, i64 } %t76, ptr %a83 store { ptr, i64, i64 } %t81, ptr %a84 call void @finch_str_concat(ptr %a82, ptr %a83, ptr %a84) %t85 = load { ptr, i64, i64 }, ptr %a82 store { ptr, i64, i64 } %t85, ptr %a87 store { ptr, i64, i64 } { ptr @.str.1451, i64 9, i64 0 }, ptr %a88 call void @finch_str_concat(ptr %a86, ptr %a87, ptr %a88) %t89 = load { ptr, i64, i64 }, ptr %a86 %t90 = getelementptr inbounds { ptr, i64, i64 }, ptr %a19, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.1452, i64 0, i64 0 }, ptr %a91 call void @finch_str_join(ptr %a92, ptr %a19, ptr %a91) %t93 = load { ptr, i64, i64 }, ptr %a92 store { ptr, i64, i64 } %t89, ptr %a95 store { ptr, i64, i64 } %t93, ptr %a96 call void @finch_str_concat(ptr %a94, ptr %a95, ptr %a96) %t97 = load { ptr, i64, i64 }, ptr %a94 store { ptr, i64, i64 } %t97, ptr %a99 store { ptr, i64, i64 } { ptr @.str.1453, i64 4, i64 0 }, ptr %a100 call void @finch_str_concat(ptr %a98, ptr %a99, ptr %a100) %t101 = load { ptr, i64, i64 }, ptr %a98 %t102 = load i64, ptr %t71 %t103 = add i64 %t102, 1 call void @finch_arr_reserve(ptr %t70, i64 %t103, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t104 = load ptr, ptr %t70 %t105 = getelementptr inbounds { ptr, i64, i64 }, ptr %t104, i64 %t102 store { ptr, i64, i64 } %t101, ptr %t105 store i64 %t103, ptr %t71 %t106 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t106, ptr %a107 call void @finch_str_copy(ptr %a108, ptr %a107) %t109 = load { ptr, i64, i64 }, ptr %a108 ret { ptr, i64, i64 } %t109 } define internal %S.gen.Val @finch.gen.strConst(ptr %p0, { ptr, i64, i64 } %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = load { ptr, i64, i64 }, ptr %a2 %t5 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t3, { ptr, i64, i64 } %t4) store { ptr, i64, i64 } %t5, ptr %a6 %t7 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } { ptr @.str.1454, i64 6, i64 0 }, ptr %a9 store { ptr, i64, i64 } %t7, ptr %a10 call void @finch_str_concat(ptr %a8, ptr %a9, ptr %a10) %t11 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t11, ptr %a13 store { ptr, i64, i64 } { ptr @.str.1455, i64 6, i64 0 }, ptr %a14 call void @finch_str_concat(ptr %a12, ptr %a13, ptr %a14) %t15 = load { ptr, i64, i64 }, ptr %a12 %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t17 = load i64, ptr %t16 call void @finch_str_from_int(ptr %a18, i64 %t17) %t19 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t15, ptr %a21 store { ptr, i64, i64 } %t19, ptr %a22 call void @finch_str_concat(ptr %a20, ptr %a21, ptr %a22) %t23 = load { ptr, i64, i64 }, ptr %a20 store { ptr, i64, i64 } %t23, ptr %a25 store { ptr, i64, i64 } { ptr @.str.1456, i64 9, i64 0 }, ptr %a26 call void @finch_str_concat(ptr %a24, ptr %a25, ptr %a26) %t27 = load { ptr, i64, i64 }, ptr %a24 %t28 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t27, 0 %t29 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.1457, i64 3, i64 0 }) %t30 = insertvalue %S.gen.Val %t28, %S.ast.Type %t29, 1 %t31 = insertvalue %S.gen.Val %t30, i1 true, 2 ret %S.gen.Val %t31 } define internal void @finch.gen.panicIf(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, %S.ast.Node %p3) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca %S.ast.Node, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 store %S.ast.Node %p3, ptr %a4 %t5 = load ptr, ptr %a1 %t6 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t5, { ptr, i64, i64 } { ptr @.str.1458, i64 5, i64 0 }) store { ptr, i64, i64 } %t6, ptr %a7 %t8 = load ptr, ptr %a1 %t9 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t8, { ptr, i64, i64 } { ptr @.str.1459, i64 2, i64 0 }) store { ptr, i64, i64 } %t9, ptr %a10 %t11 = load ptr, ptr %a1 %t12 = load { ptr, i64, i64 }, ptr %a2 %t13 = load { ptr, i64, i64 }, ptr %a7 %t14 = load { ptr, i64, i64 }, ptr %a10 call void @finch.gen.condBr(ptr %t11, { ptr, i64, i64 } %t12, { ptr, i64, i64 } %t13, { ptr, i64, i64 } %t14) %t15 = load ptr, ptr %a1 %t16 = load { ptr, i64, i64 }, ptr %a7 call void @finch.gen.label(ptr %t15, { ptr, i64, i64 } %t16) %t17 = load ptr, ptr %a1 %t18 = load ptr, ptr %a1 %t19 = icmp eq ptr %t18, null br i1 %t19, label %panic2508, label %ok2509 panic2508: call void @finch_panic(ptr @.str.1460, i64 703, ptr @.str.1461) unreachable ok2509: %t20 = getelementptr inbounds %S.gen.Gen, ptr %t18, i32 0, i32 1 %t21 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 13 %t22 = load i64, ptr %t21 %t23 = load { ptr, i64, i64 }, ptr %t20 %t24 = extractvalue { ptr, i64, i64 } %t23, 1 %t25 = icmp uge i64 %t22, %t24 br i1 %t25, label %range2510, label %inrange2511 range2510: call void @finch_panic_index(ptr @.str.1462, i64 703, i64 %t22, i64 %t24) unreachable inrange2511: %t26 = extractvalue { ptr, i64, i64 } %t23, 0 %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %t26, i64 %t22 %t28 = load { ptr, i64, i64 }, ptr %t27 %t29 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t17, { ptr, i64, i64 } %t28) store { ptr, i64, i64 } %t29, ptr %a30 %t31 = load ptr, ptr %a1 %t32 = load { ptr, i64, i64 }, ptr %a3 %t33 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t31, { ptr, i64, i64 } %t32) store { ptr, i64, i64 } %t33, ptr %a34 %t35 = load ptr, ptr %a1 %t36 = load { ptr, i64, i64 }, ptr %a30 store { ptr, i64, i64 } { ptr @.str.1463, i64 27, i64 0 }, ptr %a38 store { ptr, i64, i64 } %t36, ptr %a39 call void @finch_str_concat(ptr %a37, ptr %a38, ptr %a39) %t40 = load { ptr, i64, i64 }, ptr %a37 store { ptr, i64, i64 } %t40, ptr %a42 store { ptr, i64, i64 } { ptr @.str.1464, i64 6, i64 0 }, ptr %a43 call void @finch_str_concat(ptr %a41, ptr %a42, ptr %a43) %t44 = load { ptr, i64, i64 }, ptr %a41 %t45 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 11 %t46 = load i64, ptr %t45 call void @finch_str_from_int(ptr %a47, i64 %t46) %t48 = load { ptr, i64, i64 }, ptr %a47 store { ptr, i64, i64 } %t44, ptr %a50 store { ptr, i64, i64 } %t48, ptr %a51 call void @finch_str_concat(ptr %a49, ptr %a50, ptr %a51) %t52 = load { ptr, i64, i64 }, ptr %a49 store { ptr, i64, i64 } %t52, ptr %a54 store { ptr, i64, i64 } { ptr @.str.1465, i64 6, i64 0 }, ptr %a55 call void @finch_str_concat(ptr %a53, ptr %a54, ptr %a55) %t56 = load { ptr, i64, i64 }, ptr %a53 %t57 = load { ptr, i64, i64 }, ptr %a34 store { ptr, i64, i64 } %t56, ptr %a59 store { ptr, i64, i64 } %t57, ptr %a60 call void @finch_str_concat(ptr %a58, ptr %a59, ptr %a60) %t61 = load { ptr, i64, i64 }, ptr %a58 store { ptr, i64, i64 } %t61, ptr %a63 store { ptr, i64, i64 } { ptr @.str.1466, i64 1, i64 0 }, ptr %a64 call void @finch_str_concat(ptr %a62, ptr %a63, ptr %a64) %t65 = load { ptr, i64, i64 }, ptr %a62 call void @finch.gen.emit(ptr %t35, { ptr, i64, i64 } %t65) %t66 = load ptr, ptr %a1 call void @finch.gen.emit(ptr %t66, { ptr, i64, i64 } { ptr @.str.1467, i64 11, i64 0 }) %t67 = load ptr, ptr %a1 %t68 = icmp eq ptr %t67, null br i1 %t68, label %panic2512, label %ok2513 panic2512: call void @finch_panic(ptr @.str.1468, i64 707, ptr @.str.1469) unreachable ok2513: %t69 = getelementptr inbounds %S.gen.Gen, ptr %t67, i32 0, i32 9 store i1 true, ptr %t69 %t70 = load ptr, ptr %a1 %t71 = load { ptr, i64, i64 }, ptr %a10 call void @finch.gen.label(ptr %t70, { ptr, i64, i64 } %t71) ret void } define internal void @finch.gen.boundsCheck(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, %S.ast.Node %p3) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca %S.ast.Node, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a85 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 store %S.ast.Node %p3, ptr %a4 %t5 = load ptr, ptr %a1 %t6 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t5, { ptr, i64, i64 } { ptr @.str.1470, i64 5, i64 0 }) store { ptr, i64, i64 } %t6, ptr %a7 %t8 = load ptr, ptr %a1 %t9 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t8, { ptr, i64, i64 } { ptr @.str.1471, i64 7, i64 0 }) store { ptr, i64, i64 } %t9, ptr %a10 %t11 = load ptr, ptr %a1 %t12 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.1472, i64 13, i64 0 }, ptr %a14 store { ptr, i64, i64 } %t12, ptr %a15 call void @finch_str_concat(ptr %a13, ptr %a14, ptr %a15) %t16 = load { ptr, i64, i64 }, ptr %a13 store { ptr, i64, i64 } %t16, ptr %a18 store { ptr, i64, i64 } { ptr @.str.1473, i64 2, i64 0 }, ptr %a19 call void @finch_str_concat(ptr %a17, ptr %a18, ptr %a19) %t20 = load { ptr, i64, i64 }, ptr %a17 %t21 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t20, ptr %a23 store { ptr, i64, i64 } %t21, ptr %a24 call void @finch_str_concat(ptr %a22, ptr %a23, ptr %a24) %t25 = load { ptr, i64, i64 }, ptr %a22 %t26 = call { ptr, i64, i64 } @finch.gen.op(ptr %t11, { ptr, i64, i64 } %t25) store { ptr, i64, i64 } %t26, ptr %a27 %t28 = load ptr, ptr %a1 %t29 = load { ptr, i64, i64 }, ptr %a27 %t30 = load { ptr, i64, i64 }, ptr %a7 %t31 = load { ptr, i64, i64 }, ptr %a10 call void @finch.gen.condBr(ptr %t28, { ptr, i64, i64 } %t29, { ptr, i64, i64 } %t30, { ptr, i64, i64 } %t31) %t32 = load ptr, ptr %a1 %t33 = load { ptr, i64, i64 }, ptr %a7 call void @finch.gen.label(ptr %t32, { ptr, i64, i64 } %t33) %t34 = load ptr, ptr %a1 %t35 = load ptr, ptr %a1 %t36 = icmp eq ptr %t35, null br i1 %t36, label %panic2514, label %ok2515 panic2514: call void @finch_panic(ptr @.str.1474, i64 717, ptr @.str.1475) unreachable ok2515: %t37 = getelementptr inbounds %S.gen.Gen, ptr %t35, i32 0, i32 1 %t38 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 13 %t39 = load i64, ptr %t38 %t40 = load { ptr, i64, i64 }, ptr %t37 %t41 = extractvalue { ptr, i64, i64 } %t40, 1 %t42 = icmp uge i64 %t39, %t41 br i1 %t42, label %range2516, label %inrange2517 range2516: call void @finch_panic_index(ptr @.str.1476, i64 717, i64 %t39, i64 %t41) unreachable inrange2517: %t43 = extractvalue { ptr, i64, i64 } %t40, 0 %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t43, i64 %t39 %t45 = load { ptr, i64, i64 }, ptr %t44 %t46 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t34, { ptr, i64, i64 } %t45) store { ptr, i64, i64 } %t46, ptr %a47 %t48 = load ptr, ptr %a1 %t49 = load { ptr, i64, i64 }, ptr %a47 store { ptr, i64, i64 } { ptr @.str.1477, i64 33, i64 0 }, ptr %a51 store { ptr, i64, i64 } %t49, ptr %a52 call void @finch_str_concat(ptr %a50, ptr %a51, ptr %a52) %t53 = load { ptr, i64, i64 }, ptr %a50 store { ptr, i64, i64 } %t53, ptr %a55 store { ptr, i64, i64 } { ptr @.str.1478, i64 6, i64 0 }, ptr %a56 call void @finch_str_concat(ptr %a54, ptr %a55, ptr %a56) %t57 = load { ptr, i64, i64 }, ptr %a54 %t58 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 11 %t59 = load i64, ptr %t58 call void @finch_str_from_int(ptr %a60, i64 %t59) %t61 = load { ptr, i64, i64 }, ptr %a60 store { ptr, i64, i64 } %t57, ptr %a63 store { ptr, i64, i64 } %t61, ptr %a64 call void @finch_str_concat(ptr %a62, ptr %a63, ptr %a64) %t65 = load { ptr, i64, i64 }, ptr %a62 store { ptr, i64, i64 } %t65, ptr %a67 store { ptr, i64, i64 } { ptr @.str.1479, i64 6, i64 0 }, ptr %a68 call void @finch_str_concat(ptr %a66, ptr %a67, ptr %a68) %t69 = load { ptr, i64, i64 }, ptr %a66 %t70 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t69, ptr %a72 store { ptr, i64, i64 } %t70, ptr %a73 call void @finch_str_concat(ptr %a71, ptr %a72, ptr %a73) %t74 = load { ptr, i64, i64 }, ptr %a71 store { ptr, i64, i64 } %t74, ptr %a76 store { ptr, i64, i64 } { ptr @.str.1480, i64 6, i64 0 }, ptr %a77 call void @finch_str_concat(ptr %a75, ptr %a76, ptr %a77) %t78 = load { ptr, i64, i64 }, ptr %a75 %t79 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t78, ptr %a81 store { ptr, i64, i64 } %t79, ptr %a82 call void @finch_str_concat(ptr %a80, ptr %a81, ptr %a82) %t83 = load { ptr, i64, i64 }, ptr %a80 store { ptr, i64, i64 } %t83, ptr %a85 store { ptr, i64, i64 } { ptr @.str.1481, i64 1, i64 0 }, ptr %a86 call void @finch_str_concat(ptr %a84, ptr %a85, ptr %a86) %t87 = load { ptr, i64, i64 }, ptr %a84 call void @finch.gen.emit(ptr %t48, { ptr, i64, i64 } %t87) %t88 = load ptr, ptr %a1 call void @finch.gen.emit(ptr %t88, { ptr, i64, i64 } { ptr @.str.1482, i64 11, i64 0 }) %t89 = load ptr, ptr %a1 %t90 = icmp eq ptr %t89, null br i1 %t90, label %panic2518, label %ok2519 panic2518: call void @finch_panic(ptr @.str.1483, i64 720, ptr @.str.1484) unreachable ok2519: %t91 = getelementptr inbounds %S.gen.Gen, ptr %t89, i32 0, i32 9 store i1 true, ptr %t91 %t92 = load ptr, ptr %a1 %t93 = load { ptr, i64, i64 }, ptr %a10 call void @finch.gen.label(ptr %t92, { ptr, i64, i64 } %t93) ret void } define internal void @finch.copy.S_gen_Saved(ptr %dst, ptr %src) { entry: %t1 = load %S.gen.Saved, ptr %src store %S.gen.Saved %t1, ptr %dst %t2 = getelementptr inbounds %S.gen.Saved, ptr %dst, i32 0, i32 0 %t3 = getelementptr inbounds %S.gen.Saved, ptr %src, i32 0, i32 0 call void @finch.copy.arr_str(ptr %t2, ptr %t3) %t4 = getelementptr inbounds %S.gen.Saved, ptr %dst, i32 0, i32 1 %t5 = getelementptr inbounds %S.gen.Saved, ptr %src, i32 0, i32 1 call void @finch.copy.arr_str(ptr %t4, ptr %t5) ret void } define internal %S.gen.Saved @finch.gen.beginHelper(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca %S.gen.Saved, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca %S.gen.Saved, align 16 %a60 = alloca %S.gen.Saved, align 16 store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = icmp eq ptr %t2, null br i1 %t3, label %panic2520, label %ok2521 panic2520: call void @finch_panic(ptr @.str.1485, i64 735, ptr @.str.1486) unreachable ok2521: %t4 = getelementptr inbounds %S.gen.Gen, ptr %t2, i32 0, i32 4 %t5 = load { ptr, i64, i64 }, ptr %t4 store { ptr, i64, i64 } %t5, ptr %a6 call void @finch.copy.arr_str(ptr %a7, ptr %a6) %t8 = load { ptr, i64, i64 }, ptr %a7 %t9 = insertvalue %S.gen.Saved zeroinitializer, { ptr, i64, i64 } %t8, 0 %t10 = load ptr, ptr %a1 %t11 = icmp eq ptr %t10, null br i1 %t11, label %panic2522, label %ok2523 panic2522: call void @finch_panic(ptr @.str.1487, i64 735, ptr @.str.1488) unreachable ok2523: %t12 = getelementptr inbounds %S.gen.Gen, ptr %t10, i32 0, i32 5 %t13 = load { ptr, i64, i64 }, ptr %t12 store { ptr, i64, i64 } %t13, ptr %a14 call void @finch.copy.arr_str(ptr %a15, ptr %a14) %t16 = load { ptr, i64, i64 }, ptr %a15 %t17 = insertvalue %S.gen.Saved %t9, { ptr, i64, i64 } %t16, 1 %t18 = load ptr, ptr %a1 %t19 = icmp eq ptr %t18, null br i1 %t19, label %panic2524, label %ok2525 panic2524: call void @finch_panic(ptr @.str.1489, i64 735, ptr @.str.1490) unreachable ok2525: %t20 = getelementptr inbounds %S.gen.Gen, ptr %t18, i32 0, i32 6 %t21 = load i64, ptr %t20 %t22 = insertvalue %S.gen.Saved %t17, i64 %t21, 2 %t23 = load ptr, ptr %a1 %t24 = icmp eq ptr %t23, null br i1 %t24, label %panic2526, label %ok2527 panic2526: call void @finch_panic(ptr @.str.1491, i64 735, ptr @.str.1492) unreachable ok2527: %t25 = getelementptr inbounds %S.gen.Gen, ptr %t23, i32 0, i32 9 %t26 = load i1, ptr %t25 %t27 = insertvalue %S.gen.Saved %t22, i1 %t26, 3 %t28 = load ptr, ptr %a1 %t29 = icmp eq ptr %t28, null br i1 %t29, label %panic2528, label %ok2529 panic2528: call void @finch_panic(ptr @.str.1493, i64 735, ptr @.str.1494) unreachable ok2529: %t30 = getelementptr inbounds %S.gen.Gen, ptr %t28, i32 0, i32 34 %t31 = load i64, ptr %t30 %t32 = insertvalue %S.gen.Saved %t27, i64 %t31, 4 store %S.gen.Saved %t32, ptr %a33 %t34 = load ptr, ptr %a1 %t35 = icmp eq ptr %t34, null br i1 %t35, label %panic2530, label %ok2531 panic2530: call void @finch_panic(ptr @.str.1495, i64 736, ptr @.str.1496) unreachable ok2531: %t36 = getelementptr inbounds %S.gen.Gen, ptr %t34, i32 0, i32 34 store i64 -1, ptr %t36 store { ptr, i64, i64 } zeroinitializer, ptr %a37 %t38 = load { ptr, i64, i64 }, ptr %a37 %t39 = load ptr, ptr %a1 %t40 = icmp eq ptr %t39, null br i1 %t40, label %panic2532, label %ok2533 panic2532: call void @finch_panic(ptr @.str.1497, i64 738, ptr @.str.1498) unreachable ok2533: %t41 = getelementptr inbounds %S.gen.Gen, ptr %t39, i32 0, i32 4 store { ptr, i64, i64 } %t38, ptr %a42 call void @finch.copy.arr_str(ptr %a43, ptr %a42) %t44 = load { ptr, i64, i64 }, ptr %a43 store { ptr, i64, i64 } %t44, ptr %t41 %t45 = load { ptr, i64, i64 }, ptr %a37 %t46 = load ptr, ptr %a1 %t47 = icmp eq ptr %t46, null br i1 %t47, label %panic2534, label %ok2535 panic2534: call void @finch_panic(ptr @.str.1499, i64 739, ptr @.str.1500) unreachable ok2535: %t48 = getelementptr inbounds %S.gen.Gen, ptr %t46, i32 0, i32 5 store { ptr, i64, i64 } %t45, ptr %a49 call void @finch.copy.arr_str(ptr %a50, ptr %a49) %t51 = load { ptr, i64, i64 }, ptr %a50 store { ptr, i64, i64 } %t51, ptr %t48 %t52 = load ptr, ptr %a1 %t53 = icmp eq ptr %t52, null br i1 %t53, label %panic2536, label %ok2537 panic2536: call void @finch_panic(ptr @.str.1501, i64 740, ptr @.str.1502) unreachable ok2537: %t54 = getelementptr inbounds %S.gen.Gen, ptr %t52, i32 0, i32 6 store i64 0, ptr %t54 %t55 = load ptr, ptr %a1 %t56 = icmp eq ptr %t55, null br i1 %t56, label %panic2538, label %ok2539 panic2538: call void @finch_panic(ptr @.str.1503, i64 741, ptr @.str.1504) unreachable ok2539: %t57 = getelementptr inbounds %S.gen.Gen, ptr %t55, i32 0, i32 9 store i1 false, ptr %t57 %t58 = load %S.gen.Saved, ptr %a33 store %S.gen.Saved %t58, ptr %a59 call void @finch.copy.S_gen_Saved(ptr %a60, ptr %a59) %t61 = load %S.gen.Saved, ptr %a60 ret %S.gen.Saved %t61 } define internal void @finch.gen.endHelper(ptr %p0, %S.gen.Saved %p1, { ptr, i64, i64 } %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.gen.Saved, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.gen.Saved %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = icmp eq ptr %t4, null br i1 %t5, label %panic2540, label %ok2541 panic2540: call void @finch_panic(ptr @.str.1505, i64 746, ptr @.str.1506) unreachable ok2541: %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 3 %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t6, i32 0, i32 1 %t8 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t8, ptr %a10 store { ptr, i64, i64 } { ptr @.str.1507, i64 10, i64 0 }, ptr %a11 call void @finch_str_concat(ptr %a9, ptr %a10, ptr %a11) %t12 = load { ptr, i64, i64 }, ptr %a9 %t13 = load ptr, ptr %a1 %t14 = icmp eq ptr %t13, null br i1 %t14, label %panic2542, label %ok2543 panic2542: call void @finch_panic(ptr @.str.1508, i64 746, ptr @.str.1509) unreachable ok2543: %t15 = getelementptr inbounds %S.gen.Gen, ptr %t13, i32 0, i32 5 %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t15, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.1510, i64 1, i64 0 }, ptr %a17 call void @finch_str_join(ptr %a18, ptr %t15, ptr %a17) %t19 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t12, ptr %a21 store { ptr, i64, i64 } %t19, ptr %a22 call void @finch_str_concat(ptr %a20, ptr %a21, ptr %a22) %t23 = load { ptr, i64, i64 }, ptr %a20 store { ptr, i64, i64 } %t23, ptr %a25 store { ptr, i64, i64 } { ptr @.str.1511, i64 1, i64 0 }, ptr %a26 call void @finch_str_concat(ptr %a24, ptr %a25, ptr %a26) %t27 = load { ptr, i64, i64 }, ptr %a24 %t28 = load ptr, ptr %a1 %t29 = icmp eq ptr %t28, null br i1 %t29, label %panic2544, label %ok2545 panic2544: call void @finch_panic(ptr @.str.1512, i64 746, ptr @.str.1513) unreachable ok2545: %t30 = getelementptr inbounds %S.gen.Gen, ptr %t28, i32 0, i32 4 %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t30, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.1514, i64 1, i64 0 }, ptr %a32 call void @finch_str_join(ptr %a33, ptr %t30, ptr %a32) %t34 = load { ptr, i64, i64 }, ptr %a33 store { ptr, i64, i64 } %t27, ptr %a36 store { ptr, i64, i64 } %t34, ptr %a37 call void @finch_str_concat(ptr %a35, ptr %a36, ptr %a37) %t38 = load { ptr, i64, i64 }, ptr %a35 store { ptr, i64, i64 } %t38, ptr %a40 store { ptr, i64, i64 } { ptr @.str.1515, i64 3, i64 0 }, ptr %a41 call void @finch_str_concat(ptr %a39, ptr %a40, ptr %a41) %t42 = load { ptr, i64, i64 }, ptr %a39 %t43 = load i64, ptr %t7 %t44 = add i64 %t43, 1 call void @finch_arr_reserve(ptr %t6, i64 %t44, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t45 = load ptr, ptr %t6 %t46 = getelementptr inbounds { ptr, i64, i64 }, ptr %t45, i64 %t43 store { ptr, i64, i64 } %t42, ptr %t46 store i64 %t44, ptr %t7 %t47 = getelementptr inbounds %S.gen.Saved, ptr %a2, i32 0, i32 0 %t48 = load { ptr, i64, i64 }, ptr %t47 %t49 = load ptr, ptr %a1 %t50 = icmp eq ptr %t49, null br i1 %t50, label %panic2546, label %ok2547 panic2546: call void @finch_panic(ptr @.str.1516, i64 747, ptr @.str.1517) unreachable ok2547: %t51 = getelementptr inbounds %S.gen.Gen, ptr %t49, i32 0, i32 4 store { ptr, i64, i64 } %t48, ptr %a52 call void @finch.copy.arr_str(ptr %a53, ptr %a52) %t54 = load { ptr, i64, i64 }, ptr %a53 store { ptr, i64, i64 } %t54, ptr %t51 %t55 = getelementptr inbounds %S.gen.Saved, ptr %a2, i32 0, i32 1 %t56 = load { ptr, i64, i64 }, ptr %t55 %t57 = load ptr, ptr %a1 %t58 = icmp eq ptr %t57, null br i1 %t58, label %panic2548, label %ok2549 panic2548: call void @finch_panic(ptr @.str.1518, i64 748, ptr @.str.1519) unreachable ok2549: %t59 = getelementptr inbounds %S.gen.Gen, ptr %t57, i32 0, i32 5 store { ptr, i64, i64 } %t56, ptr %a60 call void @finch.copy.arr_str(ptr %a61, ptr %a60) %t62 = load { ptr, i64, i64 }, ptr %a61 store { ptr, i64, i64 } %t62, ptr %t59 %t63 = getelementptr inbounds %S.gen.Saved, ptr %a2, i32 0, i32 2 %t64 = load i64, ptr %t63 %t65 = load ptr, ptr %a1 %t66 = icmp eq ptr %t65, null br i1 %t66, label %panic2550, label %ok2551 panic2550: call void @finch_panic(ptr @.str.1520, i64 749, ptr @.str.1521) unreachable ok2551: %t67 = getelementptr inbounds %S.gen.Gen, ptr %t65, i32 0, i32 6 store i64 %t64, ptr %t67 %t68 = getelementptr inbounds %S.gen.Saved, ptr %a2, i32 0, i32 3 %t69 = load i1, ptr %t68 %t70 = load ptr, ptr %a1 %t71 = icmp eq ptr %t70, null br i1 %t71, label %panic2552, label %ok2553 panic2552: call void @finch_panic(ptr @.str.1522, i64 750, ptr @.str.1523) unreachable ok2553: %t72 = getelementptr inbounds %S.gen.Gen, ptr %t70, i32 0, i32 9 store i1 %t69, ptr %t72 %t73 = getelementptr inbounds %S.gen.Saved, ptr %a2, i32 0, i32 4 %t74 = load i64, ptr %t73 %t75 = load ptr, ptr %a1 %t76 = icmp eq ptr %t75, null br i1 %t76, label %panic2554, label %ok2555 panic2554: call void @finch_panic(ptr @.str.1524, i64 751, ptr @.str.1525) unreachable ok2555: %t77 = getelementptr inbounds %S.gen.Gen, ptr %t75, i32 0, i32 34 store i64 %t74, ptr %t77 ret void } define internal { ptr, i64, i64 } @finch.gen.loopStart(ptr %p0, { ptr, i64, i64 } %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t3, { ptr, i64, i64 } { ptr @.str.1526, i64 3, i64 0 }) store { ptr, i64, i64 } %t4, ptr %a5 %t6 = load ptr, ptr %a1 %t7 = load { ptr, i64, i64 }, ptr %a5 call void @finch.gen.store(ptr %t6, { ptr, i64, i64 } { ptr @.str.1527, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.1528, i64 1, i64 0 }, { ptr, i64, i64 } %t7) %t8 = load ptr, ptr %a1 %t9 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t8, { ptr, i64, i64 } { ptr @.str.1529, i64 6, i64 0 }) store { ptr, i64, i64 } %t9, ptr %a10 %t11 = load ptr, ptr %a1 %t12 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t11, { ptr, i64, i64 } { ptr @.str.1530, i64 6, i64 0 }) store { ptr, i64, i64 } %t12, ptr %a13 %t14 = load ptr, ptr %a1 %t15 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t14, { ptr, i64, i64 } { ptr @.str.1531, i64 5, i64 0 }) store { ptr, i64, i64 } %t15, ptr %a16 %t17 = load ptr, ptr %a1 %t18 = load { ptr, i64, i64 }, ptr %a10 call void @finch.gen.br(ptr %t17, { ptr, i64, i64 } %t18) %t19 = load ptr, ptr %a1 %t20 = load { ptr, i64, i64 }, ptr %a10 call void @finch.gen.label(ptr %t19, { ptr, i64, i64 } %t20) %t21 = load ptr, ptr %a1 %t22 = load { ptr, i64, i64 }, ptr %a5 %t23 = call { ptr, i64, i64 } @finch.gen.load(ptr %t21, { ptr, i64, i64 } { ptr @.str.1532, i64 3, i64 0 }, { ptr, i64, i64 } %t22) store { ptr, i64, i64 } %t23, ptr %a24 %t25 = load ptr, ptr %a1 %t26 = load { ptr, i64, i64 }, ptr %a24 store { ptr, i64, i64 } { ptr @.str.1533, i64 13, i64 0 }, ptr %a28 store { ptr, i64, i64 } %t26, ptr %a29 call void @finch_str_concat(ptr %a27, ptr %a28, ptr %a29) %t30 = load { ptr, i64, i64 }, ptr %a27 store { ptr, i64, i64 } %t30, ptr %a32 store { ptr, i64, i64 } { ptr @.str.1534, i64 2, i64 0 }, ptr %a33 call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33) %t34 = load { ptr, i64, i64 }, ptr %a31 %t35 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t34, ptr %a37 store { ptr, i64, i64 } %t35, ptr %a38 call void @finch_str_concat(ptr %a36, ptr %a37, ptr %a38) %t39 = load { ptr, i64, i64 }, ptr %a36 %t40 = call { ptr, i64, i64 } @finch.gen.op(ptr %t25, { ptr, i64, i64 } %t39) store { ptr, i64, i64 } %t40, ptr %a41 %t42 = load ptr, ptr %a1 %t43 = load { ptr, i64, i64 }, ptr %a41 %t44 = load { ptr, i64, i64 }, ptr %a13 %t45 = load { ptr, i64, i64 }, ptr %a16 call void @finch.gen.condBr(ptr %t42, { ptr, i64, i64 } %t43, { ptr, i64, i64 } %t44, { ptr, i64, i64 } %t45) %t46 = load ptr, ptr %a1 %t47 = load { ptr, i64, i64 }, ptr %a13 call void @finch.gen.label(ptr %t46, { ptr, i64, i64 } %t47) %t48 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } %t48, ptr %a49 call void @finch_str_copy(ptr %a50, ptr %a49) %t51 = load { ptr, i64, i64 }, ptr %a50 %t52 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t52, ptr %a53 call void @finch_str_copy(ptr %a54, ptr %a53) %t55 = load { ptr, i64, i64 }, ptr %a54 %t56 = load { ptr, i64, i64 }, ptr %a16 store { ptr, i64, i64 } %t56, ptr %a57 call void @finch_str_copy(ptr %a58, ptr %a57) %t59 = load { ptr, i64, i64 }, ptr %a58 %t60 = load { ptr, i64, i64 }, ptr %a24 store { ptr, i64, i64 } %t60, ptr %a61 call void @finch_str_copy(ptr %a62, ptr %a61) %t63 = load { ptr, i64, i64 }, ptr %a62 %t64 = mul i64 4, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t65 = call ptr @finch_alloc(i64 %t64) %t66 = getelementptr inbounds { ptr, i64, i64 }, ptr %t65, i64 0 store { ptr, i64, i64 } %t51, ptr %t66 %t67 = getelementptr inbounds { ptr, i64, i64 }, ptr %t65, i64 1 store { ptr, i64, i64 } %t55, ptr %t67 %t68 = getelementptr inbounds { ptr, i64, i64 }, ptr %t65, i64 2 store { ptr, i64, i64 } %t59, ptr %t68 %t69 = getelementptr inbounds { ptr, i64, i64 }, ptr %t65, i64 3 store { ptr, i64, i64 } %t63, ptr %t69 %t70 = insertvalue { ptr, i64, i64 } undef, ptr %t65, 0 %t71 = insertvalue { ptr, i64, i64 } %t70, i64 4, 1 %t72 = insertvalue { ptr, i64, i64 } %t71, i64 4, 2 ret { ptr, i64, i64 } %t72 } define internal void @finch.gen.loopEnd(ptr %p0, { ptr, i64, i64 } %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = load { ptr, i64, i64 }, ptr %a2 %t5 = extractvalue { ptr, i64, i64 } %t4, 1 %t6 = icmp uge i64 0, %t5 br i1 %t6, label %range2556, label %inrange2557 range2556: call void @finch_panic_index(ptr @.str.1536, i64 771, i64 0, i64 %t5) unreachable inrange2557: %t7 = extractvalue { ptr, i64, i64 } %t4, 0 %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t7, i64 0 %t9 = load { ptr, i64, i64 }, ptr %t8 %t10 = call { ptr, i64, i64 } @finch.gen.load(ptr %t3, { ptr, i64, i64 } { ptr @.str.1535, i64 3, i64 0 }, { ptr, i64, i64 } %t9) store { ptr, i64, i64 } %t10, ptr %a11 %t12 = load ptr, ptr %a1 %t13 = load ptr, ptr %a1 %t14 = load { ptr, i64, i64 }, ptr %a11 store { ptr, i64, i64 } { ptr @.str.1538, i64 8, i64 0 }, ptr %a16 store { ptr, i64, i64 } %t14, ptr %a17 call void @finch_str_concat(ptr %a15, ptr %a16, ptr %a17) %t18 = load { ptr, i64, i64 }, ptr %a15 store { ptr, i64, i64 } %t18, ptr %a20 store { ptr, i64, i64 } { ptr @.str.1539, i64 3, i64 0 }, ptr %a21 call void @finch_str_concat(ptr %a19, ptr %a20, ptr %a21) %t22 = load { ptr, i64, i64 }, ptr %a19 %t23 = call { ptr, i64, i64 } @finch.gen.op(ptr %t13, { ptr, i64, i64 } %t22) %t24 = load { ptr, i64, i64 }, ptr %a2 %t25 = extractvalue { ptr, i64, i64 } %t24, 1 %t26 = icmp uge i64 0, %t25 br i1 %t26, label %range2558, label %inrange2559 range2558: call void @finch_panic_index(ptr @.str.1540, i64 772, i64 0, i64 %t25) unreachable inrange2559: %t27 = extractvalue { ptr, i64, i64 } %t24, 0 %t28 = getelementptr inbounds { ptr, i64, i64 }, ptr %t27, i64 0 %t29 = load { ptr, i64, i64 }, ptr %t28 call void @finch.gen.store(ptr %t12, { ptr, i64, i64 } { ptr @.str.1537, i64 3, i64 0 }, { ptr, i64, i64 } %t23, { ptr, i64, i64 } %t29) %t30 = load ptr, ptr %a1 %t31 = load { ptr, i64, i64 }, ptr %a2 %t32 = extractvalue { ptr, i64, i64 } %t31, 1 %t33 = icmp uge i64 1, %t32 br i1 %t33, label %range2560, label %inrange2561 range2560: call void @finch_panic_index(ptr @.str.1541, i64 773, i64 1, i64 %t32) unreachable inrange2561: %t34 = extractvalue { ptr, i64, i64 } %t31, 0 %t35 = getelementptr inbounds { ptr, i64, i64 }, ptr %t34, i64 1 %t36 = load { ptr, i64, i64 }, ptr %t35 call void @finch.gen.br(ptr %t30, { ptr, i64, i64 } %t36) %t37 = load ptr, ptr %a1 %t38 = load { ptr, i64, i64 }, ptr %a2 %t39 = extractvalue { ptr, i64, i64 } %t38, 1 %t40 = icmp uge i64 2, %t39 br i1 %t40, label %range2562, label %inrange2563 range2562: call void @finch_panic_index(ptr @.str.1542, i64 774, i64 2, i64 %t39) unreachable inrange2563: %t41 = extractvalue { ptr, i64, i64 } %t38, 0 %t42 = getelementptr inbounds { ptr, i64, i64 }, ptr %t41, i64 2 %t43 = load { ptr, i64, i64 }, ptr %t42 call void @finch.gen.label(ptr %t37, { ptr, i64, i64 } %t43) ret void } define internal void @finch.gen.copyAt(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, %S.ast.Type %p3) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca %S.ast.Type, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 store %S.ast.Type %p3, ptr %a4 %t5 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 0 %t6 = load { ptr, i64, i64 }, ptr %t5 store { ptr, i64, i64 } %t6, ptr %a7 store { ptr, i64, i64 } { ptr @.str.1543, i64 3, i64 0 }, ptr %a8 %t9 = call i32 @finch_str_eq(ptr %a7, ptr %a8) %t10 = icmp ne i32 %t9, 0 br i1 %t10, label %then2564, label %else2565 then2564: %t11 = load ptr, ptr %a1 %t12 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.1544, i64 30, i64 0 }, ptr %a14 store { ptr, i64, i64 } %t12, ptr %a15 call void @finch_str_concat(ptr %a13, ptr %a14, ptr %a15) %t16 = load { ptr, i64, i64 }, ptr %a13 store { ptr, i64, i64 } %t16, ptr %a18 store { ptr, i64, i64 } { ptr @.str.1545, i64 6, i64 0 }, ptr %a19 call void @finch_str_concat(ptr %a17, ptr %a18, ptr %a19) %t20 = load { ptr, i64, i64 }, ptr %a17 %t21 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t20, ptr %a23 store { ptr, i64, i64 } %t21, ptr %a24 call void @finch_str_concat(ptr %a22, ptr %a23, ptr %a24) %t25 = load { ptr, i64, i64 }, ptr %a22 store { ptr, i64, i64 } %t25, ptr %a27 store { ptr, i64, i64 } { ptr @.str.1546, i64 1, i64 0 }, ptr %a28 call void @finch_str_concat(ptr %a26, ptr %a27, ptr %a28) %t29 = load { ptr, i64, i64 }, ptr %a26 call void @finch.gen.emit(ptr %t11, { ptr, i64, i64 } %t29) br label %endif2566 else2565: %t30 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 0 %t31 = load { ptr, i64, i64 }, ptr %t30 store { ptr, i64, i64 } %t31, ptr %a32 store { ptr, i64, i64 } { ptr @.str.1547, i64 5, i64 0 }, ptr %a33 %t34 = call i32 @finch_str_eq(ptr %a32, ptr %a33) %t35 = icmp ne i32 %t34, 0 br label %logic.from2567 logic.from2567: br i1 %t35, label %logic.end2569, label %logic.rhs2568 logic.rhs2568: %t36 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 0 %t37 = load { ptr, i64, i64 }, ptr %t36 store { ptr, i64, i64 } %t37, ptr %a38 store { ptr, i64, i64 } { ptr @.str.1548, i64 3, i64 0 }, ptr %a39 %t40 = call i32 @finch_str_eq(ptr %a38, ptr %a39) %t41 = icmp ne i32 %t40, 0 br label %logic.rend2570 logic.rend2570: br label %logic.end2569 logic.end2569: %t42 = phi i1 [ true, %logic.from2567 ], [ %t41, %logic.rend2570 ] br label %logic.from2571 logic.from2571: br i1 %t42, label %logic.end2573, label %logic.rhs2572 logic.rhs2572: %t43 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 0 %t44 = load { ptr, i64, i64 }, ptr %t43 store { ptr, i64, i64 } %t44, ptr %a45 store { ptr, i64, i64 } { ptr @.str.1549, i64 6, i64 0 }, ptr %a46 %t47 = call i32 @finch_str_eq(ptr %a45, ptr %a46) %t48 = icmp ne i32 %t47, 0 br label %logic.from2574 logic.from2574: br i1 %t48, label %logic.rhs2575, label %logic.end2576 logic.rhs2575: %t49 = load ptr, ptr %a1 %t50 = load %S.ast.Type, ptr %a4 %t51 = call i1 @finch.gen.owning(ptr %t49, %S.ast.Type %t50) br label %logic.rend2577 logic.rend2577: br label %logic.end2576 logic.end2576: %t52 = phi i1 [ false, %logic.from2574 ], [ %t51, %logic.rend2577 ] br label %logic.rend2578 logic.rend2578: br label %logic.end2573 logic.end2573: %t53 = phi i1 [ true, %logic.from2571 ], [ %t52, %logic.rend2578 ] br i1 %t53, label %then2579, label %else2580 then2579: %t54 = load ptr, ptr %a1 %t55 = load ptr, ptr %a1 %t56 = load %S.ast.Type, ptr %a4 %t57 = call { ptr, i64, i64 } @finch.gen.copyFn(ptr %t55, %S.ast.Type %t56) store { ptr, i64, i64 } { ptr @.str.1550, i64 10, i64 0 }, ptr %a59 store { ptr, i64, i64 } %t57, ptr %a60 call void @finch_str_concat(ptr %a58, ptr %a59, ptr %a60) %t61 = load { ptr, i64, i64 }, ptr %a58 store { ptr, i64, i64 } %t61, ptr %a63 store { ptr, i64, i64 } { ptr @.str.1551, i64 5, i64 0 }, ptr %a64 call void @finch_str_concat(ptr %a62, ptr %a63, ptr %a64) %t65 = load { ptr, i64, i64 }, ptr %a62 %t66 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t65, ptr %a68 store { ptr, i64, i64 } %t66, ptr %a69 call void @finch_str_concat(ptr %a67, ptr %a68, ptr %a69) %t70 = load { ptr, i64, i64 }, ptr %a67 store { ptr, i64, i64 } %t70, ptr %a72 store { ptr, i64, i64 } { ptr @.str.1552, i64 6, i64 0 }, ptr %a73 call void @finch_str_concat(ptr %a71, ptr %a72, ptr %a73) %t74 = load { ptr, i64, i64 }, ptr %a71 %t75 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t74, ptr %a77 store { ptr, i64, i64 } %t75, ptr %a78 call void @finch_str_concat(ptr %a76, ptr %a77, ptr %a78) %t79 = load { ptr, i64, i64 }, ptr %a76 store { ptr, i64, i64 } %t79, ptr %a81 store { ptr, i64, i64 } { ptr @.str.1553, i64 1, i64 0 }, ptr %a82 call void @finch_str_concat(ptr %a80, ptr %a81, ptr %a82) %t83 = load { ptr, i64, i64 }, ptr %a80 call void @finch.gen.emit(ptr %t54, { ptr, i64, i64 } %t83) br label %endif2581 else2580: %t84 = load ptr, ptr %a1 %t85 = load ptr, ptr %a1 %t86 = load %S.ast.Type, ptr %a4 %t87 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t85, %S.ast.Type %t86) %t88 = load ptr, ptr %a1 %t89 = load ptr, ptr %a1 %t90 = load %S.ast.Type, ptr %a4 %t91 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t89, %S.ast.Type %t90) %t92 = load { ptr, i64, i64 }, ptr %a3 %t93 = call { ptr, i64, i64 } @finch.gen.load(ptr %t88, { ptr, i64, i64 } %t91, { ptr, i64, i64 } %t92) %t94 = load { ptr, i64, i64 }, ptr %a2 call void @finch.gen.store(ptr %t84, { ptr, i64, i64 } %t87, { ptr, i64, i64 } %t93, { ptr, i64, i64 } %t94) br label %endif2581 endif2581: br label %endif2566 endif2566: ret void } define internal { ptr, i64, i64 } @finch.gen.copyFn(ptr %p0, %S.ast.Type %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Type, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca %S.gen.Saved, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca %S.ast.Type, align 16 %a49 = alloca %S.ast.Type, align 16 %a51 = alloca %S.ast.Type, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca { ptr, i64, i64 }, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca { ptr, i64, i64 }, align 16 %a110 = alloca { ptr, i64, i64 }, align 16 %a111 = alloca { ptr, i64, i64 }, align 16 %a114 = alloca { ptr, i64, i64 }, align 16 %a119 = alloca { ptr, i64, i64 }, align 16 %a120 = alloca { ptr, i64, i64 }, align 16 %a121 = alloca { ptr, i64, i64 }, align 16 %a123 = alloca { ptr, i64, i64 }, align 16 %a124 = alloca { ptr, i64, i64 }, align 16 %a125 = alloca { ptr, i64, i64 }, align 16 %a128 = alloca { ptr, i64, i64 }, align 16 %a129 = alloca { ptr, i64, i64 }, align 16 %a130 = alloca { ptr, i64, i64 }, align 16 %a132 = alloca { ptr, i64, i64 }, align 16 %a133 = alloca { ptr, i64, i64 }, align 16 %a134 = alloca { ptr, i64, i64 }, align 16 %a142 = alloca { ptr, i64, i64 }, align 16 %a143 = alloca { ptr, i64, i64 }, align 16 %a144 = alloca { ptr, i64, i64 }, align 16 %a147 = alloca { ptr, i64, i64 }, align 16 %a156 = alloca { ptr, i64, i64 }, align 16 %a157 = alloca { ptr, i64, i64 }, align 16 %a164 = alloca { ptr, i64, i64 }, align 16 %a165 = alloca { ptr, i64, i64 }, align 16 %a166 = alloca { ptr, i64, i64 }, align 16 %a168 = alloca { ptr, i64, i64 }, align 16 %a169 = alloca { ptr, i64, i64 }, align 16 %a170 = alloca { ptr, i64, i64 }, align 16 %a196 = alloca { ptr, i64, i64 }, align 16 %a197 = alloca { ptr, i64, i64 }, align 16 %a198 = alloca { ptr, i64, i64 }, align 16 %a200 = alloca { ptr, i64, i64 }, align 16 %a201 = alloca { ptr, i64, i64 }, align 16 %a202 = alloca { ptr, i64, i64 }, align 16 %a206 = alloca { ptr, i64, i64 }, align 16 %a210 = alloca { ptr, i64, i64 }, align 16 %a220 = alloca { ptr, i64, i64 }, align 16 %a230 = alloca { ptr, i64, i64 }, align 16 %a233 = alloca { ptr, i64, i64 }, align 16 %a236 = alloca { ptr, i64, i64 }, align 16 %a244 = alloca { ptr, i64, i64 }, align 16 %a245 = alloca { ptr, i64, i64 }, align 16 %a246 = alloca { ptr, i64, i64 }, align 16 %a248 = alloca { ptr, i64, i64 }, align 16 %a249 = alloca { ptr, i64, i64 }, align 16 %a250 = alloca { ptr, i64, i64 }, align 16 %a253 = alloca { ptr, i64, i64 }, align 16 %a254 = alloca { ptr, i64, i64 }, align 16 %a255 = alloca { ptr, i64, i64 }, align 16 %a257 = alloca { ptr, i64, i64 }, align 16 %a258 = alloca { ptr, i64, i64 }, align 16 %a259 = alloca { ptr, i64, i64 }, align 16 %a263 = alloca { ptr, i64, i64 }, align 16 %a264 = alloca { ptr, i64, i64 }, align 16 %a265 = alloca { ptr, i64, i64 }, align 16 %a267 = alloca { ptr, i64, i64 }, align 16 %a268 = alloca { ptr, i64, i64 }, align 16 %a269 = alloca { ptr, i64, i64 }, align 16 %a329 = alloca %S.gen.StructDef, align 16 %a330 = alloca %S.gen.StructDef, align 16 %a332 = alloca %S.gen.StructDef, align 16 %a336 = alloca { ptr, i64, i64 }, align 16 %a345 = alloca i64, align 16 %a360 = alloca { ptr, i64, i64 }, align 16 %a361 = alloca { ptr, i64, i64 }, align 16 %a362 = alloca { ptr, i64, i64 }, align 16 %a364 = alloca { ptr, i64, i64 }, align 16 %a365 = alloca { ptr, i64, i64 }, align 16 %a366 = alloca { ptr, i64, i64 }, align 16 %a376 = alloca { ptr, i64, i64 }, align 16 %a378 = alloca { ptr, i64, i64 }, align 16 %a379 = alloca { ptr, i64, i64 }, align 16 %a380 = alloca { ptr, i64, i64 }, align 16 %a383 = alloca { ptr, i64, i64 }, align 16 %a386 = alloca { ptr, i64, i64 }, align 16 %a387 = alloca { ptr, i64, i64 }, align 16 %a388 = alloca { ptr, i64, i64 }, align 16 %a390 = alloca { ptr, i64, i64 }, align 16 %a391 = alloca { ptr, i64, i64 }, align 16 %a392 = alloca { ptr, i64, i64 }, align 16 %a402 = alloca { ptr, i64, i64 }, align 16 %a404 = alloca { ptr, i64, i64 }, align 16 %a405 = alloca { ptr, i64, i64 }, align 16 %a406 = alloca { ptr, i64, i64 }, align 16 %a409 = alloca { ptr, i64, i64 }, align 16 %a427 = alloca { ptr, i64, i64 }, align 16 %a428 = alloca { ptr, i64, i64 }, align 16 %a429 = alloca { ptr, i64, i64 }, align 16 %a431 = alloca { ptr, i64, i64 }, align 16 %a432 = alloca { ptr, i64, i64 }, align 16 %a433 = alloca { ptr, i64, i64 }, align 16 %a436 = alloca { ptr, i64, i64 }, align 16 %a437 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Type %p1, ptr %a2 %t3 = load %S.ast.Type, ptr %a2 %t4 = call { ptr, i64, i64 } @finch.gen.typeKey(%S.ast.Type %t3) store { ptr, i64, i64 } { ptr @.str.1554, i64 12, i64 0 }, ptr %a6 store { ptr, i64, i64 } %t4, ptr %a7 call void @finch_str_concat(ptr %a5, ptr %a6, ptr %a7) %t8 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } %t8, ptr %a9 %t10 = load ptr, ptr %a1 %t11 = icmp eq ptr %t10, null br i1 %t11, label %panic2582, label %ok2583 panic2582: call void @finch_panic(ptr @.str.1555, i64 789, ptr @.str.1556) unreachable ok2583: %t12 = getelementptr inbounds %S.gen.Gen, ptr %t10, i32 0, i32 21 %t13 = load { ptr, i64, i64 }, ptr %t12 %t14 = load { ptr, i64, i64 }, ptr %a9 %t15 = call i1 @finch.gen.has({ ptr, i64, i64 } %t13, { ptr, i64, i64 } %t14) br i1 %t15, label %then2584, label %endif2586 then2584: %t16 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t16, ptr %a17 call void @finch_str_copy(ptr %a18, ptr %a17) %t19 = load { ptr, i64, i64 }, ptr %a18 ret { ptr, i64, i64 } %t19 endif2586: %t20 = load ptr, ptr %a1 %t21 = icmp eq ptr %t20, null br i1 %t21, label %panic2587, label %ok2588 panic2587: call void @finch_panic(ptr @.str.1557, i64 792, ptr @.str.1558) unreachable ok2588: %t22 = getelementptr inbounds %S.gen.Gen, ptr %t20, i32 0, i32 21 %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t22, i32 0, i32 1 %t24 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t24, ptr %a25 call void @finch_str_copy(ptr %a26, ptr %a25) %t27 = load { ptr, i64, i64 }, ptr %a26 %t28 = load i64, ptr %t23 %t29 = add i64 %t28, 1 call void @finch_arr_reserve(ptr %t22, i64 %t29, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t30 = load ptr, ptr %t22 %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t30, i64 %t28 store { ptr, i64, i64 } %t27, ptr %t31 store i64 %t29, ptr %t23 %t32 = load ptr, ptr %a1 %t33 = call %S.gen.Saved @finch.gen.beginHelper(ptr %t32) store %S.gen.Saved %t33, ptr %a34 %t35 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t36 = load { ptr, i64, i64 }, ptr %t35 store { ptr, i64, i64 } %t36, ptr %a37 store { ptr, i64, i64 } { ptr @.str.1559, i64 5, i64 0 }, ptr %a38 %t39 = call i32 @finch_str_eq(ptr %a37, ptr %a38) %t40 = icmp ne i32 %t39, 0 br i1 %t40, label %then2589, label %else2590 then2589: %t41 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t42 = load { ptr, i64, i64 }, ptr %t41 %t43 = extractvalue { ptr, i64, i64 } %t42, 1 %t44 = icmp uge i64 0, %t43 br i1 %t44, label %range2592, label %inrange2593 range2592: call void @finch_panic_index(ptr @.str.1560, i64 795, i64 0, i64 %t43) unreachable inrange2593: %t45 = extractvalue { ptr, i64, i64 } %t42, 0 %t46 = getelementptr inbounds %S.ast.Type, ptr %t45, i64 0 %t47 = load %S.ast.Type, ptr %t46 store %S.ast.Type %t47, ptr %a48 call void @finch.copy.S_ast_Type(ptr %a49, ptr %a48) %t50 = load %S.ast.Type, ptr %a49 store %S.ast.Type %t50, ptr %a51 %t52 = load ptr, ptr %a1 %t53 = load ptr, ptr %a1 %t54 = load %S.ast.Type, ptr %a51 %t55 = call { ptr, i64, i64 } @finch.gen.sizeOf(ptr %t53, %S.ast.Type %t54) store { ptr, i64, i64 } { ptr @.str.1561, i64 55, i64 0 }, ptr %a57 store { ptr, i64, i64 } %t55, ptr %a58 call void @finch_str_concat(ptr %a56, ptr %a57, ptr %a58) %t59 = load { ptr, i64, i64 }, ptr %a56 store { ptr, i64, i64 } %t59, ptr %a61 store { ptr, i64, i64 } { ptr @.str.1562, i64 1, i64 0 }, ptr %a62 call void @finch_str_concat(ptr %a60, ptr %a61, ptr %a62) %t63 = load { ptr, i64, i64 }, ptr %a60 call void @finch.gen.emit(ptr %t52, { ptr, i64, i64 } %t63) %t64 = load ptr, ptr %a1 %t65 = load %S.ast.Type, ptr %a51 %t66 = call i1 @finch.gen.owning(ptr %t64, %S.ast.Type %t65) br i1 %t66, label %then2594, label %endif2596 then2594: %t67 = load ptr, ptr %a1 %t68 = call { ptr, i64, i64 } @finch.gen.load(ptr %t67, { ptr, i64, i64 } { ptr @.str.1563, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.1564, i64 4, i64 0 }) store { ptr, i64, i64 } %t68, ptr %a69 %t70 = load ptr, ptr %a1 %t71 = call { ptr, i64, i64 } @finch.gen.load(ptr %t70, { ptr, i64, i64 } { ptr @.str.1565, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.1566, i64 4, i64 0 }) store { ptr, i64, i64 } %t71, ptr %a72 %t73 = load ptr, ptr %a1 %t74 = load ptr, ptr %a1 %t75 = call { ptr, i64, i64 } @finch.gen.op(ptr %t74, { ptr, i64, i64 } { ptr @.str.1568, i64 64, i64 0 }) %t76 = call { ptr, i64, i64 } @finch.gen.load(ptr %t73, { ptr, i64, i64 } { ptr @.str.1567, i64 3, i64 0 }, { ptr, i64, i64 } %t75) store { ptr, i64, i64 } %t76, ptr %a77 %t78 = load ptr, ptr %a1 %t79 = load { ptr, i64, i64 }, ptr %a77 %t80 = call { ptr, i64, i64 } @finch.gen.loopStart(ptr %t78, { ptr, i64, i64 } %t79) store { ptr, i64, i64 } %t80, ptr %a81 %t82 = load ptr, ptr %a1 %t83 = load ptr, ptr %a1 %t84 = load %S.ast.Type, ptr %a51 %t85 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t83, %S.ast.Type %t84) store { ptr, i64, i64 } { ptr @.str.1569, i64 23, i64 0 }, ptr %a87 store { ptr, i64, i64 } %t85, ptr %a88 call void @finch_str_concat(ptr %a86, ptr %a87, ptr %a88) %t89 = load { ptr, i64, i64 }, ptr %a86 store { ptr, i64, i64 } %t89, ptr %a91 store { ptr, i64, i64 } { ptr @.str.1570, i64 6, i64 0 }, ptr %a92 call void @finch_str_concat(ptr %a90, ptr %a91, ptr %a92) %t93 = load { ptr, i64, i64 }, ptr %a90 %t94 = load { ptr, i64, i64 }, ptr %a69 store { ptr, i64, i64 } %t93, ptr %a96 store { ptr, i64, i64 } %t94, ptr %a97 call void @finch_str_concat(ptr %a95, ptr %a96, ptr %a97) %t98 = load { ptr, i64, i64 }, ptr %a95 store { ptr, i64, i64 } %t98, ptr %a100 store { ptr, i64, i64 } { ptr @.str.1571, i64 6, i64 0 }, ptr %a101 call void @finch_str_concat(ptr %a99, ptr %a100, ptr %a101) %t102 = load { ptr, i64, i64 }, ptr %a99 %t103 = load { ptr, i64, i64 }, ptr %a81 %t104 = extractvalue { ptr, i64, i64 } %t103, 1 %t105 = icmp uge i64 3, %t104 br i1 %t105, label %range2597, label %inrange2598 range2597: call void @finch_panic_index(ptr @.str.1572, i64 802, i64 3, i64 %t104) unreachable inrange2598: %t106 = extractvalue { ptr, i64, i64 } %t103, 0 %t107 = getelementptr inbounds { ptr, i64, i64 }, ptr %t106, i64 3 %t108 = load { ptr, i64, i64 }, ptr %t107 store { ptr, i64, i64 } %t102, ptr %a110 store { ptr, i64, i64 } %t108, ptr %a111 call void @finch_str_concat(ptr %a109, ptr %a110, ptr %a111) %t112 = load { ptr, i64, i64 }, ptr %a109 %t113 = call { ptr, i64, i64 } @finch.gen.op(ptr %t82, { ptr, i64, i64 } %t112) store { ptr, i64, i64 } %t113, ptr %a114 %t115 = load ptr, ptr %a1 %t116 = load ptr, ptr %a1 %t117 = load %S.ast.Type, ptr %a51 %t118 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t116, %S.ast.Type %t117) store { ptr, i64, i64 } { ptr @.str.1573, i64 23, i64 0 }, ptr %a120 store { ptr, i64, i64 } %t118, ptr %a121 call void @finch_str_concat(ptr %a119, ptr %a120, ptr %a121) %t122 = load { ptr, i64, i64 }, ptr %a119 store { ptr, i64, i64 } %t122, ptr %a124 store { ptr, i64, i64 } { ptr @.str.1574, i64 6, i64 0 }, ptr %a125 call void @finch_str_concat(ptr %a123, ptr %a124, ptr %a125) %t126 = load { ptr, i64, i64 }, ptr %a123 %t127 = load { ptr, i64, i64 }, ptr %a72 store { ptr, i64, i64 } %t126, ptr %a129 store { ptr, i64, i64 } %t127, ptr %a130 call void @finch_str_concat(ptr %a128, ptr %a129, ptr %a130) %t131 = load { ptr, i64, i64 }, ptr %a128 store { ptr, i64, i64 } %t131, ptr %a133 store { ptr, i64, i64 } { ptr @.str.1575, i64 6, i64 0 }, ptr %a134 call void @finch_str_concat(ptr %a132, ptr %a133, ptr %a134) %t135 = load { ptr, i64, i64 }, ptr %a132 %t136 = load { ptr, i64, i64 }, ptr %a81 %t137 = extractvalue { ptr, i64, i64 } %t136, 1 %t138 = icmp uge i64 3, %t137 br i1 %t138, label %range2599, label %inrange2600 range2599: call void @finch_panic_index(ptr @.str.1576, i64 803, i64 3, i64 %t137) unreachable inrange2600: %t139 = extractvalue { ptr, i64, i64 } %t136, 0 %t140 = getelementptr inbounds { ptr, i64, i64 }, ptr %t139, i64 3 %t141 = load { ptr, i64, i64 }, ptr %t140 store { ptr, i64, i64 } %t135, ptr %a143 store { ptr, i64, i64 } %t141, ptr %a144 call void @finch_str_concat(ptr %a142, ptr %a143, ptr %a144) %t145 = load { ptr, i64, i64 }, ptr %a142 %t146 = call { ptr, i64, i64 } @finch.gen.op(ptr %t115, { ptr, i64, i64 } %t145) store { ptr, i64, i64 } %t146, ptr %a147 %t148 = load ptr, ptr %a1 %t149 = load { ptr, i64, i64 }, ptr %a114 %t150 = load { ptr, i64, i64 }, ptr %a147 %t151 = load %S.ast.Type, ptr %a51 call void @finch.gen.copyAt(ptr %t148, { ptr, i64, i64 } %t149, { ptr, i64, i64 } %t150, %S.ast.Type %t151) %t152 = load ptr, ptr %a1 %t153 = load { ptr, i64, i64 }, ptr %a81 call void @finch.gen.loopEnd(ptr %t152, { ptr, i64, i64 } %t153) br label %endif2596 endif2596: br label %endif2591 else2590: %t154 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t155 = load { ptr, i64, i64 }, ptr %t154 store { ptr, i64, i64 } %t155, ptr %a156 store { ptr, i64, i64 } { ptr @.str.1577, i64 3, i64 0 }, ptr %a157 %t158 = call i32 @finch_str_eq(ptr %a156, ptr %a157) %t159 = icmp ne i32 %t158, 0 br i1 %t159, label %then2601, label %else2602 then2601: %t160 = load ptr, ptr %a1 %t161 = load ptr, ptr %a1 %t162 = load %S.ast.Type, ptr %a2 %t163 = call { ptr, i64, i64 } @finch.gen.entrySize(ptr %t161, %S.ast.Type %t162) store { ptr, i64, i64 } { ptr @.str.1578, i64 55, i64 0 }, ptr %a165 store { ptr, i64, i64 } %t163, ptr %a166 call void @finch_str_concat(ptr %a164, ptr %a165, ptr %a166) %t167 = load { ptr, i64, i64 }, ptr %a164 store { ptr, i64, i64 } %t167, ptr %a169 store { ptr, i64, i64 } { ptr @.str.1579, i64 1, i64 0 }, ptr %a170 call void @finch_str_concat(ptr %a168, ptr %a169, ptr %a170) %t171 = load { ptr, i64, i64 }, ptr %a168 call void @finch.gen.emit(ptr %t160, { ptr, i64, i64 } %t171) %t172 = load ptr, ptr %a1 %t173 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t174 = load { ptr, i64, i64 }, ptr %t173 %t175 = extractvalue { ptr, i64, i64 } %t174, 1 %t176 = icmp uge i64 0, %t175 br i1 %t176, label %range2604, label %inrange2605 range2604: call void @finch_panic_index(ptr @.str.1580, i64 809, i64 0, i64 %t175) unreachable inrange2605: %t177 = extractvalue { ptr, i64, i64 } %t174, 0 %t178 = getelementptr inbounds %S.ast.Type, ptr %t177, i64 0 %t179 = load %S.ast.Type, ptr %t178 %t180 = call i1 @finch.gen.owning(ptr %t172, %S.ast.Type %t179) br label %logic.from2606 logic.from2606: br i1 %t180, label %logic.end2608, label %logic.rhs2607 logic.rhs2607: %t181 = load ptr, ptr %a1 %t182 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t183 = load { ptr, i64, i64 }, ptr %t182 %t184 = extractvalue { ptr, i64, i64 } %t183, 1 %t185 = icmp uge i64 1, %t184 br i1 %t185, label %range2609, label %inrange2610 range2609: call void @finch_panic_index(ptr @.str.1581, i64 809, i64 1, i64 %t184) unreachable inrange2610: %t186 = extractvalue { ptr, i64, i64 } %t183, 0 %t187 = getelementptr inbounds %S.ast.Type, ptr %t186, i64 1 %t188 = load %S.ast.Type, ptr %t187 %t189 = call i1 @finch.gen.owning(ptr %t181, %S.ast.Type %t188) br label %logic.rend2611 logic.rend2611: br label %logic.end2608 logic.end2608: %t190 = phi i1 [ true, %logic.from2606 ], [ %t189, %logic.rend2611 ] br i1 %t190, label %then2612, label %endif2614 then2612: %t191 = load ptr, ptr %a1 %t192 = load ptr, ptr %a1 %t193 = load ptr, ptr %a1 %t194 = load %S.ast.Type, ptr %a2 %t195 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t193, %S.ast.Type %t194) store { ptr, i64, i64 } { ptr @.str.1583, i64 23, i64 0 }, ptr %a197 store { ptr, i64, i64 } %t195, ptr %a198 call void @finch_str_concat(ptr %a196, ptr %a197, ptr %a198) %t199 = load { ptr, i64, i64 }, ptr %a196 store { ptr, i64, i64 } %t199, ptr %a201 store { ptr, i64, i64 } { ptr @.str.1584, i64 24, i64 0 }, ptr %a202 call void @finch_str_concat(ptr %a200, ptr %a201, ptr %a202) %t203 = load { ptr, i64, i64 }, ptr %a200 %t204 = call { ptr, i64, i64 } @finch.gen.op(ptr %t192, { ptr, i64, i64 } %t203) %t205 = call { ptr, i64, i64 } @finch.gen.load(ptr %t191, { ptr, i64, i64 } { ptr @.str.1582, i64 3, i64 0 }, { ptr, i64, i64 } %t204) store { ptr, i64, i64 } %t205, ptr %a206 %t207 = load ptr, ptr %a1 %t208 = load { ptr, i64, i64 }, ptr %a206 %t209 = call { ptr, i64, i64 } @finch.gen.loopStart(ptr %t207, { ptr, i64, i64 } %t208) store { ptr, i64, i64 } %t209, ptr %a210 %t211 = load ptr, ptr %a1 %t212 = load %S.ast.Type, ptr %a2 %t213 = load { ptr, i64, i64 }, ptr %a210 %t214 = extractvalue { ptr, i64, i64 } %t213, 1 %t215 = icmp uge i64 3, %t214 br i1 %t215, label %range2615, label %inrange2616 range2615: call void @finch_panic_index(ptr @.str.1586, i64 813, i64 3, i64 %t214) unreachable inrange2616: %t216 = extractvalue { ptr, i64, i64 } %t213, 0 %t217 = getelementptr inbounds { ptr, i64, i64 }, ptr %t216, i64 3 %t218 = load { ptr, i64, i64 }, ptr %t217 %t219 = call { ptr, i64, i64 } @finch.gen.entryAt(ptr %t211, { ptr, i64, i64 } { ptr @.str.1585, i64 4, i64 0 }, %S.ast.Type %t212, { ptr, i64, i64 } %t218) store { ptr, i64, i64 } %t219, ptr %a220 %t221 = load ptr, ptr %a1 %t222 = load %S.ast.Type, ptr %a2 %t223 = load { ptr, i64, i64 }, ptr %a210 %t224 = extractvalue { ptr, i64, i64 } %t223, 1 %t225 = icmp uge i64 3, %t224 br i1 %t225, label %range2617, label %inrange2618 range2617: call void @finch_panic_index(ptr @.str.1588, i64 814, i64 3, i64 %t224) unreachable inrange2618: %t226 = extractvalue { ptr, i64, i64 } %t223, 0 %t227 = getelementptr inbounds { ptr, i64, i64 }, ptr %t226, i64 3 %t228 = load { ptr, i64, i64 }, ptr %t227 %t229 = call { ptr, i64, i64 } @finch.gen.entryAt(ptr %t221, { ptr, i64, i64 } { ptr @.str.1587, i64 4, i64 0 }, %S.ast.Type %t222, { ptr, i64, i64 } %t228) store { ptr, i64, i64 } %t229, ptr %a230 %t231 = load ptr, ptr %a1 %t232 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t231, { ptr, i64, i64 } { ptr @.str.1589, i64 10, i64 0 }) store { ptr, i64, i64 } %t232, ptr %a233 %t234 = load ptr, ptr %a1 %t235 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t234, { ptr, i64, i64 } { ptr @.str.1590, i64 10, i64 0 }) store { ptr, i64, i64 } %t235, ptr %a236 %t237 = load ptr, ptr %a1 %t238 = load ptr, ptr %a1 %t239 = load ptr, ptr %a1 %t240 = load ptr, ptr %a1 %t241 = load ptr, ptr %a1 %t242 = load %S.ast.Type, ptr %a2 %t243 = call { ptr, i64, i64 } @finch.gen.entryTy(ptr %t241, %S.ast.Type %t242) store { ptr, i64, i64 } { ptr @.str.1593, i64 23, i64 0 }, ptr %a245 store { ptr, i64, i64 } %t243, ptr %a246 call void @finch_str_concat(ptr %a244, ptr %a245, ptr %a246) %t247 = load { ptr, i64, i64 }, ptr %a244 store { ptr, i64, i64 } %t247, ptr %a249 store { ptr, i64, i64 } { ptr @.str.1594, i64 6, i64 0 }, ptr %a250 call void @finch_str_concat(ptr %a248, ptr %a249, ptr %a250) %t251 = load { ptr, i64, i64 }, ptr %a248 %t252 = load { ptr, i64, i64 }, ptr %a220 store { ptr, i64, i64 } %t251, ptr %a254 store { ptr, i64, i64 } %t252, ptr %a255 call void @finch_str_concat(ptr %a253, ptr %a254, ptr %a255) %t256 = load { ptr, i64, i64 }, ptr %a253 store { ptr, i64, i64 } %t256, ptr %a258 store { ptr, i64, i64 } { ptr @.str.1595, i64 14, i64 0 }, ptr %a259 call void @finch_str_concat(ptr %a257, ptr %a258, ptr %a259) %t260 = load { ptr, i64, i64 }, ptr %a257 %t261 = call { ptr, i64, i64 } @finch.gen.op(ptr %t240, { ptr, i64, i64 } %t260) %t262 = call { ptr, i64, i64 } @finch.gen.load(ptr %t239, { ptr, i64, i64 } { ptr @.str.1592, i64 3, i64 0 }, { ptr, i64, i64 } %t261) store { ptr, i64, i64 } { ptr @.str.1591, i64 12, i64 0 }, ptr %a264 store { ptr, i64, i64 } %t262, ptr %a265 call void @finch_str_concat(ptr %a263, ptr %a264, ptr %a265) %t266 = load { ptr, i64, i64 }, ptr %a263 store { ptr, i64, i64 } %t266, ptr %a268 store { ptr, i64, i64 } { ptr @.str.1596, i64 3, i64 0 }, ptr %a269 call void @finch_str_concat(ptr %a267, ptr %a268, ptr %a269) %t270 = load { ptr, i64, i64 }, ptr %a267 %t271 = call { ptr, i64, i64 } @finch.gen.op(ptr %t238, { ptr, i64, i64 } %t270) %t272 = load { ptr, i64, i64 }, ptr %a233 %t273 = load { ptr, i64, i64 }, ptr %a236 call void @finch.gen.condBr(ptr %t237, { ptr, i64, i64 } %t271, { ptr, i64, i64 } %t272, { ptr, i64, i64 } %t273) %t274 = load ptr, ptr %a1 %t275 = load { ptr, i64, i64 }, ptr %a233 call void @finch.gen.label(ptr %t274, { ptr, i64, i64 } %t275) %t276 = load ptr, ptr %a1 %t277 = load ptr, ptr %a1 %t278 = load { ptr, i64, i64 }, ptr %a230 %t279 = load %S.ast.Type, ptr %a2 %t280 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t277, { ptr, i64, i64 } %t278, %S.ast.Type %t279, i64 1) %t281 = load ptr, ptr %a1 %t282 = load { ptr, i64, i64 }, ptr %a220 %t283 = load %S.ast.Type, ptr %a2 %t284 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t281, { ptr, i64, i64 } %t282, %S.ast.Type %t283, i64 1) %t285 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t286 = load { ptr, i64, i64 }, ptr %t285 %t287 = extractvalue { ptr, i64, i64 } %t286, 1 %t288 = icmp uge i64 0, %t287 br i1 %t288, label %range2619, label %inrange2620 range2619: call void @finch_panic_index(ptr @.str.1597, i64 819, i64 0, i64 %t287) unreachable inrange2620: %t289 = extractvalue { ptr, i64, i64 } %t286, 0 %t290 = getelementptr inbounds %S.ast.Type, ptr %t289, i64 0 %t291 = load %S.ast.Type, ptr %t290 call void @finch.gen.copyAt(ptr %t276, { ptr, i64, i64 } %t280, { ptr, i64, i64 } %t284, %S.ast.Type %t291) %t292 = load ptr, ptr %a1 %t293 = load ptr, ptr %a1 %t294 = load { ptr, i64, i64 }, ptr %a230 %t295 = load %S.ast.Type, ptr %a2 %t296 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t293, { ptr, i64, i64 } %t294, %S.ast.Type %t295, i64 2) %t297 = load ptr, ptr %a1 %t298 = load { ptr, i64, i64 }, ptr %a220 %t299 = load %S.ast.Type, ptr %a2 %t300 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t297, { ptr, i64, i64 } %t298, %S.ast.Type %t299, i64 2) %t301 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t302 = load { ptr, i64, i64 }, ptr %t301 %t303 = extractvalue { ptr, i64, i64 } %t302, 1 %t304 = icmp uge i64 1, %t303 br i1 %t304, label %range2621, label %inrange2622 range2621: call void @finch_panic_index(ptr @.str.1598, i64 820, i64 1, i64 %t303) unreachable inrange2622: %t305 = extractvalue { ptr, i64, i64 } %t302, 0 %t306 = getelementptr inbounds %S.ast.Type, ptr %t305, i64 1 %t307 = load %S.ast.Type, ptr %t306 call void @finch.gen.copyAt(ptr %t292, { ptr, i64, i64 } %t296, { ptr, i64, i64 } %t300, %S.ast.Type %t307) %t308 = load ptr, ptr %a1 %t309 = load { ptr, i64, i64 }, ptr %a236 call void @finch.gen.br(ptr %t308, { ptr, i64, i64 } %t309) %t310 = load ptr, ptr %a1 %t311 = load { ptr, i64, i64 }, ptr %a236 call void @finch.gen.label(ptr %t310, { ptr, i64, i64 } %t311) %t312 = load ptr, ptr %a1 %t313 = load { ptr, i64, i64 }, ptr %a210 call void @finch.gen.loopEnd(ptr %t312, { ptr, i64, i64 } %t313) br label %endif2614 endif2614: br label %endif2603 else2602: %t314 = load ptr, ptr %a1 %t315 = icmp eq ptr %t314, null br i1 %t315, label %panic2623, label %ok2624 panic2623: call void @finch_panic(ptr @.str.1599, i64 826, ptr @.str.1600) unreachable ok2624: %t316 = getelementptr inbounds %S.gen.Gen, ptr %t314, i32 0, i32 15 %t317 = load ptr, ptr %a1 %t318 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t319 = load { ptr, i64, i64 }, ptr %t318 %t320 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t321 = load { ptr, i64, i64 }, ptr %t320 %t322 = call i64 @finch.gen.findStruct(ptr %t317, { ptr, i64, i64 } %t319, { ptr, i64, i64 } %t321) %t323 = load { ptr, i64, i64 }, ptr %t316 %t324 = extractvalue { ptr, i64, i64 } %t323, 1 %t325 = icmp uge i64 %t322, %t324 br i1 %t325, label %range2625, label %inrange2626 range2625: call void @finch_panic_index(ptr @.str.1601, i64 826, i64 %t322, i64 %t324) unreachable inrange2626: %t326 = extractvalue { ptr, i64, i64 } %t323, 0 %t327 = getelementptr inbounds %S.gen.StructDef, ptr %t326, i64 %t322 %t328 = load %S.gen.StructDef, ptr %t327 store %S.gen.StructDef %t328, ptr %a329 call void @finch.copy.S_gen_StructDef(ptr %a330, ptr %a329) %t331 = load %S.gen.StructDef, ptr %a330 store %S.gen.StructDef %t331, ptr %a332 %t333 = load ptr, ptr %a1 %t334 = load %S.ast.Type, ptr %a2 %t335 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t333, %S.ast.Type %t334) store { ptr, i64, i64 } %t335, ptr %a336 %t337 = load ptr, ptr %a1 %t338 = load { ptr, i64, i64 }, ptr %a336 %t339 = load ptr, ptr %a1 %t340 = load { ptr, i64, i64 }, ptr %a336 %t341 = call { ptr, i64, i64 } @finch.gen.load(ptr %t339, { ptr, i64, i64 } %t340, { ptr, i64, i64 } { ptr @.str.1602, i64 4, i64 0 }) call void @finch.gen.store(ptr %t337, { ptr, i64, i64 } %t338, { ptr, i64, i64 } %t341, { ptr, i64, i64 } { ptr @.str.1603, i64 4, i64 0 }) %t342 = getelementptr inbounds %S.gen.StructDef, ptr %a332, i32 0, i32 12 %t343 = getelementptr inbounds { ptr, i64, i64 }, ptr %t342, i32 0, i32 1 %t344 = load i64, ptr %t343 store i64 0, ptr %a345 br label %for.cond2627 for.cond2627: %t346 = load i64, ptr %a345 %t347 = icmp slt i64 %t346, %t344 br i1 %t347, label %for.body2628, label %for.end2630 for.body2628: %t348 = load ptr, ptr %a1 %t349 = getelementptr inbounds %S.gen.StructDef, ptr %a332, i32 0, i32 12 %t350 = load i64, ptr %a345 %t351 = load { ptr, i64, i64 }, ptr %t349 %t352 = extractvalue { ptr, i64, i64 } %t351, 1 %t353 = icmp uge i64 %t350, %t352 br i1 %t353, label %range2631, label %inrange2632 range2631: call void @finch_panic_index(ptr @.str.1604, i64 830, i64 %t350, i64 %t352) unreachable inrange2632: %t354 = extractvalue { ptr, i64, i64 } %t351, 0 %t355 = getelementptr inbounds %S.ast.Type, ptr %t354, i64 %t350 %t356 = load %S.ast.Type, ptr %t355 %t357 = call i1 @finch.gen.owning(ptr %t348, %S.ast.Type %t356) br i1 %t357, label %then2633, label %endif2635 then2633: %t358 = load ptr, ptr %a1 %t359 = load { ptr, i64, i64 }, ptr %a336 store { ptr, i64, i64 } { ptr @.str.1605, i64 23, i64 0 }, ptr %a361 store { ptr, i64, i64 } %t359, ptr %a362 call void @finch_str_concat(ptr %a360, ptr %a361, ptr %a362) %t363 = load { ptr, i64, i64 }, ptr %a360 store { ptr, i64, i64 } %t363, ptr %a365 store { ptr, i64, i64 } { ptr @.str.1606, i64 23, i64 0 }, ptr %a366 call void @finch_str_concat(ptr %a364, ptr %a365, ptr %a366) %t367 = load { ptr, i64, i64 }, ptr %a364 %t368 = getelementptr inbounds %S.gen.StructDef, ptr %a332, i32 0, i32 3 %t369 = load i64, ptr %a345 %t370 = load { ptr, i64, i64 }, ptr %t368 %t371 = extractvalue { ptr, i64, i64 } %t370, 1 %t372 = icmp uge i64 %t369, %t371 br i1 %t372, label %range2636, label %inrange2637 range2636: call void @finch_panic_index(ptr @.str.1607, i64 831, i64 %t369, i64 %t371) unreachable inrange2637: %t373 = extractvalue { ptr, i64, i64 } %t370, 0 %t374 = getelementptr inbounds i64, ptr %t373, i64 %t369 %t375 = load i64, ptr %t374 call void @finch_str_from_int(ptr %a376, i64 %t375) %t377 = load { ptr, i64, i64 }, ptr %a376 store { ptr, i64, i64 } %t367, ptr %a379 store { ptr, i64, i64 } %t377, ptr %a380 call void @finch_str_concat(ptr %a378, ptr %a379, ptr %a380) %t381 = load { ptr, i64, i64 }, ptr %a378 %t382 = call { ptr, i64, i64 } @finch.gen.op(ptr %t358, { ptr, i64, i64 } %t381) store { ptr, i64, i64 } %t382, ptr %a383 %t384 = load ptr, ptr %a1 %t385 = load { ptr, i64, i64 }, ptr %a336 store { ptr, i64, i64 } { ptr @.str.1608, i64 23, i64 0 }, ptr %a387 store { ptr, i64, i64 } %t385, ptr %a388 call void @finch_str_concat(ptr %a386, ptr %a387, ptr %a388) %t389 = load { ptr, i64, i64 }, ptr %a386 store { ptr, i64, i64 } %t389, ptr %a391 store { ptr, i64, i64 } { ptr @.str.1609, i64 23, i64 0 }, ptr %a392 call void @finch_str_concat(ptr %a390, ptr %a391, ptr %a392) %t393 = load { ptr, i64, i64 }, ptr %a390 %t394 = getelementptr inbounds %S.gen.StructDef, ptr %a332, i32 0, i32 3 %t395 = load i64, ptr %a345 %t396 = load { ptr, i64, i64 }, ptr %t394 %t397 = extractvalue { ptr, i64, i64 } %t396, 1 %t398 = icmp uge i64 %t395, %t397 br i1 %t398, label %range2638, label %inrange2639 range2638: call void @finch_panic_index(ptr @.str.1610, i64 832, i64 %t395, i64 %t397) unreachable inrange2639: %t399 = extractvalue { ptr, i64, i64 } %t396, 0 %t400 = getelementptr inbounds i64, ptr %t399, i64 %t395 %t401 = load i64, ptr %t400 call void @finch_str_from_int(ptr %a402, i64 %t401) %t403 = load { ptr, i64, i64 }, ptr %a402 store { ptr, i64, i64 } %t393, ptr %a405 store { ptr, i64, i64 } %t403, ptr %a406 call void @finch_str_concat(ptr %a404, ptr %a405, ptr %a406) %t407 = load { ptr, i64, i64 }, ptr %a404 %t408 = call { ptr, i64, i64 } @finch.gen.op(ptr %t384, { ptr, i64, i64 } %t407) store { ptr, i64, i64 } %t408, ptr %a409 %t410 = load ptr, ptr %a1 %t411 = load { ptr, i64, i64 }, ptr %a383 %t412 = load { ptr, i64, i64 }, ptr %a409 %t413 = getelementptr inbounds %S.gen.StructDef, ptr %a332, i32 0, i32 12 %t414 = load i64, ptr %a345 %t415 = load { ptr, i64, i64 }, ptr %t413 %t416 = extractvalue { ptr, i64, i64 } %t415, 1 %t417 = icmp uge i64 %t414, %t416 br i1 %t417, label %range2640, label %inrange2641 range2640: call void @finch_panic_index(ptr @.str.1611, i64 833, i64 %t414, i64 %t416) unreachable inrange2641: %t418 = extractvalue { ptr, i64, i64 } %t415, 0 %t419 = getelementptr inbounds %S.ast.Type, ptr %t418, i64 %t414 %t420 = load %S.ast.Type, ptr %t419 call void @finch.gen.copyAt(ptr %t410, { ptr, i64, i64 } %t411, { ptr, i64, i64 } %t412, %S.ast.Type %t420) br label %endif2635 endif2635: br label %for.step2629 for.step2629: %t421 = load i64, ptr %a345 %t422 = add i64 %t421, 1 store i64 %t422, ptr %a345 br label %for.cond2627 for.end2630: br label %endif2603 endif2603: br label %endif2591 endif2591: %t423 = load ptr, ptr %a1 call void @finch.gen.emit(ptr %t423, { ptr, i64, i64 } { ptr @.str.1612, i64 8, i64 0 }) %t424 = load ptr, ptr %a1 %t425 = load %S.gen.Saved, ptr %a34 %t426 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } { ptr @.str.1613, i64 21, i64 0 }, ptr %a428 store { ptr, i64, i64 } %t426, ptr %a429 call void @finch_str_concat(ptr %a427, ptr %a428, ptr %a429) %t430 = load { ptr, i64, i64 }, ptr %a427 store { ptr, i64, i64 } %t430, ptr %a432 store { ptr, i64, i64 } { ptr @.str.1614, i64 20, i64 0 }, ptr %a433 call void @finch_str_concat(ptr %a431, ptr %a432, ptr %a433) %t434 = load { ptr, i64, i64 }, ptr %a431 call void @finch.gen.endHelper(ptr %t424, %S.gen.Saved %t425, { ptr, i64, i64 } %t434) %t435 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t435, ptr %a436 call void @finch_str_copy(ptr %a437, ptr %a436) %t438 = load { ptr, i64, i64 }, ptr %a437 ret { ptr, i64, i64 } %t438 } define internal { ptr, i64, i64 } @finch.gen.copyValue(ptr %p0, { ptr, i64, i64 } %p1, %S.ast.Type %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca %S.ast.Type, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca %S.ast.Type, align 16 %a20 = alloca %S.ast.Type, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store %S.ast.Type %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = load %S.ast.Type, ptr %a3 %t6 = call i1 @finch.gen.owning(ptr %t4, %S.ast.Type %t5) %t7 = xor i1 %t6, true br i1 %t7, label %then2642, label %endif2644 then2642: %t8 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t8, ptr %a9 call void @finch_str_copy(ptr %a10, ptr %a9) %t11 = load { ptr, i64, i64 }, ptr %a10 ret { ptr, i64, i64 } %t11 endif2644: %t12 = load ptr, ptr %a1 %t13 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t13, ptr %a14 call void @finch_str_copy(ptr %a15, ptr %a14) %t16 = load { ptr, i64, i64 }, ptr %a15 %t17 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t16, 0 %t18 = load %S.ast.Type, ptr %a3 store %S.ast.Type %t18, ptr %a19 call void @finch.copy.S_ast_Type(ptr %a20, ptr %a19) %t21 = load %S.ast.Type, ptr %a20 %t22 = insertvalue %S.gen.Val %t17, %S.ast.Type %t21, 1 %t23 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t12, %S.gen.Val %t22) store { ptr, i64, i64 } %t23, ptr %a24 %t25 = load ptr, ptr %a1 %t26 = load ptr, ptr %a1 %t27 = load %S.ast.Type, ptr %a3 %t28 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t26, %S.ast.Type %t27) %t29 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t25, { ptr, i64, i64 } %t28) store { ptr, i64, i64 } %t29, ptr %a30 %t31 = load ptr, ptr %a1 %t32 = load { ptr, i64, i64 }, ptr %a30 %t33 = load { ptr, i64, i64 }, ptr %a24 %t34 = load %S.ast.Type, ptr %a3 call void @finch.gen.copyAt(ptr %t31, { ptr, i64, i64 } %t32, { ptr, i64, i64 } %t33, %S.ast.Type %t34) %t35 = load ptr, ptr %a1 %t36 = load ptr, ptr %a1 %t37 = load %S.ast.Type, ptr %a3 %t38 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t36, %S.ast.Type %t37) %t39 = load { ptr, i64, i64 }, ptr %a30 %t40 = call { ptr, i64, i64 } @finch.gen.load(ptr %t35, { ptr, i64, i64 } %t38, { ptr, i64, i64 } %t39) ret { ptr, i64, i64 } %t40 } define internal { ptr, i64, i64 } @finch.gen.own(ptr %p0, %S.gen.Val %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.gen.Val, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.gen.Val %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t5 = load %S.ast.Type, ptr %t4 %t6 = call i1 @finch.gen.owning(ptr %t3, %S.ast.Type %t5) %t7 = xor i1 %t6, true br label %logic.from2645 logic.from2645: br i1 %t7, label %logic.end2647, label %logic.rhs2646 logic.rhs2646: %t8 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 2 %t9 = load i1, ptr %t8 br label %logic.rend2648 logic.rend2648: br label %logic.end2647 logic.end2647: %t10 = phi i1 [ true, %logic.from2645 ], [ %t9, %logic.rend2648 ] br i1 %t10, label %then2649, label %endif2651 then2649: %t11 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 %t12 = load { ptr, i64, i64 }, ptr %t11 store { ptr, i64, i64 } %t12, ptr %a13 call void @finch_str_copy(ptr %a14, ptr %a13) %t15 = load { ptr, i64, i64 }, ptr %a14 ret { ptr, i64, i64 } %t15 endif2651: %t16 = load ptr, ptr %a1 %t17 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 %t18 = load { ptr, i64, i64 }, ptr %t17 %t19 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t20 = load %S.ast.Type, ptr %t19 %t21 = call { ptr, i64, i64 } @finch.gen.copyValue(ptr %t16, { ptr, i64, i64 } %t18, %S.ast.Type %t20) ret { ptr, i64, i64 } %t21 } define internal void @finch.gen.printf(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = load { ptr, i64, i64 }, ptr %a2 %t6 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t4, { ptr, i64, i64 } %t5) store { ptr, i64, i64 } %t6, ptr %a7 %t8 = load ptr, ptr %a1 %t9 = call { ptr, i64, i64 } @finch.gen.tmpName(ptr %t8) store { ptr, i64, i64 } %t9, ptr %a10 store { ptr, i64, i64 } { ptr @.str.1615, i64 0, i64 0 }, ptr %a11 %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 %t13 = load i64, ptr %t12 %t14 = icmp sgt i64 %t13, 0 br i1 %t14, label %then2652, label %endif2654 then2652: %t15 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } { ptr @.str.1616, i64 2, i64 0 }, ptr %a17 store { ptr, i64, i64 } %t15, ptr %a18 call void @finch_str_concat(ptr %a16, ptr %a17, ptr %a18) %t19 = load { ptr, i64, i64 }, ptr %a16 store { ptr, i64, i64 } %t19, ptr %a11 br label %endif2654 endif2654: %t20 = load ptr, ptr %a1 %t21 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t21, ptr %a23 store { ptr, i64, i64 } { ptr @.str.1617, i64 35, i64 0 }, ptr %a24 call void @finch_str_concat(ptr %a22, ptr %a23, ptr %a24) %t25 = load { ptr, i64, i64 }, ptr %a22 %t26 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t25, ptr %a28 store { ptr, i64, i64 } %t26, ptr %a29 call void @finch_str_concat(ptr %a27, ptr %a28, ptr %a29) %t30 = load { ptr, i64, i64 }, ptr %a27 %t31 = load { ptr, i64, i64 }, ptr %a11 store { ptr, i64, i64 } %t30, ptr %a33 store { ptr, i64, i64 } %t31, ptr %a34 call void @finch_str_concat(ptr %a32, ptr %a33, ptr %a34) %t35 = load { ptr, i64, i64 }, ptr %a32 store { ptr, i64, i64 } %t35, ptr %a37 store { ptr, i64, i64 } { ptr @.str.1618, i64 1, i64 0 }, ptr %a38 call void @finch_str_concat(ptr %a36, ptr %a37, ptr %a38) %t39 = load { ptr, i64, i64 }, ptr %a36 call void @finch.gen.emit(ptr %t20, { ptr, i64, i64 } %t39) ret void } define internal { ptr, i64, i64 } @finch.gen.cstr(ptr %p0, { ptr, i64, i64 } %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.1619, i64 31, i64 0 }, ptr %a6 store { ptr, i64, i64 } %t4, ptr %a7 call void @finch_str_concat(ptr %a5, ptr %a6, ptr %a7) %t8 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } %t8, ptr %a10 store { ptr, i64, i64 } { ptr @.str.1620, i64 3, i64 0 }, ptr %a11 call void @finch_str_concat(ptr %a9, ptr %a10, ptr %a11) %t12 = load { ptr, i64, i64 }, ptr %a9 %t13 = call { ptr, i64, i64 } @finch.gen.op(ptr %t3, { ptr, i64, i64 } %t12) store { ptr, i64, i64 } %t13, ptr %a14 %t15 = load ptr, ptr %a1 %t16 = load { ptr, i64, i64 }, ptr %a14 store { ptr, i64, i64 } { ptr @.str.1621, i64 12, i64 0 }, ptr %a18 store { ptr, i64, i64 } %t16, ptr %a19 call void @finch_str_concat(ptr %a17, ptr %a18, ptr %a19) %t20 = load { ptr, i64, i64 }, ptr %a17 store { ptr, i64, i64 } %t20, ptr %a22 store { ptr, i64, i64 } { ptr @.str.1622, i64 6, i64 0 }, ptr %a23 call void @finch_str_concat(ptr %a21, ptr %a22, ptr %a23) %t24 = load { ptr, i64, i64 }, ptr %a21 %t25 = call { ptr, i64, i64 } @finch.gen.op(ptr %t15, { ptr, i64, i64 } %t24) store { ptr, i64, i64 } %t25, ptr %a26 %t27 = load ptr, ptr %a1 %t28 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t27, { ptr, i64, i64 } { ptr @.str.1623, i64 0, i64 0 }) store { ptr, i64, i64 } %t28, ptr %a29 %t30 = load ptr, ptr %a1 %t31 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } { ptr @.str.1624, i64 10, i64 0 }, ptr %a33 store { ptr, i64, i64 } %t31, ptr %a34 call void @finch_str_concat(ptr %a32, ptr %a33, ptr %a34) %t35 = load { ptr, i64, i64 }, ptr %a32 store { ptr, i64, i64 } %t35, ptr %a37 store { ptr, i64, i64 } { ptr @.str.1625, i64 6, i64 0 }, ptr %a38 call void @finch_str_concat(ptr %a36, ptr %a37, ptr %a38) %t39 = load { ptr, i64, i64 }, ptr %a36 %t40 = load { ptr, i64, i64 }, ptr %a29 store { ptr, i64, i64 } %t39, ptr %a42 store { ptr, i64, i64 } %t40, ptr %a43 call void @finch_str_concat(ptr %a41, ptr %a42, ptr %a43) %t44 = load { ptr, i64, i64 }, ptr %a41 store { ptr, i64, i64 } %t44, ptr %a46 store { ptr, i64, i64 } { ptr @.str.1626, i64 6, i64 0 }, ptr %a47 call void @finch_str_concat(ptr %a45, ptr %a46, ptr %a47) %t48 = load { ptr, i64, i64 }, ptr %a45 %t49 = load { ptr, i64, i64 }, ptr %a14 store { ptr, i64, i64 } %t48, ptr %a51 store { ptr, i64, i64 } %t49, ptr %a52 call void @finch_str_concat(ptr %a50, ptr %a51, ptr %a52) %t53 = load { ptr, i64, i64 }, ptr %a50 %t54 = call { ptr, i64, i64 } @finch.gen.op(ptr %t30, { ptr, i64, i64 } %t53) ret { ptr, i64, i64 } %t54 } define internal void @finch.gen.emitPrint(ptr %p0, { ptr, i64, i64 } %p1, %S.ast.Type %p2, i1 %p3) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca %S.ast.Type, align 16 %a4 = alloca i1, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca { ptr, i64, i64 }, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca { ptr, i64, i64 }, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca { ptr, i64, i64 }, align 16 %a104 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca { ptr, i64, i64 }, align 16 %a110 = alloca { ptr, i64, i64 }, align 16 %a113 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca { ptr, i64, i64 }, align 16 %a117 = alloca { ptr, i64, i64 }, align 16 %a118 = alloca { ptr, i64, i64 }, align 16 %a121 = alloca { ptr, i64, i64 }, align 16 %a122 = alloca { ptr, i64, i64 }, align 16 %a127 = alloca { ptr, i64, i64 }, align 16 %a128 = alloca { ptr, i64, i64 }, align 16 %a129 = alloca { ptr, i64, i64 }, align 16 %a131 = alloca { ptr, i64, i64 }, align 16 %a132 = alloca { ptr, i64, i64 }, align 16 %a133 = alloca { ptr, i64, i64 }, align 16 %a136 = alloca { ptr, i64, i64 }, align 16 %a139 = alloca { ptr, i64, i64 }, align 16 %a140 = alloca { ptr, i64, i64 }, align 16 %a141 = alloca { ptr, i64, i64 }, align 16 %a143 = alloca { ptr, i64, i64 }, align 16 %a144 = alloca { ptr, i64, i64 }, align 16 %a145 = alloca { ptr, i64, i64 }, align 16 %a148 = alloca { ptr, i64, i64 }, align 16 %a152 = alloca { ptr, i64, i64 }, align 16 %a156 = alloca { ptr, i64, i64 }, align 16 %a157 = alloca { ptr, i64, i64 }, align 16 %a158 = alloca { ptr, i64, i64 }, align 16 %a160 = alloca { ptr, i64, i64 }, align 16 %a161 = alloca { ptr, i64, i64 }, align 16 %a162 = alloca { ptr, i64, i64 }, align 16 %a165 = alloca { ptr, i64, i64 }, align 16 %a166 = alloca { ptr, i64, i64 }, align 16 %a167 = alloca { ptr, i64, i64 }, align 16 %a171 = alloca { ptr, i64, i64 }, align 16 %a172 = alloca { ptr, i64, i64 }, align 16 %a173 = alloca { ptr, i64, i64 }, align 16 %a175 = alloca { ptr, i64, i64 }, align 16 %a176 = alloca { ptr, i64, i64 }, align 16 %a177 = alloca { ptr, i64, i64 }, align 16 %a180 = alloca { ptr, i64, i64 }, align 16 %a181 = alloca { ptr, i64, i64 }, align 16 %a182 = alloca { ptr, i64, i64 }, align 16 %a185 = alloca { ptr, i64, i64 }, align 16 %a186 = alloca { ptr, i64, i64 }, align 16 %a191 = alloca { ptr, i64, i64 }, align 16 %a192 = alloca { ptr, i64, i64 }, align 16 %a193 = alloca { ptr, i64, i64 }, align 16 %a195 = alloca { ptr, i64, i64 }, align 16 %a196 = alloca { ptr, i64, i64 }, align 16 %a197 = alloca { ptr, i64, i64 }, align 16 %a200 = alloca { ptr, i64, i64 }, align 16 %a203 = alloca { ptr, i64, i64 }, align 16 %a206 = alloca { ptr, i64, i64 }, align 16 %a209 = alloca { ptr, i64, i64 }, align 16 %a224 = alloca { ptr, i64, i64 }, align 16 %a225 = alloca { ptr, i64, i64 }, align 16 %a226 = alloca { ptr, i64, i64 }, align 16 %a228 = alloca { ptr, i64, i64 }, align 16 %a229 = alloca { ptr, i64, i64 }, align 16 %a230 = alloca { ptr, i64, i64 }, align 16 %a233 = alloca { ptr, i64, i64 }, align 16 %a234 = alloca { ptr, i64, i64 }, align 16 %a235 = alloca { ptr, i64, i64 }, align 16 %a242 = alloca { ptr, i64, i64 }, align 16 %a243 = alloca { ptr, i64, i64 }, align 16 %a249 = alloca { ptr, i64, i64 }, align 16 %a259 = alloca { ptr, i64, i64 }, align 16 %a260 = alloca { ptr, i64, i64 }, align 16 %a261 = alloca { ptr, i64, i64 }, align 16 %a263 = alloca { ptr, i64, i64 }, align 16 %a264 = alloca { ptr, i64, i64 }, align 16 %a265 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store %S.ast.Type %p2, ptr %a3 store i1 %p3, ptr %a4 %t5 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 %t6 = load { ptr, i64, i64 }, ptr %t5 store { ptr, i64, i64 } %t6, ptr %a7 call void @finch_str_copy(ptr %a8, ptr %a7) %t9 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t9, ptr %a10 %t11 = load %S.ast.Type, ptr %a3 %t12 = call i1 @finch.gen.isSigned(%S.ast.Type %t11) br i1 %t12, label %then2655, label %else2656 then2655: %t13 = load ptr, ptr %a1 %t14 = load ptr, ptr %a1 %t15 = load { ptr, i64, i64 }, ptr %a2 %t16 = load %S.ast.Type, ptr %a3 %t17 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.1629, i64 3, i64 0 }) %t18 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t14, { ptr, i64, i64 } %t15, %S.ast.Type %t16, %S.ast.Type %t17) store { ptr, i64, i64 } { ptr @.str.1628, i64 4, i64 0 }, ptr %a20 store { ptr, i64, i64 } %t18, ptr %a21 call void @finch_str_concat(ptr %a19, ptr %a20, ptr %a21) %t22 = load { ptr, i64, i64 }, ptr %a19 call void @finch.gen.printf(ptr %t13, { ptr, i64, i64 } { ptr @.str.1627, i64 4, i64 0 }, { ptr, i64, i64 } %t22) br label %endif2657 else2656: %t23 = load %S.ast.Type, ptr %a3 %t24 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t23) br i1 %t24, label %then2658, label %else2659 then2658: %t25 = load ptr, ptr %a1 %t26 = load ptr, ptr %a1 %t27 = load { ptr, i64, i64 }, ptr %a2 %t28 = load %S.ast.Type, ptr %a3 %t29 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.1632, i64 3, i64 0 }) %t30 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t26, { ptr, i64, i64 } %t27, %S.ast.Type %t28, %S.ast.Type %t29) store { ptr, i64, i64 } { ptr @.str.1631, i64 4, i64 0 }, ptr %a32 store { ptr, i64, i64 } %t30, ptr %a33 call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33) %t34 = load { ptr, i64, i64 }, ptr %a31 call void @finch.gen.printf(ptr %t25, { ptr, i64, i64 } { ptr @.str.1630, i64 4, i64 0 }, { ptr, i64, i64 } %t34) br label %endif2660 else2659: %t35 = load %S.ast.Type, ptr %a3 %t36 = call i1 @finch.gen.isFloat(%S.ast.Type %t35) br i1 %t36, label %then2661, label %else2662 then2661: %t37 = load ptr, ptr %a1 %t38 = load ptr, ptr %a1 %t39 = load { ptr, i64, i64 }, ptr %a2 %t40 = load %S.ast.Type, ptr %a3 %t41 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.1635, i64 5, i64 0 }) %t42 = call { ptr, i64, i64 } @finch.gen.floatCast(ptr %t38, { ptr, i64, i64 } %t39, %S.ast.Type %t40, %S.ast.Type %t41) store { ptr, i64, i64 } { ptr @.str.1634, i64 7, i64 0 }, ptr %a44 store { ptr, i64, i64 } %t42, ptr %a45 call void @finch_str_concat(ptr %a43, ptr %a44, ptr %a45) %t46 = load { ptr, i64, i64 }, ptr %a43 call void @finch.gen.printf(ptr %t37, { ptr, i64, i64 } { ptr @.str.1633, i64 2, i64 0 }, { ptr, i64, i64 } %t46) br label %endif2663 else2662: %t47 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t47, ptr %a48 store { ptr, i64, i64 } { ptr @.str.1636, i64 4, i64 0 }, ptr %a49 %t50 = call i32 @finch_str_eq(ptr %a48, ptr %a49) %t51 = icmp ne i32 %t50, 0 br i1 %t51, label %then2664, label %else2665 then2664: %t52 = load ptr, ptr %a1 %t53 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.1637, i64 8, i64 0 }, ptr %a55 store { ptr, i64, i64 } %t53, ptr %a56 call void @finch_str_concat(ptr %a54, ptr %a55, ptr %a56) %t57 = load { ptr, i64, i64 }, ptr %a54 store { ptr, i64, i64 } %t57, ptr %a59 store { ptr, i64, i64 } { ptr @.str.1638, i64 7, i64 0 }, ptr %a60 call void @finch_str_concat(ptr %a58, ptr %a59, ptr %a60) %t61 = load { ptr, i64, i64 }, ptr %a58 %t62 = call { ptr, i64, i64 } @finch.gen.op(ptr %t52, { ptr, i64, i64 } %t61) store { ptr, i64, i64 } %t62, ptr %a63 %t64 = load i1, ptr %a4 br i1 %t64, label %then2667, label %else2668 then2667: %t65 = load ptr, ptr %a1 %t66 = load { ptr, i64, i64 }, ptr %a63 store { ptr, i64, i64 } { ptr @.str.1640, i64 4, i64 0 }, ptr %a68 store { ptr, i64, i64 } %t66, ptr %a69 call void @finch_str_concat(ptr %a67, ptr %a68, ptr %a69) %t70 = load { ptr, i64, i64 }, ptr %a67 call void @finch.gen.printf(ptr %t65, { ptr, i64, i64 } { ptr @.str.1639, i64 4, i64 0 }, { ptr, i64, i64 } %t70) br label %endif2669 else2668: %t71 = load ptr, ptr %a1 %t72 = load { ptr, i64, i64 }, ptr %a63 store { ptr, i64, i64 } { ptr @.str.1642, i64 4, i64 0 }, ptr %a74 store { ptr, i64, i64 } %t72, ptr %a75 call void @finch_str_concat(ptr %a73, ptr %a74, ptr %a75) %t76 = load { ptr, i64, i64 }, ptr %a73 call void @finch.gen.printf(ptr %t71, { ptr, i64, i64 } { ptr @.str.1641, i64 2, i64 0 }, { ptr, i64, i64 } %t76) br label %endif2669 endif2669: br label %endif2666 else2665: %t77 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t77, ptr %a78 store { ptr, i64, i64 } { ptr @.str.1643, i64 4, i64 0 }, ptr %a79 %t80 = call i32 @finch_str_eq(ptr %a78, ptr %a79) %t81 = icmp ne i32 %t80, 0 br i1 %t81, label %then2670, label %else2671 then2670: %t82 = load ptr, ptr %a1 %t83 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t82, { ptr, i64, i64 } { ptr @.str.1644, i64 4, i64 0 }) store { ptr, i64, i64 } %t83, ptr %a84 %t85 = load ptr, ptr %a1 %t86 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t85, { ptr, i64, i64 } { ptr @.str.1645, i64 5, i64 0 }) store { ptr, i64, i64 } %t86, ptr %a87 %t88 = load ptr, ptr %a1 %t89 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.1646, i64 10, i64 0 }, ptr %a91 store { ptr, i64, i64 } %t89, ptr %a92 call void @finch_str_concat(ptr %a90, ptr %a91, ptr %a92) %t93 = load { ptr, i64, i64 }, ptr %a90 store { ptr, i64, i64 } %t93, ptr %a95 store { ptr, i64, i64 } { ptr @.str.1647, i64 6, i64 0 }, ptr %a96 call void @finch_str_concat(ptr %a94, ptr %a95, ptr %a96) %t97 = load { ptr, i64, i64 }, ptr %a94 %t98 = load { ptr, i64, i64 }, ptr %a84 store { ptr, i64, i64 } %t97, ptr %a100 store { ptr, i64, i64 } %t98, ptr %a101 call void @finch_str_concat(ptr %a99, ptr %a100, ptr %a101) %t102 = load { ptr, i64, i64 }, ptr %a99 store { ptr, i64, i64 } %t102, ptr %a104 store { ptr, i64, i64 } { ptr @.str.1648, i64 6, i64 0 }, ptr %a105 call void @finch_str_concat(ptr %a103, ptr %a104, ptr %a105) %t106 = load { ptr, i64, i64 }, ptr %a103 %t107 = load { ptr, i64, i64 }, ptr %a87 store { ptr, i64, i64 } %t106, ptr %a109 store { ptr, i64, i64 } %t107, ptr %a110 call void @finch_str_concat(ptr %a108, ptr %a109, ptr %a110) %t111 = load { ptr, i64, i64 }, ptr %a108 %t112 = call { ptr, i64, i64 } @finch.gen.op(ptr %t88, { ptr, i64, i64 } %t111) store { ptr, i64, i64 } %t112, ptr %a113 %t114 = load ptr, ptr %a1 %t115 = load { ptr, i64, i64 }, ptr %a113 store { ptr, i64, i64 } { ptr @.str.1650, i64 4, i64 0 }, ptr %a117 store { ptr, i64, i64 } %t115, ptr %a118 call void @finch_str_concat(ptr %a116, ptr %a117, ptr %a118) %t119 = load { ptr, i64, i64 }, ptr %a116 call void @finch.gen.printf(ptr %t114, { ptr, i64, i64 } { ptr @.str.1649, i64 2, i64 0 }, { ptr, i64, i64 } %t119) br label %endif2672 else2671: %t120 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t120, ptr %a121 store { ptr, i64, i64 } { ptr @.str.1651, i64 3, i64 0 }, ptr %a122 %t123 = call i32 @finch_str_eq(ptr %a121, ptr %a122) %t124 = icmp ne i32 %t123, 0 br i1 %t124, label %then2673, label %else2674 then2673: %t125 = load ptr, ptr %a1 %t126 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.1652, i64 31, i64 0 }, ptr %a128 store { ptr, i64, i64 } %t126, ptr %a129 call void @finch_str_concat(ptr %a127, ptr %a128, ptr %a129) %t130 = load { ptr, i64, i64 }, ptr %a127 store { ptr, i64, i64 } %t130, ptr %a132 store { ptr, i64, i64 } { ptr @.str.1653, i64 3, i64 0 }, ptr %a133 call void @finch_str_concat(ptr %a131, ptr %a132, ptr %a133) %t134 = load { ptr, i64, i64 }, ptr %a131 %t135 = call { ptr, i64, i64 } @finch.gen.op(ptr %t125, { ptr, i64, i64 } %t134) store { ptr, i64, i64 } %t135, ptr %a136 %t137 = load ptr, ptr %a1 %t138 = load { ptr, i64, i64 }, ptr %a136 store { ptr, i64, i64 } { ptr @.str.1654, i64 10, i64 0 }, ptr %a140 store { ptr, i64, i64 } %t138, ptr %a141 call void @finch_str_concat(ptr %a139, ptr %a140, ptr %a141) %t142 = load { ptr, i64, i64 }, ptr %a139 store { ptr, i64, i64 } %t142, ptr %a144 store { ptr, i64, i64 } { ptr @.str.1655, i64 7, i64 0 }, ptr %a145 call void @finch_str_concat(ptr %a143, ptr %a144, ptr %a145) %t146 = load { ptr, i64, i64 }, ptr %a143 %t147 = call { ptr, i64, i64 } @finch.gen.op(ptr %t137, { ptr, i64, i64 } %t146) store { ptr, i64, i64 } %t147, ptr %a148 %t149 = load ptr, ptr %a1 %t150 = load { ptr, i64, i64 }, ptr %a2 %t151 = call { ptr, i64, i64 } @finch.gen.cstr(ptr %t149, { ptr, i64, i64 } %t150) store { ptr, i64, i64 } %t151, ptr %a152 %t153 = load i1, ptr %a4 br i1 %t153, label %then2676, label %else2677 then2676: %t154 = load ptr, ptr %a1 %t155 = load { ptr, i64, i64 }, ptr %a148 store { ptr, i64, i64 } { ptr @.str.1657, i64 4, i64 0 }, ptr %a157 store { ptr, i64, i64 } %t155, ptr %a158 call void @finch_str_concat(ptr %a156, ptr %a157, ptr %a158) %t159 = load { ptr, i64, i64 }, ptr %a156 store { ptr, i64, i64 } %t159, ptr %a161 store { ptr, i64, i64 } { ptr @.str.1658, i64 6, i64 0 }, ptr %a162 call void @finch_str_concat(ptr %a160, ptr %a161, ptr %a162) %t163 = load { ptr, i64, i64 }, ptr %a160 %t164 = load { ptr, i64, i64 }, ptr %a152 store { ptr, i64, i64 } %t163, ptr %a166 store { ptr, i64, i64 } %t164, ptr %a167 call void @finch_str_concat(ptr %a165, ptr %a166, ptr %a167) %t168 = load { ptr, i64, i64 }, ptr %a165 call void @finch.gen.printf(ptr %t154, { ptr, i64, i64 } { ptr @.str.1656, i64 6, i64 0 }, { ptr, i64, i64 } %t168) br label %endif2678 else2677: %t169 = load ptr, ptr %a1 %t170 = load { ptr, i64, i64 }, ptr %a148 store { ptr, i64, i64 } { ptr @.str.1660, i64 4, i64 0 }, ptr %a172 store { ptr, i64, i64 } %t170, ptr %a173 call void @finch_str_concat(ptr %a171, ptr %a172, ptr %a173) %t174 = load { ptr, i64, i64 }, ptr %a171 store { ptr, i64, i64 } %t174, ptr %a176 store { ptr, i64, i64 } { ptr @.str.1661, i64 6, i64 0 }, ptr %a177 call void @finch_str_concat(ptr %a175, ptr %a176, ptr %a177) %t178 = load { ptr, i64, i64 }, ptr %a175 %t179 = load { ptr, i64, i64 }, ptr %a152 store { ptr, i64, i64 } %t178, ptr %a181 store { ptr, i64, i64 } %t179, ptr %a182 call void @finch_str_concat(ptr %a180, ptr %a181, ptr %a182) %t183 = load { ptr, i64, i64 }, ptr %a180 call void @finch.gen.printf(ptr %t169, { ptr, i64, i64 } { ptr @.str.1659, i64 4, i64 0 }, { ptr, i64, i64 } %t183) br label %endif2678 endif2678: br label %endif2675 else2674: %t184 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t184, ptr %a185 store { ptr, i64, i64 } { ptr @.str.1662, i64 3, i64 0 }, ptr %a186 %t187 = call i32 @finch_str_eq(ptr %a185, ptr %a186) %t188 = icmp ne i32 %t187, 0 br i1 %t188, label %then2679, label %else2680 then2679: %t189 = load ptr, ptr %a1 %t190 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.1663, i64 12, i64 0 }, ptr %a192 store { ptr, i64, i64 } %t190, ptr %a193 call void @finch_str_concat(ptr %a191, ptr %a192, ptr %a193) %t194 = load { ptr, i64, i64 }, ptr %a191 store { ptr, i64, i64 } %t194, ptr %a196 store { ptr, i64, i64 } { ptr @.str.1664, i64 6, i64 0 }, ptr %a197 call void @finch_str_concat(ptr %a195, ptr %a196, ptr %a197) %t198 = load { ptr, i64, i64 }, ptr %a195 %t199 = call { ptr, i64, i64 } @finch.gen.op(ptr %t189, { ptr, i64, i64 } %t198) store { ptr, i64, i64 } %t199, ptr %a200 %t201 = load ptr, ptr %a1 %t202 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t201, { ptr, i64, i64 } { ptr @.str.1665, i64 8, i64 0 }) store { ptr, i64, i64 } %t202, ptr %a203 %t204 = load ptr, ptr %a1 %t205 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t204, { ptr, i64, i64 } { ptr @.str.1666, i64 8, i64 0 }) store { ptr, i64, i64 } %t205, ptr %a206 %t207 = load ptr, ptr %a1 %t208 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t207, { ptr, i64, i64 } { ptr @.str.1667, i64 8, i64 0 }) store { ptr, i64, i64 } %t208, ptr %a209 %t210 = load ptr, ptr %a1 %t211 = load { ptr, i64, i64 }, ptr %a200 %t212 = load { ptr, i64, i64 }, ptr %a203 %t213 = load { ptr, i64, i64 }, ptr %a206 call void @finch.gen.condBr(ptr %t210, { ptr, i64, i64 } %t211, { ptr, i64, i64 } %t212, { ptr, i64, i64 } %t213) %t214 = load ptr, ptr %a1 %t215 = load { ptr, i64, i64 }, ptr %a203 call void @finch.gen.label(ptr %t214, { ptr, i64, i64 } %t215) %t216 = load ptr, ptr %a1 call void @finch.gen.printf(ptr %t216, { ptr, i64, i64 } { ptr @.str.1668, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1669, i64 0, i64 0 }) %t217 = load ptr, ptr %a1 %t218 = load { ptr, i64, i64 }, ptr %a209 call void @finch.gen.br(ptr %t217, { ptr, i64, i64 } %t218) %t219 = load ptr, ptr %a1 %t220 = load { ptr, i64, i64 }, ptr %a206 call void @finch.gen.label(ptr %t219, { ptr, i64, i64 } %t220) %t221 = load ptr, ptr %a1 %t222 = load ptr, ptr %a1 %t223 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.1672, i64 13, i64 0 }, ptr %a225 store { ptr, i64, i64 } %t223, ptr %a226 call void @finch_str_concat(ptr %a224, ptr %a225, ptr %a226) %t227 = load { ptr, i64, i64 }, ptr %a224 store { ptr, i64, i64 } %t227, ptr %a229 store { ptr, i64, i64 } { ptr @.str.1673, i64 7, i64 0 }, ptr %a230 call void @finch_str_concat(ptr %a228, ptr %a229, ptr %a230) %t231 = load { ptr, i64, i64 }, ptr %a228 %t232 = call { ptr, i64, i64 } @finch.gen.op(ptr %t222, { ptr, i64, i64 } %t231) store { ptr, i64, i64 } { ptr @.str.1671, i64 4, i64 0 }, ptr %a234 store { ptr, i64, i64 } %t232, ptr %a235 call void @finch_str_concat(ptr %a233, ptr %a234, ptr %a235) %t236 = load { ptr, i64, i64 }, ptr %a233 call void @finch.gen.printf(ptr %t221, { ptr, i64, i64 } { ptr @.str.1670, i64 6, i64 0 }, { ptr, i64, i64 } %t236) %t237 = load ptr, ptr %a1 %t238 = load { ptr, i64, i64 }, ptr %a209 call void @finch.gen.br(ptr %t237, { ptr, i64, i64 } %t238) %t239 = load ptr, ptr %a1 %t240 = load { ptr, i64, i64 }, ptr %a209 call void @finch.gen.label(ptr %t239, { ptr, i64, i64 } %t240) br label %endif2681 else2680: %t241 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t241, ptr %a242 store { ptr, i64, i64 } { ptr @.str.1674, i64 4, i64 0 }, ptr %a243 %t244 = call i32 @finch_str_eq(ptr %a242, ptr %a243) %t245 = icmp ne i32 %t244, 0 br i1 %t245, label %then2682, label %else2683 then2682: %t246 = load ptr, ptr %a1 call void @finch.gen.printf(ptr %t246, { ptr, i64, i64 } { ptr @.str.1675, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1676, i64 0, i64 0 }) br label %endif2684 else2683: %t247 = load ptr, ptr %a1 %t248 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t247, { ptr, i64, i64 } { ptr @.str.1677, i64 17, i64 0 }) store { ptr, i64, i64 } %t248, ptr %a249 %t250 = load ptr, ptr %a1 %t251 = load { ptr, i64, i64 }, ptr %a249 call void @finch.gen.store(ptr %t250, { ptr, i64, i64 } { ptr @.str.1678, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.1679, i64 15, i64 0 }, { ptr, i64, i64 } %t251) %t252 = load ptr, ptr %a1 %t253 = load { ptr, i64, i64 }, ptr %a249 %t254 = load { ptr, i64, i64 }, ptr %a2 %t255 = load %S.ast.Type, ptr %a3 %t256 = load i1, ptr %a4 call void @finch.gen.emitFormat(ptr %t252, { ptr, i64, i64 } %t253, { ptr, i64, i64 } %t254, %S.ast.Type %t255, i1 %t256) %t257 = load ptr, ptr %a1 %t258 = load { ptr, i64, i64 }, ptr %a249 store { ptr, i64, i64 } { ptr @.str.1680, i64 31, i64 0 }, ptr %a260 store { ptr, i64, i64 } %t258, ptr %a261 call void @finch_str_concat(ptr %a259, ptr %a260, ptr %a261) %t262 = load { ptr, i64, i64 }, ptr %a259 store { ptr, i64, i64 } %t262, ptr %a264 store { ptr, i64, i64 } { ptr @.str.1681, i64 1, i64 0 }, ptr %a265 call void @finch_str_concat(ptr %a263, ptr %a264, ptr %a265) %t266 = load { ptr, i64, i64 }, ptr %a263 call void @finch.gen.emit(ptr %t257, { ptr, i64, i64 } %t266) br label %endif2684 endif2684: br label %endif2681 endif2681: br label %endif2675 endif2675: br label %endif2672 endif2672: br label %endif2666 endif2666: br label %endif2663 endif2663: br label %endif2660 endif2660: br label %endif2657 endif2657: ret void } define internal void @finch.gen.bufText(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.1682, i64 29, i64 0 }, ptr %a7 store { ptr, i64, i64 } %t5, ptr %a8 call void @finch_str_concat(ptr %a6, ptr %a7, ptr %a8) %t9 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t9, ptr %a11 store { ptr, i64, i64 } { ptr @.str.1683, i64 6, i64 0 }, ptr %a12 call void @finch_str_concat(ptr %a10, ptr %a11, ptr %a12) %t13 = load { ptr, i64, i64 }, ptr %a10 %t14 = load ptr, ptr %a1 %t15 = load { ptr, i64, i64 }, ptr %a3 %t16 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t14, { ptr, i64, i64 } %t15) store { ptr, i64, i64 } %t13, ptr %a18 store { ptr, i64, i64 } %t16, ptr %a19 call void @finch_str_concat(ptr %a17, ptr %a18, ptr %a19) %t20 = load { ptr, i64, i64 }, ptr %a17 store { ptr, i64, i64 } %t20, ptr %a22 store { ptr, i64, i64 } { ptr @.str.1684, i64 6, i64 0 }, ptr %a23 call void @finch_str_concat(ptr %a21, ptr %a22, ptr %a23) %t24 = load { ptr, i64, i64 }, ptr %a21 %t25 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 %t26 = load i64, ptr %t25 call void @finch_str_from_int(ptr %a27, i64 %t26) %t28 = load { ptr, i64, i64 }, ptr %a27 store { ptr, i64, i64 } %t24, ptr %a30 store { ptr, i64, i64 } %t28, ptr %a31 call void @finch_str_concat(ptr %a29, ptr %a30, ptr %a31) %t32 = load { ptr, i64, i64 }, ptr %a29 store { ptr, i64, i64 } %t32, ptr %a34 store { ptr, i64, i64 } { ptr @.str.1685, i64 1, i64 0 }, ptr %a35 call void @finch_str_concat(ptr %a33, ptr %a34, ptr %a35) %t36 = load { ptr, i64, i64 }, ptr %a33 call void @finch.gen.emit(ptr %t4, { ptr, i64, i64 } %t36) ret void } define internal void @finch.gen.emitFormat(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, %S.ast.Type %p3, i1 %p4) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca %S.ast.Type, align 16 %a5 = alloca i1, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a85 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca { ptr, i64, i64 }, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 %a106 = alloca { ptr, i64, i64 }, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca { ptr, i64, i64 }, align 16 %a110 = alloca { ptr, i64, i64 }, align 16 %a111 = alloca { ptr, i64, i64 }, align 16 %a114 = alloca { ptr, i64, i64 }, align 16 %a115 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca { ptr, i64, i64 }, align 16 %a118 = alloca { ptr, i64, i64 }, align 16 %a119 = alloca { ptr, i64, i64 }, align 16 %a120 = alloca { ptr, i64, i64 }, align 16 %a123 = alloca { ptr, i64, i64 }, align 16 %a124 = alloca { ptr, i64, i64 }, align 16 %a129 = alloca { ptr, i64, i64 }, align 16 %a130 = alloca { ptr, i64, i64 }, align 16 %a131 = alloca { ptr, i64, i64 }, align 16 %a133 = alloca { ptr, i64, i64 }, align 16 %a134 = alloca { ptr, i64, i64 }, align 16 %a135 = alloca { ptr, i64, i64 }, align 16 %a139 = alloca { ptr, i64, i64 }, align 16 %a140 = alloca { ptr, i64, i64 }, align 16 %a141 = alloca { ptr, i64, i64 }, align 16 %a143 = alloca { ptr, i64, i64 }, align 16 %a144 = alloca { ptr, i64, i64 }, align 16 %a145 = alloca { ptr, i64, i64 }, align 16 %a148 = alloca { ptr, i64, i64 }, align 16 %a149 = alloca { ptr, i64, i64 }, align 16 %a150 = alloca { ptr, i64, i64 }, align 16 %a152 = alloca { ptr, i64, i64 }, align 16 %a153 = alloca { ptr, i64, i64 }, align 16 %a154 = alloca { ptr, i64, i64 }, align 16 %a157 = alloca { ptr, i64, i64 }, align 16 %a158 = alloca { ptr, i64, i64 }, align 16 %a163 = alloca { ptr, i64, i64 }, align 16 %a164 = alloca { ptr, i64, i64 }, align 16 %a165 = alloca { ptr, i64, i64 }, align 16 %a167 = alloca { ptr, i64, i64 }, align 16 %a168 = alloca { ptr, i64, i64 }, align 16 %a169 = alloca { ptr, i64, i64 }, align 16 %a173 = alloca { ptr, i64, i64 }, align 16 %a174 = alloca { ptr, i64, i64 }, align 16 %a178 = alloca %S.ast.Type, align 16 %a179 = alloca %S.ast.Type, align 16 %a183 = alloca { ptr, i64, i64 }, align 16 %a184 = alloca { ptr, i64, i64 }, align 16 %a185 = alloca { ptr, i64, i64 }, align 16 %a187 = alloca { ptr, i64, i64 }, align 16 %a188 = alloca { ptr, i64, i64 }, align 16 %a189 = alloca { ptr, i64, i64 }, align 16 %a192 = alloca { ptr, i64, i64 }, align 16 %a193 = alloca { ptr, i64, i64 }, align 16 %a194 = alloca { ptr, i64, i64 }, align 16 %a196 = alloca { ptr, i64, i64 }, align 16 %a197 = alloca { ptr, i64, i64 }, align 16 %a198 = alloca { ptr, i64, i64 }, align 16 %a201 = alloca { ptr, i64, i64 }, align 16 %a202 = alloca { ptr, i64, i64 }, align 16 %a206 = alloca { ptr, i64, i64 }, align 16 %a207 = alloca { ptr, i64, i64 }, align 16 %a213 = alloca { ptr, i64, i64 }, align 16 %a214 = alloca { ptr, i64, i64 }, align 16 %a215 = alloca { ptr, i64, i64 }, align 16 %a217 = alloca { ptr, i64, i64 }, align 16 %a218 = alloca { ptr, i64, i64 }, align 16 %a219 = alloca { ptr, i64, i64 }, align 16 %a222 = alloca { ptr, i64, i64 }, align 16 %a223 = alloca { ptr, i64, i64 }, align 16 %a224 = alloca { ptr, i64, i64 }, align 16 %a226 = alloca { ptr, i64, i64 }, align 16 %a227 = alloca { ptr, i64, i64 }, align 16 %a228 = alloca { ptr, i64, i64 }, align 16 %a234 = alloca { ptr, i64, i64 }, align 16 %a235 = alloca { ptr, i64, i64 }, align 16 %a236 = alloca { ptr, i64, i64 }, align 16 %a238 = alloca { ptr, i64, i64 }, align 16 %a239 = alloca { ptr, i64, i64 }, align 16 %a240 = alloca { ptr, i64, i64 }, align 16 %a243 = alloca { ptr, i64, i64 }, align 16 %a244 = alloca { ptr, i64, i64 }, align 16 %a245 = alloca { ptr, i64, i64 }, align 16 %a247 = alloca { ptr, i64, i64 }, align 16 %a248 = alloca { ptr, i64, i64 }, align 16 %a249 = alloca { ptr, i64, i64 }, align 16 %a253 = alloca { ptr, i64, i64 }, align 16 %a254 = alloca { ptr, i64, i64 }, align 16 %a258 = alloca %S.ast.Type, align 16 %a259 = alloca %S.ast.Type, align 16 %a263 = alloca { ptr, i64, i64 }, align 16 %a264 = alloca { ptr, i64, i64 }, align 16 %a265 = alloca { ptr, i64, i64 }, align 16 %a267 = alloca { ptr, i64, i64 }, align 16 %a268 = alloca { ptr, i64, i64 }, align 16 %a269 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 store %S.ast.Type %p3, ptr %a4 store i1 %p4, ptr %a5 %t6 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 0 %t7 = load { ptr, i64, i64 }, ptr %t6 store { ptr, i64, i64 } %t7, ptr %a8 call void @finch_str_copy(ptr %a9, ptr %a8) %t10 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t10, ptr %a11 store { ptr, i64, i64 } { ptr @.str.1686, i64 1, i64 0 }, ptr %a12 %t13 = load i1, ptr %a5 br i1 %t13, label %then2685, label %endif2687 then2685: store { ptr, i64, i64 } { ptr @.str.1687, i64 1, i64 0 }, ptr %a12 br label %endif2687 endif2687: %t14 = load %S.ast.Type, ptr %a4 %t15 = call i1 @finch.gen.isSigned(%S.ast.Type %t14) br i1 %t15, label %then2688, label %else2689 then2688: %t16 = load ptr, ptr %a1 %t17 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.1688, i64 29, i64 0 }, ptr %a19 store { ptr, i64, i64 } %t17, ptr %a20 call void @finch_str_concat(ptr %a18, ptr %a19, ptr %a20) %t21 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t21, ptr %a23 store { ptr, i64, i64 } { ptr @.str.1689, i64 6, i64 0 }, ptr %a24 call void @finch_str_concat(ptr %a22, ptr %a23, ptr %a24) %t25 = load { ptr, i64, i64 }, ptr %a22 %t26 = load ptr, ptr %a1 %t27 = load { ptr, i64, i64 }, ptr %a3 %t28 = load %S.ast.Type, ptr %a4 %t29 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.1690, i64 3, i64 0 }) %t30 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t26, { ptr, i64, i64 } %t27, %S.ast.Type %t28, %S.ast.Type %t29) store { ptr, i64, i64 } %t25, ptr %a32 store { ptr, i64, i64 } %t30, ptr %a33 call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33) %t34 = load { ptr, i64, i64 }, ptr %a31 store { ptr, i64, i64 } %t34, ptr %a36 store { ptr, i64, i64 } { ptr @.str.1691, i64 1, i64 0 }, ptr %a37 call void @finch_str_concat(ptr %a35, ptr %a36, ptr %a37) %t38 = load { ptr, i64, i64 }, ptr %a35 call void @finch.gen.emit(ptr %t16, { ptr, i64, i64 } %t38) br label %endif2690 else2689: %t39 = load %S.ast.Type, ptr %a4 %t40 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t39) br i1 %t40, label %then2691, label %else2692 then2691: %t41 = load ptr, ptr %a1 %t42 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.1692, i64 30, i64 0 }, ptr %a44 store { ptr, i64, i64 } %t42, ptr %a45 call void @finch_str_concat(ptr %a43, ptr %a44, ptr %a45) %t46 = load { ptr, i64, i64 }, ptr %a43 store { ptr, i64, i64 } %t46, ptr %a48 store { ptr, i64, i64 } { ptr @.str.1693, i64 6, i64 0 }, ptr %a49 call void @finch_str_concat(ptr %a47, ptr %a48, ptr %a49) %t50 = load { ptr, i64, i64 }, ptr %a47 %t51 = load ptr, ptr %a1 %t52 = load { ptr, i64, i64 }, ptr %a3 %t53 = load %S.ast.Type, ptr %a4 %t54 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.1694, i64 3, i64 0 }) %t55 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t51, { ptr, i64, i64 } %t52, %S.ast.Type %t53, %S.ast.Type %t54) store { ptr, i64, i64 } %t50, ptr %a57 store { ptr, i64, i64 } %t55, ptr %a58 call void @finch_str_concat(ptr %a56, ptr %a57, ptr %a58) %t59 = load { ptr, i64, i64 }, ptr %a56 store { ptr, i64, i64 } %t59, ptr %a61 store { ptr, i64, i64 } { ptr @.str.1695, i64 1, i64 0 }, ptr %a62 call void @finch_str_concat(ptr %a60, ptr %a61, ptr %a62) %t63 = load { ptr, i64, i64 }, ptr %a60 call void @finch.gen.emit(ptr %t41, { ptr, i64, i64 } %t63) br label %endif2693 else2692: %t64 = load %S.ast.Type, ptr %a4 %t65 = call i1 @finch.gen.isFloat(%S.ast.Type %t64) br i1 %t65, label %then2694, label %else2695 then2694: %t66 = load ptr, ptr %a1 %t67 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.1696, i64 31, i64 0 }, ptr %a69 store { ptr, i64, i64 } %t67, ptr %a70 call void @finch_str_concat(ptr %a68, ptr %a69, ptr %a70) %t71 = load { ptr, i64, i64 }, ptr %a68 store { ptr, i64, i64 } %t71, ptr %a73 store { ptr, i64, i64 } { ptr @.str.1697, i64 9, i64 0 }, ptr %a74 call void @finch_str_concat(ptr %a72, ptr %a73, ptr %a74) %t75 = load { ptr, i64, i64 }, ptr %a72 %t76 = load ptr, ptr %a1 %t77 = load { ptr, i64, i64 }, ptr %a3 %t78 = load %S.ast.Type, ptr %a4 %t79 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.1698, i64 5, i64 0 }) %t80 = call { ptr, i64, i64 } @finch.gen.floatCast(ptr %t76, { ptr, i64, i64 } %t77, %S.ast.Type %t78, %S.ast.Type %t79) store { ptr, i64, i64 } %t75, ptr %a82 store { ptr, i64, i64 } %t80, ptr %a83 call void @finch_str_concat(ptr %a81, ptr %a82, ptr %a83) %t84 = load { ptr, i64, i64 }, ptr %a81 store { ptr, i64, i64 } %t84, ptr %a86 store { ptr, i64, i64 } { ptr @.str.1699, i64 1, i64 0 }, ptr %a87 call void @finch_str_concat(ptr %a85, ptr %a86, ptr %a87) %t88 = load { ptr, i64, i64 }, ptr %a85 call void @finch.gen.emit(ptr %t66, { ptr, i64, i64 } %t88) br label %endif2696 else2695: %t89 = load { ptr, i64, i64 }, ptr %a11 store { ptr, i64, i64 } %t89, ptr %a90 store { ptr, i64, i64 } { ptr @.str.1700, i64 4, i64 0 }, ptr %a91 %t92 = call i32 @finch_str_eq(ptr %a90, ptr %a91) %t93 = icmp ne i32 %t92, 0 br i1 %t93, label %then2697, label %else2698 then2697: %t94 = load ptr, ptr %a1 %t95 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.1701, i64 30, i64 0 }, ptr %a97 store { ptr, i64, i64 } %t95, ptr %a98 call void @finch_str_concat(ptr %a96, ptr %a97, ptr %a98) %t99 = load { ptr, i64, i64 }, ptr %a96 store { ptr, i64, i64 } %t99, ptr %a101 store { ptr, i64, i64 } { ptr @.str.1702, i64 5, i64 0 }, ptr %a102 call void @finch_str_concat(ptr %a100, ptr %a101, ptr %a102) %t103 = load { ptr, i64, i64 }, ptr %a100 %t104 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t103, ptr %a106 store { ptr, i64, i64 } %t104, ptr %a107 call void @finch_str_concat(ptr %a105, ptr %a106, ptr %a107) %t108 = load { ptr, i64, i64 }, ptr %a105 store { ptr, i64, i64 } %t108, ptr %a110 store { ptr, i64, i64 } { ptr @.str.1703, i64 6, i64 0 }, ptr %a111 call void @finch_str_concat(ptr %a109, ptr %a110, ptr %a111) %t112 = load { ptr, i64, i64 }, ptr %a109 %t113 = load { ptr, i64, i64 }, ptr %a12 store { ptr, i64, i64 } %t112, ptr %a115 store { ptr, i64, i64 } %t113, ptr %a116 call void @finch_str_concat(ptr %a114, ptr %a115, ptr %a116) %t117 = load { ptr, i64, i64 }, ptr %a114 store { ptr, i64, i64 } %t117, ptr %a119 store { ptr, i64, i64 } { ptr @.str.1704, i64 1, i64 0 }, ptr %a120 call void @finch_str_concat(ptr %a118, ptr %a119, ptr %a120) %t121 = load { ptr, i64, i64 }, ptr %a118 call void @finch.gen.emit(ptr %t94, { ptr, i64, i64 } %t121) br label %endif2699 else2698: %t122 = load { ptr, i64, i64 }, ptr %a11 store { ptr, i64, i64 } %t122, ptr %a123 store { ptr, i64, i64 } { ptr @.str.1705, i64 4, i64 0 }, ptr %a124 %t125 = call i32 @finch_str_eq(ptr %a123, ptr %a124) %t126 = icmp ne i32 %t125, 0 br i1 %t126, label %then2700, label %else2701 then2700: %t127 = load ptr, ptr %a1 %t128 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.1706, i64 30, i64 0 }, ptr %a130 store { ptr, i64, i64 } %t128, ptr %a131 call void @finch_str_concat(ptr %a129, ptr %a130, ptr %a131) %t132 = load { ptr, i64, i64 }, ptr %a129 store { ptr, i64, i64 } %t132, ptr %a134 store { ptr, i64, i64 } { ptr @.str.1707, i64 6, i64 0 }, ptr %a135 call void @finch_str_concat(ptr %a133, ptr %a134, ptr %a135) %t136 = load { ptr, i64, i64 }, ptr %a133 %t137 = load ptr, ptr %a1 %t138 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } { ptr @.str.1708, i64 8, i64 0 }, ptr %a140 store { ptr, i64, i64 } %t138, ptr %a141 call void @finch_str_concat(ptr %a139, ptr %a140, ptr %a141) %t142 = load { ptr, i64, i64 }, ptr %a139 store { ptr, i64, i64 } %t142, ptr %a144 store { ptr, i64, i64 } { ptr @.str.1709, i64 7, i64 0 }, ptr %a145 call void @finch_str_concat(ptr %a143, ptr %a144, ptr %a145) %t146 = load { ptr, i64, i64 }, ptr %a143 %t147 = call { ptr, i64, i64 } @finch.gen.op(ptr %t137, { ptr, i64, i64 } %t146) store { ptr, i64, i64 } %t136, ptr %a149 store { ptr, i64, i64 } %t147, ptr %a150 call void @finch_str_concat(ptr %a148, ptr %a149, ptr %a150) %t151 = load { ptr, i64, i64 }, ptr %a148 store { ptr, i64, i64 } %t151, ptr %a153 store { ptr, i64, i64 } { ptr @.str.1710, i64 1, i64 0 }, ptr %a154 call void @finch_str_concat(ptr %a152, ptr %a153, ptr %a154) %t155 = load { ptr, i64, i64 }, ptr %a152 call void @finch.gen.emit(ptr %t127, { ptr, i64, i64 } %t155) br label %endif2702 else2701: %t156 = load { ptr, i64, i64 }, ptr %a11 store { ptr, i64, i64 } %t156, ptr %a157 store { ptr, i64, i64 } { ptr @.str.1711, i64 3, i64 0 }, ptr %a158 %t159 = call i32 @finch_str_eq(ptr %a157, ptr %a158) %t160 = icmp ne i32 %t159, 0 br i1 %t160, label %then2703, label %else2704 then2703: %t161 = load ptr, ptr %a1 %t162 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.1712, i64 29, i64 0 }, ptr %a164 store { ptr, i64, i64 } %t162, ptr %a165 call void @finch_str_concat(ptr %a163, ptr %a164, ptr %a165) %t166 = load { ptr, i64, i64 }, ptr %a163 store { ptr, i64, i64 } %t166, ptr %a168 store { ptr, i64, i64 } { ptr @.str.1713, i64 6, i64 0 }, ptr %a169 call void @finch_str_concat(ptr %a167, ptr %a168, ptr %a169) %t170 = load { ptr, i64, i64 }, ptr %a167 %t171 = load ptr, ptr %a1 %t172 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t172, ptr %a173 call void @finch_str_copy(ptr %a174, ptr %a173) %t175 = load { ptr, i64, i64 }, ptr %a174 %t176 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t175, 0 %t177 = load %S.ast.Type, ptr %a4 store %S.ast.Type %t177, ptr %a178 call void @finch.copy.S_ast_Type(ptr %a179, ptr %a178) %t180 = load %S.ast.Type, ptr %a179 %t181 = insertvalue %S.gen.Val %t176, %S.ast.Type %t180, 1 %t182 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t171, %S.gen.Val %t181) store { ptr, i64, i64 } %t170, ptr %a184 store { ptr, i64, i64 } %t182, ptr %a185 call void @finch_str_concat(ptr %a183, ptr %a184, ptr %a185) %t186 = load { ptr, i64, i64 }, ptr %a183 store { ptr, i64, i64 } %t186, ptr %a188 store { ptr, i64, i64 } { ptr @.str.1714, i64 6, i64 0 }, ptr %a189 call void @finch_str_concat(ptr %a187, ptr %a188, ptr %a189) %t190 = load { ptr, i64, i64 }, ptr %a187 %t191 = load { ptr, i64, i64 }, ptr %a12 store { ptr, i64, i64 } %t190, ptr %a193 store { ptr, i64, i64 } %t191, ptr %a194 call void @finch_str_concat(ptr %a192, ptr %a193, ptr %a194) %t195 = load { ptr, i64, i64 }, ptr %a192 store { ptr, i64, i64 } %t195, ptr %a197 store { ptr, i64, i64 } { ptr @.str.1715, i64 1, i64 0 }, ptr %a198 call void @finch_str_concat(ptr %a196, ptr %a197, ptr %a198) %t199 = load { ptr, i64, i64 }, ptr %a196 call void @finch.gen.emit(ptr %t161, { ptr, i64, i64 } %t199) br label %endif2705 else2704: %t200 = load { ptr, i64, i64 }, ptr %a11 store { ptr, i64, i64 } %t200, ptr %a201 store { ptr, i64, i64 } { ptr @.str.1716, i64 3, i64 0 }, ptr %a202 %t203 = call i32 @finch_str_eq(ptr %a201, ptr %a202) %t204 = icmp ne i32 %t203, 0 br label %logic.from2706 logic.from2706: br i1 %t204, label %logic.end2708, label %logic.rhs2707 logic.rhs2707: %t205 = load { ptr, i64, i64 }, ptr %a11 store { ptr, i64, i64 } %t205, ptr %a206 store { ptr, i64, i64 } { ptr @.str.1717, i64 4, i64 0 }, ptr %a207 %t208 = call i32 @finch_str_eq(ptr %a206, ptr %a207) %t209 = icmp ne i32 %t208, 0 br label %logic.rend2709 logic.rend2709: br label %logic.end2708 logic.end2708: %t210 = phi i1 [ true, %logic.from2706 ], [ %t209, %logic.rend2709 ] br i1 %t210, label %then2710, label %else2711 then2710: %t211 = load ptr, ptr %a1 %t212 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.1718, i64 29, i64 0 }, ptr %a214 store { ptr, i64, i64 } %t212, ptr %a215 call void @finch_str_concat(ptr %a213, ptr %a214, ptr %a215) %t216 = load { ptr, i64, i64 }, ptr %a213 store { ptr, i64, i64 } %t216, ptr %a218 store { ptr, i64, i64 } { ptr @.str.1719, i64 6, i64 0 }, ptr %a219 call void @finch_str_concat(ptr %a217, ptr %a218, ptr %a219) %t220 = load { ptr, i64, i64 }, ptr %a217 %t221 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t220, ptr %a223 store { ptr, i64, i64 } %t221, ptr %a224 call void @finch_str_concat(ptr %a222, ptr %a223, ptr %a224) %t225 = load { ptr, i64, i64 }, ptr %a222 store { ptr, i64, i64 } %t225, ptr %a227 store { ptr, i64, i64 } { ptr @.str.1720, i64 1, i64 0 }, ptr %a228 call void @finch_str_concat(ptr %a226, ptr %a227, ptr %a228) %t229 = load { ptr, i64, i64 }, ptr %a226 call void @finch.gen.emit(ptr %t211, { ptr, i64, i64 } %t229) br label %endif2712 else2711: %t230 = load ptr, ptr %a1 %t231 = load ptr, ptr %a1 %t232 = load %S.ast.Type, ptr %a4 %t233 = call { ptr, i64, i64 } @finch.gen.formatFn(ptr %t231, %S.ast.Type %t232) store { ptr, i64, i64 } { ptr @.str.1721, i64 10, i64 0 }, ptr %a235 store { ptr, i64, i64 } %t233, ptr %a236 call void @finch_str_concat(ptr %a234, ptr %a235, ptr %a236) %t237 = load { ptr, i64, i64 }, ptr %a234 store { ptr, i64, i64 } %t237, ptr %a239 store { ptr, i64, i64 } { ptr @.str.1722, i64 5, i64 0 }, ptr %a240 call void @finch_str_concat(ptr %a238, ptr %a239, ptr %a240) %t241 = load { ptr, i64, i64 }, ptr %a238 %t242 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t241, ptr %a244 store { ptr, i64, i64 } %t242, ptr %a245 call void @finch_str_concat(ptr %a243, ptr %a244, ptr %a245) %t246 = load { ptr, i64, i64 }, ptr %a243 store { ptr, i64, i64 } %t246, ptr %a248 store { ptr, i64, i64 } { ptr @.str.1723, i64 6, i64 0 }, ptr %a249 call void @finch_str_concat(ptr %a247, ptr %a248, ptr %a249) %t250 = load { ptr, i64, i64 }, ptr %a247 %t251 = load ptr, ptr %a1 %t252 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t252, ptr %a253 call void @finch_str_copy(ptr %a254, ptr %a253) %t255 = load { ptr, i64, i64 }, ptr %a254 %t256 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t255, 0 %t257 = load %S.ast.Type, ptr %a4 store %S.ast.Type %t257, ptr %a258 call void @finch.copy.S_ast_Type(ptr %a259, ptr %a258) %t260 = load %S.ast.Type, ptr %a259 %t261 = insertvalue %S.gen.Val %t256, %S.ast.Type %t260, 1 %t262 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t251, %S.gen.Val %t261) store { ptr, i64, i64 } %t250, ptr %a264 store { ptr, i64, i64 } %t262, ptr %a265 call void @finch_str_concat(ptr %a263, ptr %a264, ptr %a265) %t266 = load { ptr, i64, i64 }, ptr %a263 store { ptr, i64, i64 } %t266, ptr %a268 store { ptr, i64, i64 } { ptr @.str.1724, i64 1, i64 0 }, ptr %a269 call void @finch_str_concat(ptr %a267, ptr %a268, ptr %a269) %t270 = load { ptr, i64, i64 }, ptr %a267 call void @finch.gen.emit(ptr %t230, { ptr, i64, i64 } %t270) br label %endif2712 endif2712: br label %endif2705 endif2705: br label %endif2702 endif2702: br label %endif2699 endif2699: br label %endif2696 endif2696: br label %endif2693 endif2693: br label %endif2690 endif2690: ret void } define internal void @finch.copy.S_gen_EnumDef(ptr %dst, ptr %src) { entry: %t1 = load %S.gen.EnumDef, ptr %src store %S.gen.EnumDef %t1, ptr %dst %t2 = getelementptr inbounds %S.gen.EnumDef, ptr %dst, i32 0, i32 0 %t3 = getelementptr inbounds %S.gen.EnumDef, ptr %src, i32 0, i32 0 call void @finch_str_copy(ptr %t2, ptr %t3) %t4 = getelementptr inbounds %S.gen.EnumDef, ptr %dst, i32 0, i32 1 %t5 = getelementptr inbounds %S.gen.EnumDef, ptr %src, i32 0, i32 1 call void @finch_str_copy(ptr %t4, ptr %t5) %t6 = getelementptr inbounds %S.gen.EnumDef, ptr %dst, i32 0, i32 2 %t7 = getelementptr inbounds %S.gen.EnumDef, ptr %src, i32 0, i32 2 call void @finch.copy.arr_str(ptr %t6, ptr %t7) %t8 = getelementptr inbounds %S.gen.EnumDef, ptr %dst, i32 0, i32 3 %t9 = getelementptr inbounds %S.gen.EnumDef, ptr %src, i32 0, i32 3 call void @finch.copy.arr_int(ptr %t8, ptr %t9) ret void } define internal { ptr, i64, i64 } @finch.gen.formatFn(ptr %p0, %S.ast.Type %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Type, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca %S.gen.Saved, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca %S.ast.Type, align 16 %a49 = alloca %S.ast.Type, align 16 %a51 = alloca %S.ast.Type, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca { ptr, i64, i64 }, align 16 %a104 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 %a113 = alloca { ptr, i64, i64 }, align 16 %a114 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca { ptr, i64, i64 }, align 16 %a117 = alloca { ptr, i64, i64 }, align 16 %a118 = alloca { ptr, i64, i64 }, align 16 %a126 = alloca { ptr, i64, i64 }, align 16 %a127 = alloca { ptr, i64, i64 }, align 16 %a128 = alloca { ptr, i64, i64 }, align 16 %a131 = alloca { ptr, i64, i64 }, align 16 %a145 = alloca { ptr, i64, i64 }, align 16 %a146 = alloca { ptr, i64, i64 }, align 16 %a164 = alloca %S.gen.EnumDef, align 16 %a165 = alloca %S.gen.EnumDef, align 16 %a167 = alloca %S.gen.EnumDef, align 16 %a170 = alloca { ptr, i64, i64 }, align 16 %a173 = alloca { ptr, i64, i64 }, align 16 %a176 = alloca { ptr, i64, i64 }, align 16 %a177 = alloca { ptr, i64, i64 }, align 16 %a178 = alloca { ptr, i64, i64 }, align 16 %a182 = alloca i64, align 16 %a201 = alloca { ptr, i64, i64 }, align 16 %a203 = alloca { ptr, i64, i64 }, align 16 %a204 = alloca { ptr, i64, i64 }, align 16 %a205 = alloca { ptr, i64, i64 }, align 16 %a207 = alloca { ptr, i64, i64 }, align 16 %a208 = alloca { ptr, i64, i64 }, align 16 %a209 = alloca { ptr, i64, i64 }, align 16 %a218 = alloca { ptr, i64, i64 }, align 16 %a219 = alloca { ptr, i64, i64 }, align 16 %a220 = alloca { ptr, i64, i64 }, align 16 %a230 = alloca { ptr, i64, i64 }, align 16 %a231 = alloca { ptr, i64, i64 }, align 16 %a232 = alloca { ptr, i64, i64 }, align 16 %a234 = alloca { ptr, i64, i64 }, align 16 %a235 = alloca { ptr, i64, i64 }, align 16 %a236 = alloca { ptr, i64, i64 }, align 16 %a239 = alloca { ptr, i64, i64 }, align 16 %a240 = alloca { ptr, i64, i64 }, align 16 %a241 = alloca { ptr, i64, i64 }, align 16 %a243 = alloca { ptr, i64, i64 }, align 16 %a244 = alloca { ptr, i64, i64 }, align 16 %a245 = alloca { ptr, i64, i64 }, align 16 %a248 = alloca { ptr, i64, i64 }, align 16 %a249 = alloca { ptr, i64, i64 }, align 16 %a251 = alloca { ptr, i64, i64 }, align 16 %a252 = alloca { ptr, i64, i64 }, align 16 %a253 = alloca { ptr, i64, i64 }, align 16 %a255 = alloca { ptr, i64, i64 }, align 16 %a256 = alloca { ptr, i64, i64 }, align 16 %a257 = alloca { ptr, i64, i64 }, align 16 %a265 = alloca i64, align 16 %a294 = alloca { ptr, i64, i64 }, align 16 %a295 = alloca { ptr, i64, i64 }, align 16 %a296 = alloca { ptr, i64, i64 }, align 16 %a301 = alloca { ptr, i64, i64 }, align 16 %a302 = alloca { ptr, i64, i64 }, align 16 %a303 = alloca { ptr, i64, i64 }, align 16 %a305 = alloca { ptr, i64, i64 }, align 16 %a306 = alloca { ptr, i64, i64 }, align 16 %a307 = alloca { ptr, i64, i64 }, align 16 %a310 = alloca { ptr, i64, i64 }, align 16 %a311 = alloca { ptr, i64, i64 }, align 16 %a312 = alloca { ptr, i64, i64 }, align 16 %a314 = alloca { ptr, i64, i64 }, align 16 %a315 = alloca { ptr, i64, i64 }, align 16 %a316 = alloca { ptr, i64, i64 }, align 16 %a325 = alloca { ptr, i64, i64 }, align 16 %a326 = alloca { ptr, i64, i64 }, align 16 %a331 = alloca { ptr, i64, i64 }, align 16 %a340 = alloca { ptr, i64, i64 }, align 16 %a341 = alloca { ptr, i64, i64 }, align 16 %a342 = alloca { ptr, i64, i64 }, align 16 %a344 = alloca { ptr, i64, i64 }, align 16 %a345 = alloca { ptr, i64, i64 }, align 16 %a346 = alloca { ptr, i64, i64 }, align 16 %a350 = alloca { ptr, i64, i64 }, align 16 %a354 = alloca { ptr, i64, i64 }, align 16 %a364 = alloca { ptr, i64, i64 }, align 16 %a367 = alloca { ptr, i64, i64 }, align 16 %a370 = alloca { ptr, i64, i64 }, align 16 %a379 = alloca { ptr, i64, i64 }, align 16 %a380 = alloca { ptr, i64, i64 }, align 16 %a381 = alloca { ptr, i64, i64 }, align 16 %a383 = alloca { ptr, i64, i64 }, align 16 %a384 = alloca { ptr, i64, i64 }, align 16 %a385 = alloca { ptr, i64, i64 }, align 16 %a394 = alloca { ptr, i64, i64 }, align 16 %a397 = alloca { ptr, i64, i64 }, align 16 %a482 = alloca %S.gen.StructDef, align 16 %a483 = alloca %S.gen.StructDef, align 16 %a485 = alloca %S.gen.StructDef, align 16 %a489 = alloca { ptr, i64, i64 }, align 16 %a493 = alloca { ptr, i64, i64 }, align 16 %a494 = alloca { ptr, i64, i64 }, align 16 %a495 = alloca { ptr, i64, i64 }, align 16 %a500 = alloca i64, align 16 %a503 = alloca { ptr, i64, i64 }, align 16 %a516 = alloca { ptr, i64, i64 }, align 16 %a517 = alloca { ptr, i64, i64 }, align 16 %a518 = alloca { ptr, i64, i64 }, align 16 %a520 = alloca { ptr, i64, i64 }, align 16 %a521 = alloca { ptr, i64, i64 }, align 16 %a522 = alloca { ptr, i64, i64 }, align 16 %a526 = alloca { ptr, i64, i64 }, align 16 %a527 = alloca { ptr, i64, i64 }, align 16 %a528 = alloca { ptr, i64, i64 }, align 16 %a530 = alloca { ptr, i64, i64 }, align 16 %a531 = alloca { ptr, i64, i64 }, align 16 %a532 = alloca { ptr, i64, i64 }, align 16 %a542 = alloca { ptr, i64, i64 }, align 16 %a544 = alloca { ptr, i64, i64 }, align 16 %a545 = alloca { ptr, i64, i64 }, align 16 %a546 = alloca { ptr, i64, i64 }, align 16 %a549 = alloca { ptr, i64, i64 }, align 16 %a579 = alloca { ptr, i64, i64 }, align 16 %a580 = alloca { ptr, i64, i64 }, align 16 %a581 = alloca { ptr, i64, i64 }, align 16 %a583 = alloca { ptr, i64, i64 }, align 16 %a584 = alloca { ptr, i64, i64 }, align 16 %a585 = alloca { ptr, i64, i64 }, align 16 %a588 = alloca { ptr, i64, i64 }, align 16 %a589 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Type %p1, ptr %a2 %t3 = load %S.ast.Type, ptr %a2 %t4 = call { ptr, i64, i64 } @finch.gen.typeKey(%S.ast.Type %t3) store { ptr, i64, i64 } { ptr @.str.1725, i64 14, i64 0 }, ptr %a6 store { ptr, i64, i64 } %t4, ptr %a7 call void @finch_str_concat(ptr %a5, ptr %a6, ptr %a7) %t8 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } %t8, ptr %a9 %t10 = load ptr, ptr %a1 %t11 = icmp eq ptr %t10, null br i1 %t11, label %panic2713, label %ok2714 panic2713: call void @finch_panic(ptr @.str.1726, i64 965, ptr @.str.1727) unreachable ok2714: %t12 = getelementptr inbounds %S.gen.Gen, ptr %t10, i32 0, i32 21 %t13 = load { ptr, i64, i64 }, ptr %t12 %t14 = load { ptr, i64, i64 }, ptr %a9 %t15 = call i1 @finch.gen.has({ ptr, i64, i64 } %t13, { ptr, i64, i64 } %t14) br i1 %t15, label %then2715, label %endif2717 then2715: %t16 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t16, ptr %a17 call void @finch_str_copy(ptr %a18, ptr %a17) %t19 = load { ptr, i64, i64 }, ptr %a18 ret { ptr, i64, i64 } %t19 endif2717: %t20 = load ptr, ptr %a1 %t21 = icmp eq ptr %t20, null br i1 %t21, label %panic2718, label %ok2719 panic2718: call void @finch_panic(ptr @.str.1728, i64 968, ptr @.str.1729) unreachable ok2719: %t22 = getelementptr inbounds %S.gen.Gen, ptr %t20, i32 0, i32 21 %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t22, i32 0, i32 1 %t24 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t24, ptr %a25 call void @finch_str_copy(ptr %a26, ptr %a25) %t27 = load { ptr, i64, i64 }, ptr %a26 %t28 = load i64, ptr %t23 %t29 = add i64 %t28, 1 call void @finch_arr_reserve(ptr %t22, i64 %t29, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t30 = load ptr, ptr %t22 %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t30, i64 %t28 store { ptr, i64, i64 } %t27, ptr %t31 store i64 %t29, ptr %t23 %t32 = load ptr, ptr %a1 %t33 = call %S.gen.Saved @finch.gen.beginHelper(ptr %t32) store %S.gen.Saved %t33, ptr %a34 %t35 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t36 = load { ptr, i64, i64 }, ptr %t35 store { ptr, i64, i64 } %t36, ptr %a37 store { ptr, i64, i64 } { ptr @.str.1730, i64 5, i64 0 }, ptr %a38 %t39 = call i32 @finch_str_eq(ptr %a37, ptr %a38) %t40 = icmp ne i32 %t39, 0 br i1 %t40, label %then2720, label %else2721 then2720: %t41 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t42 = load { ptr, i64, i64 }, ptr %t41 %t43 = extractvalue { ptr, i64, i64 } %t42, 1 %t44 = icmp uge i64 0, %t43 br i1 %t44, label %range2723, label %inrange2724 range2723: call void @finch_panic_index(ptr @.str.1731, i64 971, i64 0, i64 %t43) unreachable inrange2724: %t45 = extractvalue { ptr, i64, i64 } %t42, 0 %t46 = getelementptr inbounds %S.ast.Type, ptr %t45, i64 0 %t47 = load %S.ast.Type, ptr %t46 store %S.ast.Type %t47, ptr %a48 call void @finch.copy.S_ast_Type(ptr %a49, ptr %a48) %t50 = load %S.ast.Type, ptr %a49 store %S.ast.Type %t50, ptr %a51 %t52 = load ptr, ptr %a1 %t53 = call { ptr, i64, i64 } @finch.gen.load(ptr %t52, { ptr, i64, i64 } { ptr @.str.1732, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.1733, i64 2, i64 0 }) store { ptr, i64, i64 } %t53, ptr %a54 %t55 = load ptr, ptr %a1 %t56 = load ptr, ptr %a1 %t57 = call { ptr, i64, i64 } @finch.gen.op(ptr %t56, { ptr, i64, i64 } { ptr @.str.1735, i64 62, i64 0 }) %t58 = call { ptr, i64, i64 } @finch.gen.load(ptr %t55, { ptr, i64, i64 } { ptr @.str.1734, i64 3, i64 0 }, { ptr, i64, i64 } %t57) store { ptr, i64, i64 } %t58, ptr %a59 %t60 = load ptr, ptr %a1 call void @finch.gen.bufText(ptr %t60, { ptr, i64, i64 } { ptr @.str.1736, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1737, i64 1, i64 0 }) %t61 = load ptr, ptr %a1 %t62 = load { ptr, i64, i64 }, ptr %a59 %t63 = call { ptr, i64, i64 } @finch.gen.loopStart(ptr %t61, { ptr, i64, i64 } %t62) store { ptr, i64, i64 } %t63, ptr %a64 %t65 = load ptr, ptr %a1 %t66 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t65, { ptr, i64, i64 } { ptr @.str.1738, i64 3, i64 0 }) store { ptr, i64, i64 } %t66, ptr %a67 %t68 = load ptr, ptr %a1 %t69 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t68, { ptr, i64, i64 } { ptr @.str.1739, i64 4, i64 0 }) store { ptr, i64, i64 } %t69, ptr %a70 %t71 = load ptr, ptr %a1 %t72 = load { ptr, i64, i64 }, ptr %a64 %t73 = extractvalue { ptr, i64, i64 } %t72, 1 %t74 = icmp uge i64 3, %t73 br i1 %t74, label %range2725, label %inrange2726 range2725: call void @finch_panic_index(ptr @.str.1741, i64 978, i64 3, i64 %t73) unreachable inrange2726: %t75 = extractvalue { ptr, i64, i64 } %t72, 0 %t76 = getelementptr inbounds { ptr, i64, i64 }, ptr %t75, i64 3 %t77 = load { ptr, i64, i64 }, ptr %t76 store { ptr, i64, i64 } { ptr @.str.1740, i64 13, i64 0 }, ptr %a79 store { ptr, i64, i64 } %t77, ptr %a80 call void @finch_str_concat(ptr %a78, ptr %a79, ptr %a80) %t81 = load { ptr, i64, i64 }, ptr %a78 store { ptr, i64, i64 } %t81, ptr %a83 store { ptr, i64, i64 } { ptr @.str.1742, i64 3, i64 0 }, ptr %a84 call void @finch_str_concat(ptr %a82, ptr %a83, ptr %a84) %t85 = load { ptr, i64, i64 }, ptr %a82 %t86 = call { ptr, i64, i64 } @finch.gen.op(ptr %t71, { ptr, i64, i64 } %t85) store { ptr, i64, i64 } %t86, ptr %a87 %t88 = load ptr, ptr %a1 %t89 = load { ptr, i64, i64 }, ptr %a87 %t90 = load { ptr, i64, i64 }, ptr %a67 %t91 = load { ptr, i64, i64 }, ptr %a70 call void @finch.gen.condBr(ptr %t88, { ptr, i64, i64 } %t89, { ptr, i64, i64 } %t90, { ptr, i64, i64 } %t91) %t92 = load ptr, ptr %a1 %t93 = load { ptr, i64, i64 }, ptr %a67 call void @finch.gen.label(ptr %t92, { ptr, i64, i64 } %t93) %t94 = load ptr, ptr %a1 call void @finch.gen.bufText(ptr %t94, { ptr, i64, i64 } { ptr @.str.1743, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1744, i64 2, i64 0 }) %t95 = load ptr, ptr %a1 %t96 = load { ptr, i64, i64 }, ptr %a70 call void @finch.gen.br(ptr %t95, { ptr, i64, i64 } %t96) %t97 = load ptr, ptr %a1 %t98 = load { ptr, i64, i64 }, ptr %a70 call void @finch.gen.label(ptr %t97, { ptr, i64, i64 } %t98) %t99 = load ptr, ptr %a1 %t100 = load ptr, ptr %a1 %t101 = load %S.ast.Type, ptr %a51 %t102 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t100, %S.ast.Type %t101) store { ptr, i64, i64 } { ptr @.str.1745, i64 23, i64 0 }, ptr %a104 store { ptr, i64, i64 } %t102, ptr %a105 call void @finch_str_concat(ptr %a103, ptr %a104, ptr %a105) %t106 = load { ptr, i64, i64 }, ptr %a103 store { ptr, i64, i64 } %t106, ptr %a108 store { ptr, i64, i64 } { ptr @.str.1746, i64 6, i64 0 }, ptr %a109 call void @finch_str_concat(ptr %a107, ptr %a108, ptr %a109) %t110 = load { ptr, i64, i64 }, ptr %a107 %t111 = load { ptr, i64, i64 }, ptr %a54 store { ptr, i64, i64 } %t110, ptr %a113 store { ptr, i64, i64 } %t111, ptr %a114 call void @finch_str_concat(ptr %a112, ptr %a113, ptr %a114) %t115 = load { ptr, i64, i64 }, ptr %a112 store { ptr, i64, i64 } %t115, ptr %a117 store { ptr, i64, i64 } { ptr @.str.1747, i64 6, i64 0 }, ptr %a118 call void @finch_str_concat(ptr %a116, ptr %a117, ptr %a118) %t119 = load { ptr, i64, i64 }, ptr %a116 %t120 = load { ptr, i64, i64 }, ptr %a64 %t121 = extractvalue { ptr, i64, i64 } %t120, 1 %t122 = icmp uge i64 3, %t121 br i1 %t122, label %range2727, label %inrange2728 range2727: call void @finch_panic_index(ptr @.str.1748, i64 984, i64 3, i64 %t121) unreachable inrange2728: %t123 = extractvalue { ptr, i64, i64 } %t120, 0 %t124 = getelementptr inbounds { ptr, i64, i64 }, ptr %t123, i64 3 %t125 = load { ptr, i64, i64 }, ptr %t124 store { ptr, i64, i64 } %t119, ptr %a127 store { ptr, i64, i64 } %t125, ptr %a128 call void @finch_str_concat(ptr %a126, ptr %a127, ptr %a128) %t129 = load { ptr, i64, i64 }, ptr %a126 %t130 = call { ptr, i64, i64 } @finch.gen.op(ptr %t99, { ptr, i64, i64 } %t129) store { ptr, i64, i64 } %t130, ptr %a131 %t132 = load ptr, ptr %a1 %t133 = load ptr, ptr %a1 %t134 = load ptr, ptr %a1 %t135 = load %S.ast.Type, ptr %a51 %t136 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t134, %S.ast.Type %t135) %t137 = load { ptr, i64, i64 }, ptr %a131 %t138 = call { ptr, i64, i64 } @finch.gen.load(ptr %t133, { ptr, i64, i64 } %t136, { ptr, i64, i64 } %t137) %t139 = load %S.ast.Type, ptr %a51 call void @finch.gen.emitFormat(ptr %t132, { ptr, i64, i64 } { ptr @.str.1749, i64 4, i64 0 }, { ptr, i64, i64 } %t138, %S.ast.Type %t139, i1 true) %t140 = load ptr, ptr %a1 %t141 = load { ptr, i64, i64 }, ptr %a64 call void @finch.gen.loopEnd(ptr %t140, { ptr, i64, i64 } %t141) %t142 = load ptr, ptr %a1 call void @finch.gen.bufText(ptr %t142, { ptr, i64, i64 } { ptr @.str.1750, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1751, i64 1, i64 0 }) br label %endif2722 else2721: %t143 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t144 = load { ptr, i64, i64 }, ptr %t143 store { ptr, i64, i64 } %t144, ptr %a145 store { ptr, i64, i64 } { ptr @.str.1752, i64 4, i64 0 }, ptr %a146 %t147 = call i32 @finch_str_eq(ptr %a145, ptr %a146) %t148 = icmp ne i32 %t147, 0 br i1 %t148, label %then2729, label %else2730 then2729: %t149 = load ptr, ptr %a1 %t150 = icmp eq ptr %t149, null br i1 %t150, label %panic2732, label %ok2733 panic2732: call void @finch_panic(ptr @.str.1753, i64 990, ptr @.str.1754) unreachable ok2733: %t151 = getelementptr inbounds %S.gen.Gen, ptr %t149, i32 0, i32 20 %t152 = load ptr, ptr %a1 %t153 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t154 = load { ptr, i64, i64 }, ptr %t153 %t155 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t156 = load { ptr, i64, i64 }, ptr %t155 %t157 = call i64 @finch.gen.findEnum(ptr %t152, { ptr, i64, i64 } %t154, { ptr, i64, i64 } %t156) %t158 = load { ptr, i64, i64 }, ptr %t151 %t159 = extractvalue { ptr, i64, i64 } %t158, 1 %t160 = icmp uge i64 %t157, %t159 br i1 %t160, label %range2734, label %inrange2735 range2734: call void @finch_panic_index(ptr @.str.1755, i64 990, i64 %t157, i64 %t159) unreachable inrange2735: %t161 = extractvalue { ptr, i64, i64 } %t158, 0 %t162 = getelementptr inbounds %S.gen.EnumDef, ptr %t161, i64 %t157 %t163 = load %S.gen.EnumDef, ptr %t162 store %S.gen.EnumDef %t163, ptr %a164 call void @finch.copy.S_gen_EnumDef(ptr %a165, ptr %a164) %t166 = load %S.gen.EnumDef, ptr %a165 store %S.gen.EnumDef %t166, ptr %a167 %t168 = load ptr, ptr %a1 %t169 = call { ptr, i64, i64 } @finch.gen.load(ptr %t168, { ptr, i64, i64 } { ptr @.str.1756, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.1757, i64 2, i64 0 }) store { ptr, i64, i64 } %t169, ptr %a170 %t171 = load ptr, ptr %a1 %t172 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t171, { ptr, i64, i64 } { ptr @.str.1758, i64 10, i64 0 }) store { ptr, i64, i64 } %t172, ptr %a173 %t174 = load ptr, ptr %a1 %t175 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t174, { ptr, i64, i64 } { ptr @.str.1759, i64 9, i64 0 }) store { ptr, i64, i64 } %t175, ptr %a176 store { ptr, i64, i64 } zeroinitializer, ptr %a177 store { ptr, i64, i64 } zeroinitializer, ptr %a178 %t179 = getelementptr inbounds %S.gen.EnumDef, ptr %a167, i32 0, i32 2 %t180 = getelementptr inbounds { ptr, i64, i64 }, ptr %t179, i32 0, i32 1 %t181 = load i64, ptr %t180 store i64 0, ptr %a182 br label %for.cond2736 for.cond2736: %t183 = load i64, ptr %a182 %t184 = icmp slt i64 %t183, %t181 br i1 %t184, label %for.body2737, label %for.end2739 for.body2737: %t185 = getelementptr inbounds { ptr, i64, i64 }, ptr %a178, i32 0, i32 1 %t186 = load ptr, ptr %a1 %t187 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t186, { ptr, i64, i64 } { ptr @.str.1760, i64 6, i64 0 }) %t188 = load i64, ptr %t185 %t189 = add i64 %t188, 1 call void @finch_arr_reserve(ptr %a178, i64 %t189, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t190 = load ptr, ptr %a178 %t191 = getelementptr inbounds { ptr, i64, i64 }, ptr %t190, i64 %t188 store { ptr, i64, i64 } %t187, ptr %t191 store i64 %t189, ptr %t185 %t192 = getelementptr inbounds { ptr, i64, i64 }, ptr %a177, i32 0, i32 1 %t193 = getelementptr inbounds %S.gen.EnumDef, ptr %a167, i32 0, i32 3 %t194 = load i64, ptr %a182 %t195 = load { ptr, i64, i64 }, ptr %t193 %t196 = extractvalue { ptr, i64, i64 } %t195, 1 %t197 = icmp uge i64 %t194, %t196 br i1 %t197, label %range2740, label %inrange2741 range2740: call void @finch_panic_index(ptr @.str.1762, i64 998, i64 %t194, i64 %t196) unreachable inrange2741: %t198 = extractvalue { ptr, i64, i64 } %t195, 0 %t199 = getelementptr inbounds i64, ptr %t198, i64 %t194 %t200 = load i64, ptr %t199 call void @finch_str_from_int(ptr %a201, i64 %t200) %t202 = load { ptr, i64, i64 }, ptr %a201 store { ptr, i64, i64 } { ptr @.str.1761, i64 4, i64 0 }, ptr %a204 store { ptr, i64, i64 } %t202, ptr %a205 call void @finch_str_concat(ptr %a203, ptr %a204, ptr %a205) %t206 = load { ptr, i64, i64 }, ptr %a203 store { ptr, i64, i64 } %t206, ptr %a208 store { ptr, i64, i64 } { ptr @.str.1763, i64 9, i64 0 }, ptr %a209 call void @finch_str_concat(ptr %a207, ptr %a208, ptr %a209) %t210 = load { ptr, i64, i64 }, ptr %a207 %t211 = load i64, ptr %a182 %t212 = load { ptr, i64, i64 }, ptr %a178 %t213 = extractvalue { ptr, i64, i64 } %t212, 1 %t214 = icmp uge i64 %t211, %t213 br i1 %t214, label %range2742, label %inrange2743 range2742: call void @finch_panic_index(ptr @.str.1764, i64 998, i64 %t211, i64 %t213) unreachable inrange2743: %t215 = extractvalue { ptr, i64, i64 } %t212, 0 %t216 = getelementptr inbounds { ptr, i64, i64 }, ptr %t215, i64 %t211 %t217 = load { ptr, i64, i64 }, ptr %t216 store { ptr, i64, i64 } %t210, ptr %a219 store { ptr, i64, i64 } %t217, ptr %a220 call void @finch_str_concat(ptr %a218, ptr %a219, ptr %a220) %t221 = load { ptr, i64, i64 }, ptr %a218 %t222 = load i64, ptr %t192 %t223 = add i64 %t222, 1 call void @finch_arr_reserve(ptr %a177, i64 %t223, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t224 = load ptr, ptr %a177 %t225 = getelementptr inbounds { ptr, i64, i64 }, ptr %t224, i64 %t222 store { ptr, i64, i64 } %t221, ptr %t225 store i64 %t223, ptr %t192 br label %for.step2738 for.step2738: %t226 = load i64, ptr %a182 %t227 = add i64 %t226, 1 store i64 %t227, ptr %a182 br label %for.cond2736 for.end2739: %t228 = load ptr, ptr %a1 %t229 = load { ptr, i64, i64 }, ptr %a170 store { ptr, i64, i64 } { ptr @.str.1765, i64 11, i64 0 }, ptr %a231 store { ptr, i64, i64 } %t229, ptr %a232 call void @finch_str_concat(ptr %a230, ptr %a231, ptr %a232) %t233 = load { ptr, i64, i64 }, ptr %a230 store { ptr, i64, i64 } %t233, ptr %a235 store { ptr, i64, i64 } { ptr @.str.1766, i64 9, i64 0 }, ptr %a236 call void @finch_str_concat(ptr %a234, ptr %a235, ptr %a236) %t237 = load { ptr, i64, i64 }, ptr %a234 %t238 = load { ptr, i64, i64 }, ptr %a173 store { ptr, i64, i64 } %t237, ptr %a240 store { ptr, i64, i64 } %t238, ptr %a241 call void @finch_str_concat(ptr %a239, ptr %a240, ptr %a241) %t242 = load { ptr, i64, i64 }, ptr %a239 store { ptr, i64, i64 } %t242, ptr %a244 store { ptr, i64, i64 } { ptr @.str.1767, i64 3, i64 0 }, ptr %a245 call void @finch_str_concat(ptr %a243, ptr %a244, ptr %a245) %t246 = load { ptr, i64, i64 }, ptr %a243 %t247 = getelementptr inbounds { ptr, i64, i64 }, ptr %a177, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.1768, i64 1, i64 0 }, ptr %a248 call void @finch_str_join(ptr %a249, ptr %a177, ptr %a248) %t250 = load { ptr, i64, i64 }, ptr %a249 store { ptr, i64, i64 } %t246, ptr %a252 store { ptr, i64, i64 } %t250, ptr %a253 call void @finch_str_concat(ptr %a251, ptr %a252, ptr %a253) %t254 = load { ptr, i64, i64 }, ptr %a251 store { ptr, i64, i64 } %t254, ptr %a256 store { ptr, i64, i64 } { ptr @.str.1769, i64 2, i64 0 }, ptr %a257 call void @finch_str_concat(ptr %a255, ptr %a256, ptr %a257) %t258 = load { ptr, i64, i64 }, ptr %a255 call void @finch.gen.emit(ptr %t228, { ptr, i64, i64 } %t258) %t259 = load ptr, ptr %a1 %t260 = icmp eq ptr %t259, null br i1 %t260, label %panic2744, label %ok2745 panic2744: call void @finch_panic(ptr @.str.1770, i64 1001, ptr @.str.1771) unreachable ok2745: %t261 = getelementptr inbounds %S.gen.Gen, ptr %t259, i32 0, i32 9 store i1 true, ptr %t261 %t262 = getelementptr inbounds %S.gen.EnumDef, ptr %a167, i32 0, i32 2 %t263 = getelementptr inbounds { ptr, i64, i64 }, ptr %t262, i32 0, i32 1 %t264 = load i64, ptr %t263 store i64 0, ptr %a265 br label %for.cond2746 for.cond2746: %t266 = load i64, ptr %a265 %t267 = icmp slt i64 %t266, %t264 br i1 %t267, label %for.body2747, label %for.end2749 for.body2747: %t268 = load ptr, ptr %a1 %t269 = load i64, ptr %a265 %t270 = load { ptr, i64, i64 }, ptr %a178 %t271 = extractvalue { ptr, i64, i64 } %t270, 1 %t272 = icmp uge i64 %t269, %t271 br i1 %t272, label %range2750, label %inrange2751 range2750: call void @finch_panic_index(ptr @.str.1772, i64 1003, i64 %t269, i64 %t271) unreachable inrange2751: %t273 = extractvalue { ptr, i64, i64 } %t270, 0 %t274 = getelementptr inbounds { ptr, i64, i64 }, ptr %t273, i64 %t269 %t275 = load { ptr, i64, i64 }, ptr %t274 call void @finch.gen.label(ptr %t268, { ptr, i64, i64 } %t275) %t276 = load ptr, ptr %a1 %t277 = getelementptr inbounds %S.gen.EnumDef, ptr %a167, i32 0, i32 2 %t278 = load i64, ptr %a265 %t279 = load { ptr, i64, i64 }, ptr %t277 %t280 = extractvalue { ptr, i64, i64 } %t279, 1 %t281 = icmp uge i64 %t278, %t280 br i1 %t281, label %range2752, label %inrange2753 range2752: call void @finch_panic_index(ptr @.str.1774, i64 1004, i64 %t278, i64 %t280) unreachable inrange2753: %t282 = extractvalue { ptr, i64, i64 } %t279, 0 %t283 = getelementptr inbounds { ptr, i64, i64 }, ptr %t282, i64 %t278 %t284 = load { ptr, i64, i64 }, ptr %t283 call void @finch.gen.bufText(ptr %t276, { ptr, i64, i64 } { ptr @.str.1773, i64 4, i64 0 }, { ptr, i64, i64 } %t284) %t285 = load ptr, ptr %a1 %t286 = load { ptr, i64, i64 }, ptr %a176 call void @finch.gen.br(ptr %t285, { ptr, i64, i64 } %t286) br label %for.step2748 for.step2748: %t287 = load i64, ptr %a265 %t288 = add i64 %t287, 1 store i64 %t288, ptr %a265 br label %for.cond2746 for.end2749: %t289 = load ptr, ptr %a1 %t290 = load { ptr, i64, i64 }, ptr %a173 call void @finch.gen.label(ptr %t289, { ptr, i64, i64 } %t290) %t291 = load ptr, ptr %a1 %t292 = getelementptr inbounds %S.gen.EnumDef, ptr %a167, i32 0, i32 1 %t293 = load { ptr, i64, i64 }, ptr %t292 store { ptr, i64, i64 } %t293, ptr %a295 store { ptr, i64, i64 } { ptr @.str.1776, i64 1, i64 0 }, ptr %a296 call void @finch_str_concat(ptr %a294, ptr %a295, ptr %a296) %t297 = load { ptr, i64, i64 }, ptr %a294 call void @finch.gen.bufText(ptr %t291, { ptr, i64, i64 } { ptr @.str.1775, i64 4, i64 0 }, { ptr, i64, i64 } %t297) %t298 = load ptr, ptr %a1 %t299 = load ptr, ptr %a1 %t300 = load { ptr, i64, i64 }, ptr %a170 store { ptr, i64, i64 } { ptr @.str.1778, i64 9, i64 0 }, ptr %a302 store { ptr, i64, i64 } %t300, ptr %a303 call void @finch_str_concat(ptr %a301, ptr %a302, ptr %a303) %t304 = load { ptr, i64, i64 }, ptr %a301 store { ptr, i64, i64 } %t304, ptr %a306 store { ptr, i64, i64 } { ptr @.str.1779, i64 7, i64 0 }, ptr %a307 call void @finch_str_concat(ptr %a305, ptr %a306, ptr %a307) %t308 = load { ptr, i64, i64 }, ptr %a305 %t309 = call { ptr, i64, i64 } @finch.gen.op(ptr %t299, { ptr, i64, i64 } %t308) store { ptr, i64, i64 } { ptr @.str.1777, i64 39, i64 0 }, ptr %a311 store { ptr, i64, i64 } %t309, ptr %a312 call void @finch_str_concat(ptr %a310, ptr %a311, ptr %a312) %t313 = load { ptr, i64, i64 }, ptr %a310 store { ptr, i64, i64 } %t313, ptr %a315 store { ptr, i64, i64 } { ptr @.str.1780, i64 1, i64 0 }, ptr %a316 call void @finch_str_concat(ptr %a314, ptr %a315, ptr %a316) %t317 = load { ptr, i64, i64 }, ptr %a314 call void @finch.gen.emit(ptr %t298, { ptr, i64, i64 } %t317) %t318 = load ptr, ptr %a1 call void @finch.gen.bufText(ptr %t318, { ptr, i64, i64 } { ptr @.str.1781, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1782, i64 1, i64 0 }) %t319 = load ptr, ptr %a1 %t320 = load { ptr, i64, i64 }, ptr %a176 call void @finch.gen.br(ptr %t319, { ptr, i64, i64 } %t320) %t321 = load ptr, ptr %a1 %t322 = load { ptr, i64, i64 }, ptr %a176 call void @finch.gen.label(ptr %t321, { ptr, i64, i64 } %t322) br label %endif2731 else2730: %t323 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t324 = load { ptr, i64, i64 }, ptr %t323 store { ptr, i64, i64 } %t324, ptr %a325 store { ptr, i64, i64 } { ptr @.str.1783, i64 3, i64 0 }, ptr %a326 %t327 = call i32 @finch_str_eq(ptr %a325, ptr %a326) %t328 = icmp ne i32 %t327, 0 br i1 %t328, label %then2754, label %else2755 then2754: %t329 = load ptr, ptr %a1 %t330 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t329, { ptr, i64, i64 } { ptr @.str.1784, i64 2, i64 0 }) store { ptr, i64, i64 } %t330, ptr %a331 %t332 = load ptr, ptr %a1 %t333 = load { ptr, i64, i64 }, ptr %a331 call void @finch.gen.store(ptr %t332, { ptr, i64, i64 } { ptr @.str.1785, i64 2, i64 0 }, { ptr, i64, i64 } { ptr @.str.1786, i64 4, i64 0 }, { ptr, i64, i64 } %t333) %t334 = load ptr, ptr %a1 call void @finch.gen.bufText(ptr %t334, { ptr, i64, i64 } { ptr @.str.1787, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1788, i64 1, i64 0 }) %t335 = load ptr, ptr %a1 %t336 = load ptr, ptr %a1 %t337 = load ptr, ptr %a1 %t338 = load %S.ast.Type, ptr %a2 %t339 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t337, %S.ast.Type %t338) store { ptr, i64, i64 } { ptr @.str.1790, i64 23, i64 0 }, ptr %a341 store { ptr, i64, i64 } %t339, ptr %a342 call void @finch_str_concat(ptr %a340, ptr %a341, ptr %a342) %t343 = load { ptr, i64, i64 }, ptr %a340 store { ptr, i64, i64 } %t343, ptr %a345 store { ptr, i64, i64 } { ptr @.str.1791, i64 22, i64 0 }, ptr %a346 call void @finch_str_concat(ptr %a344, ptr %a345, ptr %a346) %t347 = load { ptr, i64, i64 }, ptr %a344 %t348 = call { ptr, i64, i64 } @finch.gen.op(ptr %t336, { ptr, i64, i64 } %t347) %t349 = call { ptr, i64, i64 } @finch.gen.load(ptr %t335, { ptr, i64, i64 } { ptr @.str.1789, i64 3, i64 0 }, { ptr, i64, i64 } %t348) store { ptr, i64, i64 } %t349, ptr %a350 %t351 = load ptr, ptr %a1 %t352 = load { ptr, i64, i64 }, ptr %a350 %t353 = call { ptr, i64, i64 } @finch.gen.loopStart(ptr %t351, { ptr, i64, i64 } %t352) store { ptr, i64, i64 } %t353, ptr %a354 %t355 = load ptr, ptr %a1 %t356 = load %S.ast.Type, ptr %a2 %t357 = load { ptr, i64, i64 }, ptr %a354 %t358 = extractvalue { ptr, i64, i64 } %t357, 1 %t359 = icmp uge i64 3, %t358 br i1 %t359, label %range2757, label %inrange2758 range2757: call void @finch_panic_index(ptr @.str.1793, i64 1020, i64 3, i64 %t358) unreachable inrange2758: %t360 = extractvalue { ptr, i64, i64 } %t357, 0 %t361 = getelementptr inbounds { ptr, i64, i64 }, ptr %t360, i64 3 %t362 = load { ptr, i64, i64 }, ptr %t361 %t363 = call { ptr, i64, i64 } @finch.gen.entryAt(ptr %t355, { ptr, i64, i64 } { ptr @.str.1792, i64 2, i64 0 }, %S.ast.Type %t356, { ptr, i64, i64 } %t362) store { ptr, i64, i64 } %t363, ptr %a364 %t365 = load ptr, ptr %a1 %t366 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t365, { ptr, i64, i64 } { ptr @.str.1794, i64 10, i64 0 }) store { ptr, i64, i64 } %t366, ptr %a367 %t368 = load ptr, ptr %a1 %t369 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t368, { ptr, i64, i64 } { ptr @.str.1795, i64 10, i64 0 }) store { ptr, i64, i64 } %t369, ptr %a370 %t371 = load ptr, ptr %a1 %t372 = load ptr, ptr %a1 %t373 = load ptr, ptr %a1 %t374 = load ptr, ptr %a1 %t375 = load { ptr, i64, i64 }, ptr %a364 %t376 = load %S.ast.Type, ptr %a2 %t377 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t374, { ptr, i64, i64 } %t375, %S.ast.Type %t376, i64 0) %t378 = call { ptr, i64, i64 } @finch.gen.load(ptr %t373, { ptr, i64, i64 } { ptr @.str.1797, i64 3, i64 0 }, { ptr, i64, i64 } %t377) store { ptr, i64, i64 } { ptr @.str.1796, i64 12, i64 0 }, ptr %a380 store { ptr, i64, i64 } %t378, ptr %a381 call void @finch_str_concat(ptr %a379, ptr %a380, ptr %a381) %t382 = load { ptr, i64, i64 }, ptr %a379 store { ptr, i64, i64 } %t382, ptr %a384 store { ptr, i64, i64 } { ptr @.str.1798, i64 3, i64 0 }, ptr %a385 call void @finch_str_concat(ptr %a383, ptr %a384, ptr %a385) %t386 = load { ptr, i64, i64 }, ptr %a383 %t387 = call { ptr, i64, i64 } @finch.gen.op(ptr %t372, { ptr, i64, i64 } %t386) %t388 = load { ptr, i64, i64 }, ptr %a367 %t389 = load { ptr, i64, i64 }, ptr %a370 call void @finch.gen.condBr(ptr %t371, { ptr, i64, i64 } %t387, { ptr, i64, i64 } %t388, { ptr, i64, i64 } %t389) %t390 = load ptr, ptr %a1 %t391 = load { ptr, i64, i64 }, ptr %a367 call void @finch.gen.label(ptr %t390, { ptr, i64, i64 } %t391) %t392 = load ptr, ptr %a1 %t393 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t392, { ptr, i64, i64 } { ptr @.str.1799, i64 3, i64 0 }) store { ptr, i64, i64 } %t393, ptr %a394 %t395 = load ptr, ptr %a1 %t396 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t395, { ptr, i64, i64 } { ptr @.str.1800, i64 4, i64 0 }) store { ptr, i64, i64 } %t396, ptr %a397 %t398 = load ptr, ptr %a1 %t399 = load ptr, ptr %a1 %t400 = load { ptr, i64, i64 }, ptr %a331 %t401 = call { ptr, i64, i64 } @finch.gen.load(ptr %t399, { ptr, i64, i64 } { ptr @.str.1801, i64 2, i64 0 }, { ptr, i64, i64 } %t400) %t402 = load { ptr, i64, i64 }, ptr %a397 %t403 = load { ptr, i64, i64 }, ptr %a394 call void @finch.gen.condBr(ptr %t398, { ptr, i64, i64 } %t401, { ptr, i64, i64 } %t402, { ptr, i64, i64 } %t403) %t404 = load ptr, ptr %a1 %t405 = load { ptr, i64, i64 }, ptr %a394 call void @finch.gen.label(ptr %t404, { ptr, i64, i64 } %t405) %t406 = load ptr, ptr %a1 call void @finch.gen.bufText(ptr %t406, { ptr, i64, i64 } { ptr @.str.1802, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1803, i64 2, i64 0 }) %t407 = load ptr, ptr %a1 %t408 = load { ptr, i64, i64 }, ptr %a397 call void @finch.gen.br(ptr %t407, { ptr, i64, i64 } %t408) %t409 = load ptr, ptr %a1 %t410 = load { ptr, i64, i64 }, ptr %a397 call void @finch.gen.label(ptr %t409, { ptr, i64, i64 } %t410) %t411 = load ptr, ptr %a1 %t412 = load { ptr, i64, i64 }, ptr %a331 call void @finch.gen.store(ptr %t411, { ptr, i64, i64 } { ptr @.str.1804, i64 2, i64 0 }, { ptr, i64, i64 } { ptr @.str.1805, i64 5, i64 0 }, { ptr, i64, i64 } %t412) %t413 = load ptr, ptr %a1 %t414 = load ptr, ptr %a1 %t415 = load ptr, ptr %a1 %t416 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t417 = load { ptr, i64, i64 }, ptr %t416 %t418 = extractvalue { ptr, i64, i64 } %t417, 1 %t419 = icmp uge i64 0, %t418 br i1 %t419, label %range2759, label %inrange2760 range2759: call void @finch_panic_index(ptr @.str.1807, i64 1033, i64 0, i64 %t418) unreachable inrange2760: %t420 = extractvalue { ptr, i64, i64 } %t417, 0 %t421 = getelementptr inbounds %S.ast.Type, ptr %t420, i64 0 %t422 = load %S.ast.Type, ptr %t421 %t423 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t415, %S.ast.Type %t422) %t424 = load ptr, ptr %a1 %t425 = load { ptr, i64, i64 }, ptr %a364 %t426 = load %S.ast.Type, ptr %a2 %t427 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t424, { ptr, i64, i64 } %t425, %S.ast.Type %t426, i64 1) %t428 = call { ptr, i64, i64 } @finch.gen.load(ptr %t414, { ptr, i64, i64 } %t423, { ptr, i64, i64 } %t427) %t429 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t430 = load { ptr, i64, i64 }, ptr %t429 %t431 = extractvalue { ptr, i64, i64 } %t430, 1 %t432 = icmp uge i64 0, %t431 br i1 %t432, label %range2761, label %inrange2762 range2761: call void @finch_panic_index(ptr @.str.1808, i64 1033, i64 0, i64 %t431) unreachable inrange2762: %t433 = extractvalue { ptr, i64, i64 } %t430, 0 %t434 = getelementptr inbounds %S.ast.Type, ptr %t433, i64 0 %t435 = load %S.ast.Type, ptr %t434 call void @finch.gen.emitFormat(ptr %t413, { ptr, i64, i64 } { ptr @.str.1806, i64 4, i64 0 }, { ptr, i64, i64 } %t428, %S.ast.Type %t435, i1 true) %t436 = load ptr, ptr %a1 call void @finch.gen.bufText(ptr %t436, { ptr, i64, i64 } { ptr @.str.1809, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1810, i64 2, i64 0 }) %t437 = load ptr, ptr %a1 %t438 = load ptr, ptr %a1 %t439 = load ptr, ptr %a1 %t440 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t441 = load { ptr, i64, i64 }, ptr %t440 %t442 = extractvalue { ptr, i64, i64 } %t441, 1 %t443 = icmp uge i64 1, %t442 br i1 %t443, label %range2763, label %inrange2764 range2763: call void @finch_panic_index(ptr @.str.1812, i64 1035, i64 1, i64 %t442) unreachable inrange2764: %t444 = extractvalue { ptr, i64, i64 } %t441, 0 %t445 = getelementptr inbounds %S.ast.Type, ptr %t444, i64 1 %t446 = load %S.ast.Type, ptr %t445 %t447 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t439, %S.ast.Type %t446) %t448 = load ptr, ptr %a1 %t449 = load { ptr, i64, i64 }, ptr %a364 %t450 = load %S.ast.Type, ptr %a2 %t451 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t448, { ptr, i64, i64 } %t449, %S.ast.Type %t450, i64 2) %t452 = call { ptr, i64, i64 } @finch.gen.load(ptr %t438, { ptr, i64, i64 } %t447, { ptr, i64, i64 } %t451) %t453 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t454 = load { ptr, i64, i64 }, ptr %t453 %t455 = extractvalue { ptr, i64, i64 } %t454, 1 %t456 = icmp uge i64 1, %t455 br i1 %t456, label %range2765, label %inrange2766 range2765: call void @finch_panic_index(ptr @.str.1813, i64 1035, i64 1, i64 %t455) unreachable inrange2766: %t457 = extractvalue { ptr, i64, i64 } %t454, 0 %t458 = getelementptr inbounds %S.ast.Type, ptr %t457, i64 1 %t459 = load %S.ast.Type, ptr %t458 call void @finch.gen.emitFormat(ptr %t437, { ptr, i64, i64 } { ptr @.str.1811, i64 4, i64 0 }, { ptr, i64, i64 } %t452, %S.ast.Type %t459, i1 true) %t460 = load ptr, ptr %a1 %t461 = load { ptr, i64, i64 }, ptr %a370 call void @finch.gen.br(ptr %t460, { ptr, i64, i64 } %t461) %t462 = load ptr, ptr %a1 %t463 = load { ptr, i64, i64 }, ptr %a370 call void @finch.gen.label(ptr %t462, { ptr, i64, i64 } %t463) %t464 = load ptr, ptr %a1 %t465 = load { ptr, i64, i64 }, ptr %a354 call void @finch.gen.loopEnd(ptr %t464, { ptr, i64, i64 } %t465) %t466 = load ptr, ptr %a1 call void @finch.gen.bufText(ptr %t466, { ptr, i64, i64 } { ptr @.str.1814, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1815, i64 1, i64 0 }) br label %endif2756 else2755: %t467 = load ptr, ptr %a1 %t468 = icmp eq ptr %t467, null br i1 %t468, label %panic2767, label %ok2768 panic2767: call void @finch_panic(ptr @.str.1816, i64 1041, ptr @.str.1817) unreachable ok2768: %t469 = getelementptr inbounds %S.gen.Gen, ptr %t467, i32 0, i32 15 %t470 = load ptr, ptr %a1 %t471 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t472 = load { ptr, i64, i64 }, ptr %t471 %t473 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t474 = load { ptr, i64, i64 }, ptr %t473 %t475 = call i64 @finch.gen.findStruct(ptr %t470, { ptr, i64, i64 } %t472, { ptr, i64, i64 } %t474) %t476 = load { ptr, i64, i64 }, ptr %t469 %t477 = extractvalue { ptr, i64, i64 } %t476, 1 %t478 = icmp uge i64 %t475, %t477 br i1 %t478, label %range2769, label %inrange2770 range2769: call void @finch_panic_index(ptr @.str.1818, i64 1041, i64 %t475, i64 %t477) unreachable inrange2770: %t479 = extractvalue { ptr, i64, i64 } %t476, 0 %t480 = getelementptr inbounds %S.gen.StructDef, ptr %t479, i64 %t475 %t481 = load %S.gen.StructDef, ptr %t480 store %S.gen.StructDef %t481, ptr %a482 call void @finch.copy.S_gen_StructDef(ptr %a483, ptr %a482) %t484 = load %S.gen.StructDef, ptr %a483 store %S.gen.StructDef %t484, ptr %a485 %t486 = load ptr, ptr %a1 %t487 = load %S.ast.Type, ptr %a2 %t488 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t486, %S.ast.Type %t487) store { ptr, i64, i64 } %t488, ptr %a489 %t490 = load ptr, ptr %a1 %t491 = getelementptr inbounds %S.gen.StructDef, ptr %a485, i32 0, i32 1 %t492 = load { ptr, i64, i64 }, ptr %t491 store { ptr, i64, i64 } %t492, ptr %a494 store { ptr, i64, i64 } { ptr @.str.1820, i64 1, i64 0 }, ptr %a495 call void @finch_str_concat(ptr %a493, ptr %a494, ptr %a495) %t496 = load { ptr, i64, i64 }, ptr %a493 call void @finch.gen.bufText(ptr %t490, { ptr, i64, i64 } { ptr @.str.1819, i64 4, i64 0 }, { ptr, i64, i64 } %t496) %t497 = getelementptr inbounds %S.gen.StructDef, ptr %a485, i32 0, i32 12 %t498 = getelementptr inbounds { ptr, i64, i64 }, ptr %t497, i32 0, i32 1 %t499 = load i64, ptr %t498 store i64 0, ptr %a500 br label %for.cond2771 for.cond2771: %t501 = load i64, ptr %a500 %t502 = icmp slt i64 %t501, %t499 br i1 %t502, label %for.body2772, label %for.end2774 for.body2772: store { ptr, i64, i64 } { ptr @.str.1821, i64 2, i64 0 }, ptr %a503 %t504 = load i64, ptr %a500 %t505 = icmp eq i64 %t504, 0 br i1 %t505, label %then2775, label %endif2777 then2775: store { ptr, i64, i64 } { ptr @.str.1822, i64 0, i64 0 }, ptr %a503 br label %endif2777 endif2777: %t506 = load ptr, ptr %a1 %t507 = load { ptr, i64, i64 }, ptr %a503 %t508 = getelementptr inbounds %S.gen.StructDef, ptr %a485, i32 0, i32 11 %t509 = load i64, ptr %a500 %t510 = load { ptr, i64, i64 }, ptr %t508 %t511 = extractvalue { ptr, i64, i64 } %t510, 1 %t512 = icmp uge i64 %t509, %t511 br i1 %t512, label %range2778, label %inrange2779 range2778: call void @finch_panic_index(ptr @.str.1824, i64 1049, i64 %t509, i64 %t511) unreachable inrange2779: %t513 = extractvalue { ptr, i64, i64 } %t510, 0 %t514 = getelementptr inbounds { ptr, i64, i64 }, ptr %t513, i64 %t509 %t515 = load { ptr, i64, i64 }, ptr %t514 store { ptr, i64, i64 } %t507, ptr %a517 store { ptr, i64, i64 } %t515, ptr %a518 call void @finch_str_concat(ptr %a516, ptr %a517, ptr %a518) %t519 = load { ptr, i64, i64 }, ptr %a516 store { ptr, i64, i64 } %t519, ptr %a521 store { ptr, i64, i64 } { ptr @.str.1825, i64 2, i64 0 }, ptr %a522 call void @finch_str_concat(ptr %a520, ptr %a521, ptr %a522) %t523 = load { ptr, i64, i64 }, ptr %a520 call void @finch.gen.bufText(ptr %t506, { ptr, i64, i64 } { ptr @.str.1823, i64 4, i64 0 }, { ptr, i64, i64 } %t523) %t524 = load ptr, ptr %a1 %t525 = load { ptr, i64, i64 }, ptr %a489 store { ptr, i64, i64 } { ptr @.str.1826, i64 23, i64 0 }, ptr %a527 store { ptr, i64, i64 } %t525, ptr %a528 call void @finch_str_concat(ptr %a526, ptr %a527, ptr %a528) %t529 = load { ptr, i64, i64 }, ptr %a526 store { ptr, i64, i64 } %t529, ptr %a531 store { ptr, i64, i64 } { ptr @.str.1827, i64 21, i64 0 }, ptr %a532 call void @finch_str_concat(ptr %a530, ptr %a531, ptr %a532) %t533 = load { ptr, i64, i64 }, ptr %a530 %t534 = getelementptr inbounds %S.gen.StructDef, ptr %a485, i32 0, i32 3 %t535 = load i64, ptr %a500 %t536 = load { ptr, i64, i64 }, ptr %t534 %t537 = extractvalue { ptr, i64, i64 } %t536, 1 %t538 = icmp uge i64 %t535, %t537 br i1 %t538, label %range2780, label %inrange2781 range2780: call void @finch_panic_index(ptr @.str.1828, i64 1050, i64 %t535, i64 %t537) unreachable inrange2781: %t539 = extractvalue { ptr, i64, i64 } %t536, 0 %t540 = getelementptr inbounds i64, ptr %t539, i64 %t535 %t541 = load i64, ptr %t540 call void @finch_str_from_int(ptr %a542, i64 %t541) %t543 = load { ptr, i64, i64 }, ptr %a542 store { ptr, i64, i64 } %t533, ptr %a545 store { ptr, i64, i64 } %t543, ptr %a546 call void @finch_str_concat(ptr %a544, ptr %a545, ptr %a546) %t547 = load { ptr, i64, i64 }, ptr %a544 %t548 = call { ptr, i64, i64 } @finch.gen.op(ptr %t524, { ptr, i64, i64 } %t547) store { ptr, i64, i64 } %t548, ptr %a549 %t550 = load ptr, ptr %a1 %t551 = load ptr, ptr %a1 %t552 = load ptr, ptr %a1 %t553 = getelementptr inbounds %S.gen.StructDef, ptr %a485, i32 0, i32 12 %t554 = load i64, ptr %a500 %t555 = load { ptr, i64, i64 }, ptr %t553 %t556 = extractvalue { ptr, i64, i64 } %t555, 1 %t557 = icmp uge i64 %t554, %t556 br i1 %t557, label %range2782, label %inrange2783 range2782: call void @finch_panic_index(ptr @.str.1830, i64 1051, i64 %t554, i64 %t556) unreachable inrange2783: %t558 = extractvalue { ptr, i64, i64 } %t555, 0 %t559 = getelementptr inbounds %S.ast.Type, ptr %t558, i64 %t554 %t560 = load %S.ast.Type, ptr %t559 %t561 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t552, %S.ast.Type %t560) %t562 = load { ptr, i64, i64 }, ptr %a549 %t563 = call { ptr, i64, i64 } @finch.gen.load(ptr %t551, { ptr, i64, i64 } %t561, { ptr, i64, i64 } %t562) %t564 = getelementptr inbounds %S.gen.StructDef, ptr %a485, i32 0, i32 12 %t565 = load i64, ptr %a500 %t566 = load { ptr, i64, i64 }, ptr %t564 %t567 = extractvalue { ptr, i64, i64 } %t566, 1 %t568 = icmp uge i64 %t565, %t567 br i1 %t568, label %range2784, label %inrange2785 range2784: call void @finch_panic_index(ptr @.str.1831, i64 1051, i64 %t565, i64 %t567) unreachable inrange2785: %t569 = extractvalue { ptr, i64, i64 } %t566, 0 %t570 = getelementptr inbounds %S.ast.Type, ptr %t569, i64 %t565 %t571 = load %S.ast.Type, ptr %t570 call void @finch.gen.emitFormat(ptr %t550, { ptr, i64, i64 } { ptr @.str.1829, i64 4, i64 0 }, { ptr, i64, i64 } %t563, %S.ast.Type %t571, i1 true) br label %for.step2773 for.step2773: %t572 = load i64, ptr %a500 %t573 = add i64 %t572, 1 store i64 %t573, ptr %a500 br label %for.cond2771 for.end2774: %t574 = load ptr, ptr %a1 call void @finch.gen.bufText(ptr %t574, { ptr, i64, i64 } { ptr @.str.1832, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1833, i64 1, i64 0 }) br label %endif2756 endif2756: br label %endif2731 endif2731: br label %endif2722 endif2722: %t575 = load ptr, ptr %a1 call void @finch.gen.emit(ptr %t575, { ptr, i64, i64 } { ptr @.str.1834, i64 8, i64 0 }) %t576 = load ptr, ptr %a1 %t577 = load %S.gen.Saved, ptr %a34 %t578 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } { ptr @.str.1835, i64 21, i64 0 }, ptr %a580 store { ptr, i64, i64 } %t578, ptr %a581 call void @finch_str_concat(ptr %a579, ptr %a580, ptr %a581) %t582 = load { ptr, i64, i64 }, ptr %a579 store { ptr, i64, i64 } %t582, ptr %a584 store { ptr, i64, i64 } { ptr @.str.1836, i64 18, i64 0 }, ptr %a585 call void @finch_str_concat(ptr %a583, ptr %a584, ptr %a585) %t586 = load { ptr, i64, i64 }, ptr %a583 call void @finch.gen.endHelper(ptr %t576, %S.gen.Saved %t577, { ptr, i64, i64 } %t586) %t587 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t587, ptr %a588 call void @finch_str_copy(ptr %a589, ptr %a588) %t590 = load { ptr, i64, i64 }, ptr %a589 ret { ptr, i64, i64 } %t590 } define internal { ptr, i64, i64 } @finch.gen.intCast(ptr %p0, { ptr, i64, i64 } %p1, %S.ast.Type %p2, %S.ast.Type %p3) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca %S.ast.Type, align 16 %a4 = alloca %S.ast.Type, align 16 %a7 = alloca i64, align 16 %a10 = alloca i64, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a85 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca { ptr, i64, i64 }, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 %a106 = alloca { ptr, i64, i64 }, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store %S.ast.Type %p2, ptr %a3 store %S.ast.Type %p3, ptr %a4 %t5 = load %S.ast.Type, ptr %a3 %t6 = call i64 @finch.gen.bitsOf(%S.ast.Type %t5) store i64 %t6, ptr %a7 %t8 = load %S.ast.Type, ptr %a4 %t9 = call i64 @finch.gen.bitsOf(%S.ast.Type %t8) store i64 %t9, ptr %a10 %t11 = load i64, ptr %a7 %t12 = load i64, ptr %a10 %t13 = icmp eq i64 %t11, %t12 br i1 %t13, label %then2786, label %endif2788 then2786: %t14 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t14, ptr %a15 call void @finch_str_copy(ptr %a16, ptr %a15) %t17 = load { ptr, i64, i64 }, ptr %a16 ret { ptr, i64, i64 } %t17 endif2788: %t18 = load i64, ptr %a10 %t19 = load i64, ptr %a7 %t20 = icmp slt i64 %t18, %t19 br i1 %t20, label %then2789, label %endif2791 then2789: %t21 = load ptr, ptr %a1 %t22 = load ptr, ptr %a1 %t23 = load %S.ast.Type, ptr %a3 %t24 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t22, %S.ast.Type %t23) store { ptr, i64, i64 } { ptr @.str.1837, i64 6, i64 0 }, ptr %a26 store { ptr, i64, i64 } %t24, ptr %a27 call void @finch_str_concat(ptr %a25, ptr %a26, ptr %a27) %t28 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t28, ptr %a30 store { ptr, i64, i64 } { ptr @.str.1838, i64 1, i64 0 }, ptr %a31 call void @finch_str_concat(ptr %a29, ptr %a30, ptr %a31) %t32 = load { ptr, i64, i64 }, ptr %a29 %t33 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t32, ptr %a35 store { ptr, i64, i64 } %t33, ptr %a36 call void @finch_str_concat(ptr %a34, ptr %a35, ptr %a36) %t37 = load { ptr, i64, i64 }, ptr %a34 store { ptr, i64, i64 } %t37, ptr %a39 store { ptr, i64, i64 } { ptr @.str.1839, i64 4, i64 0 }, ptr %a40 call void @finch_str_concat(ptr %a38, ptr %a39, ptr %a40) %t41 = load { ptr, i64, i64 }, ptr %a38 %t42 = load ptr, ptr %a1 %t43 = load %S.ast.Type, ptr %a4 %t44 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t42, %S.ast.Type %t43) store { ptr, i64, i64 } %t41, ptr %a46 store { ptr, i64, i64 } %t44, ptr %a47 call void @finch_str_concat(ptr %a45, ptr %a46, ptr %a47) %t48 = load { ptr, i64, i64 }, ptr %a45 %t49 = call { ptr, i64, i64 } @finch.gen.op(ptr %t21, { ptr, i64, i64 } %t48) ret { ptr, i64, i64 } %t49 endif2791: %t50 = load %S.ast.Type, ptr %a3 %t51 = call i1 @finch.gen.isSigned(%S.ast.Type %t50) br i1 %t51, label %then2792, label %endif2794 then2792: %t52 = load ptr, ptr %a1 %t53 = load ptr, ptr %a1 %t54 = load %S.ast.Type, ptr %a3 %t55 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t53, %S.ast.Type %t54) store { ptr, i64, i64 } { ptr @.str.1840, i64 5, i64 0 }, ptr %a57 store { ptr, i64, i64 } %t55, ptr %a58 call void @finch_str_concat(ptr %a56, ptr %a57, ptr %a58) %t59 = load { ptr, i64, i64 }, ptr %a56 store { ptr, i64, i64 } %t59, ptr %a61 store { ptr, i64, i64 } { ptr @.str.1841, i64 1, i64 0 }, ptr %a62 call void @finch_str_concat(ptr %a60, ptr %a61, ptr %a62) %t63 = load { ptr, i64, i64 }, ptr %a60 %t64 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t63, ptr %a66 store { ptr, i64, i64 } %t64, ptr %a67 call void @finch_str_concat(ptr %a65, ptr %a66, ptr %a67) %t68 = load { ptr, i64, i64 }, ptr %a65 store { ptr, i64, i64 } %t68, ptr %a70 store { ptr, i64, i64 } { ptr @.str.1842, i64 4, i64 0 }, ptr %a71 call void @finch_str_concat(ptr %a69, ptr %a70, ptr %a71) %t72 = load { ptr, i64, i64 }, ptr %a69 %t73 = load ptr, ptr %a1 %t74 = load %S.ast.Type, ptr %a4 %t75 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t73, %S.ast.Type %t74) store { ptr, i64, i64 } %t72, ptr %a77 store { ptr, i64, i64 } %t75, ptr %a78 call void @finch_str_concat(ptr %a76, ptr %a77, ptr %a78) %t79 = load { ptr, i64, i64 }, ptr %a76 %t80 = call { ptr, i64, i64 } @finch.gen.op(ptr %t52, { ptr, i64, i64 } %t79) ret { ptr, i64, i64 } %t80 endif2794: %t81 = load ptr, ptr %a1 %t82 = load ptr, ptr %a1 %t83 = load %S.ast.Type, ptr %a3 %t84 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t82, %S.ast.Type %t83) store { ptr, i64, i64 } { ptr @.str.1843, i64 5, i64 0 }, ptr %a86 store { ptr, i64, i64 } %t84, ptr %a87 call void @finch_str_concat(ptr %a85, ptr %a86, ptr %a87) %t88 = load { ptr, i64, i64 }, ptr %a85 store { ptr, i64, i64 } %t88, ptr %a90 store { ptr, i64, i64 } { ptr @.str.1844, i64 1, i64 0 }, ptr %a91 call void @finch_str_concat(ptr %a89, ptr %a90, ptr %a91) %t92 = load { ptr, i64, i64 }, ptr %a89 %t93 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t92, ptr %a95 store { ptr, i64, i64 } %t93, ptr %a96 call void @finch_str_concat(ptr %a94, ptr %a95, ptr %a96) %t97 = load { ptr, i64, i64 }, ptr %a94 store { ptr, i64, i64 } %t97, ptr %a99 store { ptr, i64, i64 } { ptr @.str.1845, i64 4, i64 0 }, ptr %a100 call void @finch_str_concat(ptr %a98, ptr %a99, ptr %a100) %t101 = load { ptr, i64, i64 }, ptr %a98 %t102 = load ptr, ptr %a1 %t103 = load %S.ast.Type, ptr %a4 %t104 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t102, %S.ast.Type %t103) store { ptr, i64, i64 } %t101, ptr %a106 store { ptr, i64, i64 } %t104, ptr %a107 call void @finch_str_concat(ptr %a105, ptr %a106, ptr %a107) %t108 = load { ptr, i64, i64 }, ptr %a105 %t109 = call { ptr, i64, i64 } @finch.gen.op(ptr %t81, { ptr, i64, i64 } %t108) ret { ptr, i64, i64 } %t109 } define internal { ptr, i64, i64 } @finch.gen.floatCast(ptr %p0, { ptr, i64, i64 } %p1, %S.ast.Type %p2, %S.ast.Type %p3) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca %S.ast.Type, align 16 %a4 = alloca %S.ast.Type, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store %S.ast.Type %p2, ptr %a3 store %S.ast.Type %p3, ptr %a4 %t5 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 %t6 = load { ptr, i64, i64 }, ptr %t5 %t7 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 0 %t8 = load { ptr, i64, i64 }, ptr %t7 store { ptr, i64, i64 } %t6, ptr %a9 store { ptr, i64, i64 } %t8, ptr %a10 %t11 = call i32 @finch_str_eq(ptr %a9, ptr %a10) %t12 = icmp ne i32 %t11, 0 br i1 %t12, label %then2795, label %endif2797 then2795: %t13 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t13, ptr %a14 call void @finch_str_copy(ptr %a15, ptr %a14) %t16 = load { ptr, i64, i64 }, ptr %a15 ret { ptr, i64, i64 } %t16 endif2797: %t17 = load %S.ast.Type, ptr %a4 %t18 = call i64 @finch.gen.bitsOf(%S.ast.Type %t17) %t19 = load %S.ast.Type, ptr %a3 %t20 = call i64 @finch.gen.bitsOf(%S.ast.Type %t19) %t21 = icmp sgt i64 %t18, %t20 br i1 %t21, label %then2798, label %endif2800 then2798: %t22 = load ptr, ptr %a1 %t23 = load ptr, ptr %a1 %t24 = load %S.ast.Type, ptr %a3 %t25 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t23, %S.ast.Type %t24) store { ptr, i64, i64 } { ptr @.str.1846, i64 6, i64 0 }, ptr %a27 store { ptr, i64, i64 } %t25, ptr %a28 call void @finch_str_concat(ptr %a26, ptr %a27, ptr %a28) %t29 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } %t29, ptr %a31 store { ptr, i64, i64 } { ptr @.str.1847, i64 1, i64 0 }, ptr %a32 call void @finch_str_concat(ptr %a30, ptr %a31, ptr %a32) %t33 = load { ptr, i64, i64 }, ptr %a30 %t34 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t33, ptr %a36 store { ptr, i64, i64 } %t34, ptr %a37 call void @finch_str_concat(ptr %a35, ptr %a36, ptr %a37) %t38 = load { ptr, i64, i64 }, ptr %a35 store { ptr, i64, i64 } %t38, ptr %a40 store { ptr, i64, i64 } { ptr @.str.1848, i64 4, i64 0 }, ptr %a41 call void @finch_str_concat(ptr %a39, ptr %a40, ptr %a41) %t42 = load { ptr, i64, i64 }, ptr %a39 %t43 = load ptr, ptr %a1 %t44 = load %S.ast.Type, ptr %a4 %t45 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t43, %S.ast.Type %t44) store { ptr, i64, i64 } %t42, ptr %a47 store { ptr, i64, i64 } %t45, ptr %a48 call void @finch_str_concat(ptr %a46, ptr %a47, ptr %a48) %t49 = load { ptr, i64, i64 }, ptr %a46 %t50 = call { ptr, i64, i64 } @finch.gen.op(ptr %t22, { ptr, i64, i64 } %t49) ret { ptr, i64, i64 } %t50 endif2800: %t51 = load ptr, ptr %a1 %t52 = load ptr, ptr %a1 %t53 = load %S.ast.Type, ptr %a3 %t54 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t52, %S.ast.Type %t53) store { ptr, i64, i64 } { ptr @.str.1849, i64 8, i64 0 }, ptr %a56 store { ptr, i64, i64 } %t54, ptr %a57 call void @finch_str_concat(ptr %a55, ptr %a56, ptr %a57) %t58 = load { ptr, i64, i64 }, ptr %a55 store { ptr, i64, i64 } %t58, ptr %a60 store { ptr, i64, i64 } { ptr @.str.1850, i64 1, i64 0 }, ptr %a61 call void @finch_str_concat(ptr %a59, ptr %a60, ptr %a61) %t62 = load { ptr, i64, i64 }, ptr %a59 %t63 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t62, ptr %a65 store { ptr, i64, i64 } %t63, ptr %a66 call void @finch_str_concat(ptr %a64, ptr %a65, ptr %a66) %t67 = load { ptr, i64, i64 }, ptr %a64 store { ptr, i64, i64 } %t67, ptr %a69 store { ptr, i64, i64 } { ptr @.str.1851, i64 4, i64 0 }, ptr %a70 call void @finch_str_concat(ptr %a68, ptr %a69, ptr %a70) %t71 = load { ptr, i64, i64 }, ptr %a68 %t72 = load ptr, ptr %a1 %t73 = load %S.ast.Type, ptr %a4 %t74 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t72, %S.ast.Type %t73) store { ptr, i64, i64 } %t71, ptr %a76 store { ptr, i64, i64 } %t74, ptr %a77 call void @finch_str_concat(ptr %a75, ptr %a76, ptr %a77) %t78 = load { ptr, i64, i64 }, ptr %a75 %t79 = call { ptr, i64, i64 } @finch.gen.op(ptr %t51, { ptr, i64, i64 } %t78) ret { ptr, i64, i64 } %t79 } define internal { ptr, i64, i64 } @finch.gen.intToFloat(ptr %p0, { ptr, i64, i64 } %p1, %S.ast.Type %p2, %S.ast.Type %p3) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca %S.ast.Type, align 16 %a4 = alloca %S.ast.Type, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store %S.ast.Type %p2, ptr %a3 store %S.ast.Type %p3, ptr %a4 %t5 = load %S.ast.Type, ptr %a3 %t6 = call i1 @finch.gen.isSigned(%S.ast.Type %t5) br i1 %t6, label %then2801, label %endif2803 then2801: %t7 = load ptr, ptr %a1 %t8 = load ptr, ptr %a1 %t9 = load %S.ast.Type, ptr %a3 %t10 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t8, %S.ast.Type %t9) store { ptr, i64, i64 } { ptr @.str.1852, i64 7, i64 0 }, ptr %a12 store { ptr, i64, i64 } %t10, ptr %a13 call void @finch_str_concat(ptr %a11, ptr %a12, ptr %a13) %t14 = load { ptr, i64, i64 }, ptr %a11 store { ptr, i64, i64 } %t14, ptr %a16 store { ptr, i64, i64 } { ptr @.str.1853, i64 1, i64 0 }, ptr %a17 call void @finch_str_concat(ptr %a15, ptr %a16, ptr %a17) %t18 = load { ptr, i64, i64 }, ptr %a15 %t19 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t18, ptr %a21 store { ptr, i64, i64 } %t19, ptr %a22 call void @finch_str_concat(ptr %a20, ptr %a21, ptr %a22) %t23 = load { ptr, i64, i64 }, ptr %a20 store { ptr, i64, i64 } %t23, ptr %a25 store { ptr, i64, i64 } { ptr @.str.1854, i64 4, i64 0 }, ptr %a26 call void @finch_str_concat(ptr %a24, ptr %a25, ptr %a26) %t27 = load { ptr, i64, i64 }, ptr %a24 %t28 = load ptr, ptr %a1 %t29 = load %S.ast.Type, ptr %a4 %t30 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t28, %S.ast.Type %t29) store { ptr, i64, i64 } %t27, ptr %a32 store { ptr, i64, i64 } %t30, ptr %a33 call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33) %t34 = load { ptr, i64, i64 }, ptr %a31 %t35 = call { ptr, i64, i64 } @finch.gen.op(ptr %t7, { ptr, i64, i64 } %t34) ret { ptr, i64, i64 } %t35 endif2803: %t36 = load ptr, ptr %a1 %t37 = load ptr, ptr %a1 %t38 = load %S.ast.Type, ptr %a3 %t39 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t37, %S.ast.Type %t38) store { ptr, i64, i64 } { ptr @.str.1855, i64 7, i64 0 }, ptr %a41 store { ptr, i64, i64 } %t39, ptr %a42 call void @finch_str_concat(ptr %a40, ptr %a41, ptr %a42) %t43 = load { ptr, i64, i64 }, ptr %a40 store { ptr, i64, i64 } %t43, ptr %a45 store { ptr, i64, i64 } { ptr @.str.1856, i64 1, i64 0 }, ptr %a46 call void @finch_str_concat(ptr %a44, ptr %a45, ptr %a46) %t47 = load { ptr, i64, i64 }, ptr %a44 %t48 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t47, ptr %a50 store { ptr, i64, i64 } %t48, ptr %a51 call void @finch_str_concat(ptr %a49, ptr %a50, ptr %a51) %t52 = load { ptr, i64, i64 }, ptr %a49 store { ptr, i64, i64 } %t52, ptr %a54 store { ptr, i64, i64 } { ptr @.str.1857, i64 4, i64 0 }, ptr %a55 call void @finch_str_concat(ptr %a53, ptr %a54, ptr %a55) %t56 = load { ptr, i64, i64 }, ptr %a53 %t57 = load ptr, ptr %a1 %t58 = load %S.ast.Type, ptr %a4 %t59 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t57, %S.ast.Type %t58) store { ptr, i64, i64 } %t56, ptr %a61 store { ptr, i64, i64 } %t59, ptr %a62 call void @finch_str_concat(ptr %a60, ptr %a61, ptr %a62) %t63 = load { ptr, i64, i64 }, ptr %a60 %t64 = call { ptr, i64, i64 } @finch.gen.op(ptr %t36, { ptr, i64, i64 } %t63) ret { ptr, i64, i64 } %t64 } define internal void @finch.copy.S_gen_Val(ptr %dst, ptr %src) { entry: %t1 = load %S.gen.Val, ptr %src store %S.gen.Val %t1, ptr %dst %t2 = getelementptr inbounds %S.gen.Val, ptr %dst, i32 0, i32 0 %t3 = getelementptr inbounds %S.gen.Val, ptr %src, i32 0, i32 0 call void @finch_str_copy(ptr %t2, ptr %t3) %t4 = getelementptr inbounds %S.gen.Val, ptr %dst, i32 0, i32 1 %t5 = getelementptr inbounds %S.gen.Val, ptr %src, i32 0, i32 1 call void @finch.copy.S_ast_Type(ptr %t4, ptr %t5) ret void } define internal %S.gen.Val @finch.gen.coerce(ptr %p0, %S.gen.Val %p1, %S.ast.Type %p2, %S.ast.Node %p3, { ptr, i64, i64 } %p4) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.gen.Val, align 16 %a3 = alloca %S.ast.Type, align 16 %a4 = alloca %S.ast.Node, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca %S.gen.Val, align 16 %a12 = alloca %S.gen.Val, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca %S.ast.Type, align 16 %a31 = alloca %S.ast.Type, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca %S.ast.Type, align 16 %a67 = alloca %S.ast.Type, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca %S.ast.Type, align 16 %a93 = alloca %S.ast.Type, align 16 %a110 = alloca %S.ast.Type, align 16 %a111 = alloca %S.ast.Type, align 16 %a120 = alloca { ptr, i64, i64 }, align 16 %a121 = alloca { ptr, i64, i64 }, align 16 %a122 = alloca { ptr, i64, i64 }, align 16 %a124 = alloca { ptr, i64, i64 }, align 16 %a125 = alloca { ptr, i64, i64 }, align 16 %a126 = alloca { ptr, i64, i64 }, align 16 %a130 = alloca { ptr, i64, i64 }, align 16 %a131 = alloca { ptr, i64, i64 }, align 16 %a132 = alloca { ptr, i64, i64 }, align 16 %a144 = alloca { ptr, i64, i64 }, align 16 %a145 = alloca { ptr, i64, i64 }, align 16 %a151 = alloca { ptr, i64, i64 }, align 16 %a152 = alloca { ptr, i64, i64 }, align 16 %a153 = alloca { ptr, i64, i64 }, align 16 %a157 = alloca %S.ast.Type, align 16 %a158 = alloca %S.ast.Type, align 16 %a171 = alloca %S.ast.Type, align 16 %a172 = alloca %S.ast.Type, align 16 %a178 = alloca { ptr, i64, i64 }, align 16 %a179 = alloca { ptr, i64, i64 }, align 16 %a184 = alloca { ptr, i64, i64 }, align 16 %a185 = alloca { ptr, i64, i64 }, align 16 %a198 = alloca %S.ast.Type, align 16 %a199 = alloca %S.ast.Type, align 16 %a205 = alloca { ptr, i64, i64 }, align 16 %a206 = alloca { ptr, i64, i64 }, align 16 %a211 = alloca { ptr, i64, i64 }, align 16 %a212 = alloca { ptr, i64, i64 }, align 16 %a228 = alloca %S.ast.Type, align 16 %a229 = alloca %S.ast.Type, align 16 %a233 = alloca { ptr, i64, i64 }, align 16 %a234 = alloca { ptr, i64, i64 }, align 16 %a235 = alloca { ptr, i64, i64 }, align 16 %a239 = alloca { ptr, i64, i64 }, align 16 %a240 = alloca { ptr, i64, i64 }, align 16 %a241 = alloca { ptr, i64, i64 }, align 16 %a243 = alloca { ptr, i64, i64 }, align 16 %a244 = alloca { ptr, i64, i64 }, align 16 %a245 = alloca { ptr, i64, i64 }, align 16 %a250 = alloca { ptr, i64, i64 }, align 16 %a251 = alloca { ptr, i64, i64 }, align 16 %a252 = alloca { ptr, i64, i64 }, align 16 %a254 = alloca { ptr, i64, i64 }, align 16 %a262 = alloca { ptr, i64, i64 }, align 16 %a263 = alloca { ptr, i64, i64 }, align 16 %a264 = alloca { ptr, i64, i64 }, align 16 %a268 = alloca { ptr, i64, i64 }, align 16 %a269 = alloca { ptr, i64, i64 }, align 16 %a270 = alloca { ptr, i64, i64 }, align 16 %a272 = alloca { ptr, i64, i64 }, align 16 %a273 = alloca { ptr, i64, i64 }, align 16 %a274 = alloca { ptr, i64, i64 }, align 16 %a283 = alloca { ptr, i64, i64 }, align 16 %a284 = alloca { ptr, i64, i64 }, align 16 %a285 = alloca { ptr, i64, i64 }, align 16 %a288 = alloca { ptr, i64, i64 }, align 16 %a289 = alloca { ptr, i64, i64 }, align 16 %a290 = alloca { ptr, i64, i64 }, align 16 %a294 = alloca { ptr, i64, i64 }, align 16 %a295 = alloca { ptr, i64, i64 }, align 16 %a304 = alloca { ptr, i64, i64 }, align 16 %a305 = alloca { ptr, i64, i64 }, align 16 %a312 = alloca { ptr, i64, i64 }, align 16 %a313 = alloca { ptr, i64, i64 }, align 16 %a319 = alloca { ptr, i64, i64 }, align 16 %a320 = alloca { ptr, i64, i64 }, align 16 %a321 = alloca { ptr, i64, i64 }, align 16 %a327 = alloca %S.gen.Val, align 16 %a328 = alloca %S.gen.Val, align 16 store ptr %p0, ptr %a1 store %S.gen.Val %p1, ptr %a2 store %S.ast.Type %p2, ptr %a3 store %S.ast.Node %p3, ptr %a4 store { ptr, i64, i64 } %p4, ptr %a5 %t6 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t7 = load %S.ast.Type, ptr %t6 %t8 = load %S.ast.Type, ptr %a3 %t9 = call i1 @finch.ast.same(%S.ast.Type %t7, %S.ast.Type %t8) br i1 %t9, label %then2804, label %endif2806 then2804: %t10 = load %S.gen.Val, ptr %a2 store %S.gen.Val %t10, ptr %a11 call void @finch.copy.S_gen_Val(ptr %a12, ptr %a11) %t13 = load %S.gen.Val, ptr %a12 ret %S.gen.Val %t13 endif2806: %t14 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t15 = getelementptr inbounds %S.ast.Type, ptr %t14, i32 0, i32 0 %t16 = load { ptr, i64, i64 }, ptr %t15 store { ptr, i64, i64 } %t16, ptr %a17 store { ptr, i64, i64 } { ptr @.str.1858, i64 4, i64 0 }, ptr %a18 %t19 = call i32 @finch_str_eq(ptr %a17, ptr %a18) %t20 = icmp ne i32 %t19, 0 br label %logic.from2807 logic.from2807: br i1 %t20, label %logic.rhs2808, label %logic.end2809 logic.rhs2808: %t21 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 %t22 = load { ptr, i64, i64 }, ptr %t21 store { ptr, i64, i64 } %t22, ptr %a23 store { ptr, i64, i64 } { ptr @.str.1859, i64 3, i64 0 }, ptr %a24 %t25 = call i32 @finch_str_eq(ptr %a23, ptr %a24) %t26 = icmp ne i32 %t25, 0 br label %logic.rend2810 logic.rend2810: br label %logic.end2809 logic.end2809: %t27 = phi i1 [ false, %logic.from2807 ], [ %t26, %logic.rend2810 ] br i1 %t27, label %then2811, label %endif2813 then2811: %t28 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } { ptr @.str.1860, i64 4, i64 0 }, 0 %t29 = load %S.ast.Type, ptr %a3 store %S.ast.Type %t29, ptr %a30 call void @finch.copy.S_ast_Type(ptr %a31, ptr %a30) %t32 = load %S.ast.Type, ptr %a31 %t33 = insertvalue %S.gen.Val %t28, %S.ast.Type %t32, 1 ret %S.gen.Val %t33 endif2813: %t34 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t35 = getelementptr inbounds %S.ast.Type, ptr %t34, i32 0, i32 0 %t36 = load { ptr, i64, i64 }, ptr %t35 store { ptr, i64, i64 } %t36, ptr %a37 store { ptr, i64, i64 } { ptr @.str.1861, i64 3, i64 0 }, ptr %a38 %t39 = call i32 @finch_str_eq(ptr %a37, ptr %a38) %t40 = icmp ne i32 %t39, 0 br label %logic.from2814 logic.from2814: br i1 %t40, label %logic.rhs2815, label %logic.end2816 logic.rhs2815: %t41 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 %t42 = load { ptr, i64, i64 }, ptr %t41 store { ptr, i64, i64 } %t42, ptr %a43 store { ptr, i64, i64 } { ptr @.str.1862, i64 3, i64 0 }, ptr %a44 %t45 = call i32 @finch_str_eq(ptr %a43, ptr %a44) %t46 = icmp ne i32 %t45, 0 br label %logic.rend2817 logic.rend2817: br label %logic.end2816 logic.end2816: %t47 = phi i1 [ false, %logic.from2814 ], [ %t46, %logic.rend2817 ] br label %logic.from2818 logic.from2818: br i1 %t47, label %logic.rhs2819, label %logic.end2820 logic.rhs2819: %t48 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t49 = getelementptr inbounds %S.ast.Type, ptr %t48, i32 0, i32 1 %t50 = getelementptr inbounds { ptr, i64, i64 }, ptr %t49, i32 0, i32 1 %t51 = load i64, ptr %t50 %t52 = icmp eq i64 %t51, 0 br label %logic.from2821 logic.from2821: br i1 %t52, label %logic.end2823, label %logic.rhs2822 logic.rhs2822: %t53 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 %t54 = getelementptr inbounds { ptr, i64, i64 }, ptr %t53, i32 0, i32 1 %t55 = load i64, ptr %t54 %t56 = icmp eq i64 %t55, 0 br label %logic.rend2824 logic.rend2824: br label %logic.end2823 logic.end2823: %t57 = phi i1 [ true, %logic.from2821 ], [ %t56, %logic.rend2824 ] br label %logic.rend2825 logic.rend2825: br label %logic.end2820 logic.end2820: %t58 = phi i1 [ false, %logic.from2818 ], [ %t57, %logic.rend2825 ] br i1 %t58, label %then2826, label %endif2828 then2826: %t59 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 %t60 = load { ptr, i64, i64 }, ptr %t59 store { ptr, i64, i64 } %t60, ptr %a61 call void @finch_str_copy(ptr %a62, ptr %a61) %t63 = load { ptr, i64, i64 }, ptr %a62 %t64 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t63, 0 %t65 = load %S.ast.Type, ptr %a3 store %S.ast.Type %t65, ptr %a66 call void @finch.copy.S_ast_Type(ptr %a67, ptr %a66) %t68 = load %S.ast.Type, ptr %a67 %t69 = insertvalue %S.gen.Val %t64, %S.ast.Type %t68, 1 ret %S.gen.Val %t69 endif2828: %t70 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t71 = load %S.ast.Type, ptr %t70 %t72 = call i1 @finch.gen.isInt(%S.ast.Type %t71) br label %logic.from2829 logic.from2829: br i1 %t72, label %logic.rhs2830, label %logic.end2831 logic.rhs2830: %t73 = load %S.ast.Type, ptr %a3 %t74 = call i1 @finch.gen.isInt(%S.ast.Type %t73) br label %logic.rend2832 logic.rend2832: br label %logic.end2831 logic.end2831: %t75 = phi i1 [ false, %logic.from2829 ], [ %t74, %logic.rend2832 ] br i1 %t75, label %then2833, label %endif2835 then2833: %t76 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 3 %t77 = load i1, ptr %t76 br label %logic.from2836 logic.from2836: br i1 %t77, label %logic.rhs2837, label %logic.end2838 logic.rhs2837: %t78 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 %t79 = load { ptr, i64, i64 }, ptr %t78 %t80 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t81 = load %S.ast.Type, ptr %t80 %t82 = load %S.ast.Type, ptr %a3 %t83 = call i1 @finch.gen.fits({ ptr, i64, i64 } %t79, %S.ast.Type %t81, %S.ast.Type %t82) br label %logic.rend2839 logic.rend2839: br label %logic.end2838 logic.end2838: %t84 = phi i1 [ false, %logic.from2836 ], [ %t83, %logic.rend2839 ] br i1 %t84, label %then2840, label %endif2842 then2840: %t85 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 %t86 = load { ptr, i64, i64 }, ptr %t85 store { ptr, i64, i64 } %t86, ptr %a87 call void @finch_str_copy(ptr %a88, ptr %a87) %t89 = load { ptr, i64, i64 }, ptr %a88 %t90 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t89, 0 %t91 = load %S.ast.Type, ptr %a3 store %S.ast.Type %t91, ptr %a92 call void @finch.copy.S_ast_Type(ptr %a93, ptr %a92) %t94 = load %S.ast.Type, ptr %a93 %t95 = insertvalue %S.gen.Val %t90, %S.ast.Type %t94, 1 %t96 = insertvalue %S.gen.Val %t95, i1 true, 3 ret %S.gen.Val %t96 endif2842: %t97 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t98 = load %S.ast.Type, ptr %t97 %t99 = load %S.ast.Type, ptr %a3 %t100 = call i1 @finch.gen.widens(%S.ast.Type %t98, %S.ast.Type %t99) br i1 %t100, label %then2843, label %endif2845 then2843: %t101 = load ptr, ptr %a1 %t102 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 %t103 = load { ptr, i64, i64 }, ptr %t102 %t104 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t105 = load %S.ast.Type, ptr %t104 %t106 = load %S.ast.Type, ptr %a3 %t107 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t101, { ptr, i64, i64 } %t103, %S.ast.Type %t105, %S.ast.Type %t106) %t108 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t107, 0 %t109 = load %S.ast.Type, ptr %a3 store %S.ast.Type %t109, ptr %a110 call void @finch.copy.S_ast_Type(ptr %a111, ptr %a110) %t112 = load %S.ast.Type, ptr %a111 %t113 = insertvalue %S.gen.Val %t108, %S.ast.Type %t112, 1 ret %S.gen.Val %t113 endif2845: %t114 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 3 %t115 = load i1, ptr %t114 br i1 %t115, label %then2846, label %endif2848 then2846: %t116 = load ptr, ptr %a1 %t117 = load %S.ast.Node, ptr %a4 %t118 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 %t119 = load { ptr, i64, i64 }, ptr %t118 store { ptr, i64, i64 } { ptr @.str.1863, i64 11, i64 0 }, ptr %a121 store { ptr, i64, i64 } %t119, ptr %a122 call void @finch_str_concat(ptr %a120, ptr %a121, ptr %a122) %t123 = load { ptr, i64, i64 }, ptr %a120 store { ptr, i64, i64 } %t123, ptr %a125 store { ptr, i64, i64 } { ptr @.str.1864, i64 16, i64 0 }, ptr %a126 call void @finch_str_concat(ptr %a124, ptr %a125, ptr %a126) %t127 = load { ptr, i64, i64 }, ptr %a124 %t128 = load %S.ast.Type, ptr %a3 %t129 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t128) store { ptr, i64, i64 } %t127, ptr %a131 store { ptr, i64, i64 } %t129, ptr %a132 call void @finch_str_concat(ptr %a130, ptr %a131, ptr %a132) %t133 = load { ptr, i64, i64 }, ptr %a130 call void @finch.gen.fail(ptr %t116, %S.ast.Node %t117, { ptr, i64, i64 } %t133) br label %endif2848 endif2848: br label %endif2835 endif2835: %t134 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t135 = load %S.ast.Type, ptr %t134 %t136 = call i1 @finch.gen.isInt(%S.ast.Type %t135) br label %logic.from2849 logic.from2849: br i1 %t136, label %logic.rhs2850, label %logic.end2851 logic.rhs2850: %t137 = load %S.ast.Type, ptr %a3 %t138 = call i1 @finch.gen.isFloat(%S.ast.Type %t137) br label %logic.rend2852 logic.rend2852: br label %logic.end2851 logic.end2851: %t139 = phi i1 [ false, %logic.from2849 ], [ %t138, %logic.rend2852 ] br i1 %t139, label %then2853, label %endif2855 then2853: %t140 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 3 %t141 = load i1, ptr %t140 br label %logic.from2856 logic.from2856: br i1 %t141, label %logic.rhs2857, label %logic.end2858 logic.rhs2857: %t142 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 %t143 = load { ptr, i64, i64 }, ptr %t142 store { ptr, i64, i64 } %t143, ptr %a144 store { ptr, i64, i64 } { ptr @.str.1865, i64 5, i64 0 }, ptr %a145 %t146 = call i32 @finch_str_eq(ptr %a144, ptr %a145) %t147 = icmp ne i32 %t146, 0 br label %logic.rend2859 logic.rend2859: br label %logic.end2858 logic.end2858: %t148 = phi i1 [ false, %logic.from2856 ], [ %t147, %logic.rend2859 ] br i1 %t148, label %then2860, label %endif2862 then2860: %t149 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 %t150 = load { ptr, i64, i64 }, ptr %t149 store { ptr, i64, i64 } %t150, ptr %a152 store { ptr, i64, i64 } { ptr @.str.1866, i64 2, i64 0 }, ptr %a153 call void @finch_str_concat(ptr %a151, ptr %a152, ptr %a153) %t154 = load { ptr, i64, i64 }, ptr %a151 %t155 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t154, 0 %t156 = load %S.ast.Type, ptr %a3 store %S.ast.Type %t156, ptr %a157 call void @finch.copy.S_ast_Type(ptr %a158, ptr %a157) %t159 = load %S.ast.Type, ptr %a158 %t160 = insertvalue %S.gen.Val %t155, %S.ast.Type %t159, 1 %t161 = insertvalue %S.gen.Val %t160, i1 true, 3 ret %S.gen.Val %t161 endif2862: %t162 = load ptr, ptr %a1 %t163 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 %t164 = load { ptr, i64, i64 }, ptr %t163 %t165 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t166 = load %S.ast.Type, ptr %t165 %t167 = load %S.ast.Type, ptr %a3 %t168 = call { ptr, i64, i64 } @finch.gen.intToFloat(ptr %t162, { ptr, i64, i64 } %t164, %S.ast.Type %t166, %S.ast.Type %t167) %t169 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t168, 0 %t170 = load %S.ast.Type, ptr %a3 store %S.ast.Type %t170, ptr %a171 call void @finch.copy.S_ast_Type(ptr %a172, ptr %a171) %t173 = load %S.ast.Type, ptr %a172 %t174 = insertvalue %S.gen.Val %t169, %S.ast.Type %t173, 1 ret %S.gen.Val %t174 endif2855: %t175 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t176 = getelementptr inbounds %S.ast.Type, ptr %t175, i32 0, i32 0 %t177 = load { ptr, i64, i64 }, ptr %t176 store { ptr, i64, i64 } %t177, ptr %a178 store { ptr, i64, i64 } { ptr @.str.1867, i64 3, i64 0 }, ptr %a179 %t180 = call i32 @finch_str_eq(ptr %a178, ptr %a179) %t181 = icmp ne i32 %t180, 0 br label %logic.from2863 logic.from2863: br i1 %t181, label %logic.rhs2864, label %logic.end2865 logic.rhs2864: %t182 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 %t183 = load { ptr, i64, i64 }, ptr %t182 store { ptr, i64, i64 } %t183, ptr %a184 store { ptr, i64, i64 } { ptr @.str.1868, i64 5, i64 0 }, ptr %a185 %t186 = call i32 @finch_str_eq(ptr %a184, ptr %a185) %t187 = icmp ne i32 %t186, 0 br label %logic.rend2866 logic.rend2866: br label %logic.end2865 logic.end2865: %t188 = phi i1 [ false, %logic.from2863 ], [ %t187, %logic.rend2866 ] br i1 %t188, label %then2867, label %endif2869 then2867: %t189 = load ptr, ptr %a1 %t190 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 %t191 = load { ptr, i64, i64 }, ptr %t190 %t192 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t193 = load %S.ast.Type, ptr %t192 %t194 = load %S.ast.Type, ptr %a3 %t195 = call { ptr, i64, i64 } @finch.gen.floatCast(ptr %t189, { ptr, i64, i64 } %t191, %S.ast.Type %t193, %S.ast.Type %t194) %t196 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t195, 0 %t197 = load %S.ast.Type, ptr %a3 store %S.ast.Type %t197, ptr %a198 call void @finch.copy.S_ast_Type(ptr %a199, ptr %a198) %t200 = load %S.ast.Type, ptr %a199 %t201 = insertvalue %S.gen.Val %t196, %S.ast.Type %t200, 1 ret %S.gen.Val %t201 endif2869: %t202 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t203 = getelementptr inbounds %S.ast.Type, ptr %t202, i32 0, i32 0 %t204 = load { ptr, i64, i64 }, ptr %t203 store { ptr, i64, i64 } %t204, ptr %a205 store { ptr, i64, i64 } { ptr @.str.1869, i64 5, i64 0 }, ptr %a206 %t207 = call i32 @finch_str_eq(ptr %a205, ptr %a206) %t208 = icmp ne i32 %t207, 0 br label %logic.from2870 logic.from2870: br i1 %t208, label %logic.rhs2871, label %logic.end2872 logic.rhs2871: %t209 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 %t210 = load { ptr, i64, i64 }, ptr %t209 store { ptr, i64, i64 } %t210, ptr %a211 store { ptr, i64, i64 } { ptr @.str.1870, i64 3, i64 0 }, ptr %a212 %t213 = call i32 @finch_str_eq(ptr %a211, ptr %a212) %t214 = icmp ne i32 %t213, 0 br label %logic.rend2873 logic.rend2873: br label %logic.end2872 logic.end2872: %t215 = phi i1 [ false, %logic.from2870 ], [ %t214, %logic.rend2873 ] br label %logic.from2874 logic.from2874: br i1 %t215, label %logic.rhs2875, label %logic.end2876 logic.rhs2875: %t216 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 3 %t217 = load i1, ptr %t216 br label %logic.rend2877 logic.rend2877: br label %logic.end2876 logic.end2876: %t218 = phi i1 [ false, %logic.from2874 ], [ %t217, %logic.rend2877 ] br i1 %t218, label %then2878, label %endif2880 then2878: %t219 = load ptr, ptr %a1 %t220 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 %t221 = load { ptr, i64, i64 }, ptr %t220 %t222 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t223 = load %S.ast.Type, ptr %t222 %t224 = load %S.ast.Type, ptr %a3 %t225 = call { ptr, i64, i64 } @finch.gen.floatCast(ptr %t219, { ptr, i64, i64 } %t221, %S.ast.Type %t223, %S.ast.Type %t224) %t226 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t225, 0 %t227 = load %S.ast.Type, ptr %a3 store %S.ast.Type %t227, ptr %a228 call void @finch.copy.S_ast_Type(ptr %a229, ptr %a228) %t230 = load %S.ast.Type, ptr %a229 %t231 = insertvalue %S.gen.Val %t226, %S.ast.Type %t230, 1 ret %S.gen.Val %t231 endif2880: %t232 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } %t232, ptr %a234 store { ptr, i64, i64 } { ptr @.str.1871, i64 9, i64 0 }, ptr %a235 call void @finch_str_concat(ptr %a233, ptr %a234, ptr %a235) %t236 = load { ptr, i64, i64 }, ptr %a233 %t237 = load %S.ast.Type, ptr %a3 %t238 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t237) store { ptr, i64, i64 } %t236, ptr %a240 store { ptr, i64, i64 } %t238, ptr %a241 call void @finch_str_concat(ptr %a239, ptr %a240, ptr %a241) %t242 = load { ptr, i64, i64 }, ptr %a239 store { ptr, i64, i64 } %t242, ptr %a244 store { ptr, i64, i64 } { ptr @.str.1872, i64 14, i64 0 }, ptr %a245 call void @finch_str_concat(ptr %a243, ptr %a244, ptr %a245) %t246 = load { ptr, i64, i64 }, ptr %a243 %t247 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t248 = load %S.ast.Type, ptr %t247 %t249 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t248) store { ptr, i64, i64 } %t246, ptr %a251 store { ptr, i64, i64 } %t249, ptr %a252 call void @finch_str_concat(ptr %a250, ptr %a251, ptr %a252) %t253 = load { ptr, i64, i64 }, ptr %a250 store { ptr, i64, i64 } %t253, ptr %a254 %t255 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t256 = load %S.ast.Type, ptr %t255 %t257 = call i1 @finch.gen.isNumber(%S.ast.Type %t256) br label %logic.from2881 logic.from2881: br i1 %t257, label %logic.rhs2882, label %logic.end2883 logic.rhs2882: %t258 = load %S.ast.Type, ptr %a3 %t259 = call i1 @finch.gen.isNumber(%S.ast.Type %t258) br label %logic.rend2884 logic.rend2884: br label %logic.end2883 logic.end2883: %t260 = phi i1 [ false, %logic.from2881 ], [ %t259, %logic.rend2884 ] br i1 %t260, label %then2885, label %endif2887 then2885: %t261 = load { ptr, i64, i64 }, ptr %a254 store { ptr, i64, i64 } %t261, ptr %a263 store { ptr, i64, i64 } { ptr @.str.1873, i64 6, i64 0 }, ptr %a264 call void @finch_str_concat(ptr %a262, ptr %a263, ptr %a264) %t265 = load { ptr, i64, i64 }, ptr %a262 %t266 = load %S.ast.Type, ptr %a3 %t267 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t266) store { ptr, i64, i64 } %t265, ptr %a269 store { ptr, i64, i64 } %t267, ptr %a270 call void @finch_str_concat(ptr %a268, ptr %a269, ptr %a270) %t271 = load { ptr, i64, i64 }, ptr %a268 store { ptr, i64, i64 } %t271, ptr %a273 store { ptr, i64, i64 } { ptr @.str.1874, i64 16, i64 0 }, ptr %a274 call void @finch_str_concat(ptr %a272, ptr %a273, ptr %a274) %t275 = load { ptr, i64, i64 }, ptr %a272 store { ptr, i64, i64 } %t275, ptr %a254 %t276 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t277 = load %S.ast.Type, ptr %t276 %t278 = call i1 @finch.gen.isFloat(%S.ast.Type %t277) br label %logic.from2888 logic.from2888: br i1 %t278, label %logic.rhs2889, label %logic.end2890 logic.rhs2889: %t279 = load %S.ast.Type, ptr %a3 %t280 = call i1 @finch.gen.isInt(%S.ast.Type %t279) br label %logic.rend2891 logic.rend2891: br label %logic.end2890 logic.end2890: %t281 = phi i1 [ false, %logic.from2888 ], [ %t280, %logic.rend2891 ] br i1 %t281, label %then2892, label %endif2894 then2892: %t282 = load { ptr, i64, i64 }, ptr %a254 store { ptr, i64, i64 } %t282, ptr %a284 store { ptr, i64, i64 } { ptr @.str.1875, i64 26, i64 0 }, ptr %a285 call void @finch_str_concat(ptr %a283, ptr %a284, ptr %a285) %t286 = load { ptr, i64, i64 }, ptr %a283 store { ptr, i64, i64 } %t286, ptr %a254 br label %endif2894 endif2894: %t287 = load { ptr, i64, i64 }, ptr %a254 store { ptr, i64, i64 } %t287, ptr %a289 store { ptr, i64, i64 } { ptr @.str.1876, i64 1, i64 0 }, ptr %a290 call void @finch_str_concat(ptr %a288, ptr %a289, ptr %a290) %t291 = load { ptr, i64, i64 }, ptr %a288 store { ptr, i64, i64 } %t291, ptr %a254 br label %endif2887 endif2887: %t292 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 %t293 = load { ptr, i64, i64 }, ptr %t292 store { ptr, i64, i64 } %t293, ptr %a294 store { ptr, i64, i64 } { ptr @.str.1877, i64 3, i64 0 }, ptr %a295 %t296 = call i32 @finch_str_eq(ptr %a294, ptr %a295) %t297 = icmp ne i32 %t296, 0 br label %logic.from2895 logic.from2895: br i1 %t297, label %logic.rhs2896, label %logic.end2897 logic.rhs2896: %t298 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t299 = load %S.ast.Type, ptr %t298 %t300 = call i1 @finch.gen.isNumber(%S.ast.Type %t299) br label %logic.from2898 logic.from2898: br i1 %t300, label %logic.end2900, label %logic.rhs2899 logic.rhs2899: %t301 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t302 = getelementptr inbounds %S.ast.Type, ptr %t301, i32 0, i32 0 %t303 = load { ptr, i64, i64 }, ptr %t302 store { ptr, i64, i64 } %t303, ptr %a304 store { ptr, i64, i64 } { ptr @.str.1878, i64 4, i64 0 }, ptr %a305 %t306 = call i32 @finch_str_eq(ptr %a304, ptr %a305) %t307 = icmp ne i32 %t306, 0 br label %logic.rend2901 logic.rend2901: br label %logic.end2900 logic.end2900: %t308 = phi i1 [ true, %logic.from2898 ], [ %t307, %logic.rend2901 ] br label %logic.from2902 logic.from2902: br i1 %t308, label %logic.end2904, label %logic.rhs2903 logic.rhs2903: %t309 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t310 = getelementptr inbounds %S.ast.Type, ptr %t309, i32 0, i32 0 %t311 = load { ptr, i64, i64 }, ptr %t310 store { ptr, i64, i64 } %t311, ptr %a312 store { ptr, i64, i64 } { ptr @.str.1879, i64 4, i64 0 }, ptr %a313 %t314 = call i32 @finch_str_eq(ptr %a312, ptr %a313) %t315 = icmp ne i32 %t314, 0 br label %logic.rend2905 logic.rend2905: br label %logic.end2904 logic.end2904: %t316 = phi i1 [ true, %logic.from2902 ], [ %t315, %logic.rend2905 ] br label %logic.rend2906 logic.rend2906: br label %logic.end2897 logic.end2897: %t317 = phi i1 [ false, %logic.from2895 ], [ %t316, %logic.rend2906 ] br i1 %t317, label %then2907, label %endif2909 then2907: %t318 = load { ptr, i64, i64 }, ptr %a254 store { ptr, i64, i64 } %t318, ptr %a320 store { ptr, i64, i64 } { ptr @.str.1880, i64 34, i64 0 }, ptr %a321 call void @finch_str_concat(ptr %a319, ptr %a320, ptr %a321) %t322 = load { ptr, i64, i64 }, ptr %a319 store { ptr, i64, i64 } %t322, ptr %a254 br label %endif2909 endif2909: %t323 = load ptr, ptr %a1 %t324 = load %S.ast.Node, ptr %a4 %t325 = load { ptr, i64, i64 }, ptr %a254 call void @finch.gen.fail(ptr %t323, %S.ast.Node %t324, { ptr, i64, i64 } %t325) %t326 = load %S.gen.Val, ptr %a2 store %S.gen.Val %t326, ptr %a327 call void @finch.copy.S_gen_Val(ptr %a328, ptr %a327) %t329 = load %S.gen.Val, ptr %a328 ret %S.gen.Val %t329 } define internal i64 @finch.gen.lookup(ptr %p0, { ptr, i64, i64 } %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca i64, align 16 %a19 = alloca i64, align 16 %a32 = alloca i64, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null br i1 %t4, label %panic2910, label %ok2911 panic2910: call void @finch_panic(ptr @.str.1881, i64 1148, ptr @.str.1882) unreachable ok2911: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 10 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 %t7 = load i64, ptr %t6 store i64 0, ptr %a8 br label %for.cond2912 for.cond2912: %t9 = load i64, ptr %a8 %t10 = icmp slt i64 %t9, %t7 br i1 %t10, label %for.body2913, label %for.end2915 for.body2913: %t11 = load ptr, ptr %a1 %t12 = icmp eq ptr %t11, null br i1 %t12, label %panic2916, label %ok2917 panic2916: call void @finch_panic(ptr @.str.1883, i64 1149, ptr @.str.1884) unreachable ok2917: %t13 = getelementptr inbounds %S.gen.Gen, ptr %t11, i32 0, i32 10 %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i32 0, i32 1 %t15 = load i64, ptr %t14 %t16 = sub i64 %t15, 1 %t17 = load i64, ptr %a8 %t18 = sub i64 %t16, %t17 store i64 %t18, ptr %a19 %t20 = load ptr, ptr %a1 %t21 = icmp eq ptr %t20, null br i1 %t21, label %panic2918, label %ok2919 panic2918: call void @finch_panic(ptr @.str.1885, i64 1150, ptr @.str.1886) unreachable ok2919: %t22 = getelementptr inbounds %S.gen.Gen, ptr %t20, i32 0, i32 10 %t23 = load i64, ptr %a19 %t24 = load { ptr, i64, i64 }, ptr %t22 %t25 = extractvalue { ptr, i64, i64 } %t24, 1 %t26 = icmp uge i64 %t23, %t25 br i1 %t26, label %range2920, label %inrange2921 range2920: call void @finch_panic_index(ptr @.str.1887, i64 1150, i64 %t23, i64 %t25) unreachable inrange2921: %t27 = extractvalue { ptr, i64, i64 } %t24, 0 %t28 = getelementptr inbounds %S.gen.Scope, ptr %t27, i64 %t23 %t29 = getelementptr inbounds %S.gen.Scope, ptr %t28, i32 0, i32 0 %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i32 0, i32 1 %t31 = load i64, ptr %t30 store i64 0, ptr %a32 br label %for.cond2922 for.cond2922: %t33 = load i64, ptr %a32 %t34 = icmp slt i64 %t33, %t31 br i1 %t34, label %for.body2923, label %for.end2925 for.body2923: %t35 = load ptr, ptr %a1 %t36 = icmp eq ptr %t35, null br i1 %t36, label %panic2926, label %ok2927 panic2926: call void @finch_panic(ptr @.str.1888, i64 1151, ptr @.str.1889) unreachable ok2927: %t37 = getelementptr inbounds %S.gen.Gen, ptr %t35, i32 0, i32 10 %t38 = load i64, ptr %a19 %t39 = load { ptr, i64, i64 }, ptr %t37 %t40 = extractvalue { ptr, i64, i64 } %t39, 1 %t41 = icmp uge i64 %t38, %t40 br i1 %t41, label %range2928, label %inrange2929 range2928: call void @finch_panic_index(ptr @.str.1890, i64 1151, i64 %t38, i64 %t40) unreachable inrange2929: %t42 = extractvalue { ptr, i64, i64 } %t39, 0 %t43 = getelementptr inbounds %S.gen.Scope, ptr %t42, i64 %t38 %t44 = getelementptr inbounds %S.gen.Scope, ptr %t43, i32 0, i32 0 %t45 = load i64, ptr %a32 %t46 = load { ptr, i64, i64 }, ptr %t44 %t47 = extractvalue { ptr, i64, i64 } %t46, 1 %t48 = icmp uge i64 %t45, %t47 br i1 %t48, label %range2930, label %inrange2931 range2930: call void @finch_panic_index(ptr @.str.1891, i64 1151, i64 %t45, i64 %t47) unreachable inrange2931: %t49 = extractvalue { ptr, i64, i64 } %t46, 0 %t50 = getelementptr inbounds %S.gen.Var, ptr %t49, i64 %t45 %t51 = getelementptr inbounds %S.gen.Var, ptr %t50, i32 0, i32 0 %t52 = load { ptr, i64, i64 }, ptr %t51 %t53 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t52, ptr %a54 store { ptr, i64, i64 } %t53, ptr %a55 %t56 = call i32 @finch_str_eq(ptr %a54, ptr %a55) %t57 = icmp ne i32 %t56, 0 br i1 %t57, label %then2932, label %endif2934 then2932: %t58 = load ptr, ptr %a1 %t59 = icmp eq ptr %t58, null br i1 %t59, label %panic2935, label %ok2936 panic2935: call void @finch_panic(ptr @.str.1892, i64 1152, ptr @.str.1893) unreachable ok2936: %t60 = getelementptr inbounds %S.gen.Gen, ptr %t58, i32 0, i32 42 %t61 = load i1, ptr %t60 br label %logic.from2937 logic.from2937: br i1 %t61, label %logic.rhs2938, label %logic.end2939 logic.rhs2938: %t62 = load ptr, ptr %a1 %t63 = icmp eq ptr %t62, null br i1 %t63, label %panic2940, label %ok2941 panic2940: call void @finch_panic(ptr @.str.1894, i64 1152, ptr @.str.1895) unreachable ok2941: %t64 = getelementptr inbounds %S.gen.Gen, ptr %t62, i32 0, i32 10 %t65 = load i64, ptr %a19 %t66 = load { ptr, i64, i64 }, ptr %t64 %t67 = extractvalue { ptr, i64, i64 } %t66, 1 %t68 = icmp uge i64 %t65, %t67 br i1 %t68, label %range2942, label %inrange2943 range2942: call void @finch_panic_index(ptr @.str.1896, i64 1152, i64 %t65, i64 %t67) unreachable inrange2943: %t69 = extractvalue { ptr, i64, i64 } %t66, 0 %t70 = getelementptr inbounds %S.gen.Scope, ptr %t69, i64 %t65 %t71 = getelementptr inbounds %S.gen.Scope, ptr %t70, i32 0, i32 0 %t72 = load i64, ptr %a32 %t73 = load { ptr, i64, i64 }, ptr %t71 %t74 = extractvalue { ptr, i64, i64 } %t73, 1 %t75 = icmp uge i64 %t72, %t74 br i1 %t75, label %range2944, label %inrange2945 range2944: call void @finch_panic_index(ptr @.str.1897, i64 1152, i64 %t72, i64 %t74) unreachable inrange2945: %t76 = extractvalue { ptr, i64, i64 } %t73, 0 %t77 = getelementptr inbounds %S.gen.Var, ptr %t76, i64 %t72 %t78 = getelementptr inbounds %S.gen.Var, ptr %t77, i32 0, i32 4 %t79 = load i64, ptr %t78 %t80 = load ptr, ptr %a1 %t81 = icmp eq ptr %t80, null br i1 %t81, label %panic2946, label %ok2947 panic2946: call void @finch_panic(ptr @.str.1898, i64 1152, ptr @.str.1899) unreachable ok2947: %t82 = getelementptr inbounds %S.gen.Gen, ptr %t80, i32 0, i32 43 %t83 = load i64, ptr %t82 %t84 = icmp sge i64 %t79, %t83 br label %logic.rend2948 logic.rend2948: br label %logic.end2939 logic.end2939: %t85 = phi i1 [ false, %logic.from2937 ], [ %t84, %logic.rend2948 ] br i1 %t85, label %then2949, label %endif2951 then2949: br label %for.step2924 endif2951: %t86 = load i64, ptr %a19 %t87 = mul i64 %t86, 100000 %t88 = load i64, ptr %a32 %t89 = add i64 %t87, %t88 ret i64 %t89 endif2934: br label %for.step2924 for.step2924: %t90 = load i64, ptr %a32 %t91 = add i64 %t90, 1 store i64 %t91, ptr %a32 br label %for.cond2922 for.end2925: br label %for.step2914 for.step2914: %t92 = load i64, ptr %a8 %t93 = add i64 %t92, 1 store i64 %t93, ptr %a8 br label %for.cond2912 for.end2915: ret i64 -1 } define internal void @finch.copy.S_gen_Var(ptr %dst, ptr %src) { entry: %t1 = load %S.gen.Var, ptr %src store %S.gen.Var %t1, ptr %dst %t2 = getelementptr inbounds %S.gen.Var, ptr %dst, i32 0, i32 0 %t3 = getelementptr inbounds %S.gen.Var, ptr %src, i32 0, i32 0 call void @finch_str_copy(ptr %t2, ptr %t3) %t4 = getelementptr inbounds %S.gen.Var, ptr %dst, i32 0, i32 1 %t5 = getelementptr inbounds %S.gen.Var, ptr %src, i32 0, i32 1 call void @finch.copy.S_ast_Type(ptr %t4, ptr %t5) %t6 = getelementptr inbounds %S.gen.Var, ptr %dst, i32 0, i32 2 %t7 = getelementptr inbounds %S.gen.Var, ptr %src, i32 0, i32 2 call void @finch_str_copy(ptr %t6, ptr %t7) %t8 = getelementptr inbounds %S.gen.Var, ptr %dst, i32 0, i32 5 %t9 = getelementptr inbounds %S.gen.Var, ptr %src, i32 0, i32 5 call void @finch_str_copy(ptr %t8, ptr %t9) ret void } define internal %S.gen.Var @finch.gen.varAt(ptr %p0, i64 %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca i64, align 16 %a22 = alloca %S.gen.Var, align 16 %a23 = alloca %S.gen.Var, align 16 store ptr %p0, ptr %a1 store i64 %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null br i1 %t4, label %panic2952, label %ok2953 panic2952: call void @finch_panic(ptr @.str.1900, i64 1163, ptr @.str.1901) unreachable ok2953: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 10 %t6 = load i64, ptr %a2 %t7 = sdiv i64 %t6, 100000 %t8 = load { ptr, i64, i64 }, ptr %t5 %t9 = extractvalue { ptr, i64, i64 } %t8, 1 %t10 = icmp uge i64 %t7, %t9 br i1 %t10, label %range2954, label %inrange2955 range2954: call void @finch_panic_index(ptr @.str.1902, i64 1163, i64 %t7, i64 %t9) unreachable inrange2955: %t11 = extractvalue { ptr, i64, i64 } %t8, 0 %t12 = getelementptr inbounds %S.gen.Scope, ptr %t11, i64 %t7 %t13 = getelementptr inbounds %S.gen.Scope, ptr %t12, i32 0, i32 0 %t14 = load i64, ptr %a2 %t15 = srem i64 %t14, 100000 %t16 = load { ptr, i64, i64 }, ptr %t13 %t17 = extractvalue { ptr, i64, i64 } %t16, 1 %t18 = icmp uge i64 %t15, %t17 br i1 %t18, label %range2956, label %inrange2957 range2956: call void @finch_panic_index(ptr @.str.1903, i64 1163, i64 %t15, i64 %t17) unreachable inrange2957: %t19 = extractvalue { ptr, i64, i64 } %t16, 0 %t20 = getelementptr inbounds %S.gen.Var, ptr %t19, i64 %t15 %t21 = load %S.gen.Var, ptr %t20 store %S.gen.Var %t21, ptr %a22 call void @finch.copy.S_gen_Var(ptr %a23, ptr %a22) %t24 = load %S.gen.Var, ptr %a23 ret %S.gen.Var %t24 } define internal i64 @finch.gen.findFn(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca i64, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = icmp eq ptr %t4, null br i1 %t5, label %panic2958, label %ok2959 panic2958: call void @finch_panic(ptr @.str.1904, i64 1167, ptr @.str.1905) unreachable ok2959: %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 14 %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t6, i32 0, i32 1 %t8 = load i64, ptr %t7 store i64 0, ptr %a9 br label %for.cond2960 for.cond2960: %t10 = load i64, ptr %a9 %t11 = icmp slt i64 %t10, %t8 br i1 %t11, label %for.body2961, label %for.end2963 for.body2961: %t12 = load ptr, ptr %a1 %t13 = icmp eq ptr %t12, null br i1 %t13, label %panic2964, label %ok2965 panic2964: call void @finch_panic(ptr @.str.1906, i64 1168, ptr @.str.1907) unreachable ok2965: %t14 = getelementptr inbounds %S.gen.Gen, ptr %t12, i32 0, i32 14 %t15 = load i64, ptr %a9 %t16 = load { ptr, i64, i64 }, ptr %t14 %t17 = extractvalue { ptr, i64, i64 } %t16, 1 %t18 = icmp uge i64 %t15, %t17 br i1 %t18, label %range2966, label %inrange2967 range2966: call void @finch_panic_index(ptr @.str.1908, i64 1168, i64 %t15, i64 %t17) unreachable inrange2967: %t19 = extractvalue { ptr, i64, i64 } %t16, 0 %t20 = getelementptr inbounds %S.gen.FnSig, ptr %t19, i64 %t15 %t21 = getelementptr inbounds %S.gen.FnSig, ptr %t20, i32 0, i32 0 %t22 = load { ptr, i64, i64 }, ptr %t21 %t23 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t22, ptr %a24 store { ptr, i64, i64 } %t23, ptr %a25 %t26 = call i32 @finch_str_eq(ptr %a24, ptr %a25) %t27 = icmp ne i32 %t26, 0 br label %logic.from2968 logic.from2968: br i1 %t27, label %logic.rhs2969, label %logic.end2970 logic.rhs2969: %t28 = load ptr, ptr %a1 %t29 = icmp eq ptr %t28, null br i1 %t29, label %panic2971, label %ok2972 panic2971: call void @finch_panic(ptr @.str.1909, i64 1168, ptr @.str.1910) unreachable ok2972: %t30 = getelementptr inbounds %S.gen.Gen, ptr %t28, i32 0, i32 14 %t31 = load i64, ptr %a9 %t32 = load { ptr, i64, i64 }, ptr %t30 %t33 = extractvalue { ptr, i64, i64 } %t32, 1 %t34 = icmp uge i64 %t31, %t33 br i1 %t34, label %range2973, label %inrange2974 range2973: call void @finch_panic_index(ptr @.str.1911, i64 1168, i64 %t31, i64 %t33) unreachable inrange2974: %t35 = extractvalue { ptr, i64, i64 } %t32, 0 %t36 = getelementptr inbounds %S.gen.FnSig, ptr %t35, i64 %t31 %t37 = getelementptr inbounds %S.gen.FnSig, ptr %t36, i32 0, i32 1 %t38 = load { ptr, i64, i64 }, ptr %t37 %t39 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t38, ptr %a40 store { ptr, i64, i64 } %t39, ptr %a41 %t42 = call i32 @finch_str_eq(ptr %a40, ptr %a41) %t43 = icmp ne i32 %t42, 0 br label %logic.rend2975 logic.rend2975: br label %logic.end2970 logic.end2970: %t44 = phi i1 [ false, %logic.from2968 ], [ %t43, %logic.rend2975 ] br label %logic.from2976 logic.from2976: br i1 %t44, label %logic.rhs2977, label %logic.end2978 logic.rhs2977: %t45 = load ptr, ptr %a1 %t46 = icmp eq ptr %t45, null br i1 %t46, label %panic2979, label %ok2980 panic2979: call void @finch_panic(ptr @.str.1912, i64 1168, ptr @.str.1913) unreachable ok2980: %t47 = getelementptr inbounds %S.gen.Gen, ptr %t45, i32 0, i32 14 %t48 = load i64, ptr %a9 %t49 = load { ptr, i64, i64 }, ptr %t47 %t50 = extractvalue { ptr, i64, i64 } %t49, 1 %t51 = icmp uge i64 %t48, %t50 br i1 %t51, label %range2981, label %inrange2982 range2981: call void @finch_panic_index(ptr @.str.1914, i64 1168, i64 %t48, i64 %t50) unreachable inrange2982: %t52 = extractvalue { ptr, i64, i64 } %t49, 0 %t53 = getelementptr inbounds %S.gen.FnSig, ptr %t52, i64 %t48 %t54 = getelementptr inbounds %S.gen.FnSig, ptr %t53, i32 0, i32 2 %t55 = getelementptr inbounds { ptr, i64, i64 }, ptr %t54, i32 0, i32 1 %t56 = load i64, ptr %t55 %t57 = icmp eq i64 %t56, 0 br label %logic.rend2983 logic.rend2983: br label %logic.end2978 logic.end2978: %t58 = phi i1 [ false, %logic.from2976 ], [ %t57, %logic.rend2983 ] br i1 %t58, label %then2984, label %endif2986 then2984: %t59 = load i64, ptr %a9 ret i64 %t59 endif2986: br label %for.step2962 for.step2962: %t60 = load i64, ptr %a9 %t61 = add i64 %t60, 1 store i64 %t61, ptr %a9 br label %for.cond2960 for.end2963: ret i64 -1 } define internal i64 @finch.gen.findMethod(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, { ptr, i64, i64 } %p3) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca i64, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 store { ptr, i64, i64 } %p3, ptr %a4 %t5 = load ptr, ptr %a1 %t6 = icmp eq ptr %t5, null br i1 %t6, label %panic2987, label %ok2988 panic2987: call void @finch_panic(ptr @.str.1915, i64 1176, ptr @.str.1916) unreachable ok2988: %t7 = getelementptr inbounds %S.gen.Gen, ptr %t5, i32 0, i32 14 %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t7, i32 0, i32 1 %t9 = load i64, ptr %t8 store i64 0, ptr %a10 br label %for.cond2989 for.cond2989: %t11 = load i64, ptr %a10 %t12 = icmp slt i64 %t11, %t9 br i1 %t12, label %for.body2990, label %for.end2992 for.body2990: %t13 = load ptr, ptr %a1 %t14 = icmp eq ptr %t13, null br i1 %t14, label %panic2993, label %ok2994 panic2993: call void @finch_panic(ptr @.str.1917, i64 1177, ptr @.str.1918) unreachable ok2994: %t15 = getelementptr inbounds %S.gen.Gen, ptr %t13, i32 0, i32 14 %t16 = load i64, ptr %a10 %t17 = load { ptr, i64, i64 }, ptr %t15 %t18 = extractvalue { ptr, i64, i64 } %t17, 1 %t19 = icmp uge i64 %t16, %t18 br i1 %t19, label %range2995, label %inrange2996 range2995: call void @finch_panic_index(ptr @.str.1919, i64 1177, i64 %t16, i64 %t18) unreachable inrange2996: %t20 = extractvalue { ptr, i64, i64 } %t17, 0 %t21 = getelementptr inbounds %S.gen.FnSig, ptr %t20, i64 %t16 %t22 = getelementptr inbounds %S.gen.FnSig, ptr %t21, i32 0, i32 3 %t23 = load { ptr, i64, i64 }, ptr %t22 %t24 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t23, ptr %a25 store { ptr, i64, i64 } %t24, ptr %a26 %t27 = call i32 @finch_str_eq(ptr %a25, ptr %a26) %t28 = icmp ne i32 %t27, 0 br label %logic.from2997 logic.from2997: br i1 %t28, label %logic.rhs2998, label %logic.end2999 logic.rhs2998: %t29 = load ptr, ptr %a1 %t30 = icmp eq ptr %t29, null br i1 %t30, label %panic3000, label %ok3001 panic3000: call void @finch_panic(ptr @.str.1920, i64 1177, ptr @.str.1921) unreachable ok3001: %t31 = getelementptr inbounds %S.gen.Gen, ptr %t29, i32 0, i32 14 %t32 = load i64, ptr %a10 %t33 = load { ptr, i64, i64 }, ptr %t31 %t34 = extractvalue { ptr, i64, i64 } %t33, 1 %t35 = icmp uge i64 %t32, %t34 br i1 %t35, label %range3002, label %inrange3003 range3002: call void @finch_panic_index(ptr @.str.1922, i64 1177, i64 %t32, i64 %t34) unreachable inrange3003: %t36 = extractvalue { ptr, i64, i64 } %t33, 0 %t37 = getelementptr inbounds %S.gen.FnSig, ptr %t36, i64 %t32 %t38 = getelementptr inbounds %S.gen.FnSig, ptr %t37, i32 0, i32 2 %t39 = load { ptr, i64, i64 }, ptr %t38 %t40 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t39, ptr %a41 store { ptr, i64, i64 } %t40, ptr %a42 %t43 = call i32 @finch_str_eq(ptr %a41, ptr %a42) %t44 = icmp ne i32 %t43, 0 br label %logic.rend3004 logic.rend3004: br label %logic.end2999 logic.end2999: %t45 = phi i1 [ false, %logic.from2997 ], [ %t44, %logic.rend3004 ] br label %logic.from3005 logic.from3005: br i1 %t45, label %logic.rhs3006, label %logic.end3007 logic.rhs3006: %t46 = load ptr, ptr %a1 %t47 = icmp eq ptr %t46, null br i1 %t47, label %panic3008, label %ok3009 panic3008: call void @finch_panic(ptr @.str.1923, i64 1177, ptr @.str.1924) unreachable ok3009: %t48 = getelementptr inbounds %S.gen.Gen, ptr %t46, i32 0, i32 14 %t49 = load i64, ptr %a10 %t50 = load { ptr, i64, i64 }, ptr %t48 %t51 = extractvalue { ptr, i64, i64 } %t50, 1 %t52 = icmp uge i64 %t49, %t51 br i1 %t52, label %range3010, label %inrange3011 range3010: call void @finch_panic_index(ptr @.str.1925, i64 1177, i64 %t49, i64 %t51) unreachable inrange3011: %t53 = extractvalue { ptr, i64, i64 } %t50, 0 %t54 = getelementptr inbounds %S.gen.FnSig, ptr %t53, i64 %t49 %t55 = getelementptr inbounds %S.gen.FnSig, ptr %t54, i32 0, i32 1 %t56 = load { ptr, i64, i64 }, ptr %t55 %t57 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t56, ptr %a58 store { ptr, i64, i64 } %t57, ptr %a59 %t60 = call i32 @finch_str_eq(ptr %a58, ptr %a59) %t61 = icmp ne i32 %t60, 0 br label %logic.rend3012 logic.rend3012: br label %logic.end3007 logic.end3007: %t62 = phi i1 [ false, %logic.from3005 ], [ %t61, %logic.rend3012 ] br i1 %t62, label %then3013, label %endif3015 then3013: %t63 = load i64, ptr %a10 ret i64 %t63 endif3015: br label %for.step2991 for.step2991: %t64 = load i64, ptr %a10 %t65 = add i64 %t64, 1 store i64 %t65, ptr %a10 br label %for.cond2989 for.end2992: ret i64 -1 } define internal i1 @finch.gen.isBuiltin({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca i64, align 16 %a41 = alloca i64, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = mul i64 28, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t3 = call ptr @finch_alloc(i64 %t2) %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 0 store { ptr, i64, i64 } { ptr @.str.1926, i64 5, i64 0 }, ptr %t4 %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 1 store { ptr, i64, i64 } { ptr @.str.1927, i64 4, i64 0 }, ptr %t5 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 2 store { ptr, i64, i64 } { ptr @.str.1928, i64 3, i64 0 }, ptr %t6 %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 3 store { ptr, i64, i64 } { ptr @.str.1929, i64 3, i64 0 }, ptr %t7 %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 4 store { ptr, i64, i64 } { ptr @.str.1930, i64 4, i64 0 }, ptr %t8 %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 5 store { ptr, i64, i64 } { ptr @.str.1931, i64 5, i64 0 }, ptr %t9 %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 6 store { ptr, i64, i64 } { ptr @.str.1932, i64 4, i64 0 }, ptr %t10 %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 7 store { ptr, i64, i64 } { ptr @.str.1933, i64 9, i64 0 }, ptr %t11 %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 8 store { ptr, i64, i64 } { ptr @.str.1934, i64 10, i64 0 }, ptr %t12 %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 9 store { ptr, i64, i64 } { ptr @.str.1935, i64 11, i64 0 }, ptr %t13 %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 10 store { ptr, i64, i64 } { ptr @.str.1936, i64 5, i64 0 }, ptr %t14 %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 11 store { ptr, i64, i64 } { ptr @.str.1937, i64 4, i64 0 }, ptr %t15 %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 12 store { ptr, i64, i64 } { ptr @.str.1938, i64 5, i64 0 }, ptr %t16 %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 13 store { ptr, i64, i64 } { ptr @.str.1939, i64 3, i64 0 }, ptr %t17 %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 14 store { ptr, i64, i64 } { ptr @.str.1940, i64 4, i64 0 }, ptr %t18 %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 15 store { ptr, i64, i64 } { ptr @.str.1941, i64 3, i64 0 }, ptr %t19 %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 16 store { ptr, i64, i64 } { ptr @.str.1942, i64 11, i64 0 }, ptr %t20 %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 17 store { ptr, i64, i64 } { ptr @.str.1943, i64 2, i64 0 }, ptr %t21 %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 18 store { ptr, i64, i64 } { ptr @.str.1944, i64 3, i64 0 }, ptr %t22 %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 19 store { ptr, i64, i64 } { ptr @.str.1945, i64 3, i64 0 }, ptr %t23 %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 20 store { ptr, i64, i64 } { ptr @.str.1946, i64 3, i64 0 }, ptr %t24 %t25 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 21 store { ptr, i64, i64 } { ptr @.str.1947, i64 2, i64 0 }, ptr %t25 %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 22 store { ptr, i64, i64 } { ptr @.str.1948, i64 3, i64 0 }, ptr %t26 %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 23 store { ptr, i64, i64 } { ptr @.str.1949, i64 3, i64 0 }, ptr %t27 %t28 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 24 store { ptr, i64, i64 } { ptr @.str.1950, i64 3, i64 0 }, ptr %t28 %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 25 store { ptr, i64, i64 } { ptr @.str.1951, i64 3, i64 0 }, ptr %t29 %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 26 store { ptr, i64, i64 } { ptr @.str.1952, i64 3, i64 0 }, ptr %t30 %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 27 store { ptr, i64, i64 } { ptr @.str.1953, i64 5, i64 0 }, ptr %t31 %t32 = insertvalue { ptr, i64, i64 } undef, ptr %t3, 0 %t33 = insertvalue { ptr, i64, i64 } %t32, i64 28, 1 %t34 = insertvalue { ptr, i64, i64 } %t33, i64 28, 2 store { ptr, i64, i64 } %t34, ptr %a35 %t36 = getelementptr inbounds { ptr, i64, i64 }, ptr %a35, i32 0, i32 1 %t37 = load { ptr, i64, i64 }, ptr %a1 store i64 -1, ptr %a38 %t39 = load i64, ptr %t36 %t40 = load ptr, ptr %a35 store i64 0, ptr %a41 br label %find.cond3016 find.cond3016: %t42 = load i64, ptr %a41 %t43 = icmp slt i64 %t42, %t39 br i1 %t43, label %find.body3017, label %find.end3020 find.body3017: %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t40, i64 %t42 %t45 = load { ptr, i64, i64 }, ptr %t44 store { ptr, i64, i64 } %t45, ptr %a46 store { ptr, i64, i64 } %t37, ptr %a47 %t48 = call i32 @finch_str_eq(ptr %a46, ptr %a47) %t49 = icmp ne i32 %t48, 0 br i1 %t49, label %find.hit3018, label %find.next3019 find.hit3018: store i64 %t42, ptr %a38 br label %find.end3020 find.next3019: %t50 = add i64 %t42, 1 store i64 %t50, ptr %a41 br label %find.cond3016 find.end3020: %t51 = load i64, ptr %a38 %t52 = icmp sge i64 %t51, 0 ret i1 %t52 } define internal { ptr, i64, i64 } @finch.gen.addVar(ptr %p0, %S.ast.Node %p1, { ptr, i64, i64 } %p2, %S.ast.Type %p3, { ptr, i64, i64 } %p4, i1 %p5) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca %S.ast.Type, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca i1, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca %S.ast.Type, align 16 %a95 = alloca %S.ast.Type, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca { ptr, i64, i64 }, align 16 %a121 = alloca { ptr, i64, i64 }, align 16 %a122 = alloca { ptr, i64, i64 }, align 16 %a150 = alloca { ptr, i64, i64 }, align 16 %a151 = alloca { ptr, i64, i64 }, align 16 %a156 = alloca { ptr, i64, i64 }, align 16 %a157 = alloca { ptr, i64, i64 }, align 16 %a158 = alloca { ptr, i64, i64 }, align 16 %a188 = alloca %S.ast.Node, align 16 %a189 = alloca %S.ast.Node, align 16 %a191 = alloca %S.ast.Node, align 16 %a197 = alloca { ptr, i64, i64 }, align 16 %a198 = alloca { ptr, i64, i64 }, align 16 %a199 = alloca { ptr, i64, i64 }, align 16 %a201 = alloca { ptr, i64, i64 }, align 16 %a202 = alloca { ptr, i64, i64 }, align 16 %a203 = alloca { ptr, i64, i64 }, align 16 %a207 = alloca { ptr, i64, i64 }, align 16 %a208 = alloca { ptr, i64, i64 }, align 16 %a209 = alloca { ptr, i64, i64 }, align 16 %a211 = alloca { ptr, i64, i64 }, align 16 %a212 = alloca { ptr, i64, i64 }, align 16 %a213 = alloca { ptr, i64, i64 }, align 16 %a226 = alloca { ptr, i64, i64 }, align 16 %a227 = alloca { ptr, i64, i64 }, align 16 %a228 = alloca { ptr, i64, i64 }, align 16 %a230 = alloca { ptr, i64, i64 }, align 16 %a231 = alloca { ptr, i64, i64 }, align 16 %a232 = alloca { ptr, i64, i64 }, align 16 %a236 = alloca { ptr, i64, i64 }, align 16 %a238 = alloca { ptr, i64, i64 }, align 16 %a239 = alloca { ptr, i64, i64 }, align 16 %a240 = alloca { ptr, i64, i64 }, align 16 %a242 = alloca { ptr, i64, i64 }, align 16 %a243 = alloca { ptr, i64, i64 }, align 16 %a244 = alloca { ptr, i64, i64 }, align 16 %a248 = alloca { ptr, i64, i64 }, align 16 %a250 = alloca { ptr, i64, i64 }, align 16 %a251 = alloca { ptr, i64, i64 }, align 16 %a252 = alloca { ptr, i64, i64 }, align 16 %a254 = alloca { ptr, i64, i64 }, align 16 %a255 = alloca { ptr, i64, i64 }, align 16 %a256 = alloca { ptr, i64, i64 }, align 16 %a269 = alloca { ptr, i64, i64 }, align 16 %a270 = alloca { ptr, i64, i64 }, align 16 %a271 = alloca { ptr, i64, i64 }, align 16 %a273 = alloca { ptr, i64, i64 }, align 16 %a274 = alloca { ptr, i64, i64 }, align 16 %a275 = alloca { ptr, i64, i64 }, align 16 %a279 = alloca { ptr, i64, i64 }, align 16 %a281 = alloca { ptr, i64, i64 }, align 16 %a282 = alloca { ptr, i64, i64 }, align 16 %a283 = alloca { ptr, i64, i64 }, align 16 %a285 = alloca { ptr, i64, i64 }, align 16 %a286 = alloca { ptr, i64, i64 }, align 16 %a287 = alloca { ptr, i64, i64 }, align 16 %a291 = alloca { ptr, i64, i64 }, align 16 %a293 = alloca { ptr, i64, i64 }, align 16 %a294 = alloca { ptr, i64, i64 }, align 16 %a295 = alloca { ptr, i64, i64 }, align 16 %a309 = alloca { ptr, i64, i64 }, align 16 %a310 = alloca { ptr, i64, i64 }, align 16 %a311 = alloca { ptr, i64, i64 }, align 16 %a313 = alloca { ptr, i64, i64 }, align 16 %a314 = alloca { ptr, i64, i64 }, align 16 %a315 = alloca { ptr, i64, i64 }, align 16 %a318 = alloca { ptr, i64, i64 }, align 16 %a319 = alloca { ptr, i64, i64 }, align 16 %a320 = alloca { ptr, i64, i64 }, align 16 %a322 = alloca { ptr, i64, i64 }, align 16 %a323 = alloca { ptr, i64, i64 }, align 16 %a324 = alloca { ptr, i64, i64 }, align 16 %a327 = alloca { ptr, i64, i64 }, align 16 %a328 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 store %S.ast.Type %p3, ptr %a4 store { ptr, i64, i64 } %p4, ptr %a5 store i1 %p5, ptr %a6 %t7 = load ptr, ptr %a1 %t8 = load { ptr, i64, i64 }, ptr %a3 %t9 = call i64 @finch.gen.lookup(ptr %t7, { ptr, i64, i64 } %t8) %t10 = icmp sge i64 %t9, 0 br label %logic.from3021 logic.from3021: br i1 %t10, label %logic.rhs3022, label %logic.end3023 logic.rhs3022: %t11 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t11, ptr %a12 store { ptr, i64, i64 } { ptr @.str.1954, i64 3, i64 0 }, ptr %a13 %t14 = call i32 @finch_str_eq(ptr %a12, ptr %a13) %t15 = icmp eq i32 %t14, 0 br label %logic.rend3024 logic.rend3024: br label %logic.end3023 logic.end3023: %t16 = phi i1 [ false, %logic.from3021 ], [ %t15, %logic.rend3024 ] br i1 %t16, label %then3025, label %endif3027 then3025: %t17 = load ptr, ptr %a1 %t18 = load %S.ast.Node, ptr %a2 %t19 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } { ptr @.str.1955, i64 18, i64 0 }, ptr %a21 store { ptr, i64, i64 } %t19, ptr %a22 call void @finch_str_concat(ptr %a20, ptr %a21, ptr %a22) %t23 = load { ptr, i64, i64 }, ptr %a20 store { ptr, i64, i64 } %t23, ptr %a25 store { ptr, i64, i64 } { ptr @.str.1956, i64 21, i64 0 }, ptr %a26 call void @finch_str_concat(ptr %a24, ptr %a25, ptr %a26) %t27 = load { ptr, i64, i64 }, ptr %a24 call void @finch.gen.fail(ptr %t17, %S.ast.Node %t18, { ptr, i64, i64 } %t27) br label %endif3027 endif3027: %t28 = load ptr, ptr %a1 %t29 = load ptr, ptr %a1 %t30 = icmp eq ptr %t29, null br i1 %t30, label %panic3028, label %ok3029 panic3028: call void @finch_panic(ptr @.str.1957, i64 1195, ptr @.str.1958) unreachable ok3029: %t31 = getelementptr inbounds %S.gen.Gen, ptr %t29, i32 0, i32 13 %t32 = load { ptr, i64, i64 }, ptr %t31 %t33 = load { ptr, i64, i64 }, ptr %a3 %t34 = call i64 @finch.gen.findFn(ptr %t28, { ptr, i64, i64 } %t32, { ptr, i64, i64 } %t33) %t35 = icmp sge i64 %t34, 0 br i1 %t35, label %then3030, label %endif3032 then3030: %t36 = load ptr, ptr %a1 %t37 = load %S.ast.Node, ptr %a2 %t38 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } { ptr @.str.1959, i64 1, i64 0 }, ptr %a40 store { ptr, i64, i64 } %t38, ptr %a41 call void @finch_str_concat(ptr %a39, ptr %a40, ptr %a41) %t42 = load { ptr, i64, i64 }, ptr %a39 store { ptr, i64, i64 } %t42, ptr %a44 store { ptr, i64, i64 } { ptr @.str.1960, i64 35, i64 0 }, ptr %a45 call void @finch_str_concat(ptr %a43, ptr %a44, ptr %a45) %t46 = load { ptr, i64, i64 }, ptr %a43 call void @finch.gen.fail(ptr %t36, %S.ast.Node %t37, { ptr, i64, i64 } %t46) br label %endif3032 endif3032: %t47 = load { ptr, i64, i64 }, ptr %a3 %t48 = call i1 @finch.gen.isBuiltin({ ptr, i64, i64 } %t47) br i1 %t48, label %then3033, label %endif3035 then3033: %t49 = load ptr, ptr %a1 %t50 = load %S.ast.Node, ptr %a2 %t51 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } { ptr @.str.1961, i64 1, i64 0 }, ptr %a53 store { ptr, i64, i64 } %t51, ptr %a54 call void @finch_str_concat(ptr %a52, ptr %a53, ptr %a54) %t55 = load { ptr, i64, i64 }, ptr %a52 store { ptr, i64, i64 } %t55, ptr %a57 store { ptr, i64, i64 } { ptr @.str.1962, i64 38, i64 0 }, ptr %a58 call void @finch_str_concat(ptr %a56, ptr %a57, ptr %a58) %t59 = load { ptr, i64, i64 }, ptr %a56 call void @finch.gen.fail(ptr %t49, %S.ast.Node %t50, { ptr, i64, i64 } %t59) br label %endif3035 endif3035: %t60 = load ptr, ptr %a1 %t61 = load ptr, ptr %a1 %t62 = load %S.ast.Type, ptr %a4 %t63 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t61, %S.ast.Type %t62) %t64 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t60, { ptr, i64, i64 } %t63) store { ptr, i64, i64 } %t64, ptr %a65 %t66 = load ptr, ptr %a1 %t67 = load ptr, ptr %a1 %t68 = load %S.ast.Type, ptr %a4 %t69 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t67, %S.ast.Type %t68) %t70 = load { ptr, i64, i64 }, ptr %a5 %t71 = load { ptr, i64, i64 }, ptr %a65 call void @finch.gen.store(ptr %t66, { ptr, i64, i64 } %t69, { ptr, i64, i64 } %t70, { ptr, i64, i64 } %t71) %t72 = load ptr, ptr %a1 %t73 = icmp eq ptr %t72, null br i1 %t73, label %panic3036, label %ok3037 panic3036: call void @finch_panic(ptr @.str.1963, i64 1203, ptr @.str.1964) unreachable ok3037: %t74 = getelementptr inbounds %S.gen.Gen, ptr %t72, i32 0, i32 10 %t75 = load ptr, ptr %a1 %t76 = icmp eq ptr %t75, null br i1 %t76, label %panic3038, label %ok3039 panic3038: call void @finch_panic(ptr @.str.1965, i64 1203, ptr @.str.1966) unreachable ok3039: %t77 = getelementptr inbounds %S.gen.Gen, ptr %t75, i32 0, i32 10 %t78 = getelementptr inbounds { ptr, i64, i64 }, ptr %t77, i32 0, i32 1 %t79 = load i64, ptr %t78 %t80 = sub i64 %t79, 1 %t81 = load { ptr, i64, i64 }, ptr %t74 %t82 = extractvalue { ptr, i64, i64 } %t81, 1 %t83 = icmp uge i64 %t80, %t82 br i1 %t83, label %range3040, label %inrange3041 range3040: call void @finch_panic_index(ptr @.str.1967, i64 1203, i64 %t80, i64 %t82) unreachable inrange3041: %t84 = extractvalue { ptr, i64, i64 } %t81, 0 %t85 = getelementptr inbounds %S.gen.Scope, ptr %t84, i64 %t80 %t86 = getelementptr inbounds %S.gen.Scope, ptr %t85, i32 0, i32 0 %t87 = getelementptr inbounds { ptr, i64, i64 }, ptr %t86, i32 0, i32 1 %t88 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t88, ptr %a89 call void @finch_str_copy(ptr %a90, ptr %a89) %t91 = load { ptr, i64, i64 }, ptr %a90 %t92 = insertvalue %S.gen.Var zeroinitializer, { ptr, i64, i64 } %t91, 0 %t93 = load %S.ast.Type, ptr %a4 store %S.ast.Type %t93, ptr %a94 call void @finch.copy.S_ast_Type(ptr %a95, ptr %a94) %t96 = load %S.ast.Type, ptr %a95 %t97 = insertvalue %S.gen.Var %t92, %S.ast.Type %t96, 1 %t98 = load { ptr, i64, i64 }, ptr %a65 store { ptr, i64, i64 } %t98, ptr %a99 call void @finch_str_copy(ptr %a100, ptr %a99) %t101 = load { ptr, i64, i64 }, ptr %a100 %t102 = insertvalue %S.gen.Var %t97, { ptr, i64, i64 } %t101, 2 %t103 = load i1, ptr %a6 %t104 = insertvalue %S.gen.Var %t102, i1 %t103, 3 %t105 = load ptr, ptr %a1 %t106 = icmp eq ptr %t105, null br i1 %t106, label %panic3042, label %ok3043 panic3042: call void @finch_panic(ptr @.str.1968, i64 1203, ptr @.str.1969) unreachable ok3043: %t107 = getelementptr inbounds %S.gen.Gen, ptr %t105, i32 0, i32 23 %t108 = load i64, ptr %t107 %t109 = insertvalue %S.gen.Var %t104, i64 %t108, 4 %t110 = load ptr, ptr %a1 %t111 = icmp eq ptr %t110, null br i1 %t111, label %panic3044, label %ok3045 panic3044: call void @finch_panic(ptr @.str.1970, i64 1203, ptr @.str.1971) unreachable ok3045: %t112 = getelementptr inbounds %S.gen.Gen, ptr %t110, i32 0, i32 1 %t113 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 %t114 = load i64, ptr %t113 %t115 = load { ptr, i64, i64 }, ptr %t112 %t116 = extractvalue { ptr, i64, i64 } %t115, 1 %t117 = icmp uge i64 %t114, %t116 br i1 %t117, label %range3046, label %inrange3047 range3046: call void @finch_panic_index(ptr @.str.1972, i64 1203, i64 %t114, i64 %t116) unreachable inrange3047: %t118 = extractvalue { ptr, i64, i64 } %t115, 0 %t119 = getelementptr inbounds { ptr, i64, i64 }, ptr %t118, i64 %t114 %t120 = load { ptr, i64, i64 }, ptr %t119 store { ptr, i64, i64 } %t120, ptr %a121 call void @finch_str_copy(ptr %a122, ptr %a121) %t123 = load { ptr, i64, i64 }, ptr %a122 %t124 = insertvalue %S.gen.Var %t109, { ptr, i64, i64 } %t123, 5 %t125 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 %t126 = load i64, ptr %t125 %t127 = insertvalue %S.gen.Var %t124, i64 %t126, 6 %t128 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 %t129 = load i64, ptr %t128 %t130 = insertvalue %S.gen.Var %t127, i64 %t129, 7 %t131 = load i64, ptr %t87 %t132 = add i64 %t131, 1 call void @finch_arr_reserve(ptr %t86, i64 %t132, i64 ptrtoint (ptr getelementptr (%S.gen.Var, ptr null, i32 1) to i64)) %t133 = load ptr, ptr %t86 %t134 = getelementptr inbounds %S.gen.Var, ptr %t133, i64 %t131 store %S.gen.Var %t130, ptr %t134 store i64 %t132, ptr %t87 %t135 = load ptr, ptr %a1 %t136 = icmp eq ptr %t135, null br i1 %t136, label %panic3048, label %ok3049 panic3048: call void @finch_panic(ptr @.str.1973, i64 1204, ptr @.str.1974) unreachable ok3049: %t137 = getelementptr inbounds %S.gen.Gen, ptr %t135, i32 0, i32 23 %t138 = load i64, ptr %t137 %t139 = add i64 %t138, 1 store i64 %t139, ptr %t137 %t140 = load ptr, ptr %a1 %t141 = load %S.ast.Node, ptr %a2 %t142 = load { ptr, i64, i64 }, ptr %a3 %t143 = load %S.ast.Type, ptr %a4 %t144 = load { ptr, i64, i64 }, ptr %a65 call void @finch.gen.dbgVariable(ptr %t140, %S.ast.Node %t141, { ptr, i64, i64 } %t142, %S.ast.Type %t143, { ptr, i64, i64 } %t144) %t145 = load ptr, ptr %a1 %t146 = icmp eq ptr %t145, null br i1 %t146, label %panic3050, label %ok3051 panic3050: call void @finch_panic(ptr @.str.1975, i64 1206, ptr @.str.1976) unreachable ok3051: %t147 = getelementptr inbounds %S.gen.Gen, ptr %t145, i32 0, i32 26 %t148 = load i1, ptr %t147 br label %logic.from3052 logic.from3052: br i1 %t148, label %logic.rhs3053, label %logic.end3054 logic.rhs3053: %t149 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t149, ptr %a150 store { ptr, i64, i64 } { ptr @.str.1977, i64 3, i64 0 }, ptr %a151 %t152 = call i32 @finch_str_eq(ptr %a150, ptr %a151) %t153 = icmp eq i32 %t152, 0 br label %logic.rend3055 logic.rend3055: br label %logic.end3054 logic.end3054: %t154 = phi i1 [ false, %logic.from3052 ], [ %t153, %logic.rend3055 ] br label %logic.from3056 logic.from3056: br i1 %t154, label %logic.rhs3057, label %logic.end3058 logic.rhs3057: %t155 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t155, ptr %a156 store { ptr, i64, i64 } { ptr @.str.1979, i64 1, i64 0 }, ptr %a158 %t159 = call i32 @finch_str_starts(ptr %a156, ptr %a158) %t160 = icmp ne i32 %t159, 0 %t161 = xor i1 %t160, true br label %logic.rend3059 logic.rend3059: br label %logic.end3058 logic.end3058: %t162 = phi i1 [ false, %logic.from3056 ], [ %t161, %logic.rend3059 ] br i1 %t162, label %then3060, label %endif3062 then3060: %t163 = load ptr, ptr %a1 %t164 = icmp eq ptr %t163, null br i1 %t164, label %panic3063, label %ok3064 panic3063: call void @finch_panic(ptr @.str.1980, i64 1207, ptr @.str.1981) unreachable ok3064: %t165 = getelementptr inbounds %S.gen.Gen, ptr %t163, i32 0, i32 0 %t166 = load ptr, ptr %a1 %t167 = icmp eq ptr %t166, null br i1 %t167, label %panic3065, label %ok3066 panic3065: call void @finch_panic(ptr @.str.1982, i64 1207, ptr @.str.1983) unreachable ok3066: %t168 = getelementptr inbounds %S.gen.Gen, ptr %t166, i32 0, i32 12 %t169 = getelementptr inbounds %S.gen.FnSig, ptr %t168, i32 0, i32 16 %t170 = load i64, ptr %t169 %t171 = load { ptr, i64, i64 }, ptr %t165 %t172 = extractvalue { ptr, i64, i64 } %t171, 1 %t173 = icmp uge i64 %t170, %t172 br i1 %t173, label %range3067, label %inrange3068 range3067: call void @finch_panic_index(ptr @.str.1984, i64 1207, i64 %t170, i64 %t172) unreachable inrange3068: %t174 = extractvalue { ptr, i64, i64 } %t171, 0 %t175 = getelementptr inbounds %S.ast.Program, ptr %t174, i64 %t170 %t176 = getelementptr inbounds %S.ast.Program, ptr %t175, i32 0, i32 8 %t177 = load ptr, ptr %a1 %t178 = icmp eq ptr %t177, null br i1 %t178, label %panic3069, label %ok3070 panic3069: call void @finch_panic(ptr @.str.1985, i64 1207, ptr @.str.1986) unreachable ok3070: %t179 = getelementptr inbounds %S.gen.Gen, ptr %t177, i32 0, i32 12 %t180 = getelementptr inbounds %S.gen.FnSig, ptr %t179, i32 0, i32 17 %t181 = load i64, ptr %t180 %t182 = load { ptr, i64, i64 }, ptr %t176 %t183 = extractvalue { ptr, i64, i64 } %t182, 1 %t184 = icmp uge i64 %t181, %t183 br i1 %t184, label %range3071, label %inrange3072 range3071: call void @finch_panic_index(ptr @.str.1987, i64 1207, i64 %t181, i64 %t183) unreachable inrange3072: %t185 = extractvalue { ptr, i64, i64 } %t182, 0 %t186 = getelementptr inbounds %S.ast.Node, ptr %t185, i64 %t181 %t187 = load %S.ast.Node, ptr %t186 store %S.ast.Node %t187, ptr %a188 call void @finch.copy.S_ast_Node(ptr %a189, ptr %a188) %t190 = load %S.ast.Node, ptr %a189 store %S.ast.Node %t190, ptr %a191 %t192 = load ptr, ptr %a1 %t193 = icmp eq ptr %t192, null br i1 %t193, label %panic3073, label %ok3074 panic3073: call void @finch_panic(ptr @.str.1988, i64 1208, ptr @.str.1989) unreachable ok3074: %t194 = getelementptr inbounds %S.gen.Gen, ptr %t192, i32 0, i32 27 %t195 = getelementptr inbounds { ptr, i64, i64 }, ptr %t194, i32 0, i32 1 %t196 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } { ptr @.str.1990, i64 3, i64 0 }, ptr %a198 store { ptr, i64, i64 } %t196, ptr %a199 call void @finch_str_concat(ptr %a197, ptr %a198, ptr %a199) %t200 = load { ptr, i64, i64 }, ptr %a197 store { ptr, i64, i64 } %t200, ptr %a202 store { ptr, i64, i64 } { ptr @.str.1991, i64 1, i64 0 }, ptr %a203 call void @finch_str_concat(ptr %a201, ptr %a202, ptr %a203) %t204 = load { ptr, i64, i64 }, ptr %a201 %t205 = load %S.ast.Type, ptr %a4 %t206 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t205) store { ptr, i64, i64 } %t204, ptr %a208 store { ptr, i64, i64 } %t206, ptr %a209 call void @finch_str_concat(ptr %a207, ptr %a208, ptr %a209) %t210 = load { ptr, i64, i64 }, ptr %a207 store { ptr, i64, i64 } %t210, ptr %a212 store { ptr, i64, i64 } { ptr @.str.1992, i64 1, i64 0 }, ptr %a213 call void @finch_str_concat(ptr %a211, ptr %a212, ptr %a213) %t214 = load { ptr, i64, i64 }, ptr %a211 %t215 = load ptr, ptr %a1 %t216 = icmp eq ptr %t215, null br i1 %t216, label %panic3075, label %ok3076 panic3075: call void @finch_panic(ptr @.str.1993, i64 1208, ptr @.str.1994) unreachable ok3076: %t217 = getelementptr inbounds %S.gen.Gen, ptr %t215, i32 0, i32 1 %t218 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 %t219 = load i64, ptr %t218 %t220 = load { ptr, i64, i64 }, ptr %t217 %t221 = extractvalue { ptr, i64, i64 } %t220, 1 %t222 = icmp uge i64 %t219, %t221 br i1 %t222, label %range3077, label %inrange3078 range3077: call void @finch_panic_index(ptr @.str.1995, i64 1208, i64 %t219, i64 %t221) unreachable inrange3078: %t223 = extractvalue { ptr, i64, i64 } %t220, 0 %t224 = getelementptr inbounds { ptr, i64, i64 }, ptr %t223, i64 %t219 %t225 = load { ptr, i64, i64 }, ptr %t224 store { ptr, i64, i64 } %t214, ptr %a227 store { ptr, i64, i64 } %t225, ptr %a228 call void @finch_str_concat(ptr %a226, ptr %a227, ptr %a228) %t229 = load { ptr, i64, i64 }, ptr %a226 store { ptr, i64, i64 } %t229, ptr %a231 store { ptr, i64, i64 } { ptr @.str.1996, i64 1, i64 0 }, ptr %a232 call void @finch_str_concat(ptr %a230, ptr %a231, ptr %a232) %t233 = load { ptr, i64, i64 }, ptr %a230 %t234 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 %t235 = load i64, ptr %t234 call void @finch_str_from_int(ptr %a236, i64 %t235) %t237 = load { ptr, i64, i64 }, ptr %a236 store { ptr, i64, i64 } %t233, ptr %a239 store { ptr, i64, i64 } %t237, ptr %a240 call void @finch_str_concat(ptr %a238, ptr %a239, ptr %a240) %t241 = load { ptr, i64, i64 }, ptr %a238 store { ptr, i64, i64 } %t241, ptr %a243 store { ptr, i64, i64 } { ptr @.str.1997, i64 1, i64 0 }, ptr %a244 call void @finch_str_concat(ptr %a242, ptr %a243, ptr %a244) %t245 = load { ptr, i64, i64 }, ptr %a242 %t246 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 %t247 = load i64, ptr %t246 call void @finch_str_from_int(ptr %a248, i64 %t247) %t249 = load { ptr, i64, i64 }, ptr %a248 store { ptr, i64, i64 } %t245, ptr %a251 store { ptr, i64, i64 } %t249, ptr %a252 call void @finch_str_concat(ptr %a250, ptr %a251, ptr %a252) %t253 = load { ptr, i64, i64 }, ptr %a250 store { ptr, i64, i64 } %t253, ptr %a255 store { ptr, i64, i64 } { ptr @.str.1998, i64 1, i64 0 }, ptr %a256 call void @finch_str_concat(ptr %a254, ptr %a255, ptr %a256) %t257 = load { ptr, i64, i64 }, ptr %a254 %t258 = load ptr, ptr %a1 %t259 = icmp eq ptr %t258, null br i1 %t259, label %panic3079, label %ok3080 panic3079: call void @finch_panic(ptr @.str.1999, i64 1208, ptr @.str.2000) unreachable ok3080: %t260 = getelementptr inbounds %S.gen.Gen, ptr %t258, i32 0, i32 1 %t261 = getelementptr inbounds %S.ast.Node, ptr %a191, i32 0, i32 13 %t262 = load i64, ptr %t261 %t263 = load { ptr, i64, i64 }, ptr %t260 %t264 = extractvalue { ptr, i64, i64 } %t263, 1 %t265 = icmp uge i64 %t262, %t264 br i1 %t265, label %range3081, label %inrange3082 range3081: call void @finch_panic_index(ptr @.str.2001, i64 1208, i64 %t262, i64 %t264) unreachable inrange3082: %t266 = extractvalue { ptr, i64, i64 } %t263, 0 %t267 = getelementptr inbounds { ptr, i64, i64 }, ptr %t266, i64 %t262 %t268 = load { ptr, i64, i64 }, ptr %t267 store { ptr, i64, i64 } %t257, ptr %a270 store { ptr, i64, i64 } %t268, ptr %a271 call void @finch_str_concat(ptr %a269, ptr %a270, ptr %a271) %t272 = load { ptr, i64, i64 }, ptr %a269 store { ptr, i64, i64 } %t272, ptr %a274 store { ptr, i64, i64 } { ptr @.str.2002, i64 1, i64 0 }, ptr %a275 call void @finch_str_concat(ptr %a273, ptr %a274, ptr %a275) %t276 = load { ptr, i64, i64 }, ptr %a273 %t277 = getelementptr inbounds %S.ast.Node, ptr %a191, i32 0, i32 11 %t278 = load i64, ptr %t277 call void @finch_str_from_int(ptr %a279, i64 %t278) %t280 = load { ptr, i64, i64 }, ptr %a279 store { ptr, i64, i64 } %t276, ptr %a282 store { ptr, i64, i64 } %t280, ptr %a283 call void @finch_str_concat(ptr %a281, ptr %a282, ptr %a283) %t284 = load { ptr, i64, i64 }, ptr %a281 store { ptr, i64, i64 } %t284, ptr %a286 store { ptr, i64, i64 } { ptr @.str.2003, i64 1, i64 0 }, ptr %a287 call void @finch_str_concat(ptr %a285, ptr %a286, ptr %a287) %t288 = load { ptr, i64, i64 }, ptr %a285 %t289 = getelementptr inbounds %S.ast.Node, ptr %a191, i32 0, i32 14 %t290 = load i64, ptr %t289 call void @finch_str_from_int(ptr %a291, i64 %t290) %t292 = load { ptr, i64, i64 }, ptr %a291 store { ptr, i64, i64 } %t288, ptr %a294 store { ptr, i64, i64 } %t292, ptr %a295 call void @finch_str_concat(ptr %a293, ptr %a294, ptr %a295) %t296 = load { ptr, i64, i64 }, ptr %a293 %t297 = load i64, ptr %t195 %t298 = add i64 %t297, 1 call void @finch_arr_reserve(ptr %t194, i64 %t298, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t299 = load ptr, ptr %t194 %t300 = getelementptr inbounds { ptr, i64, i64 }, ptr %t299, i64 %t297 store { ptr, i64, i64 } %t296, ptr %t300 store i64 %t298, ptr %t195 %t301 = load ptr, ptr %a1 %t302 = load %S.ast.Node, ptr %a2 %t303 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 %t304 = load i64, ptr %t303 %t305 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 %t306 = load i64, ptr %t305 %t307 = load %S.ast.Type, ptr %a4 %t308 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t307) store { ptr, i64, i64 } { ptr @.str.2004, i64 9, i64 0 }, ptr %a310 store { ptr, i64, i64 } %t308, ptr %a311 call void @finch_str_concat(ptr %a309, ptr %a310, ptr %a311) %t312 = load { ptr, i64, i64 }, ptr %a309 store { ptr, i64, i64 } %t312, ptr %a314 store { ptr, i64, i64 } { ptr @.str.2005, i64 1, i64 0 }, ptr %a315 call void @finch_str_concat(ptr %a313, ptr %a314, ptr %a315) %t316 = load { ptr, i64, i64 }, ptr %a313 %t317 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t316, ptr %a319 store { ptr, i64, i64 } %t317, ptr %a320 call void @finch_str_concat(ptr %a318, ptr %a319, ptr %a320) %t321 = load { ptr, i64, i64 }, ptr %a318 store { ptr, i64, i64 } %t321, ptr %a323 store { ptr, i64, i64 } { ptr @.str.2006, i64 4, i64 0 }, ptr %a324 call void @finch_str_concat(ptr %a322, ptr %a323, ptr %a324) %t325 = load { ptr, i64, i64 }, ptr %a322 call void @finch.gen.noteRef(ptr %t301, %S.ast.Node %t302, i64 %t304, i64 %t306, { ptr, i64, i64 } %t325, { ptr, i64, i64 } { ptr @.str.2007, i64 0, i64 0 }, i64 0, i64 0) br label %endif3062 endif3062: %t326 = load { ptr, i64, i64 }, ptr %a65 store { ptr, i64, i64 } %t326, ptr %a327 call void @finch_str_copy(ptr %a328, ptr %a327) %t329 = load { ptr, i64, i64 }, ptr %a328 ret { ptr, i64, i64 } %t329 } define internal void @finch.gen.pushScope(ptr %p0) { entry: %a1 = alloca ptr, align 16 store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = icmp eq ptr %t2, null br i1 %t3, label %panic3083, label %ok3084 panic3083: call void @finch_panic(ptr @.str.2008, i64 1215, ptr @.str.2009) unreachable ok3084: %t4 = getelementptr inbounds %S.gen.Gen, ptr %t2, i32 0, i32 10 %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i32 0, i32 1 %t6 = load i64, ptr %t5 %t7 = add i64 %t6, 1 call void @finch_arr_reserve(ptr %t4, i64 %t7, i64 ptrtoint (ptr getelementptr (%S.gen.Scope, ptr null, i32 1) to i64)) %t8 = load ptr, ptr %t4 %t9 = getelementptr inbounds %S.gen.Scope, ptr %t8, i64 %t6 store %S.gen.Scope zeroinitializer, ptr %t9 store i64 %t7, ptr %t5 ret void } define internal void @finch.gen.popScope(ptr %p0) { entry: %a1 = alloca ptr, align 16 store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = icmp eq ptr %t2, null br i1 %t3, label %panic3085, label %ok3086 panic3085: call void @finch_panic(ptr @.str.2010, i64 1219, ptr @.str.2011) unreachable ok3086: %t4 = getelementptr inbounds %S.gen.Gen, ptr %t2, i32 0, i32 10 %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i32 0, i32 1 %t6 = load i64, ptr %t5 %t7 = icmp eq i64 %t6, 0 br i1 %t7, label %panic3087, label %ok3088 panic3087: call void @finch_panic(ptr @.str.2012, i64 1219, ptr @.str.2013) unreachable ok3088: %t8 = sub i64 %t6, 1 %t9 = load ptr, ptr %t4 %t10 = getelementptr inbounds %S.gen.Scope, ptr %t9, i64 %t8 %t11 = load %S.gen.Scope, ptr %t10 store i64 %t8, ptr %t5 ret void } define internal void @finch.copy.arr_S_gen_Var(ptr %dst, ptr %src) { entry: %a5 = alloca i64, align 16 call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.gen.Var, ptr null, i32 1) to i64)) %t1 = load ptr, ptr %dst %t2 = load ptr, ptr %src %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 %t4 = load i64, ptr %t3 store i64 0, ptr %a5 br label %n.cond3093 n.cond3093: %t6 = load i64, ptr %a5 %t7 = icmp slt i64 %t6, %t4 br i1 %t7, label %n.body3094, label %n.end3095 n.body3094: %t8 = getelementptr inbounds %S.gen.Var, ptr %t1, i64 %t6 %t9 = getelementptr inbounds %S.gen.Var, ptr %t2, i64 %t6 call void @finch.copy.S_gen_Var(ptr %t8, ptr %t9) %t10 = load i64, ptr %a5 %t11 = add i64 %t10, 1 store i64 %t11, ptr %a5 br label %n.cond3093 n.end3095: ret void } define internal void @finch.copy.S_gen_Scope(ptr %dst, ptr %src) { entry: %t1 = load %S.gen.Scope, ptr %src store %S.gen.Scope %t1, ptr %dst %t2 = getelementptr inbounds %S.gen.Scope, ptr %dst, i32 0, i32 0 %t3 = getelementptr inbounds %S.gen.Scope, ptr %src, i32 0, i32 0 call void @finch.copy.arr_S_gen_Var(ptr %t2, ptr %t3) %t4 = getelementptr inbounds %S.gen.Scope, ptr %dst, i32 0, i32 1 %t5 = getelementptr inbounds %S.gen.Scope, ptr %src, i32 0, i32 1 call void @finch.copy.arr_S_ast_Node(ptr %t4, ptr %t5) %t6 = getelementptr inbounds %S.gen.Scope, ptr %dst, i32 0, i32 2 %t7 = getelementptr inbounds %S.gen.Scope, ptr %src, i32 0, i32 2 call void @finch.copy.arr_int(ptr %t6, ptr %t7) ret void } define internal void @finch.gen.runDefers(ptr %p0, i64 %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca i64, align 16 %a13 = alloca %S.gen.Scope, align 16 %a14 = alloca %S.gen.Scope, align 16 %a16 = alloca %S.gen.Scope, align 16 %a20 = alloca i64, align 16 %a29 = alloca i1, align 16 %a34 = alloca i64, align 16 store ptr %p0, ptr %a1 store i64 %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null br i1 %t4, label %panic3089, label %ok3090 panic3089: call void @finch_panic(ptr @.str.2014, i64 1224, ptr @.str.2015) unreachable ok3090: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 10 %t6 = load i64, ptr %a2 %t7 = load { ptr, i64, i64 }, ptr %t5 %t8 = extractvalue { ptr, i64, i64 } %t7, 1 %t9 = icmp uge i64 %t6, %t8 br i1 %t9, label %range3091, label %inrange3092 range3091: call void @finch_panic_index(ptr @.str.2016, i64 1224, i64 %t6, i64 %t8) unreachable inrange3092: %t10 = extractvalue { ptr, i64, i64 } %t7, 0 %t11 = getelementptr inbounds %S.gen.Scope, ptr %t10, i64 %t6 %t12 = load %S.gen.Scope, ptr %t11 store %S.gen.Scope %t12, ptr %a13 call void @finch.copy.S_gen_Scope(ptr %a14, ptr %a13) %t15 = load %S.gen.Scope, ptr %a14 store %S.gen.Scope %t15, ptr %a16 %t17 = getelementptr inbounds %S.gen.Scope, ptr %a16, i32 0, i32 1 %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t17, i32 0, i32 1 %t19 = load i64, ptr %t18 store i64 %t19, ptr %a20 br label %while.cond3096 while.cond3096: %t21 = load i64, ptr %a20 %t22 = icmp sgt i64 %t21, 0 br i1 %t22, label %while.body3097, label %while.end3098 while.body3097: %t23 = load i64, ptr %a20 %t24 = sub i64 %t23, 1 store i64 %t24, ptr %a20 %t25 = load ptr, ptr %a1 %t26 = icmp eq ptr %t25, null br i1 %t26, label %panic3099, label %ok3100 panic3099: call void @finch_panic(ptr @.str.2017, i64 1228, ptr @.str.2018) unreachable ok3100: %t27 = getelementptr inbounds %S.gen.Gen, ptr %t25, i32 0, i32 42 %t28 = load i1, ptr %t27 store i1 %t28, ptr %a29 %t30 = load ptr, ptr %a1 %t31 = icmp eq ptr %t30, null br i1 %t31, label %panic3101, label %ok3102 panic3101: call void @finch_panic(ptr @.str.2019, i64 1229, ptr @.str.2020) unreachable ok3102: %t32 = getelementptr inbounds %S.gen.Gen, ptr %t30, i32 0, i32 43 %t33 = load i64, ptr %t32 store i64 %t33, ptr %a34 %t35 = load ptr, ptr %a1 %t36 = icmp eq ptr %t35, null br i1 %t36, label %panic3103, label %ok3104 panic3103: call void @finch_panic(ptr @.str.2021, i64 1230, ptr @.str.2022) unreachable ok3104: %t37 = getelementptr inbounds %S.gen.Gen, ptr %t35, i32 0, i32 42 store i1 true, ptr %t37 %t38 = getelementptr inbounds %S.gen.Scope, ptr %a16, i32 0, i32 2 %t39 = load i64, ptr %a20 %t40 = load { ptr, i64, i64 }, ptr %t38 %t41 = extractvalue { ptr, i64, i64 } %t40, 1 %t42 = icmp uge i64 %t39, %t41 br i1 %t42, label %range3105, label %inrange3106 range3105: call void @finch_panic_index(ptr @.str.2023, i64 1231, i64 %t39, i64 %t41) unreachable inrange3106: %t43 = extractvalue { ptr, i64, i64 } %t40, 0 %t44 = getelementptr inbounds i64, ptr %t43, i64 %t39 %t45 = load i64, ptr %t44 %t46 = load ptr, ptr %a1 %t47 = icmp eq ptr %t46, null br i1 %t47, label %panic3107, label %ok3108 panic3107: call void @finch_panic(ptr @.str.2024, i64 1231, ptr @.str.2025) unreachable ok3108: %t48 = getelementptr inbounds %S.gen.Gen, ptr %t46, i32 0, i32 43 store i64 %t45, ptr %t48 %t49 = load ptr, ptr %a1 %t50 = icmp eq ptr %t49, null br i1 %t50, label %panic3109, label %ok3110 panic3109: call void @finch_panic(ptr @.str.2026, i64 1232, ptr @.str.2027) unreachable ok3110: %t51 = getelementptr inbounds %S.gen.Gen, ptr %t49, i32 0, i32 44 %t52 = load i64, ptr %t51 %t53 = add i64 %t52, 1 store i64 %t53, ptr %t51 %t54 = load ptr, ptr %a1 call void @finch.gen.pushScope(ptr %t54) %t55 = load ptr, ptr %a1 %t56 = getelementptr inbounds %S.gen.Scope, ptr %a16, i32 0, i32 1 %t57 = load i64, ptr %a20 %t58 = load { ptr, i64, i64 }, ptr %t56 %t59 = extractvalue { ptr, i64, i64 } %t58, 1 %t60 = icmp uge i64 %t57, %t59 br i1 %t60, label %range3111, label %inrange3112 range3111: call void @finch_panic_index(ptr @.str.2028, i64 1234, i64 %t57, i64 %t59) unreachable inrange3112: %t61 = extractvalue { ptr, i64, i64 } %t58, 0 %t62 = getelementptr inbounds %S.ast.Node, ptr %t61, i64 %t57 %t63 = load %S.ast.Node, ptr %t62 call void @finch.gen.stmt(ptr %t55, %S.ast.Node %t63) %t64 = load ptr, ptr %a1 call void @finch.gen.popScope(ptr %t64) %t65 = load ptr, ptr %a1 %t66 = icmp eq ptr %t65, null br i1 %t66, label %panic3113, label %ok3114 panic3113: call void @finch_panic(ptr @.str.2029, i64 1236, ptr @.str.2030) unreachable ok3114: %t67 = getelementptr inbounds %S.gen.Gen, ptr %t65, i32 0, i32 44 %t68 = load i64, ptr %t67 %t69 = sub i64 %t68, 1 store i64 %t69, ptr %t67 %t70 = load i1, ptr %a29 %t71 = load ptr, ptr %a1 %t72 = icmp eq ptr %t71, null br i1 %t72, label %panic3115, label %ok3116 panic3115: call void @finch_panic(ptr @.str.2031, i64 1237, ptr @.str.2032) unreachable ok3116: %t73 = getelementptr inbounds %S.gen.Gen, ptr %t71, i32 0, i32 42 store i1 %t70, ptr %t73 %t74 = load i64, ptr %a34 %t75 = load ptr, ptr %a1 %t76 = icmp eq ptr %t75, null br i1 %t76, label %panic3117, label %ok3118 panic3117: call void @finch_panic(ptr @.str.2033, i64 1238, ptr @.str.2034) unreachable ok3118: %t77 = getelementptr inbounds %S.gen.Gen, ptr %t75, i32 0, i32 43 store i64 %t74, ptr %t77 br label %while.cond3096 while.end3098: ret void } define internal void @finch.gen.unwind(ptr %p0, i64 %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca i64, align 16 %a8 = alloca i64, align 16 store ptr %p0, ptr %a1 store i64 %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null br i1 %t4, label %panic3119, label %ok3120 panic3119: call void @finch_panic(ptr @.str.2035, i64 1244, ptr @.str.2036) unreachable ok3120: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 10 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 %t7 = load i64, ptr %t6 store i64 %t7, ptr %a8 br label %while.cond3121 while.cond3121: %t9 = load i64, ptr %a8 %t10 = load i64, ptr %a2 %t11 = icmp sgt i64 %t9, %t10 br i1 %t11, label %while.body3122, label %while.end3123 while.body3122: %t12 = load i64, ptr %a8 %t13 = sub i64 %t12, 1 store i64 %t13, ptr %a8 %t14 = load ptr, ptr %a1 %t15 = load i64, ptr %a8 call void @finch.gen.runDefers(ptr %t14, i64 %t15) br label %while.cond3121 while.end3123: ret void } define internal void @finch.gen.endScope(ptr %p0) { entry: %a1 = alloca ptr, align 16 store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = icmp eq ptr %t2, null br i1 %t3, label %panic3124, label %ok3125 panic3124: call void @finch_panic(ptr @.str.2037, i64 1253, ptr @.str.2038) unreachable ok3125: %t4 = getelementptr inbounds %S.gen.Gen, ptr %t2, i32 0, i32 9 %t5 = load i1, ptr %t4 %t6 = xor i1 %t5, true br i1 %t6, label %then3126, label %endif3128 then3126: %t7 = load ptr, ptr %a1 %t8 = load ptr, ptr %a1 %t9 = icmp eq ptr %t8, null br i1 %t9, label %panic3129, label %ok3130 panic3129: call void @finch_panic(ptr @.str.2039, i64 1254, ptr @.str.2040) unreachable ok3130: %t10 = getelementptr inbounds %S.gen.Gen, ptr %t8, i32 0, i32 10 %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t10, i32 0, i32 1 %t12 = load i64, ptr %t11 %t13 = sub i64 %t12, 1 call void @finch.gen.runDefers(ptr %t7, i64 %t13) br label %endif3128 endif3128: %t14 = load ptr, ptr %a1 %t15 = icmp eq ptr %t14, null br i1 %t15, label %panic3131, label %ok3132 panic3131: call void @finch_panic(ptr @.str.2041, i64 1256, ptr @.str.2042) unreachable ok3132: %t16 = getelementptr inbounds %S.gen.Gen, ptr %t14, i32 0, i32 10 %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t16, i32 0, i32 1 %t18 = load i64, ptr %t17 %t19 = icmp eq i64 %t18, 0 br i1 %t19, label %panic3133, label %ok3134 panic3133: call void @finch_panic(ptr @.str.2043, i64 1256, ptr @.str.2044) unreachable ok3134: %t20 = sub i64 %t18, 1 %t21 = load ptr, ptr %t16 %t22 = getelementptr inbounds %S.gen.Scope, ptr %t21, i64 %t20 %t23 = load %S.gen.Scope, ptr %t22 store i64 %t20, ptr %t17 ret void } define internal { ptr, i64, i64 } @finch.gen.rootVar(%S.ast.Node %p0) { entry: %a1 = alloca %S.ast.Node, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 store %S.ast.Node %p0, ptr %a1 %t2 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 0 %t3 = load { ptr, i64, i64 }, ptr %t2 store { ptr, i64, i64 } %t3, ptr %a4 store { ptr, i64, i64 } { ptr @.str.2045, i64 3, i64 0 }, ptr %a5 %t6 = call i32 @finch_str_eq(ptr %a4, ptr %a5) %t7 = icmp ne i32 %t6, 0 br i1 %t7, label %then3135, label %endif3137 then3135: %t8 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 1 %t9 = load { ptr, i64, i64 }, ptr %t8 store { ptr, i64, i64 } %t9, ptr %a10 call void @finch_str_copy(ptr %a11, ptr %a10) %t12 = load { ptr, i64, i64 }, ptr %a11 ret { ptr, i64, i64 } %t12 endif3137: %t13 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 0 %t14 = load { ptr, i64, i64 }, ptr %t13 store { ptr, i64, i64 } %t14, ptr %a15 store { ptr, i64, i64 } { ptr @.str.2046, i64 6, i64 0 }, ptr %a16 %t17 = call i32 @finch_str_eq(ptr %a15, ptr %a16) %t18 = icmp ne i32 %t17, 0 br label %logic.from3138 logic.from3138: br i1 %t18, label %logic.end3140, label %logic.rhs3139 logic.rhs3139: %t19 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 0 %t20 = load { ptr, i64, i64 }, ptr %t19 store { ptr, i64, i64 } %t20, ptr %a21 store { ptr, i64, i64 } { ptr @.str.2047, i64 5, i64 0 }, ptr %a22 %t23 = call i32 @finch_str_eq(ptr %a21, ptr %a22) %t24 = icmp ne i32 %t23, 0 br label %logic.rend3141 logic.rend3141: br label %logic.end3140 logic.end3140: %t25 = phi i1 [ true, %logic.from3138 ], [ %t24, %logic.rend3141 ] br i1 %t25, label %then3142, label %endif3144 then3142: %t26 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 9 %t27 = load { ptr, i64, i64 }, ptr %t26 %t28 = extractvalue { ptr, i64, i64 } %t27, 1 %t29 = icmp uge i64 0, %t28 br i1 %t29, label %range3145, label %inrange3146 range3145: call void @finch_panic_index(ptr @.str.2048, i64 1266, i64 0, i64 %t28) unreachable inrange3146: %t30 = extractvalue { ptr, i64, i64 } %t27, 0 %t31 = getelementptr inbounds %S.ast.Node, ptr %t30, i64 0 %t32 = load %S.ast.Node, ptr %t31 %t33 = call { ptr, i64, i64 } @finch.gen.rootVar(%S.ast.Node %t32) ret { ptr, i64, i64 } %t33 endif3144: ret { ptr, i64, i64 } { ptr @.str.2049, i64 0, i64 0 } } define internal i1 @finch.gen.mutates(ptr %p0, { ptr, i64, i64 } %p1, %S.ast.Node %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca %S.ast.Node, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca i64, align 16 %a50 = alloca i64, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca i64, align 16 %a71 = alloca i64, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca { ptr, i64, i64 }, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a126 = alloca { ptr, i64, i64 }, align 16 %a127 = alloca { ptr, i64, i64 }, align 16 %a132 = alloca i64, align 16 %a140 = alloca %S.ast.Node, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store %S.ast.Node %p2, ptr %a3 %t4 = mul i64 8, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t5 = call ptr @finch_alloc(i64 %t4) %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i64 0 store { ptr, i64, i64 } { ptr @.str.2050, i64 4, i64 0 }, ptr %t6 %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i64 1 store { ptr, i64, i64 } { ptr @.str.2051, i64 3, i64 0 }, ptr %t7 %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i64 2 store { ptr, i64, i64 } { ptr @.str.2052, i64 6, i64 0 }, ptr %t8 %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i64 3 store { ptr, i64, i64 } { ptr @.str.2053, i64 6, i64 0 }, ptr %t9 %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i64 4 store { ptr, i64, i64 } { ptr @.str.2054, i64 5, i64 0 }, ptr %t10 %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i64 5 store { ptr, i64, i64 } { ptr @.str.2055, i64 6, i64 0 }, ptr %t11 %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i64 6 store { ptr, i64, i64 } { ptr @.str.2056, i64 4, i64 0 }, ptr %t12 %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i64 7 store { ptr, i64, i64 } { ptr @.str.2057, i64 7, i64 0 }, ptr %t13 %t14 = insertvalue { ptr, i64, i64 } undef, ptr %t5, 0 %t15 = insertvalue { ptr, i64, i64 } %t14, i64 8, 1 %t16 = insertvalue { ptr, i64, i64 } %t15, i64 8, 2 store { ptr, i64, i64 } %t16, ptr %a17 %t18 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 0 %t19 = load { ptr, i64, i64 }, ptr %t18 store { ptr, i64, i64 } %t19, ptr %a20 store { ptr, i64, i64 } { ptr @.str.2058, i64 6, i64 0 }, ptr %a21 %t22 = call i32 @finch_str_eq(ptr %a20, ptr %a21) %t23 = icmp ne i32 %t22, 0 br label %logic.from3147 logic.from3147: br i1 %t23, label %logic.rhs3148, label %logic.end3149 logic.rhs3148: %t24 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 9 %t25 = load { ptr, i64, i64 }, ptr %t24 %t26 = extractvalue { ptr, i64, i64 } %t25, 1 %t27 = icmp uge i64 0, %t26 br i1 %t27, label %range3150, label %inrange3151 range3150: call void @finch_panic_index(ptr @.str.2059, i64 1273, i64 0, i64 %t26) unreachable inrange3151: %t28 = extractvalue { ptr, i64, i64 } %t25, 0 %t29 = getelementptr inbounds %S.ast.Node, ptr %t28, i64 0 %t30 = load %S.ast.Node, ptr %t29 %t31 = call { ptr, i64, i64 } @finch.gen.rootVar(%S.ast.Node %t30) %t32 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t31, ptr %a33 store { ptr, i64, i64 } %t32, ptr %a34 %t35 = call i32 @finch_str_eq(ptr %a33, ptr %a34) %t36 = icmp ne i32 %t35, 0 br label %logic.rend3152 logic.rend3152: br label %logic.end3149 logic.end3149: %t37 = phi i1 [ false, %logic.from3147 ], [ %t36, %logic.rend3152 ] br i1 %t37, label %then3153, label %endif3155 then3153: ret i1 true endif3155: %t38 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 0 %t39 = load { ptr, i64, i64 }, ptr %t38 store { ptr, i64, i64 } %t39, ptr %a40 store { ptr, i64, i64 } { ptr @.str.2060, i64 6, i64 0 }, ptr %a41 %t42 = call i32 @finch_str_eq(ptr %a40, ptr %a41) %t43 = icmp ne i32 %t42, 0 br label %logic.from3156 logic.from3156: br i1 %t43, label %logic.rhs3157, label %logic.end3158 logic.rhs3157: %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %a17, i32 0, i32 1 %t45 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 1 %t46 = load { ptr, i64, i64 }, ptr %t45 store i64 -1, ptr %a47 %t48 = load i64, ptr %t44 %t49 = load ptr, ptr %a17 store i64 0, ptr %a50 br label %find.cond3159 find.cond3159: %t51 = load i64, ptr %a50 %t52 = icmp slt i64 %t51, %t48 br i1 %t52, label %find.body3160, label %find.end3163 find.body3160: %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %t49, i64 %t51 %t54 = load { ptr, i64, i64 }, ptr %t53 store { ptr, i64, i64 } %t54, ptr %a55 store { ptr, i64, i64 } %t46, ptr %a56 %t57 = call i32 @finch_str_eq(ptr %a55, ptr %a56) %t58 = icmp ne i32 %t57, 0 br i1 %t58, label %find.hit3161, label %find.next3162 find.hit3161: store i64 %t51, ptr %a47 br label %find.end3163 find.next3162: %t59 = add i64 %t51, 1 store i64 %t59, ptr %a50 br label %find.cond3159 find.end3163: %t60 = load i64, ptr %a47 %t61 = icmp sge i64 %t60, 0 br label %logic.from3164 logic.from3164: br i1 %t61, label %logic.end3166, label %logic.rhs3165 logic.rhs3165: %t62 = load ptr, ptr %a1 %t63 = icmp eq ptr %t62, null br i1 %t63, label %panic3167, label %ok3168 panic3167: call void @finch_panic(ptr @.str.2061, i64 1279, ptr @.str.2062) unreachable ok3168: %t64 = getelementptr inbounds %S.gen.Gen, ptr %t62, i32 0, i32 22 %t65 = getelementptr inbounds { ptr, i64, i64 }, ptr %t64, i32 0, i32 1 %t66 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 1 %t67 = load { ptr, i64, i64 }, ptr %t66 store i64 -1, ptr %a68 %t69 = load i64, ptr %t65 %t70 = load ptr, ptr %t64 store i64 0, ptr %a71 br label %find.cond3169 find.cond3169: %t72 = load i64, ptr %a71 %t73 = icmp slt i64 %t72, %t69 br i1 %t73, label %find.body3170, label %find.end3173 find.body3170: %t74 = getelementptr inbounds { ptr, i64, i64 }, ptr %t70, i64 %t72 %t75 = load { ptr, i64, i64 }, ptr %t74 store { ptr, i64, i64 } %t75, ptr %a76 store { ptr, i64, i64 } %t67, ptr %a77 %t78 = call i32 @finch_str_eq(ptr %a76, ptr %a77) %t79 = icmp ne i32 %t78, 0 br i1 %t79, label %find.hit3171, label %find.next3172 find.hit3171: store i64 %t72, ptr %a68 br label %find.end3173 find.next3172: %t80 = add i64 %t72, 1 store i64 %t80, ptr %a71 br label %find.cond3169 find.end3173: %t81 = load i64, ptr %a68 %t82 = icmp sge i64 %t81, 0 br label %logic.rend3174 logic.rend3174: br label %logic.end3166 logic.end3166: %t83 = phi i1 [ true, %logic.from3164 ], [ %t82, %logic.rend3174 ] br label %logic.rend3175 logic.rend3175: br label %logic.end3158 logic.end3158: %t84 = phi i1 [ false, %logic.from3156 ], [ %t83, %logic.rend3175 ] br label %logic.from3176 logic.from3176: br i1 %t84, label %logic.rhs3177, label %logic.end3178 logic.rhs3177: %t85 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 9 %t86 = load { ptr, i64, i64 }, ptr %t85 %t87 = extractvalue { ptr, i64, i64 } %t86, 1 %t88 = icmp uge i64 0, %t87 br i1 %t88, label %range3179, label %inrange3180 range3179: call void @finch_panic_index(ptr @.str.2063, i64 1279, i64 0, i64 %t87) unreachable inrange3180: %t89 = extractvalue { ptr, i64, i64 } %t86, 0 %t90 = getelementptr inbounds %S.ast.Node, ptr %t89, i64 0 %t91 = load %S.ast.Node, ptr %t90 %t92 = call { ptr, i64, i64 } @finch.gen.rootVar(%S.ast.Node %t91) %t93 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t92, ptr %a94 store { ptr, i64, i64 } %t93, ptr %a95 %t96 = call i32 @finch_str_eq(ptr %a94, ptr %a95) %t97 = icmp ne i32 %t96, 0 br label %logic.rend3181 logic.rend3181: br label %logic.end3178 logic.end3178: %t98 = phi i1 [ false, %logic.from3176 ], [ %t97, %logic.rend3181 ] br i1 %t98, label %then3182, label %endif3184 then3182: ret i1 true endif3184: %t99 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 0 %t100 = load { ptr, i64, i64 }, ptr %t99 store { ptr, i64, i64 } %t100, ptr %a101 store { ptr, i64, i64 } { ptr @.str.2064, i64 4, i64 0 }, ptr %a102 %t103 = call i32 @finch_str_eq(ptr %a101, ptr %a102) %t104 = icmp ne i32 %t103, 0 br label %logic.from3185 logic.from3185: br i1 %t104, label %logic.rhs3186, label %logic.end3187 logic.rhs3186: %t105 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 1 %t106 = load { ptr, i64, i64 }, ptr %t105 store { ptr, i64, i64 } %t106, ptr %a107 store { ptr, i64, i64 } { ptr @.str.2065, i64 4, i64 0 }, ptr %a108 %t109 = call i32 @finch_str_eq(ptr %a107, ptr %a108) %t110 = icmp ne i32 %t109, 0 br label %logic.rend3188 logic.rend3188: br label %logic.end3187 logic.end3187: %t111 = phi i1 [ false, %logic.from3185 ], [ %t110, %logic.rend3188 ] br label %logic.from3189 logic.from3189: br i1 %t111, label %logic.rhs3190, label %logic.end3191 logic.rhs3190: %t112 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 9 %t113 = getelementptr inbounds { ptr, i64, i64 }, ptr %t112, i32 0, i32 1 %t114 = load i64, ptr %t113 %t115 = icmp eq i64 %t114, 1 br label %logic.rend3192 logic.rend3192: br label %logic.end3191 logic.end3191: %t116 = phi i1 [ false, %logic.from3189 ], [ %t115, %logic.rend3192 ] br label %logic.from3193 logic.from3193: br i1 %t116, label %logic.rhs3194, label %logic.end3195 logic.rhs3194: %t117 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 9 %t118 = load { ptr, i64, i64 }, ptr %t117 %t119 = extractvalue { ptr, i64, i64 } %t118, 1 %t120 = icmp uge i64 0, %t119 br i1 %t120, label %range3196, label %inrange3197 range3196: call void @finch_panic_index(ptr @.str.2066, i64 1282, i64 0, i64 %t119) unreachable inrange3197: %t121 = extractvalue { ptr, i64, i64 } %t118, 0 %t122 = getelementptr inbounds %S.ast.Node, ptr %t121, i64 0 %t123 = load %S.ast.Node, ptr %t122 %t124 = call { ptr, i64, i64 } @finch.gen.rootVar(%S.ast.Node %t123) %t125 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t124, ptr %a126 store { ptr, i64, i64 } %t125, ptr %a127 %t128 = call i32 @finch_str_eq(ptr %a126, ptr %a127) %t129 = icmp ne i32 %t128, 0 br label %logic.rend3198 logic.rend3198: br label %logic.end3195 logic.end3195: %t130 = phi i1 [ false, %logic.from3193 ], [ %t129, %logic.rend3198 ] br i1 %t130, label %then3199, label %endif3201 then3199: ret i1 true endif3201: %t131 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 9 store i64 0, ptr %a132 br label %each.cond3202 each.cond3202: %t133 = getelementptr inbounds { ptr, i64, i64 }, ptr %t131, i32 0, i32 1 %t134 = load i64, ptr %t133 %t135 = load i64, ptr %a132 %t136 = icmp slt i64 %t135, %t134 br i1 %t136, label %each.body3203, label %each.end3205 each.body3203: %t137 = load ptr, ptr %t131 %t138 = getelementptr inbounds %S.ast.Node, ptr %t137, i64 %t135 %t139 = load %S.ast.Node, ptr %t138 store %S.ast.Node %t139, ptr %a140 %t141 = load ptr, ptr %a1 %t142 = load { ptr, i64, i64 }, ptr %a2 %t143 = load %S.ast.Node, ptr %a140 %t144 = call i1 @finch.gen.mutates(ptr %t141, { ptr, i64, i64 } %t142, %S.ast.Node %t143) br i1 %t144, label %then3206, label %endif3208 then3206: ret i1 true endif3208: br label %each.step3204 each.step3204: %t145 = load i64, ptr %a132 %t146 = add i64 %t145, 1 store i64 %t146, ptr %a132 br label %each.cond3202 each.end3205: ret i1 false } define internal void @finch.gen.declare(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a7 = alloca i64, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca i64, align 16 %a59 = alloca %S.ast.Node, align 16 %a60 = alloca %S.ast.Node, align 16 %a62 = alloca %S.ast.Node, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a106 = alloca { ptr, i64, i64 }, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 %a113 = alloca { ptr, i64, i64 }, align 16 %a118 = alloca { ptr, i64, i64 }, align 16 %a119 = alloca { ptr, i64, i64 }, align 16 %a139 = alloca { ptr, i64, i64 }, align 16 %a140 = alloca { ptr, i64, i64 }, align 16 %a145 = alloca { ptr, i64, i64 }, align 16 %a146 = alloca { ptr, i64, i64 }, align 16 %a166 = alloca i64, align 16 %a183 = alloca { ptr, i64, i64 }, align 16 %a184 = alloca { ptr, i64, i64 }, align 16 %a198 = alloca i64, align 16 %a218 = alloca %S.ast.Node, align 16 %a219 = alloca %S.ast.Node, align 16 %a221 = alloca %S.ast.Node, align 16 %a245 = alloca { ptr, i64, i64 }, align 16 %a246 = alloca { ptr, i64, i64 }, align 16 %a247 = alloca { ptr, i64, i64 }, align 16 %a249 = alloca { ptr, i64, i64 }, align 16 %a250 = alloca { ptr, i64, i64 }, align 16 %a251 = alloca { ptr, i64, i64 }, align 16 %a257 = alloca { ptr, i64, i64 }, align 16 %a258 = alloca { ptr, i64, i64 }, align 16 %a263 = alloca { ptr, i64, i64 }, align 16 %a264 = alloca { ptr, i64, i64 }, align 16 %a267 = alloca %S.gen.EnumDef, align 16 %a268 = alloca i64, align 16 %a270 = alloca i64, align 16 %a278 = alloca %S.ast.Node, align 16 %a285 = alloca { ptr, i64, i64 }, align 16 %a291 = alloca i64, align 16 %a294 = alloca i64, align 16 %a299 = alloca { ptr, i64, i64 }, align 16 %a300 = alloca { ptr, i64, i64 }, align 16 %a310 = alloca { ptr, i64, i64 }, align 16 %a311 = alloca { ptr, i64, i64 }, align 16 %a312 = alloca { ptr, i64, i64 }, align 16 %a314 = alloca { ptr, i64, i64 }, align 16 %a315 = alloca { ptr, i64, i64 }, align 16 %a316 = alloca { ptr, i64, i64 }, align 16 %a320 = alloca { ptr, i64, i64 }, align 16 %a321 = alloca { ptr, i64, i64 }, align 16 %a322 = alloca { ptr, i64, i64 }, align 16 %a324 = alloca { ptr, i64, i64 }, align 16 %a325 = alloca { ptr, i64, i64 }, align 16 %a326 = alloca { ptr, i64, i64 }, align 16 %a331 = alloca i64, align 16 %a334 = alloca i64, align 16 %a347 = alloca { ptr, i64, i64 }, align 16 %a348 = alloca { ptr, i64, i64 }, align 16 %a349 = alloca { ptr, i64, i64 }, align 16 %a351 = alloca { ptr, i64, i64 }, align 16 %a352 = alloca { ptr, i64, i64 }, align 16 %a353 = alloca { ptr, i64, i64 }, align 16 %a356 = alloca { ptr, i64, i64 }, align 16 %a358 = alloca { ptr, i64, i64 }, align 16 %a359 = alloca { ptr, i64, i64 }, align 16 %a360 = alloca { ptr, i64, i64 }, align 16 %a362 = alloca { ptr, i64, i64 }, align 16 %a363 = alloca { ptr, i64, i64 }, align 16 %a364 = alloca { ptr, i64, i64 }, align 16 %a370 = alloca { ptr, i64, i64 }, align 16 %a371 = alloca { ptr, i64, i64 }, align 16 %a393 = alloca %S.gen.EnumDef, align 16 %a394 = alloca %S.gen.EnumDef, align 16 %a410 = alloca i64, align 16 %a429 = alloca { ptr, i64, i64 }, align 16 %a430 = alloca { ptr, i64, i64 }, align 16 %a448 = alloca i64, align 16 %a460 = alloca i64, align 16 %a477 = alloca { ptr, i64, i64 }, align 16 %a478 = alloca { ptr, i64, i64 }, align 16 %a492 = alloca i64, align 16 %a512 = alloca %S.ast.Node, align 16 %a513 = alloca %S.ast.Node, align 16 %a515 = alloca %S.ast.Node, align 16 %a535 = alloca { ptr, i64, i64 }, align 16 %a536 = alloca { ptr, i64, i64 }, align 16 %a537 = alloca { ptr, i64, i64 }, align 16 %a539 = alloca { ptr, i64, i64 }, align 16 %a540 = alloca { ptr, i64, i64 }, align 16 %a541 = alloca { ptr, i64, i64 }, align 16 %a561 = alloca { ptr, i64, i64 }, align 16 %a562 = alloca { ptr, i64, i64 }, align 16 %a563 = alloca { ptr, i64, i64 }, align 16 %a565 = alloca { ptr, i64, i64 }, align 16 %a566 = alloca { ptr, i64, i64 }, align 16 %a567 = alloca { ptr, i64, i64 }, align 16 %a577 = alloca { ptr, i64, i64 }, align 16 %a578 = alloca { ptr, i64, i64 }, align 16 %a583 = alloca { ptr, i64, i64 }, align 16 %a584 = alloca { ptr, i64, i64 }, align 16 %a589 = alloca { ptr, i64, i64 }, align 16 %a590 = alloca { ptr, i64, i64 }, align 16 %a595 = alloca { ptr, i64, i64 }, align 16 %a596 = alloca { ptr, i64, i64 }, align 16 %a611 = alloca { ptr, i64, i64 }, align 16 %a612 = alloca { ptr, i64, i64 }, align 16 %a614 = alloca { ptr, i64, i64 }, align 16 %a615 = alloca i1, align 16 %a642 = alloca { ptr, i64, i64 }, align 16 %a643 = alloca { ptr, i64, i64 }, align 16 %a644 = alloca { ptr, i64, i64 }, align 16 %a646 = alloca { ptr, i64, i64 }, align 16 %a647 = alloca { ptr, i64, i64 }, align 16 %a648 = alloca { ptr, i64, i64 }, align 16 %a652 = alloca { ptr, i64, i64 }, align 16 %a653 = alloca { ptr, i64, i64 }, align 16 %a654 = alloca { ptr, i64, i64 }, align 16 %a656 = alloca { ptr, i64, i64 }, align 16 %a657 = alloca { ptr, i64, i64 }, align 16 %a658 = alloca { ptr, i64, i64 }, align 16 %a672 = alloca i64, align 16 %a691 = alloca { ptr, i64, i64 }, align 16 %a692 = alloca { ptr, i64, i64 }, align 16 %a693 = alloca { ptr, i64, i64 }, align 16 %a695 = alloca { ptr, i64, i64 }, align 16 %a696 = alloca { ptr, i64, i64 }, align 16 %a697 = alloca { ptr, i64, i64 }, align 16 %a711 = alloca { ptr, i64, i64 }, align 16 %a712 = alloca { ptr, i64, i64 }, align 16 %a713 = alloca { ptr, i64, i64 }, align 16 %a715 = alloca { ptr, i64, i64 }, align 16 %a716 = alloca { ptr, i64, i64 }, align 16 %a717 = alloca { ptr, i64, i64 }, align 16 %a721 = alloca { ptr, i64, i64 }, align 16 %a722 = alloca { ptr, i64, i64 }, align 16 %a723 = alloca { ptr, i64, i64 }, align 16 %a725 = alloca { ptr, i64, i64 }, align 16 %a726 = alloca { ptr, i64, i64 }, align 16 %a727 = alloca { ptr, i64, i64 }, align 16 %a742 = alloca i64, align 16 %a745 = alloca i64, align 16 %a750 = alloca { ptr, i64, i64 }, align 16 %a751 = alloca { ptr, i64, i64 }, align 16 %a761 = alloca { ptr, i64, i64 }, align 16 %a762 = alloca { ptr, i64, i64 }, align 16 %a763 = alloca { ptr, i64, i64 }, align 16 %a765 = alloca { ptr, i64, i64 }, align 16 %a766 = alloca { ptr, i64, i64 }, align 16 %a767 = alloca { ptr, i64, i64 }, align 16 %a771 = alloca { ptr, i64, i64 }, align 16 %a772 = alloca { ptr, i64, i64 }, align 16 %a773 = alloca { ptr, i64, i64 }, align 16 %a775 = alloca { ptr, i64, i64 }, align 16 %a776 = alloca { ptr, i64, i64 }, align 16 %a777 = alloca { ptr, i64, i64 }, align 16 %a792 = alloca { ptr, i64, i64 }, align 16 %a793 = alloca { ptr, i64, i64 }, align 16 %a794 = alloca { ptr, i64, i64 }, align 16 %a796 = alloca { ptr, i64, i64 }, align 16 %a797 = alloca { ptr, i64, i64 }, align 16 %a798 = alloca { ptr, i64, i64 }, align 16 %a807 = alloca { ptr, i64, i64 }, align 16 %a808 = alloca { ptr, i64, i64 }, align 16 %a809 = alloca { ptr, i64, i64 }, align 16 %a811 = alloca { ptr, i64, i64 }, align 16 %a812 = alloca { ptr, i64, i64 }, align 16 %a813 = alloca { ptr, i64, i64 }, align 16 %a819 = alloca { ptr, i64, i64 }, align 16 %a820 = alloca { ptr, i64, i64 }, align 16 %a825 = alloca { ptr, i64, i64 }, align 16 %a826 = alloca { ptr, i64, i64 }, align 16 %a831 = alloca { ptr, i64, i64 }, align 16 %a832 = alloca { ptr, i64, i64 }, align 16 %a836 = alloca { ptr, i64, i64 }, align 16 %a837 = alloca { ptr, i64, i64 }, align 16 %a852 = alloca %S.gen.FnSig, align 16 %a858 = alloca { ptr, i64, i64 }, align 16 %a859 = alloca { ptr, i64, i64 }, align 16 %a860 = alloca { ptr, i64, i64 }, align 16 %a862 = alloca { ptr, i64, i64 }, align 16 %a863 = alloca { ptr, i64, i64 }, align 16 %a864 = alloca { ptr, i64, i64 }, align 16 %a868 = alloca { ptr, i64, i64 }, align 16 %a869 = alloca { ptr, i64, i64 }, align 16 %a870 = alloca { ptr, i64, i64 }, align 16 %a882 = alloca { ptr, i64, i64 }, align 16 %a883 = alloca { ptr, i64, i64 }, align 16 %a884 = alloca { ptr, i64, i64 }, align 16 %a886 = alloca { ptr, i64, i64 }, align 16 %a887 = alloca { ptr, i64, i64 }, align 16 %a888 = alloca { ptr, i64, i64 }, align 16 %a892 = alloca { ptr, i64, i64 }, align 16 %a893 = alloca { ptr, i64, i64 }, align 16 %a894 = alloca { ptr, i64, i64 }, align 16 %a896 = alloca { ptr, i64, i64 }, align 16 %a897 = alloca { ptr, i64, i64 }, align 16 %a898 = alloca { ptr, i64, i64 }, align 16 %a902 = alloca { ptr, i64, i64 }, align 16 %a903 = alloca { ptr, i64, i64 }, align 16 %a904 = alloca { ptr, i64, i64 }, align 16 %a917 = alloca i64, align 16 %a929 = alloca { ptr, i64, i64 }, align 16 %a930 = alloca { ptr, i64, i64 }, align 16 %a949 = alloca { ptr, i64, i64 }, align 16 %a950 = alloca { ptr, i64, i64 }, align 16 %a951 = alloca { ptr, i64, i64 }, align 16 %a953 = alloca { ptr, i64, i64 }, align 16 %a954 = alloca { ptr, i64, i64 }, align 16 %a955 = alloca { ptr, i64, i64 }, align 16 %a993 = alloca { ptr, i64, i64 }, align 16 %a994 = alloca { ptr, i64, i64 }, align 16 %a1012 = alloca %S.gen.FnSig, align 16 %a1013 = alloca %S.gen.FnSig, align 16 %a1023 = alloca i1, align 16 %a1030 = alloca i64, align 16 %a1096 = alloca %S.ast.Node, align 16 %a1097 = alloca %S.ast.Node, align 16 %a1099 = alloca %S.ast.Node, align 16 %a1138 = alloca { ptr, i64, i64 }, align 16 %a1139 = alloca { ptr, i64, i64 }, align 16 %a1152 = alloca i64, align 16 %a1165 = alloca %S.gen.Template, align 16 %a1166 = alloca %S.gen.Template, align 16 %a1168 = alloca %S.gen.Template, align 16 %a1196 = alloca %S.ast.Node, align 16 %a1197 = alloca %S.ast.Node, align 16 %a1199 = alloca %S.ast.Node, align 16 %a1229 = alloca { ptr, i64, i64 }, align 16 %a1230 = alloca { ptr, i64, i64 }, align 16 %a1243 = alloca i64, align 16 %a1283 = alloca %S.ast.Node, align 16 %a1284 = alloca %S.ast.Node, align 16 %a1286 = alloca %S.ast.Node, align 16 %a1298 = alloca %S.ast.Node, align 16 %a1299 = alloca %S.ast.Node, align 16 %a1301 = alloca %S.ast.Node, align 16 %a1314 = alloca i64, align 16 %a1334 = alloca %S.ast.Type, align 16 %a1335 = alloca %S.ast.Type, align 16 %a1337 = alloca %S.ast.Type, align 16 store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = icmp eq ptr %t2, null br i1 %t3, label %panic3209, label %ok3210 panic3209: call void @finch_panic(ptr @.str.2067, i64 1296, ptr @.str.2068) unreachable ok3210: %t4 = getelementptr inbounds %S.gen.Gen, ptr %t2, i32 0, i32 0 %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i32 0, i32 1 %t6 = load i64, ptr %t5 store i64 0, ptr %a7 br label %for.cond3211 for.cond3211: %t8 = load i64, ptr %a7 %t9 = icmp slt i64 %t8, %t6 br i1 %t9, label %for.body3212, label %for.end3214 for.body3212: %t10 = load ptr, ptr %a1 %t11 = icmp eq ptr %t10, null br i1 %t11, label %panic3215, label %ok3216 panic3215: call void @finch_panic(ptr @.str.2069, i64 1297, ptr @.str.2070) unreachable ok3216: %t12 = getelementptr inbounds %S.gen.Gen, ptr %t10, i32 0, i32 0 %t13 = load i64, ptr %a7 %t14 = load { ptr, i64, i64 }, ptr %t12 %t15 = extractvalue { ptr, i64, i64 } %t14, 1 %t16 = icmp uge i64 %t13, %t15 br i1 %t16, label %range3217, label %inrange3218 range3217: call void @finch_panic_index(ptr @.str.2071, i64 1297, i64 %t13, i64 %t15) unreachable inrange3218: %t17 = extractvalue { ptr, i64, i64 } %t14, 0 %t18 = getelementptr inbounds %S.ast.Program, ptr %t17, i64 %t13 %t19 = getelementptr inbounds %S.ast.Program, ptr %t18, i32 0, i32 0 %t20 = load { ptr, i64, i64 }, ptr %t19 %t21 = load ptr, ptr %a1 %t22 = icmp eq ptr %t21, null br i1 %t22, label %panic3219, label %ok3220 panic3219: call void @finch_panic(ptr @.str.2072, i64 1297, ptr @.str.2073) unreachable ok3220: %t23 = getelementptr inbounds %S.gen.Gen, ptr %t21, i32 0, i32 13 store { ptr, i64, i64 } %t20, ptr %a24 call void @finch_str_copy(ptr %a25, ptr %a24) %t26 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t26, ptr %t23 %t27 = load ptr, ptr %a1 %t28 = icmp eq ptr %t27, null br i1 %t28, label %panic3221, label %ok3222 panic3221: call void @finch_panic(ptr @.str.2074, i64 1298, ptr @.str.2075) unreachable ok3222: %t29 = getelementptr inbounds %S.gen.Gen, ptr %t27, i32 0, i32 0 %t30 = load i64, ptr %a7 %t31 = load { ptr, i64, i64 }, ptr %t29 %t32 = extractvalue { ptr, i64, i64 } %t31, 1 %t33 = icmp uge i64 %t30, %t32 br i1 %t33, label %range3223, label %inrange3224 range3223: call void @finch_panic_index(ptr @.str.2076, i64 1298, i64 %t30, i64 %t32) unreachable inrange3224: %t34 = extractvalue { ptr, i64, i64 } %t31, 0 %t35 = getelementptr inbounds %S.ast.Program, ptr %t34, i64 %t30 %t36 = getelementptr inbounds %S.ast.Program, ptr %t35, i32 0, i32 6 %t37 = getelementptr inbounds { ptr, i64, i64 }, ptr %t36, i32 0, i32 1 %t38 = load i64, ptr %t37 store i64 0, ptr %a39 br label %for.cond3225 for.cond3225: %t40 = load i64, ptr %a39 %t41 = icmp slt i64 %t40, %t38 br i1 %t41, label %for.body3226, label %for.end3228 for.body3226: %t42 = load ptr, ptr %a1 %t43 = icmp eq ptr %t42, null br i1 %t43, label %panic3229, label %ok3230 panic3229: call void @finch_panic(ptr @.str.2077, i64 1299, ptr @.str.2078) unreachable ok3230: %t44 = getelementptr inbounds %S.gen.Gen, ptr %t42, i32 0, i32 0 %t45 = load i64, ptr %a7 %t46 = load { ptr, i64, i64 }, ptr %t44 %t47 = extractvalue { ptr, i64, i64 } %t46, 1 %t48 = icmp uge i64 %t45, %t47 br i1 %t48, label %range3231, label %inrange3232 range3231: call void @finch_panic_index(ptr @.str.2079, i64 1299, i64 %t45, i64 %t47) unreachable inrange3232: %t49 = extractvalue { ptr, i64, i64 } %t46, 0 %t50 = getelementptr inbounds %S.ast.Program, ptr %t49, i64 %t45 %t51 = getelementptr inbounds %S.ast.Program, ptr %t50, i32 0, i32 6 %t52 = load i64, ptr %a39 %t53 = load { ptr, i64, i64 }, ptr %t51 %t54 = extractvalue { ptr, i64, i64 } %t53, 1 %t55 = icmp uge i64 %t52, %t54 br i1 %t55, label %range3233, label %inrange3234 range3233: call void @finch_panic_index(ptr @.str.2080, i64 1299, i64 %t52, i64 %t54) unreachable inrange3234: %t56 = extractvalue { ptr, i64, i64 } %t53, 0 %t57 = getelementptr inbounds %S.ast.Node, ptr %t56, i64 %t52 %t58 = load %S.ast.Node, ptr %t57 store %S.ast.Node %t58, ptr %a59 call void @finch.copy.S_ast_Node(ptr %a60, ptr %a59) %t61 = load %S.ast.Node, ptr %a60 store %S.ast.Node %t61, ptr %a62 %t63 = load ptr, ptr %a1 %t64 = load ptr, ptr %a1 %t65 = icmp eq ptr %t64, null br i1 %t65, label %panic3235, label %ok3236 panic3235: call void @finch_panic(ptr @.str.2081, i64 1300, ptr @.str.2082) unreachable ok3236: %t66 = getelementptr inbounds %S.gen.Gen, ptr %t64, i32 0, i32 13 %t67 = load { ptr, i64, i64 }, ptr %t66 %t68 = getelementptr inbounds %S.ast.Node, ptr %a62, i32 0, i32 1 %t69 = load { ptr, i64, i64 }, ptr %t68 %t70 = call i64 @finch.gen.findStruct(ptr %t63, { ptr, i64, i64 } %t67, { ptr, i64, i64 } %t69) %t71 = icmp sge i64 %t70, 0 br label %logic.from3237 logic.from3237: br i1 %t71, label %logic.end3239, label %logic.rhs3238 logic.rhs3238: %t72 = load ptr, ptr %a1 %t73 = load ptr, ptr %a1 %t74 = icmp eq ptr %t73, null br i1 %t74, label %panic3240, label %ok3241 panic3240: call void @finch_panic(ptr @.str.2083, i64 1300, ptr @.str.2084) unreachable ok3241: %t75 = getelementptr inbounds %S.gen.Gen, ptr %t73, i32 0, i32 13 %t76 = load { ptr, i64, i64 }, ptr %t75 %t77 = getelementptr inbounds %S.ast.Node, ptr %a62, i32 0, i32 1 %t78 = load { ptr, i64, i64 }, ptr %t77 %t79 = call i64 @finch.gen.findTemplate(ptr %t72, { ptr, i64, i64 } %t76, { ptr, i64, i64 } %t78, { ptr, i64, i64 } { ptr @.str.2085, i64 0, i64 0 }, i1 true) %t80 = icmp sge i64 %t79, 0 br label %logic.rend3242 logic.rend3242: br label %logic.end3239 logic.end3239: %t81 = phi i1 [ true, %logic.from3237 ], [ %t80, %logic.rend3242 ] br i1 %t81, label %then3243, label %endif3245 then3243: %t82 = load ptr, ptr %a1 %t83 = load %S.ast.Node, ptr %a62 %t84 = getelementptr inbounds %S.ast.Node, ptr %a62, i32 0, i32 1 %t85 = load { ptr, i64, i64 }, ptr %t84 store { ptr, i64, i64 } { ptr @.str.2086, i64 12, i64 0 }, ptr %a87 store { ptr, i64, i64 } %t85, ptr %a88 call void @finch_str_concat(ptr %a86, ptr %a87, ptr %a88) %t89 = load { ptr, i64, i64 }, ptr %a86 store { ptr, i64, i64 } %t89, ptr %a91 store { ptr, i64, i64 } { ptr @.str.2087, i64 18, i64 0 }, ptr %a92 call void @finch_str_concat(ptr %a90, ptr %a91, ptr %a92) %t93 = load { ptr, i64, i64 }, ptr %a90 call void @finch.gen.fail(ptr %t82, %S.ast.Node %t83, { ptr, i64, i64 } %t93) br label %endif3245 endif3245: %t94 = getelementptr inbounds %S.ast.Node, ptr %a62, i32 0, i32 3 %t95 = getelementptr inbounds { ptr, i64, i64 }, ptr %t94, i32 0, i32 1 %t96 = load i64, ptr %t95 %t97 = icmp sgt i64 %t96, 0 br i1 %t97, label %then3246, label %endif3248 then3246: %t98 = load ptr, ptr %a1 %t99 = icmp eq ptr %t98, null br i1 %t99, label %panic3249, label %ok3250 panic3249: call void @finch_panic(ptr @.str.2088, i64 1305, ptr @.str.2089) unreachable ok3250: %t100 = getelementptr inbounds %S.gen.Gen, ptr %t98, i32 0, i32 16 %t101 = getelementptr inbounds { ptr, i64, i64 }, ptr %t100, i32 0, i32 1 %t102 = load ptr, ptr %a1 %t103 = icmp eq ptr %t102, null br i1 %t103, label %panic3251, label %ok3252 panic3251: call void @finch_panic(ptr @.str.2090, i64 1305, ptr @.str.2091) unreachable ok3252: %t104 = getelementptr inbounds %S.gen.Gen, ptr %t102, i32 0, i32 13 %t105 = load { ptr, i64, i64 }, ptr %t104 store { ptr, i64, i64 } %t105, ptr %a106 call void @finch_str_copy(ptr %a107, ptr %a106) %t108 = load { ptr, i64, i64 }, ptr %a107 %t109 = insertvalue %S.gen.Template zeroinitializer, { ptr, i64, i64 } %t108, 0 %t110 = getelementptr inbounds %S.ast.Node, ptr %a62, i32 0, i32 1 %t111 = load { ptr, i64, i64 }, ptr %t110 store { ptr, i64, i64 } %t111, ptr %a112 call void @finch_str_copy(ptr %a113, ptr %a112) %t114 = load { ptr, i64, i64 }, ptr %a113 %t115 = insertvalue %S.gen.Template %t109, { ptr, i64, i64 } %t114, 1 %t116 = getelementptr inbounds %S.ast.Node, ptr %a62, i32 0, i32 3 %t117 = load { ptr, i64, i64 }, ptr %t116 store { ptr, i64, i64 } %t117, ptr %a118 call void @finch.copy.arr_str(ptr %a119, ptr %a118) %t120 = load { ptr, i64, i64 }, ptr %a119 %t121 = insertvalue %S.gen.Template %t115, { ptr, i64, i64 } %t120, 3 %t122 = load i64, ptr %a7 %t123 = insertvalue %S.gen.Template %t121, i64 %t122, 4 %t124 = load i64, ptr %a39 %t125 = insertvalue %S.gen.Template %t123, i64 %t124, 5 %t126 = insertvalue %S.gen.Template %t125, i1 true, 6 %t127 = load i64, ptr %t101 %t128 = add i64 %t127, 1 call void @finch_arr_reserve(ptr %t100, i64 %t128, i64 ptrtoint (ptr getelementptr (%S.gen.Template, ptr null, i32 1) to i64)) %t129 = load ptr, ptr %t100 %t130 = getelementptr inbounds %S.gen.Template, ptr %t129, i64 %t127 store %S.gen.Template %t126, ptr %t130 store i64 %t128, ptr %t101 br label %for.step3227 endif3248: %t131 = load ptr, ptr %a1 %t132 = icmp eq ptr %t131, null br i1 %t132, label %panic3253, label %ok3254 panic3253: call void @finch_panic(ptr @.str.2092, i64 1308, ptr @.str.2093) unreachable ok3254: %t133 = getelementptr inbounds %S.gen.Gen, ptr %t131, i32 0, i32 15 %t134 = getelementptr inbounds { ptr, i64, i64 }, ptr %t133, i32 0, i32 1 %t135 = load ptr, ptr %a1 %t136 = icmp eq ptr %t135, null br i1 %t136, label %panic3255, label %ok3256 panic3255: call void @finch_panic(ptr @.str.2094, i64 1308, ptr @.str.2095) unreachable ok3256: %t137 = getelementptr inbounds %S.gen.Gen, ptr %t135, i32 0, i32 13 %t138 = load { ptr, i64, i64 }, ptr %t137 store { ptr, i64, i64 } %t138, ptr %a139 call void @finch_str_copy(ptr %a140, ptr %a139) %t141 = load { ptr, i64, i64 }, ptr %a140 %t142 = insertvalue %S.gen.StructDef zeroinitializer, { ptr, i64, i64 } %t141, 0 %t143 = getelementptr inbounds %S.ast.Node, ptr %a62, i32 0, i32 1 %t144 = load { ptr, i64, i64 }, ptr %t143 store { ptr, i64, i64 } %t144, ptr %a145 call void @finch_str_copy(ptr %a146, ptr %a145) %t147 = load { ptr, i64, i64 }, ptr %a146 %t148 = insertvalue %S.gen.StructDef %t142, { ptr, i64, i64 } %t147, 1 %t149 = load i64, ptr %a7 %t150 = insertvalue %S.gen.StructDef %t148, i64 %t149, 13 %t151 = load i64, ptr %a39 %t152 = insertvalue %S.gen.StructDef %t150, i64 %t151, 14 %t153 = load i64, ptr %t134 %t154 = add i64 %t153, 1 call void @finch_arr_reserve(ptr %t133, i64 %t154, i64 ptrtoint (ptr getelementptr (%S.gen.StructDef, ptr null, i32 1) to i64)) %t155 = load ptr, ptr %t133 %t156 = getelementptr inbounds %S.gen.StructDef, ptr %t155, i64 %t153 store %S.gen.StructDef %t152, ptr %t156 store i64 %t154, ptr %t134 br label %for.step3227 for.step3227: %t157 = load i64, ptr %a39 %t158 = add i64 %t157, 1 store i64 %t158, ptr %a39 br label %for.cond3225 for.end3228: br label %for.step3213 for.step3213: %t159 = load i64, ptr %a7 %t160 = add i64 %t159, 1 store i64 %t160, ptr %a7 br label %for.cond3211 for.end3214: %t161 = load ptr, ptr %a1 %t162 = icmp eq ptr %t161, null br i1 %t162, label %panic3257, label %ok3258 panic3257: call void @finch_panic(ptr @.str.2096, i64 1311, ptr @.str.2097) unreachable ok3258: %t163 = getelementptr inbounds %S.gen.Gen, ptr %t161, i32 0, i32 0 %t164 = getelementptr inbounds { ptr, i64, i64 }, ptr %t163, i32 0, i32 1 %t165 = load i64, ptr %t164 store i64 0, ptr %a166 br label %for.cond3259 for.cond3259: %t167 = load i64, ptr %a166 %t168 = icmp slt i64 %t167, %t165 br i1 %t168, label %for.body3260, label %for.end3262 for.body3260: %t169 = load ptr, ptr %a1 %t170 = icmp eq ptr %t169, null br i1 %t170, label %panic3263, label %ok3264 panic3263: call void @finch_panic(ptr @.str.2098, i64 1312, ptr @.str.2099) unreachable ok3264: %t171 = getelementptr inbounds %S.gen.Gen, ptr %t169, i32 0, i32 0 %t172 = load i64, ptr %a166 %t173 = load { ptr, i64, i64 }, ptr %t171 %t174 = extractvalue { ptr, i64, i64 } %t173, 1 %t175 = icmp uge i64 %t172, %t174 br i1 %t175, label %range3265, label %inrange3266 range3265: call void @finch_panic_index(ptr @.str.2100, i64 1312, i64 %t172, i64 %t174) unreachable inrange3266: %t176 = extractvalue { ptr, i64, i64 } %t173, 0 %t177 = getelementptr inbounds %S.ast.Program, ptr %t176, i64 %t172 %t178 = getelementptr inbounds %S.ast.Program, ptr %t177, i32 0, i32 0 %t179 = load { ptr, i64, i64 }, ptr %t178 %t180 = load ptr, ptr %a1 %t181 = icmp eq ptr %t180, null br i1 %t181, label %panic3267, label %ok3268 panic3267: call void @finch_panic(ptr @.str.2101, i64 1312, ptr @.str.2102) unreachable ok3268: %t182 = getelementptr inbounds %S.gen.Gen, ptr %t180, i32 0, i32 13 store { ptr, i64, i64 } %t179, ptr %a183 call void @finch_str_copy(ptr %a184, ptr %a183) %t185 = load { ptr, i64, i64 }, ptr %a184 store { ptr, i64, i64 } %t185, ptr %t182 %t186 = load ptr, ptr %a1 %t187 = icmp eq ptr %t186, null br i1 %t187, label %panic3269, label %ok3270 panic3269: call void @finch_panic(ptr @.str.2103, i64 1313, ptr @.str.2104) unreachable ok3270: %t188 = getelementptr inbounds %S.gen.Gen, ptr %t186, i32 0, i32 0 %t189 = load i64, ptr %a166 %t190 = load { ptr, i64, i64 }, ptr %t188 %t191 = extractvalue { ptr, i64, i64 } %t190, 1 %t192 = icmp uge i64 %t189, %t191 br i1 %t192, label %range3271, label %inrange3272 range3271: call void @finch_panic_index(ptr @.str.2105, i64 1313, i64 %t189, i64 %t191) unreachable inrange3272: %t193 = extractvalue { ptr, i64, i64 } %t190, 0 %t194 = getelementptr inbounds %S.ast.Program, ptr %t193, i64 %t189 %t195 = getelementptr inbounds %S.ast.Program, ptr %t194, i32 0, i32 7 %t196 = getelementptr inbounds { ptr, i64, i64 }, ptr %t195, i32 0, i32 1 %t197 = load i64, ptr %t196 store i64 0, ptr %a198 br label %for.cond3273 for.cond3273: %t199 = load i64, ptr %a198 %t200 = icmp slt i64 %t199, %t197 br i1 %t200, label %for.body3274, label %for.end3276 for.body3274: %t201 = load ptr, ptr %a1 %t202 = icmp eq ptr %t201, null br i1 %t202, label %panic3277, label %ok3278 panic3277: call void @finch_panic(ptr @.str.2106, i64 1314, ptr @.str.2107) unreachable ok3278: %t203 = getelementptr inbounds %S.gen.Gen, ptr %t201, i32 0, i32 0 %t204 = load i64, ptr %a166 %t205 = load { ptr, i64, i64 }, ptr %t203 %t206 = extractvalue { ptr, i64, i64 } %t205, 1 %t207 = icmp uge i64 %t204, %t206 br i1 %t207, label %range3279, label %inrange3280 range3279: call void @finch_panic_index(ptr @.str.2108, i64 1314, i64 %t204, i64 %t206) unreachable inrange3280: %t208 = extractvalue { ptr, i64, i64 } %t205, 0 %t209 = getelementptr inbounds %S.ast.Program, ptr %t208, i64 %t204 %t210 = getelementptr inbounds %S.ast.Program, ptr %t209, i32 0, i32 7 %t211 = load i64, ptr %a198 %t212 = load { ptr, i64, i64 }, ptr %t210 %t213 = extractvalue { ptr, i64, i64 } %t212, 1 %t214 = icmp uge i64 %t211, %t213 br i1 %t214, label %range3281, label %inrange3282 range3281: call void @finch_panic_index(ptr @.str.2109, i64 1314, i64 %t211, i64 %t213) unreachable inrange3282: %t215 = extractvalue { ptr, i64, i64 } %t212, 0 %t216 = getelementptr inbounds %S.ast.Node, ptr %t215, i64 %t211 %t217 = load %S.ast.Node, ptr %t216 store %S.ast.Node %t217, ptr %a218 call void @finch.copy.S_ast_Node(ptr %a219, ptr %a218) %t220 = load %S.ast.Node, ptr %a219 store %S.ast.Node %t220, ptr %a221 %t222 = load ptr, ptr %a1 %t223 = load ptr, ptr %a1 %t224 = icmp eq ptr %t223, null br i1 %t224, label %panic3283, label %ok3284 panic3283: call void @finch_panic(ptr @.str.2110, i64 1315, ptr @.str.2111) unreachable ok3284: %t225 = getelementptr inbounds %S.gen.Gen, ptr %t223, i32 0, i32 13 %t226 = load { ptr, i64, i64 }, ptr %t225 %t227 = getelementptr inbounds %S.ast.Node, ptr %a221, i32 0, i32 1 %t228 = load { ptr, i64, i64 }, ptr %t227 %t229 = call i64 @finch.gen.findEnum(ptr %t222, { ptr, i64, i64 } %t226, { ptr, i64, i64 } %t228) %t230 = icmp sge i64 %t229, 0 br label %logic.from3285 logic.from3285: br i1 %t230, label %logic.end3287, label %logic.rhs3286 logic.rhs3286: %t231 = load ptr, ptr %a1 %t232 = load ptr, ptr %a1 %t233 = icmp eq ptr %t232, null br i1 %t233, label %panic3288, label %ok3289 panic3288: call void @finch_panic(ptr @.str.2112, i64 1315, ptr @.str.2113) unreachable ok3289: %t234 = getelementptr inbounds %S.gen.Gen, ptr %t232, i32 0, i32 13 %t235 = load { ptr, i64, i64 }, ptr %t234 %t236 = getelementptr inbounds %S.ast.Node, ptr %a221, i32 0, i32 1 %t237 = load { ptr, i64, i64 }, ptr %t236 %t238 = call i64 @finch.gen.findStruct(ptr %t231, { ptr, i64, i64 } %t235, { ptr, i64, i64 } %t237) %t239 = icmp sge i64 %t238, 0 br label %logic.rend3290 logic.rend3290: br label %logic.end3287 logic.end3287: %t240 = phi i1 [ true, %logic.from3285 ], [ %t239, %logic.rend3290 ] br i1 %t240, label %then3291, label %endif3293 then3291: %t241 = load ptr, ptr %a1 %t242 = load %S.ast.Node, ptr %a221 %t243 = getelementptr inbounds %S.ast.Node, ptr %a221, i32 0, i32 1 %t244 = load { ptr, i64, i64 }, ptr %t243 store { ptr, i64, i64 } { ptr @.str.2114, i64 1, i64 0 }, ptr %a246 store { ptr, i64, i64 } %t244, ptr %a247 call void @finch_str_concat(ptr %a245, ptr %a246, ptr %a247) %t248 = load { ptr, i64, i64 }, ptr %a245 store { ptr, i64, i64 } %t248, ptr %a250 store { ptr, i64, i64 } { ptr @.str.2115, i64 18, i64 0 }, ptr %a251 call void @finch_str_concat(ptr %a249, ptr %a250, ptr %a251) %t252 = load { ptr, i64, i64 }, ptr %a249 call void @finch.gen.fail(ptr %t241, %S.ast.Node %t242, { ptr, i64, i64 } %t252) br label %endif3293 endif3293: %t253 = load ptr, ptr %a1 %t254 = icmp eq ptr %t253, null br i1 %t254, label %panic3294, label %ok3295 panic3294: call void @finch_panic(ptr @.str.2116, i64 1318, ptr @.str.2117) unreachable ok3295: %t255 = getelementptr inbounds %S.gen.Gen, ptr %t253, i32 0, i32 13 %t256 = load { ptr, i64, i64 }, ptr %t255 store { ptr, i64, i64 } %t256, ptr %a257 call void @finch_str_copy(ptr %a258, ptr %a257) %t259 = load { ptr, i64, i64 }, ptr %a258 %t260 = insertvalue %S.gen.EnumDef zeroinitializer, { ptr, i64, i64 } %t259, 0 %t261 = getelementptr inbounds %S.ast.Node, ptr %a221, i32 0, i32 1 %t262 = load { ptr, i64, i64 }, ptr %t261 store { ptr, i64, i64 } %t262, ptr %a263 call void @finch_str_copy(ptr %a264, ptr %a263) %t265 = load { ptr, i64, i64 }, ptr %a264 %t266 = insertvalue %S.gen.EnumDef %t260, { ptr, i64, i64 } %t265, 1 store %S.gen.EnumDef %t266, ptr %a267 store i64 0, ptr %a268 %t269 = getelementptr inbounds %S.ast.Node, ptr %a221, i32 0, i32 9 store i64 0, ptr %a270 br label %each.cond3296 each.cond3296: %t271 = getelementptr inbounds { ptr, i64, i64 }, ptr %t269, i32 0, i32 1 %t272 = load i64, ptr %t271 %t273 = load i64, ptr %a270 %t274 = icmp slt i64 %t273, %t272 br i1 %t274, label %each.body3297, label %each.end3299 each.body3297: %t275 = load ptr, ptr %t269 %t276 = getelementptr inbounds %S.ast.Node, ptr %t275, i64 %t273 %t277 = load %S.ast.Node, ptr %t276 store %S.ast.Node %t277, ptr %a278 %t279 = getelementptr inbounds %S.ast.Node, ptr %a278, i32 0, i32 4 %t280 = getelementptr inbounds { ptr, i64, i64 }, ptr %t279, i32 0, i32 1 %t281 = load i64, ptr %t280 %t282 = icmp sgt i64 %t281, 0 br i1 %t282, label %then3300, label %endif3302 then3300: %t283 = getelementptr inbounds %S.ast.Node, ptr %a278, i32 0, i32 4 %t284 = load { ptr, i64, i64 }, ptr %t283 store { ptr, i64, i64 } %t284, ptr %a285 %t286 = call i64 @finch_str_to_int(ptr %a285, ptr @.str.2118, i64 1322) store i64 %t286, ptr %a268 br label %endif3302 endif3302: %t287 = getelementptr inbounds %S.gen.EnumDef, ptr %a267, i32 0, i32 2 %t288 = getelementptr inbounds { ptr, i64, i64 }, ptr %t287, i32 0, i32 1 %t289 = getelementptr inbounds %S.ast.Node, ptr %a278, i32 0, i32 1 %t290 = load { ptr, i64, i64 }, ptr %t289 store i64 -1, ptr %a291 %t292 = load i64, ptr %t288 %t293 = load ptr, ptr %t287 store i64 0, ptr %a294 br label %find.cond3303 find.cond3303: %t295 = load i64, ptr %a294 %t296 = icmp slt i64 %t295, %t292 br i1 %t296, label %find.body3304, label %find.end3307 find.body3304: %t297 = getelementptr inbounds { ptr, i64, i64 }, ptr %t293, i64 %t295 %t298 = load { ptr, i64, i64 }, ptr %t297 store { ptr, i64, i64 } %t298, ptr %a299 store { ptr, i64, i64 } %t290, ptr %a300 %t301 = call i32 @finch_str_eq(ptr %a299, ptr %a300) %t302 = icmp ne i32 %t301, 0 br i1 %t302, label %find.hit3305, label %find.next3306 find.hit3305: store i64 %t295, ptr %a291 br label %find.end3307 find.next3306: %t303 = add i64 %t295, 1 store i64 %t303, ptr %a294 br label %find.cond3303 find.end3307: %t304 = load i64, ptr %a291 %t305 = icmp sge i64 %t304, 0 br i1 %t305, label %then3308, label %endif3310 then3308: %t306 = load ptr, ptr %a1 %t307 = load %S.ast.Node, ptr %a278 %t308 = getelementptr inbounds %S.ast.Node, ptr %a221, i32 0, i32 1 %t309 = load { ptr, i64, i64 }, ptr %t308 store { ptr, i64, i64 } { ptr @.str.2119, i64 9, i64 0 }, ptr %a311 store { ptr, i64, i64 } %t309, ptr %a312 call void @finch_str_concat(ptr %a310, ptr %a311, ptr %a312) %t313 = load { ptr, i64, i64 }, ptr %a310 store { ptr, i64, i64 } %t313, ptr %a315 store { ptr, i64, i64 } { ptr @.str.2120, i64 17, i64 0 }, ptr %a316 call void @finch_str_concat(ptr %a314, ptr %a315, ptr %a316) %t317 = load { ptr, i64, i64 }, ptr %a314 %t318 = getelementptr inbounds %S.ast.Node, ptr %a278, i32 0, i32 1 %t319 = load { ptr, i64, i64 }, ptr %t318 store { ptr, i64, i64 } %t317, ptr %a321 store { ptr, i64, i64 } %t319, ptr %a322 call void @finch_str_concat(ptr %a320, ptr %a321, ptr %a322) %t323 = load { ptr, i64, i64 }, ptr %a320 store { ptr, i64, i64 } %t323, ptr %a325 store { ptr, i64, i64 } { ptr @.str.2121, i64 6, i64 0 }, ptr %a326 call void @finch_str_concat(ptr %a324, ptr %a325, ptr %a326) %t327 = load { ptr, i64, i64 }, ptr %a324 call void @finch.gen.fail(ptr %t306, %S.ast.Node %t307, { ptr, i64, i64 } %t327) br label %endif3310 endif3310: %t328 = getelementptr inbounds %S.gen.EnumDef, ptr %a267, i32 0, i32 3 %t329 = getelementptr inbounds { ptr, i64, i64 }, ptr %t328, i32 0, i32 1 %t330 = load i64, ptr %a268 store i64 -1, ptr %a331 %t332 = load i64, ptr %t329 %t333 = load ptr, ptr %t328 store i64 0, ptr %a334 br label %find.cond3311 find.cond3311: %t335 = load i64, ptr %a334 %t336 = icmp slt i64 %t335, %t332 br i1 %t336, label %find.body3312, label %find.end3315 find.body3312: %t337 = getelementptr inbounds i64, ptr %t333, i64 %t335 %t338 = load i64, ptr %t337 %t339 = icmp eq i64 %t338, %t330 br i1 %t339, label %find.hit3313, label %find.next3314 find.hit3313: store i64 %t335, ptr %a331 br label %find.end3315 find.next3314: %t340 = add i64 %t335, 1 store i64 %t340, ptr %a334 br label %find.cond3311 find.end3315: %t341 = load i64, ptr %a331 %t342 = icmp sge i64 %t341, 0 br i1 %t342, label %then3316, label %endif3318 then3316: %t343 = load ptr, ptr %a1 %t344 = load %S.ast.Node, ptr %a278 %t345 = getelementptr inbounds %S.ast.Node, ptr %a221, i32 0, i32 1 %t346 = load { ptr, i64, i64 }, ptr %t345 store { ptr, i64, i64 } { ptr @.str.2122, i64 16, i64 0 }, ptr %a348 store { ptr, i64, i64 } %t346, ptr %a349 call void @finch_str_concat(ptr %a347, ptr %a348, ptr %a349) %t350 = load { ptr, i64, i64 }, ptr %a347 store { ptr, i64, i64 } %t350, ptr %a352 store { ptr, i64, i64 } { ptr @.str.2123, i64 17, i64 0 }, ptr %a353 call void @finch_str_concat(ptr %a351, ptr %a352, ptr %a353) %t354 = load { ptr, i64, i64 }, ptr %a351 %t355 = load i64, ptr %a268 call void @finch_str_from_int(ptr %a356, i64 %t355) %t357 = load { ptr, i64, i64 }, ptr %a356 store { ptr, i64, i64 } %t354, ptr %a359 store { ptr, i64, i64 } %t357, ptr %a360 call void @finch_str_concat(ptr %a358, ptr %a359, ptr %a360) %t361 = load { ptr, i64, i64 }, ptr %a358 store { ptr, i64, i64 } %t361, ptr %a363 store { ptr, i64, i64 } { ptr @.str.2124, i64 20, i64 0 }, ptr %a364 call void @finch_str_concat(ptr %a362, ptr %a363, ptr %a364) %t365 = load { ptr, i64, i64 }, ptr %a362 call void @finch.gen.fail(ptr %t343, %S.ast.Node %t344, { ptr, i64, i64 } %t365) br label %endif3318 endif3318: %t366 = getelementptr inbounds %S.gen.EnumDef, ptr %a267, i32 0, i32 2 %t367 = getelementptr inbounds { ptr, i64, i64 }, ptr %t366, i32 0, i32 1 %t368 = getelementptr inbounds %S.ast.Node, ptr %a278, i32 0, i32 1 %t369 = load { ptr, i64, i64 }, ptr %t368 store { ptr, i64, i64 } %t369, ptr %a370 call void @finch_str_copy(ptr %a371, ptr %a370) %t372 = load { ptr, i64, i64 }, ptr %a371 %t373 = load i64, ptr %t367 %t374 = add i64 %t373, 1 call void @finch_arr_reserve(ptr %t366, i64 %t374, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t375 = load ptr, ptr %t366 %t376 = getelementptr inbounds { ptr, i64, i64 }, ptr %t375, i64 %t373 store { ptr, i64, i64 } %t372, ptr %t376 store i64 %t374, ptr %t367 %t377 = getelementptr inbounds %S.gen.EnumDef, ptr %a267, i32 0, i32 3 %t378 = getelementptr inbounds { ptr, i64, i64 }, ptr %t377, i32 0, i32 1 %t379 = load i64, ptr %a268 %t380 = load i64, ptr %t378 %t381 = add i64 %t380, 1 call void @finch_arr_reserve(ptr %t377, i64 %t381, i64 ptrtoint (ptr getelementptr (i64, ptr null, i32 1) to i64)) %t382 = load ptr, ptr %t377 %t383 = getelementptr inbounds i64, ptr %t382, i64 %t380 store i64 %t379, ptr %t383 store i64 %t381, ptr %t378 %t384 = load i64, ptr %a268 %t385 = add i64 %t384, 1 store i64 %t385, ptr %a268 br label %each.step3298 each.step3298: %t386 = load i64, ptr %a270 %t387 = add i64 %t386, 1 store i64 %t387, ptr %a270 br label %each.cond3296 each.end3299: %t388 = load ptr, ptr %a1 %t389 = icmp eq ptr %t388, null br i1 %t389, label %panic3319, label %ok3320 panic3319: call void @finch_panic(ptr @.str.2125, i64 1334, ptr @.str.2126) unreachable ok3320: %t390 = getelementptr inbounds %S.gen.Gen, ptr %t388, i32 0, i32 20 %t391 = getelementptr inbounds { ptr, i64, i64 }, ptr %t390, i32 0, i32 1 %t392 = load %S.gen.EnumDef, ptr %a267 store %S.gen.EnumDef %t392, ptr %a393 call void @finch.copy.S_gen_EnumDef(ptr %a394, ptr %a393) %t395 = load %S.gen.EnumDef, ptr %a394 %t396 = load i64, ptr %t391 %t397 = add i64 %t396, 1 call void @finch_arr_reserve(ptr %t390, i64 %t397, i64 ptrtoint (ptr getelementptr (%S.gen.EnumDef, ptr null, i32 1) to i64)) %t398 = load ptr, ptr %t390 %t399 = getelementptr inbounds %S.gen.EnumDef, ptr %t398, i64 %t396 store %S.gen.EnumDef %t395, ptr %t399 store i64 %t397, ptr %t391 br label %for.step3275 for.step3275: %t400 = load i64, ptr %a198 %t401 = add i64 %t400, 1 store i64 %t401, ptr %a198 br label %for.cond3273 for.end3276: br label %for.step3261 for.step3261: %t402 = load i64, ptr %a166 %t403 = add i64 %t402, 1 store i64 %t403, ptr %a166 br label %for.cond3259 for.end3262: %t404 = load ptr, ptr %a1 %t405 = icmp eq ptr %t404, null br i1 %t405, label %panic3321, label %ok3322 panic3321: call void @finch_panic(ptr @.str.2127, i64 1337, ptr @.str.2128) unreachable ok3322: %t406 = getelementptr inbounds %S.gen.Gen, ptr %t404, i32 0, i32 24 %t407 = getelementptr inbounds %S.cimport.CImports, ptr %t406, i32 0, i32 4 %t408 = getelementptr inbounds { ptr, i64, i64 }, ptr %t407, i32 0, i32 1 %t409 = load i64, ptr %t408 store i64 0, ptr %a410 br label %for.cond3323 for.cond3323: %t411 = load i64, ptr %a410 %t412 = icmp slt i64 %t411, %t409 br i1 %t412, label %for.body3324, label %for.end3326 for.body3324: %t413 = load ptr, ptr %a1 %t414 = icmp eq ptr %t413, null br i1 %t414, label %panic3327, label %ok3328 panic3327: call void @finch_panic(ptr @.str.2129, i64 1338, ptr @.str.2130) unreachable ok3328: %t415 = getelementptr inbounds %S.gen.Gen, ptr %t413, i32 0, i32 15 %t416 = getelementptr inbounds { ptr, i64, i64 }, ptr %t415, i32 0, i32 1 %t417 = insertvalue %S.gen.StructDef zeroinitializer, { ptr, i64, i64 } { ptr @.str.2131, i64 1, i64 0 }, 0 %t418 = load ptr, ptr %a1 %t419 = icmp eq ptr %t418, null br i1 %t419, label %panic3329, label %ok3330 panic3329: call void @finch_panic(ptr @.str.2132, i64 1338, ptr @.str.2133) unreachable ok3330: %t420 = getelementptr inbounds %S.gen.Gen, ptr %t418, i32 0, i32 24 %t421 = getelementptr inbounds %S.cimport.CImports, ptr %t420, i32 0, i32 4 %t422 = load i64, ptr %a410 %t423 = load { ptr, i64, i64 }, ptr %t421 %t424 = extractvalue { ptr, i64, i64 } %t423, 1 %t425 = icmp uge i64 %t422, %t424 br i1 %t425, label %range3331, label %inrange3332 range3331: call void @finch_panic_index(ptr @.str.2134, i64 1338, i64 %t422, i64 %t424) unreachable inrange3332: %t426 = extractvalue { ptr, i64, i64 } %t423, 0 %t427 = getelementptr inbounds { ptr, i64, i64 }, ptr %t426, i64 %t422 %t428 = load { ptr, i64, i64 }, ptr %t427 store { ptr, i64, i64 } %t428, ptr %a429 call void @finch_str_copy(ptr %a430, ptr %a429) %t431 = load { ptr, i64, i64 }, ptr %a430 %t432 = insertvalue %S.gen.StructDef %t417, { ptr, i64, i64 } %t431, 1 %t433 = insertvalue %S.gen.StructDef %t432, i1 true, 2 %t434 = insertvalue %S.gen.StructDef %t433, i64 -1, 13 %t435 = load i64, ptr %a410 %t436 = insertvalue %S.gen.StructDef %t434, i64 %t435, 14 %t437 = load i64, ptr %t416 %t438 = add i64 %t437, 1 call void @finch_arr_reserve(ptr %t415, i64 %t438, i64 ptrtoint (ptr getelementptr (%S.gen.StructDef, ptr null, i32 1) to i64)) %t439 = load ptr, ptr %t415 %t440 = getelementptr inbounds %S.gen.StructDef, ptr %t439, i64 %t437 store %S.gen.StructDef %t436, ptr %t440 store i64 %t438, ptr %t416 br label %for.step3325 for.step3325: %t441 = load i64, ptr %a410 %t442 = add i64 %t441, 1 store i64 %t442, ptr %a410 br label %for.cond3323 for.end3326: %t443 = load ptr, ptr %a1 %t444 = icmp eq ptr %t443, null br i1 %t444, label %panic3333, label %ok3334 panic3333: call void @finch_panic(ptr @.str.2135, i64 1340, ptr @.str.2136) unreachable ok3334: %t445 = getelementptr inbounds %S.gen.Gen, ptr %t443, i32 0, i32 15 %t446 = getelementptr inbounds { ptr, i64, i64 }, ptr %t445, i32 0, i32 1 %t447 = load i64, ptr %t446 store i64 0, ptr %a448 br label %for.cond3335 for.cond3335: %t449 = load i64, ptr %a448 %t450 = icmp slt i64 %t449, %t447 br i1 %t450, label %for.body3336, label %for.end3338 for.body3336: %t451 = load ptr, ptr %a1 %t452 = load i64, ptr %a448 call void @finch.gen.resolveStruct(ptr %t451, i64 %t452) br label %for.step3337 for.step3337: %t453 = load i64, ptr %a448 %t454 = add i64 %t453, 1 store i64 %t454, ptr %a448 br label %for.cond3335 for.end3338: %t455 = load ptr, ptr %a1 %t456 = icmp eq ptr %t455, null br i1 %t456, label %panic3339, label %ok3340 panic3339: call void @finch_panic(ptr @.str.2137, i64 1343, ptr @.str.2138) unreachable ok3340: %t457 = getelementptr inbounds %S.gen.Gen, ptr %t455, i32 0, i32 0 %t458 = getelementptr inbounds { ptr, i64, i64 }, ptr %t457, i32 0, i32 1 %t459 = load i64, ptr %t458 store i64 0, ptr %a460 br label %for.cond3341 for.cond3341: %t461 = load i64, ptr %a460 %t462 = icmp slt i64 %t461, %t459 br i1 %t462, label %for.body3342, label %for.end3344 for.body3342: %t463 = load ptr, ptr %a1 %t464 = icmp eq ptr %t463, null br i1 %t464, label %panic3345, label %ok3346 panic3345: call void @finch_panic(ptr @.str.2139, i64 1344, ptr @.str.2140) unreachable ok3346: %t465 = getelementptr inbounds %S.gen.Gen, ptr %t463, i32 0, i32 0 %t466 = load i64, ptr %a460 %t467 = load { ptr, i64, i64 }, ptr %t465 %t468 = extractvalue { ptr, i64, i64 } %t467, 1 %t469 = icmp uge i64 %t466, %t468 br i1 %t469, label %range3347, label %inrange3348 range3347: call void @finch_panic_index(ptr @.str.2141, i64 1344, i64 %t466, i64 %t468) unreachable inrange3348: %t470 = extractvalue { ptr, i64, i64 } %t467, 0 %t471 = getelementptr inbounds %S.ast.Program, ptr %t470, i64 %t466 %t472 = getelementptr inbounds %S.ast.Program, ptr %t471, i32 0, i32 0 %t473 = load { ptr, i64, i64 }, ptr %t472 %t474 = load ptr, ptr %a1 %t475 = icmp eq ptr %t474, null br i1 %t475, label %panic3349, label %ok3350 panic3349: call void @finch_panic(ptr @.str.2142, i64 1344, ptr @.str.2143) unreachable ok3350: %t476 = getelementptr inbounds %S.gen.Gen, ptr %t474, i32 0, i32 13 store { ptr, i64, i64 } %t473, ptr %a477 call void @finch_str_copy(ptr %a478, ptr %a477) %t479 = load { ptr, i64, i64 }, ptr %a478 store { ptr, i64, i64 } %t479, ptr %t476 %t480 = load ptr, ptr %a1 %t481 = icmp eq ptr %t480, null br i1 %t481, label %panic3351, label %ok3352 panic3351: call void @finch_panic(ptr @.str.2144, i64 1345, ptr @.str.2145) unreachable ok3352: %t482 = getelementptr inbounds %S.gen.Gen, ptr %t480, i32 0, i32 0 %t483 = load i64, ptr %a460 %t484 = load { ptr, i64, i64 }, ptr %t482 %t485 = extractvalue { ptr, i64, i64 } %t484, 1 %t486 = icmp uge i64 %t483, %t485 br i1 %t486, label %range3353, label %inrange3354 range3353: call void @finch_panic_index(ptr @.str.2146, i64 1345, i64 %t483, i64 %t485) unreachable inrange3354: %t487 = extractvalue { ptr, i64, i64 } %t484, 0 %t488 = getelementptr inbounds %S.ast.Program, ptr %t487, i64 %t483 %t489 = getelementptr inbounds %S.ast.Program, ptr %t488, i32 0, i32 8 %t490 = getelementptr inbounds { ptr, i64, i64 }, ptr %t489, i32 0, i32 1 %t491 = load i64, ptr %t490 store i64 0, ptr %a492 br label %for.cond3355 for.cond3355: %t493 = load i64, ptr %a492 %t494 = icmp slt i64 %t493, %t491 br i1 %t494, label %for.body3356, label %for.end3358 for.body3356: %t495 = load ptr, ptr %a1 %t496 = icmp eq ptr %t495, null br i1 %t496, label %panic3359, label %ok3360 panic3359: call void @finch_panic(ptr @.str.2147, i64 1346, ptr @.str.2148) unreachable ok3360: %t497 = getelementptr inbounds %S.gen.Gen, ptr %t495, i32 0, i32 0 %t498 = load i64, ptr %a460 %t499 = load { ptr, i64, i64 }, ptr %t497 %t500 = extractvalue { ptr, i64, i64 } %t499, 1 %t501 = icmp uge i64 %t498, %t500 br i1 %t501, label %range3361, label %inrange3362 range3361: call void @finch_panic_index(ptr @.str.2149, i64 1346, i64 %t498, i64 %t500) unreachable inrange3362: %t502 = extractvalue { ptr, i64, i64 } %t499, 0 %t503 = getelementptr inbounds %S.ast.Program, ptr %t502, i64 %t498 %t504 = getelementptr inbounds %S.ast.Program, ptr %t503, i32 0, i32 8 %t505 = load i64, ptr %a492 %t506 = load { ptr, i64, i64 }, ptr %t504 %t507 = extractvalue { ptr, i64, i64 } %t506, 1 %t508 = icmp uge i64 %t505, %t507 br i1 %t508, label %range3363, label %inrange3364 range3363: call void @finch_panic_index(ptr @.str.2150, i64 1346, i64 %t505, i64 %t507) unreachable inrange3364: %t509 = extractvalue { ptr, i64, i64 } %t506, 0 %t510 = getelementptr inbounds %S.ast.Node, ptr %t509, i64 %t505 %t511 = load %S.ast.Node, ptr %t510 store %S.ast.Node %t511, ptr %a512 call void @finch.copy.S_ast_Node(ptr %a513, ptr %a512) %t514 = load %S.ast.Node, ptr %a513 store %S.ast.Node %t514, ptr %a515 %t516 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 3 %t517 = getelementptr inbounds { ptr, i64, i64 }, ptr %t516, i32 0, i32 1 %t518 = load i64, ptr %t517 %t519 = icmp sgt i64 %t518, 0 br i1 %t519, label %then3365, label %endif3367 then3365: %t520 = load ptr, ptr %a1 %t521 = load ptr, ptr %a1 %t522 = icmp eq ptr %t521, null br i1 %t522, label %panic3368, label %ok3369 panic3368: call void @finch_panic(ptr @.str.2151, i64 1349, ptr @.str.2152) unreachable ok3369: %t523 = getelementptr inbounds %S.gen.Gen, ptr %t521, i32 0, i32 13 %t524 = load { ptr, i64, i64 }, ptr %t523 %t525 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 1 %t526 = load { ptr, i64, i64 }, ptr %t525 %t527 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 2 %t528 = load { ptr, i64, i64 }, ptr %t527 %t529 = call i64 @finch.gen.findTemplate(ptr %t520, { ptr, i64, i64 } %t524, { ptr, i64, i64 } %t526, { ptr, i64, i64 } %t528, i1 false) %t530 = icmp sge i64 %t529, 0 br i1 %t530, label %then3370, label %endif3372 then3370: %t531 = load ptr, ptr %a1 %t532 = load %S.ast.Node, ptr %a515 %t533 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 1 %t534 = load { ptr, i64, i64 }, ptr %t533 store { ptr, i64, i64 } { ptr @.str.2153, i64 10, i64 0 }, ptr %a536 store { ptr, i64, i64 } %t534, ptr %a537 call void @finch_str_concat(ptr %a535, ptr %a536, ptr %a537) %t538 = load { ptr, i64, i64 }, ptr %a535 store { ptr, i64, i64 } %t538, ptr %a540 store { ptr, i64, i64 } { ptr @.str.2154, i64 18, i64 0 }, ptr %a541 call void @finch_str_concat(ptr %a539, ptr %a540, ptr %a541) %t542 = load { ptr, i64, i64 }, ptr %a539 call void @finch.gen.fail(ptr %t531, %S.ast.Node %t532, { ptr, i64, i64 } %t542) br label %endif3372 endif3372: %t543 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 2 %t544 = getelementptr inbounds { ptr, i64, i64 }, ptr %t543, i32 0, i32 1 %t545 = load i64, ptr %t544 %t546 = icmp sgt i64 %t545, 0 br label %logic.from3373 logic.from3373: br i1 %t546, label %logic.rhs3374, label %logic.end3375 logic.rhs3374: %t547 = load ptr, ptr %a1 %t548 = load ptr, ptr %a1 %t549 = icmp eq ptr %t548, null br i1 %t549, label %panic3376, label %ok3377 panic3376: call void @finch_panic(ptr @.str.2155, i64 1352, ptr @.str.2156) unreachable ok3377: %t550 = getelementptr inbounds %S.gen.Gen, ptr %t548, i32 0, i32 13 %t551 = load { ptr, i64, i64 }, ptr %t550 %t552 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 2 %t553 = load { ptr, i64, i64 }, ptr %t552 %t554 = call i64 @finch.gen.findTemplate(ptr %t547, { ptr, i64, i64 } %t551, { ptr, i64, i64 } %t553, { ptr, i64, i64 } { ptr @.str.2157, i64 0, i64 0 }, i1 true) %t555 = icmp slt i64 %t554, 0 br label %logic.rend3378 logic.rend3378: br label %logic.end3375 logic.end3375: %t556 = phi i1 [ false, %logic.from3373 ], [ %t555, %logic.rend3378 ] br i1 %t556, label %then3379, label %endif3381 then3379: %t557 = load ptr, ptr %a1 %t558 = load %S.ast.Node, ptr %a515 %t559 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 2 %t560 = load { ptr, i64, i64 }, ptr %t559 store { ptr, i64, i64 } { ptr @.str.2158, i64 34, i64 0 }, ptr %a562 store { ptr, i64, i64 } %t560, ptr %a563 call void @finch_str_concat(ptr %a561, ptr %a562, ptr %a563) %t564 = load { ptr, i64, i64 }, ptr %a561 store { ptr, i64, i64 } %t564, ptr %a566 store { ptr, i64, i64 } { ptr @.str.2159, i64 53, i64 0 }, ptr %a567 call void @finch_str_concat(ptr %a565, ptr %a566, ptr %a567) %t568 = load { ptr, i64, i64 }, ptr %a565 call void @finch.gen.fail(ptr %t557, %S.ast.Node %t558, { ptr, i64, i64 } %t568) br label %endif3381 endif3381: %t569 = load ptr, ptr %a1 %t570 = icmp eq ptr %t569, null br i1 %t570, label %panic3382, label %ok3383 panic3382: call void @finch_panic(ptr @.str.2160, i64 1355, ptr @.str.2161) unreachable ok3383: %t571 = getelementptr inbounds %S.gen.Gen, ptr %t569, i32 0, i32 16 %t572 = getelementptr inbounds { ptr, i64, i64 }, ptr %t571, i32 0, i32 1 %t573 = load ptr, ptr %a1 %t574 = icmp eq ptr %t573, null br i1 %t574, label %panic3384, label %ok3385 panic3384: call void @finch_panic(ptr @.str.2162, i64 1355, ptr @.str.2163) unreachable ok3385: %t575 = getelementptr inbounds %S.gen.Gen, ptr %t573, i32 0, i32 13 %t576 = load { ptr, i64, i64 }, ptr %t575 store { ptr, i64, i64 } %t576, ptr %a577 call void @finch_str_copy(ptr %a578, ptr %a577) %t579 = load { ptr, i64, i64 }, ptr %a578 %t580 = insertvalue %S.gen.Template zeroinitializer, { ptr, i64, i64 } %t579, 0 %t581 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 1 %t582 = load { ptr, i64, i64 }, ptr %t581 store { ptr, i64, i64 } %t582, ptr %a583 call void @finch_str_copy(ptr %a584, ptr %a583) %t585 = load { ptr, i64, i64 }, ptr %a584 %t586 = insertvalue %S.gen.Template %t580, { ptr, i64, i64 } %t585, 1 %t587 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 2 %t588 = load { ptr, i64, i64 }, ptr %t587 store { ptr, i64, i64 } %t588, ptr %a589 call void @finch_str_copy(ptr %a590, ptr %a589) %t591 = load { ptr, i64, i64 }, ptr %a590 %t592 = insertvalue %S.gen.Template %t586, { ptr, i64, i64 } %t591, 2 %t593 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 3 %t594 = load { ptr, i64, i64 }, ptr %t593 store { ptr, i64, i64 } %t594, ptr %a595 call void @finch.copy.arr_str(ptr %a596, ptr %a595) %t597 = load { ptr, i64, i64 }, ptr %a596 %t598 = insertvalue %S.gen.Template %t592, { ptr, i64, i64 } %t597, 3 %t599 = load i64, ptr %a460 %t600 = insertvalue %S.gen.Template %t598, i64 %t599, 4 %t601 = load i64, ptr %a492 %t602 = insertvalue %S.gen.Template %t600, i64 %t601, 5 %t603 = load i64, ptr %t572 %t604 = add i64 %t603, 1 call void @finch_arr_reserve(ptr %t571, i64 %t604, i64 ptrtoint (ptr getelementptr (%S.gen.Template, ptr null, i32 1) to i64)) %t605 = load ptr, ptr %t571 %t606 = getelementptr inbounds %S.gen.Template, ptr %t605, i64 %t603 store %S.gen.Template %t602, ptr %t606 store i64 %t604, ptr %t572 br label %for.step3357 endif3367: %t607 = load ptr, ptr %a1 %t608 = icmp eq ptr %t607, null br i1 %t608, label %panic3386, label %ok3387 panic3386: call void @finch_panic(ptr @.str.2164, i64 1358, ptr @.str.2165) unreachable ok3387: %t609 = getelementptr inbounds %S.gen.Gen, ptr %t607, i32 0, i32 13 %t610 = load { ptr, i64, i64 }, ptr %t609 store { ptr, i64, i64 } %t610, ptr %a611 call void @finch_str_copy(ptr %a612, ptr %a611) %t613 = load { ptr, i64, i64 }, ptr %a612 store { ptr, i64, i64 } %t613, ptr %a614 store i1 false, ptr %a615 %t616 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 2 %t617 = getelementptr inbounds { ptr, i64, i64 }, ptr %t616, i32 0, i32 1 %t618 = load i64, ptr %t617 %t619 = icmp sgt i64 %t618, 0 br label %logic.from3388 logic.from3388: br i1 %t619, label %logic.rhs3389, label %logic.end3390 logic.rhs3389: %t620 = load ptr, ptr %a1 %t621 = load ptr, ptr %a1 %t622 = icmp eq ptr %t621, null br i1 %t622, label %panic3391, label %ok3392 panic3391: call void @finch_panic(ptr @.str.2166, i64 1360, ptr @.str.2167) unreachable ok3392: %t623 = getelementptr inbounds %S.gen.Gen, ptr %t621, i32 0, i32 13 %t624 = load { ptr, i64, i64 }, ptr %t623 %t625 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 2 %t626 = load { ptr, i64, i64 }, ptr %t625 %t627 = call i64 @finch.gen.findEnum(ptr %t620, { ptr, i64, i64 } %t624, { ptr, i64, i64 } %t626) %t628 = icmp sge i64 %t627, 0 br label %logic.rend3393 logic.rend3393: br label %logic.end3390 logic.end3390: %t629 = phi i1 [ false, %logic.from3388 ], [ %t628, %logic.rend3393 ] br i1 %t629, label %then3394, label %else3395 then3394: store i1 true, ptr %a615 %t630 = load ptr, ptr %a1 %t631 = load { ptr, i64, i64 }, ptr %a614 %t632 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 2 %t633 = load { ptr, i64, i64 }, ptr %t632 %t634 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 1 %t635 = load { ptr, i64, i64 }, ptr %t634 %t636 = call i64 @finch.gen.findMethod(ptr %t630, { ptr, i64, i64 } %t631, { ptr, i64, i64 } %t633, { ptr, i64, i64 } %t635) %t637 = icmp sge i64 %t636, 0 br i1 %t637, label %then3397, label %endif3399 then3397: %t638 = load ptr, ptr %a1 %t639 = load %S.ast.Node, ptr %a515 %t640 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 2 %t641 = load { ptr, i64, i64 }, ptr %t640 store { ptr, i64, i64 } { ptr @.str.2168, i64 11, i64 0 }, ptr %a643 store { ptr, i64, i64 } %t641, ptr %a644 call void @finch_str_concat(ptr %a642, ptr %a643, ptr %a644) %t645 = load { ptr, i64, i64 }, ptr %a642 store { ptr, i64, i64 } %t645, ptr %a647 store { ptr, i64, i64 } { ptr @.str.2169, i64 1, i64 0 }, ptr %a648 call void @finch_str_concat(ptr %a646, ptr %a647, ptr %a648) %t649 = load { ptr, i64, i64 }, ptr %a646 %t650 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 1 %t651 = load { ptr, i64, i64 }, ptr %t650 store { ptr, i64, i64 } %t649, ptr %a653 store { ptr, i64, i64 } %t651, ptr %a654 call void @finch_str_concat(ptr %a652, ptr %a653, ptr %a654) %t655 = load { ptr, i64, i64 }, ptr %a652 store { ptr, i64, i64 } %t655, ptr %a657 store { ptr, i64, i64 } { ptr @.str.2170, i64 17, i64 0 }, ptr %a658 call void @finch_str_concat(ptr %a656, ptr %a657, ptr %a658) %t659 = load { ptr, i64, i64 }, ptr %a656 call void @finch.gen.fail(ptr %t638, %S.ast.Node %t639, { ptr, i64, i64 } %t659) br label %endif3399 endif3399: br label %endif3396 else3395: %t660 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 2 %t661 = getelementptr inbounds { ptr, i64, i64 }, ptr %t660, i32 0, i32 1 %t662 = load i64, ptr %t661 %t663 = icmp sgt i64 %t662, 0 br i1 %t663, label %then3400, label %else3401 then3400: %t664 = load ptr, ptr %a1 %t665 = load ptr, ptr %a1 %t666 = icmp eq ptr %t665, null br i1 %t666, label %panic3403, label %ok3404 panic3403: call void @finch_panic(ptr @.str.2171, i64 1366, ptr @.str.2172) unreachable ok3404: %t667 = getelementptr inbounds %S.gen.Gen, ptr %t665, i32 0, i32 13 %t668 = load { ptr, i64, i64 }, ptr %t667 %t669 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 2 %t670 = load { ptr, i64, i64 }, ptr %t669 %t671 = call i64 @finch.gen.findStruct(ptr %t664, { ptr, i64, i64 } %t668, { ptr, i64, i64 } %t670) store i64 %t671, ptr %a672 %t673 = load i64, ptr %a672 %t674 = icmp slt i64 %t673, 0 br label %logic.from3405 logic.from3405: br i1 %t674, label %logic.rhs3406, label %logic.end3407 logic.rhs3406: %t675 = load ptr, ptr %a1 %t676 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 2 %t677 = load { ptr, i64, i64 }, ptr %t676 %t678 = call i64 @finch.gen.findStruct(ptr %t675, { ptr, i64, i64 } { ptr @.str.2173, i64 1, i64 0 }, { ptr, i64, i64 } %t677) %t679 = icmp sge i64 %t678, 0 br label %logic.rend3408 logic.rend3408: br label %logic.end3407 logic.end3407: %t680 = phi i1 [ false, %logic.from3405 ], [ %t679, %logic.rend3408 ] br i1 %t680, label %then3409, label %endif3411 then3409: %t681 = load ptr, ptr %a1 %t682 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 2 %t683 = load { ptr, i64, i64 }, ptr %t682 %t684 = call i64 @finch.gen.findStruct(ptr %t681, { ptr, i64, i64 } { ptr @.str.2174, i64 1, i64 0 }, { ptr, i64, i64 } %t683) store i64 %t684, ptr %a672 store { ptr, i64, i64 } { ptr @.str.2175, i64 1, i64 0 }, ptr %a614 br label %endif3411 endif3411: %t685 = load i64, ptr %a672 %t686 = icmp slt i64 %t685, 0 br i1 %t686, label %then3412, label %endif3414 then3412: %t687 = load ptr, ptr %a1 %t688 = load %S.ast.Node, ptr %a515 %t689 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 2 %t690 = load { ptr, i64, i64 }, ptr %t689 store { ptr, i64, i64 } { ptr @.str.2176, i64 26, i64 0 }, ptr %a692 store { ptr, i64, i64 } %t690, ptr %a693 call void @finch_str_concat(ptr %a691, ptr %a692, ptr %a693) %t694 = load { ptr, i64, i64 }, ptr %a691 store { ptr, i64, i64 } %t694, ptr %a696 store { ptr, i64, i64 } { ptr @.str.2177, i64 76, i64 0 }, ptr %a697 call void @finch_str_concat(ptr %a695, ptr %a696, ptr %a697) %t698 = load { ptr, i64, i64 }, ptr %a695 call void @finch.gen.fail(ptr %t687, %S.ast.Node %t688, { ptr, i64, i64 } %t698) br label %endif3414 endif3414: %t699 = load ptr, ptr %a1 %t700 = load { ptr, i64, i64 }, ptr %a614 %t701 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 2 %t702 = load { ptr, i64, i64 }, ptr %t701 %t703 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 1 %t704 = load { ptr, i64, i64 }, ptr %t703 %t705 = call i64 @finch.gen.findMethod(ptr %t699, { ptr, i64, i64 } %t700, { ptr, i64, i64 } %t702, { ptr, i64, i64 } %t704) %t706 = icmp sge i64 %t705, 0 br i1 %t706, label %then3415, label %endif3417 then3415: %t707 = load ptr, ptr %a1 %t708 = load %S.ast.Node, ptr %a515 %t709 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 2 %t710 = load { ptr, i64, i64 }, ptr %t709 store { ptr, i64, i64 } { ptr @.str.2178, i64 11, i64 0 }, ptr %a712 store { ptr, i64, i64 } %t710, ptr %a713 call void @finch_str_concat(ptr %a711, ptr %a712, ptr %a713) %t714 = load { ptr, i64, i64 }, ptr %a711 store { ptr, i64, i64 } %t714, ptr %a716 store { ptr, i64, i64 } { ptr @.str.2179, i64 1, i64 0 }, ptr %a717 call void @finch_str_concat(ptr %a715, ptr %a716, ptr %a717) %t718 = load { ptr, i64, i64 }, ptr %a715 %t719 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 1 %t720 = load { ptr, i64, i64 }, ptr %t719 store { ptr, i64, i64 } %t718, ptr %a722 store { ptr, i64, i64 } %t720, ptr %a723 call void @finch_str_concat(ptr %a721, ptr %a722, ptr %a723) %t724 = load { ptr, i64, i64 }, ptr %a721 store { ptr, i64, i64 } %t724, ptr %a726 store { ptr, i64, i64 } { ptr @.str.2180, i64 17, i64 0 }, ptr %a727 call void @finch_str_concat(ptr %a725, ptr %a726, ptr %a727) %t728 = load { ptr, i64, i64 }, ptr %a725 call void @finch.gen.fail(ptr %t707, %S.ast.Node %t708, { ptr, i64, i64 } %t728) br label %endif3417 endif3417: %t729 = load ptr, ptr %a1 %t730 = icmp eq ptr %t729, null br i1 %t730, label %panic3418, label %ok3419 panic3418: call void @finch_panic(ptr @.str.2181, i64 1377, ptr @.str.2182) unreachable ok3419: %t731 = getelementptr inbounds %S.gen.Gen, ptr %t729, i32 0, i32 15 %t732 = load i64, ptr %a672 %t733 = load { ptr, i64, i64 }, ptr %t731 %t734 = extractvalue { ptr, i64, i64 } %t733, 1 %t735 = icmp uge i64 %t732, %t734 br i1 %t735, label %range3420, label %inrange3421 range3420: call void @finch_panic_index(ptr @.str.2183, i64 1377, i64 %t732, i64 %t734) unreachable inrange3421: %t736 = extractvalue { ptr, i64, i64 } %t733, 0 %t737 = getelementptr inbounds %S.gen.StructDef, ptr %t736, i64 %t732 %t738 = getelementptr inbounds %S.gen.StructDef, ptr %t737, i32 0, i32 11 %t739 = getelementptr inbounds { ptr, i64, i64 }, ptr %t738, i32 0, i32 1 %t740 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 1 %t741 = load { ptr, i64, i64 }, ptr %t740 store i64 -1, ptr %a742 %t743 = load i64, ptr %t739 %t744 = load ptr, ptr %t738 store i64 0, ptr %a745 br label %find.cond3422 find.cond3422: %t746 = load i64, ptr %a745 %t747 = icmp slt i64 %t746, %t743 br i1 %t747, label %find.body3423, label %find.end3426 find.body3423: %t748 = getelementptr inbounds { ptr, i64, i64 }, ptr %t744, i64 %t746 %t749 = load { ptr, i64, i64 }, ptr %t748 store { ptr, i64, i64 } %t749, ptr %a750 store { ptr, i64, i64 } %t741, ptr %a751 %t752 = call i32 @finch_str_eq(ptr %a750, ptr %a751) %t753 = icmp ne i32 %t752, 0 br i1 %t753, label %find.hit3424, label %find.next3425 find.hit3424: store i64 %t746, ptr %a742 br label %find.end3426 find.next3425: %t754 = add i64 %t746, 1 store i64 %t754, ptr %a745 br label %find.cond3422 find.end3426: %t755 = load i64, ptr %a742 %t756 = icmp sge i64 %t755, 0 br i1 %t756, label %then3427, label %endif3429 then3427: %t757 = load ptr, ptr %a1 %t758 = load %S.ast.Node, ptr %a515 %t759 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 2 %t760 = load { ptr, i64, i64 }, ptr %t759 store { ptr, i64, i64 } { ptr @.str.2184, i64 11, i64 0 }, ptr %a762 store { ptr, i64, i64 } %t760, ptr %a763 call void @finch_str_concat(ptr %a761, ptr %a762, ptr %a763) %t764 = load { ptr, i64, i64 }, ptr %a761 store { ptr, i64, i64 } %t764, ptr %a766 store { ptr, i64, i64 } { ptr @.str.2185, i64 28, i64 0 }, ptr %a767 call void @finch_str_concat(ptr %a765, ptr %a766, ptr %a767) %t768 = load { ptr, i64, i64 }, ptr %a765 %t769 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 1 %t770 = load { ptr, i64, i64 }, ptr %t769 store { ptr, i64, i64 } %t768, ptr %a772 store { ptr, i64, i64 } %t770, ptr %a773 call void @finch_str_concat(ptr %a771, ptr %a772, ptr %a773) %t774 = load { ptr, i64, i64 }, ptr %a771 store { ptr, i64, i64 } %t774, ptr %a776 store { ptr, i64, i64 } { ptr @.str.2186, i64 1, i64 0 }, ptr %a777 call void @finch_str_concat(ptr %a775, ptr %a776, ptr %a777) %t778 = load { ptr, i64, i64 }, ptr %a775 call void @finch.gen.fail(ptr %t757, %S.ast.Node %t758, { ptr, i64, i64 } %t778) br label %endif3429 endif3429: br label %endif3402 else3401: %t779 = load ptr, ptr %a1 %t780 = load ptr, ptr %a1 %t781 = icmp eq ptr %t780, null br i1 %t781, label %panic3430, label %ok3431 panic3430: call void @finch_panic(ptr @.str.2187, i64 1381, ptr @.str.2188) unreachable ok3431: %t782 = getelementptr inbounds %S.gen.Gen, ptr %t780, i32 0, i32 13 %t783 = load { ptr, i64, i64 }, ptr %t782 %t784 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 1 %t785 = load { ptr, i64, i64 }, ptr %t784 %t786 = call i64 @finch.gen.findFn(ptr %t779, { ptr, i64, i64 } %t783, { ptr, i64, i64 } %t785) %t787 = icmp sge i64 %t786, 0 br i1 %t787, label %then3432, label %endif3434 then3432: %t788 = load ptr, ptr %a1 %t789 = load %S.ast.Node, ptr %a515 %t790 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 1 %t791 = load { ptr, i64, i64 }, ptr %t790 store { ptr, i64, i64 } { ptr @.str.2189, i64 10, i64 0 }, ptr %a793 store { ptr, i64, i64 } %t791, ptr %a794 call void @finch_str_concat(ptr %a792, ptr %a793, ptr %a794) %t795 = load { ptr, i64, i64 }, ptr %a792 store { ptr, i64, i64 } %t795, ptr %a797 store { ptr, i64, i64 } { ptr @.str.2190, i64 18, i64 0 }, ptr %a798 call void @finch_str_concat(ptr %a796, ptr %a797, ptr %a798) %t799 = load { ptr, i64, i64 }, ptr %a796 call void @finch.gen.fail(ptr %t788, %S.ast.Node %t789, { ptr, i64, i64 } %t799) br label %endif3434 endif3434: %t800 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 1 %t801 = load { ptr, i64, i64 }, ptr %t800 %t802 = call i1 @finch.gen.isBuiltin({ ptr, i64, i64 } %t801) br i1 %t802, label %then3435, label %endif3437 then3435: %t803 = load ptr, ptr %a1 %t804 = load %S.ast.Node, ptr %a515 %t805 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 1 %t806 = load { ptr, i64, i64 }, ptr %t805 store { ptr, i64, i64 } { ptr @.str.2191, i64 1, i64 0 }, ptr %a808 store { ptr, i64, i64 } %t806, ptr %a809 call void @finch_str_concat(ptr %a807, ptr %a808, ptr %a809) %t810 = load { ptr, i64, i64 }, ptr %a807 store { ptr, i64, i64 } %t810, ptr %a812 store { ptr, i64, i64 } { ptr @.str.2192, i64 43, i64 0 }, ptr %a813 call void @finch_str_concat(ptr %a811, ptr %a812, ptr %a813) %t814 = load { ptr, i64, i64 }, ptr %a811 call void @finch.gen.fail(ptr %t803, %S.ast.Node %t804, { ptr, i64, i64 } %t814) br label %endif3437 endif3437: br label %endif3402 endif3402: br label %endif3396 endif3396: %t815 = load ptr, ptr %a1 %t816 = icmp eq ptr %t815, null br i1 %t816, label %panic3438, label %ok3439 panic3438: call void @finch_panic(ptr @.str.2193, i64 1388, ptr @.str.2194) unreachable ok3439: %t817 = getelementptr inbounds %S.gen.Gen, ptr %t815, i32 0, i32 13 %t818 = load { ptr, i64, i64 }, ptr %t817 store { ptr, i64, i64 } %t818, ptr %a819 call void @finch_str_copy(ptr %a820, ptr %a819) %t821 = load { ptr, i64, i64 }, ptr %a820 %t822 = insertvalue %S.gen.FnSig zeroinitializer, { ptr, i64, i64 } %t821, 0 %t823 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 1 %t824 = load { ptr, i64, i64 }, ptr %t823 store { ptr, i64, i64 } %t824, ptr %a825 call void @finch_str_copy(ptr %a826, ptr %a825) %t827 = load { ptr, i64, i64 }, ptr %a826 %t828 = insertvalue %S.gen.FnSig %t822, { ptr, i64, i64 } %t827, 1 %t829 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 2 %t830 = load { ptr, i64, i64 }, ptr %t829 store { ptr, i64, i64 } %t830, ptr %a831 call void @finch_str_copy(ptr %a832, ptr %a831) %t833 = load { ptr, i64, i64 }, ptr %a832 %t834 = insertvalue %S.gen.FnSig %t828, { ptr, i64, i64 } %t833, 2 %t835 = load { ptr, i64, i64 }, ptr %a614 store { ptr, i64, i64 } %t835, ptr %a836 call void @finch_str_copy(ptr %a837, ptr %a836) %t838 = load { ptr, i64, i64 }, ptr %a837 %t839 = insertvalue %S.gen.FnSig %t834, { ptr, i64, i64 } %t838, 3 %t840 = load i1, ptr %a615 %t841 = insertvalue %S.gen.FnSig %t839, i1 %t840, 4 %t842 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 8 %t843 = load i1, ptr %t842 %t844 = insertvalue %S.gen.FnSig %t841, i1 %t843, 5 %t845 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 7 %t846 = load i1, ptr %t845 %t847 = insertvalue %S.gen.FnSig %t844, i1 %t846, 9 %t848 = load i64, ptr %a460 %t849 = insertvalue %S.gen.FnSig %t847, i64 %t848, 16 %t850 = load i64, ptr %a492 %t851 = insertvalue %S.gen.FnSig %t849, i64 %t850, 17 store %S.gen.FnSig %t851, ptr %a852 %t853 = load ptr, ptr %a1 %t854 = icmp eq ptr %t853, null br i1 %t854, label %panic3440, label %ok3441 panic3440: call void @finch_panic(ptr @.str.2196, i64 1389, ptr @.str.2197) unreachable ok3441: %t855 = getelementptr inbounds %S.gen.Gen, ptr %t853, i32 0, i32 13 %t856 = load { ptr, i64, i64 }, ptr %t855 %t857 = call { ptr, i64, i64 } @finch.gen.modName({ ptr, i64, i64 } %t856) store { ptr, i64, i64 } { ptr @.str.2195, i64 7, i64 0 }, ptr %a859 store { ptr, i64, i64 } %t857, ptr %a860 call void @finch_str_concat(ptr %a858, ptr %a859, ptr %a860) %t861 = load { ptr, i64, i64 }, ptr %a858 store { ptr, i64, i64 } %t861, ptr %a863 store { ptr, i64, i64 } { ptr @.str.2198, i64 1, i64 0 }, ptr %a864 call void @finch_str_concat(ptr %a862, ptr %a863, ptr %a864) %t865 = load { ptr, i64, i64 }, ptr %a862 %t866 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 1 %t867 = load { ptr, i64, i64 }, ptr %t866 store { ptr, i64, i64 } %t865, ptr %a869 store { ptr, i64, i64 } %t867, ptr %a870 call void @finch_str_concat(ptr %a868, ptr %a869, ptr %a870) %t871 = load { ptr, i64, i64 }, ptr %a868 %t872 = getelementptr inbounds %S.gen.FnSig, ptr %a852, i32 0, i32 11 store { ptr, i64, i64 } %t871, ptr %t872 %t873 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 2 %t874 = getelementptr inbounds { ptr, i64, i64 }, ptr %t873, i32 0, i32 1 %t875 = load i64, ptr %t874 %t876 = icmp sgt i64 %t875, 0 br i1 %t876, label %then3442, label %endif3444 then3442: %t877 = load ptr, ptr %a1 %t878 = icmp eq ptr %t877, null br i1 %t878, label %panic3445, label %ok3446 panic3445: call void @finch_panic(ptr @.str.2200, i64 1391, ptr @.str.2201) unreachable ok3446: %t879 = getelementptr inbounds %S.gen.Gen, ptr %t877, i32 0, i32 13 %t880 = load { ptr, i64, i64 }, ptr %t879 %t881 = call { ptr, i64, i64 } @finch.gen.modName({ ptr, i64, i64 } %t880) store { ptr, i64, i64 } { ptr @.str.2199, i64 7, i64 0 }, ptr %a883 store { ptr, i64, i64 } %t881, ptr %a884 call void @finch_str_concat(ptr %a882, ptr %a883, ptr %a884) %t885 = load { ptr, i64, i64 }, ptr %a882 store { ptr, i64, i64 } %t885, ptr %a887 store { ptr, i64, i64 } { ptr @.str.2202, i64 1, i64 0 }, ptr %a888 call void @finch_str_concat(ptr %a886, ptr %a887, ptr %a888) %t889 = load { ptr, i64, i64 }, ptr %a886 %t890 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 2 %t891 = load { ptr, i64, i64 }, ptr %t890 store { ptr, i64, i64 } %t889, ptr %a893 store { ptr, i64, i64 } %t891, ptr %a894 call void @finch_str_concat(ptr %a892, ptr %a893, ptr %a894) %t895 = load { ptr, i64, i64 }, ptr %a892 store { ptr, i64, i64 } %t895, ptr %a897 store { ptr, i64, i64 } { ptr @.str.2203, i64 1, i64 0 }, ptr %a898 call void @finch_str_concat(ptr %a896, ptr %a897, ptr %a898) %t899 = load { ptr, i64, i64 }, ptr %a896 %t900 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 1 %t901 = load { ptr, i64, i64 }, ptr %t900 store { ptr, i64, i64 } %t899, ptr %a903 store { ptr, i64, i64 } %t901, ptr %a904 call void @finch_str_concat(ptr %a902, ptr %a903, ptr %a904) %t905 = load { ptr, i64, i64 }, ptr %a902 %t906 = getelementptr inbounds %S.gen.FnSig, ptr %a852, i32 0, i32 11 store { ptr, i64, i64 } %t905, ptr %t906 br label %endif3444 endif3444: %t907 = load ptr, ptr %a1 %t908 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 5 %t909 = load %S.ast.Type, ptr %t908 %t910 = load %S.ast.Node, ptr %a515 %t911 = call %S.ast.Type @finch.gen.resolve(ptr %t907, %S.ast.Type %t909, %S.ast.Node %t910) %t912 = getelementptr inbounds %S.gen.FnSig, ptr %a852, i32 0, i32 12 store %S.ast.Type %t911, ptr %t912 %t913 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 9 %t914 = getelementptr inbounds { ptr, i64, i64 }, ptr %t913, i32 0, i32 1 %t915 = load i64, ptr %t914 %t916 = sub i64 %t915, 1 store i64 0, ptr %a917 br label %for.cond3447 for.cond3447: %t918 = load i64, ptr %a917 %t919 = icmp slt i64 %t918, %t916 br i1 %t919, label %for.body3448, label %for.end3450 for.body3448: %t920 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 9 %t921 = load i64, ptr %a917 %t922 = load { ptr, i64, i64 }, ptr %t920 %t923 = extractvalue { ptr, i64, i64 } %t922, 1 %t924 = icmp uge i64 %t921, %t923 br i1 %t924, label %range3451, label %inrange3452 range3451: call void @finch_panic_index(ptr @.str.2204, i64 1395, i64 %t921, i64 %t923) unreachable inrange3452: %t925 = extractvalue { ptr, i64, i64 } %t922, 0 %t926 = getelementptr inbounds %S.ast.Node, ptr %t925, i64 %t921 %t927 = getelementptr inbounds %S.ast.Node, ptr %t926, i32 0, i32 1 %t928 = load { ptr, i64, i64 }, ptr %t927 store { ptr, i64, i64 } %t928, ptr %a929 store { ptr, i64, i64 } { ptr @.str.2205, i64 4, i64 0 }, ptr %a930 %t931 = call i32 @finch_str_eq(ptr %a929, ptr %a930) %t932 = icmp ne i32 %t931, 0 br label %logic.from3453 logic.from3453: br i1 %t932, label %logic.rhs3454, label %logic.end3455 logic.rhs3454: %t933 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 2 %t934 = getelementptr inbounds { ptr, i64, i64 }, ptr %t933, i32 0, i32 1 %t935 = load i64, ptr %t934 %t936 = icmp sgt i64 %t935, 0 br label %logic.rend3456 logic.rend3456: br label %logic.end3455 logic.end3455: %t937 = phi i1 [ false, %logic.from3453 ], [ %t936, %logic.rend3456 ] br i1 %t937, label %then3457, label %endif3459 then3457: %t938 = load ptr, ptr %a1 %t939 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 9 %t940 = load i64, ptr %a917 %t941 = load { ptr, i64, i64 }, ptr %t939 %t942 = extractvalue { ptr, i64, i64 } %t941, 1 %t943 = icmp uge i64 %t940, %t942 br i1 %t943, label %range3460, label %inrange3461 range3460: call void @finch_panic_index(ptr @.str.2206, i64 1396, i64 %t940, i64 %t942) unreachable inrange3461: %t944 = extractvalue { ptr, i64, i64 } %t941, 0 %t945 = getelementptr inbounds %S.ast.Node, ptr %t944, i64 %t940 %t946 = load %S.ast.Node, ptr %t945 %t947 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 2 %t948 = load { ptr, i64, i64 }, ptr %t947 store { ptr, i64, i64 } { ptr @.str.2207, i64 22, i64 0 }, ptr %a950 store { ptr, i64, i64 } %t948, ptr %a951 call void @finch_str_concat(ptr %a949, ptr %a950, ptr %a951) %t952 = load { ptr, i64, i64 }, ptr %a949 store { ptr, i64, i64 } %t952, ptr %a954 store { ptr, i64, i64 } { ptr @.str.2208, i64 24, i64 0 }, ptr %a955 call void @finch_str_concat(ptr %a953, ptr %a954, ptr %a955) %t956 = load { ptr, i64, i64 }, ptr %a953 call void @finch.gen.fail(ptr %t938, %S.ast.Node %t946, { ptr, i64, i64 } %t956) br label %endif3459 endif3459: %t957 = getelementptr inbounds %S.gen.FnSig, ptr %a852, i32 0, i32 13 %t958 = getelementptr inbounds { ptr, i64, i64 }, ptr %t957, i32 0, i32 1 %t959 = load ptr, ptr %a1 %t960 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 9 %t961 = load i64, ptr %a917 %t962 = load { ptr, i64, i64 }, ptr %t960 %t963 = extractvalue { ptr, i64, i64 } %t962, 1 %t964 = icmp uge i64 %t961, %t963 br i1 %t964, label %range3462, label %inrange3463 range3462: call void @finch_panic_index(ptr @.str.2209, i64 1398, i64 %t961, i64 %t963) unreachable inrange3463: %t965 = extractvalue { ptr, i64, i64 } %t962, 0 %t966 = getelementptr inbounds %S.ast.Node, ptr %t965, i64 %t961 %t967 = getelementptr inbounds %S.ast.Node, ptr %t966, i32 0, i32 5 %t968 = load %S.ast.Type, ptr %t967 %t969 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 9 %t970 = load i64, ptr %a917 %t971 = load { ptr, i64, i64 }, ptr %t969 %t972 = extractvalue { ptr, i64, i64 } %t971, 1 %t973 = icmp uge i64 %t970, %t972 br i1 %t973, label %range3464, label %inrange3465 range3464: call void @finch_panic_index(ptr @.str.2210, i64 1398, i64 %t970, i64 %t972) unreachable inrange3465: %t974 = extractvalue { ptr, i64, i64 } %t971, 0 %t975 = getelementptr inbounds %S.ast.Node, ptr %t974, i64 %t970 %t976 = load %S.ast.Node, ptr %t975 %t977 = call %S.ast.Type @finch.gen.resolve(ptr %t959, %S.ast.Type %t968, %S.ast.Node %t976) %t978 = load i64, ptr %t958 %t979 = add i64 %t978, 1 call void @finch_arr_reserve(ptr %t957, i64 %t979, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) %t980 = load ptr, ptr %t957 %t981 = getelementptr inbounds %S.ast.Type, ptr %t980, i64 %t978 store %S.ast.Type %t977, ptr %t981 store i64 %t979, ptr %t958 %t982 = getelementptr inbounds %S.gen.FnSig, ptr %a852, i32 0, i32 14 %t983 = getelementptr inbounds { ptr, i64, i64 }, ptr %t982, i32 0, i32 1 %t984 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 9 %t985 = load i64, ptr %a917 %t986 = load { ptr, i64, i64 }, ptr %t984 %t987 = extractvalue { ptr, i64, i64 } %t986, 1 %t988 = icmp uge i64 %t985, %t987 br i1 %t988, label %range3466, label %inrange3467 range3466: call void @finch_panic_index(ptr @.str.2211, i64 1399, i64 %t985, i64 %t987) unreachable inrange3467: %t989 = extractvalue { ptr, i64, i64 } %t986, 0 %t990 = getelementptr inbounds %S.ast.Node, ptr %t989, i64 %t985 %t991 = getelementptr inbounds %S.ast.Node, ptr %t990, i32 0, i32 1 %t992 = load { ptr, i64, i64 }, ptr %t991 store { ptr, i64, i64 } %t992, ptr %a993 call void @finch_str_copy(ptr %a994, ptr %a993) %t995 = load { ptr, i64, i64 }, ptr %a994 %t996 = load i64, ptr %t983 %t997 = add i64 %t996, 1 call void @finch_arr_reserve(ptr %t982, i64 %t997, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t998 = load ptr, ptr %t982 %t999 = getelementptr inbounds { ptr, i64, i64 }, ptr %t998, i64 %t996 store { ptr, i64, i64 } %t995, ptr %t999 store i64 %t997, ptr %t983 br label %for.step3449 for.step3449: %t1000 = load i64, ptr %a917 %t1001 = add i64 %t1000, 1 store i64 %t1001, ptr %a917 br label %for.cond3447 for.end3450: %t1002 = getelementptr inbounds %S.ast.Node, ptr %a515, i32 0, i32 8 %t1003 = load i1, ptr %t1002 br i1 %t1003, label %then3468, label %endif3470 then3468: %t1004 = load ptr, ptr %a1 %t1005 = load %S.ast.Node, ptr %a515 %t1006 = load %S.gen.FnSig, ptr %a852 call void @finch.gen.checkExport(ptr %t1004, %S.ast.Node %t1005, %S.gen.FnSig %t1006) br label %endif3470 endif3470: %t1007 = load ptr, ptr %a1 %t1008 = icmp eq ptr %t1007, null br i1 %t1008, label %panic3471, label %ok3472 panic3471: call void @finch_panic(ptr @.str.2212, i64 1404, ptr @.str.2213) unreachable ok3472: %t1009 = getelementptr inbounds %S.gen.Gen, ptr %t1007, i32 0, i32 14 %t1010 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1009, i32 0, i32 1 %t1011 = load %S.gen.FnSig, ptr %a852 store %S.gen.FnSig %t1011, ptr %a1012 call void @finch.copy.S_gen_FnSig(ptr %a1013, ptr %a1012) %t1014 = load %S.gen.FnSig, ptr %a1013 %t1015 = load i64, ptr %t1010 %t1016 = add i64 %t1015, 1 call void @finch_arr_reserve(ptr %t1009, i64 %t1016, i64 ptrtoint (ptr getelementptr (%S.gen.FnSig, ptr null, i32 1) to i64)) %t1017 = load ptr, ptr %t1009 %t1018 = getelementptr inbounds %S.gen.FnSig, ptr %t1017, i64 %t1015 store %S.gen.FnSig %t1014, ptr %t1018 store i64 %t1016, ptr %t1010 br label %for.step3357 for.step3357: %t1019 = load i64, ptr %a492 %t1020 = add i64 %t1019, 1 store i64 %t1020, ptr %a492 br label %for.cond3355 for.end3358: br label %for.step3343 for.step3343: %t1021 = load i64, ptr %a460 %t1022 = add i64 %t1021, 1 store i64 %t1022, ptr %a460 br label %for.cond3341 for.end3344: store i1 true, ptr %a1023 br label %while.cond3473 while.cond3473: %t1024 = load i1, ptr %a1023 br i1 %t1024, label %while.body3474, label %while.end3475 while.body3474: store i1 false, ptr %a1023 %t1025 = load ptr, ptr %a1 %t1026 = icmp eq ptr %t1025, null br i1 %t1026, label %panic3476, label %ok3477 panic3476: call void @finch_panic(ptr @.str.2214, i64 1412, ptr @.str.2215) unreachable ok3477: %t1027 = getelementptr inbounds %S.gen.Gen, ptr %t1025, i32 0, i32 14 %t1028 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1027, i32 0, i32 1 %t1029 = load i64, ptr %t1028 store i64 0, ptr %a1030 br label %for.cond3478 for.cond3478: %t1031 = load i64, ptr %a1030 %t1032 = icmp slt i64 %t1031, %t1029 br i1 %t1032, label %for.body3479, label %for.end3481 for.body3479: %t1033 = load ptr, ptr %a1 %t1034 = icmp eq ptr %t1033, null br i1 %t1034, label %panic3482, label %ok3483 panic3482: call void @finch_panic(ptr @.str.2216, i64 1413, ptr @.str.2217) unreachable ok3483: %t1035 = getelementptr inbounds %S.gen.Gen, ptr %t1033, i32 0, i32 14 %t1036 = load i64, ptr %a1030 %t1037 = load { ptr, i64, i64 }, ptr %t1035 %t1038 = extractvalue { ptr, i64, i64 } %t1037, 1 %t1039 = icmp uge i64 %t1036, %t1038 br i1 %t1039, label %range3484, label %inrange3485 range3484: call void @finch_panic_index(ptr @.str.2218, i64 1413, i64 %t1036, i64 %t1038) unreachable inrange3485: %t1040 = extractvalue { ptr, i64, i64 } %t1037, 0 %t1041 = getelementptr inbounds %S.gen.FnSig, ptr %t1040, i64 %t1036 %t1042 = getelementptr inbounds %S.gen.FnSig, ptr %t1041, i32 0, i32 2 %t1043 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1042, i32 0, i32 1 %t1044 = load i64, ptr %t1043 %t1045 = icmp sgt i64 %t1044, 0 br label %logic.from3486 logic.from3486: br i1 %t1045, label %logic.rhs3487, label %logic.end3488 logic.rhs3487: %t1046 = load ptr, ptr %a1 %t1047 = icmp eq ptr %t1046, null br i1 %t1047, label %panic3489, label %ok3490 panic3489: call void @finch_panic(ptr @.str.2219, i64 1413, ptr @.str.2220) unreachable ok3490: %t1048 = getelementptr inbounds %S.gen.Gen, ptr %t1046, i32 0, i32 14 %t1049 = load i64, ptr %a1030 %t1050 = load { ptr, i64, i64 }, ptr %t1048 %t1051 = extractvalue { ptr, i64, i64 } %t1050, 1 %t1052 = icmp uge i64 %t1049, %t1051 br i1 %t1052, label %range3491, label %inrange3492 range3491: call void @finch_panic_index(ptr @.str.2221, i64 1413, i64 %t1049, i64 %t1051) unreachable inrange3492: %t1053 = extractvalue { ptr, i64, i64 } %t1050, 0 %t1054 = getelementptr inbounds %S.gen.FnSig, ptr %t1053, i64 %t1049 %t1055 = getelementptr inbounds %S.gen.FnSig, ptr %t1054, i32 0, i32 10 %t1056 = load i1, ptr %t1055 %t1057 = xor i1 %t1056, true br label %logic.rend3493 logic.rend3493: br label %logic.end3488 logic.end3488: %t1058 = phi i1 [ false, %logic.from3486 ], [ %t1057, %logic.rend3493 ] br i1 %t1058, label %then3494, label %endif3496 then3494: %t1059 = load ptr, ptr %a1 %t1060 = icmp eq ptr %t1059, null br i1 %t1060, label %panic3497, label %ok3498 panic3497: call void @finch_panic(ptr @.str.2222, i64 1414, ptr @.str.2223) unreachable ok3498: %t1061 = getelementptr inbounds %S.gen.Gen, ptr %t1059, i32 0, i32 0 %t1062 = load ptr, ptr %a1 %t1063 = icmp eq ptr %t1062, null br i1 %t1063, label %panic3499, label %ok3500 panic3499: call void @finch_panic(ptr @.str.2224, i64 1414, ptr @.str.2225) unreachable ok3500: %t1064 = getelementptr inbounds %S.gen.Gen, ptr %t1062, i32 0, i32 14 %t1065 = load i64, ptr %a1030 %t1066 = load { ptr, i64, i64 }, ptr %t1064 %t1067 = extractvalue { ptr, i64, i64 } %t1066, 1 %t1068 = icmp uge i64 %t1065, %t1067 br i1 %t1068, label %range3501, label %inrange3502 range3501: call void @finch_panic_index(ptr @.str.2226, i64 1414, i64 %t1065, i64 %t1067) unreachable inrange3502: %t1069 = extractvalue { ptr, i64, i64 } %t1066, 0 %t1070 = getelementptr inbounds %S.gen.FnSig, ptr %t1069, i64 %t1065 %t1071 = getelementptr inbounds %S.gen.FnSig, ptr %t1070, i32 0, i32 16 %t1072 = load i64, ptr %t1071 %t1073 = load { ptr, i64, i64 }, ptr %t1061 %t1074 = extractvalue { ptr, i64, i64 } %t1073, 1 %t1075 = icmp uge i64 %t1072, %t1074 br i1 %t1075, label %range3503, label %inrange3504 range3503: call void @finch_panic_index(ptr @.str.2227, i64 1414, i64 %t1072, i64 %t1074) unreachable inrange3504: %t1076 = extractvalue { ptr, i64, i64 } %t1073, 0 %t1077 = getelementptr inbounds %S.ast.Program, ptr %t1076, i64 %t1072 %t1078 = getelementptr inbounds %S.ast.Program, ptr %t1077, i32 0, i32 8 %t1079 = load ptr, ptr %a1 %t1080 = icmp eq ptr %t1079, null br i1 %t1080, label %panic3505, label %ok3506 panic3505: call void @finch_panic(ptr @.str.2228, i64 1414, ptr @.str.2229) unreachable ok3506: %t1081 = getelementptr inbounds %S.gen.Gen, ptr %t1079, i32 0, i32 14 %t1082 = load i64, ptr %a1030 %t1083 = load { ptr, i64, i64 }, ptr %t1081 %t1084 = extractvalue { ptr, i64, i64 } %t1083, 1 %t1085 = icmp uge i64 %t1082, %t1084 br i1 %t1085, label %range3507, label %inrange3508 range3507: call void @finch_panic_index(ptr @.str.2230, i64 1414, i64 %t1082, i64 %t1084) unreachable inrange3508: %t1086 = extractvalue { ptr, i64, i64 } %t1083, 0 %t1087 = getelementptr inbounds %S.gen.FnSig, ptr %t1086, i64 %t1082 %t1088 = getelementptr inbounds %S.gen.FnSig, ptr %t1087, i32 0, i32 17 %t1089 = load i64, ptr %t1088 %t1090 = load { ptr, i64, i64 }, ptr %t1078 %t1091 = extractvalue { ptr, i64, i64 } %t1090, 1 %t1092 = icmp uge i64 %t1089, %t1091 br i1 %t1092, label %range3509, label %inrange3510 range3509: call void @finch_panic_index(ptr @.str.2231, i64 1414, i64 %t1089, i64 %t1091) unreachable inrange3510: %t1093 = extractvalue { ptr, i64, i64 } %t1090, 0 %t1094 = getelementptr inbounds %S.ast.Node, ptr %t1093, i64 %t1089 %t1095 = load %S.ast.Node, ptr %t1094 store %S.ast.Node %t1095, ptr %a1096 call void @finch.copy.S_ast_Node(ptr %a1097, ptr %a1096) %t1098 = load %S.ast.Node, ptr %a1097 store %S.ast.Node %t1098, ptr %a1099 %t1100 = load ptr, ptr %a1 %t1101 = getelementptr inbounds %S.ast.Node, ptr %a1099, i32 0, i32 9 %t1102 = getelementptr inbounds %S.ast.Node, ptr %a1099, i32 0, i32 9 %t1103 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1102, i32 0, i32 1 %t1104 = load i64, ptr %t1103 %t1105 = sub i64 %t1104, 1 %t1106 = load { ptr, i64, i64 }, ptr %t1101 %t1107 = extractvalue { ptr, i64, i64 } %t1106, 1 %t1108 = icmp uge i64 %t1105, %t1107 br i1 %t1108, label %range3511, label %inrange3512 range3511: call void @finch_panic_index(ptr @.str.2233, i64 1415, i64 %t1105, i64 %t1107) unreachable inrange3512: %t1109 = extractvalue { ptr, i64, i64 } %t1106, 0 %t1110 = getelementptr inbounds %S.ast.Node, ptr %t1109, i64 %t1105 %t1111 = load %S.ast.Node, ptr %t1110 %t1112 = call i1 @finch.gen.mutates(ptr %t1100, { ptr, i64, i64 } { ptr @.str.2232, i64 4, i64 0 }, %S.ast.Node %t1111) br i1 %t1112, label %then3513, label %endif3515 then3513: %t1113 = load ptr, ptr %a1 %t1114 = icmp eq ptr %t1113, null br i1 %t1114, label %panic3516, label %ok3517 panic3516: call void @finch_panic(ptr @.str.2234, i64 1416, ptr @.str.2235) unreachable ok3517: %t1115 = getelementptr inbounds %S.gen.Gen, ptr %t1113, i32 0, i32 14 %t1116 = load i64, ptr %a1030 %t1117 = load { ptr, i64, i64 }, ptr %t1115 %t1118 = extractvalue { ptr, i64, i64 } %t1117, 1 %t1119 = icmp uge i64 %t1116, %t1118 br i1 %t1119, label %range3518, label %inrange3519 range3518: call void @finch_panic_index(ptr @.str.2236, i64 1416, i64 %t1116, i64 %t1118) unreachable inrange3519: %t1120 = extractvalue { ptr, i64, i64 } %t1117, 0 %t1121 = getelementptr inbounds %S.gen.FnSig, ptr %t1120, i64 %t1116 %t1122 = getelementptr inbounds %S.gen.FnSig, ptr %t1121, i32 0, i32 10 store i1 true, ptr %t1122 %t1123 = load ptr, ptr %a1 %t1124 = icmp eq ptr %t1123, null br i1 %t1124, label %panic3520, label %ok3521 panic3520: call void @finch_panic(ptr @.str.2237, i64 1417, ptr @.str.2238) unreachable ok3521: %t1125 = getelementptr inbounds %S.gen.Gen, ptr %t1123, i32 0, i32 22 %t1126 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1125, i32 0, i32 1 %t1127 = load ptr, ptr %a1 %t1128 = icmp eq ptr %t1127, null br i1 %t1128, label %panic3522, label %ok3523 panic3522: call void @finch_panic(ptr @.str.2239, i64 1417, ptr @.str.2240) unreachable ok3523: %t1129 = getelementptr inbounds %S.gen.Gen, ptr %t1127, i32 0, i32 14 %t1130 = load i64, ptr %a1030 %t1131 = load { ptr, i64, i64 }, ptr %t1129 %t1132 = extractvalue { ptr, i64, i64 } %t1131, 1 %t1133 = icmp uge i64 %t1130, %t1132 br i1 %t1133, label %range3524, label %inrange3525 range3524: call void @finch_panic_index(ptr @.str.2241, i64 1417, i64 %t1130, i64 %t1132) unreachable inrange3525: %t1134 = extractvalue { ptr, i64, i64 } %t1131, 0 %t1135 = getelementptr inbounds %S.gen.FnSig, ptr %t1134, i64 %t1130 %t1136 = getelementptr inbounds %S.gen.FnSig, ptr %t1135, i32 0, i32 1 %t1137 = load { ptr, i64, i64 }, ptr %t1136 store { ptr, i64, i64 } %t1137, ptr %a1138 call void @finch_str_copy(ptr %a1139, ptr %a1138) %t1140 = load { ptr, i64, i64 }, ptr %a1139 %t1141 = load i64, ptr %t1126 %t1142 = add i64 %t1141, 1 call void @finch_arr_reserve(ptr %t1125, i64 %t1142, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t1143 = load ptr, ptr %t1125 %t1144 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1143, i64 %t1141 store { ptr, i64, i64 } %t1140, ptr %t1144 store i64 %t1142, ptr %t1126 store i1 true, ptr %a1023 br label %endif3515 endif3515: br label %endif3496 endif3496: br label %for.step3480 for.step3480: %t1145 = load i64, ptr %a1030 %t1146 = add i64 %t1145, 1 store i64 %t1146, ptr %a1030 br label %for.cond3478 for.end3481: %t1147 = load ptr, ptr %a1 %t1148 = icmp eq ptr %t1147, null br i1 %t1148, label %panic3526, label %ok3527 panic3526: call void @finch_panic(ptr @.str.2242, i64 1422, ptr @.str.2243) unreachable ok3527: %t1149 = getelementptr inbounds %S.gen.Gen, ptr %t1147, i32 0, i32 16 %t1150 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1149, i32 0, i32 1 %t1151 = load i64, ptr %t1150 store i64 0, ptr %a1152 br label %for.cond3528 for.cond3528: %t1153 = load i64, ptr %a1152 %t1154 = icmp slt i64 %t1153, %t1151 br i1 %t1154, label %for.body3529, label %for.end3531 for.body3529: %t1155 = load ptr, ptr %a1 %t1156 = icmp eq ptr %t1155, null br i1 %t1156, label %panic3532, label %ok3533 panic3532: call void @finch_panic(ptr @.str.2244, i64 1423, ptr @.str.2245) unreachable ok3533: %t1157 = getelementptr inbounds %S.gen.Gen, ptr %t1155, i32 0, i32 16 %t1158 = load i64, ptr %a1152 %t1159 = load { ptr, i64, i64 }, ptr %t1157 %t1160 = extractvalue { ptr, i64, i64 } %t1159, 1 %t1161 = icmp uge i64 %t1158, %t1160 br i1 %t1161, label %range3534, label %inrange3535 range3534: call void @finch_panic_index(ptr @.str.2246, i64 1423, i64 %t1158, i64 %t1160) unreachable inrange3535: %t1162 = extractvalue { ptr, i64, i64 } %t1159, 0 %t1163 = getelementptr inbounds %S.gen.Template, ptr %t1162, i64 %t1158 %t1164 = load %S.gen.Template, ptr %t1163 store %S.gen.Template %t1164, ptr %a1165 call void @finch.copy.S_gen_Template(ptr %a1166, ptr %a1165) %t1167 = load %S.gen.Template, ptr %a1166 store %S.gen.Template %t1167, ptr %a1168 %t1169 = getelementptr inbounds %S.gen.Template, ptr %a1168, i32 0, i32 2 %t1170 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1169, i32 0, i32 1 %t1171 = load i64, ptr %t1170 %t1172 = icmp sgt i64 %t1171, 0 br label %logic.from3536 logic.from3536: br i1 %t1172, label %logic.rhs3537, label %logic.end3538 logic.rhs3537: %t1173 = getelementptr inbounds %S.gen.Template, ptr %a1168, i32 0, i32 7 %t1174 = load i1, ptr %t1173 %t1175 = xor i1 %t1174, true br label %logic.rend3539 logic.rend3539: br label %logic.end3538 logic.end3538: %t1176 = phi i1 [ false, %logic.from3536 ], [ %t1175, %logic.rend3539 ] br i1 %t1176, label %then3540, label %endif3542 then3540: %t1177 = load ptr, ptr %a1 %t1178 = icmp eq ptr %t1177, null br i1 %t1178, label %panic3543, label %ok3544 panic3543: call void @finch_panic(ptr @.str.2247, i64 1425, ptr @.str.2248) unreachable ok3544: %t1179 = getelementptr inbounds %S.gen.Gen, ptr %t1177, i32 0, i32 0 %t1180 = getelementptr inbounds %S.gen.Template, ptr %a1168, i32 0, i32 4 %t1181 = load i64, ptr %t1180 %t1182 = load { ptr, i64, i64 }, ptr %t1179 %t1183 = extractvalue { ptr, i64, i64 } %t1182, 1 %t1184 = icmp uge i64 %t1181, %t1183 br i1 %t1184, label %range3545, label %inrange3546 range3545: call void @finch_panic_index(ptr @.str.2249, i64 1425, i64 %t1181, i64 %t1183) unreachable inrange3546: %t1185 = extractvalue { ptr, i64, i64 } %t1182, 0 %t1186 = getelementptr inbounds %S.ast.Program, ptr %t1185, i64 %t1181 %t1187 = getelementptr inbounds %S.ast.Program, ptr %t1186, i32 0, i32 8 %t1188 = getelementptr inbounds %S.gen.Template, ptr %a1168, i32 0, i32 5 %t1189 = load i64, ptr %t1188 %t1190 = load { ptr, i64, i64 }, ptr %t1187 %t1191 = extractvalue { ptr, i64, i64 } %t1190, 1 %t1192 = icmp uge i64 %t1189, %t1191 br i1 %t1192, label %range3547, label %inrange3548 range3547: call void @finch_panic_index(ptr @.str.2250, i64 1425, i64 %t1189, i64 %t1191) unreachable inrange3548: %t1193 = extractvalue { ptr, i64, i64 } %t1190, 0 %t1194 = getelementptr inbounds %S.ast.Node, ptr %t1193, i64 %t1189 %t1195 = load %S.ast.Node, ptr %t1194 store %S.ast.Node %t1195, ptr %a1196 call void @finch.copy.S_ast_Node(ptr %a1197, ptr %a1196) %t1198 = load %S.ast.Node, ptr %a1197 store %S.ast.Node %t1198, ptr %a1199 %t1200 = load ptr, ptr %a1 %t1201 = getelementptr inbounds %S.ast.Node, ptr %a1199, i32 0, i32 9 %t1202 = getelementptr inbounds %S.ast.Node, ptr %a1199, i32 0, i32 9 %t1203 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1202, i32 0, i32 1 %t1204 = load i64, ptr %t1203 %t1205 = sub i64 %t1204, 1 %t1206 = load { ptr, i64, i64 }, ptr %t1201 %t1207 = extractvalue { ptr, i64, i64 } %t1206, 1 %t1208 = icmp uge i64 %t1205, %t1207 br i1 %t1208, label %range3549, label %inrange3550 range3549: call void @finch_panic_index(ptr @.str.2252, i64 1426, i64 %t1205, i64 %t1207) unreachable inrange3550: %t1209 = extractvalue { ptr, i64, i64 } %t1206, 0 %t1210 = getelementptr inbounds %S.ast.Node, ptr %t1209, i64 %t1205 %t1211 = load %S.ast.Node, ptr %t1210 %t1212 = call i1 @finch.gen.mutates(ptr %t1200, { ptr, i64, i64 } { ptr @.str.2251, i64 4, i64 0 }, %S.ast.Node %t1211) br i1 %t1212, label %then3551, label %endif3553 then3551: %t1213 = load ptr, ptr %a1 %t1214 = icmp eq ptr %t1213, null br i1 %t1214, label %panic3554, label %ok3555 panic3554: call void @finch_panic(ptr @.str.2253, i64 1427, ptr @.str.2254) unreachable ok3555: %t1215 = getelementptr inbounds %S.gen.Gen, ptr %t1213, i32 0, i32 16 %t1216 = load i64, ptr %a1152 %t1217 = load { ptr, i64, i64 }, ptr %t1215 %t1218 = extractvalue { ptr, i64, i64 } %t1217, 1 %t1219 = icmp uge i64 %t1216, %t1218 br i1 %t1219, label %range3556, label %inrange3557 range3556: call void @finch_panic_index(ptr @.str.2255, i64 1427, i64 %t1216, i64 %t1218) unreachable inrange3557: %t1220 = extractvalue { ptr, i64, i64 } %t1217, 0 %t1221 = getelementptr inbounds %S.gen.Template, ptr %t1220, i64 %t1216 %t1222 = getelementptr inbounds %S.gen.Template, ptr %t1221, i32 0, i32 7 store i1 true, ptr %t1222 %t1223 = load ptr, ptr %a1 %t1224 = icmp eq ptr %t1223, null br i1 %t1224, label %panic3558, label %ok3559 panic3558: call void @finch_panic(ptr @.str.2256, i64 1428, ptr @.str.2257) unreachable ok3559: %t1225 = getelementptr inbounds %S.gen.Gen, ptr %t1223, i32 0, i32 22 %t1226 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1225, i32 0, i32 1 %t1227 = getelementptr inbounds %S.gen.Template, ptr %a1168, i32 0, i32 1 %t1228 = load { ptr, i64, i64 }, ptr %t1227 store { ptr, i64, i64 } %t1228, ptr %a1229 call void @finch_str_copy(ptr %a1230, ptr %a1229) %t1231 = load { ptr, i64, i64 }, ptr %a1230 %t1232 = load i64, ptr %t1226 %t1233 = add i64 %t1232, 1 call void @finch_arr_reserve(ptr %t1225, i64 %t1233, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t1234 = load ptr, ptr %t1225 %t1235 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1234, i64 %t1232 store { ptr, i64, i64 } %t1231, ptr %t1235 store i64 %t1233, ptr %t1226 store i1 true, ptr %a1023 br label %endif3553 endif3553: br label %endif3542 endif3542: br label %for.step3530 for.step3530: %t1236 = load i64, ptr %a1152 %t1237 = add i64 %t1236, 1 store i64 %t1237, ptr %a1152 br label %for.cond3528 for.end3531: br label %while.cond3473 while.end3475: %t1238 = load ptr, ptr %a1 %t1239 = icmp eq ptr %t1238, null br i1 %t1239, label %panic3560, label %ok3561 panic3560: call void @finch_panic(ptr @.str.2258, i64 1435, ptr @.str.2259) unreachable ok3561: %t1240 = getelementptr inbounds %S.gen.Gen, ptr %t1238, i32 0, i32 14 %t1241 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1240, i32 0, i32 1 %t1242 = load i64, ptr %t1241 store i64 0, ptr %a1243 br label %for.cond3562 for.cond3562: %t1244 = load i64, ptr %a1243 %t1245 = icmp slt i64 %t1244, %t1242 br i1 %t1245, label %for.body3563, label %for.end3565 for.body3563: %t1246 = load ptr, ptr %a1 %t1247 = icmp eq ptr %t1246, null br i1 %t1247, label %panic3566, label %ok3567 panic3566: call void @finch_panic(ptr @.str.2260, i64 1436, ptr @.str.2261) unreachable ok3567: %t1248 = getelementptr inbounds %S.gen.Gen, ptr %t1246, i32 0, i32 0 %t1249 = load ptr, ptr %a1 %t1250 = icmp eq ptr %t1249, null br i1 %t1250, label %panic3568, label %ok3569 panic3568: call void @finch_panic(ptr @.str.2262, i64 1436, ptr @.str.2263) unreachable ok3569: %t1251 = getelementptr inbounds %S.gen.Gen, ptr %t1249, i32 0, i32 14 %t1252 = load i64, ptr %a1243 %t1253 = load { ptr, i64, i64 }, ptr %t1251 %t1254 = extractvalue { ptr, i64, i64 } %t1253, 1 %t1255 = icmp uge i64 %t1252, %t1254 br i1 %t1255, label %range3570, label %inrange3571 range3570: call void @finch_panic_index(ptr @.str.2264, i64 1436, i64 %t1252, i64 %t1254) unreachable inrange3571: %t1256 = extractvalue { ptr, i64, i64 } %t1253, 0 %t1257 = getelementptr inbounds %S.gen.FnSig, ptr %t1256, i64 %t1252 %t1258 = getelementptr inbounds %S.gen.FnSig, ptr %t1257, i32 0, i32 16 %t1259 = load i64, ptr %t1258 %t1260 = load { ptr, i64, i64 }, ptr %t1248 %t1261 = extractvalue { ptr, i64, i64 } %t1260, 1 %t1262 = icmp uge i64 %t1259, %t1261 br i1 %t1262, label %range3572, label %inrange3573 range3572: call void @finch_panic_index(ptr @.str.2265, i64 1436, i64 %t1259, i64 %t1261) unreachable inrange3573: %t1263 = extractvalue { ptr, i64, i64 } %t1260, 0 %t1264 = getelementptr inbounds %S.ast.Program, ptr %t1263, i64 %t1259 %t1265 = getelementptr inbounds %S.ast.Program, ptr %t1264, i32 0, i32 8 %t1266 = load ptr, ptr %a1 %t1267 = icmp eq ptr %t1266, null br i1 %t1267, label %panic3574, label %ok3575 panic3574: call void @finch_panic(ptr @.str.2266, i64 1436, ptr @.str.2267) unreachable ok3575: %t1268 = getelementptr inbounds %S.gen.Gen, ptr %t1266, i32 0, i32 14 %t1269 = load i64, ptr %a1243 %t1270 = load { ptr, i64, i64 }, ptr %t1268 %t1271 = extractvalue { ptr, i64, i64 } %t1270, 1 %t1272 = icmp uge i64 %t1269, %t1271 br i1 %t1272, label %range3576, label %inrange3577 range3576: call void @finch_panic_index(ptr @.str.2268, i64 1436, i64 %t1269, i64 %t1271) unreachable inrange3577: %t1273 = extractvalue { ptr, i64, i64 } %t1270, 0 %t1274 = getelementptr inbounds %S.gen.FnSig, ptr %t1273, i64 %t1269 %t1275 = getelementptr inbounds %S.gen.FnSig, ptr %t1274, i32 0, i32 17 %t1276 = load i64, ptr %t1275 %t1277 = load { ptr, i64, i64 }, ptr %t1265 %t1278 = extractvalue { ptr, i64, i64 } %t1277, 1 %t1279 = icmp uge i64 %t1276, %t1278 br i1 %t1279, label %range3578, label %inrange3579 range3578: call void @finch_panic_index(ptr @.str.2269, i64 1436, i64 %t1276, i64 %t1278) unreachable inrange3579: %t1280 = extractvalue { ptr, i64, i64 } %t1277, 0 %t1281 = getelementptr inbounds %S.ast.Node, ptr %t1280, i64 %t1276 %t1282 = load %S.ast.Node, ptr %t1281 store %S.ast.Node %t1282, ptr %a1283 call void @finch.copy.S_ast_Node(ptr %a1284, ptr %a1283) %t1285 = load %S.ast.Node, ptr %a1284 store %S.ast.Node %t1285, ptr %a1286 %t1287 = getelementptr inbounds %S.ast.Node, ptr %a1286, i32 0, i32 9 %t1288 = getelementptr inbounds %S.ast.Node, ptr %a1286, i32 0, i32 9 %t1289 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1288, i32 0, i32 1 %t1290 = load i64, ptr %t1289 %t1291 = sub i64 %t1290, 1 %t1292 = load { ptr, i64, i64 }, ptr %t1287 %t1293 = extractvalue { ptr, i64, i64 } %t1292, 1 %t1294 = icmp uge i64 %t1291, %t1293 br i1 %t1294, label %range3580, label %inrange3581 range3580: call void @finch_panic_index(ptr @.str.2270, i64 1437, i64 %t1291, i64 %t1293) unreachable inrange3581: %t1295 = extractvalue { ptr, i64, i64 } %t1292, 0 %t1296 = getelementptr inbounds %S.ast.Node, ptr %t1295, i64 %t1291 %t1297 = load %S.ast.Node, ptr %t1296 store %S.ast.Node %t1297, ptr %a1298 call void @finch.copy.S_ast_Node(ptr %a1299, ptr %a1298) %t1300 = load %S.ast.Node, ptr %a1299 store %S.ast.Node %t1300, ptr %a1301 %t1302 = load ptr, ptr %a1 %t1303 = icmp eq ptr %t1302, null br i1 %t1303, label %panic3582, label %ok3583 panic3582: call void @finch_panic(ptr @.str.2271, i64 1438, ptr @.str.2272) unreachable ok3583: %t1304 = getelementptr inbounds %S.gen.Gen, ptr %t1302, i32 0, i32 14 %t1305 = load i64, ptr %a1243 %t1306 = load { ptr, i64, i64 }, ptr %t1304 %t1307 = extractvalue { ptr, i64, i64 } %t1306, 1 %t1308 = icmp uge i64 %t1305, %t1307 br i1 %t1308, label %range3584, label %inrange3585 range3584: call void @finch_panic_index(ptr @.str.2273, i64 1438, i64 %t1305, i64 %t1307) unreachable inrange3585: %t1309 = extractvalue { ptr, i64, i64 } %t1306, 0 %t1310 = getelementptr inbounds %S.gen.FnSig, ptr %t1309, i64 %t1305 %t1311 = getelementptr inbounds %S.gen.FnSig, ptr %t1310, i32 0, i32 13 %t1312 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1311, i32 0, i32 1 %t1313 = load i64, ptr %t1312 store i64 0, ptr %a1314 br label %for.cond3586 for.cond3586: %t1315 = load i64, ptr %a1314 %t1316 = icmp slt i64 %t1315, %t1313 br i1 %t1316, label %for.body3587, label %for.end3589 for.body3587: %t1317 = load ptr, ptr %a1 %t1318 = icmp eq ptr %t1317, null br i1 %t1318, label %panic3590, label %ok3591 panic3590: call void @finch_panic(ptr @.str.2274, i64 1439, ptr @.str.2275) unreachable ok3591: %t1319 = getelementptr inbounds %S.gen.Gen, ptr %t1317, i32 0, i32 14 %t1320 = load i64, ptr %a1243 %t1321 = load { ptr, i64, i64 }, ptr %t1319 %t1322 = extractvalue { ptr, i64, i64 } %t1321, 1 %t1323 = icmp uge i64 %t1320, %t1322 br i1 %t1323, label %range3592, label %inrange3593 range3592: call void @finch_panic_index(ptr @.str.2276, i64 1439, i64 %t1320, i64 %t1322) unreachable inrange3593: %t1324 = extractvalue { ptr, i64, i64 } %t1321, 0 %t1325 = getelementptr inbounds %S.gen.FnSig, ptr %t1324, i64 %t1320 %t1326 = getelementptr inbounds %S.gen.FnSig, ptr %t1325, i32 0, i32 13 %t1327 = load i64, ptr %a1314 %t1328 = load { ptr, i64, i64 }, ptr %t1326 %t1329 = extractvalue { ptr, i64, i64 } %t1328, 1 %t1330 = icmp uge i64 %t1327, %t1329 br i1 %t1330, label %range3594, label %inrange3595 range3594: call void @finch_panic_index(ptr @.str.2277, i64 1439, i64 %t1327, i64 %t1329) unreachable inrange3595: %t1331 = extractvalue { ptr, i64, i64 } %t1328, 0 %t1332 = getelementptr inbounds %S.ast.Type, ptr %t1331, i64 %t1327 %t1333 = load %S.ast.Type, ptr %t1332 store %S.ast.Type %t1333, ptr %a1334 call void @finch.copy.S_ast_Type(ptr %a1335, ptr %a1334) %t1336 = load %S.ast.Type, ptr %a1335 store %S.ast.Type %t1336, ptr %a1337 %t1338 = load ptr, ptr %a1 %t1339 = icmp eq ptr %t1338, null br i1 %t1339, label %panic3596, label %ok3597 panic3596: call void @finch_panic(ptr @.str.2278, i64 1440, ptr @.str.2279) unreachable ok3597: %t1340 = getelementptr inbounds %S.gen.Gen, ptr %t1338, i32 0, i32 14 %t1341 = load i64, ptr %a1243 %t1342 = load { ptr, i64, i64 }, ptr %t1340 %t1343 = extractvalue { ptr, i64, i64 } %t1342, 1 %t1344 = icmp uge i64 %t1341, %t1343 br i1 %t1344, label %range3598, label %inrange3599 range3598: call void @finch_panic_index(ptr @.str.2280, i64 1440, i64 %t1341, i64 %t1343) unreachable inrange3599: %t1345 = extractvalue { ptr, i64, i64 } %t1342, 0 %t1346 = getelementptr inbounds %S.gen.FnSig, ptr %t1345, i64 %t1341 %t1347 = getelementptr inbounds %S.gen.FnSig, ptr %t1346, i32 0, i32 15 %t1348 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1347, i32 0, i32 1 %t1349 = load ptr, ptr %a1 %t1350 = load %S.ast.Type, ptr %a1337 %t1351 = call i1 @finch.gen.owning(ptr %t1349, %S.ast.Type %t1350) br label %logic.from3600 logic.from3600: br i1 %t1351, label %logic.rhs3601, label %logic.end3602 logic.rhs3601: %t1352 = load ptr, ptr %a1 %t1353 = load ptr, ptr %a1 %t1354 = icmp eq ptr %t1353, null br i1 %t1354, label %panic3603, label %ok3604 panic3603: call void @finch_panic(ptr @.str.2281, i64 1440, ptr @.str.2282) unreachable ok3604: %t1355 = getelementptr inbounds %S.gen.Gen, ptr %t1353, i32 0, i32 14 %t1356 = load i64, ptr %a1243 %t1357 = load { ptr, i64, i64 }, ptr %t1355 %t1358 = extractvalue { ptr, i64, i64 } %t1357, 1 %t1359 = icmp uge i64 %t1356, %t1358 br i1 %t1359, label %range3605, label %inrange3606 range3605: call void @finch_panic_index(ptr @.str.2283, i64 1440, i64 %t1356, i64 %t1358) unreachable inrange3606: %t1360 = extractvalue { ptr, i64, i64 } %t1357, 0 %t1361 = getelementptr inbounds %S.gen.FnSig, ptr %t1360, i64 %t1356 %t1362 = getelementptr inbounds %S.gen.FnSig, ptr %t1361, i32 0, i32 14 %t1363 = load i64, ptr %a1314 %t1364 = load { ptr, i64, i64 }, ptr %t1362 %t1365 = extractvalue { ptr, i64, i64 } %t1364, 1 %t1366 = icmp uge i64 %t1363, %t1365 br i1 %t1366, label %range3607, label %inrange3608 range3607: call void @finch_panic_index(ptr @.str.2284, i64 1440, i64 %t1363, i64 %t1365) unreachable inrange3608: %t1367 = extractvalue { ptr, i64, i64 } %t1364, 0 %t1368 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1367, i64 %t1363 %t1369 = load { ptr, i64, i64 }, ptr %t1368 %t1370 = load %S.ast.Node, ptr %a1301 %t1371 = call i1 @finch.gen.mutates(ptr %t1352, { ptr, i64, i64 } %t1369, %S.ast.Node %t1370) %t1372 = xor i1 %t1371, true br label %logic.rend3609 logic.rend3609: br label %logic.end3602 logic.end3602: %t1373 = phi i1 [ false, %logic.from3600 ], [ %t1372, %logic.rend3609 ] %t1374 = load i64, ptr %t1348 %t1375 = add i64 %t1374, 1 call void @finch_arr_reserve(ptr %t1347, i64 %t1375, i64 ptrtoint (ptr getelementptr (i1, ptr null, i32 1) to i64)) %t1376 = load ptr, ptr %t1347 %t1377 = getelementptr inbounds i1, ptr %t1376, i64 %t1374 store i1 %t1373, ptr %t1377 store i64 %t1375, ptr %t1348 br label %for.step3588 for.step3588: %t1378 = load i64, ptr %a1314 %t1379 = add i64 %t1378, 1 store i64 %t1379, ptr %a1314 br label %for.cond3586 for.end3589: br label %for.step3564 for.step3564: %t1380 = load i64, ptr %a1243 %t1381 = add i64 %t1380, 1 store i64 %t1381, ptr %a1243 br label %for.cond3562 for.end3565: ret void } define internal i64 @finch.gen.findTemplate(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, { ptr, i64, i64 } %p3, i1 %p4) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca i1, align 16 %a11 = alloca i64, align 16 %a24 = alloca %S.gen.Template, align 16 %a25 = alloca %S.gen.Template, align 16 %a27 = alloca %S.gen.Template, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 store { ptr, i64, i64 } %p3, ptr %a4 store i1 %p4, ptr %a5 %t6 = load ptr, ptr %a1 %t7 = icmp eq ptr %t6, null br i1 %t7, label %panic3610, label %ok3611 panic3610: call void @finch_panic(ptr @.str.2285, i64 1446, ptr @.str.2286) unreachable ok3611: %t8 = getelementptr inbounds %S.gen.Gen, ptr %t6, i32 0, i32 16 %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t8, i32 0, i32 1 %t10 = load i64, ptr %t9 store i64 0, ptr %a11 br label %for.cond3612 for.cond3612: %t12 = load i64, ptr %a11 %t13 = icmp slt i64 %t12, %t10 br i1 %t13, label %for.body3613, label %for.end3615 for.body3613: %t14 = load ptr, ptr %a1 %t15 = icmp eq ptr %t14, null br i1 %t15, label %panic3616, label %ok3617 panic3616: call void @finch_panic(ptr @.str.2287, i64 1447, ptr @.str.2288) unreachable ok3617: %t16 = getelementptr inbounds %S.gen.Gen, ptr %t14, i32 0, i32 16 %t17 = load i64, ptr %a11 %t18 = load { ptr, i64, i64 }, ptr %t16 %t19 = extractvalue { ptr, i64, i64 } %t18, 1 %t20 = icmp uge i64 %t17, %t19 br i1 %t20, label %range3618, label %inrange3619 range3618: call void @finch_panic_index(ptr @.str.2289, i64 1447, i64 %t17, i64 %t19) unreachable inrange3619: %t21 = extractvalue { ptr, i64, i64 } %t18, 0 %t22 = getelementptr inbounds %S.gen.Template, ptr %t21, i64 %t17 %t23 = load %S.gen.Template, ptr %t22 store %S.gen.Template %t23, ptr %a24 call void @finch.copy.S_gen_Template(ptr %a25, ptr %a24) %t26 = load %S.gen.Template, ptr %a25 store %S.gen.Template %t26, ptr %a27 %t28 = getelementptr inbounds %S.gen.Template, ptr %a27, i32 0, i32 0 %t29 = load { ptr, i64, i64 }, ptr %t28 %t30 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t29, ptr %a31 store { ptr, i64, i64 } %t30, ptr %a32 %t33 = call i32 @finch_str_eq(ptr %a31, ptr %a32) %t34 = icmp ne i32 %t33, 0 br label %logic.from3620 logic.from3620: br i1 %t34, label %logic.rhs3621, label %logic.end3622 logic.rhs3621: %t35 = getelementptr inbounds %S.gen.Template, ptr %a27, i32 0, i32 1 %t36 = load { ptr, i64, i64 }, ptr %t35 %t37 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t36, ptr %a38 store { ptr, i64, i64 } %t37, ptr %a39 %t40 = call i32 @finch_str_eq(ptr %a38, ptr %a39) %t41 = icmp ne i32 %t40, 0 br label %logic.rend3623 logic.rend3623: br label %logic.end3622 logic.end3622: %t42 = phi i1 [ false, %logic.from3620 ], [ %t41, %logic.rend3623 ] br label %logic.from3624 logic.from3624: br i1 %t42, label %logic.rhs3625, label %logic.end3626 logic.rhs3625: %t43 = getelementptr inbounds %S.gen.Template, ptr %a27, i32 0, i32 2 %t44 = load { ptr, i64, i64 }, ptr %t43 %t45 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t44, ptr %a46 store { ptr, i64, i64 } %t45, ptr %a47 %t48 = call i32 @finch_str_eq(ptr %a46, ptr %a47) %t49 = icmp ne i32 %t48, 0 br label %logic.rend3627 logic.rend3627: br label %logic.end3626 logic.end3626: %t50 = phi i1 [ false, %logic.from3624 ], [ %t49, %logic.rend3627 ] br label %logic.from3628 logic.from3628: br i1 %t50, label %logic.rhs3629, label %logic.end3630 logic.rhs3629: %t51 = getelementptr inbounds %S.gen.Template, ptr %a27, i32 0, i32 6 %t52 = load i1, ptr %t51 %t53 = load i1, ptr %a5 %t54 = icmp eq i1 %t52, %t53 br label %logic.rend3631 logic.rend3631: br label %logic.end3630 logic.end3630: %t55 = phi i1 [ false, %logic.from3628 ], [ %t54, %logic.rend3631 ] br i1 %t55, label %then3632, label %endif3634 then3632: %t56 = load i64, ptr %a11 ret i64 %t56 endif3634: br label %for.step3614 for.step3614: %t57 = load i64, ptr %a11 %t58 = add i64 %t57, 1 store i64 %t58, ptr %a11 br label %for.cond3612 for.end3615: ret i64 -1 } define internal { ptr, i64, i64 } @finch.gen.shownTypes({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca i64, align 16 %a11 = alloca %S.ast.Type, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 store { ptr, i64, i64 } zeroinitializer, ptr %a2 store i64 0, ptr %a3 br label %each.cond3635 each.cond3635: %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t5 = load i64, ptr %t4 %t6 = load i64, ptr %a3 %t7 = icmp slt i64 %t6, %t5 br i1 %t7, label %each.body3636, label %each.end3638 each.body3636: %t8 = load ptr, ptr %a1 %t9 = getelementptr inbounds %S.ast.Type, ptr %t8, i64 %t6 %t10 = load %S.ast.Type, ptr %t9 store %S.ast.Type %t10, ptr %a11 %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t13 = load %S.ast.Type, ptr %a11 %t14 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t13) %t15 = load i64, ptr %t12 %t16 = add i64 %t15, 1 call void @finch_arr_reserve(ptr %a2, i64 %t16, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t17 = load ptr, ptr %a2 %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t17, i64 %t15 store { ptr, i64, i64 } %t14, ptr %t18 store i64 %t16, ptr %t12 br label %each.step3637 each.step3637: %t19 = load i64, ptr %a3 %t20 = add i64 %t19, 1 store i64 %t20, ptr %a3 br label %each.cond3635 each.end3638: %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.2290, i64 2, i64 0 }, ptr %a22 call void @finch_str_join(ptr %a23, ptr %a2, ptr %a22) %t24 = load { ptr, i64, i64 }, ptr %a23 ret { ptr, i64, i64 } %t24 } define internal %S.ast.Type @finch.gen.instStruct(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, { ptr, i64, i64 } %p3, %S.ast.Node %p4) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca %S.ast.Node, align 16 %a10 = alloca i64, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca %S.gen.Template, align 16 %a44 = alloca %S.gen.Template, align 16 %a46 = alloca %S.gen.Template, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a85 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca { ptr, i64, i64 }, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 %a104 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 %a106 = alloca { ptr, i64, i64 }, align 16 %a110 = alloca { ptr, i64, i64 }, align 16 %a111 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 %a114 = alloca { ptr, i64, i64 }, align 16 %a115 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca { ptr, i64, i64 }, align 16 %a118 = alloca { ptr, i64, i64 }, align 16 %a129 = alloca { ptr, i64, i64 }, align 16 %a130 = alloca { ptr, i64, i64 }, align 16 %a134 = alloca { ptr, i64, i64 }, align 16 %a135 = alloca { ptr, i64, i64 }, align 16 %a139 = alloca { ptr, i64, i64 }, align 16 %a140 = alloca { ptr, i64, i64 }, align 16 %a145 = alloca { ptr, i64, i64 }, align 16 %a146 = alloca { ptr, i64, i64 }, align 16 %a150 = alloca { ptr, i64, i64 }, align 16 %a151 = alloca { ptr, i64, i64 }, align 16 %a173 = alloca { ptr, i64, i64 }, align 16 %a174 = alloca { ptr, i64, i64 }, align 16 %a178 = alloca { ptr, i64, i64 }, align 16 %a179 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 store { ptr, i64, i64 } %p3, ptr %a4 store %S.ast.Node %p4, ptr %a5 %t6 = load ptr, ptr %a1 %t7 = load { ptr, i64, i64 }, ptr %a2 %t8 = load { ptr, i64, i64 }, ptr %a3 %t9 = call i64 @finch.gen.findTemplate(ptr %t6, { ptr, i64, i64 } %t7, { ptr, i64, i64 } %t8, { ptr, i64, i64 } { ptr @.str.2291, i64 0, i64 0 }, i1 true) store i64 %t9, ptr %a10 %t11 = load i64, ptr %a10 %t12 = icmp slt i64 %t11, 0 br i1 %t12, label %then3639, label %endif3641 then3639: %t13 = load ptr, ptr %a1 %t14 = load %S.ast.Node, ptr %a5 %t15 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } { ptr @.str.2292, i64 34, i64 0 }, ptr %a17 store { ptr, i64, i64 } %t15, ptr %a18 call void @finch_str_concat(ptr %a16, ptr %a17, ptr %a18) %t19 = load { ptr, i64, i64 }, ptr %a16 store { ptr, i64, i64 } %t19, ptr %a21 store { ptr, i64, i64 } { ptr @.str.2293, i64 28, i64 0 }, ptr %a22 call void @finch_str_concat(ptr %a20, ptr %a21, ptr %a22) %t23 = load { ptr, i64, i64 }, ptr %a20 %t24 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t23, ptr %a26 store { ptr, i64, i64 } %t24, ptr %a27 call void @finch_str_concat(ptr %a25, ptr %a26, ptr %a27) %t28 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t28, ptr %a30 store { ptr, i64, i64 } { ptr @.str.2294, i64 34, i64 0 }, ptr %a31 call void @finch_str_concat(ptr %a29, ptr %a30, ptr %a31) %t32 = load { ptr, i64, i64 }, ptr %a29 call void @finch.gen.fail(ptr %t13, %S.ast.Node %t14, { ptr, i64, i64 } %t32) br label %endif3641 endif3641: %t33 = load ptr, ptr %a1 %t34 = icmp eq ptr %t33, null br i1 %t34, label %panic3642, label %ok3643 panic3642: call void @finch_panic(ptr @.str.2295, i64 1469, ptr @.str.2296) unreachable ok3643: %t35 = getelementptr inbounds %S.gen.Gen, ptr %t33, i32 0, i32 16 %t36 = load i64, ptr %a10 %t37 = load { ptr, i64, i64 }, ptr %t35 %t38 = extractvalue { ptr, i64, i64 } %t37, 1 %t39 = icmp uge i64 %t36, %t38 br i1 %t39, label %range3644, label %inrange3645 range3644: call void @finch_panic_index(ptr @.str.2297, i64 1469, i64 %t36, i64 %t38) unreachable inrange3645: %t40 = extractvalue { ptr, i64, i64 } %t37, 0 %t41 = getelementptr inbounds %S.gen.Template, ptr %t40, i64 %t36 %t42 = load %S.gen.Template, ptr %t41 store %S.gen.Template %t42, ptr %a43 call void @finch.copy.S_gen_Template(ptr %a44, ptr %a43) %t45 = load %S.gen.Template, ptr %a44 store %S.gen.Template %t45, ptr %a46 %t47 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 %t48 = load i64, ptr %t47 %t49 = getelementptr inbounds %S.gen.Template, ptr %a46, i32 0, i32 3 %t50 = getelementptr inbounds { ptr, i64, i64 }, ptr %t49, i32 0, i32 1 %t51 = load i64, ptr %t50 %t52 = icmp ne i64 %t48, %t51 br i1 %t52, label %then3646, label %endif3648 then3646: %t53 = load ptr, ptr %a1 %t54 = load %S.ast.Node, ptr %a5 %t55 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t55, ptr %a57 store { ptr, i64, i64 } { ptr @.str.2298, i64 7, i64 0 }, ptr %a58 call void @finch_str_concat(ptr %a56, ptr %a57, ptr %a58) %t59 = load { ptr, i64, i64 }, ptr %a56 %t60 = getelementptr inbounds %S.gen.Template, ptr %a46, i32 0, i32 3 %t61 = getelementptr inbounds { ptr, i64, i64 }, ptr %t60, i32 0, i32 1 %t62 = load i64, ptr %t61 call void @finch_str_from_int(ptr %a63, i64 %t62) %t64 = load { ptr, i64, i64 }, ptr %a63 store { ptr, i64, i64 } %t59, ptr %a66 store { ptr, i64, i64 } %t64, ptr %a67 call void @finch_str_concat(ptr %a65, ptr %a66, ptr %a67) %t68 = load { ptr, i64, i64 }, ptr %a65 store { ptr, i64, i64 } %t68, ptr %a70 store { ptr, i64, i64 } { ptr @.str.2299, i64 24, i64 0 }, ptr %a71 call void @finch_str_concat(ptr %a69, ptr %a70, ptr %a71) %t72 = load { ptr, i64, i64 }, ptr %a69 %t73 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t72, ptr %a75 store { ptr, i64, i64 } %t73, ptr %a76 call void @finch_str_concat(ptr %a74, ptr %a75, ptr %a76) %t77 = load { ptr, i64, i64 }, ptr %a74 store { ptr, i64, i64 } %t77, ptr %a79 store { ptr, i64, i64 } { ptr @.str.2300, i64 1, i64 0 }, ptr %a80 call void @finch_str_concat(ptr %a78, ptr %a79, ptr %a80) %t81 = load { ptr, i64, i64 }, ptr %a78 %t82 = getelementptr inbounds %S.gen.Template, ptr %a46, i32 0, i32 3 %t83 = getelementptr inbounds { ptr, i64, i64 }, ptr %t82, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.2301, i64 2, i64 0 }, ptr %a84 call void @finch_str_join(ptr %a85, ptr %t82, ptr %a84) %t86 = load { ptr, i64, i64 }, ptr %a85 store { ptr, i64, i64 } %t81, ptr %a88 store { ptr, i64, i64 } %t86, ptr %a89 call void @finch_str_concat(ptr %a87, ptr %a88, ptr %a89) %t90 = load { ptr, i64, i64 }, ptr %a87 store { ptr, i64, i64 } %t90, ptr %a92 store { ptr, i64, i64 } { ptr @.str.2302, i64 11, i64 0 }, ptr %a93 call void @finch_str_concat(ptr %a91, ptr %a92, ptr %a93) %t94 = load { ptr, i64, i64 }, ptr %a91 %t95 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 %t96 = load i64, ptr %t95 call void @finch_str_from_int(ptr %a97, i64 %t96) %t98 = load { ptr, i64, i64 }, ptr %a97 store { ptr, i64, i64 } %t94, ptr %a100 store { ptr, i64, i64 } %t98, ptr %a101 call void @finch_str_concat(ptr %a99, ptr %a100, ptr %a101) %t102 = load { ptr, i64, i64 }, ptr %a99 call void @finch.gen.fail(ptr %t53, %S.ast.Node %t54, { ptr, i64, i64 } %t102) br label %endif3648 endif3648: %t103 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t103, ptr %a105 store { ptr, i64, i64 } { ptr @.str.2303, i64 1, i64 0 }, ptr %a106 call void @finch_str_concat(ptr %a104, ptr %a105, ptr %a106) %t107 = load { ptr, i64, i64 }, ptr %a104 %t108 = load { ptr, i64, i64 }, ptr %a4 %t109 = call { ptr, i64, i64 } @finch.gen.shownTypes({ ptr, i64, i64 } %t108) store { ptr, i64, i64 } %t107, ptr %a111 store { ptr, i64, i64 } %t109, ptr %a112 call void @finch_str_concat(ptr %a110, ptr %a111, ptr %a112) %t113 = load { ptr, i64, i64 }, ptr %a110 store { ptr, i64, i64 } %t113, ptr %a115 store { ptr, i64, i64 } { ptr @.str.2304, i64 1, i64 0 }, ptr %a116 call void @finch_str_concat(ptr %a114, ptr %a115, ptr %a116) %t117 = load { ptr, i64, i64 }, ptr %a114 store { ptr, i64, i64 } %t117, ptr %a118 %t119 = load ptr, ptr %a1 %t120 = load { ptr, i64, i64 }, ptr %a2 %t121 = load { ptr, i64, i64 }, ptr %a118 %t122 = call i64 @finch.gen.findStruct(ptr %t119, { ptr, i64, i64 } %t120, { ptr, i64, i64 } %t121) %t123 = icmp slt i64 %t122, 0 br i1 %t123, label %then3649, label %endif3651 then3649: %t124 = load ptr, ptr %a1 %t125 = icmp eq ptr %t124, null br i1 %t125, label %panic3652, label %ok3653 panic3652: call void @finch_panic(ptr @.str.2305, i64 1475, ptr @.str.2306) unreachable ok3653: %t126 = getelementptr inbounds %S.gen.Gen, ptr %t124, i32 0, i32 15 %t127 = getelementptr inbounds { ptr, i64, i64 }, ptr %t126, i32 0, i32 1 %t128 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t128, ptr %a129 call void @finch_str_copy(ptr %a130, ptr %a129) %t131 = load { ptr, i64, i64 }, ptr %a130 %t132 = insertvalue %S.gen.StructDef zeroinitializer, { ptr, i64, i64 } %t131, 0 %t133 = load { ptr, i64, i64 }, ptr %a118 store { ptr, i64, i64 } %t133, ptr %a134 call void @finch_str_copy(ptr %a135, ptr %a134) %t136 = load { ptr, i64, i64 }, ptr %a135 %t137 = insertvalue %S.gen.StructDef %t132, { ptr, i64, i64 } %t136, 1 %t138 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t138, ptr %a139 call void @finch_str_copy(ptr %a140, ptr %a139) %t141 = load { ptr, i64, i64 }, ptr %a140 %t142 = insertvalue %S.gen.StructDef %t137, { ptr, i64, i64 } %t141, 5 %t143 = getelementptr inbounds %S.gen.Template, ptr %a46, i32 0, i32 3 %t144 = load { ptr, i64, i64 }, ptr %t143 store { ptr, i64, i64 } %t144, ptr %a145 call void @finch.copy.arr_str(ptr %a146, ptr %a145) %t147 = load { ptr, i64, i64 }, ptr %a146 %t148 = insertvalue %S.gen.StructDef %t142, { ptr, i64, i64 } %t147, 6 %t149 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t149, ptr %a150 call void @finch.copy.arr_S_ast_Type(ptr %a151, ptr %a150) %t152 = load { ptr, i64, i64 }, ptr %a151 %t153 = insertvalue %S.gen.StructDef %t148, { ptr, i64, i64 } %t152, 7 %t154 = getelementptr inbounds %S.gen.Template, ptr %a46, i32 0, i32 4 %t155 = load i64, ptr %t154 %t156 = insertvalue %S.gen.StructDef %t153, i64 %t155, 13 %t157 = getelementptr inbounds %S.gen.Template, ptr %a46, i32 0, i32 5 %t158 = load i64, ptr %t157 %t159 = insertvalue %S.gen.StructDef %t156, i64 %t158, 14 %t160 = load i64, ptr %t127 %t161 = add i64 %t160, 1 call void @finch_arr_reserve(ptr %t126, i64 %t161, i64 ptrtoint (ptr getelementptr (%S.gen.StructDef, ptr null, i32 1) to i64)) %t162 = load ptr, ptr %t126 %t163 = getelementptr inbounds %S.gen.StructDef, ptr %t162, i64 %t160 store %S.gen.StructDef %t159, ptr %t163 store i64 %t161, ptr %t127 %t164 = load ptr, ptr %a1 %t165 = load ptr, ptr %a1 %t166 = icmp eq ptr %t165, null br i1 %t166, label %panic3654, label %ok3655 panic3654: call void @finch_panic(ptr @.str.2307, i64 1476, ptr @.str.2308) unreachable ok3655: %t167 = getelementptr inbounds %S.gen.Gen, ptr %t165, i32 0, i32 15 %t168 = getelementptr inbounds { ptr, i64, i64 }, ptr %t167, i32 0, i32 1 %t169 = load i64, ptr %t168 %t170 = sub i64 %t169, 1 call void @finch.gen.resolveStruct(ptr %t164, i64 %t170) br label %endif3651 endif3651: %t171 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.2309, i64 6, i64 0 }, 0 %t172 = load { ptr, i64, i64 }, ptr %a118 store { ptr, i64, i64 } %t172, ptr %a173 call void @finch_str_copy(ptr %a174, ptr %a173) %t175 = load { ptr, i64, i64 }, ptr %a174 %t176 = insertvalue %S.ast.Type %t171, { ptr, i64, i64 } %t175, 2 %t177 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t177, ptr %a178 call void @finch_str_copy(ptr %a179, ptr %a178) %t180 = load { ptr, i64, i64 }, ptr %a179 %t181 = insertvalue %S.ast.Type %t176, { ptr, i64, i64 } %t180, 3 ret %S.ast.Type %t181 } define internal i64 @finch.gen.instFn(ptr %p0, i64 %p1, { ptr, i64, i64 } %p2, %S.ast.Type %p3, %S.ast.Node %p4) { entry: %a1 = alloca ptr, align 16 %a2 = alloca i64, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca %S.ast.Type, align 16 %a5 = alloca %S.ast.Node, align 16 %a16 = alloca %S.gen.Template, align 16 %a17 = alloca %S.gen.Template, align 16 %a19 = alloca %S.gen.Template, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca i64, align 16 %a58 = alloca i64, align 16 %a81 = alloca %S.ast.Node, align 16 %a82 = alloca %S.ast.Node, align 16 %a84 = alloca %S.ast.Node, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a104 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca { ptr, i64, i64 }, align 16 %a110 = alloca { ptr, i64, i64 }, align 16 %a114 = alloca { ptr, i64, i64 }, align 16 %a115 = alloca { ptr, i64, i64 }, align 16 %a130 = alloca %S.gen.FnSig, align 16 %a134 = alloca { ptr, i64, i64 }, align 16 %a135 = alloca { ptr, i64, i64 }, align 16 %a136 = alloca { ptr, i64, i64 }, align 16 %a138 = alloca { ptr, i64, i64 }, align 16 %a139 = alloca { ptr, i64, i64 }, align 16 %a140 = alloca { ptr, i64, i64 }, align 16 %a144 = alloca { ptr, i64, i64 }, align 16 %a145 = alloca { ptr, i64, i64 }, align 16 %a146 = alloca { ptr, i64, i64 }, align 16 %a156 = alloca { ptr, i64, i64 }, align 16 %a157 = alloca { ptr, i64, i64 }, align 16 %a162 = alloca { ptr, i64, i64 }, align 16 %a163 = alloca { ptr, i64, i64 }, align 16 %a167 = alloca { ptr, i64, i64 }, align 16 %a168 = alloca { ptr, i64, i64 }, align 16 %a169 = alloca { ptr, i64, i64 }, align 16 %a173 = alloca { ptr, i64, i64 }, align 16 %a174 = alloca { ptr, i64, i64 }, align 16 %a175 = alloca { ptr, i64, i64 }, align 16 %a181 = alloca { ptr, i64, i64 }, align 16 %a182 = alloca { ptr, i64, i64 }, align 16 %a183 = alloca { ptr, i64, i64 }, align 16 %a185 = alloca { ptr, i64, i64 }, align 16 %a186 = alloca { ptr, i64, i64 }, align 16 %a187 = alloca { ptr, i64, i64 }, align 16 %a192 = alloca { ptr, i64, i64 }, align 16 %a193 = alloca { ptr, i64, i64 }, align 16 %a194 = alloca { ptr, i64, i64 }, align 16 %a196 = alloca { ptr, i64, i64 }, align 16 %a197 = alloca { ptr, i64, i64 }, align 16 %a198 = alloca { ptr, i64, i64 }, align 16 %a202 = alloca { ptr, i64, i64 }, align 16 %a203 = alloca { ptr, i64, i64 }, align 16 %a204 = alloca { ptr, i64, i64 }, align 16 %a211 = alloca { ptr, i64, i64 }, align 16 %a212 = alloca { ptr, i64, i64 }, align 16 %a214 = alloca { ptr, i64, i64 }, align 16 %a219 = alloca { ptr, i64, i64 }, align 16 %a220 = alloca { ptr, i64, i64 }, align 16 %a222 = alloca { ptr, i64, i64 }, align 16 %a227 = alloca { ptr, i64, i64 }, align 16 %a228 = alloca { ptr, i64, i64 }, align 16 %a230 = alloca { ptr, i64, i64 }, align 16 %a235 = alloca { ptr, i64, i64 }, align 16 %a236 = alloca { ptr, i64, i64 }, align 16 %a238 = alloca { ptr, i64, i64 }, align 16 %a244 = alloca { ptr, i64, i64 }, align 16 %a245 = alloca { ptr, i64, i64 }, align 16 %a251 = alloca { ptr, i64, i64 }, align 16 %a252 = alloca { ptr, i64, i64 }, align 16 %a259 = alloca { ptr, i64, i64 }, align 16 %a260 = alloca { ptr, i64, i64 }, align 16 %a264 = alloca { ptr, i64, i64 }, align 16 %a265 = alloca { ptr, i64, i64 }, align 16 %a266 = alloca { ptr, i64, i64 }, align 16 %a268 = alloca { ptr, i64, i64 }, align 16 %a269 = alloca { ptr, i64, i64 }, align 16 %a270 = alloca { ptr, i64, i64 }, align 16 %a292 = alloca %S.ast.Node, align 16 %a293 = alloca %S.ast.Node, align 16 %a295 = alloca %S.ast.Node, align 16 %a300 = alloca i64, align 16 %a322 = alloca %S.ast.Type, align 16 %a326 = alloca %S.ast.Type, align 16 %a327 = alloca %S.ast.Type, align 16 %a344 = alloca { ptr, i64, i64 }, align 16 %a345 = alloca { ptr, i64, i64 }, align 16 %a380 = alloca { ptr, i64, i64 }, align 16 %a381 = alloca { ptr, i64, i64 }, align 16 %a387 = alloca { ptr, i64, i64 }, align 16 %a388 = alloca { ptr, i64, i64 }, align 16 %a394 = alloca { ptr, i64, i64 }, align 16 %a395 = alloca { ptr, i64, i64 }, align 16 %a401 = alloca { ptr, i64, i64 }, align 16 %a402 = alloca { ptr, i64, i64 }, align 16 %a409 = alloca %S.gen.FnSig, align 16 %a410 = alloca %S.gen.FnSig, align 16 store ptr %p0, ptr %a1 store i64 %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 store %S.ast.Type %p3, ptr %a4 store %S.ast.Node %p4, ptr %a5 %t6 = load ptr, ptr %a1 %t7 = icmp eq ptr %t6, null br i1 %t7, label %panic3656, label %ok3657 panic3656: call void @finch_panic(ptr @.str.2310, i64 1483, ptr @.str.2311) unreachable ok3657: %t8 = getelementptr inbounds %S.gen.Gen, ptr %t6, i32 0, i32 16 %t9 = load i64, ptr %a2 %t10 = load { ptr, i64, i64 }, ptr %t8 %t11 = extractvalue { ptr, i64, i64 } %t10, 1 %t12 = icmp uge i64 %t9, %t11 br i1 %t12, label %range3658, label %inrange3659 range3658: call void @finch_panic_index(ptr @.str.2312, i64 1483, i64 %t9, i64 %t11) unreachable inrange3659: %t13 = extractvalue { ptr, i64, i64 } %t10, 0 %t14 = getelementptr inbounds %S.gen.Template, ptr %t13, i64 %t9 %t15 = load %S.gen.Template, ptr %t14 store %S.gen.Template %t15, ptr %a16 call void @finch.copy.S_gen_Template(ptr %a17, ptr %a16) %t18 = load %S.gen.Template, ptr %a17 store %S.gen.Template %t18, ptr %a19 %t20 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 1 %t21 = load { ptr, i64, i64 }, ptr %t20 store { ptr, i64, i64 } %t21, ptr %a23 store { ptr, i64, i64 } { ptr @.str.2313, i64 1, i64 0 }, ptr %a24 call void @finch_str_concat(ptr %a22, ptr %a23, ptr %a24) %t25 = load { ptr, i64, i64 }, ptr %a22 %t26 = load { ptr, i64, i64 }, ptr %a3 %t27 = call { ptr, i64, i64 } @finch.gen.shownTypes({ ptr, i64, i64 } %t26) store { ptr, i64, i64 } %t25, ptr %a29 store { ptr, i64, i64 } %t27, ptr %a30 call void @finch_str_concat(ptr %a28, ptr %a29, ptr %a30) %t31 = load { ptr, i64, i64 }, ptr %a28 store { ptr, i64, i64 } %t31, ptr %a33 store { ptr, i64, i64 } { ptr @.str.2314, i64 1, i64 0 }, ptr %a34 call void @finch_str_concat(ptr %a32, ptr %a33, ptr %a34) %t35 = load { ptr, i64, i64 }, ptr %a32 store { ptr, i64, i64 } %t35, ptr %a36 %t37 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 2 %t38 = getelementptr inbounds { ptr, i64, i64 }, ptr %t37, i32 0, i32 1 %t39 = load i64, ptr %t38 %t40 = icmp sgt i64 %t39, 0 br i1 %t40, label %then3660, label %else3661 then3660: %t41 = load ptr, ptr %a1 %t42 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 0 %t43 = load { ptr, i64, i64 }, ptr %t42 %t44 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 2 %t45 = load { ptr, i64, i64 }, ptr %t44 %t46 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 1 %t47 = load { ptr, i64, i64 }, ptr %t46 %t48 = call i64 @finch.gen.findMethod(ptr %t41, { ptr, i64, i64 } %t43, { ptr, i64, i64 } %t45, { ptr, i64, i64 } %t47) store i64 %t48, ptr %a49 %t50 = load i64, ptr %a49 %t51 = icmp sge i64 %t50, 0 br i1 %t51, label %then3663, label %endif3665 then3663: %t52 = load i64, ptr %a49 ret i64 %t52 endif3665: br label %endif3662 else3661: %t53 = load ptr, ptr %a1 %t54 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 0 %t55 = load { ptr, i64, i64 }, ptr %t54 %t56 = load { ptr, i64, i64 }, ptr %a36 %t57 = call i64 @finch.gen.findFn(ptr %t53, { ptr, i64, i64 } %t55, { ptr, i64, i64 } %t56) store i64 %t57, ptr %a58 %t59 = load i64, ptr %a58 %t60 = icmp sge i64 %t59, 0 br i1 %t60, label %then3666, label %endif3668 then3666: %t61 = load i64, ptr %a58 ret i64 %t61 endif3668: br label %endif3662 endif3662: %t62 = load ptr, ptr %a1 %t63 = icmp eq ptr %t62, null br i1 %t63, label %panic3669, label %ok3670 panic3669: call void @finch_panic(ptr @.str.2315, i64 1496, ptr @.str.2316) unreachable ok3670: %t64 = getelementptr inbounds %S.gen.Gen, ptr %t62, i32 0, i32 0 %t65 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 4 %t66 = load i64, ptr %t65 %t67 = load { ptr, i64, i64 }, ptr %t64 %t68 = extractvalue { ptr, i64, i64 } %t67, 1 %t69 = icmp uge i64 %t66, %t68 br i1 %t69, label %range3671, label %inrange3672 range3671: call void @finch_panic_index(ptr @.str.2317, i64 1496, i64 %t66, i64 %t68) unreachable inrange3672: %t70 = extractvalue { ptr, i64, i64 } %t67, 0 %t71 = getelementptr inbounds %S.ast.Program, ptr %t70, i64 %t66 %t72 = getelementptr inbounds %S.ast.Program, ptr %t71, i32 0, i32 8 %t73 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 5 %t74 = load i64, ptr %t73 %t75 = load { ptr, i64, i64 }, ptr %t72 %t76 = extractvalue { ptr, i64, i64 } %t75, 1 %t77 = icmp uge i64 %t74, %t76 br i1 %t77, label %range3673, label %inrange3674 range3673: call void @finch_panic_index(ptr @.str.2318, i64 1496, i64 %t74, i64 %t76) unreachable inrange3674: %t78 = extractvalue { ptr, i64, i64 } %t75, 0 %t79 = getelementptr inbounds %S.ast.Node, ptr %t78, i64 %t74 %t80 = load %S.ast.Node, ptr %t79 store %S.ast.Node %t80, ptr %a81 call void @finch.copy.S_ast_Node(ptr %a82, ptr %a81) %t83 = load %S.ast.Node, ptr %a82 store %S.ast.Node %t83, ptr %a84 %t85 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 0 %t86 = load { ptr, i64, i64 }, ptr %t85 store { ptr, i64, i64 } %t86, ptr %a87 call void @finch_str_copy(ptr %a88, ptr %a87) %t89 = load { ptr, i64, i64 }, ptr %a88 %t90 = insertvalue %S.gen.FnSig zeroinitializer, { ptr, i64, i64 } %t89, 0 %t91 = load { ptr, i64, i64 }, ptr %a36 store { ptr, i64, i64 } %t91, ptr %a92 call void @finch_str_copy(ptr %a93, ptr %a92) %t94 = load { ptr, i64, i64 }, ptr %a93 %t95 = insertvalue %S.gen.FnSig %t90, { ptr, i64, i64 } %t94, 1 %t96 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 0 %t97 = load { ptr, i64, i64 }, ptr %t96 store { ptr, i64, i64 } %t97, ptr %a98 call void @finch_str_copy(ptr %a99, ptr %a98) %t100 = load { ptr, i64, i64 }, ptr %a99 %t101 = insertvalue %S.gen.FnSig %t95, { ptr, i64, i64 } %t100, 3 %t102 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 3 %t103 = load { ptr, i64, i64 }, ptr %t102 store { ptr, i64, i64 } %t103, ptr %a104 call void @finch.copy.arr_str(ptr %a105, ptr %a104) %t106 = load { ptr, i64, i64 }, ptr %a105 %t107 = insertvalue %S.gen.FnSig %t101, { ptr, i64, i64 } %t106, 6 %t108 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t108, ptr %a109 call void @finch.copy.arr_S_ast_Type(ptr %a110, ptr %a109) %t111 = load { ptr, i64, i64 }, ptr %a110 %t112 = insertvalue %S.gen.FnSig %t107, { ptr, i64, i64 } %t111, 7 %t113 = load { ptr, i64, i64 }, ptr %a36 store { ptr, i64, i64 } %t113, ptr %a114 call void @finch_str_copy(ptr %a115, ptr %a114) %t116 = load { ptr, i64, i64 }, ptr %a115 %t117 = insertvalue %S.gen.FnSig %t112, { ptr, i64, i64 } %t116, 8 %t118 = getelementptr inbounds %S.ast.Node, ptr %a84, i32 0, i32 7 %t119 = load i1, ptr %t118 %t120 = insertvalue %S.gen.FnSig %t117, i1 %t119, 9 %t121 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 7 %t122 = load i1, ptr %t121 %t123 = insertvalue %S.gen.FnSig %t120, i1 %t122, 10 %t124 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 4 %t125 = load i64, ptr %t124 %t126 = insertvalue %S.gen.FnSig %t123, i64 %t125, 16 %t127 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 5 %t128 = load i64, ptr %t127 %t129 = insertvalue %S.gen.FnSig %t126, i64 %t128, 17 store %S.gen.FnSig %t129, ptr %a130 %t131 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 0 %t132 = load { ptr, i64, i64 }, ptr %t131 %t133 = call { ptr, i64, i64 } @finch.gen.modName({ ptr, i64, i64 } %t132) store { ptr, i64, i64 } { ptr @.str.2319, i64 7, i64 0 }, ptr %a135 store { ptr, i64, i64 } %t133, ptr %a136 call void @finch_str_concat(ptr %a134, ptr %a135, ptr %a136) %t137 = load { ptr, i64, i64 }, ptr %a134 store { ptr, i64, i64 } %t137, ptr %a139 store { ptr, i64, i64 } { ptr @.str.2320, i64 1, i64 0 }, ptr %a140 call void @finch_str_concat(ptr %a138, ptr %a139, ptr %a140) %t141 = load { ptr, i64, i64 }, ptr %a138 %t142 = load { ptr, i64, i64 }, ptr %a36 %t143 = call { ptr, i64, i64 } @finch.gen.mangle({ ptr, i64, i64 } %t142) store { ptr, i64, i64 } %t141, ptr %a145 store { ptr, i64, i64 } %t143, ptr %a146 call void @finch_str_concat(ptr %a144, ptr %a145, ptr %a146) %t147 = load { ptr, i64, i64 }, ptr %a144 %t148 = getelementptr inbounds %S.gen.FnSig, ptr %a130, i32 0, i32 11 store { ptr, i64, i64 } %t147, ptr %t148 %t149 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 2 %t150 = getelementptr inbounds { ptr, i64, i64 }, ptr %t149, i32 0, i32 1 %t151 = load i64, ptr %t150 %t152 = icmp sgt i64 %t151, 0 br i1 %t152, label %then3675, label %endif3677 then3675: %t153 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 1 %t154 = load { ptr, i64, i64 }, ptr %t153 %t155 = getelementptr inbounds %S.gen.FnSig, ptr %a130, i32 0, i32 1 store { ptr, i64, i64 } %t154, ptr %a156 call void @finch_str_copy(ptr %a157, ptr %a156) %t158 = load { ptr, i64, i64 }, ptr %a157 store { ptr, i64, i64 } %t158, ptr %t155 %t159 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 2 %t160 = load { ptr, i64, i64 }, ptr %t159 %t161 = getelementptr inbounds %S.gen.FnSig, ptr %a130, i32 0, i32 2 store { ptr, i64, i64 } %t160, ptr %a162 call void @finch_str_copy(ptr %a163, ptr %a162) %t164 = load { ptr, i64, i64 }, ptr %a163 store { ptr, i64, i64 } %t164, ptr %t161 %t165 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 2 %t166 = load { ptr, i64, i64 }, ptr %t165 store { ptr, i64, i64 } %t166, ptr %a168 store { ptr, i64, i64 } { ptr @.str.2321, i64 1, i64 0 }, ptr %a169 call void @finch_str_concat(ptr %a167, ptr %a168, ptr %a169) %t170 = load { ptr, i64, i64 }, ptr %a167 %t171 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 1 %t172 = load { ptr, i64, i64 }, ptr %t171 store { ptr, i64, i64 } %t170, ptr %a174 store { ptr, i64, i64 } %t172, ptr %a175 call void @finch_str_concat(ptr %a173, ptr %a174, ptr %a175) %t176 = load { ptr, i64, i64 }, ptr %a173 %t177 = getelementptr inbounds %S.gen.FnSig, ptr %a130, i32 0, i32 8 store { ptr, i64, i64 } %t176, ptr %t177 %t178 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 0 %t179 = load { ptr, i64, i64 }, ptr %t178 %t180 = call { ptr, i64, i64 } @finch.gen.modName({ ptr, i64, i64 } %t179) store { ptr, i64, i64 } { ptr @.str.2322, i64 7, i64 0 }, ptr %a182 store { ptr, i64, i64 } %t180, ptr %a183 call void @finch_str_concat(ptr %a181, ptr %a182, ptr %a183) %t184 = load { ptr, i64, i64 }, ptr %a181 store { ptr, i64, i64 } %t184, ptr %a186 store { ptr, i64, i64 } { ptr @.str.2323, i64 1, i64 0 }, ptr %a187 call void @finch_str_concat(ptr %a185, ptr %a186, ptr %a187) %t188 = load { ptr, i64, i64 }, ptr %a185 %t189 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 2 %t190 = load { ptr, i64, i64 }, ptr %t189 %t191 = call { ptr, i64, i64 } @finch.gen.mangle({ ptr, i64, i64 } %t190) store { ptr, i64, i64 } %t188, ptr %a193 store { ptr, i64, i64 } %t191, ptr %a194 call void @finch_str_concat(ptr %a192, ptr %a193, ptr %a194) %t195 = load { ptr, i64, i64 }, ptr %a192 store { ptr, i64, i64 } %t195, ptr %a197 store { ptr, i64, i64 } { ptr @.str.2324, i64 1, i64 0 }, ptr %a198 call void @finch_str_concat(ptr %a196, ptr %a197, ptr %a198) %t199 = load { ptr, i64, i64 }, ptr %a196 %t200 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 1 %t201 = load { ptr, i64, i64 }, ptr %t200 store { ptr, i64, i64 } %t199, ptr %a203 store { ptr, i64, i64 } %t201, ptr %a204 call void @finch_str_concat(ptr %a202, ptr %a203, ptr %a204) %t205 = load { ptr, i64, i64 }, ptr %a202 %t206 = getelementptr inbounds %S.gen.FnSig, ptr %a130, i32 0, i32 11 store { ptr, i64, i64 } %t205, ptr %t206 br label %endif3677 endif3677: %t207 = load ptr, ptr %a1 %t208 = icmp eq ptr %t207, null br i1 %t208, label %panic3678, label %ok3679 panic3678: call void @finch_panic(ptr @.str.2325, i64 1505, ptr @.str.2326) unreachable ok3679: %t209 = getelementptr inbounds %S.gen.Gen, ptr %t207, i32 0, i32 17 %t210 = load { ptr, i64, i64 }, ptr %t209 store { ptr, i64, i64 } %t210, ptr %a211 call void @finch.copy.arr_str(ptr %a212, ptr %a211) %t213 = load { ptr, i64, i64 }, ptr %a212 store { ptr, i64, i64 } %t213, ptr %a214 %t215 = load ptr, ptr %a1 %t216 = icmp eq ptr %t215, null br i1 %t216, label %panic3680, label %ok3681 panic3680: call void @finch_panic(ptr @.str.2327, i64 1506, ptr @.str.2328) unreachable ok3681: %t217 = getelementptr inbounds %S.gen.Gen, ptr %t215, i32 0, i32 18 %t218 = load { ptr, i64, i64 }, ptr %t217 store { ptr, i64, i64 } %t218, ptr %a219 call void @finch.copy.arr_S_ast_Type(ptr %a220, ptr %a219) %t221 = load { ptr, i64, i64 }, ptr %a220 store { ptr, i64, i64 } %t221, ptr %a222 %t223 = load ptr, ptr %a1 %t224 = icmp eq ptr %t223, null br i1 %t224, label %panic3682, label %ok3683 panic3682: call void @finch_panic(ptr @.str.2329, i64 1507, ptr @.str.2330) unreachable ok3683: %t225 = getelementptr inbounds %S.gen.Gen, ptr %t223, i32 0, i32 13 %t226 = load { ptr, i64, i64 }, ptr %t225 store { ptr, i64, i64 } %t226, ptr %a227 call void @finch_str_copy(ptr %a228, ptr %a227) %t229 = load { ptr, i64, i64 }, ptr %a228 store { ptr, i64, i64 } %t229, ptr %a230 %t231 = load ptr, ptr %a1 %t232 = icmp eq ptr %t231, null br i1 %t232, label %panic3684, label %ok3685 panic3684: call void @finch_panic(ptr @.str.2331, i64 1508, ptr @.str.2332) unreachable ok3685: %t233 = getelementptr inbounds %S.gen.Gen, ptr %t231, i32 0, i32 19 %t234 = load { ptr, i64, i64 }, ptr %t233 store { ptr, i64, i64 } %t234, ptr %a235 call void @finch_str_copy(ptr %a236, ptr %a235) %t237 = load { ptr, i64, i64 }, ptr %a236 store { ptr, i64, i64 } %t237, ptr %a238 %t239 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 3 %t240 = load { ptr, i64, i64 }, ptr %t239 %t241 = load ptr, ptr %a1 %t242 = icmp eq ptr %t241, null br i1 %t242, label %panic3686, label %ok3687 panic3686: call void @finch_panic(ptr @.str.2333, i64 1509, ptr @.str.2334) unreachable ok3687: %t243 = getelementptr inbounds %S.gen.Gen, ptr %t241, i32 0, i32 17 store { ptr, i64, i64 } %t240, ptr %a244 call void @finch.copy.arr_str(ptr %a245, ptr %a244) %t246 = load { ptr, i64, i64 }, ptr %a245 store { ptr, i64, i64 } %t246, ptr %t243 %t247 = load { ptr, i64, i64 }, ptr %a3 %t248 = load ptr, ptr %a1 %t249 = icmp eq ptr %t248, null br i1 %t249, label %panic3688, label %ok3689 panic3688: call void @finch_panic(ptr @.str.2335, i64 1510, ptr @.str.2336) unreachable ok3689: %t250 = getelementptr inbounds %S.gen.Gen, ptr %t248, i32 0, i32 18 store { ptr, i64, i64 } %t247, ptr %a251 call void @finch.copy.arr_S_ast_Type(ptr %a252, ptr %a251) %t253 = load { ptr, i64, i64 }, ptr %a252 store { ptr, i64, i64 } %t253, ptr %t250 %t254 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 0 %t255 = load { ptr, i64, i64 }, ptr %t254 %t256 = load ptr, ptr %a1 %t257 = icmp eq ptr %t256, null br i1 %t257, label %panic3690, label %ok3691 panic3690: call void @finch_panic(ptr @.str.2337, i64 1511, ptr @.str.2338) unreachable ok3691: %t258 = getelementptr inbounds %S.gen.Gen, ptr %t256, i32 0, i32 13 store { ptr, i64, i64 } %t255, ptr %a259 call void @finch_str_copy(ptr %a260, ptr %a259) %t261 = load { ptr, i64, i64 }, ptr %a260 store { ptr, i64, i64 } %t261, ptr %t258 %t262 = getelementptr inbounds %S.gen.FnSig, ptr %a130, i32 0, i32 8 %t263 = load { ptr, i64, i64 }, ptr %t262 store { ptr, i64, i64 } { ptr @.str.2339, i64 17, i64 0 }, ptr %a265 store { ptr, i64, i64 } %t263, ptr %a266 call void @finch_str_concat(ptr %a264, ptr %a265, ptr %a266) %t267 = load { ptr, i64, i64 }, ptr %a264 store { ptr, i64, i64 } %t267, ptr %a269 store { ptr, i64, i64 } { ptr @.str.2340, i64 1, i64 0 }, ptr %a270 call void @finch_str_concat(ptr %a268, ptr %a269, ptr %a270) %t271 = load { ptr, i64, i64 }, ptr %a268 %t272 = load ptr, ptr %a1 %t273 = icmp eq ptr %t272, null br i1 %t273, label %panic3692, label %ok3693 panic3692: call void @finch_panic(ptr @.str.2341, i64 1512, ptr @.str.2342) unreachable ok3693: %t274 = getelementptr inbounds %S.gen.Gen, ptr %t272, i32 0, i32 19 store { ptr, i64, i64 } %t271, ptr %t274 %t275 = load ptr, ptr %a1 %t276 = getelementptr inbounds %S.ast.Node, ptr %a84, i32 0, i32 5 %t277 = load %S.ast.Type, ptr %t276 %t278 = load %S.ast.Node, ptr %a84 %t279 = call %S.ast.Type @finch.gen.resolve(ptr %t275, %S.ast.Type %t277, %S.ast.Node %t278) %t280 = getelementptr inbounds %S.gen.FnSig, ptr %a130, i32 0, i32 12 store %S.ast.Type %t279, ptr %t280 %t281 = getelementptr inbounds %S.ast.Node, ptr %a84, i32 0, i32 9 %t282 = getelementptr inbounds %S.ast.Node, ptr %a84, i32 0, i32 9 %t283 = getelementptr inbounds { ptr, i64, i64 }, ptr %t282, i32 0, i32 1 %t284 = load i64, ptr %t283 %t285 = sub i64 %t284, 1 %t286 = load { ptr, i64, i64 }, ptr %t281 %t287 = extractvalue { ptr, i64, i64 } %t286, 1 %t288 = icmp uge i64 %t285, %t287 br i1 %t288, label %range3694, label %inrange3695 range3694: call void @finch_panic_index(ptr @.str.2343, i64 1514, i64 %t285, i64 %t287) unreachable inrange3695: %t289 = extractvalue { ptr, i64, i64 } %t286, 0 %t290 = getelementptr inbounds %S.ast.Node, ptr %t289, i64 %t285 %t291 = load %S.ast.Node, ptr %t290 store %S.ast.Node %t291, ptr %a292 call void @finch.copy.S_ast_Node(ptr %a293, ptr %a292) %t294 = load %S.ast.Node, ptr %a293 store %S.ast.Node %t294, ptr %a295 %t296 = getelementptr inbounds %S.ast.Node, ptr %a84, i32 0, i32 9 %t297 = getelementptr inbounds { ptr, i64, i64 }, ptr %t296, i32 0, i32 1 %t298 = load i64, ptr %t297 %t299 = sub i64 %t298, 1 store i64 0, ptr %a300 br label %for.cond3696 for.cond3696: %t301 = load i64, ptr %a300 %t302 = icmp slt i64 %t301, %t299 br i1 %t302, label %for.body3697, label %for.end3699 for.body3697: %t303 = load ptr, ptr %a1 %t304 = getelementptr inbounds %S.ast.Node, ptr %a84, i32 0, i32 9 %t305 = load i64, ptr %a300 %t306 = load { ptr, i64, i64 }, ptr %t304 %t307 = extractvalue { ptr, i64, i64 } %t306, 1 %t308 = icmp uge i64 %t305, %t307 br i1 %t308, label %range3700, label %inrange3701 range3700: call void @finch_panic_index(ptr @.str.2344, i64 1516, i64 %t305, i64 %t307) unreachable inrange3701: %t309 = extractvalue { ptr, i64, i64 } %t306, 0 %t310 = getelementptr inbounds %S.ast.Node, ptr %t309, i64 %t305 %t311 = getelementptr inbounds %S.ast.Node, ptr %t310, i32 0, i32 5 %t312 = load %S.ast.Type, ptr %t311 %t313 = getelementptr inbounds %S.ast.Node, ptr %a84, i32 0, i32 9 %t314 = load i64, ptr %a300 %t315 = load { ptr, i64, i64 }, ptr %t313 %t316 = extractvalue { ptr, i64, i64 } %t315, 1 %t317 = icmp uge i64 %t314, %t316 br i1 %t317, label %range3702, label %inrange3703 range3702: call void @finch_panic_index(ptr @.str.2345, i64 1516, i64 %t314, i64 %t316) unreachable inrange3703: %t318 = extractvalue { ptr, i64, i64 } %t315, 0 %t319 = getelementptr inbounds %S.ast.Node, ptr %t318, i64 %t314 %t320 = load %S.ast.Node, ptr %t319 %t321 = call %S.ast.Type @finch.gen.resolve(ptr %t303, %S.ast.Type %t312, %S.ast.Node %t320) store %S.ast.Type %t321, ptr %a322 %t323 = getelementptr inbounds %S.gen.FnSig, ptr %a130, i32 0, i32 13 %t324 = getelementptr inbounds { ptr, i64, i64 }, ptr %t323, i32 0, i32 1 %t325 = load %S.ast.Type, ptr %a322 store %S.ast.Type %t325, ptr %a326 call void @finch.copy.S_ast_Type(ptr %a327, ptr %a326) %t328 = load %S.ast.Type, ptr %a327 %t329 = load i64, ptr %t324 %t330 = add i64 %t329, 1 call void @finch_arr_reserve(ptr %t323, i64 %t330, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) %t331 = load ptr, ptr %t323 %t332 = getelementptr inbounds %S.ast.Type, ptr %t331, i64 %t329 store %S.ast.Type %t328, ptr %t332 store i64 %t330, ptr %t324 %t333 = getelementptr inbounds %S.gen.FnSig, ptr %a130, i32 0, i32 14 %t334 = getelementptr inbounds { ptr, i64, i64 }, ptr %t333, i32 0, i32 1 %t335 = getelementptr inbounds %S.ast.Node, ptr %a84, i32 0, i32 9 %t336 = load i64, ptr %a300 %t337 = load { ptr, i64, i64 }, ptr %t335 %t338 = extractvalue { ptr, i64, i64 } %t337, 1 %t339 = icmp uge i64 %t336, %t338 br i1 %t339, label %range3704, label %inrange3705 range3704: call void @finch_panic_index(ptr @.str.2346, i64 1518, i64 %t336, i64 %t338) unreachable inrange3705: %t340 = extractvalue { ptr, i64, i64 } %t337, 0 %t341 = getelementptr inbounds %S.ast.Node, ptr %t340, i64 %t336 %t342 = getelementptr inbounds %S.ast.Node, ptr %t341, i32 0, i32 1 %t343 = load { ptr, i64, i64 }, ptr %t342 store { ptr, i64, i64 } %t343, ptr %a344 call void @finch_str_copy(ptr %a345, ptr %a344) %t346 = load { ptr, i64, i64 }, ptr %a345 %t347 = load i64, ptr %t334 %t348 = add i64 %t347, 1 call void @finch_arr_reserve(ptr %t333, i64 %t348, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t349 = load ptr, ptr %t333 %t350 = getelementptr inbounds { ptr, i64, i64 }, ptr %t349, i64 %t347 store { ptr, i64, i64 } %t346, ptr %t350 store i64 %t348, ptr %t334 %t351 = getelementptr inbounds %S.gen.FnSig, ptr %a130, i32 0, i32 15 %t352 = getelementptr inbounds { ptr, i64, i64 }, ptr %t351, i32 0, i32 1 %t353 = load ptr, ptr %a1 %t354 = load %S.ast.Type, ptr %a322 %t355 = call i1 @finch.gen.owning(ptr %t353, %S.ast.Type %t354) br label %logic.from3706 logic.from3706: br i1 %t355, label %logic.rhs3707, label %logic.end3708 logic.rhs3707: %t356 = load ptr, ptr %a1 %t357 = getelementptr inbounds %S.ast.Node, ptr %a84, i32 0, i32 9 %t358 = load i64, ptr %a300 %t359 = load { ptr, i64, i64 }, ptr %t357 %t360 = extractvalue { ptr, i64, i64 } %t359, 1 %t361 = icmp uge i64 %t358, %t360 br i1 %t361, label %range3709, label %inrange3710 range3709: call void @finch_panic_index(ptr @.str.2347, i64 1519, i64 %t358, i64 %t360) unreachable inrange3710: %t362 = extractvalue { ptr, i64, i64 } %t359, 0 %t363 = getelementptr inbounds %S.ast.Node, ptr %t362, i64 %t358 %t364 = getelementptr inbounds %S.ast.Node, ptr %t363, i32 0, i32 1 %t365 = load { ptr, i64, i64 }, ptr %t364 %t366 = load %S.ast.Node, ptr %a295 %t367 = call i1 @finch.gen.mutates(ptr %t356, { ptr, i64, i64 } %t365, %S.ast.Node %t366) %t368 = xor i1 %t367, true br label %logic.rend3711 logic.rend3711: br label %logic.end3708 logic.end3708: %t369 = phi i1 [ false, %logic.from3706 ], [ %t368, %logic.rend3711 ] %t370 = load i64, ptr %t352 %t371 = add i64 %t370, 1 call void @finch_arr_reserve(ptr %t351, i64 %t371, i64 ptrtoint (ptr getelementptr (i1, ptr null, i32 1) to i64)) %t372 = load ptr, ptr %t351 %t373 = getelementptr inbounds i1, ptr %t372, i64 %t370 store i1 %t369, ptr %t373 store i64 %t371, ptr %t352 br label %for.step3698 for.step3698: %t374 = load i64, ptr %a300 %t375 = add i64 %t374, 1 store i64 %t375, ptr %a300 br label %for.cond3696 for.end3699: %t376 = load { ptr, i64, i64 }, ptr %a214 %t377 = load ptr, ptr %a1 %t378 = icmp eq ptr %t377, null br i1 %t378, label %panic3712, label %ok3713 panic3712: call void @finch_panic(ptr @.str.2348, i64 1521, ptr @.str.2349) unreachable ok3713: %t379 = getelementptr inbounds %S.gen.Gen, ptr %t377, i32 0, i32 17 store { ptr, i64, i64 } %t376, ptr %a380 call void @finch.copy.arr_str(ptr %a381, ptr %a380) %t382 = load { ptr, i64, i64 }, ptr %a381 store { ptr, i64, i64 } %t382, ptr %t379 %t383 = load { ptr, i64, i64 }, ptr %a222 %t384 = load ptr, ptr %a1 %t385 = icmp eq ptr %t384, null br i1 %t385, label %panic3714, label %ok3715 panic3714: call void @finch_panic(ptr @.str.2350, i64 1522, ptr @.str.2351) unreachable ok3715: %t386 = getelementptr inbounds %S.gen.Gen, ptr %t384, i32 0, i32 18 store { ptr, i64, i64 } %t383, ptr %a387 call void @finch.copy.arr_S_ast_Type(ptr %a388, ptr %a387) %t389 = load { ptr, i64, i64 }, ptr %a388 store { ptr, i64, i64 } %t389, ptr %t386 %t390 = load { ptr, i64, i64 }, ptr %a230 %t391 = load ptr, ptr %a1 %t392 = icmp eq ptr %t391, null br i1 %t392, label %panic3716, label %ok3717 panic3716: call void @finch_panic(ptr @.str.2352, i64 1523, ptr @.str.2353) unreachable ok3717: %t393 = getelementptr inbounds %S.gen.Gen, ptr %t391, i32 0, i32 13 store { ptr, i64, i64 } %t390, ptr %a394 call void @finch_str_copy(ptr %a395, ptr %a394) %t396 = load { ptr, i64, i64 }, ptr %a395 store { ptr, i64, i64 } %t396, ptr %t393 %t397 = load { ptr, i64, i64 }, ptr %a238 %t398 = load ptr, ptr %a1 %t399 = icmp eq ptr %t398, null br i1 %t399, label %panic3718, label %ok3719 panic3718: call void @finch_panic(ptr @.str.2354, i64 1524, ptr @.str.2355) unreachable ok3719: %t400 = getelementptr inbounds %S.gen.Gen, ptr %t398, i32 0, i32 19 store { ptr, i64, i64 } %t397, ptr %a401 call void @finch_str_copy(ptr %a402, ptr %a401) %t403 = load { ptr, i64, i64 }, ptr %a402 store { ptr, i64, i64 } %t403, ptr %t400 %t404 = load ptr, ptr %a1 %t405 = icmp eq ptr %t404, null br i1 %t405, label %panic3720, label %ok3721 panic3720: call void @finch_panic(ptr @.str.2356, i64 1525, ptr @.str.2357) unreachable ok3721: %t406 = getelementptr inbounds %S.gen.Gen, ptr %t404, i32 0, i32 14 %t407 = getelementptr inbounds { ptr, i64, i64 }, ptr %t406, i32 0, i32 1 %t408 = load %S.gen.FnSig, ptr %a130 store %S.gen.FnSig %t408, ptr %a409 call void @finch.copy.S_gen_FnSig(ptr %a410, ptr %a409) %t411 = load %S.gen.FnSig, ptr %a410 %t412 = load i64, ptr %t407 %t413 = add i64 %t412, 1 call void @finch_arr_reserve(ptr %t406, i64 %t413, i64 ptrtoint (ptr getelementptr (%S.gen.FnSig, ptr null, i32 1) to i64)) %t414 = load ptr, ptr %t406 %t415 = getelementptr inbounds %S.gen.FnSig, ptr %t414, i64 %t412 store %S.gen.FnSig %t411, ptr %t415 store i64 %t413, ptr %t407 %t416 = load ptr, ptr %a1 %t417 = icmp eq ptr %t416, null br i1 %t417, label %panic3722, label %ok3723 panic3722: call void @finch_panic(ptr @.str.2358, i64 1526, ptr @.str.2359) unreachable ok3723: %t418 = getelementptr inbounds %S.gen.Gen, ptr %t416, i32 0, i32 14 %t419 = getelementptr inbounds { ptr, i64, i64 }, ptr %t418, i32 0, i32 1 %t420 = load i64, ptr %t419 %t421 = sub i64 %t420, 1 ret i64 %t421 } define internal void @finch.gen.bindType(ptr %p0, %S.ast.Type %p1, %S.ast.Type %p2, { ptr, i64, i64 } %p3, ptr %p4) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Type, align 16 %a3 = alloca %S.ast.Type, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca ptr, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca i64, align 16 %a28 = alloca i64, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca i64, align 16 %a47 = alloca i64, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca i64, align 16 %a80 = alloca %S.ast.Type, align 16 %a81 = alloca %S.ast.Type, align 16 %a94 = alloca { ptr, i64, i64 }, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca { ptr, i64, i64 }, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a121 = alloca { ptr, i64, i64 }, align 16 %a122 = alloca { ptr, i64, i64 }, align 16 %a150 = alloca { ptr, i64, i64 }, align 16 %a151 = alloca { ptr, i64, i64 }, align 16 %a156 = alloca { ptr, i64, i64 }, align 16 %a157 = alloca { ptr, i64, i64 }, align 16 %a197 = alloca { ptr, i64, i64 }, align 16 %a198 = alloca { ptr, i64, i64 }, align 16 %a208 = alloca { ptr, i64, i64 }, align 16 %a209 = alloca { ptr, i64, i64 }, align 16 %a228 = alloca %S.gen.StructDef, align 16 %a229 = alloca %S.gen.StructDef, align 16 %a231 = alloca %S.gen.StructDef, align 16 %a236 = alloca { ptr, i64, i64 }, align 16 %a237 = alloca { ptr, i64, i64 }, align 16 %a251 = alloca i64, align 16 store ptr %p0, ptr %a1 store %S.ast.Type %p1, ptr %a2 store %S.ast.Type %p2, ptr %a3 store { ptr, i64, i64 } %p3, ptr %a4 store ptr %p4, ptr %a5 %t6 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t7 = load { ptr, i64, i64 }, ptr %t6 store { ptr, i64, i64 } %t7, ptr %a8 store { ptr, i64, i64 } { ptr @.str.2360, i64 5, i64 0 }, ptr %a9 %t10 = call i32 @finch_str_eq(ptr %a8, ptr %a9) %t11 = icmp ne i32 %t10, 0 br label %logic.from3724 logic.from3724: br i1 %t11, label %logic.rhs3725, label %logic.end3726 logic.rhs3725: %t12 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t12, i32 0, i32 1 %t14 = load i64, ptr %t13 %t15 = icmp eq i64 %t14, 0 br label %logic.rend3727 logic.rend3727: br label %logic.end3726 logic.end3726: %t16 = phi i1 [ false, %logic.from3724 ], [ %t15, %logic.rend3727 ] br label %logic.from3728 logic.from3728: br i1 %t16, label %logic.rhs3729, label %logic.end3730 logic.rhs3729: %t17 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t17, i32 0, i32 1 %t19 = load i64, ptr %t18 %t20 = icmp eq i64 %t19, 0 br label %logic.rend3731 logic.rend3731: br label %logic.end3730 logic.end3730: %t21 = phi i1 [ false, %logic.from3728 ], [ %t20, %logic.rend3731 ] br label %logic.from3732 logic.from3732: br i1 %t21, label %logic.rhs3733, label %logic.end3734 logic.rhs3733: %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 %t23 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t24 = load { ptr, i64, i64 }, ptr %t23 store i64 -1, ptr %a25 %t26 = load i64, ptr %t22 %t27 = load ptr, ptr %a4 store i64 0, ptr %a28 br label %find.cond3735 find.cond3735: %t29 = load i64, ptr %a28 %t30 = icmp slt i64 %t29, %t26 br i1 %t30, label %find.body3736, label %find.end3739 find.body3736: %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t27, i64 %t29 %t32 = load { ptr, i64, i64 }, ptr %t31 store { ptr, i64, i64 } %t32, ptr %a33 store { ptr, i64, i64 } %t24, ptr %a34 %t35 = call i32 @finch_str_eq(ptr %a33, ptr %a34) %t36 = icmp ne i32 %t35, 0 br i1 %t36, label %find.hit3737, label %find.next3738 find.hit3737: store i64 %t29, ptr %a25 br label %find.end3739 find.next3738: %t37 = add i64 %t29, 1 store i64 %t37, ptr %a28 br label %find.cond3735 find.end3739: %t38 = load i64, ptr %a25 %t39 = icmp sge i64 %t38, 0 br label %logic.rend3740 logic.rend3740: br label %logic.end3734 logic.end3734: %t40 = phi i1 [ false, %logic.from3732 ], [ %t39, %logic.rend3740 ] br i1 %t40, label %then3741, label %endif3743 then3741: %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 %t42 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t43 = load { ptr, i64, i64 }, ptr %t42 store i64 -1, ptr %a44 %t45 = load i64, ptr %t41 %t46 = load ptr, ptr %a4 store i64 0, ptr %a47 br label %find.cond3744 find.cond3744: %t48 = load i64, ptr %a47 %t49 = icmp slt i64 %t48, %t45 br i1 %t49, label %find.body3745, label %find.end3748 find.body3745: %t50 = getelementptr inbounds { ptr, i64, i64 }, ptr %t46, i64 %t48 %t51 = load { ptr, i64, i64 }, ptr %t50 store { ptr, i64, i64 } %t51, ptr %a52 store { ptr, i64, i64 } %t43, ptr %a53 %t54 = call i32 @finch_str_eq(ptr %a52, ptr %a53) %t55 = icmp ne i32 %t54, 0 br i1 %t55, label %find.hit3746, label %find.next3747 find.hit3746: store i64 %t48, ptr %a44 br label %find.end3748 find.next3747: %t56 = add i64 %t48, 1 store i64 %t56, ptr %a47 br label %find.cond3744 find.end3748: %t57 = load i64, ptr %a44 store i64 %t57, ptr %a58 %t59 = load ptr, ptr %a5 %t60 = icmp eq ptr %t59, null br i1 %t60, label %panic3749, label %ok3750 panic3749: call void @finch_panic(ptr @.str.2361, i64 1533, ptr @.str.2362) unreachable ok3750: %t61 = getelementptr inbounds %S.gen.Binds, ptr %t59, i32 0, i32 1 %t62 = load i64, ptr %a58 %t63 = load { ptr, i64, i64 }, ptr %t61 %t64 = extractvalue { ptr, i64, i64 } %t63, 1 %t65 = icmp uge i64 %t62, %t64 br i1 %t65, label %range3751, label %inrange3752 range3751: call void @finch_panic_index(ptr @.str.2363, i64 1533, i64 %t62, i64 %t64) unreachable inrange3752: %t66 = extractvalue { ptr, i64, i64 } %t63, 0 %t67 = getelementptr inbounds i1, ptr %t66, i64 %t62 %t68 = load i1, ptr %t67 %t69 = xor i1 %t68, true br i1 %t69, label %then3753, label %endif3755 then3753: %t70 = load %S.ast.Type, ptr %a3 %t71 = load ptr, ptr %a5 %t72 = icmp eq ptr %t71, null br i1 %t72, label %panic3756, label %ok3757 panic3756: call void @finch_panic(ptr @.str.2364, i64 1534, ptr @.str.2365) unreachable ok3757: %t73 = getelementptr inbounds %S.gen.Binds, ptr %t71, i32 0, i32 0 %t74 = load i64, ptr %a58 %t75 = load { ptr, i64, i64 }, ptr %t73 %t76 = extractvalue { ptr, i64, i64 } %t75, 1 %t77 = icmp uge i64 %t74, %t76 br i1 %t77, label %range3758, label %inrange3759 range3758: call void @finch_panic_index(ptr @.str.2366, i64 1534, i64 %t74, i64 %t76) unreachable inrange3759: %t78 = extractvalue { ptr, i64, i64 } %t75, 0 %t79 = getelementptr inbounds %S.ast.Type, ptr %t78, i64 %t74 store %S.ast.Type %t70, ptr %a80 call void @finch.copy.S_ast_Type(ptr %a81, ptr %a80) %t82 = load %S.ast.Type, ptr %a81 store %S.ast.Type %t82, ptr %t79 %t83 = load ptr, ptr %a5 %t84 = icmp eq ptr %t83, null br i1 %t84, label %panic3760, label %ok3761 panic3760: call void @finch_panic(ptr @.str.2367, i64 1535, ptr @.str.2368) unreachable ok3761: %t85 = getelementptr inbounds %S.gen.Binds, ptr %t83, i32 0, i32 1 %t86 = load i64, ptr %a58 %t87 = load { ptr, i64, i64 }, ptr %t85 %t88 = extractvalue { ptr, i64, i64 } %t87, 1 %t89 = icmp uge i64 %t86, %t88 br i1 %t89, label %range3762, label %inrange3763 range3762: call void @finch_panic_index(ptr @.str.2369, i64 1535, i64 %t86, i64 %t88) unreachable inrange3763: %t90 = extractvalue { ptr, i64, i64 } %t87, 0 %t91 = getelementptr inbounds i1, ptr %t90, i64 %t86 store i1 true, ptr %t91 br label %endif3755 endif3755: ret void endif3743: %t92 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t93 = load { ptr, i64, i64 }, ptr %t92 store { ptr, i64, i64 } %t93, ptr %a94 store { ptr, i64, i64 } { ptr @.str.2370, i64 5, i64 0 }, ptr %a95 %t96 = call i32 @finch_str_eq(ptr %a94, ptr %a95) %t97 = icmp ne i32 %t96, 0 br label %logic.from3764 logic.from3764: br i1 %t97, label %logic.end3766, label %logic.rhs3765 logic.rhs3765: %t98 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t99 = load { ptr, i64, i64 }, ptr %t98 store { ptr, i64, i64 } %t99, ptr %a100 store { ptr, i64, i64 } { ptr @.str.2371, i64 3, i64 0 }, ptr %a101 %t102 = call i32 @finch_str_eq(ptr %a100, ptr %a101) %t103 = icmp ne i32 %t102, 0 br label %logic.rend3767 logic.rend3767: br label %logic.end3766 logic.end3766: %t104 = phi i1 [ true, %logic.from3764 ], [ %t103, %logic.rend3767 ] br label %logic.from3768 logic.from3768: br i1 %t104, label %logic.end3770, label %logic.rhs3769 logic.rhs3769: %t105 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t106 = load { ptr, i64, i64 }, ptr %t105 store { ptr, i64, i64 } %t106, ptr %a107 store { ptr, i64, i64 } { ptr @.str.2372, i64 5, i64 0 }, ptr %a108 %t109 = call i32 @finch_str_eq(ptr %a107, ptr %a108) %t110 = icmp ne i32 %t109, 0 br label %logic.rend3771 logic.rend3771: br label %logic.end3770 logic.end3770: %t111 = phi i1 [ true, %logic.from3768 ], [ %t110, %logic.rend3771 ] br label %logic.from3772 logic.from3772: br i1 %t111, label %logic.rhs3773, label %logic.end3774 logic.rhs3773: %t112 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t113 = getelementptr inbounds { ptr, i64, i64 }, ptr %t112, i32 0, i32 1 %t114 = load i64, ptr %t113 %t115 = icmp sgt i64 %t114, 0 br label %logic.rend3775 logic.rend3775: br label %logic.end3774 logic.end3774: %t116 = phi i1 [ false, %logic.from3772 ], [ %t115, %logic.rend3775 ] br label %logic.from3776 logic.from3776: br i1 %t116, label %logic.rhs3777, label %logic.end3778 logic.rhs3777: %t117 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 %t118 = load { ptr, i64, i64 }, ptr %t117 %t119 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t120 = load { ptr, i64, i64 }, ptr %t119 store { ptr, i64, i64 } %t118, ptr %a121 store { ptr, i64, i64 } %t120, ptr %a122 %t123 = call i32 @finch_str_eq(ptr %a121, ptr %a122) %t124 = icmp ne i32 %t123, 0 br label %logic.rend3779 logic.rend3779: br label %logic.end3778 logic.end3778: %t125 = phi i1 [ false, %logic.from3776 ], [ %t124, %logic.rend3779 ] br label %logic.from3780 logic.from3780: br i1 %t125, label %logic.rhs3781, label %logic.end3782 logic.rhs3781: %t126 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 %t127 = getelementptr inbounds { ptr, i64, i64 }, ptr %t126, i32 0, i32 1 %t128 = load i64, ptr %t127 %t129 = icmp sgt i64 %t128, 0 br label %logic.rend3783 logic.rend3783: br label %logic.end3782 logic.end3782: %t130 = phi i1 [ false, %logic.from3780 ], [ %t129, %logic.rend3783 ] br i1 %t130, label %then3784, label %endif3786 then3784: %t131 = load ptr, ptr %a1 %t132 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t133 = load { ptr, i64, i64 }, ptr %t132 %t134 = extractvalue { ptr, i64, i64 } %t133, 1 %t135 = icmp uge i64 0, %t134 br i1 %t135, label %range3787, label %inrange3788 range3787: call void @finch_panic_index(ptr @.str.2373, i64 1540, i64 0, i64 %t134) unreachable inrange3788: %t136 = extractvalue { ptr, i64, i64 } %t133, 0 %t137 = getelementptr inbounds %S.ast.Type, ptr %t136, i64 0 %t138 = load %S.ast.Type, ptr %t137 %t139 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 %t140 = load { ptr, i64, i64 }, ptr %t139 %t141 = extractvalue { ptr, i64, i64 } %t140, 1 %t142 = icmp uge i64 0, %t141 br i1 %t142, label %range3789, label %inrange3790 range3789: call void @finch_panic_index(ptr @.str.2374, i64 1540, i64 0, i64 %t141) unreachable inrange3790: %t143 = extractvalue { ptr, i64, i64 } %t140, 0 %t144 = getelementptr inbounds %S.ast.Type, ptr %t143, i64 0 %t145 = load %S.ast.Type, ptr %t144 %t146 = load { ptr, i64, i64 }, ptr %a4 %t147 = load ptr, ptr %a5 call void @finch.gen.bindType(ptr %t131, %S.ast.Type %t138, %S.ast.Type %t145, { ptr, i64, i64 } %t146, ptr %t147) ret void endif3786: %t148 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t149 = load { ptr, i64, i64 }, ptr %t148 store { ptr, i64, i64 } %t149, ptr %a150 store { ptr, i64, i64 } { ptr @.str.2375, i64 3, i64 0 }, ptr %a151 %t152 = call i32 @finch_str_eq(ptr %a150, ptr %a151) %t153 = icmp ne i32 %t152, 0 br label %logic.from3791 logic.from3791: br i1 %t153, label %logic.rhs3792, label %logic.end3793 logic.rhs3792: %t154 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 %t155 = load { ptr, i64, i64 }, ptr %t154 store { ptr, i64, i64 } %t155, ptr %a156 store { ptr, i64, i64 } { ptr @.str.2376, i64 3, i64 0 }, ptr %a157 %t158 = call i32 @finch_str_eq(ptr %a156, ptr %a157) %t159 = icmp ne i32 %t158, 0 br label %logic.rend3794 logic.rend3794: br label %logic.end3793 logic.end3793: %t160 = phi i1 [ false, %logic.from3791 ], [ %t159, %logic.rend3794 ] br i1 %t160, label %then3795, label %endif3797 then3795: %t161 = load ptr, ptr %a1 %t162 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t163 = load { ptr, i64, i64 }, ptr %t162 %t164 = extractvalue { ptr, i64, i64 } %t163, 1 %t165 = icmp uge i64 0, %t164 br i1 %t165, label %range3798, label %inrange3799 range3798: call void @finch_panic_index(ptr @.str.2377, i64 1544, i64 0, i64 %t164) unreachable inrange3799: %t166 = extractvalue { ptr, i64, i64 } %t163, 0 %t167 = getelementptr inbounds %S.ast.Type, ptr %t166, i64 0 %t168 = load %S.ast.Type, ptr %t167 %t169 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 %t170 = load { ptr, i64, i64 }, ptr %t169 %t171 = extractvalue { ptr, i64, i64 } %t170, 1 %t172 = icmp uge i64 0, %t171 br i1 %t172, label %range3800, label %inrange3801 range3800: call void @finch_panic_index(ptr @.str.2378, i64 1544, i64 0, i64 %t171) unreachable inrange3801: %t173 = extractvalue { ptr, i64, i64 } %t170, 0 %t174 = getelementptr inbounds %S.ast.Type, ptr %t173, i64 0 %t175 = load %S.ast.Type, ptr %t174 %t176 = load { ptr, i64, i64 }, ptr %a4 %t177 = load ptr, ptr %a5 call void @finch.gen.bindType(ptr %t161, %S.ast.Type %t168, %S.ast.Type %t175, { ptr, i64, i64 } %t176, ptr %t177) %t178 = load ptr, ptr %a1 %t179 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t180 = load { ptr, i64, i64 }, ptr %t179 %t181 = extractvalue { ptr, i64, i64 } %t180, 1 %t182 = icmp uge i64 1, %t181 br i1 %t182, label %range3802, label %inrange3803 range3802: call void @finch_panic_index(ptr @.str.2379, i64 1545, i64 1, i64 %t181) unreachable inrange3803: %t183 = extractvalue { ptr, i64, i64 } %t180, 0 %t184 = getelementptr inbounds %S.ast.Type, ptr %t183, i64 1 %t185 = load %S.ast.Type, ptr %t184 %t186 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 %t187 = load { ptr, i64, i64 }, ptr %t186 %t188 = extractvalue { ptr, i64, i64 } %t187, 1 %t189 = icmp uge i64 1, %t188 br i1 %t189, label %range3804, label %inrange3805 range3804: call void @finch_panic_index(ptr @.str.2380, i64 1545, i64 1, i64 %t188) unreachable inrange3805: %t190 = extractvalue { ptr, i64, i64 } %t187, 0 %t191 = getelementptr inbounds %S.ast.Type, ptr %t190, i64 1 %t192 = load %S.ast.Type, ptr %t191 %t193 = load { ptr, i64, i64 }, ptr %a4 %t194 = load ptr, ptr %a5 call void @finch.gen.bindType(ptr %t178, %S.ast.Type %t185, %S.ast.Type %t192, { ptr, i64, i64 } %t193, ptr %t194) ret void endif3797: %t195 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t196 = load { ptr, i64, i64 }, ptr %t195 store { ptr, i64, i64 } %t196, ptr %a197 store { ptr, i64, i64 } { ptr @.str.2381, i64 5, i64 0 }, ptr %a198 %t199 = call i32 @finch_str_eq(ptr %a197, ptr %a198) %t200 = icmp ne i32 %t199, 0 br label %logic.from3806 logic.from3806: br i1 %t200, label %logic.rhs3807, label %logic.end3808 logic.rhs3807: %t201 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t202 = getelementptr inbounds { ptr, i64, i64 }, ptr %t201, i32 0, i32 1 %t203 = load i64, ptr %t202 %t204 = icmp sgt i64 %t203, 0 br label %logic.rend3809 logic.rend3809: br label %logic.end3808 logic.end3808: %t205 = phi i1 [ false, %logic.from3806 ], [ %t204, %logic.rend3809 ] br label %logic.from3810 logic.from3810: br i1 %t205, label %logic.rhs3811, label %logic.end3812 logic.rhs3811: %t206 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 %t207 = load { ptr, i64, i64 }, ptr %t206 store { ptr, i64, i64 } %t207, ptr %a208 store { ptr, i64, i64 } { ptr @.str.2382, i64 6, i64 0 }, ptr %a209 %t210 = call i32 @finch_str_eq(ptr %a208, ptr %a209) %t211 = icmp ne i32 %t210, 0 br label %logic.rend3813 logic.rend3813: br label %logic.end3812 logic.end3812: %t212 = phi i1 [ false, %logic.from3810 ], [ %t211, %logic.rend3813 ] br i1 %t212, label %then3814, label %endif3816 then3814: %t213 = load ptr, ptr %a1 %t214 = icmp eq ptr %t213, null br i1 %t214, label %panic3817, label %ok3818 panic3817: call void @finch_panic(ptr @.str.2383, i64 1549, ptr @.str.2384) unreachable ok3818: %t215 = getelementptr inbounds %S.gen.Gen, ptr %t213, i32 0, i32 15 %t216 = load ptr, ptr %a1 %t217 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 3 %t218 = load { ptr, i64, i64 }, ptr %t217 %t219 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 2 %t220 = load { ptr, i64, i64 }, ptr %t219 %t221 = call i64 @finch.gen.findStruct(ptr %t216, { ptr, i64, i64 } %t218, { ptr, i64, i64 } %t220) %t222 = load { ptr, i64, i64 }, ptr %t215 %t223 = extractvalue { ptr, i64, i64 } %t222, 1 %t224 = icmp uge i64 %t221, %t223 br i1 %t224, label %range3819, label %inrange3820 range3819: call void @finch_panic_index(ptr @.str.2385, i64 1549, i64 %t221, i64 %t223) unreachable inrange3820: %t225 = extractvalue { ptr, i64, i64 } %t222, 0 %t226 = getelementptr inbounds %S.gen.StructDef, ptr %t225, i64 %t221 %t227 = load %S.gen.StructDef, ptr %t226 store %S.gen.StructDef %t227, ptr %a228 call void @finch.copy.S_gen_StructDef(ptr %a229, ptr %a228) %t230 = load %S.gen.StructDef, ptr %a229 store %S.gen.StructDef %t230, ptr %a231 %t232 = getelementptr inbounds %S.gen.StructDef, ptr %a231, i32 0, i32 5 %t233 = load { ptr, i64, i64 }, ptr %t232 %t234 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t235 = load { ptr, i64, i64 }, ptr %t234 store { ptr, i64, i64 } %t233, ptr %a236 store { ptr, i64, i64 } %t235, ptr %a237 %t238 = call i32 @finch_str_eq(ptr %a236, ptr %a237) %t239 = icmp ne i32 %t238, 0 br label %logic.from3821 logic.from3821: br i1 %t239, label %logic.rhs3822, label %logic.end3823 logic.rhs3822: %t240 = getelementptr inbounds %S.gen.StructDef, ptr %a231, i32 0, i32 7 %t241 = getelementptr inbounds { ptr, i64, i64 }, ptr %t240, i32 0, i32 1 %t242 = load i64, ptr %t241 %t243 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t244 = getelementptr inbounds { ptr, i64, i64 }, ptr %t243, i32 0, i32 1 %t245 = load i64, ptr %t244 %t246 = icmp eq i64 %t242, %t245 br label %logic.rend3824 logic.rend3824: br label %logic.end3823 logic.end3823: %t247 = phi i1 [ false, %logic.from3821 ], [ %t246, %logic.rend3824 ] br i1 %t247, label %then3825, label %endif3827 then3825: %t248 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t249 = getelementptr inbounds { ptr, i64, i64 }, ptr %t248, i32 0, i32 1 %t250 = load i64, ptr %t249 store i64 0, ptr %a251 br label %for.cond3828 for.cond3828: %t252 = load i64, ptr %a251 %t253 = icmp slt i64 %t252, %t250 br i1 %t253, label %for.body3829, label %for.end3831 for.body3829: %t254 = load ptr, ptr %a1 %t255 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t256 = load i64, ptr %a251 %t257 = load { ptr, i64, i64 }, ptr %t255 %t258 = extractvalue { ptr, i64, i64 } %t257, 1 %t259 = icmp uge i64 %t256, %t258 br i1 %t259, label %range3832, label %inrange3833 range3832: call void @finch_panic_index(ptr @.str.2386, i64 1552, i64 %t256, i64 %t258) unreachable inrange3833: %t260 = extractvalue { ptr, i64, i64 } %t257, 0 %t261 = getelementptr inbounds %S.ast.Type, ptr %t260, i64 %t256 %t262 = load %S.ast.Type, ptr %t261 %t263 = getelementptr inbounds %S.gen.StructDef, ptr %a231, i32 0, i32 7 %t264 = load i64, ptr %a251 %t265 = load { ptr, i64, i64 }, ptr %t263 %t266 = extractvalue { ptr, i64, i64 } %t265, 1 %t267 = icmp uge i64 %t264, %t266 br i1 %t267, label %range3834, label %inrange3835 range3834: call void @finch_panic_index(ptr @.str.2387, i64 1552, i64 %t264, i64 %t266) unreachable inrange3835: %t268 = extractvalue { ptr, i64, i64 } %t265, 0 %t269 = getelementptr inbounds %S.ast.Type, ptr %t268, i64 %t264 %t270 = load %S.ast.Type, ptr %t269 %t271 = load { ptr, i64, i64 }, ptr %a4 %t272 = load ptr, ptr %a5 call void @finch.gen.bindType(ptr %t254, %S.ast.Type %t262, %S.ast.Type %t270, { ptr, i64, i64 } %t271, ptr %t272) br label %for.step3830 for.step3830: %t273 = load i64, ptr %a251 %t274 = add i64 %t273, 1 store i64 %t274, ptr %a251 br label %for.cond3828 for.end3831: br label %endif3827 endif3827: br label %endif3816 endif3816: ret void } define internal %S.gen.Val @finch.gen.genericCall(ptr %p0, %S.ast.Node %p1, i64 %p2, i64 %p3, { ptr, i64, i64 } %p4) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a3 = alloca i64, align 16 %a4 = alloca i64, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca %S.gen.Template, align 16 %a17 = alloca %S.gen.Template, align 16 %a19 = alloca %S.gen.Template, align 16 %a39 = alloca %S.ast.Node, align 16 %a40 = alloca %S.ast.Node, align 16 %a42 = alloca %S.ast.Node, align 16 %a47 = alloca i64, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a85 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca { ptr, i64, i64 }, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca i64, align 16 %a107 = alloca %S.ast.Type, align 16 %a130 = alloca %S.gen.Binds, align 16 %a134 = alloca i64, align 16 %a152 = alloca { ptr, i64, i64 }, align 16 %a154 = alloca i64, align 16 %a169 = alloca %S.gen.Val, align 16 %a173 = alloca { ptr, i64, i64 }, align 16 %a174 = alloca { ptr, i64, i64 }, align 16 %a180 = alloca { ptr, i64, i64 }, align 16 %a181 = alloca { ptr, i64, i64 }, align 16 %a198 = alloca { ptr, i64, i64 }, align 16 %a199 = alloca { ptr, i64, i64 }, align 16 %a201 = alloca { ptr, i64, i64 }, align 16 %a202 = alloca { ptr, i64, i64 }, align 16 %a203 = alloca { ptr, i64, i64 }, align 16 %a205 = alloca { ptr, i64, i64 }, align 16 %a206 = alloca { ptr, i64, i64 }, align 16 %a207 = alloca { ptr, i64, i64 }, align 16 %a211 = alloca %S.gen.Val, align 16 %a212 = alloca %S.gen.Val, align 16 %a237 = alloca i64, align 16 %a259 = alloca { ptr, i64, i64 }, align 16 %a260 = alloca { ptr, i64, i64 }, align 16 %a261 = alloca { ptr, i64, i64 }, align 16 %a263 = alloca { ptr, i64, i64 }, align 16 %a264 = alloca { ptr, i64, i64 }, align 16 %a265 = alloca { ptr, i64, i64 }, align 16 %a269 = alloca { ptr, i64, i64 }, align 16 %a270 = alloca { ptr, i64, i64 }, align 16 %a271 = alloca { ptr, i64, i64 }, align 16 %a273 = alloca { ptr, i64, i64 }, align 16 %a274 = alloca { ptr, i64, i64 }, align 16 %a275 = alloca { ptr, i64, i64 }, align 16 %a286 = alloca i64, align 16 %a297 = alloca %S.gen.FnSig, align 16 %a298 = alloca %S.gen.FnSig, align 16 %a300 = alloca %S.gen.FnSig, align 16 %a304 = alloca { ptr, i64, i64 }, align 16 %a306 = alloca i64, align 16 %a343 = alloca { ptr, i64, i64 }, align 16 %a344 = alloca { ptr, i64, i64 }, align 16 %a345 = alloca { ptr, i64, i64 }, align 16 %a347 = alloca { ptr, i64, i64 }, align 16 %a348 = alloca { ptr, i64, i64 }, align 16 %a349 = alloca { ptr, i64, i64 }, align 16 %a352 = alloca %S.gen.Val, align 16 %a364 = alloca { ptr, i64, i64 }, align 16 %a365 = alloca { ptr, i64, i64 }, align 16 %a366 = alloca { ptr, i64, i64 }, align 16 %a370 = alloca { ptr, i64, i64 }, align 16 %a371 = alloca { ptr, i64, i64 }, align 16 %a372 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 store i64 %p2, ptr %a3 store i64 %p3, ptr %a4 store { ptr, i64, i64 } %p4, ptr %a5 %t6 = load ptr, ptr %a1 %t7 = icmp eq ptr %t6, null br i1 %t7, label %panic3836, label %ok3837 panic3836: call void @finch_panic(ptr @.str.2388, i64 1560, ptr @.str.2389) unreachable ok3837: %t8 = getelementptr inbounds %S.gen.Gen, ptr %t6, i32 0, i32 16 %t9 = load i64, ptr %a3 %t10 = load { ptr, i64, i64 }, ptr %t8 %t11 = extractvalue { ptr, i64, i64 } %t10, 1 %t12 = icmp uge i64 %t9, %t11 br i1 %t12, label %range3838, label %inrange3839 range3838: call void @finch_panic_index(ptr @.str.2390, i64 1560, i64 %t9, i64 %t11) unreachable inrange3839: %t13 = extractvalue { ptr, i64, i64 } %t10, 0 %t14 = getelementptr inbounds %S.gen.Template, ptr %t13, i64 %t9 %t15 = load %S.gen.Template, ptr %t14 store %S.gen.Template %t15, ptr %a16 call void @finch.copy.S_gen_Template(ptr %a17, ptr %a16) %t18 = load %S.gen.Template, ptr %a17 store %S.gen.Template %t18, ptr %a19 %t20 = load ptr, ptr %a1 %t21 = icmp eq ptr %t20, null br i1 %t21, label %panic3840, label %ok3841 panic3840: call void @finch_panic(ptr @.str.2391, i64 1561, ptr @.str.2392) unreachable ok3841: %t22 = getelementptr inbounds %S.gen.Gen, ptr %t20, i32 0, i32 0 %t23 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 4 %t24 = load i64, ptr %t23 %t25 = load { ptr, i64, i64 }, ptr %t22 %t26 = extractvalue { ptr, i64, i64 } %t25, 1 %t27 = icmp uge i64 %t24, %t26 br i1 %t27, label %range3842, label %inrange3843 range3842: call void @finch_panic_index(ptr @.str.2393, i64 1561, i64 %t24, i64 %t26) unreachable inrange3843: %t28 = extractvalue { ptr, i64, i64 } %t25, 0 %t29 = getelementptr inbounds %S.ast.Program, ptr %t28, i64 %t24 %t30 = getelementptr inbounds %S.ast.Program, ptr %t29, i32 0, i32 8 %t31 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 5 %t32 = load i64, ptr %t31 %t33 = load { ptr, i64, i64 }, ptr %t30 %t34 = extractvalue { ptr, i64, i64 } %t33, 1 %t35 = icmp uge i64 %t32, %t34 br i1 %t35, label %range3844, label %inrange3845 range3844: call void @finch_panic_index(ptr @.str.2394, i64 1561, i64 %t32, i64 %t34) unreachable inrange3845: %t36 = extractvalue { ptr, i64, i64 } %t33, 0 %t37 = getelementptr inbounds %S.ast.Node, ptr %t36, i64 %t32 %t38 = load %S.ast.Node, ptr %t37 store %S.ast.Node %t38, ptr %a39 call void @finch.copy.S_ast_Node(ptr %a40, ptr %a39) %t41 = load %S.ast.Node, ptr %a40 store %S.ast.Node %t41, ptr %a42 %t43 = getelementptr inbounds %S.ast.Node, ptr %a42, i32 0, i32 9 %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t43, i32 0, i32 1 %t45 = load i64, ptr %t44 %t46 = sub i64 %t45, 1 store i64 %t46, ptr %a47 %t48 = load ptr, ptr %a1 %t49 = load %S.ast.Node, ptr %a2 %t50 = load i64, ptr %a4 %t51 = load i64, ptr %a47 %t52 = load { ptr, i64, i64 }, ptr %a5 call void @finch.gen.checkArgs(ptr %t48, %S.ast.Node %t49, i64 %t50, i64 %t51, { ptr, i64, i64 } %t52) store { ptr, i64, i64 } zeroinitializer, ptr %a53 %t54 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 5 %t55 = getelementptr inbounds %S.ast.Type, ptr %t54, i32 0, i32 1 %t56 = getelementptr inbounds { ptr, i64, i64 }, ptr %t55, i32 0, i32 1 %t57 = load i64, ptr %t56 %t58 = icmp sgt i64 %t57, 0 br i1 %t58, label %then3846, label %endif3848 then3846: %t59 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 5 %t60 = getelementptr inbounds %S.ast.Type, ptr %t59, i32 0, i32 1 %t61 = getelementptr inbounds { ptr, i64, i64 }, ptr %t60, i32 0, i32 1 %t62 = load i64, ptr %t61 %t63 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 3 %t64 = getelementptr inbounds { ptr, i64, i64 }, ptr %t63, i32 0, i32 1 %t65 = load i64, ptr %t64 %t66 = icmp ne i64 %t62, %t65 br i1 %t66, label %then3849, label %endif3851 then3849: %t67 = load ptr, ptr %a1 %t68 = load %S.ast.Node, ptr %a2 %t69 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } %t69, ptr %a71 store { ptr, i64, i64 } { ptr @.str.2395, i64 7, i64 0 }, ptr %a72 call void @finch_str_concat(ptr %a70, ptr %a71, ptr %a72) %t73 = load { ptr, i64, i64 }, ptr %a70 %t74 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 3 %t75 = getelementptr inbounds { ptr, i64, i64 }, ptr %t74, i32 0, i32 1 %t76 = load i64, ptr %t75 call void @finch_str_from_int(ptr %a77, i64 %t76) %t78 = load { ptr, i64, i64 }, ptr %a77 store { ptr, i64, i64 } %t73, ptr %a80 store { ptr, i64, i64 } %t78, ptr %a81 call void @finch_str_concat(ptr %a79, ptr %a80, ptr %a81) %t82 = load { ptr, i64, i64 }, ptr %a79 store { ptr, i64, i64 } %t82, ptr %a84 store { ptr, i64, i64 } { ptr @.str.2396, i64 27, i64 0 }, ptr %a85 call void @finch_str_concat(ptr %a83, ptr %a84, ptr %a85) %t86 = load { ptr, i64, i64 }, ptr %a83 %t87 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 5 %t88 = getelementptr inbounds %S.ast.Type, ptr %t87, i32 0, i32 1 %t89 = getelementptr inbounds { ptr, i64, i64 }, ptr %t88, i32 0, i32 1 %t90 = load i64, ptr %t89 call void @finch_str_from_int(ptr %a91, i64 %t90) %t92 = load { ptr, i64, i64 }, ptr %a91 store { ptr, i64, i64 } %t86, ptr %a94 store { ptr, i64, i64 } %t92, ptr %a95 call void @finch_str_concat(ptr %a93, ptr %a94, ptr %a95) %t96 = load { ptr, i64, i64 }, ptr %a93 call void @finch.gen.fail(ptr %t67, %S.ast.Node %t68, { ptr, i64, i64 } %t96) br label %endif3851 endif3851: %t97 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 5 %t98 = getelementptr inbounds %S.ast.Type, ptr %t97, i32 0, i32 1 store i64 0, ptr %a99 br label %each.cond3852 each.cond3852: %t100 = getelementptr inbounds { ptr, i64, i64 }, ptr %t98, i32 0, i32 1 %t101 = load i64, ptr %t100 %t102 = load i64, ptr %a99 %t103 = icmp slt i64 %t102, %t101 br i1 %t103, label %each.body3853, label %each.end3855 each.body3853: %t104 = load ptr, ptr %t98 %t105 = getelementptr inbounds %S.ast.Type, ptr %t104, i64 %t102 %t106 = load %S.ast.Type, ptr %t105 store %S.ast.Type %t106, ptr %a107 %t108 = getelementptr inbounds { ptr, i64, i64 }, ptr %a53, i32 0, i32 1 %t109 = load ptr, ptr %a1 %t110 = load %S.ast.Type, ptr %a107 %t111 = load %S.ast.Node, ptr %a2 %t112 = call %S.ast.Type @finch.gen.resolve(ptr %t109, %S.ast.Type %t110, %S.ast.Node %t111) %t113 = load i64, ptr %t108 %t114 = add i64 %t113, 1 call void @finch_arr_reserve(ptr %a53, i64 %t114, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) %t115 = load ptr, ptr %a53 %t116 = getelementptr inbounds %S.ast.Type, ptr %t115, i64 %t113 store %S.ast.Type %t112, ptr %t116 store i64 %t114, ptr %t108 br label %each.step3854 each.step3854: %t117 = load i64, ptr %a99 %t118 = add i64 %t117, 1 store i64 %t118, ptr %a99 br label %each.cond3852 each.end3855: %t119 = load ptr, ptr %a1 %t120 = load ptr, ptr %a1 %t121 = load i64, ptr %a3 %t122 = load { ptr, i64, i64 }, ptr %a53 %t123 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.2397, i64 4, i64 0 }) %t124 = load %S.ast.Node, ptr %a2 %t125 = call i64 @finch.gen.instFn(ptr %t120, i64 %t121, { ptr, i64, i64 } %t122, %S.ast.Type %t123, %S.ast.Node %t124) %t126 = load %S.ast.Node, ptr %a2 %t127 = load i64, ptr %a4 %t128 = load { ptr, i64, i64 }, ptr %a5 %t129 = call %S.gen.Val @finch.gen.callFn(ptr %t119, i64 %t125, %S.ast.Node %t126, i64 %t127, { ptr, i64, i64 } %t128, { ptr, i64, i64 } { ptr @.str.2398, i64 0, i64 0 }, { ptr, i64, i64 } { ptr @.str.2399, i64 0, i64 0 }) ret %S.gen.Val %t129 endif3848: store %S.gen.Binds zeroinitializer, ptr %a130 %t131 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 3 %t132 = getelementptr inbounds { ptr, i64, i64 }, ptr %t131, i32 0, i32 1 %t133 = load i64, ptr %t132 store i64 0, ptr %a134 br label %for.cond3856 for.cond3856: %t135 = load i64, ptr %a134 %t136 = icmp slt i64 %t135, %t133 br i1 %t136, label %for.body3857, label %for.end3859 for.body3857: %t137 = getelementptr inbounds %S.gen.Binds, ptr %a130, i32 0, i32 0 %t138 = getelementptr inbounds { ptr, i64, i64 }, ptr %t137, i32 0, i32 1 %t139 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.2400, i64 4, i64 0 }) %t140 = load i64, ptr %t138 %t141 = add i64 %t140, 1 call void @finch_arr_reserve(ptr %t137, i64 %t141, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) %t142 = load ptr, ptr %t137 %t143 = getelementptr inbounds %S.ast.Type, ptr %t142, i64 %t140 store %S.ast.Type %t139, ptr %t143 store i64 %t141, ptr %t138 %t144 = getelementptr inbounds %S.gen.Binds, ptr %a130, i32 0, i32 1 %t145 = getelementptr inbounds { ptr, i64, i64 }, ptr %t144, i32 0, i32 1 %t146 = load i64, ptr %t145 %t147 = add i64 %t146, 1 call void @finch_arr_reserve(ptr %t144, i64 %t147, i64 ptrtoint (ptr getelementptr (i1, ptr null, i32 1) to i64)) %t148 = load ptr, ptr %t144 %t149 = getelementptr inbounds i1, ptr %t148, i64 %t146 store i1 false, ptr %t149 store i64 %t147, ptr %t145 br label %for.step3858 for.step3858: %t150 = load i64, ptr %a134 %t151 = add i64 %t150, 1 store i64 %t151, ptr %a134 br label %for.cond3856 for.end3859: store { ptr, i64, i64 } zeroinitializer, ptr %a152 %t153 = load i64, ptr %a47 store i64 0, ptr %a154 br label %for.cond3860 for.cond3860: %t155 = load i64, ptr %a154 %t156 = icmp slt i64 %t155, %t153 br i1 %t156, label %for.body3861, label %for.end3863 for.body3861: %t157 = load ptr, ptr %a1 %t158 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t159 = load i64, ptr %a4 %t160 = load i64, ptr %a154 %t161 = add i64 %t159, %t160 %t162 = load { ptr, i64, i64 }, ptr %t158 %t163 = extractvalue { ptr, i64, i64 } %t162, 1 %t164 = icmp uge i64 %t161, %t163 br i1 %t164, label %range3864, label %inrange3865 range3864: call void @finch_panic_index(ptr @.str.2401, i64 1581, i64 %t161, i64 %t163) unreachable inrange3865: %t165 = extractvalue { ptr, i64, i64 } %t162, 0 %t166 = getelementptr inbounds %S.ast.Node, ptr %t165, i64 %t161 %t167 = load %S.ast.Node, ptr %t166 %t168 = call %S.gen.Val @finch.gen.expr(ptr %t157, %S.ast.Node %t167) store %S.gen.Val %t168, ptr %a169 %t170 = getelementptr inbounds %S.gen.Val, ptr %a169, i32 0, i32 1 %t171 = getelementptr inbounds %S.ast.Type, ptr %t170, i32 0, i32 0 %t172 = load { ptr, i64, i64 }, ptr %t171 store { ptr, i64, i64 } %t172, ptr %a173 store { ptr, i64, i64 } { ptr @.str.2402, i64 4, i64 0 }, ptr %a174 %t175 = call i32 @finch_str_eq(ptr %a173, ptr %a174) %t176 = icmp ne i32 %t175, 0 br label %logic.from3866 logic.from3866: br i1 %t176, label %logic.end3868, label %logic.rhs3867 logic.rhs3867: %t177 = getelementptr inbounds %S.gen.Val, ptr %a169, i32 0, i32 1 %t178 = getelementptr inbounds %S.ast.Type, ptr %t177, i32 0, i32 0 %t179 = load { ptr, i64, i64 }, ptr %t178 store { ptr, i64, i64 } %t179, ptr %a180 store { ptr, i64, i64 } { ptr @.str.2403, i64 4, i64 0 }, ptr %a181 %t182 = call i32 @finch_str_eq(ptr %a180, ptr %a181) %t183 = icmp ne i32 %t182, 0 br label %logic.rend3869 logic.rend3869: br label %logic.end3868 logic.end3868: %t184 = phi i1 [ true, %logic.from3866 ], [ %t183, %logic.rend3869 ] br i1 %t184, label %then3870, label %endif3872 then3870: %t185 = load ptr, ptr %a1 %t186 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t187 = load i64, ptr %a4 %t188 = load i64, ptr %a154 %t189 = add i64 %t187, %t188 %t190 = load { ptr, i64, i64 }, ptr %t186 %t191 = extractvalue { ptr, i64, i64 } %t190, 1 %t192 = icmp uge i64 %t189, %t191 br i1 %t192, label %range3873, label %inrange3874 range3873: call void @finch_panic_index(ptr @.str.2404, i64 1583, i64 %t189, i64 %t191) unreachable inrange3874: %t193 = extractvalue { ptr, i64, i64 } %t190, 0 %t194 = getelementptr inbounds %S.ast.Node, ptr %t193, i64 %t189 %t195 = load %S.ast.Node, ptr %t194 %t196 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 3 %t197 = getelementptr inbounds { ptr, i64, i64 }, ptr %t196, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.2406, i64 2, i64 0 }, ptr %a198 call void @finch_str_join(ptr %a199, ptr %t196, ptr %a198) %t200 = load { ptr, i64, i64 }, ptr %a199 store { ptr, i64, i64 } { ptr @.str.2405, i64 29, i64 0 }, ptr %a202 store { ptr, i64, i64 } %t200, ptr %a203 call void @finch_str_concat(ptr %a201, ptr %a202, ptr %a203) %t204 = load { ptr, i64, i64 }, ptr %a201 store { ptr, i64, i64 } %t204, ptr %a206 store { ptr, i64, i64 } { ptr @.str.2407, i64 5, i64 0 }, ptr %a207 call void @finch_str_concat(ptr %a205, ptr %a206, ptr %a207) %t208 = load { ptr, i64, i64 }, ptr %a205 call void @finch.gen.fail(ptr %t185, %S.ast.Node %t195, { ptr, i64, i64 } %t208) br label %endif3872 endif3872: %t209 = getelementptr inbounds { ptr, i64, i64 }, ptr %a152, i32 0, i32 1 %t210 = load %S.gen.Val, ptr %a169 store %S.gen.Val %t210, ptr %a211 call void @finch.copy.S_gen_Val(ptr %a212, ptr %a211) %t213 = load %S.gen.Val, ptr %a212 %t214 = load i64, ptr %t209 %t215 = add i64 %t214, 1 call void @finch_arr_reserve(ptr %a152, i64 %t215, i64 ptrtoint (ptr getelementptr (%S.gen.Val, ptr null, i32 1) to i64)) %t216 = load ptr, ptr %a152 %t217 = getelementptr inbounds %S.gen.Val, ptr %t216, i64 %t214 store %S.gen.Val %t213, ptr %t217 store i64 %t215, ptr %t209 %t218 = load ptr, ptr %a1 %t219 = getelementptr inbounds %S.ast.Node, ptr %a42, i32 0, i32 9 %t220 = load i64, ptr %a154 %t221 = load { ptr, i64, i64 }, ptr %t219 %t222 = extractvalue { ptr, i64, i64 } %t221, 1 %t223 = icmp uge i64 %t220, %t222 br i1 %t223, label %range3875, label %inrange3876 range3875: call void @finch_panic_index(ptr @.str.2408, i64 1586, i64 %t220, i64 %t222) unreachable inrange3876: %t224 = extractvalue { ptr, i64, i64 } %t221, 0 %t225 = getelementptr inbounds %S.ast.Node, ptr %t224, i64 %t220 %t226 = getelementptr inbounds %S.ast.Node, ptr %t225, i32 0, i32 5 %t227 = load %S.ast.Type, ptr %t226 %t228 = getelementptr inbounds %S.gen.Val, ptr %a169, i32 0, i32 1 %t229 = load %S.ast.Type, ptr %t228 %t230 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 3 %t231 = load { ptr, i64, i64 }, ptr %t230 call void @finch.gen.bindType(ptr %t218, %S.ast.Type %t227, %S.ast.Type %t229, { ptr, i64, i64 } %t231, ptr %a130) br label %for.step3862 for.step3862: %t232 = load i64, ptr %a154 %t233 = add i64 %t232, 1 store i64 %t233, ptr %a154 br label %for.cond3860 for.end3863: %t234 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 3 %t235 = getelementptr inbounds { ptr, i64, i64 }, ptr %t234, i32 0, i32 1 %t236 = load i64, ptr %t235 store i64 0, ptr %a237 br label %for.cond3877 for.cond3877: %t238 = load i64, ptr %a237 %t239 = icmp slt i64 %t238, %t236 br i1 %t239, label %for.body3878, label %for.end3880 for.body3878: %t240 = getelementptr inbounds %S.gen.Binds, ptr %a130, i32 0, i32 1 %t241 = load i64, ptr %a237 %t242 = load { ptr, i64, i64 }, ptr %t240 %t243 = extractvalue { ptr, i64, i64 } %t242, 1 %t244 = icmp uge i64 %t241, %t243 br i1 %t244, label %range3881, label %inrange3882 range3881: call void @finch_panic_index(ptr @.str.2409, i64 1589, i64 %t241, i64 %t243) unreachable inrange3882: %t245 = extractvalue { ptr, i64, i64 } %t242, 0 %t246 = getelementptr inbounds i1, ptr %t245, i64 %t241 %t247 = load i1, ptr %t246 %t248 = xor i1 %t247, true br i1 %t248, label %then3883, label %endif3885 then3883: %t249 = load ptr, ptr %a1 %t250 = load %S.ast.Node, ptr %a2 %t251 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 3 %t252 = load i64, ptr %a237 %t253 = load { ptr, i64, i64 }, ptr %t251 %t254 = extractvalue { ptr, i64, i64 } %t253, 1 %t255 = icmp uge i64 %t252, %t254 br i1 %t255, label %range3886, label %inrange3887 range3886: call void @finch_panic_index(ptr @.str.2411, i64 1590, i64 %t252, i64 %t254) unreachable inrange3887: %t256 = extractvalue { ptr, i64, i64 } %t253, 0 %t257 = getelementptr inbounds { ptr, i64, i64 }, ptr %t256, i64 %t252 %t258 = load { ptr, i64, i64 }, ptr %t257 store { ptr, i64, i64 } { ptr @.str.2410, i64 16, i64 0 }, ptr %a260 store { ptr, i64, i64 } %t258, ptr %a261 call void @finch_str_concat(ptr %a259, ptr %a260, ptr %a261) %t262 = load { ptr, i64, i64 }, ptr %a259 store { ptr, i64, i64 } %t262, ptr %a264 store { ptr, i64, i64 } { ptr @.str.2412, i64 24, i64 0 }, ptr %a265 call void @finch_str_concat(ptr %a263, ptr %a264, ptr %a265) %t266 = load { ptr, i64, i64 }, ptr %a263 %t267 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 1 %t268 = load { ptr, i64, i64 }, ptr %t267 store { ptr, i64, i64 } %t266, ptr %a270 store { ptr, i64, i64 } %t268, ptr %a271 call void @finch_str_concat(ptr %a269, ptr %a270, ptr %a271) %t272 = load { ptr, i64, i64 }, ptr %a269 store { ptr, i64, i64 } %t272, ptr %a274 store { ptr, i64, i64 } { ptr @.str.2413, i64 10, i64 0 }, ptr %a275 call void @finch_str_concat(ptr %a273, ptr %a274, ptr %a275) %t276 = load { ptr, i64, i64 }, ptr %a273 call void @finch.gen.fail(ptr %t249, %S.ast.Node %t250, { ptr, i64, i64 } %t276) br label %endif3885 endif3885: br label %for.step3879 for.step3879: %t277 = load i64, ptr %a237 %t278 = add i64 %t277, 1 store i64 %t278, ptr %a237 br label %for.cond3877 for.end3880: %t279 = load ptr, ptr %a1 %t280 = load i64, ptr %a3 %t281 = getelementptr inbounds %S.gen.Binds, ptr %a130, i32 0, i32 0 %t282 = load { ptr, i64, i64 }, ptr %t281 %t283 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.2414, i64 4, i64 0 }) %t284 = load %S.ast.Node, ptr %a2 %t285 = call i64 @finch.gen.instFn(ptr %t279, i64 %t280, { ptr, i64, i64 } %t282, %S.ast.Type %t283, %S.ast.Node %t284) store i64 %t285, ptr %a286 %t287 = load ptr, ptr %a1 %t288 = icmp eq ptr %t287, null br i1 %t288, label %panic3888, label %ok3889 panic3888: call void @finch_panic(ptr @.str.2415, i64 1594, ptr @.str.2416) unreachable ok3889: %t289 = getelementptr inbounds %S.gen.Gen, ptr %t287, i32 0, i32 14 %t290 = load i64, ptr %a286 %t291 = load { ptr, i64, i64 }, ptr %t289 %t292 = extractvalue { ptr, i64, i64 } %t291, 1 %t293 = icmp uge i64 %t290, %t292 br i1 %t293, label %range3890, label %inrange3891 range3890: call void @finch_panic_index(ptr @.str.2417, i64 1594, i64 %t290, i64 %t292) unreachable inrange3891: %t294 = extractvalue { ptr, i64, i64 } %t291, 0 %t295 = getelementptr inbounds %S.gen.FnSig, ptr %t294, i64 %t290 %t296 = load %S.gen.FnSig, ptr %t295 store %S.gen.FnSig %t296, ptr %a297 call void @finch.copy.S_gen_FnSig(ptr %a298, ptr %a297) %t299 = load %S.gen.FnSig, ptr %a298 store %S.gen.FnSig %t299, ptr %a300 %t301 = load ptr, ptr %a1 %t302 = load %S.ast.Node, ptr %a2 %t303 = load %S.gen.FnSig, ptr %a300 call void @finch.gen.noteCall(ptr %t301, %S.ast.Node %t302, %S.gen.FnSig %t303) store { ptr, i64, i64 } zeroinitializer, ptr %a304 %t305 = load i64, ptr %a47 store i64 0, ptr %a306 br label %for.cond3892 for.cond3892: %t307 = load i64, ptr %a306 %t308 = icmp slt i64 %t307, %t305 br i1 %t308, label %for.body3893, label %for.end3895 for.body3893: %t309 = load ptr, ptr %a1 %t310 = load i64, ptr %a306 %t311 = load { ptr, i64, i64 }, ptr %a152 %t312 = extractvalue { ptr, i64, i64 } %t311, 1 %t313 = icmp uge i64 %t310, %t312 br i1 %t313, label %range3896, label %inrange3897 range3896: call void @finch_panic_index(ptr @.str.2418, i64 1598, i64 %t310, i64 %t312) unreachable inrange3897: %t314 = extractvalue { ptr, i64, i64 } %t311, 0 %t315 = getelementptr inbounds %S.gen.Val, ptr %t314, i64 %t310 %t316 = load %S.gen.Val, ptr %t315 %t317 = getelementptr inbounds %S.gen.FnSig, ptr %a300, i32 0, i32 13 %t318 = load i64, ptr %a306 %t319 = load { ptr, i64, i64 }, ptr %t317 %t320 = extractvalue { ptr, i64, i64 } %t319, 1 %t321 = icmp uge i64 %t318, %t320 br i1 %t321, label %range3898, label %inrange3899 range3898: call void @finch_panic_index(ptr @.str.2419, i64 1598, i64 %t318, i64 %t320) unreachable inrange3899: %t322 = extractvalue { ptr, i64, i64 } %t319, 0 %t323 = getelementptr inbounds %S.ast.Type, ptr %t322, i64 %t318 %t324 = load %S.ast.Type, ptr %t323 %t325 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t326 = load i64, ptr %a4 %t327 = load i64, ptr %a306 %t328 = add i64 %t326, %t327 %t329 = load { ptr, i64, i64 }, ptr %t325 %t330 = extractvalue { ptr, i64, i64 } %t329, 1 %t331 = icmp uge i64 %t328, %t330 br i1 %t331, label %range3900, label %inrange3901 range3900: call void @finch_panic_index(ptr @.str.2420, i64 1598, i64 %t328, i64 %t330) unreachable inrange3901: %t332 = extractvalue { ptr, i64, i64 } %t329, 0 %t333 = getelementptr inbounds %S.ast.Node, ptr %t332, i64 %t328 %t334 = load %S.ast.Node, ptr %t333 %t335 = getelementptr inbounds %S.gen.FnSig, ptr %a300, i32 0, i32 14 %t336 = load i64, ptr %a306 %t337 = load { ptr, i64, i64 }, ptr %t335 %t338 = extractvalue { ptr, i64, i64 } %t337, 1 %t339 = icmp uge i64 %t336, %t338 br i1 %t339, label %range3902, label %inrange3903 range3902: call void @finch_panic_index(ptr @.str.2422, i64 1598, i64 %t336, i64 %t338) unreachable inrange3903: %t340 = extractvalue { ptr, i64, i64 } %t337, 0 %t341 = getelementptr inbounds { ptr, i64, i64 }, ptr %t340, i64 %t336 %t342 = load { ptr, i64, i64 }, ptr %t341 store { ptr, i64, i64 } { ptr @.str.2421, i64 10, i64 0 }, ptr %a344 store { ptr, i64, i64 } %t342, ptr %a345 call void @finch_str_concat(ptr %a343, ptr %a344, ptr %a345) %t346 = load { ptr, i64, i64 }, ptr %a343 store { ptr, i64, i64 } %t346, ptr %a348 store { ptr, i64, i64 } { ptr @.str.2423, i64 1, i64 0 }, ptr %a349 call void @finch_str_concat(ptr %a347, ptr %a348, ptr %a349) %t350 = load { ptr, i64, i64 }, ptr %a347 %t351 = call %S.gen.Val @finch.gen.coerce(ptr %t309, %S.gen.Val %t316, %S.ast.Type %t324, %S.ast.Node %t334, { ptr, i64, i64 } %t350) store %S.gen.Val %t351, ptr %a352 %t353 = getelementptr inbounds { ptr, i64, i64 }, ptr %a304, i32 0, i32 1 %t354 = load ptr, ptr %a1 %t355 = getelementptr inbounds %S.gen.FnSig, ptr %a300, i32 0, i32 13 %t356 = load i64, ptr %a306 %t357 = load { ptr, i64, i64 }, ptr %t355 %t358 = extractvalue { ptr, i64, i64 } %t357, 1 %t359 = icmp uge i64 %t356, %t358 br i1 %t359, label %range3904, label %inrange3905 range3904: call void @finch_panic_index(ptr @.str.2424, i64 1599, i64 %t356, i64 %t358) unreachable inrange3905: %t360 = extractvalue { ptr, i64, i64 } %t357, 0 %t361 = getelementptr inbounds %S.ast.Type, ptr %t360, i64 %t356 %t362 = load %S.ast.Type, ptr %t361 %t363 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t354, %S.ast.Type %t362) store { ptr, i64, i64 } %t363, ptr %a365 store { ptr, i64, i64 } { ptr @.str.2425, i64 1, i64 0 }, ptr %a366 call void @finch_str_concat(ptr %a364, ptr %a365, ptr %a366) %t367 = load { ptr, i64, i64 }, ptr %a364 %t368 = getelementptr inbounds %S.gen.Val, ptr %a352, i32 0, i32 0 %t369 = load { ptr, i64, i64 }, ptr %t368 store { ptr, i64, i64 } %t367, ptr %a371 store { ptr, i64, i64 } %t369, ptr %a372 call void @finch_str_concat(ptr %a370, ptr %a371, ptr %a372) %t373 = load { ptr, i64, i64 }, ptr %a370 %t374 = load i64, ptr %t353 %t375 = add i64 %t374, 1 call void @finch_arr_reserve(ptr %a304, i64 %t375, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t376 = load ptr, ptr %a304 %t377 = getelementptr inbounds { ptr, i64, i64 }, ptr %t376, i64 %t374 store { ptr, i64, i64 } %t373, ptr %t377 store i64 %t375, ptr %t353 br label %for.step3894 for.step3894: %t378 = load i64, ptr %a306 %t379 = add i64 %t378, 1 store i64 %t379, ptr %a306 br label %for.cond3892 for.end3895: %t380 = load ptr, ptr %a1 %t381 = load %S.gen.FnSig, ptr %a300 %t382 = load %S.ast.Node, ptr %a2 %t383 = load { ptr, i64, i64 }, ptr %a304 %t384 = load { ptr, i64, i64 }, ptr %a5 %t385 = call %S.gen.Val @finch.gen.emitCall(ptr %t380, %S.gen.FnSig %t381, %S.ast.Node %t382, { ptr, i64, i64 } %t383, { ptr, i64, i64 } %t384) ret %S.gen.Val %t385 } define internal void @finch.copy.S_cimport_CField(ptr %dst, ptr %src) { entry: %t1 = load %S.cimport.CField, ptr %src store %S.cimport.CField %t1, ptr %dst %t2 = getelementptr inbounds %S.cimport.CField, ptr %dst, i32 0, i32 0 %t3 = getelementptr inbounds %S.cimport.CField, ptr %src, i32 0, i32 0 call void @finch_str_copy(ptr %t2, ptr %t3) %t4 = getelementptr inbounds %S.cimport.CField, ptr %dst, i32 0, i32 1 %t5 = getelementptr inbounds %S.cimport.CField, ptr %src, i32 0, i32 1 call void @finch.copy.S_ast_Type(ptr %t4, ptr %t5) ret void } define internal void @finch.copy.arr_S_cimport_CField(ptr %dst, ptr %src) { entry: %a5 = alloca i64, align 16 call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.cimport.CField, ptr null, i32 1) to i64)) %t1 = load ptr, ptr %dst %t2 = load ptr, ptr %src %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 %t4 = load i64, ptr %t3 store i64 0, ptr %a5 br label %n.cond3914 n.cond3914: %t6 = load i64, ptr %a5 %t7 = icmp slt i64 %t6, %t4 br i1 %t7, label %n.body3915, label %n.end3916 n.body3915: %t8 = getelementptr inbounds %S.cimport.CField, ptr %t1, i64 %t6 %t9 = getelementptr inbounds %S.cimport.CField, ptr %t2, i64 %t6 call void @finch.copy.S_cimport_CField(ptr %t8, ptr %t9) %t10 = load i64, ptr %a5 %t11 = add i64 %t10, 1 store i64 %t11, ptr %a5 br label %n.cond3914 n.end3916: ret void } define internal void @finch.copy.S_cimport_CStruct(ptr %dst, ptr %src) { entry: %t1 = load %S.cimport.CStruct, ptr %src store %S.cimport.CStruct %t1, ptr %dst %t2 = getelementptr inbounds %S.cimport.CStruct, ptr %dst, i32 0, i32 0 %t3 = getelementptr inbounds %S.cimport.CStruct, ptr %src, i32 0, i32 0 call void @finch_str_copy(ptr %t2, ptr %t3) %t4 = getelementptr inbounds %S.cimport.CStruct, ptr %dst, i32 0, i32 1 %t5 = getelementptr inbounds %S.cimport.CStruct, ptr %src, i32 0, i32 1 call void @finch.copy.arr_S_cimport_CField(ptr %t4, ptr %t5) %t6 = getelementptr inbounds %S.cimport.CStruct, ptr %dst, i32 0, i32 4 %t7 = getelementptr inbounds %S.cimport.CStruct, ptr %src, i32 0, i32 4 call void @finch_str_copy(ptr %t6, ptr %t7) ret void } define internal void @finch.gen.resolveCStruct(ptr %p0, i64 %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca i64, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca %S.cimport.CStruct, align 16 %a29 = alloca %S.cimport.CStruct, align 16 %a31 = alloca %S.cimport.CStruct, align 16 %a42 = alloca i64, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca i64, align 16 %a53 = alloca %S.cimport.CField, align 16 %a60 = alloca %S.ast.Type, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a85 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a110 = alloca { ptr, i64, i64 }, align 16 %a111 = alloca { ptr, i64, i64 }, align 16 %a129 = alloca %S.ast.Type, align 16 %a130 = alloca %S.ast.Type, align 16 %a194 = alloca { ptr, i64, i64 }, align 16 %a196 = alloca { ptr, i64, i64 }, align 16 %a197 = alloca { ptr, i64, i64 }, align 16 %a198 = alloca { ptr, i64, i64 }, align 16 %a200 = alloca { ptr, i64, i64 }, align 16 %a201 = alloca { ptr, i64, i64 }, align 16 %a202 = alloca { ptr, i64, i64 }, align 16 %a220 = alloca { ptr, i64, i64 }, align 16 %a221 = alloca { ptr, i64, i64 }, align 16 %a280 = alloca { ptr, i64, i64 }, align 16 %a281 = alloca { ptr, i64, i64 }, align 16 %a282 = alloca { ptr, i64, i64 }, align 16 %a284 = alloca { ptr, i64, i64 }, align 16 %a285 = alloca { ptr, i64, i64 }, align 16 %a286 = alloca { ptr, i64, i64 }, align 16 %a289 = alloca { ptr, i64, i64 }, align 16 %a290 = alloca { ptr, i64, i64 }, align 16 %a292 = alloca { ptr, i64, i64 }, align 16 %a293 = alloca { ptr, i64, i64 }, align 16 %a294 = alloca { ptr, i64, i64 }, align 16 %a296 = alloca { ptr, i64, i64 }, align 16 %a297 = alloca { ptr, i64, i64 }, align 16 %a298 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store i64 %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null br i1 %t4, label %panic3906, label %ok3907 panic3906: call void @finch_panic(ptr @.str.2426, i64 1607, ptr @.str.2427) unreachable ok3907: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 24 %t6 = getelementptr inbounds %S.cimport.CImports, ptr %t5, i32 0, i32 3 %t7 = load ptr, ptr %a1 %t8 = icmp eq ptr %t7, null br i1 %t8, label %panic3908, label %ok3909 panic3908: call void @finch_panic(ptr @.str.2428, i64 1607, ptr @.str.2429) unreachable ok3909: %t9 = getelementptr inbounds %S.gen.Gen, ptr %t7, i32 0, i32 15 %t10 = load i64, ptr %a2 %t11 = load { ptr, i64, i64 }, ptr %t9 %t12 = extractvalue { ptr, i64, i64 } %t11, 1 %t13 = icmp uge i64 %t10, %t12 br i1 %t13, label %range3910, label %inrange3911 range3910: call void @finch_panic_index(ptr @.str.2430, i64 1607, i64 %t10, i64 %t12) unreachable inrange3911: %t14 = extractvalue { ptr, i64, i64 } %t11, 0 %t15 = getelementptr inbounds %S.gen.StructDef, ptr %t14, i64 %t10 %t16 = getelementptr inbounds %S.gen.StructDef, ptr %t15, i32 0, i32 1 %t17 = load { ptr, i64, i64 }, ptr %t16 store { ptr, i64, i64 } %t17, ptr %a18 %t19 = call i64 @finch_map_find(ptr %t6, ptr %a18, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t20 = icmp slt i64 %t19, 0 br i1 %t20, label %map.missing3912, label %map.found3913 map.missing3912: store { ptr, i64, i64 } zeroinitializer, ptr %a21 store { ptr, i64, i64 } %t17, ptr %a22 call void @finch_buf_str(ptr %a21, ptr %a22, i32 1) call void @finch_map_missing(ptr @.str.2431, i64 1607, ptr %a21) unreachable map.found3913: %t23 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t6, i32 0, i32 0 %t24 = load ptr, ptr %t23 %t25 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t24, i64 %t19 %t26 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t25, i32 0, i32 2 %t27 = load %S.cimport.CStruct, ptr %t26 store %S.cimport.CStruct %t27, ptr %a28 call void @finch.copy.S_cimport_CStruct(ptr %a29, ptr %a28) %t30 = load %S.cimport.CStruct, ptr %a29 store %S.cimport.CStruct %t30, ptr %a31 %t32 = load ptr, ptr %a1 %t33 = icmp eq ptr %t32, null br i1 %t33, label %panic3917, label %ok3918 panic3917: call void @finch_panic(ptr @.str.2432, i64 1608, ptr @.str.2433) unreachable ok3918: %t34 = getelementptr inbounds %S.gen.Gen, ptr %t32, i32 0, i32 15 %t35 = load i64, ptr %a2 %t36 = load { ptr, i64, i64 }, ptr %t34 %t37 = extractvalue { ptr, i64, i64 } %t36, 1 %t38 = icmp uge i64 %t35, %t37 br i1 %t38, label %range3919, label %inrange3920 range3919: call void @finch_panic_index(ptr @.str.2434, i64 1608, i64 %t35, i64 %t37) unreachable inrange3920: %t39 = extractvalue { ptr, i64, i64 } %t36, 0 %t40 = getelementptr inbounds %S.gen.StructDef, ptr %t39, i64 %t35 %t41 = getelementptr inbounds %S.gen.StructDef, ptr %t40, i32 0, i32 15 store i64 1, ptr %t41 store i64 0, ptr %a42 store { ptr, i64, i64 } zeroinitializer, ptr %a43 %t44 = getelementptr inbounds %S.cimport.CStruct, ptr %a31, i32 0, i32 1 store i64 0, ptr %a45 br label %each.cond3921 each.cond3921: %t46 = getelementptr inbounds { ptr, i64, i64 }, ptr %t44, i32 0, i32 1 %t47 = load i64, ptr %t46 %t48 = load i64, ptr %a45 %t49 = icmp slt i64 %t48, %t47 br i1 %t49, label %each.body3922, label %each.end3924 each.body3922: %t50 = load ptr, ptr %t44 %t51 = getelementptr inbounds %S.cimport.CField, ptr %t50, i64 %t48 %t52 = load %S.cimport.CField, ptr %t51 store %S.cimport.CField %t52, ptr %a53 %t54 = getelementptr inbounds %S.cimport.CField, ptr %a53, i32 0, i32 5 %t55 = load i1, ptr %t54 br i1 %t55, label %then3925, label %endif3927 then3925: br label %each.step3923 endif3927: %t56 = load ptr, ptr %a1 %t57 = getelementptr inbounds %S.cimport.CField, ptr %a53, i32 0, i32 1 %t58 = load %S.ast.Type, ptr %t57 %t59 = call %S.ast.Type @finch.gen.resolve(ptr %t56, %S.ast.Type %t58, %S.ast.Node zeroinitializer) store %S.ast.Type %t59, ptr %a60 %t61 = getelementptr inbounds %S.ast.Type, ptr %a60, i32 0, i32 0 %t62 = load { ptr, i64, i64 }, ptr %t61 store { ptr, i64, i64 } %t62, ptr %a63 store { ptr, i64, i64 } { ptr @.str.2435, i64 6, i64 0 }, ptr %a64 %t65 = call i32 @finch_str_eq(ptr %a63, ptr %a64) %t66 = icmp ne i32 %t65, 0 br i1 %t66, label %then3928, label %endif3930 then3928: %t67 = load ptr, ptr %a1 %t68 = load ptr, ptr %a1 %t69 = getelementptr inbounds %S.ast.Type, ptr %a60, i32 0, i32 3 %t70 = load { ptr, i64, i64 }, ptr %t69 %t71 = getelementptr inbounds %S.ast.Type, ptr %a60, i32 0, i32 2 %t72 = load { ptr, i64, i64 }, ptr %t71 %t73 = call i64 @finch.gen.findStruct(ptr %t68, { ptr, i64, i64 } %t70, { ptr, i64, i64 } %t72) call void @finch.gen.resolveStruct(ptr %t67, i64 %t73) br label %endif3930 endif3930: %t74 = getelementptr inbounds %S.cimport.CField, ptr %a53, i32 0, i32 2 %t75 = load i64, ptr %t74 %t76 = load i64, ptr %a42 %t77 = icmp sgt i64 %t75, %t76 br i1 %t77, label %then3931, label %endif3933 then3931: %t78 = getelementptr inbounds { ptr, i64, i64 }, ptr %a43, i32 0, i32 1 %t79 = getelementptr inbounds %S.cimport.CField, ptr %a53, i32 0, i32 2 %t80 = load i64, ptr %t79 %t81 = load i64, ptr %a42 %t82 = sub i64 %t80, %t81 call void @finch_str_from_int(ptr %a83, i64 %t82) %t84 = load { ptr, i64, i64 }, ptr %a83 store { ptr, i64, i64 } { ptr @.str.2436, i64 1, i64 0 }, ptr %a86 store { ptr, i64, i64 } %t84, ptr %a87 call void @finch_str_concat(ptr %a85, ptr %a86, ptr %a87) %t88 = load { ptr, i64, i64 }, ptr %a85 store { ptr, i64, i64 } %t88, ptr %a90 store { ptr, i64, i64 } { ptr @.str.2437, i64 6, i64 0 }, ptr %a91 call void @finch_str_concat(ptr %a89, ptr %a90, ptr %a91) %t92 = load { ptr, i64, i64 }, ptr %a89 %t93 = load i64, ptr %t78 %t94 = add i64 %t93, 1 call void @finch_arr_reserve(ptr %a43, i64 %t94, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t95 = load ptr, ptr %a43 %t96 = getelementptr inbounds { ptr, i64, i64 }, ptr %t95, i64 %t93 store { ptr, i64, i64 } %t92, ptr %t96 store i64 %t94, ptr %t78 br label %endif3933 endif3933: %t97 = load ptr, ptr %a1 %t98 = icmp eq ptr %t97, null br i1 %t98, label %panic3934, label %ok3935 panic3934: call void @finch_panic(ptr @.str.2438, i64 1622, ptr @.str.2439) unreachable ok3935: %t99 = getelementptr inbounds %S.gen.Gen, ptr %t97, i32 0, i32 15 %t100 = load i64, ptr %a2 %t101 = load { ptr, i64, i64 }, ptr %t99 %t102 = extractvalue { ptr, i64, i64 } %t101, 1 %t103 = icmp uge i64 %t100, %t102 br i1 %t103, label %range3936, label %inrange3937 range3936: call void @finch_panic_index(ptr @.str.2440, i64 1622, i64 %t100, i64 %t102) unreachable inrange3937: %t104 = extractvalue { ptr, i64, i64 } %t101, 0 %t105 = getelementptr inbounds %S.gen.StructDef, ptr %t104, i64 %t100 %t106 = getelementptr inbounds %S.gen.StructDef, ptr %t105, i32 0, i32 11 %t107 = getelementptr inbounds { ptr, i64, i64 }, ptr %t106, i32 0, i32 1 %t108 = getelementptr inbounds %S.cimport.CField, ptr %a53, i32 0, i32 0 %t109 = load { ptr, i64, i64 }, ptr %t108 store { ptr, i64, i64 } %t109, ptr %a110 call void @finch_str_copy(ptr %a111, ptr %a110) %t112 = load { ptr, i64, i64 }, ptr %a111 %t113 = load i64, ptr %t107 %t114 = add i64 %t113, 1 call void @finch_arr_reserve(ptr %t106, i64 %t114, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t115 = load ptr, ptr %t106 %t116 = getelementptr inbounds { ptr, i64, i64 }, ptr %t115, i64 %t113 store { ptr, i64, i64 } %t112, ptr %t116 store i64 %t114, ptr %t107 %t117 = load ptr, ptr %a1 %t118 = icmp eq ptr %t117, null br i1 %t118, label %panic3938, label %ok3939 panic3938: call void @finch_panic(ptr @.str.2441, i64 1623, ptr @.str.2442) unreachable ok3939: %t119 = getelementptr inbounds %S.gen.Gen, ptr %t117, i32 0, i32 15 %t120 = load i64, ptr %a2 %t121 = load { ptr, i64, i64 }, ptr %t119 %t122 = extractvalue { ptr, i64, i64 } %t121, 1 %t123 = icmp uge i64 %t120, %t122 br i1 %t123, label %range3940, label %inrange3941 range3940: call void @finch_panic_index(ptr @.str.2443, i64 1623, i64 %t120, i64 %t122) unreachable inrange3941: %t124 = extractvalue { ptr, i64, i64 } %t121, 0 %t125 = getelementptr inbounds %S.gen.StructDef, ptr %t124, i64 %t120 %t126 = getelementptr inbounds %S.gen.StructDef, ptr %t125, i32 0, i32 12 %t127 = getelementptr inbounds { ptr, i64, i64 }, ptr %t126, i32 0, i32 1 %t128 = load %S.ast.Type, ptr %a60 store %S.ast.Type %t128, ptr %a129 call void @finch.copy.S_ast_Type(ptr %a130, ptr %a129) %t131 = load %S.ast.Type, ptr %a130 %t132 = load i64, ptr %t127 %t133 = add i64 %t132, 1 call void @finch_arr_reserve(ptr %t126, i64 %t133, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) %t134 = load ptr, ptr %t126 %t135 = getelementptr inbounds %S.ast.Type, ptr %t134, i64 %t132 store %S.ast.Type %t131, ptr %t135 store i64 %t133, ptr %t127 %t136 = load ptr, ptr %a1 %t137 = icmp eq ptr %t136, null br i1 %t137, label %panic3942, label %ok3943 panic3942: call void @finch_panic(ptr @.str.2444, i64 1624, ptr @.str.2445) unreachable ok3943: %t138 = getelementptr inbounds %S.gen.Gen, ptr %t136, i32 0, i32 15 %t139 = load i64, ptr %a2 %t140 = load { ptr, i64, i64 }, ptr %t138 %t141 = extractvalue { ptr, i64, i64 } %t140, 1 %t142 = icmp uge i64 %t139, %t141 br i1 %t142, label %range3944, label %inrange3945 range3944: call void @finch_panic_index(ptr @.str.2446, i64 1624, i64 %t139, i64 %t141) unreachable inrange3945: %t143 = extractvalue { ptr, i64, i64 } %t140, 0 %t144 = getelementptr inbounds %S.gen.StructDef, ptr %t143, i64 %t139 %t145 = getelementptr inbounds %S.gen.StructDef, ptr %t144, i32 0, i32 3 %t146 = getelementptr inbounds { ptr, i64, i64 }, ptr %t145, i32 0, i32 1 %t147 = getelementptr inbounds { ptr, i64, i64 }, ptr %a43, i32 0, i32 1 %t148 = load i64, ptr %t147 %t149 = load i64, ptr %t146 %t150 = add i64 %t149, 1 call void @finch_arr_reserve(ptr %t145, i64 %t150, i64 ptrtoint (ptr getelementptr (i64, ptr null, i32 1) to i64)) %t151 = load ptr, ptr %t145 %t152 = getelementptr inbounds i64, ptr %t151, i64 %t149 store i64 %t148, ptr %t152 store i64 %t150, ptr %t146 %t153 = load ptr, ptr %a1 %t154 = icmp eq ptr %t153, null br i1 %t154, label %panic3946, label %ok3947 panic3946: call void @finch_panic(ptr @.str.2447, i64 1625, ptr @.str.2448) unreachable ok3947: %t155 = getelementptr inbounds %S.gen.Gen, ptr %t153, i32 0, i32 15 %t156 = load i64, ptr %a2 %t157 = load { ptr, i64, i64 }, ptr %t155 %t158 = extractvalue { ptr, i64, i64 } %t157, 1 %t159 = icmp uge i64 %t156, %t158 br i1 %t159, label %range3948, label %inrange3949 range3948: call void @finch_panic_index(ptr @.str.2449, i64 1625, i64 %t156, i64 %t158) unreachable inrange3949: %t160 = extractvalue { ptr, i64, i64 } %t157, 0 %t161 = getelementptr inbounds %S.gen.StructDef, ptr %t160, i64 %t156 %t162 = getelementptr inbounds %S.gen.StructDef, ptr %t161, i32 0, i32 4 %t163 = getelementptr inbounds { ptr, i64, i64 }, ptr %t162, i32 0, i32 1 %t164 = getelementptr inbounds %S.cimport.CField, ptr %a53, i32 0, i32 2 %t165 = load i64, ptr %t164 %t166 = load i64, ptr %t163 %t167 = add i64 %t166, 1 call void @finch_arr_reserve(ptr %t162, i64 %t167, i64 ptrtoint (ptr getelementptr (i64, ptr null, i32 1) to i64)) %t168 = load ptr, ptr %t162 %t169 = getelementptr inbounds i64, ptr %t168, i64 %t166 store i64 %t165, ptr %t169 store i64 %t167, ptr %t163 %t170 = getelementptr inbounds { ptr, i64, i64 }, ptr %a43, i32 0, i32 1 %t171 = load ptr, ptr %a1 %t172 = load %S.ast.Type, ptr %a60 %t173 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t171, %S.ast.Type %t172) %t174 = load i64, ptr %t170 %t175 = add i64 %t174, 1 call void @finch_arr_reserve(ptr %a43, i64 %t175, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t176 = load ptr, ptr %a43 %t177 = getelementptr inbounds { ptr, i64, i64 }, ptr %t176, i64 %t174 store { ptr, i64, i64 } %t173, ptr %t177 store i64 %t175, ptr %t170 %t178 = getelementptr inbounds %S.cimport.CField, ptr %a53, i32 0, i32 2 %t179 = load i64, ptr %t178 %t180 = getelementptr inbounds %S.cimport.CField, ptr %a53, i32 0, i32 3 %t181 = load i64, ptr %t180 %t182 = add i64 %t179, %t181 store i64 %t182, ptr %a42 br label %each.step3923 each.step3923: %t183 = load i64, ptr %a45 %t184 = add i64 %t183, 1 store i64 %t184, ptr %a45 br label %each.cond3921 each.end3924: %t185 = getelementptr inbounds %S.cimport.CStruct, ptr %a31, i32 0, i32 2 %t186 = load i64, ptr %t185 %t187 = load i64, ptr %a42 %t188 = icmp sgt i64 %t186, %t187 br i1 %t188, label %then3950, label %endif3952 then3950: %t189 = getelementptr inbounds { ptr, i64, i64 }, ptr %a43, i32 0, i32 1 %t190 = getelementptr inbounds %S.cimport.CStruct, ptr %a31, i32 0, i32 2 %t191 = load i64, ptr %t190 %t192 = load i64, ptr %a42 %t193 = sub i64 %t191, %t192 call void @finch_str_from_int(ptr %a194, i64 %t193) %t195 = load { ptr, i64, i64 }, ptr %a194 store { ptr, i64, i64 } { ptr @.str.2450, i64 1, i64 0 }, ptr %a197 store { ptr, i64, i64 } %t195, ptr %a198 call void @finch_str_concat(ptr %a196, ptr %a197, ptr %a198) %t199 = load { ptr, i64, i64 }, ptr %a196 store { ptr, i64, i64 } %t199, ptr %a201 store { ptr, i64, i64 } { ptr @.str.2451, i64 6, i64 0 }, ptr %a202 call void @finch_str_concat(ptr %a200, ptr %a201, ptr %a202) %t203 = load { ptr, i64, i64 }, ptr %a200 %t204 = load i64, ptr %t189 %t205 = add i64 %t204, 1 call void @finch_arr_reserve(ptr %a43, i64 %t205, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t206 = load ptr, ptr %a43 %t207 = getelementptr inbounds { ptr, i64, i64 }, ptr %t206, i64 %t204 store { ptr, i64, i64 } %t203, ptr %t207 store i64 %t205, ptr %t189 br label %endif3952 endif3952: %t208 = getelementptr inbounds %S.cimport.CStruct, ptr %a31, i32 0, i32 4 %t209 = load { ptr, i64, i64 }, ptr %t208 %t210 = load ptr, ptr %a1 %t211 = icmp eq ptr %t210, null br i1 %t211, label %panic3953, label %ok3954 panic3953: call void @finch_panic(ptr @.str.2452, i64 1632, ptr @.str.2453) unreachable ok3954: %t212 = getelementptr inbounds %S.gen.Gen, ptr %t210, i32 0, i32 15 %t213 = load i64, ptr %a2 %t214 = load { ptr, i64, i64 }, ptr %t212 %t215 = extractvalue { ptr, i64, i64 } %t214, 1 %t216 = icmp uge i64 %t213, %t215 br i1 %t216, label %range3955, label %inrange3956 range3955: call void @finch_panic_index(ptr @.str.2454, i64 1632, i64 %t213, i64 %t215) unreachable inrange3956: %t217 = extractvalue { ptr, i64, i64 } %t214, 0 %t218 = getelementptr inbounds %S.gen.StructDef, ptr %t217, i64 %t213 %t219 = getelementptr inbounds %S.gen.StructDef, ptr %t218, i32 0, i32 8 store { ptr, i64, i64 } %t209, ptr %a220 call void @finch_str_copy(ptr %a221, ptr %a220) %t222 = load { ptr, i64, i64 }, ptr %a221 store { ptr, i64, i64 } %t222, ptr %t219 %t223 = getelementptr inbounds %S.cimport.CStruct, ptr %a31, i32 0, i32 5 %t224 = load i1, ptr %t223 br label %logic.from3957 logic.from3957: br i1 %t224, label %logic.rhs3958, label %logic.end3959 logic.rhs3958: %t225 = getelementptr inbounds %S.cimport.CStruct, ptr %a31, i32 0, i32 4 %t226 = getelementptr inbounds { ptr, i64, i64 }, ptr %t225, i32 0, i32 1 %t227 = load i64, ptr %t226 %t228 = icmp eq i64 %t227, 0 br label %logic.rend3960 logic.rend3960: br label %logic.end3959 logic.end3959: %t229 = phi i1 [ false, %logic.from3957 ], [ %t228, %logic.rend3960 ] br i1 %t229, label %then3961, label %endif3963 then3961: %t230 = load ptr, ptr %a1 %t231 = icmp eq ptr %t230, null br i1 %t231, label %panic3964, label %ok3965 panic3964: call void @finch_panic(ptr @.str.2456, i64 1634, ptr @.str.2457) unreachable ok3965: %t232 = getelementptr inbounds %S.gen.Gen, ptr %t230, i32 0, i32 15 %t233 = load i64, ptr %a2 %t234 = load { ptr, i64, i64 }, ptr %t232 %t235 = extractvalue { ptr, i64, i64 } %t234, 1 %t236 = icmp uge i64 %t233, %t235 br i1 %t236, label %range3966, label %inrange3967 range3966: call void @finch_panic_index(ptr @.str.2458, i64 1634, i64 %t233, i64 %t235) unreachable inrange3967: %t237 = extractvalue { ptr, i64, i64 } %t234, 0 %t238 = getelementptr inbounds %S.gen.StructDef, ptr %t237, i64 %t233 %t239 = getelementptr inbounds %S.gen.StructDef, ptr %t238, i32 0, i32 8 store { ptr, i64, i64 } { ptr @.str.2455, i64 49, i64 0 }, ptr %t239 br label %endif3963 endif3963: %t240 = getelementptr inbounds %S.cimport.CStruct, ptr %a31, i32 0, i32 2 %t241 = load i64, ptr %t240 %t242 = load ptr, ptr %a1 %t243 = icmp eq ptr %t242, null br i1 %t243, label %panic3968, label %ok3969 panic3968: call void @finch_panic(ptr @.str.2459, i64 1636, ptr @.str.2460) unreachable ok3969: %t244 = getelementptr inbounds %S.gen.Gen, ptr %t242, i32 0, i32 15 %t245 = load i64, ptr %a2 %t246 = load { ptr, i64, i64 }, ptr %t244 %t247 = extractvalue { ptr, i64, i64 } %t246, 1 %t248 = icmp uge i64 %t245, %t247 br i1 %t248, label %range3970, label %inrange3971 range3970: call void @finch_panic_index(ptr @.str.2461, i64 1636, i64 %t245, i64 %t247) unreachable inrange3971: %t249 = extractvalue { ptr, i64, i64 } %t246, 0 %t250 = getelementptr inbounds %S.gen.StructDef, ptr %t249, i64 %t245 %t251 = getelementptr inbounds %S.gen.StructDef, ptr %t250, i32 0, i32 9 store i64 %t241, ptr %t251 %t252 = getelementptr inbounds %S.cimport.CStruct, ptr %a31, i32 0, i32 3 %t253 = load i64, ptr %t252 %t254 = load ptr, ptr %a1 %t255 = icmp eq ptr %t254, null br i1 %t255, label %panic3972, label %ok3973 panic3972: call void @finch_panic(ptr @.str.2462, i64 1637, ptr @.str.2463) unreachable ok3973: %t256 = getelementptr inbounds %S.gen.Gen, ptr %t254, i32 0, i32 15 %t257 = load i64, ptr %a2 %t258 = load { ptr, i64, i64 }, ptr %t256 %t259 = extractvalue { ptr, i64, i64 } %t258, 1 %t260 = icmp uge i64 %t257, %t259 br i1 %t260, label %range3974, label %inrange3975 range3974: call void @finch_panic_index(ptr @.str.2464, i64 1637, i64 %t257, i64 %t259) unreachable inrange3975: %t261 = extractvalue { ptr, i64, i64 } %t258, 0 %t262 = getelementptr inbounds %S.gen.StructDef, ptr %t261, i64 %t257 %t263 = getelementptr inbounds %S.gen.StructDef, ptr %t262, i32 0, i32 10 store i64 %t253, ptr %t263 %t264 = load ptr, ptr %a1 %t265 = icmp eq ptr %t264, null br i1 %t265, label %panic3976, label %ok3977 panic3976: call void @finch_panic(ptr @.str.2465, i64 1638, ptr @.str.2466) unreachable ok3977: %t266 = getelementptr inbounds %S.gen.Gen, ptr %t264, i32 0, i32 15 %t267 = load i64, ptr %a2 %t268 = load { ptr, i64, i64 }, ptr %t266 %t269 = extractvalue { ptr, i64, i64 } %t268, 1 %t270 = icmp uge i64 %t267, %t269 br i1 %t270, label %range3978, label %inrange3979 range3978: call void @finch_panic_index(ptr @.str.2467, i64 1638, i64 %t267, i64 %t269) unreachable inrange3979: %t271 = extractvalue { ptr, i64, i64 } %t268, 0 %t272 = getelementptr inbounds %S.gen.StructDef, ptr %t271, i64 %t267 %t273 = getelementptr inbounds %S.gen.StructDef, ptr %t272, i32 0, i32 15 store i64 2, ptr %t273 %t274 = load ptr, ptr %a1 %t275 = icmp eq ptr %t274, null br i1 %t275, label %panic3980, label %ok3981 panic3980: call void @finch_panic(ptr @.str.2468, i64 1639, ptr @.str.2469) unreachable ok3981: %t276 = getelementptr inbounds %S.gen.Gen, ptr %t274, i32 0, i32 2 %t277 = getelementptr inbounds { ptr, i64, i64 }, ptr %t276, i32 0, i32 1 %t278 = getelementptr inbounds %S.cimport.CStruct, ptr %a31, i32 0, i32 0 %t279 = load { ptr, i64, i64 }, ptr %t278 store { ptr, i64, i64 } { ptr @.str.2470, i64 5, i64 0 }, ptr %a281 store { ptr, i64, i64 } %t279, ptr %a282 call void @finch_str_concat(ptr %a280, ptr %a281, ptr %a282) %t283 = load { ptr, i64, i64 }, ptr %a280 store { ptr, i64, i64 } %t283, ptr %a285 store { ptr, i64, i64 } { ptr @.str.2471, i64 10, i64 0 }, ptr %a286 call void @finch_str_concat(ptr %a284, ptr %a285, ptr %a286) %t287 = load { ptr, i64, i64 }, ptr %a284 %t288 = getelementptr inbounds { ptr, i64, i64 }, ptr %a43, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.2472, i64 2, i64 0 }, ptr %a289 call void @finch_str_join(ptr %a290, ptr %a43, ptr %a289) %t291 = load { ptr, i64, i64 }, ptr %a290 store { ptr, i64, i64 } %t287, ptr %a293 store { ptr, i64, i64 } %t291, ptr %a294 call void @finch_str_concat(ptr %a292, ptr %a293, ptr %a294) %t295 = load { ptr, i64, i64 }, ptr %a292 store { ptr, i64, i64 } %t295, ptr %a297 store { ptr, i64, i64 } { ptr @.str.2473, i64 2, i64 0 }, ptr %a298 call void @finch_str_concat(ptr %a296, ptr %a297, ptr %a298) %t299 = load { ptr, i64, i64 }, ptr %a296 %t300 = load i64, ptr %t277 %t301 = add i64 %t300, 1 call void @finch_arr_reserve(ptr %t276, i64 %t301, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t302 = load ptr, ptr %t276 %t303 = getelementptr inbounds { ptr, i64, i64 }, ptr %t302, i64 %t300 store { ptr, i64, i64 } %t299, ptr %t303 store i64 %t301, ptr %t277 ret void } define internal void @finch.gen.resolveStruct(ptr %p0, i64 %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca i64, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 %a113 = alloca { ptr, i64, i64 }, align 16 %a114 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca { ptr, i64, i64 }, align 16 %a117 = alloca { ptr, i64, i64 }, align 16 %a118 = alloca { ptr, i64, i64 }, align 16 %a129 = alloca { ptr, i64, i64 }, align 16 %a130 = alloca { ptr, i64, i64 }, align 16 %a136 = alloca { ptr, i64, i64 }, align 16 %a137 = alloca { ptr, i64, i64 }, align 16 %a143 = alloca { ptr, i64, i64 }, align 16 %a144 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store i64 %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null br i1 %t4, label %panic3982, label %ok3983 panic3982: call void @finch_panic(ptr @.str.2474, i64 1643, ptr @.str.2475) unreachable ok3983: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 15 %t6 = load i64, ptr %a2 %t7 = load { ptr, i64, i64 }, ptr %t5 %t8 = extractvalue { ptr, i64, i64 } %t7, 1 %t9 = icmp uge i64 %t6, %t8 br i1 %t9, label %range3984, label %inrange3985 range3984: call void @finch_panic_index(ptr @.str.2476, i64 1643, i64 %t6, i64 %t8) unreachable inrange3985: %t10 = extractvalue { ptr, i64, i64 } %t7, 0 %t11 = getelementptr inbounds %S.gen.StructDef, ptr %t10, i64 %t6 %t12 = getelementptr inbounds %S.gen.StructDef, ptr %t11, i32 0, i32 15 %t13 = load i64, ptr %t12 %t14 = icmp eq i64 %t13, 2 br i1 %t14, label %then3986, label %endif3988 then3986: ret void endif3988: %t15 = load ptr, ptr %a1 %t16 = icmp eq ptr %t15, null br i1 %t16, label %panic3989, label %ok3990 panic3989: call void @finch_panic(ptr @.str.2477, i64 1646, ptr @.str.2478) unreachable ok3990: %t17 = getelementptr inbounds %S.gen.Gen, ptr %t15, i32 0, i32 15 %t18 = load i64, ptr %a2 %t19 = load { ptr, i64, i64 }, ptr %t17 %t20 = extractvalue { ptr, i64, i64 } %t19, 1 %t21 = icmp uge i64 %t18, %t20 br i1 %t21, label %range3991, label %inrange3992 range3991: call void @finch_panic_index(ptr @.str.2479, i64 1646, i64 %t18, i64 %t20) unreachable inrange3992: %t22 = extractvalue { ptr, i64, i64 } %t19, 0 %t23 = getelementptr inbounds %S.gen.StructDef, ptr %t22, i64 %t18 %t24 = getelementptr inbounds %S.gen.StructDef, ptr %t23, i32 0, i32 2 %t25 = load i1, ptr %t24 br i1 %t25, label %then3993, label %endif3995 then3993: %t26 = load ptr, ptr %a1 %t27 = load i64, ptr %a2 call void @finch.gen.resolveCStruct(ptr %t26, i64 %t27) ret void endif3995: %t28 = load ptr, ptr %a1 %t29 = icmp eq ptr %t28, null br i1 %t29, label %panic3996, label %ok3997 panic3996: call void @finch_panic(ptr @.str.2480, i64 1650, ptr @.str.2481) unreachable ok3997: %t30 = getelementptr inbounds %S.gen.Gen, ptr %t28, i32 0, i32 15 %t31 = load i64, ptr %a2 %t32 = load { ptr, i64, i64 }, ptr %t30 %t33 = extractvalue { ptr, i64, i64 } %t32, 1 %t34 = icmp uge i64 %t31, %t33 br i1 %t34, label %range3998, label %inrange3999 range3998: call void @finch_panic_index(ptr @.str.2482, i64 1650, i64 %t31, i64 %t33) unreachable inrange3999: %t35 = extractvalue { ptr, i64, i64 } %t32, 0 %t36 = getelementptr inbounds %S.gen.StructDef, ptr %t35, i64 %t31 %t37 = getelementptr inbounds %S.gen.StructDef, ptr %t36, i32 0, i32 5 %t38 = getelementptr inbounds { ptr, i64, i64 }, ptr %t37, i32 0, i32 1 %t39 = load i64, ptr %t38 %t40 = icmp eq i64 %t39, 0 br i1 %t40, label %then4000, label %endif4002 then4000: %t41 = load ptr, ptr %a1 %t42 = load i64, ptr %a2 call void @finch.gen.resolveStructBody(ptr %t41, i64 %t42) ret void endif4002: %t43 = load ptr, ptr %a1 %t44 = icmp eq ptr %t43, null br i1 %t44, label %panic4003, label %ok4004 panic4003: call void @finch_panic(ptr @.str.2483, i64 1655, ptr @.str.2484) unreachable ok4004: %t45 = getelementptr inbounds %S.gen.Gen, ptr %t43, i32 0, i32 17 %t46 = load { ptr, i64, i64 }, ptr %t45 store { ptr, i64, i64 } %t46, ptr %a47 call void @finch.copy.arr_str(ptr %a48, ptr %a47) %t49 = load { ptr, i64, i64 }, ptr %a48 store { ptr, i64, i64 } %t49, ptr %a50 %t51 = load ptr, ptr %a1 %t52 = icmp eq ptr %t51, null br i1 %t52, label %panic4005, label %ok4006 panic4005: call void @finch_panic(ptr @.str.2485, i64 1656, ptr @.str.2486) unreachable ok4006: %t53 = getelementptr inbounds %S.gen.Gen, ptr %t51, i32 0, i32 18 %t54 = load { ptr, i64, i64 }, ptr %t53 store { ptr, i64, i64 } %t54, ptr %a55 call void @finch.copy.arr_S_ast_Type(ptr %a56, ptr %a55) %t57 = load { ptr, i64, i64 }, ptr %a56 store { ptr, i64, i64 } %t57, ptr %a58 %t59 = load ptr, ptr %a1 %t60 = icmp eq ptr %t59, null br i1 %t60, label %panic4007, label %ok4008 panic4007: call void @finch_panic(ptr @.str.2487, i64 1657, ptr @.str.2488) unreachable ok4008: %t61 = getelementptr inbounds %S.gen.Gen, ptr %t59, i32 0, i32 19 %t62 = load { ptr, i64, i64 }, ptr %t61 store { ptr, i64, i64 } %t62, ptr %a63 call void @finch_str_copy(ptr %a64, ptr %a63) %t65 = load { ptr, i64, i64 }, ptr %a64 store { ptr, i64, i64 } %t65, ptr %a66 %t67 = load ptr, ptr %a1 %t68 = icmp eq ptr %t67, null br i1 %t68, label %panic4009, label %ok4010 panic4009: call void @finch_panic(ptr @.str.2489, i64 1658, ptr @.str.2490) unreachable ok4010: %t69 = getelementptr inbounds %S.gen.Gen, ptr %t67, i32 0, i32 15 %t70 = load i64, ptr %a2 %t71 = load { ptr, i64, i64 }, ptr %t69 %t72 = extractvalue { ptr, i64, i64 } %t71, 1 %t73 = icmp uge i64 %t70, %t72 br i1 %t73, label %range4011, label %inrange4012 range4011: call void @finch_panic_index(ptr @.str.2491, i64 1658, i64 %t70, i64 %t72) unreachable inrange4012: %t74 = extractvalue { ptr, i64, i64 } %t71, 0 %t75 = getelementptr inbounds %S.gen.StructDef, ptr %t74, i64 %t70 %t76 = getelementptr inbounds %S.gen.StructDef, ptr %t75, i32 0, i32 6 %t77 = load { ptr, i64, i64 }, ptr %t76 %t78 = load ptr, ptr %a1 %t79 = icmp eq ptr %t78, null br i1 %t79, label %panic4013, label %ok4014 panic4013: call void @finch_panic(ptr @.str.2492, i64 1658, ptr @.str.2493) unreachable ok4014: %t80 = getelementptr inbounds %S.gen.Gen, ptr %t78, i32 0, i32 17 store { ptr, i64, i64 } %t77, ptr %a81 call void @finch.copy.arr_str(ptr %a82, ptr %a81) %t83 = load { ptr, i64, i64 }, ptr %a82 store { ptr, i64, i64 } %t83, ptr %t80 %t84 = load ptr, ptr %a1 %t85 = icmp eq ptr %t84, null br i1 %t85, label %panic4015, label %ok4016 panic4015: call void @finch_panic(ptr @.str.2494, i64 1659, ptr @.str.2495) unreachable ok4016: %t86 = getelementptr inbounds %S.gen.Gen, ptr %t84, i32 0, i32 15 %t87 = load i64, ptr %a2 %t88 = load { ptr, i64, i64 }, ptr %t86 %t89 = extractvalue { ptr, i64, i64 } %t88, 1 %t90 = icmp uge i64 %t87, %t89 br i1 %t90, label %range4017, label %inrange4018 range4017: call void @finch_panic_index(ptr @.str.2496, i64 1659, i64 %t87, i64 %t89) unreachable inrange4018: %t91 = extractvalue { ptr, i64, i64 } %t88, 0 %t92 = getelementptr inbounds %S.gen.StructDef, ptr %t91, i64 %t87 %t93 = getelementptr inbounds %S.gen.StructDef, ptr %t92, i32 0, i32 7 %t94 = load { ptr, i64, i64 }, ptr %t93 %t95 = load ptr, ptr %a1 %t96 = icmp eq ptr %t95, null br i1 %t96, label %panic4019, label %ok4020 panic4019: call void @finch_panic(ptr @.str.2497, i64 1659, ptr @.str.2498) unreachable ok4020: %t97 = getelementptr inbounds %S.gen.Gen, ptr %t95, i32 0, i32 18 store { ptr, i64, i64 } %t94, ptr %a98 call void @finch.copy.arr_S_ast_Type(ptr %a99, ptr %a98) %t100 = load { ptr, i64, i64 }, ptr %a99 store { ptr, i64, i64 } %t100, ptr %t97 %t101 = load ptr, ptr %a1 %t102 = icmp eq ptr %t101, null br i1 %t102, label %panic4021, label %ok4022 panic4021: call void @finch_panic(ptr @.str.2500, i64 1660, ptr @.str.2501) unreachable ok4022: %t103 = getelementptr inbounds %S.gen.Gen, ptr %t101, i32 0, i32 15 %t104 = load i64, ptr %a2 %t105 = load { ptr, i64, i64 }, ptr %t103 %t106 = extractvalue { ptr, i64, i64 } %t105, 1 %t107 = icmp uge i64 %t104, %t106 br i1 %t107, label %range4023, label %inrange4024 range4023: call void @finch_panic_index(ptr @.str.2502, i64 1660, i64 %t104, i64 %t106) unreachable inrange4024: %t108 = extractvalue { ptr, i64, i64 } %t105, 0 %t109 = getelementptr inbounds %S.gen.StructDef, ptr %t108, i64 %t104 %t110 = getelementptr inbounds %S.gen.StructDef, ptr %t109, i32 0, i32 1 %t111 = load { ptr, i64, i64 }, ptr %t110 store { ptr, i64, i64 } { ptr @.str.2499, i64 17, i64 0 }, ptr %a113 store { ptr, i64, i64 } %t111, ptr %a114 call void @finch_str_concat(ptr %a112, ptr %a113, ptr %a114) %t115 = load { ptr, i64, i64 }, ptr %a112 store { ptr, i64, i64 } %t115, ptr %a117 store { ptr, i64, i64 } { ptr @.str.2503, i64 1, i64 0 }, ptr %a118 call void @finch_str_concat(ptr %a116, ptr %a117, ptr %a118) %t119 = load { ptr, i64, i64 }, ptr %a116 %t120 = load ptr, ptr %a1 %t121 = icmp eq ptr %t120, null br i1 %t121, label %panic4025, label %ok4026 panic4025: call void @finch_panic(ptr @.str.2504, i64 1660, ptr @.str.2505) unreachable ok4026: %t122 = getelementptr inbounds %S.gen.Gen, ptr %t120, i32 0, i32 19 store { ptr, i64, i64 } %t119, ptr %t122 %t123 = load ptr, ptr %a1 %t124 = load i64, ptr %a2 call void @finch.gen.resolveStructBody(ptr %t123, i64 %t124) %t125 = load { ptr, i64, i64 }, ptr %a50 %t126 = load ptr, ptr %a1 %t127 = icmp eq ptr %t126, null br i1 %t127, label %panic4027, label %ok4028 panic4027: call void @finch_panic(ptr @.str.2506, i64 1662, ptr @.str.2507) unreachable ok4028: %t128 = getelementptr inbounds %S.gen.Gen, ptr %t126, i32 0, i32 17 store { ptr, i64, i64 } %t125, ptr %a129 call void @finch.copy.arr_str(ptr %a130, ptr %a129) %t131 = load { ptr, i64, i64 }, ptr %a130 store { ptr, i64, i64 } %t131, ptr %t128 %t132 = load { ptr, i64, i64 }, ptr %a58 %t133 = load ptr, ptr %a1 %t134 = icmp eq ptr %t133, null br i1 %t134, label %panic4029, label %ok4030 panic4029: call void @finch_panic(ptr @.str.2508, i64 1663, ptr @.str.2509) unreachable ok4030: %t135 = getelementptr inbounds %S.gen.Gen, ptr %t133, i32 0, i32 18 store { ptr, i64, i64 } %t132, ptr %a136 call void @finch.copy.arr_S_ast_Type(ptr %a137, ptr %a136) %t138 = load { ptr, i64, i64 }, ptr %a137 store { ptr, i64, i64 } %t138, ptr %t135 %t139 = load { ptr, i64, i64 }, ptr %a66 %t140 = load ptr, ptr %a1 %t141 = icmp eq ptr %t140, null br i1 %t141, label %panic4031, label %ok4032 panic4031: call void @finch_panic(ptr @.str.2510, i64 1664, ptr @.str.2511) unreachable ok4032: %t142 = getelementptr inbounds %S.gen.Gen, ptr %t140, i32 0, i32 19 store { ptr, i64, i64 } %t139, ptr %a143 call void @finch_str_copy(ptr %a144, ptr %a143) %t145 = load { ptr, i64, i64 }, ptr %a144 store { ptr, i64, i64 } %t145, ptr %t142 ret void } define internal void @finch.gen.resolveStructBody(ptr %p0, i64 %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca i64, align 16 %a40 = alloca %S.ast.Node, align 16 %a41 = alloca %S.ast.Node, align 16 %a43 = alloca %S.ast.Node, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a85 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 %a120 = alloca { ptr, i64, i64 }, align 16 %a121 = alloca { ptr, i64, i64 }, align 16 %a123 = alloca i1, align 16 %a124 = alloca { ptr, i64, i64 }, align 16 %a126 = alloca i64, align 16 %a134 = alloca %S.ast.Node, align 16 %a140 = alloca %S.ast.Type, align 16 %a143 = alloca { ptr, i64, i64 }, align 16 %a144 = alloca { ptr, i64, i64 }, align 16 %a194 = alloca { ptr, i64, i64 }, align 16 %a195 = alloca { ptr, i64, i64 }, align 16 %a213 = alloca %S.ast.Type, align 16 %a214 = alloca %S.ast.Type, align 16 %a248 = alloca { ptr, i64, i64 }, align 16 %a249 = alloca { ptr, i64, i64 }, align 16 %a277 = alloca { ptr, i64, i64 }, align 16 %a278 = alloca { ptr, i64, i64 }, align 16 %a279 = alloca { ptr, i64, i64 }, align 16 %a281 = alloca { ptr, i64, i64 }, align 16 %a282 = alloca { ptr, i64, i64 }, align 16 %a283 = alloca { ptr, i64, i64 }, align 16 %a297 = alloca { ptr, i64, i64 }, align 16 %a298 = alloca { ptr, i64, i64 }, align 16 %a299 = alloca { ptr, i64, i64 }, align 16 %a301 = alloca { ptr, i64, i64 }, align 16 %a302 = alloca { ptr, i64, i64 }, align 16 %a303 = alloca { ptr, i64, i64 }, align 16 %a306 = alloca { ptr, i64, i64 }, align 16 %a307 = alloca { ptr, i64, i64 }, align 16 %a309 = alloca { ptr, i64, i64 }, align 16 %a310 = alloca { ptr, i64, i64 }, align 16 %a311 = alloca { ptr, i64, i64 }, align 16 %a313 = alloca { ptr, i64, i64 }, align 16 %a314 = alloca { ptr, i64, i64 }, align 16 %a315 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store i64 %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null br i1 %t4, label %panic4033, label %ok4034 panic4033: call void @finch_panic(ptr @.str.2512, i64 1668, ptr @.str.2513) unreachable ok4034: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 0 %t6 = load ptr, ptr %a1 %t7 = icmp eq ptr %t6, null br i1 %t7, label %panic4035, label %ok4036 panic4035: call void @finch_panic(ptr @.str.2514, i64 1668, ptr @.str.2515) unreachable ok4036: %t8 = getelementptr inbounds %S.gen.Gen, ptr %t6, i32 0, i32 15 %t9 = load i64, ptr %a2 %t10 = load { ptr, i64, i64 }, ptr %t8 %t11 = extractvalue { ptr, i64, i64 } %t10, 1 %t12 = icmp uge i64 %t9, %t11 br i1 %t12, label %range4037, label %inrange4038 range4037: call void @finch_panic_index(ptr @.str.2516, i64 1668, i64 %t9, i64 %t11) unreachable inrange4038: %t13 = extractvalue { ptr, i64, i64 } %t10, 0 %t14 = getelementptr inbounds %S.gen.StructDef, ptr %t13, i64 %t9 %t15 = getelementptr inbounds %S.gen.StructDef, ptr %t14, i32 0, i32 13 %t16 = load i64, ptr %t15 %t17 = load { ptr, i64, i64 }, ptr %t5 %t18 = extractvalue { ptr, i64, i64 } %t17, 1 %t19 = icmp uge i64 %t16, %t18 br i1 %t19, label %range4039, label %inrange4040 range4039: call void @finch_panic_index(ptr @.str.2517, i64 1668, i64 %t16, i64 %t18) unreachable inrange4040: %t20 = extractvalue { ptr, i64, i64 } %t17, 0 %t21 = getelementptr inbounds %S.ast.Program, ptr %t20, i64 %t16 %t22 = getelementptr inbounds %S.ast.Program, ptr %t21, i32 0, i32 6 %t23 = load ptr, ptr %a1 %t24 = icmp eq ptr %t23, null br i1 %t24, label %panic4041, label %ok4042 panic4041: call void @finch_panic(ptr @.str.2518, i64 1668, ptr @.str.2519) unreachable ok4042: %t25 = getelementptr inbounds %S.gen.Gen, ptr %t23, i32 0, i32 15 %t26 = load i64, ptr %a2 %t27 = load { ptr, i64, i64 }, ptr %t25 %t28 = extractvalue { ptr, i64, i64 } %t27, 1 %t29 = icmp uge i64 %t26, %t28 br i1 %t29, label %range4043, label %inrange4044 range4043: call void @finch_panic_index(ptr @.str.2520, i64 1668, i64 %t26, i64 %t28) unreachable inrange4044: %t30 = extractvalue { ptr, i64, i64 } %t27, 0 %t31 = getelementptr inbounds %S.gen.StructDef, ptr %t30, i64 %t26 %t32 = getelementptr inbounds %S.gen.StructDef, ptr %t31, i32 0, i32 14 %t33 = load i64, ptr %t32 %t34 = load { ptr, i64, i64 }, ptr %t22 %t35 = extractvalue { ptr, i64, i64 } %t34, 1 %t36 = icmp uge i64 %t33, %t35 br i1 %t36, label %range4045, label %inrange4046 range4045: call void @finch_panic_index(ptr @.str.2521, i64 1668, i64 %t33, i64 %t35) unreachable inrange4046: %t37 = extractvalue { ptr, i64, i64 } %t34, 0 %t38 = getelementptr inbounds %S.ast.Node, ptr %t37, i64 %t33 %t39 = load %S.ast.Node, ptr %t38 store %S.ast.Node %t39, ptr %a40 call void @finch.copy.S_ast_Node(ptr %a41, ptr %a40) %t42 = load %S.ast.Node, ptr %a41 store %S.ast.Node %t42, ptr %a43 %t44 = load ptr, ptr %a1 %t45 = icmp eq ptr %t44, null br i1 %t45, label %panic4047, label %ok4048 panic4047: call void @finch_panic(ptr @.str.2522, i64 1669, ptr @.str.2523) unreachable ok4048: %t46 = getelementptr inbounds %S.gen.Gen, ptr %t44, i32 0, i32 15 %t47 = load i64, ptr %a2 %t48 = load { ptr, i64, i64 }, ptr %t46 %t49 = extractvalue { ptr, i64, i64 } %t48, 1 %t50 = icmp uge i64 %t47, %t49 br i1 %t50, label %range4049, label %inrange4050 range4049: call void @finch_panic_index(ptr @.str.2524, i64 1669, i64 %t47, i64 %t49) unreachable inrange4050: %t51 = extractvalue { ptr, i64, i64 } %t48, 0 %t52 = getelementptr inbounds %S.gen.StructDef, ptr %t51, i64 %t47 %t53 = getelementptr inbounds %S.gen.StructDef, ptr %t52, i32 0, i32 15 %t54 = load i64, ptr %t53 %t55 = icmp eq i64 %t54, 1 br i1 %t55, label %then4051, label %endif4053 then4051: %t56 = load ptr, ptr %a1 %t57 = load %S.ast.Node, ptr %a43 %t58 = getelementptr inbounds %S.ast.Node, ptr %a43, i32 0, i32 1 %t59 = load { ptr, i64, i64 }, ptr %t58 store { ptr, i64, i64 } { ptr @.str.2525, i64 11, i64 0 }, ptr %a61 store { ptr, i64, i64 } %t59, ptr %a62 call void @finch_str_concat(ptr %a60, ptr %a61, ptr %a62) %t63 = load { ptr, i64, i64 }, ptr %a60 store { ptr, i64, i64 } %t63, ptr %a65 store { ptr, i64, i64 } { ptr @.str.2526, i64 26, i64 0 }, ptr %a66 call void @finch_str_concat(ptr %a64, ptr %a65, ptr %a66) %t67 = load { ptr, i64, i64 }, ptr %a64 %t68 = getelementptr inbounds %S.ast.Node, ptr %a43, i32 0, i32 1 %t69 = load { ptr, i64, i64 }, ptr %t68 store { ptr, i64, i64 } %t67, ptr %a71 store { ptr, i64, i64 } %t69, ptr %a72 call void @finch_str_concat(ptr %a70, ptr %a71, ptr %a72) %t73 = load { ptr, i64, i64 }, ptr %a70 store { ptr, i64, i64 } %t73, ptr %a75 store { ptr, i64, i64 } { ptr @.str.2527, i64 7, i64 0 }, ptr %a76 call void @finch_str_concat(ptr %a74, ptr %a75, ptr %a76) %t77 = load { ptr, i64, i64 }, ptr %a74 %t78 = getelementptr inbounds %S.ast.Node, ptr %a43, i32 0, i32 1 %t79 = load { ptr, i64, i64 }, ptr %t78 store { ptr, i64, i64 } %t77, ptr %a81 store { ptr, i64, i64 } %t79, ptr %a82 call void @finch_str_concat(ptr %a80, ptr %a81, ptr %a82) %t83 = load { ptr, i64, i64 }, ptr %a80 store { ptr, i64, i64 } %t83, ptr %a85 store { ptr, i64, i64 } { ptr @.str.2528, i64 15, i64 0 }, ptr %a86 call void @finch_str_concat(ptr %a84, ptr %a85, ptr %a86) %t87 = load { ptr, i64, i64 }, ptr %a84 call void @finch.gen.fail(ptr %t56, %S.ast.Node %t57, { ptr, i64, i64 } %t87) br label %endif4053 endif4053: %t88 = load ptr, ptr %a1 %t89 = icmp eq ptr %t88, null br i1 %t89, label %panic4054, label %ok4055 panic4054: call void @finch_panic(ptr @.str.2529, i64 1672, ptr @.str.2530) unreachable ok4055: %t90 = getelementptr inbounds %S.gen.Gen, ptr %t88, i32 0, i32 15 %t91 = load i64, ptr %a2 %t92 = load { ptr, i64, i64 }, ptr %t90 %t93 = extractvalue { ptr, i64, i64 } %t92, 1 %t94 = icmp uge i64 %t91, %t93 br i1 %t94, label %range4056, label %inrange4057 range4056: call void @finch_panic_index(ptr @.str.2531, i64 1672, i64 %t91, i64 %t93) unreachable inrange4057: %t95 = extractvalue { ptr, i64, i64 } %t92, 0 %t96 = getelementptr inbounds %S.gen.StructDef, ptr %t95, i64 %t91 %t97 = getelementptr inbounds %S.gen.StructDef, ptr %t96, i32 0, i32 15 store i64 1, ptr %t97 %t98 = load ptr, ptr %a1 %t99 = icmp eq ptr %t98, null br i1 %t99, label %panic4058, label %ok4059 panic4058: call void @finch_panic(ptr @.str.2532, i64 1673, ptr @.str.2533) unreachable ok4059: %t100 = getelementptr inbounds %S.gen.Gen, ptr %t98, i32 0, i32 13 %t101 = load { ptr, i64, i64 }, ptr %t100 store { ptr, i64, i64 } %t101, ptr %a102 call void @finch_str_copy(ptr %a103, ptr %a102) %t104 = load { ptr, i64, i64 }, ptr %a103 store { ptr, i64, i64 } %t104, ptr %a105 %t106 = load ptr, ptr %a1 %t107 = icmp eq ptr %t106, null br i1 %t107, label %panic4060, label %ok4061 panic4060: call void @finch_panic(ptr @.str.2534, i64 1674, ptr @.str.2535) unreachable ok4061: %t108 = getelementptr inbounds %S.gen.Gen, ptr %t106, i32 0, i32 15 %t109 = load i64, ptr %a2 %t110 = load { ptr, i64, i64 }, ptr %t108 %t111 = extractvalue { ptr, i64, i64 } %t110, 1 %t112 = icmp uge i64 %t109, %t111 br i1 %t112, label %range4062, label %inrange4063 range4062: call void @finch_panic_index(ptr @.str.2536, i64 1674, i64 %t109, i64 %t111) unreachable inrange4063: %t113 = extractvalue { ptr, i64, i64 } %t110, 0 %t114 = getelementptr inbounds %S.gen.StructDef, ptr %t113, i64 %t109 %t115 = getelementptr inbounds %S.gen.StructDef, ptr %t114, i32 0, i32 0 %t116 = load { ptr, i64, i64 }, ptr %t115 %t117 = load ptr, ptr %a1 %t118 = icmp eq ptr %t117, null br i1 %t118, label %panic4064, label %ok4065 panic4064: call void @finch_panic(ptr @.str.2537, i64 1674, ptr @.str.2538) unreachable ok4065: %t119 = getelementptr inbounds %S.gen.Gen, ptr %t117, i32 0, i32 13 store { ptr, i64, i64 } %t116, ptr %a120 call void @finch_str_copy(ptr %a121, ptr %a120) %t122 = load { ptr, i64, i64 }, ptr %a121 store { ptr, i64, i64 } %t122, ptr %t119 store i1 false, ptr %a123 store { ptr, i64, i64 } zeroinitializer, ptr %a124 %t125 = getelementptr inbounds %S.ast.Node, ptr %a43, i32 0, i32 9 store i64 0, ptr %a126 br label %each.cond4066 each.cond4066: %t127 = getelementptr inbounds { ptr, i64, i64 }, ptr %t125, i32 0, i32 1 %t128 = load i64, ptr %t127 %t129 = load i64, ptr %a126 %t130 = icmp slt i64 %t129, %t128 br i1 %t130, label %each.body4067, label %each.end4069 each.body4067: %t131 = load ptr, ptr %t125 %t132 = getelementptr inbounds %S.ast.Node, ptr %t131, i64 %t129 %t133 = load %S.ast.Node, ptr %t132 store %S.ast.Node %t133, ptr %a134 %t135 = load ptr, ptr %a1 %t136 = getelementptr inbounds %S.ast.Node, ptr %a134, i32 0, i32 5 %t137 = load %S.ast.Type, ptr %t136 %t138 = load %S.ast.Node, ptr %a134 %t139 = call %S.ast.Type @finch.gen.resolve(ptr %t135, %S.ast.Type %t137, %S.ast.Node %t138) store %S.ast.Type %t139, ptr %a140 %t141 = getelementptr inbounds %S.ast.Type, ptr %a140, i32 0, i32 0 %t142 = load { ptr, i64, i64 }, ptr %t141 store { ptr, i64, i64 } %t142, ptr %a143 store { ptr, i64, i64 } { ptr @.str.2539, i64 6, i64 0 }, ptr %a144 %t145 = call i32 @finch_str_eq(ptr %a143, ptr %a144) %t146 = icmp ne i32 %t145, 0 br i1 %t146, label %then4070, label %endif4072 then4070: %t147 = load ptr, ptr %a1 %t148 = load ptr, ptr %a1 %t149 = getelementptr inbounds %S.ast.Type, ptr %a140, i32 0, i32 3 %t150 = load { ptr, i64, i64 }, ptr %t149 %t151 = getelementptr inbounds %S.ast.Type, ptr %a140, i32 0, i32 2 %t152 = load { ptr, i64, i64 }, ptr %t151 %t153 = call i64 @finch.gen.findStruct(ptr %t148, { ptr, i64, i64 } %t150, { ptr, i64, i64 } %t152) call void @finch.gen.resolveStruct(ptr %t147, i64 %t153) br label %endif4072 endif4072: %t154 = load ptr, ptr %a1 %t155 = icmp eq ptr %t154, null br i1 %t155, label %panic4073, label %ok4074 panic4073: call void @finch_panic(ptr @.str.2540, i64 1682, ptr @.str.2541) unreachable ok4074: %t156 = getelementptr inbounds %S.gen.Gen, ptr %t154, i32 0, i32 15 %t157 = load i64, ptr %a2 %t158 = load { ptr, i64, i64 }, ptr %t156 %t159 = extractvalue { ptr, i64, i64 } %t158, 1 %t160 = icmp uge i64 %t157, %t159 br i1 %t160, label %range4075, label %inrange4076 range4075: call void @finch_panic_index(ptr @.str.2542, i64 1682, i64 %t157, i64 %t159) unreachable inrange4076: %t161 = extractvalue { ptr, i64, i64 } %t158, 0 %t162 = getelementptr inbounds %S.gen.StructDef, ptr %t161, i64 %t157 %t163 = getelementptr inbounds %S.gen.StructDef, ptr %t162, i32 0, i32 3 %t164 = getelementptr inbounds { ptr, i64, i64 }, ptr %t163, i32 0, i32 1 %t165 = load ptr, ptr %a1 %t166 = icmp eq ptr %t165, null br i1 %t166, label %panic4077, label %ok4078 panic4077: call void @finch_panic(ptr @.str.2543, i64 1682, ptr @.str.2544) unreachable ok4078: %t167 = getelementptr inbounds %S.gen.Gen, ptr %t165, i32 0, i32 15 %t168 = load i64, ptr %a2 %t169 = load { ptr, i64, i64 }, ptr %t167 %t170 = extractvalue { ptr, i64, i64 } %t169, 1 %t171 = icmp uge i64 %t168, %t170 br i1 %t171, label %range4079, label %inrange4080 range4079: call void @finch_panic_index(ptr @.str.2545, i64 1682, i64 %t168, i64 %t170) unreachable inrange4080: %t172 = extractvalue { ptr, i64, i64 } %t169, 0 %t173 = getelementptr inbounds %S.gen.StructDef, ptr %t172, i64 %t168 %t174 = getelementptr inbounds %S.gen.StructDef, ptr %t173, i32 0, i32 11 %t175 = getelementptr inbounds { ptr, i64, i64 }, ptr %t174, i32 0, i32 1 %t176 = load i64, ptr %t175 %t177 = load i64, ptr %t164 %t178 = add i64 %t177, 1 call void @finch_arr_reserve(ptr %t163, i64 %t178, i64 ptrtoint (ptr getelementptr (i64, ptr null, i32 1) to i64)) %t179 = load ptr, ptr %t163 %t180 = getelementptr inbounds i64, ptr %t179, i64 %t177 store i64 %t176, ptr %t180 store i64 %t178, ptr %t164 %t181 = load ptr, ptr %a1 %t182 = icmp eq ptr %t181, null br i1 %t182, label %panic4081, label %ok4082 panic4081: call void @finch_panic(ptr @.str.2546, i64 1683, ptr @.str.2547) unreachable ok4082: %t183 = getelementptr inbounds %S.gen.Gen, ptr %t181, i32 0, i32 15 %t184 = load i64, ptr %a2 %t185 = load { ptr, i64, i64 }, ptr %t183 %t186 = extractvalue { ptr, i64, i64 } %t185, 1 %t187 = icmp uge i64 %t184, %t186 br i1 %t187, label %range4083, label %inrange4084 range4083: call void @finch_panic_index(ptr @.str.2548, i64 1683, i64 %t184, i64 %t186) unreachable inrange4084: %t188 = extractvalue { ptr, i64, i64 } %t185, 0 %t189 = getelementptr inbounds %S.gen.StructDef, ptr %t188, i64 %t184 %t190 = getelementptr inbounds %S.gen.StructDef, ptr %t189, i32 0, i32 11 %t191 = getelementptr inbounds { ptr, i64, i64 }, ptr %t190, i32 0, i32 1 %t192 = getelementptr inbounds %S.ast.Node, ptr %a134, i32 0, i32 1 %t193 = load { ptr, i64, i64 }, ptr %t192 store { ptr, i64, i64 } %t193, ptr %a194 call void @finch_str_copy(ptr %a195, ptr %a194) %t196 = load { ptr, i64, i64 }, ptr %a195 %t197 = load i64, ptr %t191 %t198 = add i64 %t197, 1 call void @finch_arr_reserve(ptr %t190, i64 %t198, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t199 = load ptr, ptr %t190 %t200 = getelementptr inbounds { ptr, i64, i64 }, ptr %t199, i64 %t197 store { ptr, i64, i64 } %t196, ptr %t200 store i64 %t198, ptr %t191 %t201 = load ptr, ptr %a1 %t202 = icmp eq ptr %t201, null br i1 %t202, label %panic4085, label %ok4086 panic4085: call void @finch_panic(ptr @.str.2549, i64 1684, ptr @.str.2550) unreachable ok4086: %t203 = getelementptr inbounds %S.gen.Gen, ptr %t201, i32 0, i32 15 %t204 = load i64, ptr %a2 %t205 = load { ptr, i64, i64 }, ptr %t203 %t206 = extractvalue { ptr, i64, i64 } %t205, 1 %t207 = icmp uge i64 %t204, %t206 br i1 %t207, label %range4087, label %inrange4088 range4087: call void @finch_panic_index(ptr @.str.2551, i64 1684, i64 %t204, i64 %t206) unreachable inrange4088: %t208 = extractvalue { ptr, i64, i64 } %t205, 0 %t209 = getelementptr inbounds %S.gen.StructDef, ptr %t208, i64 %t204 %t210 = getelementptr inbounds %S.gen.StructDef, ptr %t209, i32 0, i32 12 %t211 = getelementptr inbounds { ptr, i64, i64 }, ptr %t210, i32 0, i32 1 %t212 = load %S.ast.Type, ptr %a140 store %S.ast.Type %t212, ptr %a213 call void @finch.copy.S_ast_Type(ptr %a214, ptr %a213) %t215 = load %S.ast.Type, ptr %a214 %t216 = load i64, ptr %t211 %t217 = add i64 %t216, 1 call void @finch_arr_reserve(ptr %t210, i64 %t217, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) %t218 = load ptr, ptr %t210 %t219 = getelementptr inbounds %S.ast.Type, ptr %t218, i64 %t216 store %S.ast.Type %t215, ptr %t219 store i64 %t217, ptr %t211 %t220 = load ptr, ptr %a1 %t221 = load %S.ast.Type, ptr %a140 %t222 = call i1 @finch.gen.owning(ptr %t220, %S.ast.Type %t221) br i1 %t222, label %then4089, label %endif4091 then4089: store i1 true, ptr %a123 br label %endif4091 endif4091: %t223 = getelementptr inbounds { ptr, i64, i64 }, ptr %a124, i32 0, i32 1 %t224 = load ptr, ptr %a1 %t225 = load %S.ast.Type, ptr %a140 %t226 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t224, %S.ast.Type %t225) %t227 = load i64, ptr %t223 %t228 = add i64 %t227, 1 call void @finch_arr_reserve(ptr %a124, i64 %t228, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t229 = load ptr, ptr %a124 %t230 = getelementptr inbounds { ptr, i64, i64 }, ptr %t229, i64 %t227 store { ptr, i64, i64 } %t226, ptr %t230 store i64 %t228, ptr %t223 br label %each.step4068 each.step4068: %t231 = load i64, ptr %a126 %t232 = add i64 %t231, 1 store i64 %t232, ptr %a126 br label %each.cond4066 each.end4069: %t233 = load i1, ptr %a123 %t234 = load ptr, ptr %a1 %t235 = icmp eq ptr %t234, null br i1 %t235, label %panic4092, label %ok4093 panic4092: call void @finch_panic(ptr @.str.2552, i64 1690, ptr @.str.2553) unreachable ok4093: %t236 = getelementptr inbounds %S.gen.Gen, ptr %t234, i32 0, i32 15 %t237 = load i64, ptr %a2 %t238 = load { ptr, i64, i64 }, ptr %t236 %t239 = extractvalue { ptr, i64, i64 } %t238, 1 %t240 = icmp uge i64 %t237, %t239 br i1 %t240, label %range4094, label %inrange4095 range4094: call void @finch_panic_index(ptr @.str.2554, i64 1690, i64 %t237, i64 %t239) unreachable inrange4095: %t241 = extractvalue { ptr, i64, i64 } %t238, 0 %t242 = getelementptr inbounds %S.gen.StructDef, ptr %t241, i64 %t237 %t243 = getelementptr inbounds %S.gen.StructDef, ptr %t242, i32 0, i32 16 store i1 %t233, ptr %t243 %t244 = load { ptr, i64, i64 }, ptr %a105 %t245 = load ptr, ptr %a1 %t246 = icmp eq ptr %t245, null br i1 %t246, label %panic4096, label %ok4097 panic4096: call void @finch_panic(ptr @.str.2555, i64 1691, ptr @.str.2556) unreachable ok4097: %t247 = getelementptr inbounds %S.gen.Gen, ptr %t245, i32 0, i32 13 store { ptr, i64, i64 } %t244, ptr %a248 call void @finch_str_copy(ptr %a249, ptr %a248) %t250 = load { ptr, i64, i64 }, ptr %a249 store { ptr, i64, i64 } %t250, ptr %t247 %t251 = load ptr, ptr %a1 %t252 = icmp eq ptr %t251, null br i1 %t252, label %panic4098, label %ok4099 panic4098: call void @finch_panic(ptr @.str.2557, i64 1692, ptr @.str.2558) unreachable ok4099: %t253 = getelementptr inbounds %S.gen.Gen, ptr %t251, i32 0, i32 15 %t254 = load i64, ptr %a2 %t255 = load { ptr, i64, i64 }, ptr %t253 %t256 = extractvalue { ptr, i64, i64 } %t255, 1 %t257 = icmp uge i64 %t254, %t256 br i1 %t257, label %range4100, label %inrange4101 range4100: call void @finch_panic_index(ptr @.str.2559, i64 1692, i64 %t254, i64 %t256) unreachable inrange4101: %t258 = extractvalue { ptr, i64, i64 } %t255, 0 %t259 = getelementptr inbounds %S.gen.StructDef, ptr %t258, i64 %t254 %t260 = getelementptr inbounds %S.gen.StructDef, ptr %t259, i32 0, i32 15 store i64 2, ptr %t260 %t261 = load ptr, ptr %a1 %t262 = icmp eq ptr %t261, null br i1 %t262, label %panic4102, label %ok4103 panic4102: call void @finch_panic(ptr @.str.2560, i64 1693, ptr @.str.2561) unreachable ok4103: %t263 = getelementptr inbounds %S.gen.Gen, ptr %t261, i32 0, i32 2 %t264 = getelementptr inbounds { ptr, i64, i64 }, ptr %t263, i32 0, i32 1 %t265 = load ptr, ptr %a1 %t266 = icmp eq ptr %t265, null br i1 %t266, label %panic4104, label %ok4105 panic4104: call void @finch_panic(ptr @.str.2563, i64 1693, ptr @.str.2564) unreachable ok4105: %t267 = getelementptr inbounds %S.gen.Gen, ptr %t265, i32 0, i32 15 %t268 = load i64, ptr %a2 %t269 = load { ptr, i64, i64 }, ptr %t267 %t270 = extractvalue { ptr, i64, i64 } %t269, 1 %t271 = icmp uge i64 %t268, %t270 br i1 %t271, label %range4106, label %inrange4107 range4106: call void @finch_panic_index(ptr @.str.2565, i64 1693, i64 %t268, i64 %t270) unreachable inrange4107: %t272 = extractvalue { ptr, i64, i64 } %t269, 0 %t273 = getelementptr inbounds %S.gen.StructDef, ptr %t272, i64 %t268 %t274 = getelementptr inbounds %S.gen.StructDef, ptr %t273, i32 0, i32 0 %t275 = load { ptr, i64, i64 }, ptr %t274 %t276 = call { ptr, i64, i64 } @finch.gen.modName({ ptr, i64, i64 } %t275) store { ptr, i64, i64 } { ptr @.str.2562, i64 3, i64 0 }, ptr %a278 store { ptr, i64, i64 } %t276, ptr %a279 call void @finch_str_concat(ptr %a277, ptr %a278, ptr %a279) %t280 = load { ptr, i64, i64 }, ptr %a277 store { ptr, i64, i64 } %t280, ptr %a282 store { ptr, i64, i64 } { ptr @.str.2566, i64 1, i64 0 }, ptr %a283 call void @finch_str_concat(ptr %a281, ptr %a282, ptr %a283) %t284 = load { ptr, i64, i64 }, ptr %a281 %t285 = load ptr, ptr %a1 %t286 = icmp eq ptr %t285, null br i1 %t286, label %panic4108, label %ok4109 panic4108: call void @finch_panic(ptr @.str.2567, i64 1693, ptr @.str.2568) unreachable ok4109: %t287 = getelementptr inbounds %S.gen.Gen, ptr %t285, i32 0, i32 15 %t288 = load i64, ptr %a2 %t289 = load { ptr, i64, i64 }, ptr %t287 %t290 = extractvalue { ptr, i64, i64 } %t289, 1 %t291 = icmp uge i64 %t288, %t290 br i1 %t291, label %range4110, label %inrange4111 range4110: call void @finch_panic_index(ptr @.str.2569, i64 1693, i64 %t288, i64 %t290) unreachable inrange4111: %t292 = extractvalue { ptr, i64, i64 } %t289, 0 %t293 = getelementptr inbounds %S.gen.StructDef, ptr %t292, i64 %t288 %t294 = getelementptr inbounds %S.gen.StructDef, ptr %t293, i32 0, i32 1 %t295 = load { ptr, i64, i64 }, ptr %t294 %t296 = call { ptr, i64, i64 } @finch.gen.mangle({ ptr, i64, i64 } %t295) store { ptr, i64, i64 } %t284, ptr %a298 store { ptr, i64, i64 } %t296, ptr %a299 call void @finch_str_concat(ptr %a297, ptr %a298, ptr %a299) %t300 = load { ptr, i64, i64 }, ptr %a297 store { ptr, i64, i64 } %t300, ptr %a302 store { ptr, i64, i64 } { ptr @.str.2570, i64 10, i64 0 }, ptr %a303 call void @finch_str_concat(ptr %a301, ptr %a302, ptr %a303) %t304 = load { ptr, i64, i64 }, ptr %a301 %t305 = getelementptr inbounds { ptr, i64, i64 }, ptr %a124, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.2571, i64 2, i64 0 }, ptr %a306 call void @finch_str_join(ptr %a307, ptr %a124, ptr %a306) %t308 = load { ptr, i64, i64 }, ptr %a307 store { ptr, i64, i64 } %t304, ptr %a310 store { ptr, i64, i64 } %t308, ptr %a311 call void @finch_str_concat(ptr %a309, ptr %a310, ptr %a311) %t312 = load { ptr, i64, i64 }, ptr %a309 store { ptr, i64, i64 } %t312, ptr %a314 store { ptr, i64, i64 } { ptr @.str.2572, i64 2, i64 0 }, ptr %a315 call void @finch_str_concat(ptr %a313, ptr %a314, ptr %a315) %t316 = load { ptr, i64, i64 }, ptr %a313 %t317 = load i64, ptr %t264 %t318 = add i64 %t317, 1 call void @finch_arr_reserve(ptr %t263, i64 %t318, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t319 = load ptr, ptr %t263 %t320 = getelementptr inbounds { ptr, i64, i64 }, ptr %t319, i64 %t317 store { ptr, i64, i64 } %t316, ptr %t320 store i64 %t318, ptr %t264 ret void } define internal i64 @finch.gen.md(ptr %p0, { ptr, i64, i64 } %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null br i1 %t4, label %panic4112, label %ok4113 panic4112: call void @finch_panic(ptr @.str.2573, i64 1702, ptr @.str.2574) unreachable ok4113: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 31 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 %t7 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t7, ptr %a8 call void @finch_str_copy(ptr %a9, ptr %a8) %t10 = load { ptr, i64, i64 }, ptr %a9 %t11 = load i64, ptr %t6 %t12 = add i64 %t11, 1 call void @finch_arr_reserve(ptr %t5, i64 %t12, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t13 = load ptr, ptr %t5 %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 %t11 store { ptr, i64, i64 } %t10, ptr %t14 store i64 %t12, ptr %t6 %t15 = load ptr, ptr %a1 %t16 = icmp eq ptr %t15, null br i1 %t16, label %panic4114, label %ok4115 panic4114: call void @finch_panic(ptr @.str.2575, i64 1703, ptr @.str.2576) unreachable ok4115: %t17 = getelementptr inbounds %S.gen.Gen, ptr %t15, i32 0, i32 31 %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t17, i32 0, i32 1 %t19 = load i64, ptr %t18 %t20 = sub i64 %t19, 1 ret i64 %t20 } define internal { ptr, i64, i64 } @finch.gen.mdRef(i64 %p0) { entry: %a1 = alloca i64, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 store i64 %p0, ptr %a1 %t2 = load i64, ptr %a1 %t3 = icmp slt i64 %t2, 0 br i1 %t3, label %then4116, label %endif4118 then4116: ret { ptr, i64, i64 } { ptr @.str.2577, i64 4, i64 0 } endif4118: %t4 = load i64, ptr %a1 call void @finch_str_from_int(ptr %a5, i64 %t4) %t6 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } { ptr @.str.2578, i64 1, i64 0 }, ptr %a8 store { ptr, i64, i64 } %t6, ptr %a9 call void @finch_str_concat(ptr %a7, ptr %a8, ptr %a9) %t10 = load { ptr, i64, i64 }, ptr %a7 ret { ptr, i64, i64 } %t10 } define internal i64 @finch.gen.alignUp(i64 %p0, i64 %p1) { entry: %a1 = alloca i64, align 16 %a2 = alloca i64, align 16 store i64 %p0, ptr %a1 store i64 %p1, ptr %a2 %t3 = load i64, ptr %a2 %t4 = icmp sle i64 %t3, 1 br i1 %t4, label %then4119, label %endif4121 then4119: %t5 = load i64, ptr %a1 ret i64 %t5 endif4121: %t6 = load i64, ptr %a1 %t7 = load i64, ptr %a2 %t8 = add i64 %t6, %t7 %t9 = sub i64 %t8, 1 %t10 = load i64, ptr %a2 %t11 = icmp eq i64 %t10, 0 br i1 %t11, label %panic4122, label %ok4123 panic4122: call void @finch_panic(ptr @.str.2579, i64 1722, ptr @.str.2580) unreachable ok4123: %t12 = sdiv i64 %t9, %t10 %t13 = load i64, ptr %a2 %t14 = mul i64 %t12, %t13 ret i64 %t14 } define internal %S.gen.SizeAlign @finch.gen.sizeAlign(ptr %p0, %S.ast.Type %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Type, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca { ptr, i64, i64 }, align 16 %a106 = alloca %S.gen.SizeAlign, align 16 %a117 = alloca { ptr, i64, i64 }, align 16 %a118 = alloca { ptr, i64, i64 }, align 16 %a136 = alloca %S.gen.StructDef, align 16 %a137 = alloca %S.gen.StructDef, align 16 %a139 = alloca %S.gen.StructDef, align 16 %a148 = alloca i64, align 16 %a149 = alloca i64, align 16 %a151 = alloca i64, align 16 %a159 = alloca %S.ast.Type, align 16 %a163 = alloca %S.gen.SizeAlign, align 16 store ptr %p0, ptr %a1 store %S.ast.Type %p1, ptr %a2 %t3 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t4 = load { ptr, i64, i64 }, ptr %t3 store { ptr, i64, i64 } %t4, ptr %a5 call void @finch_str_copy(ptr %a6, ptr %a5) %t7 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t7, ptr %a8 %t9 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t9, ptr %a10 store { ptr, i64, i64 } { ptr @.str.2581, i64 4, i64 0 }, ptr %a11 %t12 = call i32 @finch_str_eq(ptr %a10, ptr %a11) %t13 = icmp ne i32 %t12, 0 br label %logic.from4124 logic.from4124: br i1 %t13, label %logic.end4126, label %logic.rhs4125 logic.rhs4125: %t14 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t14, ptr %a15 store { ptr, i64, i64 } { ptr @.str.2582, i64 4, i64 0 }, ptr %a16 %t17 = call i32 @finch_str_eq(ptr %a15, ptr %a16) %t18 = icmp ne i32 %t17, 0 br label %logic.rend4127 logic.rend4127: br label %logic.end4126 logic.end4126: %t19 = phi i1 [ true, %logic.from4124 ], [ %t18, %logic.rend4127 ] br label %logic.from4128 logic.from4128: br i1 %t19, label %logic.end4130, label %logic.rhs4129 logic.rhs4129: %t20 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t20, ptr %a21 store { ptr, i64, i64 } { ptr @.str.2583, i64 2, i64 0 }, ptr %a22 %t23 = call i32 @finch_str_eq(ptr %a21, ptr %a22) %t24 = icmp ne i32 %t23, 0 br label %logic.rend4131 logic.rend4131: br label %logic.end4130 logic.end4130: %t25 = phi i1 [ true, %logic.from4128 ], [ %t24, %logic.rend4131 ] br label %logic.from4132 logic.from4132: br i1 %t25, label %logic.end4134, label %logic.rhs4133 logic.rhs4133: %t26 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t26, ptr %a27 store { ptr, i64, i64 } { ptr @.str.2584, i64 2, i64 0 }, ptr %a28 %t29 = call i32 @finch_str_eq(ptr %a27, ptr %a28) %t30 = icmp ne i32 %t29, 0 br label %logic.rend4135 logic.rend4135: br label %logic.end4134 logic.end4134: %t31 = phi i1 [ true, %logic.from4132 ], [ %t30, %logic.rend4135 ] br i1 %t31, label %then4136, label %endif4138 then4136: %t32 = insertvalue %S.gen.SizeAlign zeroinitializer, i64 1, 0 %t33 = insertvalue %S.gen.SizeAlign %t32, i64 1, 1 ret %S.gen.SizeAlign %t33 endif4138: %t34 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t34, ptr %a35 store { ptr, i64, i64 } { ptr @.str.2585, i64 3, i64 0 }, ptr %a36 %t37 = call i32 @finch_str_eq(ptr %a35, ptr %a36) %t38 = icmp ne i32 %t37, 0 br label %logic.from4139 logic.from4139: br i1 %t38, label %logic.end4141, label %logic.rhs4140 logic.rhs4140: %t39 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t39, ptr %a40 store { ptr, i64, i64 } { ptr @.str.2586, i64 3, i64 0 }, ptr %a41 %t42 = call i32 @finch_str_eq(ptr %a40, ptr %a41) %t43 = icmp ne i32 %t42, 0 br label %logic.rend4142 logic.rend4142: br label %logic.end4141 logic.end4141: %t44 = phi i1 [ true, %logic.from4139 ], [ %t43, %logic.rend4142 ] br i1 %t44, label %then4143, label %endif4145 then4143: %t45 = insertvalue %S.gen.SizeAlign zeroinitializer, i64 2, 0 %t46 = insertvalue %S.gen.SizeAlign %t45, i64 2, 1 ret %S.gen.SizeAlign %t46 endif4145: %t47 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t47, ptr %a48 store { ptr, i64, i64 } { ptr @.str.2587, i64 3, i64 0 }, ptr %a49 %t50 = call i32 @finch_str_eq(ptr %a48, ptr %a49) %t51 = icmp ne i32 %t50, 0 br label %logic.from4146 logic.from4146: br i1 %t51, label %logic.end4148, label %logic.rhs4147 logic.rhs4147: %t52 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t52, ptr %a53 store { ptr, i64, i64 } { ptr @.str.2588, i64 3, i64 0 }, ptr %a54 %t55 = call i32 @finch_str_eq(ptr %a53, ptr %a54) %t56 = icmp ne i32 %t55, 0 br label %logic.rend4149 logic.rend4149: br label %logic.end4148 logic.end4148: %t57 = phi i1 [ true, %logic.from4146 ], [ %t56, %logic.rend4149 ] br label %logic.from4150 logic.from4150: br i1 %t57, label %logic.end4152, label %logic.rhs4151 logic.rhs4151: %t58 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t58, ptr %a59 store { ptr, i64, i64 } { ptr @.str.2589, i64 3, i64 0 }, ptr %a60 %t61 = call i32 @finch_str_eq(ptr %a59, ptr %a60) %t62 = icmp ne i32 %t61, 0 br label %logic.rend4153 logic.rend4153: br label %logic.end4152 logic.end4152: %t63 = phi i1 [ true, %logic.from4150 ], [ %t62, %logic.rend4153 ] br label %logic.from4154 logic.from4154: br i1 %t63, label %logic.end4156, label %logic.rhs4155 logic.rhs4155: %t64 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t64, ptr %a65 store { ptr, i64, i64 } { ptr @.str.2590, i64 4, i64 0 }, ptr %a66 %t67 = call i32 @finch_str_eq(ptr %a65, ptr %a66) %t68 = icmp ne i32 %t67, 0 br label %logic.rend4157 logic.rend4157: br label %logic.end4156 logic.end4156: %t69 = phi i1 [ true, %logic.from4154 ], [ %t68, %logic.rend4157 ] br i1 %t69, label %then4158, label %endif4160 then4158: %t70 = insertvalue %S.gen.SizeAlign zeroinitializer, i64 4, 0 %t71 = insertvalue %S.gen.SizeAlign %t70, i64 4, 1 ret %S.gen.SizeAlign %t71 endif4160: %t72 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t72, ptr %a73 store { ptr, i64, i64 } { ptr @.str.2591, i64 3, i64 0 }, ptr %a74 %t75 = call i32 @finch_str_eq(ptr %a73, ptr %a74) %t76 = icmp ne i32 %t75, 0 br label %logic.from4161 logic.from4161: br i1 %t76, label %logic.end4163, label %logic.rhs4162 logic.rhs4162: %t77 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t77, ptr %a78 store { ptr, i64, i64 } { ptr @.str.2592, i64 5, i64 0 }, ptr %a79 %t80 = call i32 @finch_str_eq(ptr %a78, ptr %a79) %t81 = icmp ne i32 %t80, 0 br label %logic.rend4164 logic.rend4164: br label %logic.end4163 logic.end4163: %t82 = phi i1 [ true, %logic.from4161 ], [ %t81, %logic.rend4164 ] br i1 %t82, label %then4165, label %endif4167 then4165: %t83 = insertvalue %S.gen.SizeAlign zeroinitializer, i64 24, 0 %t84 = insertvalue %S.gen.SizeAlign %t83, i64 8, 1 ret %S.gen.SizeAlign %t84 endif4167: %t85 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t85, ptr %a86 store { ptr, i64, i64 } { ptr @.str.2593, i64 3, i64 0 }, ptr %a87 %t88 = call i32 @finch_str_eq(ptr %a86, ptr %a87) %t89 = icmp ne i32 %t88, 0 br i1 %t89, label %then4168, label %endif4170 then4168: %t90 = insertvalue %S.gen.SizeAlign zeroinitializer, i64 56, 0 %t91 = insertvalue %S.gen.SizeAlign %t90, i64 8, 1 ret %S.gen.SizeAlign %t91 endif4170: %t92 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t92, ptr %a93 store { ptr, i64, i64 } { ptr @.str.2594, i64 5, i64 0 }, ptr %a94 %t95 = call i32 @finch_str_eq(ptr %a93, ptr %a94) %t96 = icmp ne i32 %t95, 0 br i1 %t96, label %then4171, label %endif4173 then4171: %t97 = load ptr, ptr %a1 %t98 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t99 = load { ptr, i64, i64 }, ptr %t98 %t100 = extractvalue { ptr, i64, i64 } %t99, 1 %t101 = icmp uge i64 0, %t100 br i1 %t101, label %range4174, label %inrange4175 range4174: call void @finch_panic_index(ptr @.str.2595, i64 1744, i64 0, i64 %t100) unreachable inrange4175: %t102 = extractvalue { ptr, i64, i64 } %t99, 0 %t103 = getelementptr inbounds %S.ast.Type, ptr %t102, i64 0 %t104 = load %S.ast.Type, ptr %t103 %t105 = call %S.gen.SizeAlign @finch.gen.sizeAlign(ptr %t97, %S.ast.Type %t104) store %S.gen.SizeAlign %t105, ptr %a106 %t107 = getelementptr inbounds %S.gen.SizeAlign, ptr %a106, i32 0, i32 0 %t108 = load i64, ptr %t107 %t109 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 4 %t110 = load i64, ptr %t109 %t111 = mul i64 %t108, %t110 %t112 = insertvalue %S.gen.SizeAlign zeroinitializer, i64 %t111, 0 %t113 = getelementptr inbounds %S.gen.SizeAlign, ptr %a106, i32 0, i32 1 %t114 = load i64, ptr %t113 %t115 = insertvalue %S.gen.SizeAlign %t112, i64 %t114, 1 ret %S.gen.SizeAlign %t115 endif4173: %t116 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t116, ptr %a117 store { ptr, i64, i64 } { ptr @.str.2596, i64 6, i64 0 }, ptr %a118 %t119 = call i32 @finch_str_eq(ptr %a117, ptr %a118) %t120 = icmp ne i32 %t119, 0 br i1 %t120, label %then4176, label %endif4178 then4176: %t121 = load ptr, ptr %a1 %t122 = icmp eq ptr %t121, null br i1 %t122, label %panic4179, label %ok4180 panic4179: call void @finch_panic(ptr @.str.2597, i64 1748, ptr @.str.2598) unreachable ok4180: %t123 = getelementptr inbounds %S.gen.Gen, ptr %t121, i32 0, i32 15 %t124 = load ptr, ptr %a1 %t125 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t126 = load { ptr, i64, i64 }, ptr %t125 %t127 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t128 = load { ptr, i64, i64 }, ptr %t127 %t129 = call i64 @finch.gen.findStruct(ptr %t124, { ptr, i64, i64 } %t126, { ptr, i64, i64 } %t128) %t130 = load { ptr, i64, i64 }, ptr %t123 %t131 = extractvalue { ptr, i64, i64 } %t130, 1 %t132 = icmp uge i64 %t129, %t131 br i1 %t132, label %range4181, label %inrange4182 range4181: call void @finch_panic_index(ptr @.str.2599, i64 1748, i64 %t129, i64 %t131) unreachable inrange4182: %t133 = extractvalue { ptr, i64, i64 } %t130, 0 %t134 = getelementptr inbounds %S.gen.StructDef, ptr %t133, i64 %t129 %t135 = load %S.gen.StructDef, ptr %t134 store %S.gen.StructDef %t135, ptr %a136 call void @finch.copy.S_gen_StructDef(ptr %a137, ptr %a136) %t138 = load %S.gen.StructDef, ptr %a137 store %S.gen.StructDef %t138, ptr %a139 %t140 = getelementptr inbounds %S.gen.StructDef, ptr %a139, i32 0, i32 2 %t141 = load i1, ptr %t140 br i1 %t141, label %then4183, label %endif4185 then4183: %t142 = getelementptr inbounds %S.gen.StructDef, ptr %a139, i32 0, i32 9 %t143 = load i64, ptr %t142 %t144 = insertvalue %S.gen.SizeAlign zeroinitializer, i64 %t143, 0 %t145 = getelementptr inbounds %S.gen.StructDef, ptr %a139, i32 0, i32 10 %t146 = load i64, ptr %t145 %t147 = insertvalue %S.gen.SizeAlign %t144, i64 %t146, 1 ret %S.gen.SizeAlign %t147 endif4185: store i64 0, ptr %a148 store i64 1, ptr %a149 %t150 = getelementptr inbounds %S.gen.StructDef, ptr %a139, i32 0, i32 12 store i64 0, ptr %a151 br label %each.cond4186 each.cond4186: %t152 = getelementptr inbounds { ptr, i64, i64 }, ptr %t150, i32 0, i32 1 %t153 = load i64, ptr %t152 %t154 = load i64, ptr %a151 %t155 = icmp slt i64 %t154, %t153 br i1 %t155, label %each.body4187, label %each.end4189 each.body4187: %t156 = load ptr, ptr %t150 %t157 = getelementptr inbounds %S.ast.Type, ptr %t156, i64 %t154 %t158 = load %S.ast.Type, ptr %t157 store %S.ast.Type %t158, ptr %a159 %t160 = load ptr, ptr %a1 %t161 = load %S.ast.Type, ptr %a159 %t162 = call %S.gen.SizeAlign @finch.gen.sizeAlign(ptr %t160, %S.ast.Type %t161) store %S.gen.SizeAlign %t162, ptr %a163 %t164 = load i64, ptr %a148 %t165 = getelementptr inbounds %S.gen.SizeAlign, ptr %a163, i32 0, i32 1 %t166 = load i64, ptr %t165 %t167 = call i64 @finch.gen.alignUp(i64 %t164, i64 %t166) %t168 = getelementptr inbounds %S.gen.SizeAlign, ptr %a163, i32 0, i32 0 %t169 = load i64, ptr %t168 %t170 = add i64 %t167, %t169 store i64 %t170, ptr %a148 %t171 = getelementptr inbounds %S.gen.SizeAlign, ptr %a163, i32 0, i32 1 %t172 = load i64, ptr %t171 %t173 = load i64, ptr %a149 %t174 = icmp sgt i64 %t172, %t173 br i1 %t174, label %then4190, label %endif4192 then4190: %t175 = getelementptr inbounds %S.gen.SizeAlign, ptr %a163, i32 0, i32 1 %t176 = load i64, ptr %t175 store i64 %t176, ptr %a149 br label %endif4192 endif4192: br label %each.step4188 each.step4188: %t177 = load i64, ptr %a151 %t178 = add i64 %t177, 1 store i64 %t178, ptr %a151 br label %each.cond4186 each.end4189: %t179 = load i64, ptr %a148 %t180 = load i64, ptr %a149 %t181 = call i64 @finch.gen.alignUp(i64 %t179, i64 %t180) %t182 = insertvalue %S.gen.SizeAlign zeroinitializer, i64 %t181, 0 %t183 = load i64, ptr %a149 %t184 = insertvalue %S.gen.SizeAlign %t182, i64 %t183, 1 ret %S.gen.SizeAlign %t184 endif4178: %t185 = insertvalue %S.gen.SizeAlign zeroinitializer, i64 8, 0 %t186 = insertvalue %S.gen.SizeAlign %t185, i64 8, 1 ret %S.gen.SizeAlign %t186 } define internal { ptr, i64, i64 } @finch.gen.fieldOffsets(ptr %p0, %S.gen.StructDef %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.gen.StructDef, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca i64, align 16 %a13 = alloca i64, align 16 %a21 = alloca %S.ast.Type, align 16 %a25 = alloca %S.gen.SizeAlign, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.gen.StructDef %p1, ptr %a2 %t3 = getelementptr inbounds %S.gen.StructDef, ptr %a2, i32 0, i32 2 %t4 = load i1, ptr %t3 br i1 %t4, label %then4193, label %endif4195 then4193: %t5 = getelementptr inbounds %S.gen.StructDef, ptr %a2, i32 0, i32 4 %t6 = load { ptr, i64, i64 }, ptr %t5 store { ptr, i64, i64 } %t6, ptr %a7 call void @finch.copy.arr_int(ptr %a8, ptr %a7) %t9 = load { ptr, i64, i64 }, ptr %a8 ret { ptr, i64, i64 } %t9 endif4195: store { ptr, i64, i64 } zeroinitializer, ptr %a10 store i64 0, ptr %a11 %t12 = getelementptr inbounds %S.gen.StructDef, ptr %a2, i32 0, i32 12 store i64 0, ptr %a13 br label %each.cond4196 each.cond4196: %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t12, i32 0, i32 1 %t15 = load i64, ptr %t14 %t16 = load i64, ptr %a13 %t17 = icmp slt i64 %t16, %t15 br i1 %t17, label %each.body4197, label %each.end4199 each.body4197: %t18 = load ptr, ptr %t12 %t19 = getelementptr inbounds %S.ast.Type, ptr %t18, i64 %t16 %t20 = load %S.ast.Type, ptr %t19 store %S.ast.Type %t20, ptr %a21 %t22 = load ptr, ptr %a1 %t23 = load %S.ast.Type, ptr %a21 %t24 = call %S.gen.SizeAlign @finch.gen.sizeAlign(ptr %t22, %S.ast.Type %t23) store %S.gen.SizeAlign %t24, ptr %a25 %t26 = load i64, ptr %a11 %t27 = getelementptr inbounds %S.gen.SizeAlign, ptr %a25, i32 0, i32 1 %t28 = load i64, ptr %t27 %t29 = call i64 @finch.gen.alignUp(i64 %t26, i64 %t28) store i64 %t29, ptr %a11 %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %a10, i32 0, i32 1 %t31 = load i64, ptr %a11 %t32 = load i64, ptr %t30 %t33 = add i64 %t32, 1 call void @finch_arr_reserve(ptr %a10, i64 %t33, i64 ptrtoint (ptr getelementptr (i64, ptr null, i32 1) to i64)) %t34 = load ptr, ptr %a10 %t35 = getelementptr inbounds i64, ptr %t34, i64 %t32 store i64 %t31, ptr %t35 store i64 %t33, ptr %t30 %t36 = getelementptr inbounds %S.gen.SizeAlign, ptr %a25, i32 0, i32 0 %t37 = load i64, ptr %t36 %t38 = load i64, ptr %a11 %t39 = add i64 %t38, %t37 store i64 %t39, ptr %a11 br label %each.step4198 each.step4198: %t40 = load i64, ptr %a13 %t41 = add i64 %t40, 1 store i64 %t41, ptr %a13 br label %each.cond4196 each.end4199: %t42 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t42, ptr %a43 call void @finch.copy.arr_int(ptr %a44, ptr %a43) %t45 = load { ptr, i64, i64 }, ptr %a44 ret { ptr, i64, i64 } %t45 } define internal i64 @finch.gen.dbgMember(ptr %p0, { ptr, i64, i64 } %p1, i64 %p2, i64 %p3, i64 %p4, i64 %p5, i64 %p6, i64 %p7) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca i64, align 16 %a4 = alloca i64, align 16 %a5 = alloca i64, align 16 %a6 = alloca i64, align 16 %a7 = alloca i64, align 16 %a8 = alloca i64, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store i64 %p2, ptr %a3 store i64 %p3, ptr %a4 store i64 %p4, ptr %a5 store i64 %p5, ptr %a6 store i64 %p6, ptr %a7 store i64 %p7, ptr %a8 %t9 = load ptr, ptr %a1 %t10 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.2600, i64 42, i64 0 }, ptr %a12 store { ptr, i64, i64 } %t10, ptr %a13 call void @finch_str_concat(ptr %a11, ptr %a12, ptr %a13) %t14 = load { ptr, i64, i64 }, ptr %a11 store { ptr, i64, i64 } %t14, ptr %a16 store { ptr, i64, i64 } { ptr @.str.2601, i64 11, i64 0 }, ptr %a17 call void @finch_str_concat(ptr %a15, ptr %a16, ptr %a17) %t18 = load { ptr, i64, i64 }, ptr %a15 %t19 = load i64, ptr %a3 call void @finch_str_from_int(ptr %a20, i64 %t19) %t21 = load { ptr, i64, i64 }, ptr %a20 store { ptr, i64, i64 } %t18, ptr %a23 store { ptr, i64, i64 } %t21, ptr %a24 call void @finch_str_concat(ptr %a22, ptr %a23, ptr %a24) %t25 = load { ptr, i64, i64 }, ptr %a22 store { ptr, i64, i64 } %t25, ptr %a27 store { ptr, i64, i64 } { ptr @.str.2602, i64 9, i64 0 }, ptr %a28 call void @finch_str_concat(ptr %a26, ptr %a27, ptr %a28) %t29 = load { ptr, i64, i64 }, ptr %a26 %t30 = load i64, ptr %a4 call void @finch_str_from_int(ptr %a31, i64 %t30) %t32 = load { ptr, i64, i64 }, ptr %a31 store { ptr, i64, i64 } %t29, ptr %a34 store { ptr, i64, i64 } %t32, ptr %a35 call void @finch_str_concat(ptr %a33, ptr %a34, ptr %a35) %t36 = load { ptr, i64, i64 }, ptr %a33 store { ptr, i64, i64 } %t36, ptr %a38 store { ptr, i64, i64 } { ptr @.str.2603, i64 8, i64 0 }, ptr %a39 call void @finch_str_concat(ptr %a37, ptr %a38, ptr %a39) %t40 = load { ptr, i64, i64 }, ptr %a37 %t41 = load i64, ptr %a5 call void @finch_str_from_int(ptr %a42, i64 %t41) %t43 = load { ptr, i64, i64 }, ptr %a42 store { ptr, i64, i64 } %t40, ptr %a45 store { ptr, i64, i64 } %t43, ptr %a46 call void @finch_str_concat(ptr %a44, ptr %a45, ptr %a46) %t47 = load { ptr, i64, i64 }, ptr %a44 store { ptr, i64, i64 } %t47, ptr %a49 store { ptr, i64, i64 } { ptr @.str.2604, i64 12, i64 0 }, ptr %a50 call void @finch_str_concat(ptr %a48, ptr %a49, ptr %a50) %t51 = load { ptr, i64, i64 }, ptr %a48 %t52 = load i64, ptr %a6 %t53 = call { ptr, i64, i64 } @finch.gen.mdRef(i64 %t52) store { ptr, i64, i64 } %t51, ptr %a55 store { ptr, i64, i64 } %t53, ptr %a56 call void @finch_str_concat(ptr %a54, ptr %a55, ptr %a56) %t57 = load { ptr, i64, i64 }, ptr %a54 store { ptr, i64, i64 } %t57, ptr %a59 store { ptr, i64, i64 } { ptr @.str.2605, i64 8, i64 0 }, ptr %a60 call void @finch_str_concat(ptr %a58, ptr %a59, ptr %a60) %t61 = load { ptr, i64, i64 }, ptr %a58 %t62 = load i64, ptr %a7 call void @finch_str_from_int(ptr %a63, i64 %t62) %t64 = load { ptr, i64, i64 }, ptr %a63 store { ptr, i64, i64 } %t61, ptr %a66 store { ptr, i64, i64 } %t64, ptr %a67 call void @finch_str_concat(ptr %a65, ptr %a66, ptr %a67) %t68 = load { ptr, i64, i64 }, ptr %a65 store { ptr, i64, i64 } %t68, ptr %a70 store { ptr, i64, i64 } { ptr @.str.2606, i64 10, i64 0 }, ptr %a71 call void @finch_str_concat(ptr %a69, ptr %a70, ptr %a71) %t72 = load { ptr, i64, i64 }, ptr %a69 %t73 = load i64, ptr %a8 call void @finch_str_from_int(ptr %a74, i64 %t73) %t75 = load { ptr, i64, i64 }, ptr %a74 store { ptr, i64, i64 } %t72, ptr %a77 store { ptr, i64, i64 } %t75, ptr %a78 call void @finch_str_concat(ptr %a76, ptr %a77, ptr %a78) %t79 = load { ptr, i64, i64 }, ptr %a76 store { ptr, i64, i64 } %t79, ptr %a81 store { ptr, i64, i64 } { ptr @.str.2607, i64 1, i64 0 }, ptr %a82 call void @finch_str_concat(ptr %a80, ptr %a81, ptr %a82) %t83 = load { ptr, i64, i64 }, ptr %a80 %t84 = call i64 @finch.gen.md(ptr %t9, { ptr, i64, i64 } %t83) ret i64 %t84 } define internal i64 @finch.gen.basicType(ptr %p0, { ptr, i64, i64 } %p1, i64 %p2, { ptr, i64, i64 } %p3) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca i64, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store i64 %p2, ptr %a3 store { ptr, i64, i64 } %p3, ptr %a4 %t5 = load ptr, ptr %a1 %t6 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.2608, i64 20, i64 0 }, ptr %a8 store { ptr, i64, i64 } %t6, ptr %a9 call void @finch_str_concat(ptr %a7, ptr %a8, ptr %a9) %t10 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t10, ptr %a12 store { ptr, i64, i64 } { ptr @.str.2609, i64 9, i64 0 }, ptr %a13 call void @finch_str_concat(ptr %a11, ptr %a12, ptr %a13) %t14 = load { ptr, i64, i64 }, ptr %a11 %t15 = load i64, ptr %a3 call void @finch_str_from_int(ptr %a16, i64 %t15) %t17 = load { ptr, i64, i64 }, ptr %a16 store { ptr, i64, i64 } %t14, ptr %a19 store { ptr, i64, i64 } %t17, ptr %a20 call void @finch_str_concat(ptr %a18, ptr %a19, ptr %a20) %t21 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t21, ptr %a23 store { ptr, i64, i64 } { ptr @.str.2610, i64 12, i64 0 }, ptr %a24 call void @finch_str_concat(ptr %a22, ptr %a23, ptr %a24) %t25 = load { ptr, i64, i64 }, ptr %a22 %t26 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t25, ptr %a28 store { ptr, i64, i64 } %t26, ptr %a29 call void @finch_str_concat(ptr %a27, ptr %a28, ptr %a29) %t30 = load { ptr, i64, i64 }, ptr %a27 store { ptr, i64, i64 } %t30, ptr %a32 store { ptr, i64, i64 } { ptr @.str.2611, i64 1, i64 0 }, ptr %a33 call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33) %t34 = load { ptr, i64, i64 }, ptr %a31 %t35 = call i64 @finch.gen.md(ptr %t5, { ptr, i64, i64 } %t34) ret i64 %t35 } define internal i64 @finch.gen.diType(ptr %p0, %S.ast.Type %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Type, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca i64, align 16 %a58 = alloca i64, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a106 = alloca { ptr, i64, i64 }, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a125 = alloca %S.gen.EnumDef, align 16 %a126 = alloca %S.gen.EnumDef, align 16 %a128 = alloca %S.gen.EnumDef, align 16 %a129 = alloca { ptr, i64, i64 }, align 16 %a133 = alloca i64, align 16 %a146 = alloca { ptr, i64, i64 }, align 16 %a147 = alloca { ptr, i64, i64 }, align 16 %a148 = alloca { ptr, i64, i64 }, align 16 %a150 = alloca { ptr, i64, i64 }, align 16 %a151 = alloca { ptr, i64, i64 }, align 16 %a152 = alloca { ptr, i64, i64 }, align 16 %a162 = alloca { ptr, i64, i64 }, align 16 %a164 = alloca { ptr, i64, i64 }, align 16 %a165 = alloca { ptr, i64, i64 }, align 16 %a166 = alloca { ptr, i64, i64 }, align 16 %a168 = alloca { ptr, i64, i64 }, align 16 %a169 = alloca { ptr, i64, i64 }, align 16 %a170 = alloca { ptr, i64, i64 }, align 16 %a183 = alloca { ptr, i64, i64 }, align 16 %a184 = alloca { ptr, i64, i64 }, align 16 %a185 = alloca { ptr, i64, i64 }, align 16 %a187 = alloca { ptr, i64, i64 }, align 16 %a188 = alloca { ptr, i64, i64 }, align 16 %a189 = alloca { ptr, i64, i64 }, align 16 %a192 = alloca { ptr, i64, i64 }, align 16 %a194 = alloca { ptr, i64, i64 }, align 16 %a195 = alloca { ptr, i64, i64 }, align 16 %a196 = alloca { ptr, i64, i64 }, align 16 %a198 = alloca { ptr, i64, i64 }, align 16 %a199 = alloca { ptr, i64, i64 }, align 16 %a200 = alloca { ptr, i64, i64 }, align 16 %a203 = alloca { ptr, i64, i64 }, align 16 %a204 = alloca { ptr, i64, i64 }, align 16 %a206 = alloca { ptr, i64, i64 }, align 16 %a207 = alloca { ptr, i64, i64 }, align 16 %a208 = alloca { ptr, i64, i64 }, align 16 %a210 = alloca { ptr, i64, i64 }, align 16 %a211 = alloca { ptr, i64, i64 }, align 16 %a212 = alloca { ptr, i64, i64 }, align 16 %a222 = alloca { ptr, i64, i64 }, align 16 %a223 = alloca i32, align 16 %a234 = alloca { ptr, i64, i64 }, align 16 %a235 = alloca { ptr, i64, i64 }, align 16 %a238 = alloca i64, align 16 %a254 = alloca { ptr, i64, i64 }, align 16 %a255 = alloca { ptr, i64, i64 }, align 16 %a256 = alloca { ptr, i64, i64 }, align 16 %a258 = alloca { ptr, i64, i64 }, align 16 %a259 = alloca { ptr, i64, i64 }, align 16 %a260 = alloca { ptr, i64, i64 }, align 16 %a272 = alloca { ptr, i64, i64 }, align 16 %a273 = alloca { ptr, i64, i64 }, align 16 %a285 = alloca %S.gen.SizeAlign, align 16 %a289 = alloca { ptr, i64, i64 }, align 16 %a291 = alloca { ptr, i64, i64 }, align 16 %a292 = alloca { ptr, i64, i64 }, align 16 %a293 = alloca { ptr, i64, i64 }, align 16 %a295 = alloca { ptr, i64, i64 }, align 16 %a296 = alloca { ptr, i64, i64 }, align 16 %a297 = alloca { ptr, i64, i64 }, align 16 %a300 = alloca i64, align 16 %a311 = alloca { ptr, i64, i64 }, align 16 %a312 = alloca { ptr, i64, i64 }, align 16 %a313 = alloca { ptr, i64, i64 }, align 16 %a315 = alloca { ptr, i64, i64 }, align 16 %a316 = alloca { ptr, i64, i64 }, align 16 %a317 = alloca { ptr, i64, i64 }, align 16 %a325 = alloca { ptr, i64, i64 }, align 16 %a327 = alloca { ptr, i64, i64 }, align 16 %a328 = alloca { ptr, i64, i64 }, align 16 %a329 = alloca { ptr, i64, i64 }, align 16 %a331 = alloca { ptr, i64, i64 }, align 16 %a332 = alloca { ptr, i64, i64 }, align 16 %a333 = alloca { ptr, i64, i64 }, align 16 %a336 = alloca { ptr, i64, i64 }, align 16 %a338 = alloca { ptr, i64, i64 }, align 16 %a339 = alloca { ptr, i64, i64 }, align 16 %a340 = alloca { ptr, i64, i64 }, align 16 %a342 = alloca { ptr, i64, i64 }, align 16 %a343 = alloca { ptr, i64, i64 }, align 16 %a344 = alloca { ptr, i64, i64 }, align 16 %a356 = alloca { ptr, i64, i64 }, align 16 %a357 = alloca { ptr, i64, i64 }, align 16 %a361 = alloca { ptr, i64, i64 }, align 16 %a362 = alloca { ptr, i64, i64 }, align 16 %a367 = alloca %S.ast.Type, align 16 %a369 = alloca { ptr, i64, i64 }, align 16 %a370 = alloca { ptr, i64, i64 }, align 16 %a380 = alloca %S.ast.Type, align 16 %a381 = alloca %S.ast.Type, align 16 %a388 = alloca { ptr, i64, i64 }, align 16 %a389 = alloca { ptr, i64, i64 }, align 16 %a390 = alloca { ptr, i64, i64 }, align 16 %a392 = alloca { ptr, i64, i64 }, align 16 %a393 = alloca { ptr, i64, i64 }, align 16 %a394 = alloca { ptr, i64, i64 }, align 16 %a397 = alloca i64, align 16 %a401 = alloca i64, align 16 %a407 = alloca i64, align 16 %a413 = alloca i64, align 16 %a419 = alloca i64, align 16 %a422 = alloca { ptr, i64, i64 }, align 16 %a423 = alloca { ptr, i64, i64 }, align 16 %a424 = alloca { ptr, i64, i64 }, align 16 %a426 = alloca { ptr, i64, i64 }, align 16 %a427 = alloca { ptr, i64, i64 }, align 16 %a428 = alloca { ptr, i64, i64 }, align 16 %a431 = alloca { ptr, i64, i64 }, align 16 %a433 = alloca { ptr, i64, i64 }, align 16 %a434 = alloca { ptr, i64, i64 }, align 16 %a435 = alloca { ptr, i64, i64 }, align 16 %a437 = alloca { ptr, i64, i64 }, align 16 %a438 = alloca { ptr, i64, i64 }, align 16 %a439 = alloca { ptr, i64, i64 }, align 16 %a442 = alloca { ptr, i64, i64 }, align 16 %a444 = alloca { ptr, i64, i64 }, align 16 %a445 = alloca { ptr, i64, i64 }, align 16 %a446 = alloca { ptr, i64, i64 }, align 16 %a448 = alloca { ptr, i64, i64 }, align 16 %a449 = alloca { ptr, i64, i64 }, align 16 %a450 = alloca { ptr, i64, i64 }, align 16 %a453 = alloca { ptr, i64, i64 }, align 16 %a455 = alloca { ptr, i64, i64 }, align 16 %a456 = alloca { ptr, i64, i64 }, align 16 %a457 = alloca { ptr, i64, i64 }, align 16 %a459 = alloca { ptr, i64, i64 }, align 16 %a460 = alloca { ptr, i64, i64 }, align 16 %a461 = alloca { ptr, i64, i64 }, align 16 %a464 = alloca { ptr, i64, i64 }, align 16 %a466 = alloca { ptr, i64, i64 }, align 16 %a467 = alloca { ptr, i64, i64 }, align 16 %a468 = alloca { ptr, i64, i64 }, align 16 %a470 = alloca { ptr, i64, i64 }, align 16 %a471 = alloca { ptr, i64, i64 }, align 16 %a472 = alloca { ptr, i64, i64 }, align 16 %a484 = alloca { ptr, i64, i64 }, align 16 %a485 = alloca { ptr, i64, i64 }, align 16 %a491 = alloca i64, align 16 %a494 = alloca i64, align 16 %a507 = alloca { ptr, i64, i64 }, align 16 %a508 = alloca { ptr, i64, i64 }, align 16 %a509 = alloca i64, align 16 %a513 = alloca i64, align 16 %a535 = alloca { ptr, i64, i64 }, align 16 %a537 = alloca { ptr, i64, i64 }, align 16 %a538 = alloca { ptr, i64, i64 }, align 16 %a539 = alloca { ptr, i64, i64 }, align 16 %a549 = alloca { ptr, i64, i64 }, align 16 %a550 = alloca { ptr, i64, i64 }, align 16 %a551 = alloca { ptr, i64, i64 }, align 16 %a553 = alloca { ptr, i64, i64 }, align 16 %a554 = alloca { ptr, i64, i64 }, align 16 %a555 = alloca { ptr, i64, i64 }, align 16 %a558 = alloca { ptr, i64, i64 }, align 16 %a560 = alloca { ptr, i64, i64 }, align 16 %a561 = alloca { ptr, i64, i64 }, align 16 %a562 = alloca { ptr, i64, i64 }, align 16 %a564 = alloca { ptr, i64, i64 }, align 16 %a565 = alloca { ptr, i64, i64 }, align 16 %a566 = alloca { ptr, i64, i64 }, align 16 %a569 = alloca { ptr, i64, i64 }, align 16 %a570 = alloca { ptr, i64, i64 }, align 16 %a572 = alloca { ptr, i64, i64 }, align 16 %a573 = alloca { ptr, i64, i64 }, align 16 %a574 = alloca { ptr, i64, i64 }, align 16 %a576 = alloca { ptr, i64, i64 }, align 16 %a577 = alloca { ptr, i64, i64 }, align 16 %a578 = alloca { ptr, i64, i64 }, align 16 %a590 = alloca { ptr, i64, i64 }, align 16 %a591 = alloca { ptr, i64, i64 }, align 16 %a609 = alloca %S.gen.StructDef, align 16 %a610 = alloca %S.gen.StructDef, align 16 %a612 = alloca %S.gen.StructDef, align 16 %a616 = alloca { ptr, i64, i64 }, align 16 %a620 = alloca %S.gen.SizeAlign, align 16 %a621 = alloca { ptr, i64, i64 }, align 16 %a625 = alloca i64, align 16 %a638 = alloca %S.gen.SizeAlign, align 16 %a673 = alloca { ptr, i64, i64 }, align 16 %a675 = alloca { ptr, i64, i64 }, align 16 %a676 = alloca { ptr, i64, i64 }, align 16 %a677 = alloca { ptr, i64, i64 }, align 16 %a687 = alloca { ptr, i64, i64 }, align 16 %a688 = alloca { ptr, i64, i64 }, align 16 %a689 = alloca { ptr, i64, i64 }, align 16 %a691 = alloca { ptr, i64, i64 }, align 16 %a692 = alloca { ptr, i64, i64 }, align 16 %a693 = alloca { ptr, i64, i64 }, align 16 %a696 = alloca { ptr, i64, i64 }, align 16 %a698 = alloca { ptr, i64, i64 }, align 16 %a699 = alloca { ptr, i64, i64 }, align 16 %a700 = alloca { ptr, i64, i64 }, align 16 %a702 = alloca { ptr, i64, i64 }, align 16 %a703 = alloca { ptr, i64, i64 }, align 16 %a704 = alloca { ptr, i64, i64 }, align 16 %a709 = alloca { ptr, i64, i64 }, align 16 %a711 = alloca { ptr, i64, i64 }, align 16 %a712 = alloca { ptr, i64, i64 }, align 16 %a713 = alloca { ptr, i64, i64 }, align 16 %a715 = alloca { ptr, i64, i64 }, align 16 %a716 = alloca { ptr, i64, i64 }, align 16 %a717 = alloca { ptr, i64, i64 }, align 16 %a720 = alloca { ptr, i64, i64 }, align 16 %a721 = alloca { ptr, i64, i64 }, align 16 %a723 = alloca { ptr, i64, i64 }, align 16 %a724 = alloca { ptr, i64, i64 }, align 16 %a725 = alloca { ptr, i64, i64 }, align 16 %a727 = alloca { ptr, i64, i64 }, align 16 %a728 = alloca { ptr, i64, i64 }, align 16 %a729 = alloca { ptr, i64, i64 }, align 16 %a741 = alloca { ptr, i64, i64 }, align 16 %a742 = alloca { ptr, i64, i64 }, align 16 %a743 = alloca { ptr, i64, i64 }, align 16 %a745 = alloca { ptr, i64, i64 }, align 16 %a746 = alloca { ptr, i64, i64 }, align 16 %a747 = alloca { ptr, i64, i64 }, align 16 %a764 = alloca { ptr, i64, i64 }, align 16 %a765 = alloca i32, align 16 store ptr %p0, ptr %a1 store %S.ast.Type %p1, ptr %a2 %t3 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t4 = load { ptr, i64, i64 }, ptr %t3 store { ptr, i64, i64 } %t4, ptr %a5 call void @finch_str_copy(ptr %a6, ptr %a5) %t7 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t7, ptr %a8 %t9 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t9, ptr %a10 store { ptr, i64, i64 } { ptr @.str.2612, i64 4, i64 0 }, ptr %a11 %t12 = call i32 @finch_str_eq(ptr %a10, ptr %a11) %t13 = icmp ne i32 %t12, 0 br label %logic.from4200 logic.from4200: br i1 %t13, label %logic.end4202, label %logic.rhs4201 logic.rhs4201: %t14 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t14, ptr %a15 store { ptr, i64, i64 } { ptr @.str.2613, i64 4, i64 0 }, ptr %a16 %t17 = call i32 @finch_str_eq(ptr %a15, ptr %a16) %t18 = icmp ne i32 %t17, 0 br label %logic.rend4203 logic.rend4203: br label %logic.end4202 logic.end4202: %t19 = phi i1 [ true, %logic.from4200 ], [ %t18, %logic.rend4203 ] br i1 %t19, label %then4204, label %endif4206 then4204: ret i64 -1 endif4206: %t20 = load %S.ast.Type, ptr %a2 %t21 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t20) store { ptr, i64, i64 } { ptr @.str.2614, i64 2, i64 0 }, ptr %a23 store { ptr, i64, i64 } %t21, ptr %a24 call void @finch_str_concat(ptr %a22, ptr %a23, ptr %a24) %t25 = load { ptr, i64, i64 }, ptr %a22 store { ptr, i64, i64 } %t25, ptr %a26 %t27 = load ptr, ptr %a1 %t28 = icmp eq ptr %t27, null br i1 %t28, label %panic4207, label %ok4208 panic4207: call void @finch_panic(ptr @.str.2615, i64 1797, ptr @.str.2616) unreachable ok4208: %t29 = getelementptr inbounds %S.gen.Gen, ptr %t27, i32 0, i32 32 %t30 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } %t30, ptr %a31 %t32 = call i64 @finch_map_find(ptr %t29, ptr %a31, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i64 }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t33 = icmp sge i64 %t32, 0 br i1 %t33, label %then4209, label %endif4211 then4209: %t34 = load ptr, ptr %a1 %t35 = icmp eq ptr %t34, null br i1 %t35, label %panic4212, label %ok4213 panic4212: call void @finch_panic(ptr @.str.2617, i64 1798, ptr @.str.2618) unreachable ok4213: %t36 = getelementptr inbounds %S.gen.Gen, ptr %t34, i32 0, i32 32 %t37 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } %t37, ptr %a38 %t39 = call i64 @finch_map_find(ptr %t36, ptr %a38, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i64 }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t40 = icmp slt i64 %t39, 0 br i1 %t40, label %map.missing4214, label %map.found4215 map.missing4214: store { ptr, i64, i64 } zeroinitializer, ptr %a41 store { ptr, i64, i64 } %t37, ptr %a42 call void @finch_buf_str(ptr %a41, ptr %a42, i32 1) call void @finch_map_missing(ptr @.str.2619, i64 1798, ptr %a41) unreachable map.found4215: %t43 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t36, i32 0, i32 0 %t44 = load ptr, ptr %t43 %t45 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t44, i64 %t39 %t46 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t45, i32 0, i32 2 %t47 = load i64, ptr %t46 ret i64 %t47 endif4211: store i64 -1, ptr %a48 %t49 = load ptr, ptr %a1 %t50 = icmp eq ptr %t49, null br i1 %t50, label %panic4216, label %ok4217 panic4216: call void @finch_panic(ptr @.str.2620, i64 1801, ptr @.str.2621) unreachable ok4217: %t51 = getelementptr inbounds %S.gen.Gen, ptr %t49, i32 0, i32 33 %t52 = load { ptr, i64, i64 }, ptr %t51 %t53 = extractvalue { ptr, i64, i64 } %t52, 1 %t54 = icmp uge i64 0, %t53 br i1 %t54, label %range4218, label %inrange4219 range4218: call void @finch_panic_index(ptr @.str.2622, i64 1801, i64 0, i64 %t53) unreachable inrange4219: %t55 = extractvalue { ptr, i64, i64 } %t52, 0 %t56 = getelementptr inbounds i64, ptr %t55, i64 0 %t57 = load i64, ptr %t56 store i64 %t57, ptr %a58 %t59 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t59, ptr %a60 store { ptr, i64, i64 } { ptr @.str.2623, i64 4, i64 0 }, ptr %a61 %t62 = call i32 @finch_str_eq(ptr %a60, ptr %a61) %t63 = icmp ne i32 %t62, 0 br i1 %t63, label %then4220, label %else4221 then4220: %t64 = load ptr, ptr %a1 %t65 = call i64 @finch.gen.basicType(ptr %t64, { ptr, i64, i64 } { ptr @.str.2624, i64 4, i64 0 }, i64 8, { ptr, i64, i64 } { ptr @.str.2625, i64 14, i64 0 }) store i64 %t65, ptr %a48 br label %endif4222 else4221: %t66 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t66, ptr %a67 store { ptr, i64, i64 } { ptr @.str.2626, i64 4, i64 0 }, ptr %a68 %t69 = call i32 @finch_str_eq(ptr %a67, ptr %a68) %t70 = icmp ne i32 %t69, 0 br i1 %t70, label %then4223, label %else4224 then4223: %t71 = load ptr, ptr %a1 %t72 = call i64 @finch.gen.basicType(ptr %t71, { ptr, i64, i64 } { ptr @.str.2627, i64 4, i64 0 }, i64 8, { ptr, i64, i64 } { ptr @.str.2628, i64 18, i64 0 }) store i64 %t72, ptr %a48 br label %endif4225 else4224: %t73 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t73, ptr %a74 store { ptr, i64, i64 } { ptr @.str.2629, i64 3, i64 0 }, ptr %a75 %t76 = call i32 @finch_str_eq(ptr %a74, ptr %a75) %t77 = icmp ne i32 %t76, 0 br i1 %t77, label %then4226, label %else4227 then4226: %t78 = load ptr, ptr %a1 %t79 = call i64 @finch.gen.basicType(ptr %t78, { ptr, i64, i64 } { ptr @.str.2630, i64 3, i64 0 }, i64 64, { ptr, i64, i64 } { ptr @.str.2631, i64 13, i64 0 }) store i64 %t79, ptr %a48 br label %endif4228 else4227: %t80 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t80, ptr %a81 store { ptr, i64, i64 } { ptr @.str.2632, i64 5, i64 0 }, ptr %a82 %t83 = call i32 @finch_str_eq(ptr %a81, ptr %a82) %t84 = icmp ne i32 %t83, 0 br i1 %t84, label %then4229, label %else4230 then4229: %t85 = load ptr, ptr %a1 %t86 = call i64 @finch.gen.basicType(ptr %t85, { ptr, i64, i64 } { ptr @.str.2633, i64 5, i64 0 }, i64 64, { ptr, i64, i64 } { ptr @.str.2634, i64 12, i64 0 }) store i64 %t86, ptr %a48 br label %endif4231 else4230: %t87 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t87, ptr %a88 store { ptr, i64, i64 } { ptr @.str.2635, i64 3, i64 0 }, ptr %a89 %t90 = call i32 @finch_str_eq(ptr %a88, ptr %a89) %t91 = icmp ne i32 %t90, 0 br i1 %t91, label %then4232, label %else4233 then4232: %t92 = load ptr, ptr %a1 %t93 = call i64 @finch.gen.basicType(ptr %t92, { ptr, i64, i64 } { ptr @.str.2636, i64 3, i64 0 }, i64 32, { ptr, i64, i64 } { ptr @.str.2637, i64 12, i64 0 }) store i64 %t93, ptr %a48 br label %endif4234 else4233: %t94 = load %S.ast.Type, ptr %a2 %t95 = call i1 @finch.gen.isInt(%S.ast.Type %t94) br i1 %t95, label %then4235, label %else4236 then4235: store { ptr, i64, i64 } { ptr @.str.2638, i64 15, i64 0 }, ptr %a96 %t97 = load %S.ast.Type, ptr %a2 %t98 = call i1 @finch.gen.isSigned(%S.ast.Type %t97) br i1 %t98, label %then4238, label %endif4240 then4238: store { ptr, i64, i64 } { ptr @.str.2639, i64 13, i64 0 }, ptr %a96 br label %endif4240 endif4240: %t99 = load ptr, ptr %a1 %t100 = load { ptr, i64, i64 }, ptr %a8 %t101 = load %S.ast.Type, ptr %a2 %t102 = call i64 @finch.gen.bitsOf(%S.ast.Type %t101) %t103 = load { ptr, i64, i64 }, ptr %a96 %t104 = call i64 @finch.gen.basicType(ptr %t99, { ptr, i64, i64 } %t100, i64 %t102, { ptr, i64, i64 } %t103) store i64 %t104, ptr %a48 br label %endif4237 else4236: %t105 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t105, ptr %a106 store { ptr, i64, i64 } { ptr @.str.2640, i64 4, i64 0 }, ptr %a107 %t108 = call i32 @finch_str_eq(ptr %a106, ptr %a107) %t109 = icmp ne i32 %t108, 0 br i1 %t109, label %then4241, label %else4242 then4241: %t110 = load ptr, ptr %a1 %t111 = icmp eq ptr %t110, null br i1 %t111, label %panic4244, label %ok4245 panic4244: call void @finch_panic(ptr @.str.2641, i64 1819, ptr @.str.2642) unreachable ok4245: %t112 = getelementptr inbounds %S.gen.Gen, ptr %t110, i32 0, i32 20 %t113 = load ptr, ptr %a1 %t114 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t115 = load { ptr, i64, i64 }, ptr %t114 %t116 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t117 = load { ptr, i64, i64 }, ptr %t116 %t118 = call i64 @finch.gen.findEnum(ptr %t113, { ptr, i64, i64 } %t115, { ptr, i64, i64 } %t117) %t119 = load { ptr, i64, i64 }, ptr %t112 %t120 = extractvalue { ptr, i64, i64 } %t119, 1 %t121 = icmp uge i64 %t118, %t120 br i1 %t121, label %range4246, label %inrange4247 range4246: call void @finch_panic_index(ptr @.str.2643, i64 1819, i64 %t118, i64 %t120) unreachable inrange4247: %t122 = extractvalue { ptr, i64, i64 } %t119, 0 %t123 = getelementptr inbounds %S.gen.EnumDef, ptr %t122, i64 %t118 %t124 = load %S.gen.EnumDef, ptr %t123 store %S.gen.EnumDef %t124, ptr %a125 call void @finch.copy.S_gen_EnumDef(ptr %a126, ptr %a125) %t127 = load %S.gen.EnumDef, ptr %a126 store %S.gen.EnumDef %t127, ptr %a128 store { ptr, i64, i64 } zeroinitializer, ptr %a129 %t130 = getelementptr inbounds %S.gen.EnumDef, ptr %a128, i32 0, i32 2 %t131 = getelementptr inbounds { ptr, i64, i64 }, ptr %t130, i32 0, i32 1 %t132 = load i64, ptr %t131 store i64 0, ptr %a133 br label %for.cond4248 for.cond4248: %t134 = load i64, ptr %a133 %t135 = icmp slt i64 %t134, %t132 br i1 %t135, label %for.body4249, label %for.end4251 for.body4249: %t136 = getelementptr inbounds { ptr, i64, i64 }, ptr %a129, i32 0, i32 1 %t137 = load ptr, ptr %a1 %t138 = getelementptr inbounds %S.gen.EnumDef, ptr %a128, i32 0, i32 2 %t139 = load i64, ptr %a133 %t140 = load { ptr, i64, i64 }, ptr %t138 %t141 = extractvalue { ptr, i64, i64 } %t140, 1 %t142 = icmp uge i64 %t139, %t141 br i1 %t142, label %range4252, label %inrange4253 range4252: call void @finch_panic_index(ptr @.str.2645, i64 1822, i64 %t139, i64 %t141) unreachable inrange4253: %t143 = extractvalue { ptr, i64, i64 } %t140, 0 %t144 = getelementptr inbounds { ptr, i64, i64 }, ptr %t143, i64 %t139 %t145 = load { ptr, i64, i64 }, ptr %t144 store { ptr, i64, i64 } { ptr @.str.2644, i64 21, i64 0 }, ptr %a147 store { ptr, i64, i64 } %t145, ptr %a148 call void @finch_str_concat(ptr %a146, ptr %a147, ptr %a148) %t149 = load { ptr, i64, i64 }, ptr %a146 store { ptr, i64, i64 } %t149, ptr %a151 store { ptr, i64, i64 } { ptr @.str.2646, i64 10, i64 0 }, ptr %a152 call void @finch_str_concat(ptr %a150, ptr %a151, ptr %a152) %t153 = load { ptr, i64, i64 }, ptr %a150 %t154 = getelementptr inbounds %S.gen.EnumDef, ptr %a128, i32 0, i32 3 %t155 = load i64, ptr %a133 %t156 = load { ptr, i64, i64 }, ptr %t154 %t157 = extractvalue { ptr, i64, i64 } %t156, 1 %t158 = icmp uge i64 %t155, %t157 br i1 %t158, label %range4254, label %inrange4255 range4254: call void @finch_panic_index(ptr @.str.2647, i64 1822, i64 %t155, i64 %t157) unreachable inrange4255: %t159 = extractvalue { ptr, i64, i64 } %t156, 0 %t160 = getelementptr inbounds i64, ptr %t159, i64 %t155 %t161 = load i64, ptr %t160 call void @finch_str_from_int(ptr %a162, i64 %t161) %t163 = load { ptr, i64, i64 }, ptr %a162 store { ptr, i64, i64 } %t153, ptr %a165 store { ptr, i64, i64 } %t163, ptr %a166 call void @finch_str_concat(ptr %a164, ptr %a165, ptr %a166) %t167 = load { ptr, i64, i64 }, ptr %a164 store { ptr, i64, i64 } %t167, ptr %a169 store { ptr, i64, i64 } { ptr @.str.2648, i64 1, i64 0 }, ptr %a170 call void @finch_str_concat(ptr %a168, ptr %a169, ptr %a170) %t171 = load { ptr, i64, i64 }, ptr %a168 %t172 = call i64 @finch.gen.md(ptr %t137, { ptr, i64, i64 } %t171) %t173 = call { ptr, i64, i64 } @finch.gen.mdRef(i64 %t172) %t174 = load i64, ptr %t136 %t175 = add i64 %t174, 1 call void @finch_arr_reserve(ptr %a129, i64 %t175, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t176 = load ptr, ptr %a129 %t177 = getelementptr inbounds { ptr, i64, i64 }, ptr %t176, i64 %t174 store { ptr, i64, i64 } %t173, ptr %t177 store i64 %t175, ptr %t136 br label %for.step4250 for.step4250: %t178 = load i64, ptr %a133 %t179 = add i64 %t178, 1 store i64 %t179, ptr %a133 br label %for.cond4248 for.end4251: %t180 = load ptr, ptr %a1 %t181 = getelementptr inbounds %S.gen.EnumDef, ptr %a128, i32 0, i32 1 %t182 = load { ptr, i64, i64 }, ptr %t181 store { ptr, i64, i64 } { ptr @.str.2649, i64 54, i64 0 }, ptr %a184 store { ptr, i64, i64 } %t182, ptr %a185 call void @finch_str_concat(ptr %a183, ptr %a184, ptr %a185) %t186 = load { ptr, i64, i64 }, ptr %a183 store { ptr, i64, i64 } %t186, ptr %a188 store { ptr, i64, i64 } { ptr @.str.2650, i64 10, i64 0 }, ptr %a189 call void @finch_str_concat(ptr %a187, ptr %a188, ptr %a189) %t190 = load { ptr, i64, i64 }, ptr %a187 %t191 = load i64, ptr %a58 call void @finch_str_from_int(ptr %a192, i64 %t191) %t193 = load { ptr, i64, i64 }, ptr %a192 store { ptr, i64, i64 } %t190, ptr %a195 store { ptr, i64, i64 } %t193, ptr %a196 call void @finch_str_concat(ptr %a194, ptr %a195, ptr %a196) %t197 = load { ptr, i64, i64 }, ptr %a194 store { ptr, i64, i64 } %t197, ptr %a199 store { ptr, i64, i64 } { ptr @.str.2651, i64 24, i64 0 }, ptr %a200 call void @finch_str_concat(ptr %a198, ptr %a199, ptr %a200) %t201 = load { ptr, i64, i64 }, ptr %a198 %t202 = getelementptr inbounds { ptr, i64, i64 }, ptr %a129, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.2652, i64 2, i64 0 }, ptr %a203 call void @finch_str_join(ptr %a204, ptr %a129, ptr %a203) %t205 = load { ptr, i64, i64 }, ptr %a204 store { ptr, i64, i64 } %t201, ptr %a207 store { ptr, i64, i64 } %t205, ptr %a208 call void @finch_str_concat(ptr %a206, ptr %a207, ptr %a208) %t209 = load { ptr, i64, i64 }, ptr %a206 store { ptr, i64, i64 } %t209, ptr %a211 store { ptr, i64, i64 } { ptr @.str.2653, i64 2, i64 0 }, ptr %a212 call void @finch_str_concat(ptr %a210, ptr %a211, ptr %a212) %t213 = load { ptr, i64, i64 }, ptr %a210 %t214 = call i64 @finch.gen.md(ptr %t180, { ptr, i64, i64 } %t213) store i64 %t214, ptr %a48 br label %endif4243 else4242: %t215 = load ptr, ptr %a1 %t216 = call i64 @finch.gen.md(ptr %t215, { ptr, i64, i64 } { ptr @.str.2654, i64 0, i64 0 }) store i64 %t216, ptr %a48 %t217 = load i64, ptr %a48 %t218 = load ptr, ptr %a1 %t219 = icmp eq ptr %t218, null br i1 %t219, label %panic4256, label %ok4257 panic4256: call void @finch_panic(ptr @.str.2655, i64 1828, ptr @.str.2656) unreachable ok4257: %t220 = getelementptr inbounds %S.gen.Gen, ptr %t218, i32 0, i32 32 %t221 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } %t221, ptr %a222 store i32 0, ptr %a223 %t224 = call i64 @finch_map_slot(ptr %t220, ptr %a222, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i64 }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a223) %t225 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t220, i32 0, i32 0 %t226 = load ptr, ptr %t225 %t227 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t226, i64 %t224 %t228 = load i32, ptr %a223 %t229 = icmp ne i32 %t228, 0 br i1 %t229, label %map.new4258, label %map.have4259 map.new4258: %t230 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t227, i32 0, i32 1 call void @finch_str_copy(ptr %t230, ptr %a222) %t231 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t227, i32 0, i32 2 store i64 0, ptr %t231 br label %map.have4259 map.have4259: %t232 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t227, i32 0, i32 2 store i64 %t217, ptr %t232 %t233 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t233, ptr %a234 store { ptr, i64, i64 } { ptr @.str.2657, i64 3, i64 0 }, ptr %a235 %t236 = call i32 @finch_str_eq(ptr %a234, ptr %a235) %t237 = icmp ne i32 %t236, 0 br i1 %t237, label %then4260, label %else4261 then4260: store i64 -1, ptr %a238 %t239 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t240 = getelementptr inbounds { ptr, i64, i64 }, ptr %t239, i32 0, i32 1 %t241 = load i64, ptr %t240 %t242 = icmp sgt i64 %t241, 0 br i1 %t242, label %then4263, label %endif4265 then4263: %t243 = load ptr, ptr %a1 %t244 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t245 = load { ptr, i64, i64 }, ptr %t244 %t246 = extractvalue { ptr, i64, i64 } %t245, 1 %t247 = icmp uge i64 0, %t246 br i1 %t247, label %range4266, label %inrange4267 range4266: call void @finch_panic_index(ptr @.str.2658, i64 1832, i64 0, i64 %t246) unreachable inrange4267: %t248 = extractvalue { ptr, i64, i64 } %t245, 0 %t249 = getelementptr inbounds %S.ast.Type, ptr %t248, i64 0 %t250 = load %S.ast.Type, ptr %t249 %t251 = call i64 @finch.gen.diType(ptr %t243, %S.ast.Type %t250) store i64 %t251, ptr %a238 br label %endif4265 endif4265: %t252 = load i64, ptr %a238 %t253 = call { ptr, i64, i64 } @finch.gen.mdRef(i64 %t252) store { ptr, i64, i64 } { ptr @.str.2659, i64 51, i64 0 }, ptr %a255 store { ptr, i64, i64 } %t253, ptr %a256 call void @finch_str_concat(ptr %a254, ptr %a255, ptr %a256) %t257 = load { ptr, i64, i64 }, ptr %a254 store { ptr, i64, i64 } %t257, ptr %a259 store { ptr, i64, i64 } { ptr @.str.2660, i64 11, i64 0 }, ptr %a260 call void @finch_str_concat(ptr %a258, ptr %a259, ptr %a260) %t261 = load { ptr, i64, i64 }, ptr %a258 %t262 = load ptr, ptr %a1 %t263 = icmp eq ptr %t262, null br i1 %t263, label %panic4268, label %ok4269 panic4268: call void @finch_panic(ptr @.str.2661, i64 1834, ptr @.str.2662) unreachable ok4269: %t264 = getelementptr inbounds %S.gen.Gen, ptr %t262, i32 0, i32 31 %t265 = load i64, ptr %a48 %t266 = load { ptr, i64, i64 }, ptr %t264 %t267 = extractvalue { ptr, i64, i64 } %t266, 1 %t268 = icmp uge i64 %t265, %t267 br i1 %t268, label %range4270, label %inrange4271 range4270: call void @finch_panic_index(ptr @.str.2663, i64 1834, i64 %t265, i64 %t267) unreachable inrange4271: %t269 = extractvalue { ptr, i64, i64 } %t266, 0 %t270 = getelementptr inbounds { ptr, i64, i64 }, ptr %t269, i64 %t265 store { ptr, i64, i64 } %t261, ptr %t270 br label %endif4262 else4261: %t271 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t271, ptr %a272 store { ptr, i64, i64 } { ptr @.str.2664, i64 5, i64 0 }, ptr %a273 %t274 = call i32 @finch_str_eq(ptr %a272, ptr %a273) %t275 = icmp ne i32 %t274, 0 br i1 %t275, label %then4272, label %else4273 then4272: %t276 = load ptr, ptr %a1 %t277 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t278 = load { ptr, i64, i64 }, ptr %t277 %t279 = extractvalue { ptr, i64, i64 } %t278, 1 %t280 = icmp uge i64 0, %t279 br i1 %t280, label %range4275, label %inrange4276 range4275: call void @finch_panic_index(ptr @.str.2665, i64 1836, i64 0, i64 %t279) unreachable inrange4276: %t281 = extractvalue { ptr, i64, i64 } %t278, 0 %t282 = getelementptr inbounds %S.ast.Type, ptr %t281, i64 0 %t283 = load %S.ast.Type, ptr %t282 %t284 = call %S.gen.SizeAlign @finch.gen.sizeAlign(ptr %t276, %S.ast.Type %t283) store %S.gen.SizeAlign %t284, ptr %a285 %t286 = load ptr, ptr %a1 %t287 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 4 %t288 = load i64, ptr %t287 call void @finch_str_from_int(ptr %a289, i64 %t288) %t290 = load { ptr, i64, i64 }, ptr %a289 store { ptr, i64, i64 } { ptr @.str.2666, i64 19, i64 0 }, ptr %a292 store { ptr, i64, i64 } %t290, ptr %a293 call void @finch_str_concat(ptr %a291, ptr %a292, ptr %a293) %t294 = load { ptr, i64, i64 }, ptr %a291 store { ptr, i64, i64 } %t294, ptr %a296 store { ptr, i64, i64 } { ptr @.str.2667, i64 1, i64 0 }, ptr %a297 call void @finch_str_concat(ptr %a295, ptr %a296, ptr %a297) %t298 = load { ptr, i64, i64 }, ptr %a295 %t299 = call i64 @finch.gen.md(ptr %t286, { ptr, i64, i64 } %t298) store i64 %t299, ptr %a300 %t301 = load ptr, ptr %a1 %t302 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t303 = load { ptr, i64, i64 }, ptr %t302 %t304 = extractvalue { ptr, i64, i64 } %t303, 1 %t305 = icmp uge i64 0, %t304 br i1 %t305, label %range4277, label %inrange4278 range4277: call void @finch_panic_index(ptr @.str.2669, i64 1838, i64 0, i64 %t304) unreachable inrange4278: %t306 = extractvalue { ptr, i64, i64 } %t303, 0 %t307 = getelementptr inbounds %S.ast.Type, ptr %t306, i64 0 %t308 = load %S.ast.Type, ptr %t307 %t309 = call i64 @finch.gen.diType(ptr %t301, %S.ast.Type %t308) %t310 = call { ptr, i64, i64 } @finch.gen.mdRef(i64 %t309) store { ptr, i64, i64 } { ptr @.str.2668, i64 51, i64 0 }, ptr %a312 store { ptr, i64, i64 } %t310, ptr %a313 call void @finch_str_concat(ptr %a311, ptr %a312, ptr %a313) %t314 = load { ptr, i64, i64 }, ptr %a311 store { ptr, i64, i64 } %t314, ptr %a316 store { ptr, i64, i64 } { ptr @.str.2670, i64 8, i64 0 }, ptr %a317 call void @finch_str_concat(ptr %a315, ptr %a316, ptr %a317) %t318 = load { ptr, i64, i64 }, ptr %a315 %t319 = getelementptr inbounds %S.gen.SizeAlign, ptr %a285, i32 0, i32 0 %t320 = load i64, ptr %t319 %t321 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 4 %t322 = load i64, ptr %t321 %t323 = mul i64 %t320, %t322 %t324 = mul i64 %t323, 8 call void @finch_str_from_int(ptr %a325, i64 %t324) %t326 = load { ptr, i64, i64 }, ptr %a325 store { ptr, i64, i64 } %t318, ptr %a328 store { ptr, i64, i64 } %t326, ptr %a329 call void @finch_str_concat(ptr %a327, ptr %a328, ptr %a329) %t330 = load { ptr, i64, i64 }, ptr %a327 store { ptr, i64, i64 } %t330, ptr %a332 store { ptr, i64, i64 } { ptr @.str.2671, i64 15, i64 0 }, ptr %a333 call void @finch_str_concat(ptr %a331, ptr %a332, ptr %a333) %t334 = load { ptr, i64, i64 }, ptr %a331 %t335 = load i64, ptr %a300 call void @finch_str_from_int(ptr %a336, i64 %t335) %t337 = load { ptr, i64, i64 }, ptr %a336 store { ptr, i64, i64 } %t334, ptr %a339 store { ptr, i64, i64 } %t337, ptr %a340 call void @finch_str_concat(ptr %a338, ptr %a339, ptr %a340) %t341 = load { ptr, i64, i64 }, ptr %a338 store { ptr, i64, i64 } %t341, ptr %a343 store { ptr, i64, i64 } { ptr @.str.2672, i64 2, i64 0 }, ptr %a344 call void @finch_str_concat(ptr %a342, ptr %a343, ptr %a344) %t345 = load { ptr, i64, i64 }, ptr %a342 %t346 = load ptr, ptr %a1 %t347 = icmp eq ptr %t346, null br i1 %t347, label %panic4279, label %ok4280 panic4279: call void @finch_panic(ptr @.str.2673, i64 1838, ptr @.str.2674) unreachable ok4280: %t348 = getelementptr inbounds %S.gen.Gen, ptr %t346, i32 0, i32 31 %t349 = load i64, ptr %a48 %t350 = load { ptr, i64, i64 }, ptr %t348 %t351 = extractvalue { ptr, i64, i64 } %t350, 1 %t352 = icmp uge i64 %t349, %t351 br i1 %t352, label %range4281, label %inrange4282 range4281: call void @finch_panic_index(ptr @.str.2675, i64 1838, i64 %t349, i64 %t351) unreachable inrange4282: %t353 = extractvalue { ptr, i64, i64 } %t350, 0 %t354 = getelementptr inbounds { ptr, i64, i64 }, ptr %t353, i64 %t349 store { ptr, i64, i64 } %t345, ptr %t354 br label %endif4274 else4273: %t355 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t355, ptr %a356 store { ptr, i64, i64 } { ptr @.str.2676, i64 3, i64 0 }, ptr %a357 %t358 = call i32 @finch_str_eq(ptr %a356, ptr %a357) %t359 = icmp ne i32 %t358, 0 br label %logic.from4283 logic.from4283: br i1 %t359, label %logic.end4285, label %logic.rhs4284 logic.rhs4284: %t360 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t360, ptr %a361 store { ptr, i64, i64 } { ptr @.str.2677, i64 5, i64 0 }, ptr %a362 %t363 = call i32 @finch_str_eq(ptr %a361, ptr %a362) %t364 = icmp ne i32 %t363, 0 br label %logic.rend4286 logic.rend4286: br label %logic.end4285 logic.end4285: %t365 = phi i1 [ true, %logic.from4283 ], [ %t364, %logic.rend4286 ] br i1 %t365, label %then4287, label %else4288 then4287: %t366 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.2678, i64 4, i64 0 }) store %S.ast.Type %t366, ptr %a367 %t368 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t368, ptr %a369 store { ptr, i64, i64 } { ptr @.str.2679, i64 5, i64 0 }, ptr %a370 %t371 = call i32 @finch_str_eq(ptr %a369, ptr %a370) %t372 = icmp ne i32 %t371, 0 br i1 %t372, label %then4290, label %endif4292 then4290: %t373 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t374 = load { ptr, i64, i64 }, ptr %t373 %t375 = extractvalue { ptr, i64, i64 } %t374, 1 %t376 = icmp uge i64 0, %t375 br i1 %t376, label %range4293, label %inrange4294 range4293: call void @finch_panic_index(ptr @.str.2680, i64 1842, i64 0, i64 %t375) unreachable inrange4294: %t377 = extractvalue { ptr, i64, i64 } %t374, 0 %t378 = getelementptr inbounds %S.ast.Type, ptr %t377, i64 0 %t379 = load %S.ast.Type, ptr %t378 store %S.ast.Type %t379, ptr %a380 call void @finch.copy.S_ast_Type(ptr %a381, ptr %a380) %t382 = load %S.ast.Type, ptr %a381 store %S.ast.Type %t382, ptr %a367 br label %endif4292 endif4292: %t383 = load ptr, ptr %a1 %t384 = load ptr, ptr %a1 %t385 = load %S.ast.Type, ptr %a367 %t386 = call i64 @finch.gen.diType(ptr %t384, %S.ast.Type %t385) %t387 = call { ptr, i64, i64 } @finch.gen.mdRef(i64 %t386) store { ptr, i64, i64 } { ptr @.str.2681, i64 51, i64 0 }, ptr %a389 store { ptr, i64, i64 } %t387, ptr %a390 call void @finch_str_concat(ptr %a388, ptr %a389, ptr %a390) %t391 = load { ptr, i64, i64 }, ptr %a388 store { ptr, i64, i64 } %t391, ptr %a393 store { ptr, i64, i64 } { ptr @.str.2682, i64 11, i64 0 }, ptr %a394 call void @finch_str_concat(ptr %a392, ptr %a393, ptr %a394) %t395 = load { ptr, i64, i64 }, ptr %a392 %t396 = call i64 @finch.gen.md(ptr %t383, { ptr, i64, i64 } %t395) store i64 %t396, ptr %a397 %t398 = load ptr, ptr %a1 %t399 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.2683, i64 3, i64 0 }) %t400 = call i64 @finch.gen.diType(ptr %t398, %S.ast.Type %t399) store i64 %t400, ptr %a401 %t402 = load ptr, ptr %a1 %t403 = load i64, ptr %a48 %t404 = load i64, ptr %a58 %t405 = load i64, ptr %a397 %t406 = call i64 @finch.gen.dbgMember(ptr %t402, { ptr, i64, i64 } { ptr @.str.2684, i64 3, i64 0 }, i64 %t403, i64 %t404, i64 0, i64 %t405, i64 64, i64 0) store i64 %t406, ptr %a407 %t408 = load ptr, ptr %a1 %t409 = load i64, ptr %a48 %t410 = load i64, ptr %a58 %t411 = load i64, ptr %a401 %t412 = call i64 @finch.gen.dbgMember(ptr %t408, { ptr, i64, i64 } { ptr @.str.2685, i64 3, i64 0 }, i64 %t409, i64 %t410, i64 0, i64 %t411, i64 64, i64 64) store i64 %t412, ptr %a413 %t414 = load ptr, ptr %a1 %t415 = load i64, ptr %a48 %t416 = load i64, ptr %a58 %t417 = load i64, ptr %a401 %t418 = call i64 @finch.gen.dbgMember(ptr %t414, { ptr, i64, i64 } { ptr @.str.2686, i64 3, i64 0 }, i64 %t415, i64 %t416, i64 0, i64 %t417, i64 64, i64 128) store i64 %t418, ptr %a419 %t420 = load %S.ast.Type, ptr %a2 %t421 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t420) store { ptr, i64, i64 } { ptr @.str.2687, i64 52, i64 0 }, ptr %a423 store { ptr, i64, i64 } %t421, ptr %a424 call void @finch_str_concat(ptr %a422, ptr %a423, ptr %a424) %t425 = load { ptr, i64, i64 }, ptr %a422 store { ptr, i64, i64 } %t425, ptr %a427 store { ptr, i64, i64 } { ptr @.str.2688, i64 10, i64 0 }, ptr %a428 call void @finch_str_concat(ptr %a426, ptr %a427, ptr %a428) %t429 = load { ptr, i64, i64 }, ptr %a426 %t430 = load i64, ptr %a58 call void @finch_str_from_int(ptr %a431, i64 %t430) %t432 = load { ptr, i64, i64 }, ptr %a431 store { ptr, i64, i64 } %t429, ptr %a434 store { ptr, i64, i64 } %t432, ptr %a435 call void @finch_str_concat(ptr %a433, ptr %a434, ptr %a435) %t436 = load { ptr, i64, i64 }, ptr %a433 store { ptr, i64, i64 } %t436, ptr %a438 store { ptr, i64, i64 } { ptr @.str.2689, i64 37, i64 0 }, ptr %a439 call void @finch_str_concat(ptr %a437, ptr %a438, ptr %a439) %t440 = load { ptr, i64, i64 }, ptr %a437 %t441 = load i64, ptr %a407 call void @finch_str_from_int(ptr %a442, i64 %t441) %t443 = load { ptr, i64, i64 }, ptr %a442 store { ptr, i64, i64 } %t440, ptr %a445 store { ptr, i64, i64 } %t443, ptr %a446 call void @finch_str_concat(ptr %a444, ptr %a445, ptr %a446) %t447 = load { ptr, i64, i64 }, ptr %a444 store { ptr, i64, i64 } %t447, ptr %a449 store { ptr, i64, i64 } { ptr @.str.2690, i64 3, i64 0 }, ptr %a450 call void @finch_str_concat(ptr %a448, ptr %a449, ptr %a450) %t451 = load { ptr, i64, i64 }, ptr %a448 %t452 = load i64, ptr %a413 call void @finch_str_from_int(ptr %a453, i64 %t452) %t454 = load { ptr, i64, i64 }, ptr %a453 store { ptr, i64, i64 } %t451, ptr %a456 store { ptr, i64, i64 } %t454, ptr %a457 call void @finch_str_concat(ptr %a455, ptr %a456, ptr %a457) %t458 = load { ptr, i64, i64 }, ptr %a455 store { ptr, i64, i64 } %t458, ptr %a460 store { ptr, i64, i64 } { ptr @.str.2691, i64 3, i64 0 }, ptr %a461 call void @finch_str_concat(ptr %a459, ptr %a460, ptr %a461) %t462 = load { ptr, i64, i64 }, ptr %a459 %t463 = load i64, ptr %a419 call void @finch_str_from_int(ptr %a464, i64 %t463) %t465 = load { ptr, i64, i64 }, ptr %a464 store { ptr, i64, i64 } %t462, ptr %a467 store { ptr, i64, i64 } %t465, ptr %a468 call void @finch_str_concat(ptr %a466, ptr %a467, ptr %a468) %t469 = load { ptr, i64, i64 }, ptr %a466 store { ptr, i64, i64 } %t469, ptr %a471 store { ptr, i64, i64 } { ptr @.str.2692, i64 2, i64 0 }, ptr %a472 call void @finch_str_concat(ptr %a470, ptr %a471, ptr %a472) %t473 = load { ptr, i64, i64 }, ptr %a470 %t474 = load ptr, ptr %a1 %t475 = icmp eq ptr %t474, null br i1 %t475, label %panic4295, label %ok4296 panic4295: call void @finch_panic(ptr @.str.2693, i64 1849, ptr @.str.2694) unreachable ok4296: %t476 = getelementptr inbounds %S.gen.Gen, ptr %t474, i32 0, i32 31 %t477 = load i64, ptr %a48 %t478 = load { ptr, i64, i64 }, ptr %t476 %t479 = extractvalue { ptr, i64, i64 } %t478, 1 %t480 = icmp uge i64 %t477, %t479 br i1 %t480, label %range4297, label %inrange4298 range4297: call void @finch_panic_index(ptr @.str.2695, i64 1849, i64 %t477, i64 %t479) unreachable inrange4298: %t481 = extractvalue { ptr, i64, i64 } %t478, 0 %t482 = getelementptr inbounds { ptr, i64, i64 }, ptr %t481, i64 %t477 store { ptr, i64, i64 } %t473, ptr %t482 br label %endif4289 else4288: %t483 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t483, ptr %a484 store { ptr, i64, i64 } { ptr @.str.2696, i64 3, i64 0 }, ptr %a485 %t486 = call i32 @finch_str_eq(ptr %a484, ptr %a485) %t487 = icmp ne i32 %t486, 0 br i1 %t487, label %then4299, label %else4300 then4299: %t488 = load ptr, ptr %a1 %t489 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.2697, i64 3, i64 0 }) %t490 = call i64 @finch.gen.diType(ptr %t488, %S.ast.Type %t489) store i64 %t490, ptr %a491 %t492 = load ptr, ptr %a1 %t493 = call i64 @finch.gen.md(ptr %t492, { ptr, i64, i64 } { ptr @.str.2698, i64 66, i64 0 }) store i64 %t493, ptr %a494 %t495 = mul i64 7, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t496 = call ptr @finch_alloc(i64 %t495) %t497 = getelementptr inbounds { ptr, i64, i64 }, ptr %t496, i64 0 store { ptr, i64, i64 } { ptr @.str.2699, i64 7, i64 0 }, ptr %t497 %t498 = getelementptr inbounds { ptr, i64, i64 }, ptr %t496, i64 1 store { ptr, i64, i64 } { ptr @.str.2700, i64 3, i64 0 }, ptr %t498 %t499 = getelementptr inbounds { ptr, i64, i64 }, ptr %t496, i64 2 store { ptr, i64, i64 } { ptr @.str.2701, i64 4, i64 0 }, ptr %t499 %t500 = getelementptr inbounds { ptr, i64, i64 }, ptr %t496, i64 3 store { ptr, i64, i64 } { ptr @.str.2702, i64 3, i64 0 }, ptr %t500 %t501 = getelementptr inbounds { ptr, i64, i64 }, ptr %t496, i64 4 store { ptr, i64, i64 } { ptr @.str.2703, i64 5, i64 0 }, ptr %t501 %t502 = getelementptr inbounds { ptr, i64, i64 }, ptr %t496, i64 5 store { ptr, i64, i64 } { ptr @.str.2704, i64 4, i64 0 }, ptr %t502 %t503 = getelementptr inbounds { ptr, i64, i64 }, ptr %t496, i64 6 store { ptr, i64, i64 } { ptr @.str.2705, i64 4, i64 0 }, ptr %t503 %t504 = insertvalue { ptr, i64, i64 } undef, ptr %t496, 0 %t505 = insertvalue { ptr, i64, i64 } %t504, i64 7, 1 %t506 = insertvalue { ptr, i64, i64 } %t505, i64 7, 2 store { ptr, i64, i64 } %t506, ptr %a507 store { ptr, i64, i64 } zeroinitializer, ptr %a508 store i64 0, ptr %a509 br label %for.cond4302 for.cond4302: %t510 = load i64, ptr %a509 %t511 = icmp slt i64 %t510, 7 br i1 %t511, label %for.body4303, label %for.end4305 for.body4303: %t512 = load i64, ptr %a491 store i64 %t512, ptr %a513 %t514 = load i64, ptr %a509 %t515 = icmp eq i64 %t514, 0 br label %logic.from4306 logic.from4306: br i1 %t515, label %logic.end4308, label %logic.rhs4307 logic.rhs4307: %t516 = load i64, ptr %a509 %t517 = icmp eq i64 %t516, 4 br label %logic.rend4309 logic.rend4309: br label %logic.end4308 logic.end4308: %t518 = phi i1 [ true, %logic.from4306 ], [ %t517, %logic.rend4309 ] br i1 %t518, label %then4310, label %endif4312 then4310: %t519 = load i64, ptr %a494 store i64 %t519, ptr %a513 br label %endif4312 endif4312: %t520 = getelementptr inbounds { ptr, i64, i64 }, ptr %a508, i32 0, i32 1 %t521 = load ptr, ptr %a1 %t522 = load i64, ptr %a509 %t523 = load { ptr, i64, i64 }, ptr %a507 %t524 = extractvalue { ptr, i64, i64 } %t523, 1 %t525 = icmp uge i64 %t522, %t524 br i1 %t525, label %range4313, label %inrange4314 range4313: call void @finch_panic_index(ptr @.str.2707, i64 1860, i64 %t522, i64 %t524) unreachable inrange4314: %t526 = extractvalue { ptr, i64, i64 } %t523, 0 %t527 = getelementptr inbounds { ptr, i64, i64 }, ptr %t526, i64 %t522 %t528 = load { ptr, i64, i64 }, ptr %t527 %t529 = load i64, ptr %a48 %t530 = load i64, ptr %a58 %t531 = load i64, ptr %a513 %t532 = load i64, ptr %a509 %t533 = mul i64 64, %t532 %t534 = call i64 @finch.gen.dbgMember(ptr %t521, { ptr, i64, i64 } %t528, i64 %t529, i64 %t530, i64 0, i64 %t531, i64 64, i64 %t533) call void @finch_str_from_int(ptr %a535, i64 %t534) %t536 = load { ptr, i64, i64 }, ptr %a535 store { ptr, i64, i64 } { ptr @.str.2706, i64 1, i64 0 }, ptr %a538 store { ptr, i64, i64 } %t536, ptr %a539 call void @finch_str_concat(ptr %a537, ptr %a538, ptr %a539) %t540 = load { ptr, i64, i64 }, ptr %a537 %t541 = load i64, ptr %t520 %t542 = add i64 %t541, 1 call void @finch_arr_reserve(ptr %a508, i64 %t542, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t543 = load ptr, ptr %a508 %t544 = getelementptr inbounds { ptr, i64, i64 }, ptr %t543, i64 %t541 store { ptr, i64, i64 } %t540, ptr %t544 store i64 %t542, ptr %t520 br label %for.step4304 for.step4304: %t545 = load i64, ptr %a509 %t546 = add i64 %t545, 1 store i64 %t546, ptr %a509 br label %for.cond4302 for.end4305: %t547 = load %S.ast.Type, ptr %a2 %t548 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t547) store { ptr, i64, i64 } { ptr @.str.2708, i64 52, i64 0 }, ptr %a550 store { ptr, i64, i64 } %t548, ptr %a551 call void @finch_str_concat(ptr %a549, ptr %a550, ptr %a551) %t552 = load { ptr, i64, i64 }, ptr %a549 store { ptr, i64, i64 } %t552, ptr %a554 store { ptr, i64, i64 } { ptr @.str.2709, i64 10, i64 0 }, ptr %a555 call void @finch_str_concat(ptr %a553, ptr %a554, ptr %a555) %t556 = load { ptr, i64, i64 }, ptr %a553 %t557 = load i64, ptr %a58 call void @finch_str_from_int(ptr %a558, i64 %t557) %t559 = load { ptr, i64, i64 }, ptr %a558 store { ptr, i64, i64 } %t556, ptr %a561 store { ptr, i64, i64 } %t559, ptr %a562 call void @finch_str_concat(ptr %a560, ptr %a561, ptr %a562) %t563 = load { ptr, i64, i64 }, ptr %a560 store { ptr, i64, i64 } %t563, ptr %a565 store { ptr, i64, i64 } { ptr @.str.2710, i64 36, i64 0 }, ptr %a566 call void @finch_str_concat(ptr %a564, ptr %a565, ptr %a566) %t567 = load { ptr, i64, i64 }, ptr %a564 %t568 = getelementptr inbounds { ptr, i64, i64 }, ptr %a508, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.2711, i64 2, i64 0 }, ptr %a569 call void @finch_str_join(ptr %a570, ptr %a508, ptr %a569) %t571 = load { ptr, i64, i64 }, ptr %a570 store { ptr, i64, i64 } %t567, ptr %a573 store { ptr, i64, i64 } %t571, ptr %a574 call void @finch_str_concat(ptr %a572, ptr %a573, ptr %a574) %t575 = load { ptr, i64, i64 }, ptr %a572 store { ptr, i64, i64 } %t575, ptr %a577 store { ptr, i64, i64 } { ptr @.str.2712, i64 2, i64 0 }, ptr %a578 call void @finch_str_concat(ptr %a576, ptr %a577, ptr %a578) %t579 = load { ptr, i64, i64 }, ptr %a576 %t580 = load ptr, ptr %a1 %t581 = icmp eq ptr %t580, null br i1 %t581, label %panic4315, label %ok4316 panic4315: call void @finch_panic(ptr @.str.2713, i64 1862, ptr @.str.2714) unreachable ok4316: %t582 = getelementptr inbounds %S.gen.Gen, ptr %t580, i32 0, i32 31 %t583 = load i64, ptr %a48 %t584 = load { ptr, i64, i64 }, ptr %t582 %t585 = extractvalue { ptr, i64, i64 } %t584, 1 %t586 = icmp uge i64 %t583, %t585 br i1 %t586, label %range4317, label %inrange4318 range4317: call void @finch_panic_index(ptr @.str.2715, i64 1862, i64 %t583, i64 %t585) unreachable inrange4318: %t587 = extractvalue { ptr, i64, i64 } %t584, 0 %t588 = getelementptr inbounds { ptr, i64, i64 }, ptr %t587, i64 %t583 store { ptr, i64, i64 } %t579, ptr %t588 br label %endif4301 else4300: %t589 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t589, ptr %a590 store { ptr, i64, i64 } { ptr @.str.2716, i64 6, i64 0 }, ptr %a591 %t592 = call i32 @finch_str_eq(ptr %a590, ptr %a591) %t593 = icmp ne i32 %t592, 0 br i1 %t593, label %then4319, label %else4320 then4319: %t594 = load ptr, ptr %a1 %t595 = icmp eq ptr %t594, null br i1 %t595, label %panic4322, label %ok4323 panic4322: call void @finch_panic(ptr @.str.2717, i64 1864, ptr @.str.2718) unreachable ok4323: %t596 = getelementptr inbounds %S.gen.Gen, ptr %t594, i32 0, i32 15 %t597 = load ptr, ptr %a1 %t598 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t599 = load { ptr, i64, i64 }, ptr %t598 %t600 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t601 = load { ptr, i64, i64 }, ptr %t600 %t602 = call i64 @finch.gen.findStruct(ptr %t597, { ptr, i64, i64 } %t599, { ptr, i64, i64 } %t601) %t603 = load { ptr, i64, i64 }, ptr %t596 %t604 = extractvalue { ptr, i64, i64 } %t603, 1 %t605 = icmp uge i64 %t602, %t604 br i1 %t605, label %range4324, label %inrange4325 range4324: call void @finch_panic_index(ptr @.str.2719, i64 1864, i64 %t602, i64 %t604) unreachable inrange4325: %t606 = extractvalue { ptr, i64, i64 } %t603, 0 %t607 = getelementptr inbounds %S.gen.StructDef, ptr %t606, i64 %t602 %t608 = load %S.gen.StructDef, ptr %t607 store %S.gen.StructDef %t608, ptr %a609 call void @finch.copy.S_gen_StructDef(ptr %a610, ptr %a609) %t611 = load %S.gen.StructDef, ptr %a610 store %S.gen.StructDef %t611, ptr %a612 %t613 = load ptr, ptr %a1 %t614 = load %S.gen.StructDef, ptr %a612 %t615 = call { ptr, i64, i64 } @finch.gen.fieldOffsets(ptr %t613, %S.gen.StructDef %t614) store { ptr, i64, i64 } %t615, ptr %a616 %t617 = load ptr, ptr %a1 %t618 = load %S.ast.Type, ptr %a2 %t619 = call %S.gen.SizeAlign @finch.gen.sizeAlign(ptr %t617, %S.ast.Type %t618) store %S.gen.SizeAlign %t619, ptr %a620 store { ptr, i64, i64 } zeroinitializer, ptr %a621 %t622 = getelementptr inbounds %S.gen.StructDef, ptr %a612, i32 0, i32 12 %t623 = getelementptr inbounds { ptr, i64, i64 }, ptr %t622, i32 0, i32 1 %t624 = load i64, ptr %t623 store i64 0, ptr %a625 br label %for.cond4326 for.cond4326: %t626 = load i64, ptr %a625 %t627 = icmp slt i64 %t626, %t624 br i1 %t627, label %for.body4327, label %for.end4329 for.body4327: %t628 = load ptr, ptr %a1 %t629 = getelementptr inbounds %S.gen.StructDef, ptr %a612, i32 0, i32 12 %t630 = load i64, ptr %a625 %t631 = load { ptr, i64, i64 }, ptr %t629 %t632 = extractvalue { ptr, i64, i64 } %t631, 1 %t633 = icmp uge i64 %t630, %t632 br i1 %t633, label %range4330, label %inrange4331 range4330: call void @finch_panic_index(ptr @.str.2720, i64 1869, i64 %t630, i64 %t632) unreachable inrange4331: %t634 = extractvalue { ptr, i64, i64 } %t631, 0 %t635 = getelementptr inbounds %S.ast.Type, ptr %t634, i64 %t630 %t636 = load %S.ast.Type, ptr %t635 %t637 = call %S.gen.SizeAlign @finch.gen.sizeAlign(ptr %t628, %S.ast.Type %t636) store %S.gen.SizeAlign %t637, ptr %a638 %t639 = getelementptr inbounds { ptr, i64, i64 }, ptr %a621, i32 0, i32 1 %t640 = load ptr, ptr %a1 %t641 = getelementptr inbounds %S.gen.StructDef, ptr %a612, i32 0, i32 11 %t642 = load i64, ptr %a625 %t643 = load { ptr, i64, i64 }, ptr %t641 %t644 = extractvalue { ptr, i64, i64 } %t643, 1 %t645 = icmp uge i64 %t642, %t644 br i1 %t645, label %range4332, label %inrange4333 range4332: call void @finch_panic_index(ptr @.str.2722, i64 1870, i64 %t642, i64 %t644) unreachable inrange4333: %t646 = extractvalue { ptr, i64, i64 } %t643, 0 %t647 = getelementptr inbounds { ptr, i64, i64 }, ptr %t646, i64 %t642 %t648 = load { ptr, i64, i64 }, ptr %t647 %t649 = load i64, ptr %a48 %t650 = load i64, ptr %a58 %t651 = load ptr, ptr %a1 %t652 = getelementptr inbounds %S.gen.StructDef, ptr %a612, i32 0, i32 12 %t653 = load i64, ptr %a625 %t654 = load { ptr, i64, i64 }, ptr %t652 %t655 = extractvalue { ptr, i64, i64 } %t654, 1 %t656 = icmp uge i64 %t653, %t655 br i1 %t656, label %range4334, label %inrange4335 range4334: call void @finch_panic_index(ptr @.str.2723, i64 1870, i64 %t653, i64 %t655) unreachable inrange4335: %t657 = extractvalue { ptr, i64, i64 } %t654, 0 %t658 = getelementptr inbounds %S.ast.Type, ptr %t657, i64 %t653 %t659 = load %S.ast.Type, ptr %t658 %t660 = call i64 @finch.gen.diType(ptr %t651, %S.ast.Type %t659) %t661 = getelementptr inbounds %S.gen.SizeAlign, ptr %a638, i32 0, i32 0 %t662 = load i64, ptr %t661 %t663 = mul i64 %t662, 8 %t664 = load i64, ptr %a625 %t665 = load { ptr, i64, i64 }, ptr %a616 %t666 = extractvalue { ptr, i64, i64 } %t665, 1 %t667 = icmp uge i64 %t664, %t666 br i1 %t667, label %range4336, label %inrange4337 range4336: call void @finch_panic_index(ptr @.str.2724, i64 1870, i64 %t664, i64 %t666) unreachable inrange4337: %t668 = extractvalue { ptr, i64, i64 } %t665, 0 %t669 = getelementptr inbounds i64, ptr %t668, i64 %t664 %t670 = load i64, ptr %t669 %t671 = mul i64 %t670, 8 %t672 = call i64 @finch.gen.dbgMember(ptr %t640, { ptr, i64, i64 } %t648, i64 %t649, i64 %t650, i64 0, i64 %t660, i64 %t663, i64 %t671) call void @finch_str_from_int(ptr %a673, i64 %t672) %t674 = load { ptr, i64, i64 }, ptr %a673 store { ptr, i64, i64 } { ptr @.str.2721, i64 1, i64 0 }, ptr %a676 store { ptr, i64, i64 } %t674, ptr %a677 call void @finch_str_concat(ptr %a675, ptr %a676, ptr %a677) %t678 = load { ptr, i64, i64 }, ptr %a675 %t679 = load i64, ptr %t639 %t680 = add i64 %t679, 1 call void @finch_arr_reserve(ptr %a621, i64 %t680, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t681 = load ptr, ptr %a621 %t682 = getelementptr inbounds { ptr, i64, i64 }, ptr %t681, i64 %t679 store { ptr, i64, i64 } %t678, ptr %t682 store i64 %t680, ptr %t639 br label %for.step4328 for.step4328: %t683 = load i64, ptr %a625 %t684 = add i64 %t683, 1 store i64 %t684, ptr %a625 br label %for.cond4326 for.end4329: %t685 = getelementptr inbounds %S.gen.StructDef, ptr %a612, i32 0, i32 1 %t686 = load { ptr, i64, i64 }, ptr %t685 store { ptr, i64, i64 } { ptr @.str.2725, i64 52, i64 0 }, ptr %a688 store { ptr, i64, i64 } %t686, ptr %a689 call void @finch_str_concat(ptr %a687, ptr %a688, ptr %a689) %t690 = load { ptr, i64, i64 }, ptr %a687 store { ptr, i64, i64 } %t690, ptr %a692 store { ptr, i64, i64 } { ptr @.str.2726, i64 10, i64 0 }, ptr %a693 call void @finch_str_concat(ptr %a691, ptr %a692, ptr %a693) %t694 = load { ptr, i64, i64 }, ptr %a691 %t695 = load i64, ptr %a58 call void @finch_str_from_int(ptr %a696, i64 %t695) %t697 = load { ptr, i64, i64 }, ptr %a696 store { ptr, i64, i64 } %t694, ptr %a699 store { ptr, i64, i64 } %t697, ptr %a700 call void @finch_str_concat(ptr %a698, ptr %a699, ptr %a700) %t701 = load { ptr, i64, i64 }, ptr %a698 store { ptr, i64, i64 } %t701, ptr %a703 store { ptr, i64, i64 } { ptr @.str.2727, i64 8, i64 0 }, ptr %a704 call void @finch_str_concat(ptr %a702, ptr %a703, ptr %a704) %t705 = load { ptr, i64, i64 }, ptr %a702 %t706 = getelementptr inbounds %S.gen.SizeAlign, ptr %a620, i32 0, i32 0 %t707 = load i64, ptr %t706 %t708 = mul i64 %t707, 8 call void @finch_str_from_int(ptr %a709, i64 %t708) %t710 = load { ptr, i64, i64 }, ptr %a709 store { ptr, i64, i64 } %t705, ptr %a712 store { ptr, i64, i64 } %t710, ptr %a713 call void @finch_str_concat(ptr %a711, ptr %a712, ptr %a713) %t714 = load { ptr, i64, i64 }, ptr %a711 store { ptr, i64, i64 } %t714, ptr %a716 store { ptr, i64, i64 } { ptr @.str.2728, i64 24, i64 0 }, ptr %a717 call void @finch_str_concat(ptr %a715, ptr %a716, ptr %a717) %t718 = load { ptr, i64, i64 }, ptr %a715 %t719 = getelementptr inbounds { ptr, i64, i64 }, ptr %a621, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.2729, i64 2, i64 0 }, ptr %a720 call void @finch_str_join(ptr %a721, ptr %a621, ptr %a720) %t722 = load { ptr, i64, i64 }, ptr %a721 store { ptr, i64, i64 } %t718, ptr %a724 store { ptr, i64, i64 } %t722, ptr %a725 call void @finch_str_concat(ptr %a723, ptr %a724, ptr %a725) %t726 = load { ptr, i64, i64 }, ptr %a723 store { ptr, i64, i64 } %t726, ptr %a728 store { ptr, i64, i64 } { ptr @.str.2730, i64 2, i64 0 }, ptr %a729 call void @finch_str_concat(ptr %a727, ptr %a728, ptr %a729) %t730 = load { ptr, i64, i64 }, ptr %a727 %t731 = load ptr, ptr %a1 %t732 = icmp eq ptr %t731, null br i1 %t732, label %panic4338, label %ok4339 panic4338: call void @finch_panic(ptr @.str.2731, i64 1872, ptr @.str.2732) unreachable ok4339: %t733 = getelementptr inbounds %S.gen.Gen, ptr %t731, i32 0, i32 31 %t734 = load i64, ptr %a48 %t735 = load { ptr, i64, i64 }, ptr %t733 %t736 = extractvalue { ptr, i64, i64 } %t735, 1 %t737 = icmp uge i64 %t734, %t736 br i1 %t737, label %range4340, label %inrange4341 range4340: call void @finch_panic_index(ptr @.str.2733, i64 1872, i64 %t734, i64 %t736) unreachable inrange4341: %t738 = extractvalue { ptr, i64, i64 } %t735, 0 %t739 = getelementptr inbounds { ptr, i64, i64 }, ptr %t738, i64 %t734 store { ptr, i64, i64 } %t730, ptr %t739 br label %endif4321 else4320: %t740 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } { ptr @.str.2734, i64 20, i64 0 }, ptr %a742 store { ptr, i64, i64 } %t740, ptr %a743 call void @finch_str_concat(ptr %a741, ptr %a742, ptr %a743) %t744 = load { ptr, i64, i64 }, ptr %a741 store { ptr, i64, i64 } %t744, ptr %a746 store { ptr, i64, i64 } { ptr @.str.2735, i64 39, i64 0 }, ptr %a747 call void @finch_str_concat(ptr %a745, ptr %a746, ptr %a747) %t748 = load { ptr, i64, i64 }, ptr %a745 %t749 = load ptr, ptr %a1 %t750 = icmp eq ptr %t749, null br i1 %t750, label %panic4342, label %ok4343 panic4342: call void @finch_panic(ptr @.str.2736, i64 1874, ptr @.str.2737) unreachable ok4343: %t751 = getelementptr inbounds %S.gen.Gen, ptr %t749, i32 0, i32 31 %t752 = load i64, ptr %a48 %t753 = load { ptr, i64, i64 }, ptr %t751 %t754 = extractvalue { ptr, i64, i64 } %t753, 1 %t755 = icmp uge i64 %t752, %t754 br i1 %t755, label %range4344, label %inrange4345 range4344: call void @finch_panic_index(ptr @.str.2738, i64 1874, i64 %t752, i64 %t754) unreachable inrange4345: %t756 = extractvalue { ptr, i64, i64 } %t753, 0 %t757 = getelementptr inbounds { ptr, i64, i64 }, ptr %t756, i64 %t752 store { ptr, i64, i64 } %t748, ptr %t757 br label %endif4321 endif4321: br label %endif4301 endif4301: br label %endif4289 endif4289: br label %endif4274 endif4274: br label %endif4262 endif4262: %t758 = load i64, ptr %a48 ret i64 %t758 endif4243: br label %endif4237 endif4237: br label %endif4234 endif4234: br label %endif4231 endif4231: br label %endif4228 endif4228: br label %endif4225 endif4225: br label %endif4222 endif4222: %t759 = load i64, ptr %a48 %t760 = load ptr, ptr %a1 %t761 = icmp eq ptr %t760, null br i1 %t761, label %panic4346, label %ok4347 panic4346: call void @finch_panic(ptr @.str.2739, i64 1878, ptr @.str.2740) unreachable ok4347: %t762 = getelementptr inbounds %S.gen.Gen, ptr %t760, i32 0, i32 32 %t763 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } %t763, ptr %a764 store i32 0, ptr %a765 %t766 = call i64 @finch_map_slot(ptr %t762, ptr %a764, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i64 }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a765) %t767 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t762, i32 0, i32 0 %t768 = load ptr, ptr %t767 %t769 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t768, i64 %t766 %t770 = load i32, ptr %a765 %t771 = icmp ne i32 %t770, 0 br i1 %t771, label %map.new4348, label %map.have4349 map.new4348: %t772 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t769, i32 0, i32 1 call void @finch_str_copy(ptr %t772, ptr %a764) %t773 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t769, i32 0, i32 2 store i64 0, ptr %t773 br label %map.have4349 map.have4349: %t774 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t769, i32 0, i32 2 store i64 %t759, ptr %t774 %t775 = load i64, ptr %a48 ret i64 %t775 } define internal i64 @finch.gen.dbgLocation(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a85 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca { ptr, i64, i64 }, align 16 %a106 = alloca i64, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 %a113 = alloca i32, align 16 store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = icmp eq ptr %t2, null br i1 %t3, label %panic4350, label %ok4351 panic4350: call void @finch_panic(ptr @.str.2742, i64 1883, ptr @.str.2743) unreachable ok4351: %t4 = getelementptr inbounds %S.gen.Gen, ptr %t2, i32 0, i32 35 %t5 = load i64, ptr %t4 call void @finch_str_from_int(ptr %a6, i64 %t5) %t7 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } { ptr @.str.2741, i64 2, i64 0 }, ptr %a9 store { ptr, i64, i64 } %t7, ptr %a10 call void @finch_str_concat(ptr %a8, ptr %a9, ptr %a10) %t11 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t11, ptr %a13 store { ptr, i64, i64 } { ptr @.str.2744, i64 1, i64 0 }, ptr %a14 call void @finch_str_concat(ptr %a12, ptr %a13, ptr %a14) %t15 = load { ptr, i64, i64 }, ptr %a12 %t16 = load ptr, ptr %a1 %t17 = icmp eq ptr %t16, null br i1 %t17, label %panic4352, label %ok4353 panic4352: call void @finch_panic(ptr @.str.2745, i64 1883, ptr @.str.2746) unreachable ok4353: %t18 = getelementptr inbounds %S.gen.Gen, ptr %t16, i32 0, i32 36 %t19 = load i64, ptr %t18 call void @finch_str_from_int(ptr %a20, i64 %t19) %t21 = load { ptr, i64, i64 }, ptr %a20 store { ptr, i64, i64 } %t15, ptr %a23 store { ptr, i64, i64 } %t21, ptr %a24 call void @finch_str_concat(ptr %a22, ptr %a23, ptr %a24) %t25 = load { ptr, i64, i64 }, ptr %a22 store { ptr, i64, i64 } %t25, ptr %a27 store { ptr, i64, i64 } { ptr @.str.2747, i64 1, i64 0 }, ptr %a28 call void @finch_str_concat(ptr %a26, ptr %a27, ptr %a28) %t29 = load { ptr, i64, i64 }, ptr %a26 %t30 = load ptr, ptr %a1 %t31 = icmp eq ptr %t30, null br i1 %t31, label %panic4354, label %ok4355 panic4354: call void @finch_panic(ptr @.str.2748, i64 1883, ptr @.str.2749) unreachable ok4355: %t32 = getelementptr inbounds %S.gen.Gen, ptr %t30, i32 0, i32 34 %t33 = load i64, ptr %t32 call void @finch_str_from_int(ptr %a34, i64 %t33) %t35 = load { ptr, i64, i64 }, ptr %a34 store { ptr, i64, i64 } %t29, ptr %a37 store { ptr, i64, i64 } %t35, ptr %a38 call void @finch_str_concat(ptr %a36, ptr %a37, ptr %a38) %t39 = load { ptr, i64, i64 }, ptr %a36 store { ptr, i64, i64 } %t39, ptr %a40 %t41 = load ptr, ptr %a1 %t42 = icmp eq ptr %t41, null br i1 %t42, label %panic4356, label %ok4357 panic4356: call void @finch_panic(ptr @.str.2750, i64 1884, ptr @.str.2751) unreachable ok4357: %t43 = getelementptr inbounds %S.gen.Gen, ptr %t41, i32 0, i32 32 %t44 = load { ptr, i64, i64 }, ptr %a40 store { ptr, i64, i64 } %t44, ptr %a45 %t46 = call i64 @finch_map_find(ptr %t43, ptr %a45, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i64 }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t47 = icmp sge i64 %t46, 0 br i1 %t47, label %then4358, label %endif4360 then4358: %t48 = load ptr, ptr %a1 %t49 = icmp eq ptr %t48, null br i1 %t49, label %panic4361, label %ok4362 panic4361: call void @finch_panic(ptr @.str.2752, i64 1885, ptr @.str.2753) unreachable ok4362: %t50 = getelementptr inbounds %S.gen.Gen, ptr %t48, i32 0, i32 32 %t51 = load { ptr, i64, i64 }, ptr %a40 store { ptr, i64, i64 } %t51, ptr %a52 %t53 = call i64 @finch_map_find(ptr %t50, ptr %a52, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i64 }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t54 = icmp slt i64 %t53, 0 br i1 %t54, label %map.missing4363, label %map.found4364 map.missing4363: store { ptr, i64, i64 } zeroinitializer, ptr %a55 store { ptr, i64, i64 } %t51, ptr %a56 call void @finch_buf_str(ptr %a55, ptr %a56, i32 1) call void @finch_map_missing(ptr @.str.2754, i64 1885, ptr %a55) unreachable map.found4364: %t57 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t50, i32 0, i32 0 %t58 = load ptr, ptr %t57 %t59 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t58, i64 %t53 %t60 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t59, i32 0, i32 2 %t61 = load i64, ptr %t60 ret i64 %t61 endif4360: %t62 = load ptr, ptr %a1 %t63 = load ptr, ptr %a1 %t64 = icmp eq ptr %t63, null br i1 %t64, label %panic4365, label %ok4366 panic4365: call void @finch_panic(ptr @.str.2756, i64 1887, ptr @.str.2757) unreachable ok4366: %t65 = getelementptr inbounds %S.gen.Gen, ptr %t63, i32 0, i32 35 %t66 = load i64, ptr %t65 call void @finch_str_from_int(ptr %a67, i64 %t66) %t68 = load { ptr, i64, i64 }, ptr %a67 store { ptr, i64, i64 } { ptr @.str.2755, i64 18, i64 0 }, ptr %a70 store { ptr, i64, i64 } %t68, ptr %a71 call void @finch_str_concat(ptr %a69, ptr %a70, ptr %a71) %t72 = load { ptr, i64, i64 }, ptr %a69 store { ptr, i64, i64 } %t72, ptr %a74 store { ptr, i64, i64 } { ptr @.str.2758, i64 10, i64 0 }, ptr %a75 call void @finch_str_concat(ptr %a73, ptr %a74, ptr %a75) %t76 = load { ptr, i64, i64 }, ptr %a73 %t77 = load ptr, ptr %a1 %t78 = icmp eq ptr %t77, null br i1 %t78, label %panic4367, label %ok4368 panic4367: call void @finch_panic(ptr @.str.2759, i64 1887, ptr @.str.2760) unreachable ok4368: %t79 = getelementptr inbounds %S.gen.Gen, ptr %t77, i32 0, i32 36 %t80 = load i64, ptr %t79 call void @finch_str_from_int(ptr %a81, i64 %t80) %t82 = load { ptr, i64, i64 }, ptr %a81 store { ptr, i64, i64 } %t76, ptr %a84 store { ptr, i64, i64 } %t82, ptr %a85 call void @finch_str_concat(ptr %a83, ptr %a84, ptr %a85) %t86 = load { ptr, i64, i64 }, ptr %a83 store { ptr, i64, i64 } %t86, ptr %a88 store { ptr, i64, i64 } { ptr @.str.2761, i64 10, i64 0 }, ptr %a89 call void @finch_str_concat(ptr %a87, ptr %a88, ptr %a89) %t90 = load { ptr, i64, i64 }, ptr %a87 %t91 = load ptr, ptr %a1 %t92 = icmp eq ptr %t91, null br i1 %t92, label %panic4369, label %ok4370 panic4369: call void @finch_panic(ptr @.str.2762, i64 1887, ptr @.str.2763) unreachable ok4370: %t93 = getelementptr inbounds %S.gen.Gen, ptr %t91, i32 0, i32 34 %t94 = load i64, ptr %t93 call void @finch_str_from_int(ptr %a95, i64 %t94) %t96 = load { ptr, i64, i64 }, ptr %a95 store { ptr, i64, i64 } %t90, ptr %a98 store { ptr, i64, i64 } %t96, ptr %a99 call void @finch_str_concat(ptr %a97, ptr %a98, ptr %a99) %t100 = load { ptr, i64, i64 }, ptr %a97 store { ptr, i64, i64 } %t100, ptr %a102 store { ptr, i64, i64 } { ptr @.str.2764, i64 1, i64 0 }, ptr %a103 call void @finch_str_concat(ptr %a101, ptr %a102, ptr %a103) %t104 = load { ptr, i64, i64 }, ptr %a101 %t105 = call i64 @finch.gen.md(ptr %t62, { ptr, i64, i64 } %t104) store i64 %t105, ptr %a106 %t107 = load i64, ptr %a106 %t108 = load ptr, ptr %a1 %t109 = icmp eq ptr %t108, null br i1 %t109, label %panic4371, label %ok4372 panic4371: call void @finch_panic(ptr @.str.2765, i64 1888, ptr @.str.2766) unreachable ok4372: %t110 = getelementptr inbounds %S.gen.Gen, ptr %t108, i32 0, i32 32 %t111 = load { ptr, i64, i64 }, ptr %a40 store { ptr, i64, i64 } %t111, ptr %a112 store i32 0, ptr %a113 %t114 = call i64 @finch_map_slot(ptr %t110, ptr %a112, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i64 }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a113) %t115 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t110, i32 0, i32 0 %t116 = load ptr, ptr %t115 %t117 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t116, i64 %t114 %t118 = load i32, ptr %a113 %t119 = icmp ne i32 %t118, 0 br i1 %t119, label %map.new4373, label %map.have4374 map.new4373: %t120 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t117, i32 0, i32 1 call void @finch_str_copy(ptr %t120, ptr %a112) %t121 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t117, i32 0, i32 2 store i64 0, ptr %t121 br label %map.have4374 map.have4374: %t122 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t117, i32 0, i32 2 store i64 %t107, ptr %t122 %t123 = load i64, ptr %a106 ret i64 %t123 } define internal i64 @finch.gen.dbgSubprogram(ptr %p0, %S.ast.Node %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a7 = alloca %S.gen.FnSig, align 16 %a8 = alloca %S.gen.FnSig, align 16 %a10 = alloca %S.gen.FnSig, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca i64, align 16 %a40 = alloca %S.ast.Type, align 16 %a63 = alloca i64, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca i64, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca { ptr, i64, i64 }, align 16 %a104 = alloca { ptr, i64, i64 }, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca { ptr, i64, i64 }, align 16 %a110 = alloca { ptr, i64, i64 }, align 16 %a111 = alloca { ptr, i64, i64 }, align 16 %a113 = alloca { ptr, i64, i64 }, align 16 %a114 = alloca { ptr, i64, i64 }, align 16 %a115 = alloca { ptr, i64, i64 }, align 16 %a118 = alloca { ptr, i64, i64 }, align 16 %a120 = alloca { ptr, i64, i64 }, align 16 %a121 = alloca { ptr, i64, i64 }, align 16 %a122 = alloca { ptr, i64, i64 }, align 16 %a124 = alloca { ptr, i64, i64 }, align 16 %a125 = alloca { ptr, i64, i64 }, align 16 %a126 = alloca { ptr, i64, i64 }, align 16 %a130 = alloca { ptr, i64, i64 }, align 16 %a132 = alloca { ptr, i64, i64 }, align 16 %a133 = alloca { ptr, i64, i64 }, align 16 %a134 = alloca { ptr, i64, i64 }, align 16 %a136 = alloca { ptr, i64, i64 }, align 16 %a137 = alloca { ptr, i64, i64 }, align 16 %a138 = alloca { ptr, i64, i64 }, align 16 %a141 = alloca { ptr, i64, i64 }, align 16 %a143 = alloca { ptr, i64, i64 }, align 16 %a144 = alloca { ptr, i64, i64 }, align 16 %a145 = alloca { ptr, i64, i64 }, align 16 %a147 = alloca { ptr, i64, i64 }, align 16 %a148 = alloca { ptr, i64, i64 }, align 16 %a149 = alloca { ptr, i64, i64 }, align 16 %a153 = alloca { ptr, i64, i64 }, align 16 %a155 = alloca { ptr, i64, i64 }, align 16 %a156 = alloca { ptr, i64, i64 }, align 16 %a157 = alloca { ptr, i64, i64 }, align 16 %a159 = alloca { ptr, i64, i64 }, align 16 %a160 = alloca { ptr, i64, i64 }, align 16 %a161 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null br i1 %t4, label %panic4375, label %ok4376 panic4375: call void @finch_panic(ptr @.str.2767, i64 1893, ptr @.str.2768) unreachable ok4376: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 12 %t6 = load %S.gen.FnSig, ptr %t5 store %S.gen.FnSig %t6, ptr %a7 call void @finch.copy.S_gen_FnSig(ptr %a8, ptr %a7) %t9 = load %S.gen.FnSig, ptr %a8 store %S.gen.FnSig %t9, ptr %a10 store { ptr, i64, i64 } zeroinitializer, ptr %a11 %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %a11, i32 0, i32 1 %t13 = load ptr, ptr %a1 %t14 = getelementptr inbounds %S.gen.FnSig, ptr %a10, i32 0, i32 12 %t15 = load %S.ast.Type, ptr %t14 %t16 = call i64 @finch.gen.diType(ptr %t13, %S.ast.Type %t15) %t17 = call { ptr, i64, i64 } @finch.gen.mdRef(i64 %t16) %t18 = load i64, ptr %t12 %t19 = add i64 %t18, 1 call void @finch_arr_reserve(ptr %a11, i64 %t19, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t20 = load ptr, ptr %a11 %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i64 %t18 store { ptr, i64, i64 } %t17, ptr %t21 store i64 %t19, ptr %t12 %t22 = getelementptr inbounds %S.gen.FnSig, ptr %a10, i32 0, i32 2 %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t22, i32 0, i32 1 %t24 = load i64, ptr %t23 %t25 = icmp sgt i64 %t24, 0 br i1 %t25, label %then4377, label %endif4379 then4377: %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %a11, i32 0, i32 1 %t27 = load i64, ptr %t26 %t28 = add i64 %t27, 1 call void @finch_arr_reserve(ptr %a11, i64 %t28, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t29 = load ptr, ptr %a11 %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i64 %t27 store { ptr, i64, i64 } { ptr @.str.2769, i64 4, i64 0 }, ptr %t30 store i64 %t28, ptr %t26 br label %endif4379 endif4379: %t31 = getelementptr inbounds %S.gen.FnSig, ptr %a10, i32 0, i32 13 store i64 0, ptr %a32 br label %each.cond4380 each.cond4380: %t33 = getelementptr inbounds { ptr, i64, i64 }, ptr %t31, i32 0, i32 1 %t34 = load i64, ptr %t33 %t35 = load i64, ptr %a32 %t36 = icmp slt i64 %t35, %t34 br i1 %t36, label %each.body4381, label %each.end4383 each.body4381: %t37 = load ptr, ptr %t31 %t38 = getelementptr inbounds %S.ast.Type, ptr %t37, i64 %t35 %t39 = load %S.ast.Type, ptr %t38 store %S.ast.Type %t39, ptr %a40 %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %a11, i32 0, i32 1 %t42 = load ptr, ptr %a1 %t43 = load %S.ast.Type, ptr %a40 %t44 = call i64 @finch.gen.diType(ptr %t42, %S.ast.Type %t43) %t45 = call { ptr, i64, i64 } @finch.gen.mdRef(i64 %t44) %t46 = load i64, ptr %t41 %t47 = add i64 %t46, 1 call void @finch_arr_reserve(ptr %a11, i64 %t47, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t48 = load ptr, ptr %a11 %t49 = getelementptr inbounds { ptr, i64, i64 }, ptr %t48, i64 %t46 store { ptr, i64, i64 } %t45, ptr %t49 store i64 %t47, ptr %t41 br label %each.step4382 each.step4382: %t50 = load i64, ptr %a32 %t51 = add i64 %t50, 1 store i64 %t51, ptr %a32 br label %each.cond4380 each.end4383: %t52 = load ptr, ptr %a1 %t53 = icmp eq ptr %t52, null br i1 %t53, label %panic4384, label %ok4385 panic4384: call void @finch_panic(ptr @.str.2770, i64 1902, ptr @.str.2771) unreachable ok4385: %t54 = getelementptr inbounds %S.gen.Gen, ptr %t52, i32 0, i32 33 %t55 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 %t56 = load i64, ptr %t55 %t57 = load { ptr, i64, i64 }, ptr %t54 %t58 = extractvalue { ptr, i64, i64 } %t57, 1 %t59 = icmp uge i64 %t56, %t58 br i1 %t59, label %range4386, label %inrange4387 range4386: call void @finch_panic_index(ptr @.str.2772, i64 1902, i64 %t56, i64 %t58) unreachable inrange4387: %t60 = extractvalue { ptr, i64, i64 } %t57, 0 %t61 = getelementptr inbounds i64, ptr %t60, i64 %t56 %t62 = load i64, ptr %t61 store i64 %t62, ptr %a63 %t64 = load ptr, ptr %a1 %t65 = getelementptr inbounds { ptr, i64, i64 }, ptr %a11, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.2774, i64 2, i64 0 }, ptr %a66 call void @finch_str_join(ptr %a67, ptr %a11, ptr %a66) %t68 = load { ptr, i64, i64 }, ptr %a67 store { ptr, i64, i64 } { ptr @.str.2773, i64 27, i64 0 }, ptr %a70 store { ptr, i64, i64 } %t68, ptr %a71 call void @finch_str_concat(ptr %a69, ptr %a70, ptr %a71) %t72 = load { ptr, i64, i64 }, ptr %a69 store { ptr, i64, i64 } %t72, ptr %a74 store { ptr, i64, i64 } { ptr @.str.2775, i64 2, i64 0 }, ptr %a75 call void @finch_str_concat(ptr %a73, ptr %a74, ptr %a75) %t76 = load { ptr, i64, i64 }, ptr %a73 %t77 = call i64 @finch.gen.md(ptr %t64, { ptr, i64, i64 } %t76) store i64 %t77, ptr %a78 %t79 = load ptr, ptr %a1 %t80 = getelementptr inbounds %S.gen.FnSig, ptr %a10, i32 0, i32 1 %t81 = load { ptr, i64, i64 }, ptr %t80 store { ptr, i64, i64 } { ptr @.str.2776, i64 30, i64 0 }, ptr %a83 store { ptr, i64, i64 } %t81, ptr %a84 call void @finch_str_concat(ptr %a82, ptr %a83, ptr %a84) %t85 = load { ptr, i64, i64 }, ptr %a82 store { ptr, i64, i64 } %t85, ptr %a87 store { ptr, i64, i64 } { ptr @.str.2777, i64 17, i64 0 }, ptr %a88 call void @finch_str_concat(ptr %a86, ptr %a87, ptr %a88) %t89 = load { ptr, i64, i64 }, ptr %a86 %t90 = getelementptr inbounds %S.gen.FnSig, ptr %a10, i32 0, i32 11 %t91 = load { ptr, i64, i64 }, ptr %t90 store { ptr, i64, i64 } %t91, ptr %a92 %t94 = getelementptr inbounds %S.gen.FnSig, ptr %a10, i32 0, i32 11 %t95 = getelementptr inbounds { ptr, i64, i64 }, ptr %t94, i32 0, i32 1 %t96 = load i64, ptr %t95 call void @finch_str_sub(ptr %a93, ptr %a92, i64 1, i64 %t96, ptr @.str.2778, i64 1904) %t97 = load { ptr, i64, i64 }, ptr %a93 store { ptr, i64, i64 } %t89, ptr %a99 store { ptr, i64, i64 } %t97, ptr %a100 call void @finch_str_concat(ptr %a98, ptr %a99, ptr %a100) %t101 = load { ptr, i64, i64 }, ptr %a98 store { ptr, i64, i64 } %t101, ptr %a103 store { ptr, i64, i64 } { ptr @.str.2779, i64 11, i64 0 }, ptr %a104 call void @finch_str_concat(ptr %a102, ptr %a103, ptr %a104) %t105 = load { ptr, i64, i64 }, ptr %a102 %t106 = load i64, ptr %a63 call void @finch_str_from_int(ptr %a107, i64 %t106) %t108 = load { ptr, i64, i64 }, ptr %a107 store { ptr, i64, i64 } %t105, ptr %a110 store { ptr, i64, i64 } %t108, ptr %a111 call void @finch_str_concat(ptr %a109, ptr %a110, ptr %a111) %t112 = load { ptr, i64, i64 }, ptr %a109 store { ptr, i64, i64 } %t112, ptr %a114 store { ptr, i64, i64 } { ptr @.str.2780, i64 9, i64 0 }, ptr %a115 call void @finch_str_concat(ptr %a113, ptr %a114, ptr %a115) %t116 = load { ptr, i64, i64 }, ptr %a113 %t117 = load i64, ptr %a63 call void @finch_str_from_int(ptr %a118, i64 %t117) %t119 = load { ptr, i64, i64 }, ptr %a118 store { ptr, i64, i64 } %t116, ptr %a121 store { ptr, i64, i64 } %t119, ptr %a122 call void @finch_str_concat(ptr %a120, ptr %a121, ptr %a122) %t123 = load { ptr, i64, i64 }, ptr %a120 store { ptr, i64, i64 } %t123, ptr %a125 store { ptr, i64, i64 } { ptr @.str.2781, i64 8, i64 0 }, ptr %a126 call void @finch_str_concat(ptr %a124, ptr %a125, ptr %a126) %t127 = load { ptr, i64, i64 }, ptr %a124 %t128 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 %t129 = load i64, ptr %t128 call void @finch_str_from_int(ptr %a130, i64 %t129) %t131 = load { ptr, i64, i64 }, ptr %a130 store { ptr, i64, i64 } %t127, ptr %a133 store { ptr, i64, i64 } %t131, ptr %a134 call void @finch_str_concat(ptr %a132, ptr %a133, ptr %a134) %t135 = load { ptr, i64, i64 }, ptr %a132 store { ptr, i64, i64 } %t135, ptr %a137 store { ptr, i64, i64 } { ptr @.str.2782, i64 9, i64 0 }, ptr %a138 call void @finch_str_concat(ptr %a136, ptr %a137, ptr %a138) %t139 = load { ptr, i64, i64 }, ptr %a136 %t140 = load i64, ptr %a78 call void @finch_str_from_int(ptr %a141, i64 %t140) %t142 = load { ptr, i64, i64 }, ptr %a141 store { ptr, i64, i64 } %t139, ptr %a144 store { ptr, i64, i64 } %t142, ptr %a145 call void @finch_str_concat(ptr %a143, ptr %a144, ptr %a145) %t146 = load { ptr, i64, i64 }, ptr %a143 store { ptr, i64, i64 } %t146, ptr %a148 store { ptr, i64, i64 } { ptr @.str.2783, i64 13, i64 0 }, ptr %a149 call void @finch_str_concat(ptr %a147, ptr %a148, ptr %a149) %t150 = load { ptr, i64, i64 }, ptr %a147 %t151 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 %t152 = load i64, ptr %t151 call void @finch_str_from_int(ptr %a153, i64 %t152) %t154 = load { ptr, i64, i64 }, ptr %a153 store { ptr, i64, i64 } %t150, ptr %a156 store { ptr, i64, i64 } %t154, ptr %a157 call void @finch_str_concat(ptr %a155, ptr %a156, ptr %a157) %t158 = load { ptr, i64, i64 }, ptr %a155 store { ptr, i64, i64 } %t158, ptr %a160 store { ptr, i64, i64 } { ptr @.str.2784, i64 87, i64 0 }, ptr %a161 call void @finch_str_concat(ptr %a159, ptr %a160, ptr %a161) %t162 = load { ptr, i64, i64 }, ptr %a159 %t163 = call i64 @finch.gen.md(ptr %t79, { ptr, i64, i64 } %t162) ret i64 %t163 } define internal void @finch.gen.dbgVariable(ptr %p0, %S.ast.Node %p1, { ptr, i64, i64 } %p2, %S.ast.Type %p3, { ptr, i64, i64 } %p4) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca %S.ast.Type, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca i64, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca { ptr, i64, i64 }, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 %a104 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 %a106 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca { ptr, i64, i64 }, align 16 %a110 = alloca { ptr, i64, i64 }, align 16 %a113 = alloca i64, align 16 %a126 = alloca { ptr, i64, i64 }, align 16 %a127 = alloca { ptr, i64, i64 }, align 16 %a128 = alloca { ptr, i64, i64 }, align 16 %a130 = alloca { ptr, i64, i64 }, align 16 %a131 = alloca { ptr, i64, i64 }, align 16 %a132 = alloca { ptr, i64, i64 }, align 16 %a135 = alloca { ptr, i64, i64 }, align 16 %a137 = alloca { ptr, i64, i64 }, align 16 %a138 = alloca { ptr, i64, i64 }, align 16 %a139 = alloca { ptr, i64, i64 }, align 16 %a141 = alloca { ptr, i64, i64 }, align 16 %a142 = alloca { ptr, i64, i64 }, align 16 %a143 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 store %S.ast.Type %p3, ptr %a4 store { ptr, i64, i64 } %p4, ptr %a5 %t6 = load ptr, ptr %a1 %t7 = icmp eq ptr %t6, null br i1 %t7, label %panic4388, label %ok4389 panic4388: call void @finch_panic(ptr @.str.2785, i64 1908, ptr @.str.2786) unreachable ok4389: %t8 = getelementptr inbounds %S.gen.Gen, ptr %t6, i32 0, i32 28 %t9 = load i1, ptr %t8 %t10 = xor i1 %t9, true br label %logic.from4390 logic.from4390: br i1 %t10, label %logic.end4392, label %logic.rhs4391 logic.rhs4391: %t11 = load ptr, ptr %a1 %t12 = icmp eq ptr %t11, null br i1 %t12, label %panic4393, label %ok4394 panic4393: call void @finch_panic(ptr @.str.2787, i64 1908, ptr @.str.2788) unreachable ok4394: %t13 = getelementptr inbounds %S.gen.Gen, ptr %t11, i32 0, i32 34 %t14 = load i64, ptr %t13 %t15 = icmp slt i64 %t14, 0 br label %logic.rend4395 logic.rend4395: br label %logic.end4392 logic.end4392: %t16 = phi i1 [ true, %logic.from4390 ], [ %t15, %logic.rend4395 ] br i1 %t16, label %then4396, label %endif4398 then4396: ret void endif4398: %t17 = load ptr, ptr %a1 %t18 = load %S.ast.Type, ptr %a4 %t19 = call i64 @finch.gen.diType(ptr %t17, %S.ast.Type %t18) store i64 %t19, ptr %a20 %t21 = load i64, ptr %a20 %t22 = icmp slt i64 %t21, 0 br i1 %t22, label %then4399, label %endif4401 then4399: ret void endif4401: store { ptr, i64, i64 } { ptr @.str.2789, i64 0, i64 0 }, ptr %a23 %t24 = load ptr, ptr %a1 %t25 = icmp eq ptr %t24, null br i1 %t25, label %panic4402, label %ok4403 panic4402: call void @finch_panic(ptr @.str.2790, i64 1916, ptr @.str.2791) unreachable ok4403: %t26 = getelementptr inbounds %S.gen.Gen, ptr %t24, i32 0, i32 37 %t27 = load i64, ptr %t26 %t28 = icmp sgt i64 %t27, 0 br i1 %t28, label %then4404, label %endif4406 then4404: %t29 = load ptr, ptr %a1 %t30 = icmp eq ptr %t29, null br i1 %t30, label %panic4407, label %ok4408 panic4407: call void @finch_panic(ptr @.str.2793, i64 1917, ptr @.str.2794) unreachable ok4408: %t31 = getelementptr inbounds %S.gen.Gen, ptr %t29, i32 0, i32 37 %t32 = load i64, ptr %t31 call void @finch_str_from_int(ptr %a33, i64 %t32) %t34 = load { ptr, i64, i64 }, ptr %a33 store { ptr, i64, i64 } { ptr @.str.2792, i64 7, i64 0 }, ptr %a36 store { ptr, i64, i64 } %t34, ptr %a37 call void @finch_str_concat(ptr %a35, ptr %a36, ptr %a37) %t38 = load { ptr, i64, i64 }, ptr %a35 store { ptr, i64, i64 } %t38, ptr %a23 br label %endif4406 endif4406: %t39 = load ptr, ptr %a1 %t40 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } { ptr @.str.2795, i64 24, i64 0 }, ptr %a42 store { ptr, i64, i64 } %t40, ptr %a43 call void @finch_str_concat(ptr %a41, ptr %a42, ptr %a43) %t44 = load { ptr, i64, i64 }, ptr %a41 store { ptr, i64, i64 } %t44, ptr %a46 store { ptr, i64, i64 } { ptr @.str.2796, i64 11, i64 0 }, ptr %a47 call void @finch_str_concat(ptr %a45, ptr %a46, ptr %a47) %t48 = load { ptr, i64, i64 }, ptr %a45 %t49 = load ptr, ptr %a1 %t50 = icmp eq ptr %t49, null br i1 %t50, label %panic4409, label %ok4410 panic4409: call void @finch_panic(ptr @.str.2797, i64 1919, ptr @.str.2798) unreachable ok4410: %t51 = getelementptr inbounds %S.gen.Gen, ptr %t49, i32 0, i32 34 %t52 = load i64, ptr %t51 call void @finch_str_from_int(ptr %a53, i64 %t52) %t54 = load { ptr, i64, i64 }, ptr %a53 store { ptr, i64, i64 } %t48, ptr %a56 store { ptr, i64, i64 } %t54, ptr %a57 call void @finch_str_concat(ptr %a55, ptr %a56, ptr %a57) %t58 = load { ptr, i64, i64 }, ptr %a55 store { ptr, i64, i64 } %t58, ptr %a60 store { ptr, i64, i64 } { ptr @.str.2799, i64 9, i64 0 }, ptr %a61 call void @finch_str_concat(ptr %a59, ptr %a60, ptr %a61) %t62 = load { ptr, i64, i64 }, ptr %a59 %t63 = load ptr, ptr %a1 %t64 = icmp eq ptr %t63, null br i1 %t64, label %panic4411, label %ok4412 panic4411: call void @finch_panic(ptr @.str.2800, i64 1919, ptr @.str.2801) unreachable ok4412: %t65 = getelementptr inbounds %S.gen.Gen, ptr %t63, i32 0, i32 33 %t66 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 %t67 = load i64, ptr %t66 %t68 = load { ptr, i64, i64 }, ptr %t65 %t69 = extractvalue { ptr, i64, i64 } %t68, 1 %t70 = icmp uge i64 %t67, %t69 br i1 %t70, label %range4413, label %inrange4414 range4413: call void @finch_panic_index(ptr @.str.2802, i64 1919, i64 %t67, i64 %t69) unreachable inrange4414: %t71 = extractvalue { ptr, i64, i64 } %t68, 0 %t72 = getelementptr inbounds i64, ptr %t71, i64 %t67 %t73 = load i64, ptr %t72 call void @finch_str_from_int(ptr %a74, i64 %t73) %t75 = load { ptr, i64, i64 }, ptr %a74 store { ptr, i64, i64 } %t62, ptr %a77 store { ptr, i64, i64 } %t75, ptr %a78 call void @finch_str_concat(ptr %a76, ptr %a77, ptr %a78) %t79 = load { ptr, i64, i64 }, ptr %a76 store { ptr, i64, i64 } %t79, ptr %a81 store { ptr, i64, i64 } { ptr @.str.2803, i64 8, i64 0 }, ptr %a82 call void @finch_str_concat(ptr %a80, ptr %a81, ptr %a82) %t83 = load { ptr, i64, i64 }, ptr %a80 %t84 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 %t85 = load i64, ptr %t84 call void @finch_str_from_int(ptr %a86, i64 %t85) %t87 = load { ptr, i64, i64 }, ptr %a86 store { ptr, i64, i64 } %t83, ptr %a89 store { ptr, i64, i64 } %t87, ptr %a90 call void @finch_str_concat(ptr %a88, ptr %a89, ptr %a90) %t91 = load { ptr, i64, i64 }, ptr %a88 store { ptr, i64, i64 } %t91, ptr %a93 store { ptr, i64, i64 } { ptr @.str.2804, i64 9, i64 0 }, ptr %a94 call void @finch_str_concat(ptr %a92, ptr %a93, ptr %a94) %t95 = load { ptr, i64, i64 }, ptr %a92 %t96 = load i64, ptr %a20 call void @finch_str_from_int(ptr %a97, i64 %t96) %t98 = load { ptr, i64, i64 }, ptr %a97 store { ptr, i64, i64 } %t95, ptr %a100 store { ptr, i64, i64 } %t98, ptr %a101 call void @finch_str_concat(ptr %a99, ptr %a100, ptr %a101) %t102 = load { ptr, i64, i64 }, ptr %a99 %t103 = load { ptr, i64, i64 }, ptr %a23 store { ptr, i64, i64 } %t102, ptr %a105 store { ptr, i64, i64 } %t103, ptr %a106 call void @finch_str_concat(ptr %a104, ptr %a105, ptr %a106) %t107 = load { ptr, i64, i64 }, ptr %a104 store { ptr, i64, i64 } %t107, ptr %a109 store { ptr, i64, i64 } { ptr @.str.2805, i64 1, i64 0 }, ptr %a110 call void @finch_str_concat(ptr %a108, ptr %a109, ptr %a110) %t111 = load { ptr, i64, i64 }, ptr %a108 %t112 = call i64 @finch.gen.md(ptr %t39, { ptr, i64, i64 } %t111) store i64 %t112, ptr %a113 %t114 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 %t115 = load i64, ptr %t114 %t116 = load ptr, ptr %a1 %t117 = icmp eq ptr %t116, null br i1 %t117, label %panic4415, label %ok4416 panic4415: call void @finch_panic(ptr @.str.2806, i64 1920, ptr @.str.2807) unreachable ok4416: %t118 = getelementptr inbounds %S.gen.Gen, ptr %t116, i32 0, i32 35 store i64 %t115, ptr %t118 %t119 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 %t120 = load i64, ptr %t119 %t121 = load ptr, ptr %a1 %t122 = icmp eq ptr %t121, null br i1 %t122, label %panic4417, label %ok4418 panic4417: call void @finch_panic(ptr @.str.2808, i64 1921, ptr @.str.2809) unreachable ok4418: %t123 = getelementptr inbounds %S.gen.Gen, ptr %t121, i32 0, i32 36 store i64 %t120, ptr %t123 %t124 = load ptr, ptr %a1 %t125 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } { ptr @.str.2810, i64 41, i64 0 }, ptr %a127 store { ptr, i64, i64 } %t125, ptr %a128 call void @finch_str_concat(ptr %a126, ptr %a127, ptr %a128) %t129 = load { ptr, i64, i64 }, ptr %a126 store { ptr, i64, i64 } %t129, ptr %a131 store { ptr, i64, i64 } { ptr @.str.2811, i64 12, i64 0 }, ptr %a132 call void @finch_str_concat(ptr %a130, ptr %a131, ptr %a132) %t133 = load { ptr, i64, i64 }, ptr %a130 %t134 = load i64, ptr %a113 call void @finch_str_from_int(ptr %a135, i64 %t134) %t136 = load { ptr, i64, i64 }, ptr %a135 store { ptr, i64, i64 } %t133, ptr %a138 store { ptr, i64, i64 } %t136, ptr %a139 call void @finch_str_concat(ptr %a137, ptr %a138, ptr %a139) %t140 = load { ptr, i64, i64 }, ptr %a137 store { ptr, i64, i64 } %t140, ptr %a142 store { ptr, i64, i64 } { ptr @.str.2812, i64 27, i64 0 }, ptr %a143 call void @finch_str_concat(ptr %a141, ptr %a142, ptr %a143) %t144 = load { ptr, i64, i64 }, ptr %a141 call void @finch.gen.emit(ptr %t124, { ptr, i64, i64 } %t144) ret void } define internal { ptr, i64, i64 } @finch.gen.dbgModule(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca i64, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 %t2 = mul i64 2, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t3 = call ptr @finch_alloc(i64 %t2) %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 0 store { ptr, i64, i64 } { ptr @.str.2813, i64 20, i64 0 }, ptr %t4 %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 1 store { ptr, i64, i64 } { ptr @.str.2814, i64 30, i64 0 }, ptr %t5 %t6 = insertvalue { ptr, i64, i64 } undef, ptr %t3, 0 %t7 = insertvalue { ptr, i64, i64 } %t6, i64 2, 1 %t8 = insertvalue { ptr, i64, i64 } %t7, i64 2, 2 store { ptr, i64, i64 } %t8, ptr %a9 %t10 = load ptr, ptr %a1 %t11 = icmp eq ptr %t10, null br i1 %t11, label %panic4419, label %ok4420 panic4419: call void @finch_panic(ptr @.str.2815, i64 1928, ptr @.str.2816) unreachable ok4420: %t12 = getelementptr inbounds %S.gen.Gen, ptr %t10, i32 0, i32 31 %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t12, i32 0, i32 1 %t14 = load i64, ptr %t13 store i64 0, ptr %a15 br label %for.cond4421 for.cond4421: %t16 = load i64, ptr %a15 %t17 = icmp slt i64 %t16, %t14 br i1 %t17, label %for.body4422, label %for.end4424 for.body4422: %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1 %t19 = load i64, ptr %a15 call void @finch_str_from_int(ptr %a20, i64 %t19) %t21 = load { ptr, i64, i64 }, ptr %a20 store { ptr, i64, i64 } { ptr @.str.2817, i64 1, i64 0 }, ptr %a23 store { ptr, i64, i64 } %t21, ptr %a24 call void @finch_str_concat(ptr %a22, ptr %a23, ptr %a24) %t25 = load { ptr, i64, i64 }, ptr %a22 store { ptr, i64, i64 } %t25, ptr %a27 store { ptr, i64, i64 } { ptr @.str.2818, i64 3, i64 0 }, ptr %a28 call void @finch_str_concat(ptr %a26, ptr %a27, ptr %a28) %t29 = load { ptr, i64, i64 }, ptr %a26 %t30 = load ptr, ptr %a1 %t31 = icmp eq ptr %t30, null br i1 %t31, label %panic4425, label %ok4426 panic4425: call void @finch_panic(ptr @.str.2819, i64 1929, ptr @.str.2820) unreachable ok4426: %t32 = getelementptr inbounds %S.gen.Gen, ptr %t30, i32 0, i32 31 %t33 = load i64, ptr %a15 %t34 = load { ptr, i64, i64 }, ptr %t32 %t35 = extractvalue { ptr, i64, i64 } %t34, 1 %t36 = icmp uge i64 %t33, %t35 br i1 %t36, label %range4427, label %inrange4428 range4427: call void @finch_panic_index(ptr @.str.2821, i64 1929, i64 %t33, i64 %t35) unreachable inrange4428: %t37 = extractvalue { ptr, i64, i64 } %t34, 0 %t38 = getelementptr inbounds { ptr, i64, i64 }, ptr %t37, i64 %t33 %t39 = load { ptr, i64, i64 }, ptr %t38 store { ptr, i64, i64 } %t29, ptr %a41 store { ptr, i64, i64 } %t39, ptr %a42 call void @finch_str_concat(ptr %a40, ptr %a41, ptr %a42) %t43 = load { ptr, i64, i64 }, ptr %a40 %t44 = load i64, ptr %t18 %t45 = add i64 %t44, 1 call void @finch_arr_reserve(ptr %a9, i64 %t45, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t46 = load ptr, ptr %a9 %t47 = getelementptr inbounds { ptr, i64, i64 }, ptr %t46, i64 %t44 store { ptr, i64, i64 } %t43, ptr %t47 store i64 %t45, ptr %t18 br label %for.step4423 for.step4423: %t48 = load i64, ptr %a15 %t49 = add i64 %t48, 1 store i64 %t49, ptr %a15 br label %for.cond4421 for.end4424: %t50 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.2822, i64 1, i64 0 }, ptr %a51 call void @finch_str_join(ptr %a52, ptr %a9, ptr %a51) %t53 = load { ptr, i64, i64 }, ptr %a52 store { ptr, i64, i64 } %t53, ptr %a55 store { ptr, i64, i64 } { ptr @.str.2823, i64 1, i64 0 }, ptr %a56 call void @finch_str_concat(ptr %a54, ptr %a55, ptr %a56) %t57 = load { ptr, i64, i64 }, ptr %a54 ret { ptr, i64, i64 } %t57 } define internal void @finch.copy.arr_S_gen_Scope(ptr %dst, ptr %src) { entry: %a5 = alloca i64, align 16 call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.gen.Scope, ptr null, i32 1) to i64)) %t1 = load ptr, ptr %dst %t2 = load ptr, ptr %src %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 %t4 = load i64, ptr %t3 store i64 0, ptr %a5 br label %n.cond4497 n.cond4497: %t6 = load i64, ptr %a5 %t7 = icmp slt i64 %t6, %t4 br i1 %t7, label %n.body4498, label %n.end4499 n.body4498: %t8 = getelementptr inbounds %S.gen.Scope, ptr %t1, i64 %t6 %t9 = getelementptr inbounds %S.gen.Scope, ptr %t2, i64 %t6 call void @finch.copy.S_gen_Scope(ptr %t8, ptr %t9) %t10 = load i64, ptr %a5 %t11 = add i64 %t10, 1 store i64 %t11, ptr %a5 br label %n.cond4497 n.end4499: ret void } define internal void @finch.gen.define(ptr %p0, i64 %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca i64, align 16 %a16 = alloca %S.gen.FnSig, align 16 %a17 = alloca %S.gen.FnSig, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca %S.ast.Node, align 16 %a104 = alloca %S.ast.Node, align 16 %a106 = alloca %S.ast.Node, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 %a113 = alloca { ptr, i64, i64 }, align 16 %a119 = alloca { ptr, i64, i64 }, align 16 %a120 = alloca { ptr, i64, i64 }, align 16 %a134 = alloca i64, align 16 %a162 = alloca { ptr, i64, i64 }, align 16 %a167 = alloca { ptr, i64, i64 }, align 16 %a168 = alloca { ptr, i64, i64 }, align 16 %a171 = alloca { ptr, i64, i64 }, align 16 %a184 = alloca { ptr, i64, i64 }, align 16 %a191 = alloca { ptr, i64, i64 }, align 16 %a192 = alloca { ptr, i64, i64 }, align 16 %a200 = alloca { ptr, i64, i64 }, align 16 %a201 = alloca { ptr, i64, i64 }, align 16 %a209 = alloca { ptr, i64, i64 }, align 16 %a210 = alloca { ptr, i64, i64 }, align 16 %a213 = alloca %S.ast.Type, align 16 %a226 = alloca %S.ast.Type, align 16 %a227 = alloca %S.ast.Type, align 16 %a249 = alloca i64, align 16 %a263 = alloca %S.ast.Type, align 16 %a264 = alloca %S.ast.Type, align 16 %a266 = alloca %S.ast.Type, align 16 %a271 = alloca { ptr, i64, i64 }, align 16 %a272 = alloca { ptr, i64, i64 }, align 16 %a273 = alloca { ptr, i64, i64 }, align 16 %a276 = alloca { ptr, i64, i64 }, align 16 %a278 = alloca { ptr, i64, i64 }, align 16 %a279 = alloca { ptr, i64, i64 }, align 16 %a280 = alloca { ptr, i64, i64 }, align 16 %a287 = alloca { ptr, i64, i64 }, align 16 %a289 = alloca { ptr, i64, i64 }, align 16 %a290 = alloca { ptr, i64, i64 }, align 16 %a291 = alloca { ptr, i64, i64 }, align 16 %a293 = alloca { ptr, i64, i64 }, align 16 %a382 = alloca { ptr, i64, i64 }, align 16 %a383 = alloca { ptr, i64, i64 }, align 16 %a390 = alloca { ptr, i64, i64 }, align 16 %a391 = alloca { ptr, i64, i64 }, align 16 %a392 = alloca { ptr, i64, i64 }, align 16 %a394 = alloca { ptr, i64, i64 }, align 16 %a395 = alloca { ptr, i64, i64 }, align 16 %a396 = alloca { ptr, i64, i64 }, align 16 %a404 = alloca { ptr, i64, i64 }, align 16 %a405 = alloca { ptr, i64, i64 }, align 16 %a406 = alloca { ptr, i64, i64 }, align 16 %a421 = alloca { ptr, i64, i64 }, align 16 %a422 = alloca { ptr, i64, i64 }, align 16 %a423 = alloca { ptr, i64, i64 }, align 16 %a425 = alloca { ptr, i64, i64 }, align 16 %a426 = alloca { ptr, i64, i64 }, align 16 %a427 = alloca { ptr, i64, i64 }, align 16 %a430 = alloca { ptr, i64, i64 }, align 16 %a434 = alloca { ptr, i64, i64 }, align 16 %a436 = alloca { ptr, i64, i64 }, align 16 %a437 = alloca { ptr, i64, i64 }, align 16 %a438 = alloca { ptr, i64, i64 }, align 16 %a453 = alloca { ptr, i64, i64 }, align 16 %a454 = alloca { ptr, i64, i64 }, align 16 %a455 = alloca { ptr, i64, i64 }, align 16 %a457 = alloca { ptr, i64, i64 }, align 16 %a458 = alloca { ptr, i64, i64 }, align 16 %a459 = alloca { ptr, i64, i64 }, align 16 %a466 = alloca { ptr, i64, i64 }, align 16 %a467 = alloca { ptr, i64, i64 }, align 16 %a468 = alloca { ptr, i64, i64 }, align 16 %a470 = alloca { ptr, i64, i64 }, align 16 %a471 = alloca { ptr, i64, i64 }, align 16 %a472 = alloca { ptr, i64, i64 }, align 16 %a475 = alloca { ptr, i64, i64 }, align 16 %a476 = alloca { ptr, i64, i64 }, align 16 %a478 = alloca { ptr, i64, i64 }, align 16 %a479 = alloca { ptr, i64, i64 }, align 16 %a480 = alloca { ptr, i64, i64 }, align 16 %a482 = alloca { ptr, i64, i64 }, align 16 %a483 = alloca { ptr, i64, i64 }, align 16 %a484 = alloca { ptr, i64, i64 }, align 16 %a487 = alloca { ptr, i64, i64 }, align 16 %a488 = alloca { ptr, i64, i64 }, align 16 %a489 = alloca { ptr, i64, i64 }, align 16 %a491 = alloca { ptr, i64, i64 }, align 16 %a492 = alloca { ptr, i64, i64 }, align 16 %a493 = alloca { ptr, i64, i64 }, align 16 %a499 = alloca { ptr, i64, i64 }, align 16 %a500 = alloca { ptr, i64, i64 }, align 16 %a502 = alloca { ptr, i64, i64 }, align 16 %a503 = alloca { ptr, i64, i64 }, align 16 %a504 = alloca { ptr, i64, i64 }, align 16 %a506 = alloca { ptr, i64, i64 }, align 16 %a507 = alloca { ptr, i64, i64 }, align 16 %a508 = alloca { ptr, i64, i64 }, align 16 %a514 = alloca { ptr, i64, i64 }, align 16 %a515 = alloca { ptr, i64, i64 }, align 16 %a517 = alloca { ptr, i64, i64 }, align 16 %a518 = alloca { ptr, i64, i64 }, align 16 %a519 = alloca { ptr, i64, i64 }, align 16 %a521 = alloca { ptr, i64, i64 }, align 16 %a522 = alloca { ptr, i64, i64 }, align 16 %a523 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store i64 %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null br i1 %t4, label %panic4429, label %ok4430 panic4429: call void @finch_panic(ptr @.str.2824, i64 1935, ptr @.str.2825) unreachable ok4430: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 14 %t6 = load i64, ptr %a2 %t7 = load { ptr, i64, i64 }, ptr %t5 %t8 = extractvalue { ptr, i64, i64 } %t7, 1 %t9 = icmp uge i64 %t6, %t8 br i1 %t9, label %range4431, label %inrange4432 range4431: call void @finch_panic_index(ptr @.str.2826, i64 1935, i64 %t6, i64 %t8) unreachable inrange4432: %t10 = extractvalue { ptr, i64, i64 } %t7, 0 %t11 = getelementptr inbounds %S.gen.FnSig, ptr %t10, i64 %t6 %t12 = load %S.gen.FnSig, ptr %t11 %t13 = load ptr, ptr %a1 %t14 = icmp eq ptr %t13, null br i1 %t14, label %panic4433, label %ok4434 panic4433: call void @finch_panic(ptr @.str.2827, i64 1935, ptr @.str.2828) unreachable ok4434: %t15 = getelementptr inbounds %S.gen.Gen, ptr %t13, i32 0, i32 12 store %S.gen.FnSig %t12, ptr %a16 call void @finch.copy.S_gen_FnSig(ptr %a17, ptr %a16) %t18 = load %S.gen.FnSig, ptr %a17 store %S.gen.FnSig %t18, ptr %t15 %t19 = load ptr, ptr %a1 %t20 = icmp eq ptr %t19, null br i1 %t20, label %panic4435, label %ok4436 panic4435: call void @finch_panic(ptr @.str.2829, i64 1936, ptr @.str.2830) unreachable ok4436: %t21 = getelementptr inbounds %S.gen.Gen, ptr %t19, i32 0, i32 12 %t22 = getelementptr inbounds %S.gen.FnSig, ptr %t21, i32 0, i32 0 %t23 = load { ptr, i64, i64 }, ptr %t22 %t24 = load ptr, ptr %a1 %t25 = icmp eq ptr %t24, null br i1 %t25, label %panic4437, label %ok4438 panic4437: call void @finch_panic(ptr @.str.2831, i64 1936, ptr @.str.2832) unreachable ok4438: %t26 = getelementptr inbounds %S.gen.Gen, ptr %t24, i32 0, i32 13 store { ptr, i64, i64 } %t23, ptr %a27 call void @finch_str_copy(ptr %a28, ptr %a27) %t29 = load { ptr, i64, i64 }, ptr %a28 store { ptr, i64, i64 } %t29, ptr %t26 %t30 = load ptr, ptr %a1 %t31 = icmp eq ptr %t30, null br i1 %t31, label %panic4439, label %ok4440 panic4439: call void @finch_panic(ptr @.str.2833, i64 1937, ptr @.str.2834) unreachable ok4440: %t32 = getelementptr inbounds %S.gen.Gen, ptr %t30, i32 0, i32 12 %t33 = getelementptr inbounds %S.gen.FnSig, ptr %t32, i32 0, i32 6 %t34 = load { ptr, i64, i64 }, ptr %t33 %t35 = load ptr, ptr %a1 %t36 = icmp eq ptr %t35, null br i1 %t36, label %panic4441, label %ok4442 panic4441: call void @finch_panic(ptr @.str.2835, i64 1937, ptr @.str.2836) unreachable ok4442: %t37 = getelementptr inbounds %S.gen.Gen, ptr %t35, i32 0, i32 17 store { ptr, i64, i64 } %t34, ptr %a38 call void @finch.copy.arr_str(ptr %a39, ptr %a38) %t40 = load { ptr, i64, i64 }, ptr %a39 store { ptr, i64, i64 } %t40, ptr %t37 %t41 = load ptr, ptr %a1 %t42 = icmp eq ptr %t41, null br i1 %t42, label %panic4443, label %ok4444 panic4443: call void @finch_panic(ptr @.str.2837, i64 1938, ptr @.str.2838) unreachable ok4444: %t43 = getelementptr inbounds %S.gen.Gen, ptr %t41, i32 0, i32 12 %t44 = getelementptr inbounds %S.gen.FnSig, ptr %t43, i32 0, i32 7 %t45 = load { ptr, i64, i64 }, ptr %t44 %t46 = load ptr, ptr %a1 %t47 = icmp eq ptr %t46, null br i1 %t47, label %panic4445, label %ok4446 panic4445: call void @finch_panic(ptr @.str.2839, i64 1938, ptr @.str.2840) unreachable ok4446: %t48 = getelementptr inbounds %S.gen.Gen, ptr %t46, i32 0, i32 18 store { ptr, i64, i64 } %t45, ptr %a49 call void @finch.copy.arr_S_ast_Type(ptr %a50, ptr %a49) %t51 = load { ptr, i64, i64 }, ptr %a50 store { ptr, i64, i64 } %t51, ptr %t48 %t52 = load ptr, ptr %a1 %t53 = icmp eq ptr %t52, null br i1 %t53, label %panic4447, label %ok4448 panic4447: call void @finch_panic(ptr @.str.2842, i64 1939, ptr @.str.2843) unreachable ok4448: %t54 = getelementptr inbounds %S.gen.Gen, ptr %t52, i32 0, i32 19 store { ptr, i64, i64 } { ptr @.str.2841, i64 0, i64 0 }, ptr %t54 %t55 = load ptr, ptr %a1 %t56 = icmp eq ptr %t55, null br i1 %t56, label %panic4449, label %ok4450 panic4449: call void @finch_panic(ptr @.str.2844, i64 1940, ptr @.str.2845) unreachable ok4450: %t57 = getelementptr inbounds %S.gen.Gen, ptr %t55, i32 0, i32 12 %t58 = getelementptr inbounds %S.gen.FnSig, ptr %t57, i32 0, i32 7 %t59 = getelementptr inbounds { ptr, i64, i64 }, ptr %t58, i32 0, i32 1 %t60 = load i64, ptr %t59 %t61 = icmp sgt i64 %t60, 0 br i1 %t61, label %then4451, label %endif4453 then4451: %t62 = load ptr, ptr %a1 %t63 = icmp eq ptr %t62, null br i1 %t63, label %panic4454, label %ok4455 panic4454: call void @finch_panic(ptr @.str.2847, i64 1941, ptr @.str.2848) unreachable ok4455: %t64 = getelementptr inbounds %S.gen.Gen, ptr %t62, i32 0, i32 12 %t65 = getelementptr inbounds %S.gen.FnSig, ptr %t64, i32 0, i32 8 %t66 = load { ptr, i64, i64 }, ptr %t65 store { ptr, i64, i64 } { ptr @.str.2846, i64 17, i64 0 }, ptr %a68 store { ptr, i64, i64 } %t66, ptr %a69 call void @finch_str_concat(ptr %a67, ptr %a68, ptr %a69) %t70 = load { ptr, i64, i64 }, ptr %a67 store { ptr, i64, i64 } %t70, ptr %a72 store { ptr, i64, i64 } { ptr @.str.2849, i64 1, i64 0 }, ptr %a73 call void @finch_str_concat(ptr %a71, ptr %a72, ptr %a73) %t74 = load { ptr, i64, i64 }, ptr %a71 %t75 = load ptr, ptr %a1 %t76 = icmp eq ptr %t75, null br i1 %t76, label %panic4456, label %ok4457 panic4456: call void @finch_panic(ptr @.str.2850, i64 1941, ptr @.str.2851) unreachable ok4457: %t77 = getelementptr inbounds %S.gen.Gen, ptr %t75, i32 0, i32 19 store { ptr, i64, i64 } %t74, ptr %t77 br label %endif4453 endif4453: %t78 = load ptr, ptr %a1 %t79 = icmp eq ptr %t78, null br i1 %t79, label %panic4458, label %ok4459 panic4458: call void @finch_panic(ptr @.str.2852, i64 1943, ptr @.str.2853) unreachable ok4459: %t80 = getelementptr inbounds %S.gen.Gen, ptr %t78, i32 0, i32 0 %t81 = load ptr, ptr %a1 %t82 = icmp eq ptr %t81, null br i1 %t82, label %panic4460, label %ok4461 panic4460: call void @finch_panic(ptr @.str.2854, i64 1943, ptr @.str.2855) unreachable ok4461: %t83 = getelementptr inbounds %S.gen.Gen, ptr %t81, i32 0, i32 12 %t84 = getelementptr inbounds %S.gen.FnSig, ptr %t83, i32 0, i32 16 %t85 = load i64, ptr %t84 %t86 = load { ptr, i64, i64 }, ptr %t80 %t87 = extractvalue { ptr, i64, i64 } %t86, 1 %t88 = icmp uge i64 %t85, %t87 br i1 %t88, label %range4462, label %inrange4463 range4462: call void @finch_panic_index(ptr @.str.2856, i64 1943, i64 %t85, i64 %t87) unreachable inrange4463: %t89 = extractvalue { ptr, i64, i64 } %t86, 0 %t90 = getelementptr inbounds %S.ast.Program, ptr %t89, i64 %t85 %t91 = getelementptr inbounds %S.ast.Program, ptr %t90, i32 0, i32 8 %t92 = load ptr, ptr %a1 %t93 = icmp eq ptr %t92, null br i1 %t93, label %panic4464, label %ok4465 panic4464: call void @finch_panic(ptr @.str.2857, i64 1943, ptr @.str.2858) unreachable ok4465: %t94 = getelementptr inbounds %S.gen.Gen, ptr %t92, i32 0, i32 12 %t95 = getelementptr inbounds %S.gen.FnSig, ptr %t94, i32 0, i32 17 %t96 = load i64, ptr %t95 %t97 = load { ptr, i64, i64 }, ptr %t91 %t98 = extractvalue { ptr, i64, i64 } %t97, 1 %t99 = icmp uge i64 %t96, %t98 br i1 %t99, label %range4466, label %inrange4467 range4466: call void @finch_panic_index(ptr @.str.2859, i64 1943, i64 %t96, i64 %t98) unreachable inrange4467: %t100 = extractvalue { ptr, i64, i64 } %t97, 0 %t101 = getelementptr inbounds %S.ast.Node, ptr %t100, i64 %t96 %t102 = load %S.ast.Node, ptr %t101 store %S.ast.Node %t102, ptr %a103 call void @finch.copy.S_ast_Node(ptr %a104, ptr %a103) %t105 = load %S.ast.Node, ptr %a104 store %S.ast.Node %t105, ptr %a106 store { ptr, i64, i64 } zeroinitializer, ptr %a107 %t108 = load { ptr, i64, i64 }, ptr %a107 %t109 = load ptr, ptr %a1 %t110 = icmp eq ptr %t109, null br i1 %t110, label %panic4468, label %ok4469 panic4468: call void @finch_panic(ptr @.str.2860, i64 1945, ptr @.str.2861) unreachable ok4469: %t111 = getelementptr inbounds %S.gen.Gen, ptr %t109, i32 0, i32 4 store { ptr, i64, i64 } %t108, ptr %a112 call void @finch.copy.arr_str(ptr %a113, ptr %a112) %t114 = load { ptr, i64, i64 }, ptr %a113 store { ptr, i64, i64 } %t114, ptr %t111 %t115 = load { ptr, i64, i64 }, ptr %a107 %t116 = load ptr, ptr %a1 %t117 = icmp eq ptr %t116, null br i1 %t117, label %panic4470, label %ok4471 panic4470: call void @finch_panic(ptr @.str.2862, i64 1946, ptr @.str.2863) unreachable ok4471: %t118 = getelementptr inbounds %S.gen.Gen, ptr %t116, i32 0, i32 5 store { ptr, i64, i64 } %t115, ptr %a119 call void @finch.copy.arr_str(ptr %a120, ptr %a119) %t121 = load { ptr, i64, i64 }, ptr %a120 store { ptr, i64, i64 } %t121, ptr %t118 %t122 = load ptr, ptr %a1 %t123 = icmp eq ptr %t122, null br i1 %t123, label %panic4472, label %ok4473 panic4472: call void @finch_panic(ptr @.str.2864, i64 1947, ptr @.str.2865) unreachable ok4473: %t124 = getelementptr inbounds %S.gen.Gen, ptr %t122, i32 0, i32 6 store i64 0, ptr %t124 %t125 = load ptr, ptr %a1 %t126 = icmp eq ptr %t125, null br i1 %t126, label %panic4474, label %ok4475 panic4474: call void @finch_panic(ptr @.str.2866, i64 1948, ptr @.str.2867) unreachable ok4475: %t127 = getelementptr inbounds %S.gen.Gen, ptr %t125, i32 0, i32 9 store i1 false, ptr %t127 %t128 = load ptr, ptr %a1 %t129 = icmp eq ptr %t128, null br i1 %t129, label %panic4476, label %ok4477 panic4476: call void @finch_panic(ptr @.str.2868, i64 1949, ptr @.str.2869) unreachable ok4477: %t130 = getelementptr inbounds %S.gen.Gen, ptr %t128, i32 0, i32 23 store i64 0, ptr %t130 %t131 = load ptr, ptr %a1 %t132 = icmp eq ptr %t131, null br i1 %t132, label %panic4478, label %ok4479 panic4478: call void @finch_panic(ptr @.str.2870, i64 1950, ptr @.str.2871) unreachable ok4479: %t133 = getelementptr inbounds %S.gen.Gen, ptr %t131, i32 0, i32 34 store i64 -1, ptr %t133 store i64 -1, ptr %a134 %t135 = load ptr, ptr %a1 %t136 = icmp eq ptr %t135, null br i1 %t136, label %panic4480, label %ok4481 panic4480: call void @finch_panic(ptr @.str.2872, i64 1952, ptr @.str.2873) unreachable ok4481: %t137 = getelementptr inbounds %S.gen.Gen, ptr %t135, i32 0, i32 28 %t138 = load i1, ptr %t137 br i1 %t138, label %then4482, label %endif4484 then4482: %t139 = load ptr, ptr %a1 %t140 = load %S.ast.Node, ptr %a106 %t141 = call i64 @finch.gen.dbgSubprogram(ptr %t139, %S.ast.Node %t140) store i64 %t141, ptr %a134 %t142 = load i64, ptr %a134 %t143 = load ptr, ptr %a1 %t144 = icmp eq ptr %t143, null br i1 %t144, label %panic4485, label %ok4486 panic4485: call void @finch_panic(ptr @.str.2874, i64 1954, ptr @.str.2875) unreachable ok4486: %t145 = getelementptr inbounds %S.gen.Gen, ptr %t143, i32 0, i32 34 store i64 %t142, ptr %t145 %t146 = getelementptr inbounds %S.ast.Node, ptr %a106, i32 0, i32 11 %t147 = load i64, ptr %t146 %t148 = load ptr, ptr %a1 %t149 = icmp eq ptr %t148, null br i1 %t149, label %panic4487, label %ok4488 panic4487: call void @finch_panic(ptr @.str.2876, i64 1955, ptr @.str.2877) unreachable ok4488: %t150 = getelementptr inbounds %S.gen.Gen, ptr %t148, i32 0, i32 35 store i64 %t147, ptr %t150 %t151 = getelementptr inbounds %S.ast.Node, ptr %a106, i32 0, i32 12 %t152 = load i64, ptr %t151 %t153 = load ptr, ptr %a1 %t154 = icmp eq ptr %t153, null br i1 %t154, label %panic4489, label %ok4490 panic4489: call void @finch_panic(ptr @.str.2878, i64 1956, ptr @.str.2879) unreachable ok4490: %t155 = getelementptr inbounds %S.gen.Gen, ptr %t153, i32 0, i32 36 store i64 %t152, ptr %t155 br label %endif4484 endif4484: %t156 = load ptr, ptr %a1 %t157 = icmp eq ptr %t156, null br i1 %t157, label %panic4491, label %ok4492 panic4491: call void @finch_panic(ptr @.str.2880, i64 1958, ptr @.str.2881) unreachable ok4492: %t158 = getelementptr inbounds %S.gen.Gen, ptr %t156, i32 0, i32 42 store i1 false, ptr %t158 %t159 = load ptr, ptr %a1 %t160 = icmp eq ptr %t159, null br i1 %t160, label %panic4493, label %ok4494 panic4493: call void @finch_panic(ptr @.str.2882, i64 1959, ptr @.str.2883) unreachable ok4494: %t161 = getelementptr inbounds %S.gen.Gen, ptr %t159, i32 0, i32 44 store i64 0, ptr %t161 store { ptr, i64, i64 } zeroinitializer, ptr %a162 %t163 = load { ptr, i64, i64 }, ptr %a162 %t164 = load ptr, ptr %a1 %t165 = icmp eq ptr %t164, null br i1 %t165, label %panic4495, label %ok4496 panic4495: call void @finch_panic(ptr @.str.2884, i64 1961, ptr @.str.2885) unreachable ok4496: %t166 = getelementptr inbounds %S.gen.Gen, ptr %t164, i32 0, i32 10 store { ptr, i64, i64 } %t163, ptr %a167 call void @finch.copy.arr_S_gen_Scope(ptr %a168, ptr %a167) %t169 = load { ptr, i64, i64 }, ptr %a168 store { ptr, i64, i64 } %t169, ptr %t166 %t170 = load ptr, ptr %a1 call void @finch.gen.pushScope(ptr %t170) store { ptr, i64, i64 } zeroinitializer, ptr %a171 %t172 = load ptr, ptr %a1 %t173 = icmp eq ptr %t172, null br i1 %t173, label %panic4500, label %ok4501 panic4500: call void @finch_panic(ptr @.str.2886, i64 1964, ptr @.str.2887) unreachable ok4501: %t174 = getelementptr inbounds %S.gen.Gen, ptr %t172, i32 0, i32 12 %t175 = getelementptr inbounds %S.gen.FnSig, ptr %t174, i32 0, i32 2 %t176 = getelementptr inbounds { ptr, i64, i64 }, ptr %t175, i32 0, i32 1 %t177 = load i64, ptr %t176 %t178 = icmp sgt i64 %t177, 0 br i1 %t178, label %then4502, label %endif4504 then4502: %t179 = getelementptr inbounds { ptr, i64, i64 }, ptr %a171, i32 0, i32 1 %t180 = load i64, ptr %t179 %t181 = add i64 %t180, 1 call void @finch_arr_reserve(ptr %a171, i64 %t181, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t182 = load ptr, ptr %a171 %t183 = getelementptr inbounds { ptr, i64, i64 }, ptr %t182, i64 %t180 store { ptr, i64, i64 } { ptr @.str.2888, i64 9, i64 0 }, ptr %t183 store i64 %t181, ptr %t179 store { ptr, i64, i64 } { ptr @.str.2889, i64 6, i64 0 }, ptr %a184 %t185 = load ptr, ptr %a1 %t186 = icmp eq ptr %t185, null br i1 %t186, label %panic4505, label %ok4506 panic4505: call void @finch_panic(ptr @.str.2890, i64 1968, ptr @.str.2891) unreachable ok4506: %t187 = getelementptr inbounds %S.gen.Gen, ptr %t185, i32 0, i32 12 %t188 = getelementptr inbounds %S.gen.FnSig, ptr %t187, i32 0, i32 4 %t189 = load i1, ptr %t188 br i1 %t189, label %then4507, label %endif4509 then4507: store { ptr, i64, i64 } { ptr @.str.2892, i64 4, i64 0 }, ptr %a184 br label %endif4509 endif4509: %t190 = load { ptr, i64, i64 }, ptr %a184 store { ptr, i64, i64 } %t190, ptr %a191 call void @finch_str_copy(ptr %a192, ptr %a191) %t193 = load { ptr, i64, i64 }, ptr %a192 %t194 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } %t193, 0 %t195 = load ptr, ptr %a1 %t196 = icmp eq ptr %t195, null br i1 %t196, label %panic4510, label %ok4511 panic4510: call void @finch_panic(ptr @.str.2893, i64 1971, ptr @.str.2894) unreachable ok4511: %t197 = getelementptr inbounds %S.gen.Gen, ptr %t195, i32 0, i32 12 %t198 = getelementptr inbounds %S.gen.FnSig, ptr %t197, i32 0, i32 2 %t199 = load { ptr, i64, i64 }, ptr %t198 store { ptr, i64, i64 } %t199, ptr %a200 call void @finch_str_copy(ptr %a201, ptr %a200) %t202 = load { ptr, i64, i64 }, ptr %a201 %t203 = insertvalue %S.ast.Type %t194, { ptr, i64, i64 } %t202, 2 %t204 = load ptr, ptr %a1 %t205 = icmp eq ptr %t204, null br i1 %t205, label %panic4512, label %ok4513 panic4512: call void @finch_panic(ptr @.str.2895, i64 1971, ptr @.str.2896) unreachable ok4513: %t206 = getelementptr inbounds %S.gen.Gen, ptr %t204, i32 0, i32 12 %t207 = getelementptr inbounds %S.gen.FnSig, ptr %t206, i32 0, i32 3 %t208 = load { ptr, i64, i64 }, ptr %t207 store { ptr, i64, i64 } %t208, ptr %a209 call void @finch_str_copy(ptr %a210, ptr %a209) %t211 = load { ptr, i64, i64 }, ptr %a210 %t212 = insertvalue %S.ast.Type %t203, { ptr, i64, i64 } %t211, 3 store %S.ast.Type %t212, ptr %a213 %t214 = load ptr, ptr %a1 %t215 = icmp eq ptr %t214, null br i1 %t215, label %panic4514, label %ok4515 panic4514: call void @finch_panic(ptr @.str.2897, i64 1972, ptr @.str.2898) unreachable ok4515: %t216 = getelementptr inbounds %S.gen.Gen, ptr %t214, i32 0, i32 10 %t217 = load { ptr, i64, i64 }, ptr %t216 %t218 = extractvalue { ptr, i64, i64 } %t217, 1 %t219 = icmp uge i64 0, %t218 br i1 %t219, label %range4516, label %inrange4517 range4516: call void @finch_panic_index(ptr @.str.2899, i64 1972, i64 0, i64 %t218) unreachable inrange4517: %t220 = extractvalue { ptr, i64, i64 } %t217, 0 %t221 = getelementptr inbounds %S.gen.Scope, ptr %t220, i64 0 %t222 = getelementptr inbounds %S.gen.Scope, ptr %t221, i32 0, i32 0 %t223 = getelementptr inbounds { ptr, i64, i64 }, ptr %t222, i32 0, i32 1 %t224 = insertvalue %S.gen.Var zeroinitializer, { ptr, i64, i64 } { ptr @.str.2900, i64 4, i64 0 }, 0 %t225 = load %S.ast.Type, ptr %a213 store %S.ast.Type %t225, ptr %a226 call void @finch.copy.S_ast_Type(ptr %a227, ptr %a226) %t228 = load %S.ast.Type, ptr %a227 %t229 = insertvalue %S.gen.Var %t224, %S.ast.Type %t228, 1 %t230 = insertvalue %S.gen.Var %t229, { ptr, i64, i64 } { ptr @.str.2901, i64 5, i64 0 }, 2 %t231 = insertvalue %S.gen.Var %t230, i1 false, 3 %t232 = load i64, ptr %t223 %t233 = add i64 %t232, 1 call void @finch_arr_reserve(ptr %t222, i64 %t233, i64 ptrtoint (ptr getelementptr (%S.gen.Var, ptr null, i32 1) to i64)) %t234 = load ptr, ptr %t222 %t235 = getelementptr inbounds %S.gen.Var, ptr %t234, i64 %t232 store %S.gen.Var %t231, ptr %t235 store i64 %t233, ptr %t223 %t236 = load ptr, ptr %a1 %t237 = icmp eq ptr %t236, null br i1 %t237, label %panic4518, label %ok4519 panic4518: call void @finch_panic(ptr @.str.2902, i64 1973, ptr @.str.2903) unreachable ok4519: %t238 = getelementptr inbounds %S.gen.Gen, ptr %t236, i32 0, i32 28 %t239 = load i1, ptr %t238 br i1 %t239, label %then4520, label %endif4522 then4520: %t240 = load ptr, ptr %a1 %t241 = load %S.ast.Node, ptr %a106 %t242 = load %S.ast.Type, ptr %a213 call void @finch.gen.dbgVariable(ptr %t240, %S.ast.Node %t241, { ptr, i64, i64 } { ptr @.str.2904, i64 4, i64 0 }, %S.ast.Type %t242, { ptr, i64, i64 } { ptr @.str.2905, i64 5, i64 0 }) br label %endif4522 endif4522: br label %endif4504 endif4504: %t243 = load ptr, ptr %a1 %t244 = icmp eq ptr %t243, null br i1 %t244, label %panic4523, label %ok4524 panic4523: call void @finch_panic(ptr @.str.2906, i64 1978, ptr @.str.2907) unreachable ok4524: %t245 = getelementptr inbounds %S.gen.Gen, ptr %t243, i32 0, i32 12 %t246 = getelementptr inbounds %S.gen.FnSig, ptr %t245, i32 0, i32 13 %t247 = getelementptr inbounds { ptr, i64, i64 }, ptr %t246, i32 0, i32 1 %t248 = load i64, ptr %t247 store i64 0, ptr %a249 br label %for.cond4525 for.cond4525: %t250 = load i64, ptr %a249 %t251 = icmp slt i64 %t250, %t248 br i1 %t251, label %for.body4526, label %for.end4528 for.body4526: %t252 = load ptr, ptr %a1 %t253 = icmp eq ptr %t252, null br i1 %t253, label %panic4529, label %ok4530 panic4529: call void @finch_panic(ptr @.str.2908, i64 1979, ptr @.str.2909) unreachable ok4530: %t254 = getelementptr inbounds %S.gen.Gen, ptr %t252, i32 0, i32 12 %t255 = getelementptr inbounds %S.gen.FnSig, ptr %t254, i32 0, i32 13 %t256 = load i64, ptr %a249 %t257 = load { ptr, i64, i64 }, ptr %t255 %t258 = extractvalue { ptr, i64, i64 } %t257, 1 %t259 = icmp uge i64 %t256, %t258 br i1 %t259, label %range4531, label %inrange4532 range4531: call void @finch_panic_index(ptr @.str.2910, i64 1979, i64 %t256, i64 %t258) unreachable inrange4532: %t260 = extractvalue { ptr, i64, i64 } %t257, 0 %t261 = getelementptr inbounds %S.ast.Type, ptr %t260, i64 %t256 %t262 = load %S.ast.Type, ptr %t261 store %S.ast.Type %t262, ptr %a263 call void @finch.copy.S_ast_Type(ptr %a264, ptr %a263) %t265 = load %S.ast.Type, ptr %a264 store %S.ast.Type %t265, ptr %a266 %t267 = getelementptr inbounds { ptr, i64, i64 }, ptr %a171, i32 0, i32 1 %t268 = load ptr, ptr %a1 %t269 = load %S.ast.Type, ptr %a266 %t270 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t268, %S.ast.Type %t269) store { ptr, i64, i64 } %t270, ptr %a272 store { ptr, i64, i64 } { ptr @.str.2911, i64 3, i64 0 }, ptr %a273 call void @finch_str_concat(ptr %a271, ptr %a272, ptr %a273) %t274 = load { ptr, i64, i64 }, ptr %a271 %t275 = load i64, ptr %a249 call void @finch_str_from_int(ptr %a276, i64 %t275) %t277 = load { ptr, i64, i64 }, ptr %a276 store { ptr, i64, i64 } %t274, ptr %a279 store { ptr, i64, i64 } %t277, ptr %a280 call void @finch_str_concat(ptr %a278, ptr %a279, ptr %a280) %t281 = load { ptr, i64, i64 }, ptr %a278 %t282 = load i64, ptr %t267 %t283 = add i64 %t282, 1 call void @finch_arr_reserve(ptr %a171, i64 %t283, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t284 = load ptr, ptr %a171 %t285 = getelementptr inbounds { ptr, i64, i64 }, ptr %t284, i64 %t282 store { ptr, i64, i64 } %t281, ptr %t285 store i64 %t283, ptr %t267 %t286 = load i64, ptr %a249 call void @finch_str_from_int(ptr %a287, i64 %t286) %t288 = load { ptr, i64, i64 }, ptr %a287 store { ptr, i64, i64 } { ptr @.str.2912, i64 2, i64 0 }, ptr %a290 store { ptr, i64, i64 } %t288, ptr %a291 call void @finch_str_concat(ptr %a289, ptr %a290, ptr %a291) %t292 = load { ptr, i64, i64 }, ptr %a289 store { ptr, i64, i64 } %t292, ptr %a293 %t294 = load ptr, ptr %a1 %t295 = load %S.ast.Type, ptr %a266 %t296 = call i1 @finch.gen.owning(ptr %t294, %S.ast.Type %t295) br label %logic.from4533 logic.from4533: br i1 %t296, label %logic.rhs4534, label %logic.end4535 logic.rhs4534: %t297 = load ptr, ptr %a1 %t298 = icmp eq ptr %t297, null br i1 %t298, label %panic4536, label %ok4537 panic4536: call void @finch_panic(ptr @.str.2913, i64 1982, ptr @.str.2914) unreachable ok4537: %t299 = getelementptr inbounds %S.gen.Gen, ptr %t297, i32 0, i32 12 %t300 = getelementptr inbounds %S.gen.FnSig, ptr %t299, i32 0, i32 15 %t301 = load i64, ptr %a249 %t302 = load { ptr, i64, i64 }, ptr %t300 %t303 = extractvalue { ptr, i64, i64 } %t302, 1 %t304 = icmp uge i64 %t301, %t303 br i1 %t304, label %range4538, label %inrange4539 range4538: call void @finch_panic_index(ptr @.str.2915, i64 1982, i64 %t301, i64 %t303) unreachable inrange4539: %t305 = extractvalue { ptr, i64, i64 } %t302, 0 %t306 = getelementptr inbounds i1, ptr %t305, i64 %t301 %t307 = load i1, ptr %t306 %t308 = xor i1 %t307, true br label %logic.rend4540 logic.rend4540: br label %logic.end4535 logic.end4535: %t309 = phi i1 [ false, %logic.from4533 ], [ %t308, %logic.rend4540 ] br i1 %t309, label %then4541, label %endif4543 then4541: %t310 = load ptr, ptr %a1 %t311 = load { ptr, i64, i64 }, ptr %a293 %t312 = load %S.ast.Type, ptr %a266 %t313 = call { ptr, i64, i64 } @finch.gen.copyValue(ptr %t310, { ptr, i64, i64 } %t311, %S.ast.Type %t312) store { ptr, i64, i64 } %t313, ptr %a293 br label %endif4543 endif4543: %t314 = load i64, ptr %a249 %t315 = add i64 %t314, 1 %t316 = load ptr, ptr %a1 %t317 = icmp eq ptr %t316, null br i1 %t317, label %panic4544, label %ok4545 panic4544: call void @finch_panic(ptr @.str.2916, i64 1985, ptr @.str.2917) unreachable ok4545: %t318 = getelementptr inbounds %S.gen.Gen, ptr %t316, i32 0, i32 37 store i64 %t315, ptr %t318 %t319 = load ptr, ptr %a1 %t320 = icmp eq ptr %t319, null br i1 %t320, label %panic4546, label %ok4547 panic4546: call void @finch_panic(ptr @.str.2918, i64 1986, ptr @.str.2919) unreachable ok4547: %t321 = getelementptr inbounds %S.gen.Gen, ptr %t319, i32 0, i32 12 %t322 = getelementptr inbounds %S.gen.FnSig, ptr %t321, i32 0, i32 2 %t323 = getelementptr inbounds { ptr, i64, i64 }, ptr %t322, i32 0, i32 1 %t324 = load i64, ptr %t323 %t325 = icmp sgt i64 %t324, 0 br i1 %t325, label %then4548, label %endif4550 then4548: %t326 = load i64, ptr %a249 %t327 = add i64 %t326, 2 %t328 = load ptr, ptr %a1 %t329 = icmp eq ptr %t328, null br i1 %t329, label %panic4551, label %ok4552 panic4551: call void @finch_panic(ptr @.str.2920, i64 1987, ptr @.str.2921) unreachable ok4552: %t330 = getelementptr inbounds %S.gen.Gen, ptr %t328, i32 0, i32 37 store i64 %t327, ptr %t330 br label %endif4550 endif4550: %t331 = load ptr, ptr %a1 %t332 = getelementptr inbounds %S.ast.Node, ptr %a106, i32 0, i32 9 %t333 = load i64, ptr %a249 %t334 = load { ptr, i64, i64 }, ptr %t332 %t335 = extractvalue { ptr, i64, i64 } %t334, 1 %t336 = icmp uge i64 %t333, %t335 br i1 %t336, label %range4553, label %inrange4554 range4553: call void @finch_panic_index(ptr @.str.2922, i64 1989, i64 %t333, i64 %t335) unreachable inrange4554: %t337 = extractvalue { ptr, i64, i64 } %t334, 0 %t338 = getelementptr inbounds %S.ast.Node, ptr %t337, i64 %t333 %t339 = load %S.ast.Node, ptr %t338 %t340 = load ptr, ptr %a1 %t341 = icmp eq ptr %t340, null br i1 %t341, label %panic4555, label %ok4556 panic4555: call void @finch_panic(ptr @.str.2923, i64 1989, ptr @.str.2924) unreachable ok4556: %t342 = getelementptr inbounds %S.gen.Gen, ptr %t340, i32 0, i32 12 %t343 = getelementptr inbounds %S.gen.FnSig, ptr %t342, i32 0, i32 14 %t344 = load i64, ptr %a249 %t345 = load { ptr, i64, i64 }, ptr %t343 %t346 = extractvalue { ptr, i64, i64 } %t345, 1 %t347 = icmp uge i64 %t344, %t346 br i1 %t347, label %range4557, label %inrange4558 range4557: call void @finch_panic_index(ptr @.str.2925, i64 1989, i64 %t344, i64 %t346) unreachable inrange4558: %t348 = extractvalue { ptr, i64, i64 } %t345, 0 %t349 = getelementptr inbounds { ptr, i64, i64 }, ptr %t348, i64 %t344 %t350 = load { ptr, i64, i64 }, ptr %t349 %t351 = load %S.ast.Type, ptr %a266 %t352 = load { ptr, i64, i64 }, ptr %a293 %t353 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t331, %S.ast.Node %t339, { ptr, i64, i64 } %t350, %S.ast.Type %t351, { ptr, i64, i64 } %t352, i1 false) %t354 = load ptr, ptr %a1 %t355 = icmp eq ptr %t354, null br i1 %t355, label %panic4559, label %ok4560 panic4559: call void @finch_panic(ptr @.str.2926, i64 1990, ptr @.str.2927) unreachable ok4560: %t356 = getelementptr inbounds %S.gen.Gen, ptr %t354, i32 0, i32 37 store i64 0, ptr %t356 br label %for.step4527 for.step4527: %t357 = load i64, ptr %a249 %t358 = add i64 %t357, 1 store i64 %t358, ptr %a249 br label %for.cond4525 for.end4528: %t359 = load ptr, ptr %a1 %t360 = getelementptr inbounds %S.ast.Node, ptr %a106, i32 0, i32 9 %t361 = getelementptr inbounds %S.ast.Node, ptr %a106, i32 0, i32 9 %t362 = getelementptr inbounds { ptr, i64, i64 }, ptr %t361, i32 0, i32 1 %t363 = load i64, ptr %t362 %t364 = sub i64 %t363, 1 %t365 = load { ptr, i64, i64 }, ptr %t360 %t366 = extractvalue { ptr, i64, i64 } %t365, 1 %t367 = icmp uge i64 %t364, %t366 br i1 %t367, label %range4561, label %inrange4562 range4561: call void @finch_panic_index(ptr @.str.2928, i64 1992, i64 %t364, i64 %t366) unreachable inrange4562: %t368 = extractvalue { ptr, i64, i64 } %t365, 0 %t369 = getelementptr inbounds %S.ast.Node, ptr %t368, i64 %t364 %t370 = load %S.ast.Node, ptr %t369 call void @finch.gen.block(ptr %t359, %S.ast.Node %t370, i1 false) %t371 = load ptr, ptr %a1 %t372 = icmp eq ptr %t371, null br i1 %t372, label %panic4563, label %ok4564 panic4563: call void @finch_panic(ptr @.str.2929, i64 1993, ptr @.str.2930) unreachable ok4564: %t373 = getelementptr inbounds %S.gen.Gen, ptr %t371, i32 0, i32 9 %t374 = load i1, ptr %t373 %t375 = xor i1 %t374, true br i1 %t375, label %then4565, label %endif4567 then4565: %t376 = load ptr, ptr %a1 %t377 = icmp eq ptr %t376, null br i1 %t377, label %panic4568, label %ok4569 panic4568: call void @finch_panic(ptr @.str.2931, i64 1994, ptr @.str.2932) unreachable ok4569: %t378 = getelementptr inbounds %S.gen.Gen, ptr %t376, i32 0, i32 12 %t379 = getelementptr inbounds %S.gen.FnSig, ptr %t378, i32 0, i32 12 %t380 = getelementptr inbounds %S.ast.Type, ptr %t379, i32 0, i32 0 %t381 = load { ptr, i64, i64 }, ptr %t380 store { ptr, i64, i64 } %t381, ptr %a382 store { ptr, i64, i64 } { ptr @.str.2933, i64 4, i64 0 }, ptr %a383 %t384 = call i32 @finch_str_eq(ptr %a382, ptr %a383) %t385 = icmp eq i32 %t384, 0 br i1 %t385, label %then4570, label %endif4572 then4570: %t386 = load ptr, ptr %a1 %t387 = load %S.ast.Node, ptr %a106 %t388 = getelementptr inbounds %S.ast.Node, ptr %a106, i32 0, i32 1 %t389 = load { ptr, i64, i64 }, ptr %t388 store { ptr, i64, i64 } { ptr @.str.2934, i64 10, i64 0 }, ptr %a391 store { ptr, i64, i64 } %t389, ptr %a392 call void @finch_str_concat(ptr %a390, ptr %a391, ptr %a392) %t393 = load { ptr, i64, i64 }, ptr %a390 store { ptr, i64, i64 } %t393, ptr %a395 store { ptr, i64, i64 } { ptr @.str.2935, i64 38, i64 0 }, ptr %a396 call void @finch_str_concat(ptr %a394, ptr %a395, ptr %a396) %t397 = load { ptr, i64, i64 }, ptr %a394 %t398 = load ptr, ptr %a1 %t399 = icmp eq ptr %t398, null br i1 %t399, label %panic4573, label %ok4574 panic4573: call void @finch_panic(ptr @.str.2936, i64 1995, ptr @.str.2937) unreachable ok4574: %t400 = getelementptr inbounds %S.gen.Gen, ptr %t398, i32 0, i32 12 %t401 = getelementptr inbounds %S.gen.FnSig, ptr %t400, i32 0, i32 12 %t402 = load %S.ast.Type, ptr %t401 %t403 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t402) store { ptr, i64, i64 } %t397, ptr %a405 store { ptr, i64, i64 } %t403, ptr %a406 call void @finch_str_concat(ptr %a404, ptr %a405, ptr %a406) %t407 = load { ptr, i64, i64 }, ptr %a404 call void @finch.gen.fail(ptr %t386, %S.ast.Node %t387, { ptr, i64, i64 } %t407) br label %endif4572 endif4572: %t408 = load ptr, ptr %a1 call void @finch.gen.runDefers(ptr %t408, i64 0) %t409 = load ptr, ptr %a1 %t410 = icmp eq ptr %t409, null br i1 %t410, label %panic4575, label %ok4576 panic4575: call void @finch_panic(ptr @.str.2938, i64 1998, ptr @.str.2939) unreachable ok4576: %t411 = getelementptr inbounds %S.gen.Gen, ptr %t409, i32 0, i32 12 %t412 = getelementptr inbounds %S.gen.FnSig, ptr %t411, i32 0, i32 9 %t413 = load i1, ptr %t412 br i1 %t413, label %then4577, label %else4578 then4577: %t414 = load ptr, ptr %a1 %t415 = load ptr, ptr %a1 %t416 = load ptr, ptr %a1 %t417 = icmp eq ptr %t416, null br i1 %t417, label %panic4580, label %ok4581 panic4580: call void @finch_panic(ptr @.str.2941, i64 1999, ptr @.str.2942) unreachable ok4581: %t418 = getelementptr inbounds %S.gen.Gen, ptr %t416, i32 0, i32 12 %t419 = load %S.gen.FnSig, ptr %t418 %t420 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t415, %S.gen.FnSig %t419) store { ptr, i64, i64 } { ptr @.str.2940, i64 4, i64 0 }, ptr %a422 store { ptr, i64, i64 } %t420, ptr %a423 call void @finch_str_concat(ptr %a421, ptr %a422, ptr %a423) %t424 = load { ptr, i64, i64 }, ptr %a421 store { ptr, i64, i64 } %t424, ptr %a426 store { ptr, i64, i64 } { ptr @.str.2943, i64 53, i64 0 }, ptr %a427 call void @finch_str_concat(ptr %a425, ptr %a426, ptr %a427) %t428 = load { ptr, i64, i64 }, ptr %a425 call void @finch.gen.emit(ptr %t414, { ptr, i64, i64 } %t428) br label %endif4579 else4578: %t429 = load ptr, ptr %a1 call void @finch.gen.emit(ptr %t429, { ptr, i64, i64 } { ptr @.str.2944, i64 8, i64 0 }) br label %endif4579 endif4579: br label %endif4567 endif4567: store { ptr, i64, i64 } { ptr @.str.2945, i64 0, i64 0 }, ptr %a430 %t431 = load i64, ptr %a134 %t432 = icmp sge i64 %t431, 0 br i1 %t432, label %then4582, label %endif4584 then4582: %t433 = load i64, ptr %a134 call void @finch_str_from_int(ptr %a434, i64 %t433) %t435 = load { ptr, i64, i64 }, ptr %a434 store { ptr, i64, i64 } { ptr @.str.2946, i64 7, i64 0 }, ptr %a437 store { ptr, i64, i64 } %t435, ptr %a438 call void @finch_str_concat(ptr %a436, ptr %a437, ptr %a438) %t439 = load { ptr, i64, i64 }, ptr %a436 store { ptr, i64, i64 } %t439, ptr %a430 br label %endif4584 endif4584: %t440 = load ptr, ptr %a1 %t441 = icmp eq ptr %t440, null br i1 %t441, label %panic4585, label %ok4586 panic4585: call void @finch_panic(ptr @.str.2947, i64 2008, ptr @.str.2948) unreachable ok4586: %t442 = getelementptr inbounds %S.gen.Gen, ptr %t440, i32 0, i32 34 store i64 -1, ptr %t442 %t443 = load ptr, ptr %a1 %t444 = icmp eq ptr %t443, null br i1 %t444, label %panic4587, label %ok4588 panic4587: call void @finch_panic(ptr @.str.2949, i64 2009, ptr @.str.2950) unreachable ok4588: %t445 = getelementptr inbounds %S.gen.Gen, ptr %t443, i32 0, i32 3 %t446 = getelementptr inbounds { ptr, i64, i64 }, ptr %t445, i32 0, i32 1 %t447 = load ptr, ptr %a1 %t448 = load ptr, ptr %a1 %t449 = icmp eq ptr %t448, null br i1 %t449, label %panic4589, label %ok4590 panic4589: call void @finch_panic(ptr @.str.2952, i64 2009, ptr @.str.2953) unreachable ok4590: %t450 = getelementptr inbounds %S.gen.Gen, ptr %t448, i32 0, i32 12 %t451 = load %S.gen.FnSig, ptr %t450 %t452 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t447, %S.gen.FnSig %t451) store { ptr, i64, i64 } { ptr @.str.2951, i64 16, i64 0 }, ptr %a454 store { ptr, i64, i64 } %t452, ptr %a455 call void @finch_str_concat(ptr %a453, ptr %a454, ptr %a455) %t456 = load { ptr, i64, i64 }, ptr %a453 store { ptr, i64, i64 } %t456, ptr %a458 store { ptr, i64, i64 } { ptr @.str.2954, i64 1, i64 0 }, ptr %a459 call void @finch_str_concat(ptr %a457, ptr %a458, ptr %a459) %t460 = load { ptr, i64, i64 }, ptr %a457 %t461 = load ptr, ptr %a1 %t462 = icmp eq ptr %t461, null br i1 %t462, label %panic4591, label %ok4592 panic4591: call void @finch_panic(ptr @.str.2955, i64 2009, ptr @.str.2956) unreachable ok4592: %t463 = getelementptr inbounds %S.gen.Gen, ptr %t461, i32 0, i32 12 %t464 = getelementptr inbounds %S.gen.FnSig, ptr %t463, i32 0, i32 11 %t465 = load { ptr, i64, i64 }, ptr %t464 store { ptr, i64, i64 } %t460, ptr %a467 store { ptr, i64, i64 } %t465, ptr %a468 call void @finch_str_concat(ptr %a466, ptr %a467, ptr %a468) %t469 = load { ptr, i64, i64 }, ptr %a466 store { ptr, i64, i64 } %t469, ptr %a471 store { ptr, i64, i64 } { ptr @.str.2957, i64 1, i64 0 }, ptr %a472 call void @finch_str_concat(ptr %a470, ptr %a471, ptr %a472) %t473 = load { ptr, i64, i64 }, ptr %a470 %t474 = getelementptr inbounds { ptr, i64, i64 }, ptr %a171, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.2958, i64 2, i64 0 }, ptr %a475 call void @finch_str_join(ptr %a476, ptr %a171, ptr %a475) %t477 = load { ptr, i64, i64 }, ptr %a476 store { ptr, i64, i64 } %t473, ptr %a479 store { ptr, i64, i64 } %t477, ptr %a480 call void @finch_str_concat(ptr %a478, ptr %a479, ptr %a480) %t481 = load { ptr, i64, i64 }, ptr %a478 store { ptr, i64, i64 } %t481, ptr %a483 store { ptr, i64, i64 } { ptr @.str.2959, i64 1, i64 0 }, ptr %a484 call void @finch_str_concat(ptr %a482, ptr %a483, ptr %a484) %t485 = load { ptr, i64, i64 }, ptr %a482 %t486 = load { ptr, i64, i64 }, ptr %a430 store { ptr, i64, i64 } %t485, ptr %a488 store { ptr, i64, i64 } %t486, ptr %a489 call void @finch_str_concat(ptr %a487, ptr %a488, ptr %a489) %t490 = load { ptr, i64, i64 }, ptr %a487 store { ptr, i64, i64 } %t490, ptr %a492 store { ptr, i64, i64 } { ptr @.str.2960, i64 10, i64 0 }, ptr %a493 call void @finch_str_concat(ptr %a491, ptr %a492, ptr %a493) %t494 = load { ptr, i64, i64 }, ptr %a491 %t495 = load ptr, ptr %a1 %t496 = icmp eq ptr %t495, null br i1 %t496, label %panic4593, label %ok4594 panic4593: call void @finch_panic(ptr @.str.2961, i64 2010, ptr @.str.2962) unreachable ok4594: %t497 = getelementptr inbounds %S.gen.Gen, ptr %t495, i32 0, i32 5 %t498 = getelementptr inbounds { ptr, i64, i64 }, ptr %t497, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.2963, i64 1, i64 0 }, ptr %a499 call void @finch_str_join(ptr %a500, ptr %t497, ptr %a499) %t501 = load { ptr, i64, i64 }, ptr %a500 store { ptr, i64, i64 } %t494, ptr %a503 store { ptr, i64, i64 } %t501, ptr %a504 call void @finch_str_concat(ptr %a502, ptr %a503, ptr %a504) %t505 = load { ptr, i64, i64 }, ptr %a502 store { ptr, i64, i64 } %t505, ptr %a507 store { ptr, i64, i64 } { ptr @.str.2964, i64 1, i64 0 }, ptr %a508 call void @finch_str_concat(ptr %a506, ptr %a507, ptr %a508) %t509 = load { ptr, i64, i64 }, ptr %a506 %t510 = load ptr, ptr %a1 %t511 = icmp eq ptr %t510, null br i1 %t511, label %panic4595, label %ok4596 panic4595: call void @finch_panic(ptr @.str.2965, i64 2010, ptr @.str.2966) unreachable ok4596: %t512 = getelementptr inbounds %S.gen.Gen, ptr %t510, i32 0, i32 4 %t513 = getelementptr inbounds { ptr, i64, i64 }, ptr %t512, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.2967, i64 1, i64 0 }, ptr %a514 call void @finch_str_join(ptr %a515, ptr %t512, ptr %a514) %t516 = load { ptr, i64, i64 }, ptr %a515 store { ptr, i64, i64 } %t509, ptr %a518 store { ptr, i64, i64 } %t516, ptr %a519 call void @finch_str_concat(ptr %a517, ptr %a518, ptr %a519) %t520 = load { ptr, i64, i64 }, ptr %a517 store { ptr, i64, i64 } %t520, ptr %a522 store { ptr, i64, i64 } { ptr @.str.2968, i64 3, i64 0 }, ptr %a523 call void @finch_str_concat(ptr %a521, ptr %a522, ptr %a523) %t524 = load { ptr, i64, i64 }, ptr %a521 %t525 = load i64, ptr %t446 %t526 = add i64 %t525, 1 call void @finch_arr_reserve(ptr %t445, i64 %t526, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t527 = load ptr, ptr %t445 %t528 = getelementptr inbounds { ptr, i64, i64 }, ptr %t527, i64 %t525 store { ptr, i64, i64 } %t524, ptr %t528 store i64 %t526, ptr %t446 ret void } define internal void @finch.gen.block(ptr %p0, %S.ast.Node %p1, i1 %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a3 = alloca i1, align 16 %a7 = alloca i64, align 16 %a15 = alloca %S.ast.Node, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 store i1 %p2, ptr %a3 %t4 = load i1, ptr %a3 br i1 %t4, label %then4597, label %endif4599 then4597: %t5 = load ptr, ptr %a1 call void @finch.gen.pushScope(ptr %t5) br label %endif4599 endif4599: %t6 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 store i64 0, ptr %a7 br label %each.cond4600 each.cond4600: %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t6, i32 0, i32 1 %t9 = load i64, ptr %t8 %t10 = load i64, ptr %a7 %t11 = icmp slt i64 %t10, %t9 br i1 %t11, label %each.body4601, label %each.end4603 each.body4601: %t12 = load ptr, ptr %t6 %t13 = getelementptr inbounds %S.ast.Node, ptr %t12, i64 %t10 %t14 = load %S.ast.Node, ptr %t13 store %S.ast.Node %t14, ptr %a15 %t16 = load ptr, ptr %a1 %t17 = icmp eq ptr %t16, null br i1 %t17, label %panic4604, label %ok4605 panic4604: call void @finch_panic(ptr @.str.2969, i64 2020, ptr @.str.2970) unreachable ok4605: %t18 = getelementptr inbounds %S.gen.Gen, ptr %t16, i32 0, i32 9 %t19 = load i1, ptr %t18 br i1 %t19, label %then4606, label %endif4608 then4606: %t20 = load ptr, ptr %a1 %t21 = load %S.ast.Node, ptr %a15 call void @finch.gen.fail(ptr %t20, %S.ast.Node %t21, { ptr, i64, i64 } { ptr @.str.2971, i64 66, i64 0 }) br label %endif4608 endif4608: %t22 = load ptr, ptr %a1 %t23 = load %S.ast.Node, ptr %a15 call void @finch.gen.stmt(ptr %t22, %S.ast.Node %t23) br label %each.step4602 each.step4602: %t24 = load i64, ptr %a7 %t25 = add i64 %t24, 1 store i64 %t25, ptr %a7 br label %each.cond4600 each.end4603: %t26 = load i1, ptr %a3 br i1 %t26, label %then4609, label %endif4611 then4609: %t27 = load ptr, ptr %a1 call void @finch.gen.endScope(ptr %t27) br label %endif4611 endif4611: ret void } define internal void @finch.copy.S_gen_Loop(ptr %dst, ptr %src) { entry: %t1 = load %S.gen.Loop, ptr %src store %S.gen.Loop %t1, ptr %dst %t2 = getelementptr inbounds %S.gen.Loop, ptr %dst, i32 0, i32 0 %t3 = getelementptr inbounds %S.gen.Loop, ptr %src, i32 0, i32 0 call void @finch_str_copy(ptr %t2, ptr %t3) %t4 = getelementptr inbounds %S.gen.Loop, ptr %dst, i32 0, i32 1 %t5 = getelementptr inbounds %S.gen.Loop, ptr %src, i32 0, i32 1 call void @finch_str_copy(ptr %t4, ptr %t5) ret void } define internal void @finch.gen.stmt(ptr %p0, %S.ast.Node %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a85 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 %a106 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 %a113 = alloca { ptr, i64, i64 }, align 16 %a119 = alloca { ptr, i64, i64 }, align 16 %a120 = alloca { ptr, i64, i64 }, align 16 %a136 = alloca i64, align 16 %a155 = alloca %S.ast.Node, align 16 %a156 = alloca %S.ast.Node, align 16 %a182 = alloca { ptr, i64, i64 }, align 16 %a183 = alloca { ptr, i64, i64 }, align 16 %a187 = alloca { ptr, i64, i64 }, align 16 %a188 = alloca { ptr, i64, i64 }, align 16 %a200 = alloca { ptr, i64, i64 }, align 16 %a201 = alloca { ptr, i64, i64 }, align 16 %a202 = alloca { ptr, i64, i64 }, align 16 %a213 = alloca { ptr, i64, i64 }, align 16 %a214 = alloca { ptr, i64, i64 }, align 16 %a215 = alloca { ptr, i64, i64 }, align 16 %a232 = alloca %S.gen.Loop, align 16 %a233 = alloca %S.gen.Loop, align 16 %a235 = alloca %S.gen.Loop, align 16 %a240 = alloca { ptr, i64, i64 }, align 16 %a241 = alloca { ptr, i64, i64 }, align 16 %a253 = alloca { ptr, i64, i64 }, align 16 %a254 = alloca { ptr, i64, i64 }, align 16 %a255 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 %t3 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 %t4 = load i64, ptr %t3 %t5 = load ptr, ptr %a1 %t6 = icmp eq ptr %t5, null br i1 %t6, label %panic4612, label %ok4613 panic4612: call void @finch_panic(ptr @.str.2972, i64 2031, ptr @.str.2973) unreachable ok4613: %t7 = getelementptr inbounds %S.gen.Gen, ptr %t5, i32 0, i32 35 store i64 %t4, ptr %t7 %t8 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 %t9 = load i64, ptr %t8 %t10 = load ptr, ptr %a1 %t11 = icmp eq ptr %t10, null br i1 %t11, label %panic4614, label %ok4615 panic4614: call void @finch_panic(ptr @.str.2974, i64 2032, ptr @.str.2975) unreachable ok4615: %t12 = getelementptr inbounds %S.gen.Gen, ptr %t10, i32 0, i32 36 store i64 %t9, ptr %t12 %t13 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 %t14 = load { ptr, i64, i64 }, ptr %t13 store { ptr, i64, i64 } %t14, ptr %a15 call void @finch_str_copy(ptr %a16, ptr %a15) %t17 = load { ptr, i64, i64 }, ptr %a16 store { ptr, i64, i64 } %t17, ptr %a18 %t19 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t19, ptr %a20 store { ptr, i64, i64 } { ptr @.str.2976, i64 5, i64 0 }, ptr %a21 %t22 = call i32 @finch_str_eq(ptr %a20, ptr %a21) %t23 = icmp ne i32 %t22, 0 br i1 %t23, label %then4616, label %else4617 then4616: %t24 = load ptr, ptr %a1 %t25 = load %S.ast.Node, ptr %a2 call void @finch.gen.block(ptr %t24, %S.ast.Node %t25, i1 true) br label %endif4618 else4617: %t26 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t26, ptr %a27 store { ptr, i64, i64 } { ptr @.str.2977, i64 4, i64 0 }, ptr %a28 %t29 = call i32 @finch_str_eq(ptr %a27, ptr %a28) %t30 = icmp ne i32 %t29, 0 br i1 %t30, label %then4619, label %else4620 then4619: %t31 = load ptr, ptr %a1 %t32 = load %S.ast.Node, ptr %a2 call void @finch.gen.declStmt(ptr %t31, %S.ast.Node %t32) br label %endif4621 else4620: %t33 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t33, ptr %a34 store { ptr, i64, i64 } { ptr @.str.2978, i64 6, i64 0 }, ptr %a35 %t36 = call i32 @finch_str_eq(ptr %a34, ptr %a35) %t37 = icmp ne i32 %t36, 0 br i1 %t37, label %then4622, label %else4623 then4622: %t38 = load ptr, ptr %a1 %t39 = load %S.ast.Node, ptr %a2 call void @finch.gen.assignStmt(ptr %t38, %S.ast.Node %t39) br label %endif4624 else4623: %t40 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t40, ptr %a41 store { ptr, i64, i64 } { ptr @.str.2979, i64 4, i64 0 }, ptr %a42 %t43 = call i32 @finch_str_eq(ptr %a41, ptr %a42) %t44 = icmp ne i32 %t43, 0 br i1 %t44, label %then4625, label %else4626 then4625: %t45 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t46 = load { ptr, i64, i64 }, ptr %t45 %t47 = extractvalue { ptr, i64, i64 } %t46, 1 %t48 = icmp uge i64 0, %t47 br i1 %t48, label %range4628, label %inrange4629 range4628: call void @finch_panic_index(ptr @.str.2980, i64 2041, i64 0, i64 %t47) unreachable inrange4629: %t49 = extractvalue { ptr, i64, i64 } %t46, 0 %t50 = getelementptr inbounds %S.ast.Node, ptr %t49, i64 0 %t51 = getelementptr inbounds %S.ast.Node, ptr %t50, i32 0, i32 0 %t52 = load { ptr, i64, i64 }, ptr %t51 store { ptr, i64, i64 } %t52, ptr %a53 store { ptr, i64, i64 } { ptr @.str.2981, i64 2, i64 0 }, ptr %a54 %t55 = call i32 @finch_str_eq(ptr %a53, ptr %a54) %t56 = icmp ne i32 %t55, 0 br i1 %t56, label %then4630, label %else4631 then4630: %t57 = load ptr, ptr %a1 %t58 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t59 = load { ptr, i64, i64 }, ptr %t58 %t60 = extractvalue { ptr, i64, i64 } %t59, 1 %t61 = icmp uge i64 0, %t60 br i1 %t61, label %range4633, label %inrange4634 range4633: call void @finch_panic_index(ptr @.str.2982, i64 2042, i64 0, i64 %t60) unreachable inrange4634: %t62 = extractvalue { ptr, i64, i64 } %t59, 0 %t63 = getelementptr inbounds %S.ast.Node, ptr %t62, i64 0 %t64 = load %S.ast.Node, ptr %t63 %t65 = call %S.gen.Val @finch.gen.orElse(ptr %t57, %S.ast.Node %t64, i1 true) br label %endif4632 else4631: %t66 = load ptr, ptr %a1 %t67 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t68 = load { ptr, i64, i64 }, ptr %t67 %t69 = extractvalue { ptr, i64, i64 } %t68, 1 %t70 = icmp uge i64 0, %t69 br i1 %t70, label %range4635, label %inrange4636 range4635: call void @finch_panic_index(ptr @.str.2983, i64 2044, i64 0, i64 %t69) unreachable inrange4636: %t71 = extractvalue { ptr, i64, i64 } %t68, 0 %t72 = getelementptr inbounds %S.ast.Node, ptr %t71, i64 0 %t73 = load %S.ast.Node, ptr %t72 %t74 = call %S.gen.Val @finch.gen.expr(ptr %t66, %S.ast.Node %t73) br label %endif4632 endif4632: br label %endif4627 else4626: %t75 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t75, ptr %a76 store { ptr, i64, i64 } { ptr @.str.2984, i64 5, i64 0 }, ptr %a77 %t78 = call i32 @finch_str_eq(ptr %a76, ptr %a77) %t79 = icmp ne i32 %t78, 0 br i1 %t79, label %then4637, label %else4638 then4637: %t80 = load ptr, ptr %a1 %t81 = load %S.ast.Node, ptr %a2 %t82 = call %S.gen.Val @finch.gen.matchGen(ptr %t80, %S.ast.Node %t81, i1 false) br label %endif4639 else4638: %t83 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t83, ptr %a84 store { ptr, i64, i64 } { ptr @.str.2985, i64 2, i64 0 }, ptr %a85 %t86 = call i32 @finch_str_eq(ptr %a84, ptr %a85) %t87 = icmp ne i32 %t86, 0 br i1 %t87, label %then4640, label %else4641 then4640: %t88 = load ptr, ptr %a1 %t89 = load %S.ast.Node, ptr %a2 call void @finch.gen.ifStmt(ptr %t88, %S.ast.Node %t89) br label %endif4642 else4641: %t90 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t90, ptr %a91 store { ptr, i64, i64 } { ptr @.str.2986, i64 5, i64 0 }, ptr %a92 %t93 = call i32 @finch_str_eq(ptr %a91, ptr %a92) %t94 = icmp ne i32 %t93, 0 br i1 %t94, label %then4643, label %else4644 then4643: %t95 = load ptr, ptr %a1 %t96 = load %S.ast.Node, ptr %a2 call void @finch.gen.whileStmt(ptr %t95, %S.ast.Node %t96) br label %endif4645 else4644: %t97 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t97, ptr %a98 store { ptr, i64, i64 } { ptr @.str.2987, i64 3, i64 0 }, ptr %a99 %t100 = call i32 @finch_str_eq(ptr %a98, ptr %a99) %t101 = icmp ne i32 %t100, 0 br i1 %t101, label %then4646, label %else4647 then4646: %t102 = load ptr, ptr %a1 %t103 = load %S.ast.Node, ptr %a2 call void @finch.gen.forStmt(ptr %t102, %S.ast.Node %t103) br label %endif4648 else4647: %t104 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t104, ptr %a105 store { ptr, i64, i64 } { ptr @.str.2988, i64 4, i64 0 }, ptr %a106 %t107 = call i32 @finch_str_eq(ptr %a105, ptr %a106) %t108 = icmp ne i32 %t107, 0 br i1 %t108, label %then4649, label %else4650 then4649: %t109 = load ptr, ptr %a1 %t110 = load %S.ast.Node, ptr %a2 call void @finch.gen.eachStmt(ptr %t109, %S.ast.Node %t110) br label %endif4651 else4650: %t111 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t111, ptr %a112 store { ptr, i64, i64 } { ptr @.str.2989, i64 6, i64 0 }, ptr %a113 %t114 = call i32 @finch_str_eq(ptr %a112, ptr %a113) %t115 = icmp ne i32 %t114, 0 br i1 %t115, label %then4652, label %else4653 then4652: %t116 = load ptr, ptr %a1 %t117 = load %S.ast.Node, ptr %a2 call void @finch.gen.returnStmt(ptr %t116, %S.ast.Node %t117) br label %endif4654 else4653: %t118 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t118, ptr %a119 store { ptr, i64, i64 } { ptr @.str.2990, i64 5, i64 0 }, ptr %a120 %t121 = call i32 @finch_str_eq(ptr %a119, ptr %a120) %t122 = icmp ne i32 %t121, 0 br i1 %t122, label %then4655, label %else4656 then4655: %t123 = load ptr, ptr %a1 %t124 = icmp eq ptr %t123, null br i1 %t124, label %panic4658, label %ok4659 panic4658: call void @finch_panic(ptr @.str.2991, i64 2059, ptr @.str.2992) unreachable ok4659: %t125 = getelementptr inbounds %S.gen.Gen, ptr %t123, i32 0, i32 44 %t126 = load i64, ptr %t125 %t127 = icmp sgt i64 %t126, 0 br i1 %t127, label %then4660, label %endif4662 then4660: %t128 = load ptr, ptr %a1 %t129 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t128, %S.ast.Node %t129, { ptr, i64, i64 } { ptr @.str.2993, i64 33, i64 0 }) br label %endif4662 endif4662: %t130 = load ptr, ptr %a1 %t131 = icmp eq ptr %t130, null br i1 %t131, label %panic4663, label %ok4664 panic4663: call void @finch_panic(ptr @.str.2994, i64 2062, ptr @.str.2995) unreachable ok4664: %t132 = getelementptr inbounds %S.gen.Gen, ptr %t130, i32 0, i32 10 %t133 = getelementptr inbounds { ptr, i64, i64 }, ptr %t132, i32 0, i32 1 %t134 = load i64, ptr %t133 %t135 = sub i64 %t134, 1 store i64 %t135, ptr %a136 %t137 = load ptr, ptr %a1 %t138 = icmp eq ptr %t137, null br i1 %t138, label %panic4665, label %ok4666 panic4665: call void @finch_panic(ptr @.str.2996, i64 2063, ptr @.str.2997) unreachable ok4666: %t139 = getelementptr inbounds %S.gen.Gen, ptr %t137, i32 0, i32 10 %t140 = load i64, ptr %a136 %t141 = load { ptr, i64, i64 }, ptr %t139 %t142 = extractvalue { ptr, i64, i64 } %t141, 1 %t143 = icmp uge i64 %t140, %t142 br i1 %t143, label %range4667, label %inrange4668 range4667: call void @finch_panic_index(ptr @.str.2998, i64 2063, i64 %t140, i64 %t142) unreachable inrange4668: %t144 = extractvalue { ptr, i64, i64 } %t141, 0 %t145 = getelementptr inbounds %S.gen.Scope, ptr %t144, i64 %t140 %t146 = getelementptr inbounds %S.gen.Scope, ptr %t145, i32 0, i32 1 %t147 = getelementptr inbounds { ptr, i64, i64 }, ptr %t146, i32 0, i32 1 %t148 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t149 = load { ptr, i64, i64 }, ptr %t148 %t150 = extractvalue { ptr, i64, i64 } %t149, 1 %t151 = icmp uge i64 0, %t150 br i1 %t151, label %range4669, label %inrange4670 range4669: call void @finch_panic_index(ptr @.str.2999, i64 2063, i64 0, i64 %t150) unreachable inrange4670: %t152 = extractvalue { ptr, i64, i64 } %t149, 0 %t153 = getelementptr inbounds %S.ast.Node, ptr %t152, i64 0 %t154 = load %S.ast.Node, ptr %t153 store %S.ast.Node %t154, ptr %a155 call void @finch.copy.S_ast_Node(ptr %a156, ptr %a155) %t157 = load %S.ast.Node, ptr %a156 %t158 = load i64, ptr %t147 %t159 = add i64 %t158, 1 call void @finch_arr_reserve(ptr %t146, i64 %t159, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t160 = load ptr, ptr %t146 %t161 = getelementptr inbounds %S.ast.Node, ptr %t160, i64 %t158 store %S.ast.Node %t157, ptr %t161 store i64 %t159, ptr %t147 %t162 = load ptr, ptr %a1 %t163 = icmp eq ptr %t162, null br i1 %t163, label %panic4671, label %ok4672 panic4671: call void @finch_panic(ptr @.str.3000, i64 2064, ptr @.str.3001) unreachable ok4672: %t164 = getelementptr inbounds %S.gen.Gen, ptr %t162, i32 0, i32 10 %t165 = load i64, ptr %a136 %t166 = load { ptr, i64, i64 }, ptr %t164 %t167 = extractvalue { ptr, i64, i64 } %t166, 1 %t168 = icmp uge i64 %t165, %t167 br i1 %t168, label %range4673, label %inrange4674 range4673: call void @finch_panic_index(ptr @.str.3002, i64 2064, i64 %t165, i64 %t167) unreachable inrange4674: %t169 = extractvalue { ptr, i64, i64 } %t166, 0 %t170 = getelementptr inbounds %S.gen.Scope, ptr %t169, i64 %t165 %t171 = getelementptr inbounds %S.gen.Scope, ptr %t170, i32 0, i32 2 %t172 = getelementptr inbounds { ptr, i64, i64 }, ptr %t171, i32 0, i32 1 %t173 = load ptr, ptr %a1 %t174 = icmp eq ptr %t173, null br i1 %t174, label %panic4675, label %ok4676 panic4675: call void @finch_panic(ptr @.str.3003, i64 2064, ptr @.str.3004) unreachable ok4676: %t175 = getelementptr inbounds %S.gen.Gen, ptr %t173, i32 0, i32 23 %t176 = load i64, ptr %t175 %t177 = load i64, ptr %t172 %t178 = add i64 %t177, 1 call void @finch_arr_reserve(ptr %t171, i64 %t178, i64 ptrtoint (ptr getelementptr (i64, ptr null, i32 1) to i64)) %t179 = load ptr, ptr %t171 %t180 = getelementptr inbounds i64, ptr %t179, i64 %t177 store i64 %t176, ptr %t180 store i64 %t178, ptr %t172 br label %endif4657 else4656: %t181 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t181, ptr %a182 store { ptr, i64, i64 } { ptr @.str.3005, i64 5, i64 0 }, ptr %a183 %t184 = call i32 @finch_str_eq(ptr %a182, ptr %a183) %t185 = icmp ne i32 %t184, 0 br label %logic.from4677 logic.from4677: br i1 %t185, label %logic.end4679, label %logic.rhs4678 logic.rhs4678: %t186 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t186, ptr %a187 store { ptr, i64, i64 } { ptr @.str.3006, i64 8, i64 0 }, ptr %a188 %t189 = call i32 @finch_str_eq(ptr %a187, ptr %a188) %t190 = icmp ne i32 %t189, 0 br label %logic.rend4680 logic.rend4680: br label %logic.end4679 logic.end4679: %t191 = phi i1 [ true, %logic.from4677 ], [ %t190, %logic.rend4680 ] br i1 %t191, label %then4681, label %else4682 then4681: %t192 = load ptr, ptr %a1 %t193 = icmp eq ptr %t192, null br i1 %t193, label %panic4684, label %ok4685 panic4684: call void @finch_panic(ptr @.str.3007, i64 2066, ptr @.str.3008) unreachable ok4685: %t194 = getelementptr inbounds %S.gen.Gen, ptr %t192, i32 0, i32 44 %t195 = load i64, ptr %t194 %t196 = icmp sgt i64 %t195, 0 br i1 %t196, label %then4686, label %endif4688 then4686: %t197 = load ptr, ptr %a1 %t198 = load %S.ast.Node, ptr %a2 %t199 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t199, ptr %a201 store { ptr, i64, i64 } { ptr @.str.3009, i64 27, i64 0 }, ptr %a202 call void @finch_str_concat(ptr %a200, ptr %a201, ptr %a202) %t203 = load { ptr, i64, i64 }, ptr %a200 call void @finch.gen.fail(ptr %t197, %S.ast.Node %t198, { ptr, i64, i64 } %t203) br label %endif4688 endif4688: %t204 = load ptr, ptr %a1 %t205 = icmp eq ptr %t204, null br i1 %t205, label %panic4689, label %ok4690 panic4689: call void @finch_panic(ptr @.str.3010, i64 2069, ptr @.str.3011) unreachable ok4690: %t206 = getelementptr inbounds %S.gen.Gen, ptr %t204, i32 0, i32 11 %t207 = getelementptr inbounds { ptr, i64, i64 }, ptr %t206, i32 0, i32 1 %t208 = load i64, ptr %t207 %t209 = icmp eq i64 %t208, 0 br i1 %t209, label %then4691, label %endif4693 then4691: %t210 = load ptr, ptr %a1 %t211 = load %S.ast.Node, ptr %a2 %t212 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t212, ptr %a214 store { ptr, i64, i64 } { ptr @.str.3012, i64 31, i64 0 }, ptr %a215 call void @finch_str_concat(ptr %a213, ptr %a214, ptr %a215) %t216 = load { ptr, i64, i64 }, ptr %a213 call void @finch.gen.fail(ptr %t210, %S.ast.Node %t211, { ptr, i64, i64 } %t216) br label %endif4693 endif4693: %t217 = load ptr, ptr %a1 %t218 = icmp eq ptr %t217, null br i1 %t218, label %panic4694, label %ok4695 panic4694: call void @finch_panic(ptr @.str.3013, i64 2072, ptr @.str.3014) unreachable ok4695: %t219 = getelementptr inbounds %S.gen.Gen, ptr %t217, i32 0, i32 11 %t220 = load ptr, ptr %a1 %t221 = icmp eq ptr %t220, null br i1 %t221, label %panic4696, label %ok4697 panic4696: call void @finch_panic(ptr @.str.3015, i64 2072, ptr @.str.3016) unreachable ok4697: %t222 = getelementptr inbounds %S.gen.Gen, ptr %t220, i32 0, i32 11 %t223 = getelementptr inbounds { ptr, i64, i64 }, ptr %t222, i32 0, i32 1 %t224 = load i64, ptr %t223 %t225 = sub i64 %t224, 1 %t226 = load { ptr, i64, i64 }, ptr %t219 %t227 = extractvalue { ptr, i64, i64 } %t226, 1 %t228 = icmp uge i64 %t225, %t227 br i1 %t228, label %range4698, label %inrange4699 range4698: call void @finch_panic_index(ptr @.str.3017, i64 2072, i64 %t225, i64 %t227) unreachable inrange4699: %t229 = extractvalue { ptr, i64, i64 } %t226, 0 %t230 = getelementptr inbounds %S.gen.Loop, ptr %t229, i64 %t225 %t231 = load %S.gen.Loop, ptr %t230 store %S.gen.Loop %t231, ptr %a232 call void @finch.copy.S_gen_Loop(ptr %a233, ptr %a232) %t234 = load %S.gen.Loop, ptr %a233 store %S.gen.Loop %t234, ptr %a235 %t236 = load ptr, ptr %a1 %t237 = getelementptr inbounds %S.gen.Loop, ptr %a235, i32 0, i32 2 %t238 = load i64, ptr %t237 call void @finch.gen.unwind(ptr %t236, i64 %t238) %t239 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t239, ptr %a240 store { ptr, i64, i64 } { ptr @.str.3018, i64 5, i64 0 }, ptr %a241 %t242 = call i32 @finch_str_eq(ptr %a240, ptr %a241) %t243 = icmp ne i32 %t242, 0 br i1 %t243, label %then4700, label %else4701 then4700: %t244 = load ptr, ptr %a1 %t245 = getelementptr inbounds %S.gen.Loop, ptr %a235, i32 0, i32 1 %t246 = load { ptr, i64, i64 }, ptr %t245 call void @finch.gen.br(ptr %t244, { ptr, i64, i64 } %t246) br label %endif4702 else4701: %t247 = load ptr, ptr %a1 %t248 = getelementptr inbounds %S.gen.Loop, ptr %a235, i32 0, i32 0 %t249 = load { ptr, i64, i64 }, ptr %t248 call void @finch.gen.br(ptr %t247, { ptr, i64, i64 } %t249) br label %endif4702 endif4702: br label %endif4683 else4682: %t250 = load ptr, ptr %a1 %t251 = load %S.ast.Node, ptr %a2 %t252 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } { ptr @.str.3019, i64 18, i64 0 }, ptr %a254 store { ptr, i64, i64 } %t252, ptr %a255 call void @finch_str_concat(ptr %a253, ptr %a254, ptr %a255) %t256 = load { ptr, i64, i64 }, ptr %a253 call void @finch.gen.fail(ptr %t250, %S.ast.Node %t251, { ptr, i64, i64 } %t256) br label %endif4683 endif4683: br label %endif4657 endif4657: br label %endif4654 endif4654: br label %endif4651 endif4651: br label %endif4648 endif4648: br label %endif4645 endif4645: br label %endif4642 endif4642: br label %endif4639 endif4639: br label %endif4627 endif4627: br label %endif4624 endif4624: br label %endif4621 endif4621: br label %endif4618 endif4618: ret void } define internal void @finch.gen.declStmt(ptr %p0, %S.ast.Node %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a15 = alloca %S.gen.Val, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca %S.ast.Type, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca %S.gen.Val, align 16 %a137 = alloca { ptr, i64, i64 }, align 16 %a138 = alloca { ptr, i64, i64 }, align 16 %a139 = alloca { ptr, i64, i64 }, align 16 %a141 = alloca { ptr, i64, i64 }, align 16 %a142 = alloca { ptr, i64, i64 }, align 16 %a143 = alloca { ptr, i64, i64 }, align 16 %a146 = alloca %S.gen.Val, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 %t3 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 6 %t4 = load i1, ptr %t3 %t5 = xor i1 %t4, true br i1 %t5, label %then4703, label %endif4705 then4703: %t6 = load ptr, ptr %a1 %t7 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t8 = load { ptr, i64, i64 }, ptr %t7 %t9 = extractvalue { ptr, i64, i64 } %t8, 1 %t10 = icmp uge i64 0, %t9 br i1 %t10, label %range4706, label %inrange4707 range4706: call void @finch_panic_index(ptr @.str.3020, i64 2086, i64 0, i64 %t9) unreachable inrange4707: %t11 = extractvalue { ptr, i64, i64 } %t8, 0 %t12 = getelementptr inbounds %S.ast.Node, ptr %t11, i64 0 %t13 = load %S.ast.Node, ptr %t12 %t14 = call %S.gen.Val @finch.gen.expr(ptr %t6, %S.ast.Node %t13) store %S.gen.Val %t14, ptr %a15 %t16 = getelementptr inbounds %S.gen.Val, ptr %a15, i32 0, i32 1 %t17 = getelementptr inbounds %S.ast.Type, ptr %t16, i32 0, i32 0 %t18 = load { ptr, i64, i64 }, ptr %t17 store { ptr, i64, i64 } %t18, ptr %a19 store { ptr, i64, i64 } { ptr @.str.3021, i64 4, i64 0 }, ptr %a20 %t21 = call i32 @finch_str_eq(ptr %a19, ptr %a20) %t22 = icmp ne i32 %t21, 0 br i1 %t22, label %then4708, label %endif4710 then4708: %t23 = load ptr, ptr %a1 %t24 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t25 = load { ptr, i64, i64 }, ptr %t24 %t26 = extractvalue { ptr, i64, i64 } %t25, 1 %t27 = icmp uge i64 0, %t26 br i1 %t27, label %range4711, label %inrange4712 range4711: call void @finch_panic_index(ptr @.str.3022, i64 2088, i64 0, i64 %t26) unreachable inrange4712: %t28 = extractvalue { ptr, i64, i64 } %t25, 0 %t29 = getelementptr inbounds %S.ast.Node, ptr %t28, i64 0 %t30 = load %S.ast.Node, ptr %t29 call void @finch.gen.fail(ptr %t23, %S.ast.Node %t30, { ptr, i64, i64 } { ptr @.str.3023, i64 46, i64 0 }) br label %endif4710 endif4710: %t31 = getelementptr inbounds %S.gen.Val, ptr %a15, i32 0, i32 1 %t32 = getelementptr inbounds %S.ast.Type, ptr %t31, i32 0, i32 0 %t33 = load { ptr, i64, i64 }, ptr %t32 store { ptr, i64, i64 } %t33, ptr %a34 store { ptr, i64, i64 } { ptr @.str.3024, i64 4, i64 0 }, ptr %a35 %t36 = call i32 @finch_str_eq(ptr %a34, ptr %a35) %t37 = icmp ne i32 %t36, 0 br i1 %t37, label %then4713, label %endif4715 then4713: %t38 = load ptr, ptr %a1 %t39 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t40 = load { ptr, i64, i64 }, ptr %t39 %t41 = extractvalue { ptr, i64, i64 } %t40, 1 %t42 = icmp uge i64 0, %t41 br i1 %t42, label %range4716, label %inrange4717 range4716: call void @finch_panic_index(ptr @.str.3025, i64 2091, i64 0, i64 %t41) unreachable inrange4717: %t43 = extractvalue { ptr, i64, i64 } %t40, 0 %t44 = getelementptr inbounds %S.ast.Node, ptr %t43, i64 0 %t45 = load %S.ast.Node, ptr %t44 %t46 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t47 = load { ptr, i64, i64 }, ptr %t46 store { ptr, i64, i64 } { ptr @.str.3026, i64 34, i64 0 }, ptr %a49 store { ptr, i64, i64 } %t47, ptr %a50 call void @finch_str_concat(ptr %a48, ptr %a49, ptr %a50) %t51 = load { ptr, i64, i64 }, ptr %a48 store { ptr, i64, i64 } %t51, ptr %a53 store { ptr, i64, i64 } { ptr @.str.3027, i64 7, i64 0 }, ptr %a54 call void @finch_str_concat(ptr %a52, ptr %a53, ptr %a54) %t55 = load { ptr, i64, i64 }, ptr %a52 call void @finch.gen.fail(ptr %t38, %S.ast.Node %t45, { ptr, i64, i64 } %t55) br label %endif4715 endif4715: %t56 = load ptr, ptr %a1 %t57 = load %S.ast.Node, ptr %a2 %t58 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t59 = load { ptr, i64, i64 }, ptr %t58 %t60 = getelementptr inbounds %S.gen.Val, ptr %a15, i32 0, i32 1 %t61 = load %S.ast.Type, ptr %t60 %t62 = load ptr, ptr %a1 %t63 = load %S.gen.Val, ptr %a15 %t64 = call { ptr, i64, i64 } @finch.gen.own(ptr %t62, %S.gen.Val %t63) %t65 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t56, %S.ast.Node %t57, { ptr, i64, i64 } %t59, %S.ast.Type %t61, { ptr, i64, i64 } %t64, i1 false) ret void endif4705: %t66 = load ptr, ptr %a1 %t67 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 5 %t68 = load %S.ast.Type, ptr %t67 %t69 = load %S.ast.Node, ptr %a2 %t70 = call %S.ast.Type @finch.gen.resolve(ptr %t66, %S.ast.Type %t68, %S.ast.Node %t69) store %S.ast.Type %t70, ptr %a71 %t72 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t73 = getelementptr inbounds { ptr, i64, i64 }, ptr %t72, i32 0, i32 1 %t74 = load i64, ptr %t73 %t75 = icmp eq i64 %t74, 0 br i1 %t75, label %then4718, label %endif4720 then4718: %t76 = getelementptr inbounds %S.ast.Type, ptr %a71, i32 0, i32 0 %t77 = load { ptr, i64, i64 }, ptr %t76 store { ptr, i64, i64 } %t77, ptr %a78 store { ptr, i64, i64 } { ptr @.str.3028, i64 6, i64 0 }, ptr %a79 %t80 = call i32 @finch_str_eq(ptr %a78, ptr %a79) %t81 = icmp ne i32 %t80, 0 br label %logic.from4721 logic.from4721: br i1 %t81, label %logic.rhs4722, label %logic.end4723 logic.rhs4722: %t82 = load ptr, ptr %a1 %t83 = load %S.ast.Type, ptr %a71 %t84 = call i1 @finch.gen.hasDefaults(ptr %t82, %S.ast.Type %t83) br label %logic.rend4724 logic.rend4724: br label %logic.end4723 logic.end4723: %t85 = phi i1 [ false, %logic.from4721 ], [ %t84, %logic.rend4724 ] br i1 %t85, label %then4725, label %endif4727 then4725: store { ptr, i64, i64 } zeroinitializer, ptr %a86 store { ptr, i64, i64 } zeroinitializer, ptr %a87 %t88 = load ptr, ptr %a1 %t89 = load ptr, ptr %a1 %t90 = getelementptr inbounds %S.ast.Type, ptr %a71, i32 0, i32 3 %t91 = load { ptr, i64, i64 }, ptr %t90 %t92 = getelementptr inbounds %S.ast.Type, ptr %a71, i32 0, i32 2 %t93 = load { ptr, i64, i64 }, ptr %t92 %t94 = call i64 @finch.gen.findStruct(ptr %t89, { ptr, i64, i64 } %t91, { ptr, i64, i64 } %t93) %t95 = load { ptr, i64, i64 }, ptr %a86 %t96 = load { ptr, i64, i64 }, ptr %a87 %t97 = load %S.ast.Node, ptr %a2 %t98 = call %S.gen.Val @finch.gen.construct(ptr %t88, i64 %t94, { ptr, i64, i64 } %t95, { ptr, i64, i64 } %t96, %S.ast.Node %t97) store %S.gen.Val %t98, ptr %a99 %t100 = load ptr, ptr %a1 %t101 = load %S.ast.Node, ptr %a2 %t102 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t103 = load { ptr, i64, i64 }, ptr %t102 %t104 = load %S.ast.Type, ptr %a71 %t105 = getelementptr inbounds %S.gen.Val, ptr %a99, i32 0, i32 0 %t106 = load { ptr, i64, i64 }, ptr %t105 %t107 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t100, %S.ast.Node %t101, { ptr, i64, i64 } %t103, %S.ast.Type %t104, { ptr, i64, i64 } %t106, i1 false) ret void endif4727: %t108 = load ptr, ptr %a1 %t109 = load %S.ast.Node, ptr %a2 %t110 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t111 = load { ptr, i64, i64 }, ptr %t110 %t112 = load %S.ast.Type, ptr %a71 %t113 = load %S.ast.Type, ptr %a71 %t114 = call { ptr, i64, i64 } @finch.gen.zeroOf(%S.ast.Type %t113) %t115 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t108, %S.ast.Node %t109, { ptr, i64, i64 } %t111, %S.ast.Type %t112, { ptr, i64, i64 } %t114, i1 false) ret void endif4720: %t116 = load ptr, ptr %a1 %t117 = load ptr, ptr %a1 %t118 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t119 = load { ptr, i64, i64 }, ptr %t118 %t120 = extractvalue { ptr, i64, i64 } %t119, 1 %t121 = icmp uge i64 0, %t120 br i1 %t121, label %range4728, label %inrange4729 range4728: call void @finch_panic_index(ptr @.str.3029, i64 2108, i64 0, i64 %t120) unreachable inrange4729: %t122 = extractvalue { ptr, i64, i64 } %t119, 0 %t123 = getelementptr inbounds %S.ast.Node, ptr %t122, i64 0 %t124 = load %S.ast.Node, ptr %t123 %t125 = load %S.ast.Type, ptr %a71 %t126 = call %S.gen.Val @finch.gen.exprWant(ptr %t117, %S.ast.Node %t124, %S.ast.Type %t125) %t127 = load %S.ast.Type, ptr %a71 %t128 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t129 = load { ptr, i64, i64 }, ptr %t128 %t130 = extractvalue { ptr, i64, i64 } %t129, 1 %t131 = icmp uge i64 0, %t130 br i1 %t131, label %range4730, label %inrange4731 range4730: call void @finch_panic_index(ptr @.str.3030, i64 2108, i64 0, i64 %t130) unreachable inrange4731: %t132 = extractvalue { ptr, i64, i64 } %t129, 0 %t133 = getelementptr inbounds %S.ast.Node, ptr %t132, i64 0 %t134 = load %S.ast.Node, ptr %t133 %t135 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t136 = load { ptr, i64, i64 }, ptr %t135 store { ptr, i64, i64 } { ptr @.str.3031, i64 1, i64 0 }, ptr %a138 store { ptr, i64, i64 } %t136, ptr %a139 call void @finch_str_concat(ptr %a137, ptr %a138, ptr %a139) %t140 = load { ptr, i64, i64 }, ptr %a137 store { ptr, i64, i64 } %t140, ptr %a142 store { ptr, i64, i64 } { ptr @.str.3032, i64 1, i64 0 }, ptr %a143 call void @finch_str_concat(ptr %a141, ptr %a142, ptr %a143) %t144 = load { ptr, i64, i64 }, ptr %a141 %t145 = call %S.gen.Val @finch.gen.coerce(ptr %t116, %S.gen.Val %t126, %S.ast.Type %t127, %S.ast.Node %t134, { ptr, i64, i64 } %t144) store %S.gen.Val %t145, ptr %a146 %t147 = load ptr, ptr %a1 %t148 = load %S.ast.Node, ptr %a2 %t149 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t150 = load { ptr, i64, i64 }, ptr %t149 %t151 = load %S.ast.Type, ptr %a71 %t152 = load ptr, ptr %a1 %t153 = load %S.gen.Val, ptr %a146 %t154 = call { ptr, i64, i64 } @finch.gen.own(ptr %t152, %S.gen.Val %t153) %t155 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t147, %S.ast.Node %t148, { ptr, i64, i64 } %t150, %S.ast.Type %t151, { ptr, i64, i64 } %t154, i1 false) ret void } define internal i1 @finch.gen.hasDefaults(ptr %p0, %S.ast.Type %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Type, align 16 %a18 = alloca %S.gen.StructDef, align 16 %a19 = alloca %S.gen.StructDef, align 16 %a21 = alloca %S.gen.StructDef, align 16 %a43 = alloca i64, align 16 %a51 = alloca %S.ast.Node, align 16 store ptr %p0, ptr %a1 store %S.ast.Type %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null br i1 %t4, label %panic4732, label %ok4733 panic4732: call void @finch_panic(ptr @.str.3033, i64 2113, ptr @.str.3034) unreachable ok4733: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 15 %t6 = load ptr, ptr %a1 %t7 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t8 = load { ptr, i64, i64 }, ptr %t7 %t9 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t10 = load { ptr, i64, i64 }, ptr %t9 %t11 = call i64 @finch.gen.findStruct(ptr %t6, { ptr, i64, i64 } %t8, { ptr, i64, i64 } %t10) %t12 = load { ptr, i64, i64 }, ptr %t5 %t13 = extractvalue { ptr, i64, i64 } %t12, 1 %t14 = icmp uge i64 %t11, %t13 br i1 %t14, label %range4734, label %inrange4735 range4734: call void @finch_panic_index(ptr @.str.3035, i64 2113, i64 %t11, i64 %t13) unreachable inrange4735: %t15 = extractvalue { ptr, i64, i64 } %t12, 0 %t16 = getelementptr inbounds %S.gen.StructDef, ptr %t15, i64 %t11 %t17 = load %S.gen.StructDef, ptr %t16 store %S.gen.StructDef %t17, ptr %a18 call void @finch.copy.S_gen_StructDef(ptr %a19, ptr %a18) %t20 = load %S.gen.StructDef, ptr %a19 store %S.gen.StructDef %t20, ptr %a21 %t22 = getelementptr inbounds %S.gen.StructDef, ptr %a21, i32 0, i32 2 %t23 = load i1, ptr %t22 br i1 %t23, label %then4736, label %endif4738 then4736: ret i1 false endif4738: %t24 = load ptr, ptr %a1 %t25 = icmp eq ptr %t24, null br i1 %t25, label %panic4739, label %ok4740 panic4739: call void @finch_panic(ptr @.str.3036, i64 2117, ptr @.str.3037) unreachable ok4740: %t26 = getelementptr inbounds %S.gen.Gen, ptr %t24, i32 0, i32 0 %t27 = getelementptr inbounds %S.gen.StructDef, ptr %a21, i32 0, i32 13 %t28 = load i64, ptr %t27 %t29 = load { ptr, i64, i64 }, ptr %t26 %t30 = extractvalue { ptr, i64, i64 } %t29, 1 %t31 = icmp uge i64 %t28, %t30 br i1 %t31, label %range4741, label %inrange4742 range4741: call void @finch_panic_index(ptr @.str.3038, i64 2117, i64 %t28, i64 %t30) unreachable inrange4742: %t32 = extractvalue { ptr, i64, i64 } %t29, 0 %t33 = getelementptr inbounds %S.ast.Program, ptr %t32, i64 %t28 %t34 = getelementptr inbounds %S.ast.Program, ptr %t33, i32 0, i32 6 %t35 = getelementptr inbounds %S.gen.StructDef, ptr %a21, i32 0, i32 14 %t36 = load i64, ptr %t35 %t37 = load { ptr, i64, i64 }, ptr %t34 %t38 = extractvalue { ptr, i64, i64 } %t37, 1 %t39 = icmp uge i64 %t36, %t38 br i1 %t39, label %range4743, label %inrange4744 range4743: call void @finch_panic_index(ptr @.str.3039, i64 2117, i64 %t36, i64 %t38) unreachable inrange4744: %t40 = extractvalue { ptr, i64, i64 } %t37, 0 %t41 = getelementptr inbounds %S.ast.Node, ptr %t40, i64 %t36 %t42 = getelementptr inbounds %S.ast.Node, ptr %t41, i32 0, i32 9 store i64 0, ptr %a43 br label %each.cond4745 each.cond4745: %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t42, i32 0, i32 1 %t45 = load i64, ptr %t44 %t46 = load i64, ptr %a43 %t47 = icmp slt i64 %t46, %t45 br i1 %t47, label %each.body4746, label %each.end4748 each.body4746: %t48 = load ptr, ptr %t42 %t49 = getelementptr inbounds %S.ast.Node, ptr %t48, i64 %t46 %t50 = load %S.ast.Node, ptr %t49 store %S.ast.Node %t50, ptr %a51 %t52 = getelementptr inbounds %S.ast.Node, ptr %a51, i32 0, i32 9 %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %t52, i32 0, i32 1 %t54 = load i64, ptr %t53 %t55 = icmp sgt i64 %t54, 0 br i1 %t55, label %then4749, label %endif4751 then4749: ret i1 true endif4751: br label %each.step4747 each.step4747: %t56 = load i64, ptr %a43 %t57 = add i64 %t56, 1 store i64 %t57, ptr %a43 br label %each.cond4745 each.end4748: ret i1 false } define internal void @finch.gen.assignStmt(ptr %p0, %S.ast.Node %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a10 = alloca %S.ast.Node, align 16 %a11 = alloca %S.ast.Node, align 16 %a13 = alloca %S.ast.Node, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca i64, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a85 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca %S.gen.Val, align 16 %a106 = alloca %S.gen.Place, align 16 %a139 = alloca %S.gen.Val, align 16 %a143 = alloca %S.gen.Place, align 16 %a155 = alloca %S.ast.Type, align 16 %a156 = alloca %S.ast.Type, align 16 %a159 = alloca %S.gen.Val, align 16 %a162 = alloca { ptr, i64, i64 }, align 16 %a163 = alloca { ptr, i64, i64 }, align 16 %a165 = alloca { ptr, i64, i64 }, align 16 %a178 = alloca %S.gen.Val, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 %t3 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t4 = load { ptr, i64, i64 }, ptr %t3 %t5 = extractvalue { ptr, i64, i64 } %t4, 1 %t6 = icmp uge i64 0, %t5 br i1 %t6, label %range4752, label %inrange4753 range4752: call void @finch_panic_index(ptr @.str.3040, i64 2126, i64 0, i64 %t5) unreachable inrange4753: %t7 = extractvalue { ptr, i64, i64 } %t4, 0 %t8 = getelementptr inbounds %S.ast.Node, ptr %t7, i64 0 %t9 = load %S.ast.Node, ptr %t8 store %S.ast.Node %t9, ptr %a10 call void @finch.copy.S_ast_Node(ptr %a11, ptr %a10) %t12 = load %S.ast.Node, ptr %a11 store %S.ast.Node %t12, ptr %a13 %t14 = load %S.ast.Node, ptr %a13 %t15 = call { ptr, i64, i64 } @finch.gen.rootVar(%S.ast.Node %t14) store { ptr, i64, i64 } %t15, ptr %a16 %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %a16, i32 0, i32 1 %t18 = load i64, ptr %t17 %t19 = icmp sgt i64 %t18, 0 br i1 %t19, label %then4754, label %endif4756 then4754: %t20 = load ptr, ptr %a1 %t21 = load { ptr, i64, i64 }, ptr %a16 %t22 = call i64 @finch.gen.lookup(ptr %t20, { ptr, i64, i64 } %t21) store i64 %t22, ptr %a23 %t24 = load i64, ptr %a23 %t25 = icmp slt i64 %t24, 0 br label %logic.from4757 logic.from4757: br i1 %t25, label %logic.rhs4758, label %logic.end4759 logic.rhs4758: %t26 = getelementptr inbounds %S.ast.Node, ptr %a13, i32 0, i32 0 %t27 = load { ptr, i64, i64 }, ptr %t26 store { ptr, i64, i64 } %t27, ptr %a28 store { ptr, i64, i64 } { ptr @.str.3041, i64 3, i64 0 }, ptr %a29 %t30 = call i32 @finch_str_eq(ptr %a28, ptr %a29) %t31 = icmp ne i32 %t30, 0 br label %logic.rend4760 logic.rend4760: br label %logic.end4759 logic.end4759: %t32 = phi i1 [ false, %logic.from4757 ], [ %t31, %logic.rend4760 ] br i1 %t32, label %then4761, label %endif4763 then4761: %t33 = load ptr, ptr %a1 %t34 = load %S.ast.Node, ptr %a2 %t35 = load { ptr, i64, i64 }, ptr %a16 store { ptr, i64, i64 } { ptr @.str.3042, i64 28, i64 0 }, ptr %a37 store { ptr, i64, i64 } %t35, ptr %a38 call void @finch_str_concat(ptr %a36, ptr %a37, ptr %a38) %t39 = load { ptr, i64, i64 }, ptr %a36 store { ptr, i64, i64 } %t39, ptr %a41 store { ptr, i64, i64 } { ptr @.str.3043, i64 18, i64 0 }, ptr %a42 call void @finch_str_concat(ptr %a40, ptr %a41, ptr %a42) %t43 = load { ptr, i64, i64 }, ptr %a40 %t44 = load { ptr, i64, i64 }, ptr %a16 store { ptr, i64, i64 } %t43, ptr %a46 store { ptr, i64, i64 } %t44, ptr %a47 call void @finch_str_concat(ptr %a45, ptr %a46, ptr %a47) %t48 = load { ptr, i64, i64 }, ptr %a45 store { ptr, i64, i64 } %t48, ptr %a50 store { ptr, i64, i64 } { ptr @.str.3044, i64 8, i64 0 }, ptr %a51 call void @finch_str_concat(ptr %a49, ptr %a50, ptr %a51) %t52 = load { ptr, i64, i64 }, ptr %a49 call void @finch.gen.fail(ptr %t33, %S.ast.Node %t34, { ptr, i64, i64 } %t52) br label %endif4763 endif4763: %t53 = load i64, ptr %a23 %t54 = icmp sge i64 %t53, 0 br label %logic.from4764 logic.from4764: br i1 %t54, label %logic.rhs4765, label %logic.end4766 logic.rhs4765: %t55 = load ptr, ptr %a1 %t56 = load i64, ptr %a23 %t57 = call %S.gen.Var @finch.gen.varAt(ptr %t55, i64 %t56) %t58 = extractvalue %S.gen.Var %t57, 3 br label %logic.rend4767 logic.rend4767: br label %logic.end4766 logic.end4766: %t59 = phi i1 [ false, %logic.from4764 ], [ %t58, %logic.rend4767 ] br i1 %t59, label %then4768, label %endif4770 then4768: %t60 = load ptr, ptr %a1 %t61 = load %S.ast.Node, ptr %a2 %t62 = load { ptr, i64, i64 }, ptr %a16 store { ptr, i64, i64 } { ptr @.str.3045, i64 19, i64 0 }, ptr %a64 store { ptr, i64, i64 } %t62, ptr %a65 call void @finch_str_concat(ptr %a63, ptr %a64, ptr %a65) %t66 = load { ptr, i64, i64 }, ptr %a63 store { ptr, i64, i64 } %t66, ptr %a68 store { ptr, i64, i64 } { ptr @.str.3046, i64 18, i64 0 }, ptr %a69 call void @finch_str_concat(ptr %a67, ptr %a68, ptr %a69) %t70 = load { ptr, i64, i64 }, ptr %a67 call void @finch.gen.fail(ptr %t60, %S.ast.Node %t61, { ptr, i64, i64 } %t70) br label %endif4770 endif4770: br label %endif4756 endif4756: store { ptr, i64, i64 } { ptr @.str.3047, i64 9, i64 0 }, ptr %a71 %t72 = getelementptr inbounds %S.ast.Node, ptr %a13, i32 0, i32 0 %t73 = load { ptr, i64, i64 }, ptr %t72 store { ptr, i64, i64 } %t73, ptr %a74 store { ptr, i64, i64 } { ptr @.str.3048, i64 3, i64 0 }, ptr %a75 %t76 = call i32 @finch_str_eq(ptr %a74, ptr %a75) %t77 = icmp ne i32 %t76, 0 br i1 %t77, label %then4771, label %endif4773 then4771: %t78 = load { ptr, i64, i64 }, ptr %a16 store { ptr, i64, i64 } { ptr @.str.3049, i64 1, i64 0 }, ptr %a80 store { ptr, i64, i64 } %t78, ptr %a81 call void @finch_str_concat(ptr %a79, ptr %a80, ptr %a81) %t82 = load { ptr, i64, i64 }, ptr %a79 store { ptr, i64, i64 } %t82, ptr %a84 store { ptr, i64, i64 } { ptr @.str.3050, i64 1, i64 0 }, ptr %a85 call void @finch_str_concat(ptr %a83, ptr %a84, ptr %a85) %t86 = load { ptr, i64, i64 }, ptr %a83 store { ptr, i64, i64 } %t86, ptr %a71 br label %endif4773 endif4773: %t87 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t88 = load { ptr, i64, i64 }, ptr %t87 store { ptr, i64, i64 } %t88, ptr %a89 store { ptr, i64, i64 } { ptr @.str.3051, i64 1, i64 0 }, ptr %a90 %t91 = call i32 @finch_str_eq(ptr %a89, ptr %a90) %t92 = icmp ne i32 %t91, 0 br i1 %t92, label %then4774, label %endif4776 then4774: %t93 = load ptr, ptr %a1 %t94 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t95 = load { ptr, i64, i64 }, ptr %t94 %t96 = extractvalue { ptr, i64, i64 } %t95, 1 %t97 = icmp uge i64 1, %t96 br i1 %t97, label %range4777, label %inrange4778 range4777: call void @finch_panic_index(ptr @.str.3052, i64 2142, i64 1, i64 %t96) unreachable inrange4778: %t98 = extractvalue { ptr, i64, i64 } %t95, 0 %t99 = getelementptr inbounds %S.ast.Node, ptr %t98, i64 1 %t100 = load %S.ast.Node, ptr %t99 %t101 = call %S.gen.Val @finch.gen.expr(ptr %t93, %S.ast.Node %t100) store %S.gen.Val %t101, ptr %a102 %t103 = load ptr, ptr %a1 %t104 = load %S.ast.Node, ptr %a13 %t105 = call %S.gen.Place @finch.gen.place(ptr %t103, %S.ast.Node %t104, i1 true) store %S.gen.Place %t105, ptr %a106 %t107 = load ptr, ptr %a1 %t108 = load %S.gen.Val, ptr %a102 %t109 = getelementptr inbounds %S.gen.Place, ptr %a106, i32 0, i32 1 %t110 = load %S.ast.Type, ptr %t109 %t111 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t112 = load { ptr, i64, i64 }, ptr %t111 %t113 = extractvalue { ptr, i64, i64 } %t112, 1 %t114 = icmp uge i64 1, %t113 br i1 %t114, label %range4779, label %inrange4780 range4779: call void @finch_panic_index(ptr @.str.3053, i64 2144, i64 1, i64 %t113) unreachable inrange4780: %t115 = extractvalue { ptr, i64, i64 } %t112, 0 %t116 = getelementptr inbounds %S.ast.Node, ptr %t115, i64 1 %t117 = load %S.ast.Node, ptr %t116 %t118 = load { ptr, i64, i64 }, ptr %a71 %t119 = call %S.gen.Val @finch.gen.coerce(ptr %t107, %S.gen.Val %t108, %S.ast.Type %t110, %S.ast.Node %t117, { ptr, i64, i64 } %t118) store %S.gen.Val %t119, ptr %a102 %t120 = load ptr, ptr %a1 %t121 = load ptr, ptr %a1 %t122 = getelementptr inbounds %S.gen.Place, ptr %a106, i32 0, i32 1 %t123 = load %S.ast.Type, ptr %t122 %t124 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t121, %S.ast.Type %t123) %t125 = load ptr, ptr %a1 %t126 = load %S.gen.Val, ptr %a102 %t127 = call { ptr, i64, i64 } @finch.gen.own(ptr %t125, %S.gen.Val %t126) %t128 = getelementptr inbounds %S.gen.Place, ptr %a106, i32 0, i32 0 %t129 = load { ptr, i64, i64 }, ptr %t128 call void @finch.gen.store(ptr %t120, { ptr, i64, i64 } %t124, { ptr, i64, i64 } %t127, { ptr, i64, i64 } %t129) ret void endif4776: %t130 = load ptr, ptr %a1 %t131 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t132 = load { ptr, i64, i64 }, ptr %t131 %t133 = extractvalue { ptr, i64, i64 } %t132, 1 %t134 = icmp uge i64 1, %t133 br i1 %t134, label %range4781, label %inrange4782 range4781: call void @finch_panic_index(ptr @.str.3054, i64 2148, i64 1, i64 %t133) unreachable inrange4782: %t135 = extractvalue { ptr, i64, i64 } %t132, 0 %t136 = getelementptr inbounds %S.ast.Node, ptr %t135, i64 1 %t137 = load %S.ast.Node, ptr %t136 %t138 = call %S.gen.Val @finch.gen.expr(ptr %t130, %S.ast.Node %t137) store %S.gen.Val %t138, ptr %a139 %t140 = load ptr, ptr %a1 %t141 = load %S.ast.Node, ptr %a13 %t142 = call %S.gen.Place @finch.gen.place(ptr %t140, %S.ast.Node %t141, i1 true) store %S.gen.Place %t142, ptr %a143 %t144 = load ptr, ptr %a1 %t145 = load ptr, ptr %a1 %t146 = getelementptr inbounds %S.gen.Place, ptr %a143, i32 0, i32 1 %t147 = load %S.ast.Type, ptr %t146 %t148 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t145, %S.ast.Type %t147) %t149 = getelementptr inbounds %S.gen.Place, ptr %a143, i32 0, i32 0 %t150 = load { ptr, i64, i64 }, ptr %t149 %t151 = call { ptr, i64, i64 } @finch.gen.load(ptr %t144, { ptr, i64, i64 } %t148, { ptr, i64, i64 } %t150) %t152 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t151, 0 %t153 = getelementptr inbounds %S.gen.Place, ptr %a143, i32 0, i32 1 %t154 = load %S.ast.Type, ptr %t153 store %S.ast.Type %t154, ptr %a155 call void @finch.copy.S_ast_Type(ptr %a156, ptr %a155) %t157 = load %S.ast.Type, ptr %a156 %t158 = insertvalue %S.gen.Val %t152, %S.ast.Type %t157, 1 store %S.gen.Val %t158, ptr %a159 %t160 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t161 = load { ptr, i64, i64 }, ptr %t160 store { ptr, i64, i64 } %t161, ptr %a162 call void @finch_str_sub(ptr %a163, ptr %a162, i64 0, i64 1, ptr @.str.3055, i64 2151) %t164 = load { ptr, i64, i64 }, ptr %a163 store { ptr, i64, i64 } %t164, ptr %a165 %t166 = load ptr, ptr %a1 %t167 = load ptr, ptr %a1 %t168 = load { ptr, i64, i64 }, ptr %a165 %t169 = load %S.gen.Val, ptr %a159 %t170 = load %S.gen.Val, ptr %a139 %t171 = load %S.ast.Node, ptr %a2 %t172 = call %S.gen.Val @finch.gen.arith(ptr %t167, { ptr, i64, i64 } %t168, %S.gen.Val %t169, %S.gen.Val %t170, %S.ast.Node %t171) %t173 = getelementptr inbounds %S.gen.Place, ptr %a143, i32 0, i32 1 %t174 = load %S.ast.Type, ptr %t173 %t175 = load %S.ast.Node, ptr %a2 %t176 = load { ptr, i64, i64 }, ptr %a71 %t177 = call %S.gen.Val @finch.gen.coerce(ptr %t166, %S.gen.Val %t172, %S.ast.Type %t174, %S.ast.Node %t175, { ptr, i64, i64 } %t176) store %S.gen.Val %t177, ptr %a178 %t179 = load ptr, ptr %a1 %t180 = load ptr, ptr %a1 %t181 = getelementptr inbounds %S.gen.Place, ptr %a143, i32 0, i32 1 %t182 = load %S.ast.Type, ptr %t181 %t183 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t180, %S.ast.Type %t182) %t184 = load ptr, ptr %a1 %t185 = load %S.gen.Val, ptr %a178 %t186 = call { ptr, i64, i64 } @finch.gen.own(ptr %t184, %S.gen.Val %t185) %t187 = getelementptr inbounds %S.gen.Place, ptr %a143, i32 0, i32 0 %t188 = load { ptr, i64, i64 }, ptr %t187 call void @finch.gen.store(ptr %t179, { ptr, i64, i64 } %t183, { ptr, i64, i64 } %t186, { ptr, i64, i64 } %t188) ret void } define internal { ptr, i64, i64 } @finch.gen.condition(ptr %p0, %S.ast.Node %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = load ptr, ptr %a1 %t5 = load %S.ast.Node, ptr %a2 %t6 = call %S.gen.Val @finch.gen.expr(ptr %t4, %S.ast.Node %t5) %t7 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3056, i64 4, i64 0 }) %t8 = load %S.ast.Node, ptr %a2 %t9 = call %S.gen.Val @finch.gen.coerce(ptr %t3, %S.gen.Val %t6, %S.ast.Type %t7, %S.ast.Node %t8, { ptr, i64, i64 } { ptr @.str.3057, i64 11, i64 0 }) %t10 = extractvalue %S.gen.Val %t9, 0 store { ptr, i64, i64 } %t10, ptr %a11 call void @finch_str_copy(ptr %a12, ptr %a11) %t13 = load { ptr, i64, i64 }, ptr %a12 ret { ptr, i64, i64 } %t13 } define internal void @finch.gen.ifStmt(ptr %p0, %S.ast.Node %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca i1, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t5 = load { ptr, i64, i64 }, ptr %t4 %t6 = extractvalue { ptr, i64, i64 } %t5, 1 %t7 = icmp uge i64 0, %t6 br i1 %t7, label %range4783, label %inrange4784 range4783: call void @finch_panic_index(ptr @.str.3058, i64 2161, i64 0, i64 %t6) unreachable inrange4784: %t8 = extractvalue { ptr, i64, i64 } %t5, 0 %t9 = getelementptr inbounds %S.ast.Node, ptr %t8, i64 0 %t10 = load %S.ast.Node, ptr %t9 %t11 = call { ptr, i64, i64 } @finch.gen.condition(ptr %t3, %S.ast.Node %t10) store { ptr, i64, i64 } %t11, ptr %a12 %t13 = load ptr, ptr %a1 %t14 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t13, { ptr, i64, i64 } { ptr @.str.3059, i64 4, i64 0 }) store { ptr, i64, i64 } %t14, ptr %a15 %t16 = load ptr, ptr %a1 %t17 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t16, { ptr, i64, i64 } { ptr @.str.3060, i64 4, i64 0 }) store { ptr, i64, i64 } %t17, ptr %a18 %t19 = load ptr, ptr %a1 %t20 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t19, { ptr, i64, i64 } { ptr @.str.3061, i64 5, i64 0 }) store { ptr, i64, i64 } %t20, ptr %a21 %t22 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t22, i32 0, i32 1 %t24 = load i64, ptr %t23 %t25 = icmp sgt i64 %t24, 2 br i1 %t25, label %then4785, label %else4786 then4785: %t26 = load ptr, ptr %a1 %t27 = load { ptr, i64, i64 }, ptr %a12 %t28 = load { ptr, i64, i64 }, ptr %a15 %t29 = load { ptr, i64, i64 }, ptr %a18 call void @finch.gen.condBr(ptr %t26, { ptr, i64, i64 } %t27, { ptr, i64, i64 } %t28, { ptr, i64, i64 } %t29) br label %endif4787 else4786: %t30 = load ptr, ptr %a1 %t31 = load { ptr, i64, i64 }, ptr %a12 %t32 = load { ptr, i64, i64 }, ptr %a15 %t33 = load { ptr, i64, i64 }, ptr %a21 call void @finch.gen.condBr(ptr %t30, { ptr, i64, i64 } %t31, { ptr, i64, i64 } %t32, { ptr, i64, i64 } %t33) br label %endif4787 endif4787: %t34 = load ptr, ptr %a1 %t35 = load { ptr, i64, i64 }, ptr %a15 call void @finch.gen.label(ptr %t34, { ptr, i64, i64 } %t35) %t36 = load ptr, ptr %a1 %t37 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t38 = load { ptr, i64, i64 }, ptr %t37 %t39 = extractvalue { ptr, i64, i64 } %t38, 1 %t40 = icmp uge i64 1, %t39 br i1 %t40, label %range4788, label %inrange4789 range4788: call void @finch_panic_index(ptr @.str.3062, i64 2171, i64 1, i64 %t39) unreachable inrange4789: %t41 = extractvalue { ptr, i64, i64 } %t38, 0 %t42 = getelementptr inbounds %S.ast.Node, ptr %t41, i64 1 %t43 = load %S.ast.Node, ptr %t42 call void @finch.gen.block(ptr %t36, %S.ast.Node %t43, i1 true) %t44 = load ptr, ptr %a1 %t45 = icmp eq ptr %t44, null br i1 %t45, label %panic4790, label %ok4791 panic4790: call void @finch_panic(ptr @.str.3063, i64 2172, ptr @.str.3064) unreachable ok4791: %t46 = getelementptr inbounds %S.gen.Gen, ptr %t44, i32 0, i32 9 %t47 = load i1, ptr %t46 %t48 = xor i1 %t47, true store i1 %t48, ptr %a49 %t50 = load ptr, ptr %a1 %t51 = load { ptr, i64, i64 }, ptr %a21 call void @finch.gen.br(ptr %t50, { ptr, i64, i64 } %t51) %t52 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %t52, i32 0, i32 1 %t54 = load i64, ptr %t53 %t55 = icmp sgt i64 %t54, 2 br i1 %t55, label %then4792, label %else4793 then4792: %t56 = load ptr, ptr %a1 %t57 = load { ptr, i64, i64 }, ptr %a18 call void @finch.gen.label(ptr %t56, { ptr, i64, i64 } %t57) %t58 = load ptr, ptr %a1 %t59 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t60 = load { ptr, i64, i64 }, ptr %t59 %t61 = extractvalue { ptr, i64, i64 } %t60, 1 %t62 = icmp uge i64 2, %t61 br i1 %t62, label %range4795, label %inrange4796 range4795: call void @finch_panic_index(ptr @.str.3065, i64 2176, i64 2, i64 %t61) unreachable inrange4796: %t63 = extractvalue { ptr, i64, i64 } %t60, 0 %t64 = getelementptr inbounds %S.ast.Node, ptr %t63, i64 2 %t65 = load %S.ast.Node, ptr %t64 call void @finch.gen.stmt(ptr %t58, %S.ast.Node %t65) %t66 = load i1, ptr %a49 br label %logic.from4797 logic.from4797: br i1 %t66, label %logic.end4799, label %logic.rhs4798 logic.rhs4798: %t67 = load ptr, ptr %a1 %t68 = icmp eq ptr %t67, null br i1 %t68, label %panic4800, label %ok4801 panic4800: call void @finch_panic(ptr @.str.3066, i64 2177, ptr @.str.3067) unreachable ok4801: %t69 = getelementptr inbounds %S.gen.Gen, ptr %t67, i32 0, i32 9 %t70 = load i1, ptr %t69 %t71 = xor i1 %t70, true br label %logic.rend4802 logic.rend4802: br label %logic.end4799 logic.end4799: %t72 = phi i1 [ true, %logic.from4797 ], [ %t71, %logic.rend4802 ] store i1 %t72, ptr %a49 %t73 = load ptr, ptr %a1 %t74 = load { ptr, i64, i64 }, ptr %a21 call void @finch.gen.br(ptr %t73, { ptr, i64, i64 } %t74) br label %endif4794 else4793: store i1 true, ptr %a49 br label %endif4794 endif4794: %t75 = load i1, ptr %a49 br i1 %t75, label %then4803, label %endif4805 then4803: %t76 = load ptr, ptr %a1 %t77 = load { ptr, i64, i64 }, ptr %a21 call void @finch.gen.label(ptr %t76, { ptr, i64, i64 } %t77) br label %endif4805 endif4805: ret void } define internal void @finch.gen.whileStmt(ptr %p0, %S.ast.Node %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca i1, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca i1, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t3, { ptr, i64, i64 } { ptr @.str.3068, i64 10, i64 0 }) store { ptr, i64, i64 } %t4, ptr %a5 %t6 = load ptr, ptr %a1 %t7 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t6, { ptr, i64, i64 } { ptr @.str.3069, i64 10, i64 0 }) store { ptr, i64, i64 } %t7, ptr %a8 %t9 = load ptr, ptr %a1 %t10 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t9, { ptr, i64, i64 } { ptr @.str.3070, i64 9, i64 0 }) store { ptr, i64, i64 } %t10, ptr %a11 %t12 = load ptr, ptr %a1 %t13 = load { ptr, i64, i64 }, ptr %a5 call void @finch.gen.br(ptr %t12, { ptr, i64, i64 } %t13) %t14 = load ptr, ptr %a1 %t15 = load { ptr, i64, i64 }, ptr %a5 call void @finch.gen.label(ptr %t14, { ptr, i64, i64 } %t15) %t16 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t17 = load { ptr, i64, i64 }, ptr %t16 %t18 = extractvalue { ptr, i64, i64 } %t17, 1 %t19 = icmp uge i64 0, %t18 br i1 %t19, label %range4806, label %inrange4807 range4806: call void @finch_panic_index(ptr @.str.3071, i64 2193, i64 0, i64 %t18) unreachable inrange4807: %t20 = extractvalue { ptr, i64, i64 } %t17, 0 %t21 = getelementptr inbounds %S.ast.Node, ptr %t20, i64 0 %t22 = getelementptr inbounds %S.ast.Node, ptr %t21, i32 0, i32 0 %t23 = load { ptr, i64, i64 }, ptr %t22 store { ptr, i64, i64 } %t23, ptr %a24 store { ptr, i64, i64 } { ptr @.str.3072, i64 4, i64 0 }, ptr %a25 %t26 = call i32 @finch_str_eq(ptr %a24, ptr %a25) %t27 = icmp ne i32 %t26, 0 br label %logic.from4808 logic.from4808: br i1 %t27, label %logic.rhs4809, label %logic.end4810 logic.rhs4809: %t28 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t29 = load { ptr, i64, i64 }, ptr %t28 %t30 = extractvalue { ptr, i64, i64 } %t29, 1 %t31 = icmp uge i64 0, %t30 br i1 %t31, label %range4811, label %inrange4812 range4811: call void @finch_panic_index(ptr @.str.3073, i64 2193, i64 0, i64 %t30) unreachable inrange4812: %t32 = extractvalue { ptr, i64, i64 } %t29, 0 %t33 = getelementptr inbounds %S.ast.Node, ptr %t32, i64 0 %t34 = getelementptr inbounds %S.ast.Node, ptr %t33, i32 0, i32 4 %t35 = load { ptr, i64, i64 }, ptr %t34 store { ptr, i64, i64 } %t35, ptr %a36 store { ptr, i64, i64 } { ptr @.str.3074, i64 4, i64 0 }, ptr %a37 %t38 = call i32 @finch_str_eq(ptr %a36, ptr %a37) %t39 = icmp ne i32 %t38, 0 br label %logic.rend4813 logic.rend4813: br label %logic.end4810 logic.end4810: %t40 = phi i1 [ false, %logic.from4808 ], [ %t39, %logic.rend4813 ] store i1 %t40, ptr %a41 %t42 = load ptr, ptr %a1 %t43 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t44 = load { ptr, i64, i64 }, ptr %t43 %t45 = extractvalue { ptr, i64, i64 } %t44, 1 %t46 = icmp uge i64 0, %t45 br i1 %t46, label %range4814, label %inrange4815 range4814: call void @finch_panic_index(ptr @.str.3075, i64 2194, i64 0, i64 %t45) unreachable inrange4815: %t47 = extractvalue { ptr, i64, i64 } %t44, 0 %t48 = getelementptr inbounds %S.ast.Node, ptr %t47, i64 0 %t49 = load %S.ast.Node, ptr %t48 %t50 = call { ptr, i64, i64 } @finch.gen.condition(ptr %t42, %S.ast.Node %t49) store { ptr, i64, i64 } %t50, ptr %a51 %t52 = load i1, ptr %a41 br i1 %t52, label %then4816, label %else4817 then4816: %t53 = load ptr, ptr %a1 %t54 = load { ptr, i64, i64 }, ptr %a8 call void @finch.gen.br(ptr %t53, { ptr, i64, i64 } %t54) br label %endif4818 else4817: %t55 = load ptr, ptr %a1 %t56 = load { ptr, i64, i64 }, ptr %a51 %t57 = load { ptr, i64, i64 }, ptr %a8 %t58 = load { ptr, i64, i64 }, ptr %a11 call void @finch.gen.condBr(ptr %t55, { ptr, i64, i64 } %t56, { ptr, i64, i64 } %t57, { ptr, i64, i64 } %t58) br label %endif4818 endif4818: %t59 = load ptr, ptr %a1 %t60 = load { ptr, i64, i64 }, ptr %a8 call void @finch.gen.label(ptr %t59, { ptr, i64, i64 } %t60) %t61 = load ptr, ptr %a1 %t62 = icmp eq ptr %t61, null br i1 %t62, label %panic4819, label %ok4820 panic4819: call void @finch_panic(ptr @.str.3076, i64 2201, ptr @.str.3077) unreachable ok4820: %t63 = getelementptr inbounds %S.gen.Gen, ptr %t61, i32 0, i32 11 %t64 = getelementptr inbounds { ptr, i64, i64 }, ptr %t63, i32 0, i32 1 %t65 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } %t65, ptr %a66 call void @finch_str_copy(ptr %a67, ptr %a66) %t68 = load { ptr, i64, i64 }, ptr %a67 %t69 = insertvalue %S.gen.Loop zeroinitializer, { ptr, i64, i64 } %t68, 0 %t70 = load { ptr, i64, i64 }, ptr %a11 store { ptr, i64, i64 } %t70, ptr %a71 call void @finch_str_copy(ptr %a72, ptr %a71) %t73 = load { ptr, i64, i64 }, ptr %a72 %t74 = insertvalue %S.gen.Loop %t69, { ptr, i64, i64 } %t73, 1 %t75 = load ptr, ptr %a1 %t76 = icmp eq ptr %t75, null br i1 %t76, label %panic4821, label %ok4822 panic4821: call void @finch_panic(ptr @.str.3078, i64 2201, ptr @.str.3079) unreachable ok4822: %t77 = getelementptr inbounds %S.gen.Gen, ptr %t75, i32 0, i32 10 %t78 = getelementptr inbounds { ptr, i64, i64 }, ptr %t77, i32 0, i32 1 %t79 = load i64, ptr %t78 %t80 = insertvalue %S.gen.Loop %t74, i64 %t79, 2 %t81 = load i64, ptr %t64 %t82 = add i64 %t81, 1 call void @finch_arr_reserve(ptr %t63, i64 %t82, i64 ptrtoint (ptr getelementptr (%S.gen.Loop, ptr null, i32 1) to i64)) %t83 = load ptr, ptr %t63 %t84 = getelementptr inbounds %S.gen.Loop, ptr %t83, i64 %t81 store %S.gen.Loop %t80, ptr %t84 store i64 %t82, ptr %t64 %t85 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t86 = load { ptr, i64, i64 }, ptr %t85 %t87 = extractvalue { ptr, i64, i64 } %t86, 1 %t88 = icmp uge i64 1, %t87 br i1 %t88, label %range4823, label %inrange4824 range4823: call void @finch_panic_index(ptr @.str.3080, i64 2202, i64 1, i64 %t87) unreachable inrange4824: %t89 = extractvalue { ptr, i64, i64 } %t86, 0 %t90 = getelementptr inbounds %S.ast.Node, ptr %t89, i64 1 %t91 = load %S.ast.Node, ptr %t90 %t92 = call i1 @finch.gen.countBreaks(%S.ast.Node %t91) store i1 %t92, ptr %a93 %t94 = load ptr, ptr %a1 %t95 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t96 = load { ptr, i64, i64 }, ptr %t95 %t97 = extractvalue { ptr, i64, i64 } %t96, 1 %t98 = icmp uge i64 1, %t97 br i1 %t98, label %range4825, label %inrange4826 range4825: call void @finch_panic_index(ptr @.str.3081, i64 2203, i64 1, i64 %t97) unreachable inrange4826: %t99 = extractvalue { ptr, i64, i64 } %t96, 0 %t100 = getelementptr inbounds %S.ast.Node, ptr %t99, i64 1 %t101 = load %S.ast.Node, ptr %t100 call void @finch.gen.block(ptr %t94, %S.ast.Node %t101, i1 true) %t102 = load ptr, ptr %a1 %t103 = icmp eq ptr %t102, null br i1 %t103, label %panic4827, label %ok4828 panic4827: call void @finch_panic(ptr @.str.3082, i64 2204, ptr @.str.3083) unreachable ok4828: %t104 = getelementptr inbounds %S.gen.Gen, ptr %t102, i32 0, i32 11 %t105 = getelementptr inbounds { ptr, i64, i64 }, ptr %t104, i32 0, i32 1 %t106 = load i64, ptr %t105 %t107 = icmp eq i64 %t106, 0 br i1 %t107, label %panic4829, label %ok4830 panic4829: call void @finch_panic(ptr @.str.3084, i64 2204, ptr @.str.3085) unreachable ok4830: %t108 = sub i64 %t106, 1 %t109 = load ptr, ptr %t104 %t110 = getelementptr inbounds %S.gen.Loop, ptr %t109, i64 %t108 %t111 = load %S.gen.Loop, ptr %t110 store i64 %t108, ptr %t105 %t112 = load ptr, ptr %a1 %t113 = load { ptr, i64, i64 }, ptr %a5 call void @finch.gen.br(ptr %t112, { ptr, i64, i64 } %t113) %t114 = load i1, ptr %a41 %t115 = xor i1 %t114, true br label %logic.from4831 logic.from4831: br i1 %t115, label %logic.end4833, label %logic.rhs4832 logic.rhs4832: %t116 = load i1, ptr %a93 br label %logic.rend4834 logic.rend4834: br label %logic.end4833 logic.end4833: %t117 = phi i1 [ true, %logic.from4831 ], [ %t116, %logic.rend4834 ] br i1 %t117, label %then4835, label %endif4837 then4835: %t118 = load ptr, ptr %a1 %t119 = load { ptr, i64, i64 }, ptr %a11 call void @finch.gen.label(ptr %t118, { ptr, i64, i64 } %t119) br label %endif4837 endif4837: ret void } define internal i1 @finch.gen.countBreaks(%S.ast.Node %p0) { entry: %a1 = alloca %S.ast.Node, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca i64, align 16 %a37 = alloca %S.ast.Node, align 16 store %S.ast.Node %p0, ptr %a1 %t2 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 0 %t3 = load { ptr, i64, i64 }, ptr %t2 store { ptr, i64, i64 } %t3, ptr %a4 store { ptr, i64, i64 } { ptr @.str.3086, i64 5, i64 0 }, ptr %a5 %t6 = call i32 @finch_str_eq(ptr %a4, ptr %a5) %t7 = icmp ne i32 %t6, 0 br i1 %t7, label %then4838, label %endif4840 then4838: ret i1 true endif4840: %t8 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 0 %t9 = load { ptr, i64, i64 }, ptr %t8 store { ptr, i64, i64 } %t9, ptr %a10 store { ptr, i64, i64 } { ptr @.str.3087, i64 5, i64 0 }, ptr %a11 %t12 = call i32 @finch_str_eq(ptr %a10, ptr %a11) %t13 = icmp ne i32 %t12, 0 br label %logic.from4841 logic.from4841: br i1 %t13, label %logic.end4843, label %logic.rhs4842 logic.rhs4842: %t14 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 0 %t15 = load { ptr, i64, i64 }, ptr %t14 store { ptr, i64, i64 } %t15, ptr %a16 store { ptr, i64, i64 } { ptr @.str.3088, i64 3, i64 0 }, ptr %a17 %t18 = call i32 @finch_str_eq(ptr %a16, ptr %a17) %t19 = icmp ne i32 %t18, 0 br label %logic.rend4844 logic.rend4844: br label %logic.end4843 logic.end4843: %t20 = phi i1 [ true, %logic.from4841 ], [ %t19, %logic.rend4844 ] br label %logic.from4845 logic.from4845: br i1 %t20, label %logic.end4847, label %logic.rhs4846 logic.rhs4846: %t21 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 0 %t22 = load { ptr, i64, i64 }, ptr %t21 store { ptr, i64, i64 } %t22, ptr %a23 store { ptr, i64, i64 } { ptr @.str.3089, i64 4, i64 0 }, ptr %a24 %t25 = call i32 @finch_str_eq(ptr %a23, ptr %a24) %t26 = icmp ne i32 %t25, 0 br label %logic.rend4848 logic.rend4848: br label %logic.end4847 logic.end4847: %t27 = phi i1 [ true, %logic.from4845 ], [ %t26, %logic.rend4848 ] br i1 %t27, label %then4849, label %endif4851 then4849: ret i1 false endif4851: %t28 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 9 store i64 0, ptr %a29 br label %each.cond4852 each.cond4852: %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t28, i32 0, i32 1 %t31 = load i64, ptr %t30 %t32 = load i64, ptr %a29 %t33 = icmp slt i64 %t32, %t31 br i1 %t33, label %each.body4853, label %each.end4855 each.body4853: %t34 = load ptr, ptr %t28 %t35 = getelementptr inbounds %S.ast.Node, ptr %t34, i64 %t32 %t36 = load %S.ast.Node, ptr %t35 store %S.ast.Node %t36, ptr %a37 %t38 = load %S.ast.Node, ptr %a37 %t39 = call i1 @finch.gen.countBreaks(%S.ast.Node %t38) br i1 %t39, label %then4856, label %endif4858 then4856: ret i1 true endif4858: br label %each.step4854 each.step4854: %t40 = load i64, ptr %a29 %t41 = add i64 %t40, 1 store i64 %t41, ptr %a29 br label %each.cond4852 each.end4855: ret i1 false } define internal void @finch.gen.forStmt(ptr %p0, %S.ast.Node %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca { ptr, i64, i64 }, align 16 %a113 = alloca { ptr, i64, i64 }, align 16 %a114 = alloca { ptr, i64, i64 }, align 16 %a152 = alloca { ptr, i64, i64 }, align 16 %a156 = alloca { ptr, i64, i64 }, align 16 %a157 = alloca { ptr, i64, i64 }, align 16 %a158 = alloca { ptr, i64, i64 }, align 16 %a160 = alloca { ptr, i64, i64 }, align 16 %a161 = alloca { ptr, i64, i64 }, align 16 %a162 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = load ptr, ptr %a1 %t5 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t6 = load { ptr, i64, i64 }, ptr %t5 %t7 = extractvalue { ptr, i64, i64 } %t6, 1 %t8 = icmp uge i64 0, %t7 br i1 %t8, label %range4859, label %inrange4860 range4859: call void @finch_panic_index(ptr @.str.3090, i64 2228, i64 0, i64 %t7) unreachable inrange4860: %t9 = extractvalue { ptr, i64, i64 } %t6, 0 %t10 = getelementptr inbounds %S.ast.Node, ptr %t9, i64 0 %t11 = load %S.ast.Node, ptr %t10 %t12 = call %S.gen.Val @finch.gen.expr(ptr %t4, %S.ast.Node %t11) %t13 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3091, i64 3, i64 0 }) %t14 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t15 = load { ptr, i64, i64 }, ptr %t14 %t16 = extractvalue { ptr, i64, i64 } %t15, 1 %t17 = icmp uge i64 0, %t16 br i1 %t17, label %range4861, label %inrange4862 range4861: call void @finch_panic_index(ptr @.str.3092, i64 2228, i64 0, i64 %t16) unreachable inrange4862: %t18 = extractvalue { ptr, i64, i64 } %t15, 0 %t19 = getelementptr inbounds %S.ast.Node, ptr %t18, i64 0 %t20 = load %S.ast.Node, ptr %t19 %t21 = call %S.gen.Val @finch.gen.coerce(ptr %t3, %S.gen.Val %t12, %S.ast.Type %t13, %S.ast.Node %t20, { ptr, i64, i64 } { ptr @.str.3093, i64 20, i64 0 }) %t22 = extractvalue %S.gen.Val %t21, 0 store { ptr, i64, i64 } %t22, ptr %a23 call void @finch_str_copy(ptr %a24, ptr %a23) %t25 = load { ptr, i64, i64 }, ptr %a24 store { ptr, i64, i64 } %t25, ptr %a26 %t27 = load ptr, ptr %a1 %t28 = load ptr, ptr %a1 %t29 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t30 = load { ptr, i64, i64 }, ptr %t29 %t31 = extractvalue { ptr, i64, i64 } %t30, 1 %t32 = icmp uge i64 1, %t31 br i1 %t32, label %range4863, label %inrange4864 range4863: call void @finch_panic_index(ptr @.str.3094, i64 2229, i64 1, i64 %t31) unreachable inrange4864: %t33 = extractvalue { ptr, i64, i64 } %t30, 0 %t34 = getelementptr inbounds %S.ast.Node, ptr %t33, i64 1 %t35 = load %S.ast.Node, ptr %t34 %t36 = call %S.gen.Val @finch.gen.expr(ptr %t28, %S.ast.Node %t35) %t37 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3095, i64 3, i64 0 }) %t38 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t39 = load { ptr, i64, i64 }, ptr %t38 %t40 = extractvalue { ptr, i64, i64 } %t39, 1 %t41 = icmp uge i64 1, %t40 br i1 %t41, label %range4865, label %inrange4866 range4865: call void @finch_panic_index(ptr @.str.3096, i64 2229, i64 1, i64 %t40) unreachable inrange4866: %t42 = extractvalue { ptr, i64, i64 } %t39, 0 %t43 = getelementptr inbounds %S.ast.Node, ptr %t42, i64 1 %t44 = load %S.ast.Node, ptr %t43 %t45 = call %S.gen.Val @finch.gen.coerce(ptr %t27, %S.gen.Val %t36, %S.ast.Type %t37, %S.ast.Node %t44, { ptr, i64, i64 } { ptr @.str.3097, i64 18, i64 0 }) %t46 = extractvalue %S.gen.Val %t45, 0 store { ptr, i64, i64 } %t46, ptr %a47 call void @finch_str_copy(ptr %a48, ptr %a47) %t49 = load { ptr, i64, i64 }, ptr %a48 store { ptr, i64, i64 } %t49, ptr %a50 %t51 = load ptr, ptr %a1 call void @finch.gen.pushScope(ptr %t51) %t52 = load ptr, ptr %a1 %t53 = load %S.ast.Node, ptr %a2 %t54 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t55 = load { ptr, i64, i64 }, ptr %t54 %t56 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3098, i64 3, i64 0 }) %t57 = load { ptr, i64, i64 }, ptr %a26 %t58 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t52, %S.ast.Node %t53, { ptr, i64, i64 } %t55, %S.ast.Type %t56, { ptr, i64, i64 } %t57, i1 true) store { ptr, i64, i64 } %t58, ptr %a59 %t60 = load ptr, ptr %a1 %t61 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t60, { ptr, i64, i64 } { ptr @.str.3099, i64 8, i64 0 }) store { ptr, i64, i64 } %t61, ptr %a62 %t63 = load ptr, ptr %a1 %t64 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t63, { ptr, i64, i64 } { ptr @.str.3100, i64 8, i64 0 }) store { ptr, i64, i64 } %t64, ptr %a65 %t66 = load ptr, ptr %a1 %t67 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t66, { ptr, i64, i64 } { ptr @.str.3101, i64 8, i64 0 }) store { ptr, i64, i64 } %t67, ptr %a68 %t69 = load ptr, ptr %a1 %t70 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t69, { ptr, i64, i64 } { ptr @.str.3102, i64 7, i64 0 }) store { ptr, i64, i64 } %t70, ptr %a71 %t72 = load ptr, ptr %a1 %t73 = load { ptr, i64, i64 }, ptr %a62 call void @finch.gen.br(ptr %t72, { ptr, i64, i64 } %t73) %t74 = load ptr, ptr %a1 %t75 = load { ptr, i64, i64 }, ptr %a62 call void @finch.gen.label(ptr %t74, { ptr, i64, i64 } %t75) %t76 = load ptr, ptr %a1 %t77 = load { ptr, i64, i64 }, ptr %a59 %t78 = call { ptr, i64, i64 } @finch.gen.load(ptr %t76, { ptr, i64, i64 } { ptr @.str.3103, i64 3, i64 0 }, { ptr, i64, i64 } %t77) store { ptr, i64, i64 } %t78, ptr %a79 %t80 = load ptr, ptr %a1 %t81 = load { ptr, i64, i64 }, ptr %a79 store { ptr, i64, i64 } { ptr @.str.3104, i64 13, i64 0 }, ptr %a83 store { ptr, i64, i64 } %t81, ptr %a84 call void @finch_str_concat(ptr %a82, ptr %a83, ptr %a84) %t85 = load { ptr, i64, i64 }, ptr %a82 store { ptr, i64, i64 } %t85, ptr %a87 store { ptr, i64, i64 } { ptr @.str.3105, i64 2, i64 0 }, ptr %a88 call void @finch_str_concat(ptr %a86, ptr %a87, ptr %a88) %t89 = load { ptr, i64, i64 }, ptr %a86 %t90 = load { ptr, i64, i64 }, ptr %a50 store { ptr, i64, i64 } %t89, ptr %a92 store { ptr, i64, i64 } %t90, ptr %a93 call void @finch_str_concat(ptr %a91, ptr %a92, ptr %a93) %t94 = load { ptr, i64, i64 }, ptr %a91 %t95 = call { ptr, i64, i64 } @finch.gen.op(ptr %t80, { ptr, i64, i64 } %t94) store { ptr, i64, i64 } %t95, ptr %a96 %t97 = load ptr, ptr %a1 %t98 = load { ptr, i64, i64 }, ptr %a96 %t99 = load { ptr, i64, i64 }, ptr %a65 %t100 = load { ptr, i64, i64 }, ptr %a71 call void @finch.gen.condBr(ptr %t97, { ptr, i64, i64 } %t98, { ptr, i64, i64 } %t99, { ptr, i64, i64 } %t100) %t101 = load ptr, ptr %a1 %t102 = load { ptr, i64, i64 }, ptr %a65 call void @finch.gen.label(ptr %t101, { ptr, i64, i64 } %t102) %t103 = load ptr, ptr %a1 %t104 = icmp eq ptr %t103, null br i1 %t104, label %panic4867, label %ok4868 panic4867: call void @finch_panic(ptr @.str.3106, i64 2242, ptr @.str.3107) unreachable ok4868: %t105 = getelementptr inbounds %S.gen.Gen, ptr %t103, i32 0, i32 11 %t106 = getelementptr inbounds { ptr, i64, i64 }, ptr %t105, i32 0, i32 1 %t107 = load { ptr, i64, i64 }, ptr %a68 store { ptr, i64, i64 } %t107, ptr %a108 call void @finch_str_copy(ptr %a109, ptr %a108) %t110 = load { ptr, i64, i64 }, ptr %a109 %t111 = insertvalue %S.gen.Loop zeroinitializer, { ptr, i64, i64 } %t110, 0 %t112 = load { ptr, i64, i64 }, ptr %a71 store { ptr, i64, i64 } %t112, ptr %a113 call void @finch_str_copy(ptr %a114, ptr %a113) %t115 = load { ptr, i64, i64 }, ptr %a114 %t116 = insertvalue %S.gen.Loop %t111, { ptr, i64, i64 } %t115, 1 %t117 = load ptr, ptr %a1 %t118 = icmp eq ptr %t117, null br i1 %t118, label %panic4869, label %ok4870 panic4869: call void @finch_panic(ptr @.str.3108, i64 2242, ptr @.str.3109) unreachable ok4870: %t119 = getelementptr inbounds %S.gen.Gen, ptr %t117, i32 0, i32 10 %t120 = getelementptr inbounds { ptr, i64, i64 }, ptr %t119, i32 0, i32 1 %t121 = load i64, ptr %t120 %t122 = insertvalue %S.gen.Loop %t116, i64 %t121, 2 %t123 = load i64, ptr %t106 %t124 = add i64 %t123, 1 call void @finch_arr_reserve(ptr %t105, i64 %t124, i64 ptrtoint (ptr getelementptr (%S.gen.Loop, ptr null, i32 1) to i64)) %t125 = load ptr, ptr %t105 %t126 = getelementptr inbounds %S.gen.Loop, ptr %t125, i64 %t123 store %S.gen.Loop %t122, ptr %t126 store i64 %t124, ptr %t106 %t127 = load ptr, ptr %a1 %t128 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t129 = load { ptr, i64, i64 }, ptr %t128 %t130 = extractvalue { ptr, i64, i64 } %t129, 1 %t131 = icmp uge i64 2, %t130 br i1 %t131, label %range4871, label %inrange4872 range4871: call void @finch_panic_index(ptr @.str.3110, i64 2243, i64 2, i64 %t130) unreachable inrange4872: %t132 = extractvalue { ptr, i64, i64 } %t129, 0 %t133 = getelementptr inbounds %S.ast.Node, ptr %t132, i64 2 %t134 = load %S.ast.Node, ptr %t133 call void @finch.gen.block(ptr %t127, %S.ast.Node %t134, i1 true) %t135 = load ptr, ptr %a1 %t136 = icmp eq ptr %t135, null br i1 %t136, label %panic4873, label %ok4874 panic4873: call void @finch_panic(ptr @.str.3111, i64 2244, ptr @.str.3112) unreachable ok4874: %t137 = getelementptr inbounds %S.gen.Gen, ptr %t135, i32 0, i32 11 %t138 = getelementptr inbounds { ptr, i64, i64 }, ptr %t137, i32 0, i32 1 %t139 = load i64, ptr %t138 %t140 = icmp eq i64 %t139, 0 br i1 %t140, label %panic4875, label %ok4876 panic4875: call void @finch_panic(ptr @.str.3113, i64 2244, ptr @.str.3114) unreachable ok4876: %t141 = sub i64 %t139, 1 %t142 = load ptr, ptr %t137 %t143 = getelementptr inbounds %S.gen.Loop, ptr %t142, i64 %t141 %t144 = load %S.gen.Loop, ptr %t143 store i64 %t141, ptr %t138 %t145 = load ptr, ptr %a1 %t146 = load { ptr, i64, i64 }, ptr %a68 call void @finch.gen.br(ptr %t145, { ptr, i64, i64 } %t146) %t147 = load ptr, ptr %a1 %t148 = load { ptr, i64, i64 }, ptr %a68 call void @finch.gen.label(ptr %t147, { ptr, i64, i64 } %t148) %t149 = load ptr, ptr %a1 %t150 = load { ptr, i64, i64 }, ptr %a59 %t151 = call { ptr, i64, i64 } @finch.gen.load(ptr %t149, { ptr, i64, i64 } { ptr @.str.3115, i64 3, i64 0 }, { ptr, i64, i64 } %t150) store { ptr, i64, i64 } %t151, ptr %a152 %t153 = load ptr, ptr %a1 %t154 = load ptr, ptr %a1 %t155 = load { ptr, i64, i64 }, ptr %a152 store { ptr, i64, i64 } { ptr @.str.3117, i64 8, i64 0 }, ptr %a157 store { ptr, i64, i64 } %t155, ptr %a158 call void @finch_str_concat(ptr %a156, ptr %a157, ptr %a158) %t159 = load { ptr, i64, i64 }, ptr %a156 store { ptr, i64, i64 } %t159, ptr %a161 store { ptr, i64, i64 } { ptr @.str.3118, i64 3, i64 0 }, ptr %a162 call void @finch_str_concat(ptr %a160, ptr %a161, ptr %a162) %t163 = load { ptr, i64, i64 }, ptr %a160 %t164 = call { ptr, i64, i64 } @finch.gen.op(ptr %t154, { ptr, i64, i64 } %t163) %t165 = load { ptr, i64, i64 }, ptr %a59 call void @finch.gen.store(ptr %t153, { ptr, i64, i64 } { ptr @.str.3116, i64 3, i64 0 }, { ptr, i64, i64 } %t164, { ptr, i64, i64 } %t165) %t166 = load ptr, ptr %a1 %t167 = load { ptr, i64, i64 }, ptr %a62 call void @finch.gen.br(ptr %t166, { ptr, i64, i64 } %t167) %t168 = load ptr, ptr %a1 %t169 = load { ptr, i64, i64 }, ptr %a71 call void @finch.gen.label(ptr %t168, { ptr, i64, i64 } %t169) %t170 = load ptr, ptr %a1 call void @finch.gen.popScope(ptr %t170) ret void } define internal void @finch.gen.eachMap(ptr %p0, %S.ast.Node %p1, { ptr, i64, i64 } %p2, %S.ast.Type %p3, i1 %p4) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca %S.ast.Type, align 16 %a5 = alloca i1, align 16 %a13 = alloca %S.ast.Type, align 16 %a14 = alloca %S.ast.Type, align 16 %a16 = alloca %S.ast.Type, align 16 %a24 = alloca %S.ast.Type, align 16 %a25 = alloca %S.ast.Type, align 16 %a27 = alloca %S.ast.Type, align 16 %a47 = alloca i1, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca { ptr, i64, i64 }, align 16 %a106 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 %a113 = alloca { ptr, i64, i64 }, align 16 %a114 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca { ptr, i64, i64 }, align 16 %a117 = alloca { ptr, i64, i64 }, align 16 %a118 = alloca { ptr, i64, i64 }, align 16 %a121 = alloca { ptr, i64, i64 }, align 16 %a122 = alloca { ptr, i64, i64 }, align 16 %a123 = alloca { ptr, i64, i64 }, align 16 %a125 = alloca { ptr, i64, i64 }, align 16 %a126 = alloca { ptr, i64, i64 }, align 16 %a127 = alloca { ptr, i64, i64 }, align 16 %a131 = alloca { ptr, i64, i64 }, align 16 %a135 = alloca { ptr, i64, i64 }, align 16 %a136 = alloca { ptr, i64, i64 }, align 16 %a137 = alloca { ptr, i64, i64 }, align 16 %a139 = alloca { ptr, i64, i64 }, align 16 %a140 = alloca { ptr, i64, i64 }, align 16 %a141 = alloca { ptr, i64, i64 }, align 16 %a144 = alloca { ptr, i64, i64 }, align 16 %a145 = alloca { ptr, i64, i64 }, align 16 %a146 = alloca { ptr, i64, i64 }, align 16 %a167 = alloca { ptr, i64, i64 }, align 16 %a168 = alloca { ptr, i64, i64 }, align 16 %a169 = alloca { ptr, i64, i64 }, align 16 %a171 = alloca { ptr, i64, i64 }, align 16 %a172 = alloca { ptr, i64, i64 }, align 16 %a173 = alloca { ptr, i64, i64 }, align 16 %a177 = alloca { ptr, i64, i64 }, align 16 %a179 = alloca { ptr, i64, i64 }, align 16 %a180 = alloca { ptr, i64, i64 }, align 16 %a181 = alloca { ptr, i64, i64 }, align 16 %a183 = alloca { ptr, i64, i64 }, align 16 %a184 = alloca { ptr, i64, i64 }, align 16 %a185 = alloca { ptr, i64, i64 }, align 16 %a196 = alloca { ptr, i64, i64 }, align 16 %a202 = alloca { ptr, i64, i64 }, align 16 %a203 = alloca { ptr, i64, i64 }, align 16 %a204 = alloca { ptr, i64, i64 }, align 16 %a206 = alloca { ptr, i64, i64 }, align 16 %a207 = alloca { ptr, i64, i64 }, align 16 %a208 = alloca { ptr, i64, i64 }, align 16 %a211 = alloca { ptr, i64, i64 }, align 16 %a212 = alloca { ptr, i64, i64 }, align 16 %a213 = alloca { ptr, i64, i64 }, align 16 %a215 = alloca { ptr, i64, i64 }, align 16 %a216 = alloca { ptr, i64, i64 }, align 16 %a217 = alloca { ptr, i64, i64 }, align 16 %a221 = alloca { ptr, i64, i64 }, align 16 %a225 = alloca { ptr, i64, i64 }, align 16 %a226 = alloca { ptr, i64, i64 }, align 16 %a227 = alloca { ptr, i64, i64 }, align 16 %a229 = alloca { ptr, i64, i64 }, align 16 %a230 = alloca { ptr, i64, i64 }, align 16 %a231 = alloca { ptr, i64, i64 }, align 16 %a234 = alloca { ptr, i64, i64 }, align 16 %a235 = alloca { ptr, i64, i64 }, align 16 %a236 = alloca { ptr, i64, i64 }, align 16 %a248 = alloca { ptr, i64, i64 }, align 16 %a255 = alloca { ptr, i64, i64 }, align 16 %a259 = alloca { ptr, i64, i64 }, align 16 %a260 = alloca { ptr, i64, i64 }, align 16 %a261 = alloca { ptr, i64, i64 }, align 16 %a263 = alloca { ptr, i64, i64 }, align 16 %a264 = alloca { ptr, i64, i64 }, align 16 %a265 = alloca { ptr, i64, i64 }, align 16 %a277 = alloca { ptr, i64, i64 }, align 16 %a278 = alloca { ptr, i64, i64 }, align 16 %a282 = alloca { ptr, i64, i64 }, align 16 %a283 = alloca { ptr, i64, i64 }, align 16 %a306 = alloca { ptr, i64, i64 }, align 16 %a332 = alloca { ptr, i64, i64 }, align 16 %a371 = alloca { ptr, i64, i64 }, align 16 %a375 = alloca { ptr, i64, i64 }, align 16 %a376 = alloca { ptr, i64, i64 }, align 16 %a377 = alloca { ptr, i64, i64 }, align 16 %a379 = alloca { ptr, i64, i64 }, align 16 %a380 = alloca { ptr, i64, i64 }, align 16 %a381 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 store %S.ast.Type %p3, ptr %a4 store i1 %p4, ptr %a5 %t6 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 1 %t7 = load { ptr, i64, i64 }, ptr %t6 %t8 = extractvalue { ptr, i64, i64 } %t7, 1 %t9 = icmp uge i64 0, %t8 br i1 %t9, label %range4877, label %inrange4878 range4877: call void @finch_panic_index(ptr @.str.3119, i64 2256, i64 0, i64 %t8) unreachable inrange4878: %t10 = extractvalue { ptr, i64, i64 } %t7, 0 %t11 = getelementptr inbounds %S.ast.Type, ptr %t10, i64 0 %t12 = load %S.ast.Type, ptr %t11 store %S.ast.Type %t12, ptr %a13 call void @finch.copy.S_ast_Type(ptr %a14, ptr %a13) %t15 = load %S.ast.Type, ptr %a14 store %S.ast.Type %t15, ptr %a16 %t17 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 1 %t18 = load { ptr, i64, i64 }, ptr %t17 %t19 = extractvalue { ptr, i64, i64 } %t18, 1 %t20 = icmp uge i64 1, %t19 br i1 %t20, label %range4879, label %inrange4880 range4879: call void @finch_panic_index(ptr @.str.3120, i64 2257, i64 1, i64 %t19) unreachable inrange4880: %t21 = extractvalue { ptr, i64, i64 } %t18, 0 %t22 = getelementptr inbounds %S.ast.Type, ptr %t21, i64 1 %t23 = load %S.ast.Type, ptr %t22 store %S.ast.Type %t23, ptr %a24 call void @finch.copy.S_ast_Type(ptr %a25, ptr %a24) %t26 = load %S.ast.Type, ptr %a25 store %S.ast.Type %t26, ptr %a27 %t28 = load i1, ptr %a5 br label %logic.from4881 logic.from4881: br i1 %t28, label %logic.rhs4882, label %logic.end4883 logic.rhs4882: %t29 = load ptr, ptr %a1 %t30 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t31 = load { ptr, i64, i64 }, ptr %t30 %t32 = extractvalue { ptr, i64, i64 } %t31, 1 %t33 = icmp uge i64 0, %t32 br i1 %t33, label %range4884, label %inrange4885 range4884: call void @finch_panic_index(ptr @.str.3121, i64 2258, i64 0, i64 %t32) unreachable inrange4885: %t34 = extractvalue { ptr, i64, i64 } %t31, 0 %t35 = getelementptr inbounds %S.ast.Node, ptr %t34, i64 0 %t36 = load %S.ast.Node, ptr %t35 %t37 = call { ptr, i64, i64 } @finch.gen.rootVar(%S.ast.Node %t36) %t38 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t39 = load { ptr, i64, i64 }, ptr %t38 %t40 = extractvalue { ptr, i64, i64 } %t39, 1 %t41 = icmp uge i64 1, %t40 br i1 %t41, label %range4886, label %inrange4887 range4886: call void @finch_panic_index(ptr @.str.3122, i64 2258, i64 1, i64 %t40) unreachable inrange4887: %t42 = extractvalue { ptr, i64, i64 } %t39, 0 %t43 = getelementptr inbounds %S.ast.Node, ptr %t42, i64 1 %t44 = load %S.ast.Node, ptr %t43 %t45 = call i1 @finch.gen.mutates(ptr %t29, { ptr, i64, i64 } %t37, %S.ast.Node %t44) br label %logic.rend4888 logic.rend4888: br label %logic.end4883 logic.end4883: %t46 = phi i1 [ false, %logic.from4881 ], [ %t45, %logic.rend4888 ] store i1 %t46, ptr %a47 %t48 = load ptr, ptr %a1 %t49 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t48, { ptr, i64, i64 } { ptr @.str.3123, i64 3, i64 0 }) store { ptr, i64, i64 } %t49, ptr %a50 %t51 = load ptr, ptr %a1 %t52 = load { ptr, i64, i64 }, ptr %a50 call void @finch.gen.store(ptr %t51, { ptr, i64, i64 } { ptr @.str.3124, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.3125, i64 1, i64 0 }, { ptr, i64, i64 } %t52) store { ptr, i64, i64 } { ptr @.str.3126, i64 0, i64 0 }, ptr %a53 %t54 = load i1, ptr %a5 br i1 %t54, label %then4889, label %endif4891 then4889: %t55 = load ptr, ptr %a1 %t56 = load ptr, ptr %a1 %t57 = load ptr, ptr %a1 %t58 = load %S.ast.Type, ptr %a4 %t59 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t57, %S.ast.Type %t58) store { ptr, i64, i64 } { ptr @.str.3128, i64 23, i64 0 }, ptr %a61 store { ptr, i64, i64 } %t59, ptr %a62 call void @finch_str_concat(ptr %a60, ptr %a61, ptr %a62) %t63 = load { ptr, i64, i64 }, ptr %a60 store { ptr, i64, i64 } %t63, ptr %a65 store { ptr, i64, i64 } { ptr @.str.3129, i64 6, i64 0 }, ptr %a66 call void @finch_str_concat(ptr %a64, ptr %a65, ptr %a66) %t67 = load { ptr, i64, i64 }, ptr %a64 %t68 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t67, ptr %a70 store { ptr, i64, i64 } %t68, ptr %a71 call void @finch_str_concat(ptr %a69, ptr %a70, ptr %a71) %t72 = load { ptr, i64, i64 }, ptr %a69 store { ptr, i64, i64 } %t72, ptr %a74 store { ptr, i64, i64 } { ptr @.str.3130, i64 14, i64 0 }, ptr %a75 call void @finch_str_concat(ptr %a73, ptr %a74, ptr %a75) %t76 = load { ptr, i64, i64 }, ptr %a73 %t77 = call { ptr, i64, i64 } @finch.gen.op(ptr %t56, { ptr, i64, i64 } %t76) %t78 = call { ptr, i64, i64 } @finch.gen.load(ptr %t55, { ptr, i64, i64 } { ptr @.str.3127, i64 3, i64 0 }, { ptr, i64, i64 } %t77) store { ptr, i64, i64 } %t78, ptr %a53 br label %endif4891 endif4891: %t79 = load ptr, ptr %a1 %t80 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t79, { ptr, i64, i64 } { ptr @.str.3131, i64 8, i64 0 }) store { ptr, i64, i64 } %t80, ptr %a81 %t82 = load ptr, ptr %a1 %t83 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t82, { ptr, i64, i64 } { ptr @.str.3132, i64 9, i64 0 }) store { ptr, i64, i64 } %t83, ptr %a84 %t85 = load ptr, ptr %a1 %t86 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t85, { ptr, i64, i64 } { ptr @.str.3133, i64 8, i64 0 }) store { ptr, i64, i64 } %t86, ptr %a87 %t88 = load ptr, ptr %a1 %t89 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t88, { ptr, i64, i64 } { ptr @.str.3134, i64 8, i64 0 }) store { ptr, i64, i64 } %t89, ptr %a90 %t91 = load ptr, ptr %a1 %t92 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t91, { ptr, i64, i64 } { ptr @.str.3135, i64 7, i64 0 }) store { ptr, i64, i64 } %t92, ptr %a93 %t94 = load ptr, ptr %a1 %t95 = load { ptr, i64, i64 }, ptr %a81 call void @finch.gen.br(ptr %t94, { ptr, i64, i64 } %t95) %t96 = load ptr, ptr %a1 %t97 = load { ptr, i64, i64 }, ptr %a81 call void @finch.gen.label(ptr %t96, { ptr, i64, i64 } %t97) %t98 = load i1, ptr %a5 br label %logic.from4892 logic.from4892: br i1 %t98, label %logic.rhs4893, label %logic.end4894 logic.rhs4893: %t99 = load i1, ptr %a47 br label %logic.rend4895 logic.rend4895: br label %logic.end4894 logic.end4894: %t100 = phi i1 [ false, %logic.from4892 ], [ %t99, %logic.rend4895 ] br i1 %t100, label %then4896, label %endif4898 then4896: %t101 = load ptr, ptr %a1 %t102 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t101, { ptr, i64, i64 } { ptr @.str.3136, i64 11, i64 0 }) store { ptr, i64, i64 } %t102, ptr %a103 %t104 = load ptr, ptr %a1 %t105 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t104, { ptr, i64, i64 } { ptr @.str.3137, i64 8, i64 0 }) store { ptr, i64, i64 } %t105, ptr %a106 %t107 = load ptr, ptr %a1 %t108 = load ptr, ptr %a1 %t109 = load ptr, ptr %a1 %t110 = load %S.ast.Type, ptr %a4 %t111 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t109, %S.ast.Type %t110) store { ptr, i64, i64 } { ptr @.str.3139, i64 23, i64 0 }, ptr %a113 store { ptr, i64, i64 } %t111, ptr %a114 call void @finch_str_concat(ptr %a112, ptr %a113, ptr %a114) %t115 = load { ptr, i64, i64 }, ptr %a112 store { ptr, i64, i64 } %t115, ptr %a117 store { ptr, i64, i64 } { ptr @.str.3140, i64 6, i64 0 }, ptr %a118 call void @finch_str_concat(ptr %a116, ptr %a117, ptr %a118) %t119 = load { ptr, i64, i64 }, ptr %a116 %t120 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t119, ptr %a122 store { ptr, i64, i64 } %t120, ptr %a123 call void @finch_str_concat(ptr %a121, ptr %a122, ptr %a123) %t124 = load { ptr, i64, i64 }, ptr %a121 store { ptr, i64, i64 } %t124, ptr %a126 store { ptr, i64, i64 } { ptr @.str.3141, i64 14, i64 0 }, ptr %a127 call void @finch_str_concat(ptr %a125, ptr %a126, ptr %a127) %t128 = load { ptr, i64, i64 }, ptr %a125 %t129 = call { ptr, i64, i64 } @finch.gen.op(ptr %t108, { ptr, i64, i64 } %t128) %t130 = call { ptr, i64, i64 } @finch.gen.load(ptr %t107, { ptr, i64, i64 } { ptr @.str.3138, i64 3, i64 0 }, { ptr, i64, i64 } %t129) store { ptr, i64, i64 } %t130, ptr %a131 %t132 = load ptr, ptr %a1 %t133 = load ptr, ptr %a1 %t134 = load { ptr, i64, i64 }, ptr %a131 store { ptr, i64, i64 } { ptr @.str.3142, i64 12, i64 0 }, ptr %a136 store { ptr, i64, i64 } %t134, ptr %a137 call void @finch_str_concat(ptr %a135, ptr %a136, ptr %a137) %t138 = load { ptr, i64, i64 }, ptr %a135 store { ptr, i64, i64 } %t138, ptr %a140 store { ptr, i64, i64 } { ptr @.str.3143, i64 2, i64 0 }, ptr %a141 call void @finch_str_concat(ptr %a139, ptr %a140, ptr %a141) %t142 = load { ptr, i64, i64 }, ptr %a139 %t143 = load { ptr, i64, i64 }, ptr %a53 store { ptr, i64, i64 } %t142, ptr %a145 store { ptr, i64, i64 } %t143, ptr %a146 call void @finch_str_concat(ptr %a144, ptr %a145, ptr %a146) %t147 = load { ptr, i64, i64 }, ptr %a144 %t148 = call { ptr, i64, i64 } @finch.gen.op(ptr %t133, { ptr, i64, i64 } %t147) %t149 = load { ptr, i64, i64 }, ptr %a103 %t150 = load { ptr, i64, i64 }, ptr %a106 call void @finch.gen.condBr(ptr %t132, { ptr, i64, i64 } %t148, { ptr, i64, i64 } %t149, { ptr, i64, i64 } %t150) %t151 = load ptr, ptr %a1 %t152 = load { ptr, i64, i64 }, ptr %a103 call void @finch.gen.label(ptr %t151, { ptr, i64, i64 } %t152) %t153 = load ptr, ptr %a1 %t154 = load ptr, ptr %a1 %t155 = load ptr, ptr %a1 %t156 = icmp eq ptr %t155, null br i1 %t156, label %panic4899, label %ok4900 panic4899: call void @finch_panic(ptr @.str.3145, i64 2279, ptr @.str.3146) unreachable ok4900: %t157 = getelementptr inbounds %S.gen.Gen, ptr %t155, i32 0, i32 1 %t158 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 %t159 = load i64, ptr %t158 %t160 = load { ptr, i64, i64 }, ptr %t157 %t161 = extractvalue { ptr, i64, i64 } %t160, 1 %t162 = icmp uge i64 %t159, %t161 br i1 %t162, label %range4901, label %inrange4902 range4901: call void @finch_panic_index(ptr @.str.3147, i64 2279, i64 %t159, i64 %t161) unreachable inrange4902: %t163 = extractvalue { ptr, i64, i64 } %t160, 0 %t164 = getelementptr inbounds { ptr, i64, i64 }, ptr %t163, i64 %t159 %t165 = load { ptr, i64, i64 }, ptr %t164 %t166 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t154, { ptr, i64, i64 } %t165) store { ptr, i64, i64 } { ptr @.str.3144, i64 33, i64 0 }, ptr %a168 store { ptr, i64, i64 } %t166, ptr %a169 call void @finch_str_concat(ptr %a167, ptr %a168, ptr %a169) %t170 = load { ptr, i64, i64 }, ptr %a167 store { ptr, i64, i64 } %t170, ptr %a172 store { ptr, i64, i64 } { ptr @.str.3148, i64 6, i64 0 }, ptr %a173 call void @finch_str_concat(ptr %a171, ptr %a172, ptr %a173) %t174 = load { ptr, i64, i64 }, ptr %a171 %t175 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 %t176 = load i64, ptr %t175 call void @finch_str_from_int(ptr %a177, i64 %t176) %t178 = load { ptr, i64, i64 }, ptr %a177 store { ptr, i64, i64 } %t174, ptr %a180 store { ptr, i64, i64 } %t178, ptr %a181 call void @finch_str_concat(ptr %a179, ptr %a180, ptr %a181) %t182 = load { ptr, i64, i64 }, ptr %a179 store { ptr, i64, i64 } %t182, ptr %a184 store { ptr, i64, i64 } { ptr @.str.3149, i64 1, i64 0 }, ptr %a185 call void @finch_str_concat(ptr %a183, ptr %a184, ptr %a185) %t186 = load { ptr, i64, i64 }, ptr %a183 call void @finch.gen.emit(ptr %t153, { ptr, i64, i64 } %t186) %t187 = load ptr, ptr %a1 call void @finch.gen.emit(ptr %t187, { ptr, i64, i64 } { ptr @.str.3150, i64 11, i64 0 }) %t188 = load ptr, ptr %a1 %t189 = icmp eq ptr %t188, null br i1 %t189, label %panic4903, label %ok4904 panic4903: call void @finch_panic(ptr @.str.3151, i64 2281, ptr @.str.3152) unreachable ok4904: %t190 = getelementptr inbounds %S.gen.Gen, ptr %t188, i32 0, i32 9 store i1 true, ptr %t190 %t191 = load ptr, ptr %a1 %t192 = load { ptr, i64, i64 }, ptr %a106 call void @finch.gen.label(ptr %t191, { ptr, i64, i64 } %t192) br label %endif4898 endif4898: %t193 = load ptr, ptr %a1 %t194 = load { ptr, i64, i64 }, ptr %a50 %t195 = call { ptr, i64, i64 } @finch.gen.load(ptr %t193, { ptr, i64, i64 } { ptr @.str.3153, i64 3, i64 0 }, { ptr, i64, i64 } %t194) store { ptr, i64, i64 } %t195, ptr %a196 %t197 = load ptr, ptr %a1 %t198 = load ptr, ptr %a1 %t199 = load ptr, ptr %a1 %t200 = load %S.ast.Type, ptr %a4 %t201 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t199, %S.ast.Type %t200) store { ptr, i64, i64 } { ptr @.str.3155, i64 23, i64 0 }, ptr %a203 store { ptr, i64, i64 } %t201, ptr %a204 call void @finch_str_concat(ptr %a202, ptr %a203, ptr %a204) %t205 = load { ptr, i64, i64 }, ptr %a202 store { ptr, i64, i64 } %t205, ptr %a207 store { ptr, i64, i64 } { ptr @.str.3156, i64 6, i64 0 }, ptr %a208 call void @finch_str_concat(ptr %a206, ptr %a207, ptr %a208) %t209 = load { ptr, i64, i64 }, ptr %a206 %t210 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t209, ptr %a212 store { ptr, i64, i64 } %t210, ptr %a213 call void @finch_str_concat(ptr %a211, ptr %a212, ptr %a213) %t214 = load { ptr, i64, i64 }, ptr %a211 store { ptr, i64, i64 } %t214, ptr %a216 store { ptr, i64, i64 } { ptr @.str.3157, i64 14, i64 0 }, ptr %a217 call void @finch_str_concat(ptr %a215, ptr %a216, ptr %a217) %t218 = load { ptr, i64, i64 }, ptr %a215 %t219 = call { ptr, i64, i64 } @finch.gen.op(ptr %t198, { ptr, i64, i64 } %t218) %t220 = call { ptr, i64, i64 } @finch.gen.load(ptr %t197, { ptr, i64, i64 } { ptr @.str.3154, i64 3, i64 0 }, { ptr, i64, i64 } %t219) store { ptr, i64, i64 } %t220, ptr %a221 %t222 = load ptr, ptr %a1 %t223 = load ptr, ptr %a1 %t224 = load { ptr, i64, i64 }, ptr %a196 store { ptr, i64, i64 } { ptr @.str.3158, i64 13, i64 0 }, ptr %a226 store { ptr, i64, i64 } %t224, ptr %a227 call void @finch_str_concat(ptr %a225, ptr %a226, ptr %a227) %t228 = load { ptr, i64, i64 }, ptr %a225 store { ptr, i64, i64 } %t228, ptr %a230 store { ptr, i64, i64 } { ptr @.str.3159, i64 2, i64 0 }, ptr %a231 call void @finch_str_concat(ptr %a229, ptr %a230, ptr %a231) %t232 = load { ptr, i64, i64 }, ptr %a229 %t233 = load { ptr, i64, i64 }, ptr %a221 store { ptr, i64, i64 } %t232, ptr %a235 store { ptr, i64, i64 } %t233, ptr %a236 call void @finch_str_concat(ptr %a234, ptr %a235, ptr %a236) %t237 = load { ptr, i64, i64 }, ptr %a234 %t238 = call { ptr, i64, i64 } @finch.gen.op(ptr %t223, { ptr, i64, i64 } %t237) %t239 = load { ptr, i64, i64 }, ptr %a84 %t240 = load { ptr, i64, i64 }, ptr %a93 call void @finch.gen.condBr(ptr %t222, { ptr, i64, i64 } %t238, { ptr, i64, i64 } %t239, { ptr, i64, i64 } %t240) %t241 = load ptr, ptr %a1 %t242 = load { ptr, i64, i64 }, ptr %a84 call void @finch.gen.label(ptr %t241, { ptr, i64, i64 } %t242) %t243 = load ptr, ptr %a1 %t244 = load { ptr, i64, i64 }, ptr %a3 %t245 = load %S.ast.Type, ptr %a4 %t246 = load { ptr, i64, i64 }, ptr %a196 %t247 = call { ptr, i64, i64 } @finch.gen.entryAt(ptr %t243, { ptr, i64, i64 } %t244, %S.ast.Type %t245, { ptr, i64, i64 } %t246) store { ptr, i64, i64 } %t247, ptr %a248 %t249 = load ptr, ptr %a1 %t250 = load ptr, ptr %a1 %t251 = load { ptr, i64, i64 }, ptr %a248 %t252 = load %S.ast.Type, ptr %a4 %t253 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t250, { ptr, i64, i64 } %t251, %S.ast.Type %t252, i64 0) %t254 = call { ptr, i64, i64 } @finch.gen.load(ptr %t249, { ptr, i64, i64 } { ptr @.str.3160, i64 3, i64 0 }, { ptr, i64, i64 } %t253) store { ptr, i64, i64 } %t254, ptr %a255 %t256 = load ptr, ptr %a1 %t257 = load ptr, ptr %a1 %t258 = load { ptr, i64, i64 }, ptr %a255 store { ptr, i64, i64 } { ptr @.str.3161, i64 12, i64 0 }, ptr %a260 store { ptr, i64, i64 } %t258, ptr %a261 call void @finch_str_concat(ptr %a259, ptr %a260, ptr %a261) %t262 = load { ptr, i64, i64 }, ptr %a259 store { ptr, i64, i64 } %t262, ptr %a264 store { ptr, i64, i64 } { ptr @.str.3162, i64 3, i64 0 }, ptr %a265 call void @finch_str_concat(ptr %a263, ptr %a264, ptr %a265) %t266 = load { ptr, i64, i64 }, ptr %a263 %t267 = call { ptr, i64, i64 } @finch.gen.op(ptr %t257, { ptr, i64, i64 } %t266) %t268 = load { ptr, i64, i64 }, ptr %a90 %t269 = load { ptr, i64, i64 }, ptr %a87 call void @finch.gen.condBr(ptr %t256, { ptr, i64, i64 } %t267, { ptr, i64, i64 } %t268, { ptr, i64, i64 } %t269) %t270 = load ptr, ptr %a1 %t271 = load { ptr, i64, i64 }, ptr %a87 call void @finch.gen.label(ptr %t270, { ptr, i64, i64 } %t271) %t272 = load ptr, ptr %a1 %t273 = icmp eq ptr %t272, null br i1 %t273, label %panic4905, label %ok4906 panic4905: call void @finch_panic(ptr @.str.3163, i64 2292, ptr @.str.3164) unreachable ok4906: %t274 = getelementptr inbounds %S.gen.Gen, ptr %t272, i32 0, i32 11 %t275 = getelementptr inbounds { ptr, i64, i64 }, ptr %t274, i32 0, i32 1 %t276 = load { ptr, i64, i64 }, ptr %a90 store { ptr, i64, i64 } %t276, ptr %a277 call void @finch_str_copy(ptr %a278, ptr %a277) %t279 = load { ptr, i64, i64 }, ptr %a278 %t280 = insertvalue %S.gen.Loop zeroinitializer, { ptr, i64, i64 } %t279, 0 %t281 = load { ptr, i64, i64 }, ptr %a93 store { ptr, i64, i64 } %t281, ptr %a282 call void @finch_str_copy(ptr %a283, ptr %a282) %t284 = load { ptr, i64, i64 }, ptr %a283 %t285 = insertvalue %S.gen.Loop %t280, { ptr, i64, i64 } %t284, 1 %t286 = load ptr, ptr %a1 %t287 = icmp eq ptr %t286, null br i1 %t287, label %panic4907, label %ok4908 panic4907: call void @finch_panic(ptr @.str.3165, i64 2292, ptr @.str.3166) unreachable ok4908: %t288 = getelementptr inbounds %S.gen.Gen, ptr %t286, i32 0, i32 10 %t289 = getelementptr inbounds { ptr, i64, i64 }, ptr %t288, i32 0, i32 1 %t290 = load i64, ptr %t289 %t291 = insertvalue %S.gen.Loop %t285, i64 %t290, 2 %t292 = load i64, ptr %t275 %t293 = add i64 %t292, 1 call void @finch_arr_reserve(ptr %t274, i64 %t293, i64 ptrtoint (ptr getelementptr (%S.gen.Loop, ptr null, i32 1) to i64)) %t294 = load ptr, ptr %t274 %t295 = getelementptr inbounds %S.gen.Loop, ptr %t294, i64 %t292 store %S.gen.Loop %t291, ptr %t295 store i64 %t293, ptr %t275 %t296 = load ptr, ptr %a1 call void @finch.gen.pushScope(ptr %t296) %t297 = load ptr, ptr %a1 %t298 = load ptr, ptr %a1 %t299 = load %S.ast.Type, ptr %a16 %t300 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t298, %S.ast.Type %t299) %t301 = load ptr, ptr %a1 %t302 = load { ptr, i64, i64 }, ptr %a248 %t303 = load %S.ast.Type, ptr %a4 %t304 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t301, { ptr, i64, i64 } %t302, %S.ast.Type %t303, i64 1) %t305 = call { ptr, i64, i64 } @finch.gen.load(ptr %t297, { ptr, i64, i64 } %t300, { ptr, i64, i64 } %t304) store { ptr, i64, i64 } %t305, ptr %a306 %t307 = load i1, ptr %a47 br i1 %t307, label %then4909, label %endif4911 then4909: %t308 = load ptr, ptr %a1 %t309 = load { ptr, i64, i64 }, ptr %a306 %t310 = load %S.ast.Type, ptr %a16 %t311 = call { ptr, i64, i64 } @finch.gen.copyValue(ptr %t308, { ptr, i64, i64 } %t309, %S.ast.Type %t310) store { ptr, i64, i64 } %t311, ptr %a306 br label %endif4911 endif4911: %t312 = load ptr, ptr %a1 %t313 = load %S.ast.Node, ptr %a2 %t314 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t315 = load { ptr, i64, i64 }, ptr %t314 %t316 = load %S.ast.Type, ptr %a16 %t317 = load { ptr, i64, i64 }, ptr %a306 %t318 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t312, %S.ast.Node %t313, { ptr, i64, i64 } %t315, %S.ast.Type %t316, { ptr, i64, i64 } %t317, i1 true) %t319 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 %t320 = getelementptr inbounds { ptr, i64, i64 }, ptr %t319, i32 0, i32 1 %t321 = load i64, ptr %t320 %t322 = icmp sgt i64 %t321, 0 br i1 %t322, label %then4912, label %endif4914 then4912: %t323 = load ptr, ptr %a1 %t324 = load ptr, ptr %a1 %t325 = load %S.ast.Type, ptr %a27 %t326 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t324, %S.ast.Type %t325) %t327 = load ptr, ptr %a1 %t328 = load { ptr, i64, i64 }, ptr %a248 %t329 = load %S.ast.Type, ptr %a4 %t330 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t327, { ptr, i64, i64 } %t328, %S.ast.Type %t329, i64 2) %t331 = call { ptr, i64, i64 } @finch.gen.load(ptr %t323, { ptr, i64, i64 } %t326, { ptr, i64, i64 } %t330) store { ptr, i64, i64 } %t331, ptr %a332 %t333 = load i1, ptr %a47 br i1 %t333, label %then4915, label %endif4917 then4915: %t334 = load ptr, ptr %a1 %t335 = load { ptr, i64, i64 }, ptr %a332 %t336 = load %S.ast.Type, ptr %a27 %t337 = call { ptr, i64, i64 } @finch.gen.copyValue(ptr %t334, { ptr, i64, i64 } %t335, %S.ast.Type %t336) store { ptr, i64, i64 } %t337, ptr %a332 br label %endif4917 endif4917: %t338 = load ptr, ptr %a1 %t339 = load %S.ast.Node, ptr %a2 %t340 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 %t341 = load { ptr, i64, i64 }, ptr %t340 %t342 = load %S.ast.Type, ptr %a27 %t343 = load { ptr, i64, i64 }, ptr %a332 %t344 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t338, %S.ast.Node %t339, { ptr, i64, i64 } %t341, %S.ast.Type %t342, { ptr, i64, i64 } %t343, i1 true) br label %endif4914 endif4914: %t345 = load ptr, ptr %a1 %t346 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t347 = load { ptr, i64, i64 }, ptr %t346 %t348 = extractvalue { ptr, i64, i64 } %t347, 1 %t349 = icmp uge i64 1, %t348 br i1 %t349, label %range4918, label %inrange4919 range4918: call void @finch_panic_index(ptr @.str.3167, i64 2306, i64 1, i64 %t348) unreachable inrange4919: %t350 = extractvalue { ptr, i64, i64 } %t347, 0 %t351 = getelementptr inbounds %S.ast.Node, ptr %t350, i64 1 %t352 = load %S.ast.Node, ptr %t351 call void @finch.gen.block(ptr %t345, %S.ast.Node %t352, i1 true) %t353 = load ptr, ptr %a1 call void @finch.gen.popScope(ptr %t353) %t354 = load ptr, ptr %a1 %t355 = icmp eq ptr %t354, null br i1 %t355, label %panic4920, label %ok4921 panic4920: call void @finch_panic(ptr @.str.3168, i64 2308, ptr @.str.3169) unreachable ok4921: %t356 = getelementptr inbounds %S.gen.Gen, ptr %t354, i32 0, i32 11 %t357 = getelementptr inbounds { ptr, i64, i64 }, ptr %t356, i32 0, i32 1 %t358 = load i64, ptr %t357 %t359 = icmp eq i64 %t358, 0 br i1 %t359, label %panic4922, label %ok4923 panic4922: call void @finch_panic(ptr @.str.3170, i64 2308, ptr @.str.3171) unreachable ok4923: %t360 = sub i64 %t358, 1 %t361 = load ptr, ptr %t356 %t362 = getelementptr inbounds %S.gen.Loop, ptr %t361, i64 %t360 %t363 = load %S.gen.Loop, ptr %t362 store i64 %t360, ptr %t357 %t364 = load ptr, ptr %a1 %t365 = load { ptr, i64, i64 }, ptr %a90 call void @finch.gen.br(ptr %t364, { ptr, i64, i64 } %t365) %t366 = load ptr, ptr %a1 %t367 = load { ptr, i64, i64 }, ptr %a90 call void @finch.gen.label(ptr %t366, { ptr, i64, i64 } %t367) %t368 = load ptr, ptr %a1 %t369 = load { ptr, i64, i64 }, ptr %a50 %t370 = call { ptr, i64, i64 } @finch.gen.load(ptr %t368, { ptr, i64, i64 } { ptr @.str.3172, i64 3, i64 0 }, { ptr, i64, i64 } %t369) store { ptr, i64, i64 } %t370, ptr %a371 %t372 = load ptr, ptr %a1 %t373 = load ptr, ptr %a1 %t374 = load { ptr, i64, i64 }, ptr %a371 store { ptr, i64, i64 } { ptr @.str.3174, i64 8, i64 0 }, ptr %a376 store { ptr, i64, i64 } %t374, ptr %a377 call void @finch_str_concat(ptr %a375, ptr %a376, ptr %a377) %t378 = load { ptr, i64, i64 }, ptr %a375 store { ptr, i64, i64 } %t378, ptr %a380 store { ptr, i64, i64 } { ptr @.str.3175, i64 3, i64 0 }, ptr %a381 call void @finch_str_concat(ptr %a379, ptr %a380, ptr %a381) %t382 = load { ptr, i64, i64 }, ptr %a379 %t383 = call { ptr, i64, i64 } @finch.gen.op(ptr %t373, { ptr, i64, i64 } %t382) %t384 = load { ptr, i64, i64 }, ptr %a50 call void @finch.gen.store(ptr %t372, { ptr, i64, i64 } { ptr @.str.3173, i64 3, i64 0 }, { ptr, i64, i64 } %t383, { ptr, i64, i64 } %t384) %t385 = load ptr, ptr %a1 %t386 = load { ptr, i64, i64 }, ptr %a81 call void @finch.gen.br(ptr %t385, { ptr, i64, i64 } %t386) %t387 = load ptr, ptr %a1 %t388 = load { ptr, i64, i64 }, ptr %a93 call void @finch.gen.label(ptr %t387, { ptr, i64, i64 } %t388) ret void } define internal void @finch.gen.eachStmt(ptr %p0, %S.ast.Node %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a13 = alloca %S.gen.Ref, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca %S.ast.Type, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca %S.ast.Type, align 16 %a29 = alloca %S.ast.Type, align 16 %a34 = alloca %S.ast.Type, align 16 %a35 = alloca %S.ast.Type, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca %S.ast.Type, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca %S.ast.Type, align 16 %a101 = alloca %S.ast.Type, align 16 %a127 = alloca i1, align 16 %a130 = alloca { ptr, i64, i64 }, align 16 %a135 = alloca { ptr, i64, i64 }, align 16 %a138 = alloca { ptr, i64, i64 }, align 16 %a141 = alloca { ptr, i64, i64 }, align 16 %a144 = alloca { ptr, i64, i64 }, align 16 %a152 = alloca { ptr, i64, i64 }, align 16 %a153 = alloca { ptr, i64, i64 }, align 16 %a154 = alloca { ptr, i64, i64 }, align 16 %a156 = alloca { ptr, i64, i64 }, align 16 %a157 = alloca { ptr, i64, i64 }, align 16 %a158 = alloca { ptr, i64, i64 }, align 16 %a162 = alloca { ptr, i64, i64 }, align 16 %a166 = alloca { ptr, i64, i64 }, align 16 %a169 = alloca { ptr, i64, i64 }, align 16 %a170 = alloca { ptr, i64, i64 }, align 16 %a171 = alloca { ptr, i64, i64 }, align 16 %a173 = alloca { ptr, i64, i64 }, align 16 %a174 = alloca { ptr, i64, i64 }, align 16 %a175 = alloca { ptr, i64, i64 }, align 16 %a178 = alloca { ptr, i64, i64 }, align 16 %a179 = alloca { ptr, i64, i64 }, align 16 %a180 = alloca { ptr, i64, i64 }, align 16 %a183 = alloca { ptr, i64, i64 }, align 16 %a193 = alloca { ptr, i64, i64 }, align 16 %a198 = alloca { ptr, i64, i64 }, align 16 %a199 = alloca { ptr, i64, i64 }, align 16 %a200 = alloca { ptr, i64, i64 }, align 16 %a202 = alloca { ptr, i64, i64 }, align 16 %a203 = alloca { ptr, i64, i64 }, align 16 %a204 = alloca { ptr, i64, i64 }, align 16 %a207 = alloca { ptr, i64, i64 }, align 16 %a208 = alloca { ptr, i64, i64 }, align 16 %a209 = alloca { ptr, i64, i64 }, align 16 %a211 = alloca { ptr, i64, i64 }, align 16 %a212 = alloca { ptr, i64, i64 }, align 16 %a213 = alloca { ptr, i64, i64 }, align 16 %a216 = alloca { ptr, i64, i64 }, align 16 %a217 = alloca { ptr, i64, i64 }, align 16 %a218 = alloca { ptr, i64, i64 }, align 16 %a221 = alloca { ptr, i64, i64 }, align 16 %a228 = alloca { ptr, i64, i64 }, align 16 %a239 = alloca { ptr, i64, i64 }, align 16 %a240 = alloca { ptr, i64, i64 }, align 16 %a244 = alloca { ptr, i64, i64 }, align 16 %a245 = alloca { ptr, i64, i64 }, align 16 %a261 = alloca { ptr, i64, i64 }, align 16 %a262 = alloca { ptr, i64, i64 }, align 16 %a264 = alloca { ptr, i64, i64 }, align 16 %a278 = alloca { ptr, i64, i64 }, align 16 %a279 = alloca { ptr, i64, i64 }, align 16 %a313 = alloca { ptr, i64, i64 }, align 16 %a317 = alloca { ptr, i64, i64 }, align 16 %a318 = alloca { ptr, i64, i64 }, align 16 %a319 = alloca { ptr, i64, i64 }, align 16 %a321 = alloca { ptr, i64, i64 }, align 16 %a322 = alloca { ptr, i64, i64 }, align 16 %a323 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 %t3 = load ptr, ptr %a1 call void @finch.gen.pushScope(ptr %t3) %t4 = load ptr, ptr %a1 %t5 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t6 = load { ptr, i64, i64 }, ptr %t5 %t7 = extractvalue { ptr, i64, i64 } %t6, 1 %t8 = icmp uge i64 0, %t7 br i1 %t8, label %range4924, label %inrange4925 range4924: call void @finch_panic_index(ptr @.str.3176, i64 2319, i64 0, i64 %t7) unreachable inrange4925: %t9 = extractvalue { ptr, i64, i64 } %t6, 0 %t10 = getelementptr inbounds %S.ast.Node, ptr %t9, i64 0 %t11 = load %S.ast.Node, ptr %t10 %t12 = call %S.gen.Ref @finch.gen.ref(ptr %t4, %S.ast.Node %t11, i1 false) store %S.gen.Ref %t12, ptr %a13 store { ptr, i64, i64 } { ptr @.str.3177, i64 0, i64 0 }, ptr %a14 %t15 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3178, i64 4, i64 0 }) store %S.ast.Type %t15, ptr %a16 %t17 = getelementptr inbounds %S.gen.Ref, ptr %a13, i32 0, i32 0 %t18 = load i1, ptr %t17 br i1 %t18, label %then4926, label %else4927 then4926: %t19 = getelementptr inbounds %S.gen.Ref, ptr %a13, i32 0, i32 1 %t20 = getelementptr inbounds %S.gen.Place, ptr %t19, i32 0, i32 0 %t21 = load { ptr, i64, i64 }, ptr %t20 store { ptr, i64, i64 } %t21, ptr %a22 call void @finch_str_copy(ptr %a23, ptr %a22) %t24 = load { ptr, i64, i64 }, ptr %a23 store { ptr, i64, i64 } %t24, ptr %a14 %t25 = getelementptr inbounds %S.gen.Ref, ptr %a13, i32 0, i32 1 %t26 = getelementptr inbounds %S.gen.Place, ptr %t25, i32 0, i32 1 %t27 = load %S.ast.Type, ptr %t26 store %S.ast.Type %t27, ptr %a28 call void @finch.copy.S_ast_Type(ptr %a29, ptr %a28) %t30 = load %S.ast.Type, ptr %a29 store %S.ast.Type %t30, ptr %a16 br label %endif4928 else4927: %t31 = getelementptr inbounds %S.gen.Ref, ptr %a13, i32 0, i32 2 %t32 = getelementptr inbounds %S.gen.Val, ptr %t31, i32 0, i32 1 %t33 = load %S.ast.Type, ptr %t32 store %S.ast.Type %t33, ptr %a34 call void @finch.copy.S_ast_Type(ptr %a35, ptr %a34) %t36 = load %S.ast.Type, ptr %a35 store %S.ast.Type %t36, ptr %a16 %t37 = load ptr, ptr %a1 %t38 = getelementptr inbounds %S.gen.Ref, ptr %a13, i32 0, i32 2 %t39 = load %S.gen.Val, ptr %t38 %t40 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t37, %S.gen.Val %t39) store { ptr, i64, i64 } %t40, ptr %a14 br label %endif4928 endif4928: %t41 = getelementptr inbounds %S.ast.Type, ptr %a16, i32 0, i32 0 %t42 = load { ptr, i64, i64 }, ptr %t41 store { ptr, i64, i64 } %t42, ptr %a43 store { ptr, i64, i64 } { ptr @.str.3179, i64 3, i64 0 }, ptr %a44 %t45 = call i32 @finch_str_eq(ptr %a43, ptr %a44) %t46 = icmp ne i32 %t45, 0 br i1 %t46, label %then4929, label %endif4931 then4929: %t47 = load ptr, ptr %a1 %t48 = load %S.ast.Node, ptr %a2 %t49 = load { ptr, i64, i64 }, ptr %a14 %t50 = load %S.ast.Type, ptr %a16 %t51 = getelementptr inbounds %S.gen.Ref, ptr %a13, i32 0, i32 0 %t52 = load i1, ptr %t51 call void @finch.gen.eachMap(ptr %t47, %S.ast.Node %t48, { ptr, i64, i64 } %t49, %S.ast.Type %t50, i1 %t52) %t53 = load ptr, ptr %a1 call void @finch.gen.popScope(ptr %t53) ret void endif4931: %t54 = getelementptr inbounds %S.ast.Type, ptr %a16, i32 0, i32 0 %t55 = load { ptr, i64, i64 }, ptr %t54 store { ptr, i64, i64 } %t55, ptr %a56 store { ptr, i64, i64 } { ptr @.str.3180, i64 5, i64 0 }, ptr %a57 %t58 = call i32 @finch_str_eq(ptr %a56, ptr %a57) %t59 = icmp eq i32 %t58, 0 br label %logic.from4932 logic.from4932: br i1 %t59, label %logic.rhs4933, label %logic.end4934 logic.rhs4933: %t60 = getelementptr inbounds %S.ast.Type, ptr %a16, i32 0, i32 0 %t61 = load { ptr, i64, i64 }, ptr %t60 store { ptr, i64, i64 } %t61, ptr %a62 store { ptr, i64, i64 } { ptr @.str.3181, i64 3, i64 0 }, ptr %a63 %t64 = call i32 @finch_str_eq(ptr %a62, ptr %a63) %t65 = icmp eq i32 %t64, 0 br label %logic.rend4935 logic.rend4935: br label %logic.end4934 logic.end4934: %t66 = phi i1 [ false, %logic.from4932 ], [ %t65, %logic.rend4935 ] br i1 %t66, label %then4936, label %endif4938 then4936: %t67 = load ptr, ptr %a1 %t68 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t69 = load { ptr, i64, i64 }, ptr %t68 %t70 = extractvalue { ptr, i64, i64 } %t69, 1 %t71 = icmp uge i64 0, %t70 br i1 %t71, label %range4939, label %inrange4940 range4939: call void @finch_panic_index(ptr @.str.3182, i64 2335, i64 0, i64 %t70) unreachable inrange4940: %t72 = extractvalue { ptr, i64, i64 } %t69, 0 %t73 = getelementptr inbounds %S.ast.Node, ptr %t72, i64 0 %t74 = load %S.ast.Node, ptr %t73 %t75 = load %S.ast.Type, ptr %a16 %t76 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t75) store { ptr, i64, i64 } { ptr @.str.3183, i64 55, i64 0 }, ptr %a78 store { ptr, i64, i64 } %t76, ptr %a79 call void @finch_str_concat(ptr %a77, ptr %a78, ptr %a79) %t80 = load { ptr, i64, i64 }, ptr %a77 store { ptr, i64, i64 } %t80, ptr %a82 store { ptr, i64, i64 } { ptr @.str.3184, i64 36, i64 0 }, ptr %a83 call void @finch_str_concat(ptr %a81, ptr %a82, ptr %a83) %t84 = load { ptr, i64, i64 }, ptr %a81 call void @finch.gen.fail(ptr %t67, %S.ast.Node %t74, { ptr, i64, i64 } %t84) br label %endif4938 endif4938: %t85 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3185, i64 4, i64 0 }) store %S.ast.Type %t85, ptr %a86 %t87 = getelementptr inbounds %S.ast.Type, ptr %a16, i32 0, i32 0 %t88 = load { ptr, i64, i64 }, ptr %t87 store { ptr, i64, i64 } %t88, ptr %a89 store { ptr, i64, i64 } { ptr @.str.3186, i64 5, i64 0 }, ptr %a90 %t91 = call i32 @finch_str_eq(ptr %a89, ptr %a90) %t92 = icmp ne i32 %t91, 0 br i1 %t92, label %then4941, label %endif4943 then4941: %t93 = getelementptr inbounds %S.ast.Type, ptr %a16, i32 0, i32 1 %t94 = load { ptr, i64, i64 }, ptr %t93 %t95 = extractvalue { ptr, i64, i64 } %t94, 1 %t96 = icmp uge i64 0, %t95 br i1 %t96, label %range4944, label %inrange4945 range4944: call void @finch_panic_index(ptr @.str.3187, i64 2339, i64 0, i64 %t95) unreachable inrange4945: %t97 = extractvalue { ptr, i64, i64 } %t94, 0 %t98 = getelementptr inbounds %S.ast.Type, ptr %t97, i64 0 %t99 = load %S.ast.Type, ptr %t98 store %S.ast.Type %t99, ptr %a100 call void @finch.copy.S_ast_Type(ptr %a101, ptr %a100) %t102 = load %S.ast.Type, ptr %a101 store %S.ast.Type %t102, ptr %a86 br label %endif4943 endif4943: %t103 = getelementptr inbounds %S.gen.Ref, ptr %a13, i32 0, i32 0 %t104 = load i1, ptr %t103 br label %logic.from4946 logic.from4946: br i1 %t104, label %logic.rhs4947, label %logic.end4948 logic.rhs4947: %t105 = load ptr, ptr %a1 %t106 = load %S.ast.Type, ptr %a86 %t107 = call i1 @finch.gen.owning(ptr %t105, %S.ast.Type %t106) br label %logic.rend4949 logic.rend4949: br label %logic.end4948 logic.end4948: %t108 = phi i1 [ false, %logic.from4946 ], [ %t107, %logic.rend4949 ] br label %logic.from4950 logic.from4950: br i1 %t108, label %logic.rhs4951, label %logic.end4952 logic.rhs4951: %t109 = load ptr, ptr %a1 %t110 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t111 = load { ptr, i64, i64 }, ptr %t110 %t112 = extractvalue { ptr, i64, i64 } %t111, 1 %t113 = icmp uge i64 0, %t112 br i1 %t113, label %range4953, label %inrange4954 range4953: call void @finch_panic_index(ptr @.str.3188, i64 2341, i64 0, i64 %t112) unreachable inrange4954: %t114 = extractvalue { ptr, i64, i64 } %t111, 0 %t115 = getelementptr inbounds %S.ast.Node, ptr %t114, i64 0 %t116 = load %S.ast.Node, ptr %t115 %t117 = call { ptr, i64, i64 } @finch.gen.rootVar(%S.ast.Node %t116) %t118 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t119 = load { ptr, i64, i64 }, ptr %t118 %t120 = extractvalue { ptr, i64, i64 } %t119, 1 %t121 = icmp uge i64 1, %t120 br i1 %t121, label %range4955, label %inrange4956 range4955: call void @finch_panic_index(ptr @.str.3189, i64 2341, i64 1, i64 %t120) unreachable inrange4956: %t122 = extractvalue { ptr, i64, i64 } %t119, 0 %t123 = getelementptr inbounds %S.ast.Node, ptr %t122, i64 1 %t124 = load %S.ast.Node, ptr %t123 %t125 = call i1 @finch.gen.mutates(ptr %t109, { ptr, i64, i64 } %t117, %S.ast.Node %t124) br label %logic.rend4957 logic.rend4957: br label %logic.end4952 logic.end4952: %t126 = phi i1 [ false, %logic.from4950 ], [ %t125, %logic.rend4957 ] store i1 %t126, ptr %a127 %t128 = load ptr, ptr %a1 %t129 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t128, { ptr, i64, i64 } { ptr @.str.3190, i64 3, i64 0 }) store { ptr, i64, i64 } %t129, ptr %a130 %t131 = load ptr, ptr %a1 %t132 = load { ptr, i64, i64 }, ptr %a130 call void @finch.gen.store(ptr %t131, { ptr, i64, i64 } { ptr @.str.3191, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.3192, i64 1, i64 0 }, { ptr, i64, i64 } %t132) %t133 = load ptr, ptr %a1 %t134 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t133, { ptr, i64, i64 } { ptr @.str.3193, i64 9, i64 0 }) store { ptr, i64, i64 } %t134, ptr %a135 %t136 = load ptr, ptr %a1 %t137 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t136, { ptr, i64, i64 } { ptr @.str.3194, i64 9, i64 0 }) store { ptr, i64, i64 } %t137, ptr %a138 %t139 = load ptr, ptr %a1 %t140 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t139, { ptr, i64, i64 } { ptr @.str.3195, i64 9, i64 0 }) store { ptr, i64, i64 } %t140, ptr %a141 %t142 = load ptr, ptr %a1 %t143 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t142, { ptr, i64, i64 } { ptr @.str.3196, i64 8, i64 0 }) store { ptr, i64, i64 } %t143, ptr %a144 %t145 = load ptr, ptr %a1 %t146 = load { ptr, i64, i64 }, ptr %a135 call void @finch.gen.br(ptr %t145, { ptr, i64, i64 } %t146) %t147 = load ptr, ptr %a1 %t148 = load { ptr, i64, i64 }, ptr %a135 call void @finch.gen.label(ptr %t147, { ptr, i64, i64 } %t148) %t149 = load ptr, ptr %a1 %t150 = load ptr, ptr %a1 %t151 = load { ptr, i64, i64 }, ptr %a14 store { ptr, i64, i64 } { ptr @.str.3198, i64 46, i64 0 }, ptr %a153 store { ptr, i64, i64 } %t151, ptr %a154 call void @finch_str_concat(ptr %a152, ptr %a153, ptr %a154) %t155 = load { ptr, i64, i64 }, ptr %a152 store { ptr, i64, i64 } %t155, ptr %a157 store { ptr, i64, i64 } { ptr @.str.3199, i64 14, i64 0 }, ptr %a158 call void @finch_str_concat(ptr %a156, ptr %a157, ptr %a158) %t159 = load { ptr, i64, i64 }, ptr %a156 %t160 = call { ptr, i64, i64 } @finch.gen.op(ptr %t150, { ptr, i64, i64 } %t159) %t161 = call { ptr, i64, i64 } @finch.gen.load(ptr %t149, { ptr, i64, i64 } { ptr @.str.3197, i64 3, i64 0 }, { ptr, i64, i64 } %t160) store { ptr, i64, i64 } %t161, ptr %a162 %t163 = load ptr, ptr %a1 %t164 = load { ptr, i64, i64 }, ptr %a130 %t165 = call { ptr, i64, i64 } @finch.gen.load(ptr %t163, { ptr, i64, i64 } { ptr @.str.3200, i64 3, i64 0 }, { ptr, i64, i64 } %t164) store { ptr, i64, i64 } %t165, ptr %a166 %t167 = load ptr, ptr %a1 %t168 = load { ptr, i64, i64 }, ptr %a166 store { ptr, i64, i64 } { ptr @.str.3201, i64 13, i64 0 }, ptr %a170 store { ptr, i64, i64 } %t168, ptr %a171 call void @finch_str_concat(ptr %a169, ptr %a170, ptr %a171) %t172 = load { ptr, i64, i64 }, ptr %a169 store { ptr, i64, i64 } %t172, ptr %a174 store { ptr, i64, i64 } { ptr @.str.3202, i64 2, i64 0 }, ptr %a175 call void @finch_str_concat(ptr %a173, ptr %a174, ptr %a175) %t176 = load { ptr, i64, i64 }, ptr %a173 %t177 = load { ptr, i64, i64 }, ptr %a162 store { ptr, i64, i64 } %t176, ptr %a179 store { ptr, i64, i64 } %t177, ptr %a180 call void @finch_str_concat(ptr %a178, ptr %a179, ptr %a180) %t181 = load { ptr, i64, i64 }, ptr %a178 %t182 = call { ptr, i64, i64 } @finch.gen.op(ptr %t167, { ptr, i64, i64 } %t181) store { ptr, i64, i64 } %t182, ptr %a183 %t184 = load ptr, ptr %a1 %t185 = load { ptr, i64, i64 }, ptr %a183 %t186 = load { ptr, i64, i64 }, ptr %a138 %t187 = load { ptr, i64, i64 }, ptr %a144 call void @finch.gen.condBr(ptr %t184, { ptr, i64, i64 } %t185, { ptr, i64, i64 } %t186, { ptr, i64, i64 } %t187) %t188 = load ptr, ptr %a1 %t189 = load { ptr, i64, i64 }, ptr %a138 call void @finch.gen.label(ptr %t188, { ptr, i64, i64 } %t189) %t190 = load ptr, ptr %a1 %t191 = load { ptr, i64, i64 }, ptr %a14 %t192 = call { ptr, i64, i64 } @finch.gen.load(ptr %t190, { ptr, i64, i64 } { ptr @.str.3203, i64 3, i64 0 }, { ptr, i64, i64 } %t191) store { ptr, i64, i64 } %t192, ptr %a193 %t194 = load ptr, ptr %a1 %t195 = load ptr, ptr %a1 %t196 = load %S.ast.Type, ptr %a86 %t197 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t195, %S.ast.Type %t196) store { ptr, i64, i64 } { ptr @.str.3204, i64 23, i64 0 }, ptr %a199 store { ptr, i64, i64 } %t197, ptr %a200 call void @finch_str_concat(ptr %a198, ptr %a199, ptr %a200) %t201 = load { ptr, i64, i64 }, ptr %a198 store { ptr, i64, i64 } %t201, ptr %a203 store { ptr, i64, i64 } { ptr @.str.3205, i64 6, i64 0 }, ptr %a204 call void @finch_str_concat(ptr %a202, ptr %a203, ptr %a204) %t205 = load { ptr, i64, i64 }, ptr %a202 %t206 = load { ptr, i64, i64 }, ptr %a193 store { ptr, i64, i64 } %t205, ptr %a208 store { ptr, i64, i64 } %t206, ptr %a209 call void @finch_str_concat(ptr %a207, ptr %a208, ptr %a209) %t210 = load { ptr, i64, i64 }, ptr %a207 store { ptr, i64, i64 } %t210, ptr %a212 store { ptr, i64, i64 } { ptr @.str.3206, i64 6, i64 0 }, ptr %a213 call void @finch_str_concat(ptr %a211, ptr %a212, ptr %a213) %t214 = load { ptr, i64, i64 }, ptr %a211 %t215 = load { ptr, i64, i64 }, ptr %a166 store { ptr, i64, i64 } %t214, ptr %a217 store { ptr, i64, i64 } %t215, ptr %a218 call void @finch_str_concat(ptr %a216, ptr %a217, ptr %a218) %t219 = load { ptr, i64, i64 }, ptr %a216 %t220 = call { ptr, i64, i64 } @finch.gen.op(ptr %t194, { ptr, i64, i64 } %t219) store { ptr, i64, i64 } %t220, ptr %a221 %t222 = load ptr, ptr %a1 %t223 = load ptr, ptr %a1 %t224 = load %S.ast.Type, ptr %a86 %t225 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t223, %S.ast.Type %t224) %t226 = load { ptr, i64, i64 }, ptr %a221 %t227 = call { ptr, i64, i64 } @finch.gen.load(ptr %t222, { ptr, i64, i64 } %t225, { ptr, i64, i64 } %t226) store { ptr, i64, i64 } %t227, ptr %a228 %t229 = load i1, ptr %a127 br i1 %t229, label %then4958, label %endif4960 then4958: %t230 = load ptr, ptr %a1 %t231 = load { ptr, i64, i64 }, ptr %a228 %t232 = load %S.ast.Type, ptr %a86 %t233 = call { ptr, i64, i64 } @finch.gen.copyValue(ptr %t230, { ptr, i64, i64 } %t231, %S.ast.Type %t232) store { ptr, i64, i64 } %t233, ptr %a228 br label %endif4960 endif4960: %t234 = load ptr, ptr %a1 %t235 = icmp eq ptr %t234, null br i1 %t235, label %panic4961, label %ok4962 panic4961: call void @finch_panic(ptr @.str.3207, i64 2361, ptr @.str.3208) unreachable ok4962: %t236 = getelementptr inbounds %S.gen.Gen, ptr %t234, i32 0, i32 11 %t237 = getelementptr inbounds { ptr, i64, i64 }, ptr %t236, i32 0, i32 1 %t238 = load { ptr, i64, i64 }, ptr %a141 store { ptr, i64, i64 } %t238, ptr %a239 call void @finch_str_copy(ptr %a240, ptr %a239) %t241 = load { ptr, i64, i64 }, ptr %a240 %t242 = insertvalue %S.gen.Loop zeroinitializer, { ptr, i64, i64 } %t241, 0 %t243 = load { ptr, i64, i64 }, ptr %a144 store { ptr, i64, i64 } %t243, ptr %a244 call void @finch_str_copy(ptr %a245, ptr %a244) %t246 = load { ptr, i64, i64 }, ptr %a245 %t247 = insertvalue %S.gen.Loop %t242, { ptr, i64, i64 } %t246, 1 %t248 = load ptr, ptr %a1 %t249 = icmp eq ptr %t248, null br i1 %t249, label %panic4963, label %ok4964 panic4963: call void @finch_panic(ptr @.str.3209, i64 2361, ptr @.str.3210) unreachable ok4964: %t250 = getelementptr inbounds %S.gen.Gen, ptr %t248, i32 0, i32 10 %t251 = getelementptr inbounds { ptr, i64, i64 }, ptr %t250, i32 0, i32 1 %t252 = load i64, ptr %t251 %t253 = insertvalue %S.gen.Loop %t247, i64 %t252, 2 %t254 = load i64, ptr %t237 %t255 = add i64 %t254, 1 call void @finch_arr_reserve(ptr %t236, i64 %t255, i64 ptrtoint (ptr getelementptr (%S.gen.Loop, ptr null, i32 1) to i64)) %t256 = load ptr, ptr %t236 %t257 = getelementptr inbounds %S.gen.Loop, ptr %t256, i64 %t254 store %S.gen.Loop %t253, ptr %t257 store i64 %t255, ptr %t237 %t258 = load ptr, ptr %a1 call void @finch.gen.pushScope(ptr %t258) %t259 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t260 = load { ptr, i64, i64 }, ptr %t259 store { ptr, i64, i64 } %t260, ptr %a261 call void @finch_str_copy(ptr %a262, ptr %a261) %t263 = load { ptr, i64, i64 }, ptr %a262 store { ptr, i64, i64 } %t263, ptr %a264 %t265 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 %t266 = getelementptr inbounds { ptr, i64, i64 }, ptr %t265, i32 0, i32 1 %t267 = load i64, ptr %t266 %t268 = icmp sgt i64 %t267, 0 br i1 %t268, label %then4965, label %endif4967 then4965: %t269 = load ptr, ptr %a1 %t270 = load %S.ast.Node, ptr %a2 %t271 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t272 = load { ptr, i64, i64 }, ptr %t271 %t273 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3211, i64 3, i64 0 }) %t274 = load { ptr, i64, i64 }, ptr %a166 %t275 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t269, %S.ast.Node %t270, { ptr, i64, i64 } %t272, %S.ast.Type %t273, { ptr, i64, i64 } %t274, i1 true) %t276 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 %t277 = load { ptr, i64, i64 }, ptr %t276 store { ptr, i64, i64 } %t277, ptr %a278 call void @finch_str_copy(ptr %a279, ptr %a278) %t280 = load { ptr, i64, i64 }, ptr %a279 store { ptr, i64, i64 } %t280, ptr %a264 br label %endif4967 endif4967: %t281 = load ptr, ptr %a1 %t282 = load %S.ast.Node, ptr %a2 %t283 = load { ptr, i64, i64 }, ptr %a264 %t284 = load %S.ast.Type, ptr %a86 %t285 = load { ptr, i64, i64 }, ptr %a228 %t286 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t281, %S.ast.Node %t282, { ptr, i64, i64 } %t283, %S.ast.Type %t284, { ptr, i64, i64 } %t285, i1 true) %t287 = load ptr, ptr %a1 %t288 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t289 = load { ptr, i64, i64 }, ptr %t288 %t290 = extractvalue { ptr, i64, i64 } %t289, 1 %t291 = icmp uge i64 1, %t290 br i1 %t291, label %range4968, label %inrange4969 range4968: call void @finch_panic_index(ptr @.str.3212, i64 2369, i64 1, i64 %t290) unreachable inrange4969: %t292 = extractvalue { ptr, i64, i64 } %t289, 0 %t293 = getelementptr inbounds %S.ast.Node, ptr %t292, i64 1 %t294 = load %S.ast.Node, ptr %t293 call void @finch.gen.block(ptr %t287, %S.ast.Node %t294, i1 true) %t295 = load ptr, ptr %a1 call void @finch.gen.popScope(ptr %t295) %t296 = load ptr, ptr %a1 %t297 = icmp eq ptr %t296, null br i1 %t297, label %panic4970, label %ok4971 panic4970: call void @finch_panic(ptr @.str.3213, i64 2371, ptr @.str.3214) unreachable ok4971: %t298 = getelementptr inbounds %S.gen.Gen, ptr %t296, i32 0, i32 11 %t299 = getelementptr inbounds { ptr, i64, i64 }, ptr %t298, i32 0, i32 1 %t300 = load i64, ptr %t299 %t301 = icmp eq i64 %t300, 0 br i1 %t301, label %panic4972, label %ok4973 panic4972: call void @finch_panic(ptr @.str.3215, i64 2371, ptr @.str.3216) unreachable ok4973: %t302 = sub i64 %t300, 1 %t303 = load ptr, ptr %t298 %t304 = getelementptr inbounds %S.gen.Loop, ptr %t303, i64 %t302 %t305 = load %S.gen.Loop, ptr %t304 store i64 %t302, ptr %t299 %t306 = load ptr, ptr %a1 %t307 = load { ptr, i64, i64 }, ptr %a141 call void @finch.gen.br(ptr %t306, { ptr, i64, i64 } %t307) %t308 = load ptr, ptr %a1 %t309 = load { ptr, i64, i64 }, ptr %a141 call void @finch.gen.label(ptr %t308, { ptr, i64, i64 } %t309) %t310 = load ptr, ptr %a1 %t311 = load { ptr, i64, i64 }, ptr %a130 %t312 = call { ptr, i64, i64 } @finch.gen.load(ptr %t310, { ptr, i64, i64 } { ptr @.str.3217, i64 3, i64 0 }, { ptr, i64, i64 } %t311) store { ptr, i64, i64 } %t312, ptr %a313 %t314 = load ptr, ptr %a1 %t315 = load ptr, ptr %a1 %t316 = load { ptr, i64, i64 }, ptr %a313 store { ptr, i64, i64 } { ptr @.str.3219, i64 8, i64 0 }, ptr %a318 store { ptr, i64, i64 } %t316, ptr %a319 call void @finch_str_concat(ptr %a317, ptr %a318, ptr %a319) %t320 = load { ptr, i64, i64 }, ptr %a317 store { ptr, i64, i64 } %t320, ptr %a322 store { ptr, i64, i64 } { ptr @.str.3220, i64 3, i64 0 }, ptr %a323 call void @finch_str_concat(ptr %a321, ptr %a322, ptr %a323) %t324 = load { ptr, i64, i64 }, ptr %a321 %t325 = call { ptr, i64, i64 } @finch.gen.op(ptr %t315, { ptr, i64, i64 } %t324) %t326 = load { ptr, i64, i64 }, ptr %a130 call void @finch.gen.store(ptr %t314, { ptr, i64, i64 } { ptr @.str.3218, i64 3, i64 0 }, { ptr, i64, i64 } %t325, { ptr, i64, i64 } %t326) %t327 = load ptr, ptr %a1 %t328 = load { ptr, i64, i64 }, ptr %a135 call void @finch.gen.br(ptr %t327, { ptr, i64, i64 } %t328) %t329 = load ptr, ptr %a1 %t330 = load { ptr, i64, i64 }, ptr %a144 call void @finch.gen.label(ptr %t329, { ptr, i64, i64 } %t330) %t331 = load ptr, ptr %a1 call void @finch.gen.popScope(ptr %t331) ret void } define internal void @finch.gen.returnStmt(ptr %p0, %S.ast.Node %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca %S.ast.Node, align 16 %a48 = alloca %S.ast.Node, align 16 %a50 = alloca %S.ast.Node, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a85 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca { ptr, i64, i64 }, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca { ptr, i64, i64 }, align 16 %a123 = alloca %S.gen.Val, align 16 %a127 = alloca { ptr, i64, i64 }, align 16 %a136 = alloca { ptr, i64, i64 }, align 16 %a137 = alloca { ptr, i64, i64 }, align 16 %a138 = alloca { ptr, i64, i64 }, align 16 %a140 = alloca { ptr, i64, i64 }, align 16 %a141 = alloca { ptr, i64, i64 }, align 16 %a142 = alloca { ptr, i64, i64 }, align 16 %a151 = alloca { ptr, i64, i64 }, align 16 %a152 = alloca { ptr, i64, i64 }, align 16 %a153 = alloca { ptr, i64, i64 }, align 16 %a155 = alloca { ptr, i64, i64 }, align 16 %a156 = alloca { ptr, i64, i64 }, align 16 %a157 = alloca { ptr, i64, i64 }, align 16 %a160 = alloca { ptr, i64, i64 }, align 16 %a161 = alloca { ptr, i64, i64 }, align 16 %a162 = alloca { ptr, i64, i64 }, align 16 %a164 = alloca { ptr, i64, i64 }, align 16 %a165 = alloca { ptr, i64, i64 }, align 16 %a166 = alloca { ptr, i64, i64 }, align 16 %a169 = alloca { ptr, i64, i64 }, align 16 %a170 = alloca { ptr, i64, i64 }, align 16 %a171 = alloca { ptr, i64, i64 }, align 16 %a182 = alloca { ptr, i64, i64 }, align 16 %a183 = alloca { ptr, i64, i64 }, align 16 %a203 = alloca { ptr, i64, i64 }, align 16 %a204 = alloca { ptr, i64, i64 }, align 16 %a205 = alloca { ptr, i64, i64 }, align 16 %a207 = alloca { ptr, i64, i64 }, align 16 %a208 = alloca { ptr, i64, i64 }, align 16 %a209 = alloca { ptr, i64, i64 }, align 16 %a224 = alloca { ptr, i64, i64 }, align 16 %a225 = alloca { ptr, i64, i64 }, align 16 %a226 = alloca { ptr, i64, i64 }, align 16 %a228 = alloca { ptr, i64, i64 }, align 16 %a229 = alloca { ptr, i64, i64 }, align 16 %a230 = alloca { ptr, i64, i64 }, align 16 %a247 = alloca { ptr, i64, i64 }, align 16 %a248 = alloca { ptr, i64, i64 }, align 16 %a249 = alloca { ptr, i64, i64 }, align 16 %a251 = alloca { ptr, i64, i64 }, align 16 %a252 = alloca { ptr, i64, i64 }, align 16 %a253 = alloca { ptr, i64, i64 }, align 16 %a261 = alloca { ptr, i64, i64 }, align 16 %a262 = alloca { ptr, i64, i64 }, align 16 %a263 = alloca { ptr, i64, i64 }, align 16 %a293 = alloca %S.gen.Val, align 16 %a296 = alloca { ptr, i64, i64 }, align 16 %a297 = alloca { ptr, i64, i64 }, align 16 %a299 = alloca { ptr, i64, i64 }, align 16 %a300 = alloca i1, align 16 %a309 = alloca { ptr, i64, i64 }, align 16 %a310 = alloca { ptr, i64, i64 }, align 16 %a323 = alloca i64, align 16 %a348 = alloca { ptr, i64, i64 }, align 16 %a349 = alloca { ptr, i64, i64 }, align 16 %a350 = alloca { ptr, i64, i64 }, align 16 %a352 = alloca { ptr, i64, i64 }, align 16 %a353 = alloca { ptr, i64, i64 }, align 16 %a354 = alloca { ptr, i64, i64 }, align 16 %a357 = alloca { ptr, i64, i64 }, align 16 %a365 = alloca { ptr, i64, i64 }, align 16 %a366 = alloca { ptr, i64, i64 }, align 16 %a367 = alloca { ptr, i64, i64 }, align 16 %a369 = alloca { ptr, i64, i64 }, align 16 %a370 = alloca { ptr, i64, i64 }, align 16 %a371 = alloca { ptr, i64, i64 }, align 16 %a374 = alloca { ptr, i64, i64 }, align 16 %a375 = alloca { ptr, i64, i64 }, align 16 %a376 = alloca { ptr, i64, i64 }, align 16 %a378 = alloca { ptr, i64, i64 }, align 16 %a379 = alloca { ptr, i64, i64 }, align 16 %a380 = alloca { ptr, i64, i64 }, align 16 %a389 = alloca { ptr, i64, i64 }, align 16 %a390 = alloca { ptr, i64, i64 }, align 16 %a391 = alloca { ptr, i64, i64 }, align 16 %a393 = alloca { ptr, i64, i64 }, align 16 %a394 = alloca { ptr, i64, i64 }, align 16 %a395 = alloca { ptr, i64, i64 }, align 16 %a398 = alloca { ptr, i64, i64 }, align 16 %a399 = alloca { ptr, i64, i64 }, align 16 %a400 = alloca { ptr, i64, i64 }, align 16 %a402 = alloca { ptr, i64, i64 }, align 16 %a403 = alloca { ptr, i64, i64 }, align 16 %a404 = alloca { ptr, i64, i64 }, align 16 %a407 = alloca { ptr, i64, i64 }, align 16 %a415 = alloca { ptr, i64, i64 }, align 16 %a416 = alloca { ptr, i64, i64 }, align 16 %a417 = alloca { ptr, i64, i64 }, align 16 %a419 = alloca { ptr, i64, i64 }, align 16 %a420 = alloca { ptr, i64, i64 }, align 16 %a421 = alloca { ptr, i64, i64 }, align 16 %a424 = alloca { ptr, i64, i64 }, align 16 %a425 = alloca { ptr, i64, i64 }, align 16 %a426 = alloca { ptr, i64, i64 }, align 16 %a436 = alloca { ptr, i64, i64 }, align 16 %a437 = alloca { ptr, i64, i64 }, align 16 %a438 = alloca { ptr, i64, i64 }, align 16 %a440 = alloca { ptr, i64, i64 }, align 16 %a441 = alloca { ptr, i64, i64 }, align 16 %a442 = alloca { ptr, i64, i64 }, align 16 %a445 = alloca { ptr, i64, i64 }, align 16 %a446 = alloca { ptr, i64, i64 }, align 16 %a447 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null br i1 %t4, label %panic4974, label %ok4975 panic4974: call void @finch_panic(ptr @.str.3221, i64 2382, ptr @.str.3222) unreachable ok4975: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 44 %t6 = load i64, ptr %t5 %t7 = icmp sgt i64 %t6, 0 br i1 %t7, label %then4976, label %endif4978 then4976: %t8 = load ptr, ptr %a1 %t9 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t8, %S.ast.Node %t9, { ptr, i64, i64 } { ptr @.str.3223, i64 33, i64 0 }) br label %endif4978 endif4978: %t10 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t10, i32 0, i32 1 %t12 = load i64, ptr %t11 %t13 = icmp sgt i64 %t12, 0 br label %logic.from4979 logic.from4979: br i1 %t13, label %logic.rhs4980, label %logic.end4981 logic.rhs4980: %t14 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t15 = load { ptr, i64, i64 }, ptr %t14 %t16 = extractvalue { ptr, i64, i64 } %t15, 1 %t17 = icmp uge i64 0, %t16 br i1 %t17, label %range4982, label %inrange4983 range4982: call void @finch_panic_index(ptr @.str.3224, i64 2386, i64 0, i64 %t16) unreachable inrange4983: %t18 = extractvalue { ptr, i64, i64 } %t15, 0 %t19 = getelementptr inbounds %S.ast.Node, ptr %t18, i64 0 %t20 = getelementptr inbounds %S.ast.Node, ptr %t19, i32 0, i32 0 %t21 = load { ptr, i64, i64 }, ptr %t20 store { ptr, i64, i64 } %t21, ptr %a22 store { ptr, i64, i64 } { ptr @.str.3225, i64 4, i64 0 }, ptr %a23 %t24 = call i32 @finch_str_eq(ptr %a22, ptr %a23) %t25 = icmp ne i32 %t24, 0 br label %logic.rend4984 logic.rend4984: br label %logic.end4981 logic.end4981: %t26 = phi i1 [ false, %logic.from4979 ], [ %t25, %logic.rend4984 ] br label %logic.from4985 logic.from4985: br i1 %t26, label %logic.rhs4986, label %logic.end4987 logic.rhs4986: %t27 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t28 = load { ptr, i64, i64 }, ptr %t27 %t29 = extractvalue { ptr, i64, i64 } %t28, 1 %t30 = icmp uge i64 0, %t29 br i1 %t30, label %range4988, label %inrange4989 range4988: call void @finch_panic_index(ptr @.str.3226, i64 2386, i64 0, i64 %t29) unreachable inrange4989: %t31 = extractvalue { ptr, i64, i64 } %t28, 0 %t32 = getelementptr inbounds %S.ast.Node, ptr %t31, i64 0 %t33 = getelementptr inbounds %S.ast.Node, ptr %t32, i32 0, i32 1 %t34 = load { ptr, i64, i64 }, ptr %t33 store { ptr, i64, i64 } %t34, ptr %a35 store { ptr, i64, i64 } { ptr @.str.3227, i64 5, i64 0 }, ptr %a36 %t37 = call i32 @finch_str_eq(ptr %a35, ptr %a36) %t38 = icmp ne i32 %t37, 0 br label %logic.rend4990 logic.rend4990: br label %logic.end4987 logic.end4987: %t39 = phi i1 [ false, %logic.from4985 ], [ %t38, %logic.rend4990 ] br i1 %t39, label %then4991, label %endif4993 then4991: %t40 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t41 = load { ptr, i64, i64 }, ptr %t40 %t42 = extractvalue { ptr, i64, i64 } %t41, 1 %t43 = icmp uge i64 0, %t42 br i1 %t43, label %range4994, label %inrange4995 range4994: call void @finch_panic_index(ptr @.str.3228, i64 2387, i64 0, i64 %t42) unreachable inrange4995: %t44 = extractvalue { ptr, i64, i64 } %t41, 0 %t45 = getelementptr inbounds %S.ast.Node, ptr %t44, i64 0 %t46 = load %S.ast.Node, ptr %t45 store %S.ast.Node %t46, ptr %a47 call void @finch.copy.S_ast_Node(ptr %a48, ptr %a47) %t49 = load %S.ast.Node, ptr %a48 store %S.ast.Node %t49, ptr %a50 %t51 = load ptr, ptr %a1 %t52 = icmp eq ptr %t51, null br i1 %t52, label %panic4996, label %ok4997 panic4996: call void @finch_panic(ptr @.str.3229, i64 2388, ptr @.str.3230) unreachable ok4997: %t53 = getelementptr inbounds %S.gen.Gen, ptr %t51, i32 0, i32 12 %t54 = getelementptr inbounds %S.gen.FnSig, ptr %t53, i32 0, i32 9 %t55 = load i1, ptr %t54 %t56 = xor i1 %t55, true br i1 %t56, label %then4998, label %endif5000 then4998: store { ptr, i64, i64 } { ptr @.str.3231, i64 1, i64 0 }, ptr %a57 %t58 = load ptr, ptr %a1 %t59 = icmp eq ptr %t58, null br i1 %t59, label %panic5001, label %ok5002 panic5001: call void @finch_panic(ptr @.str.3232, i64 2390, ptr @.str.3233) unreachable ok5002: %t60 = getelementptr inbounds %S.gen.Gen, ptr %t58, i32 0, i32 12 %t61 = getelementptr inbounds %S.gen.FnSig, ptr %t60, i32 0, i32 12 %t62 = getelementptr inbounds %S.ast.Type, ptr %t61, i32 0, i32 0 %t63 = load { ptr, i64, i64 }, ptr %t62 store { ptr, i64, i64 } %t63, ptr %a64 store { ptr, i64, i64 } { ptr @.str.3234, i64 4, i64 0 }, ptr %a65 %t66 = call i32 @finch_str_eq(ptr %a64, ptr %a65) %t67 = icmp eq i32 %t66, 0 br i1 %t67, label %then5003, label %endif5005 then5003: %t68 = load ptr, ptr %a1 %t69 = icmp eq ptr %t68, null br i1 %t69, label %panic5006, label %ok5007 panic5006: call void @finch_panic(ptr @.str.3235, i64 2391, ptr @.str.3236) unreachable ok5007: %t70 = getelementptr inbounds %S.gen.Gen, ptr %t68, i32 0, i32 12 %t71 = getelementptr inbounds %S.gen.FnSig, ptr %t70, i32 0, i32 12 %t72 = load %S.ast.Type, ptr %t71 %t73 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t72) store { ptr, i64, i64 } %t73, ptr %a75 store { ptr, i64, i64 } { ptr @.str.3237, i64 1, i64 0 }, ptr %a76 call void @finch_str_concat(ptr %a74, ptr %a75, ptr %a76) %t77 = load { ptr, i64, i64 }, ptr %a74 store { ptr, i64, i64 } %t77, ptr %a57 br label %endif5005 endif5005: %t78 = load ptr, ptr %a1 %t79 = load %S.ast.Node, ptr %a50 %t80 = load ptr, ptr %a1 %t81 = icmp eq ptr %t80, null br i1 %t81, label %panic5008, label %ok5009 panic5008: call void @finch_panic(ptr @.str.3239, i64 2393, ptr @.str.3240) unreachable ok5009: %t82 = getelementptr inbounds %S.gen.Gen, ptr %t80, i32 0, i32 12 %t83 = getelementptr inbounds %S.gen.FnSig, ptr %t82, i32 0, i32 1 %t84 = load { ptr, i64, i64 }, ptr %t83 store { ptr, i64, i64 } { ptr @.str.3238, i64 1, i64 0 }, ptr %a86 store { ptr, i64, i64 } %t84, ptr %a87 call void @finch_str_concat(ptr %a85, ptr %a86, ptr %a87) %t88 = load { ptr, i64, i64 }, ptr %a85 store { ptr, i64, i64 } %t88, ptr %a90 store { ptr, i64, i64 } { ptr @.str.3241, i64 64, i64 0 }, ptr %a91 call void @finch_str_concat(ptr %a89, ptr %a90, ptr %a91) %t92 = load { ptr, i64, i64 }, ptr %a89 %t93 = load { ptr, i64, i64 }, ptr %a57 store { ptr, i64, i64 } %t92, ptr %a95 store { ptr, i64, i64 } %t93, ptr %a96 call void @finch_str_concat(ptr %a94, ptr %a95, ptr %a96) %t97 = load { ptr, i64, i64 }, ptr %a94 store { ptr, i64, i64 } %t97, ptr %a99 store { ptr, i64, i64 } { ptr @.str.3242, i64 1, i64 0 }, ptr %a100 call void @finch_str_concat(ptr %a98, ptr %a99, ptr %a100) %t101 = load { ptr, i64, i64 }, ptr %a98 call void @finch.gen.fail(ptr %t78, %S.ast.Node %t79, { ptr, i64, i64 } %t101) br label %endif5000 endif5000: %t102 = load ptr, ptr %a1 %t103 = load %S.ast.Node, ptr %a50 call void @finch.gen.checkArgs(ptr %t102, %S.ast.Node %t103, i64 0, i64 1, { ptr, i64, i64 } { ptr @.str.3243, i64 5, i64 0 }) %t104 = load ptr, ptr %a1 %t105 = load ptr, ptr %a1 %t106 = getelementptr inbounds %S.ast.Node, ptr %a50, i32 0, i32 9 %t107 = load { ptr, i64, i64 }, ptr %t106 %t108 = extractvalue { ptr, i64, i64 } %t107, 1 %t109 = icmp uge i64 0, %t108 br i1 %t109, label %range5010, label %inrange5011 range5010: call void @finch_panic_index(ptr @.str.3244, i64 2396, i64 0, i64 %t108) unreachable inrange5011: %t110 = extractvalue { ptr, i64, i64 } %t107, 0 %t111 = getelementptr inbounds %S.ast.Node, ptr %t110, i64 0 %t112 = load %S.ast.Node, ptr %t111 %t113 = call %S.gen.Val @finch.gen.expr(ptr %t105, %S.ast.Node %t112) %t114 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3245, i64 3, i64 0 }) %t115 = getelementptr inbounds %S.ast.Node, ptr %a50, i32 0, i32 9 %t116 = load { ptr, i64, i64 }, ptr %t115 %t117 = extractvalue { ptr, i64, i64 } %t116, 1 %t118 = icmp uge i64 0, %t117 br i1 %t118, label %range5012, label %inrange5013 range5012: call void @finch_panic_index(ptr @.str.3246, i64 2396, i64 0, i64 %t117) unreachable inrange5013: %t119 = extractvalue { ptr, i64, i64 } %t116, 0 %t120 = getelementptr inbounds %S.ast.Node, ptr %t119, i64 0 %t121 = load %S.ast.Node, ptr %t120 %t122 = call %S.gen.Val @finch.gen.coerce(ptr %t104, %S.gen.Val %t113, %S.ast.Type %t114, %S.ast.Node %t121, { ptr, i64, i64 } { ptr @.str.3247, i64 17, i64 0 }) store %S.gen.Val %t122, ptr %a123 %t124 = load ptr, ptr %a1 %t125 = load %S.gen.Val, ptr %a123 %t126 = call { ptr, i64, i64 } @finch.gen.own(ptr %t124, %S.gen.Val %t125) store { ptr, i64, i64 } %t126, ptr %a127 %t128 = load ptr, ptr %a1 call void @finch.gen.unwind(ptr %t128, i64 0) %t129 = load ptr, ptr %a1 %t130 = load ptr, ptr %a1 %t131 = load ptr, ptr %a1 %t132 = icmp eq ptr %t131, null br i1 %t132, label %panic5014, label %ok5015 panic5014: call void @finch_panic(ptr @.str.3249, i64 2399, ptr @.str.3250) unreachable ok5015: %t133 = getelementptr inbounds %S.gen.Gen, ptr %t131, i32 0, i32 12 %t134 = load %S.gen.FnSig, ptr %t133 %t135 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t130, %S.gen.FnSig %t134) store { ptr, i64, i64 } { ptr @.str.3248, i64 4, i64 0 }, ptr %a137 store { ptr, i64, i64 } %t135, ptr %a138 call void @finch_str_concat(ptr %a136, ptr %a137, ptr %a138) %t139 = load { ptr, i64, i64 }, ptr %a136 store { ptr, i64, i64 } %t139, ptr %a141 store { ptr, i64, i64 } { ptr @.str.3251, i64 1, i64 0 }, ptr %a142 call void @finch_str_concat(ptr %a140, ptr %a141, ptr %a142) %t143 = load { ptr, i64, i64 }, ptr %a140 %t144 = load ptr, ptr %a1 %t145 = load ptr, ptr %a1 %t146 = load ptr, ptr %a1 %t147 = icmp eq ptr %t146, null br i1 %t147, label %panic5016, label %ok5017 panic5016: call void @finch_panic(ptr @.str.3253, i64 2399, ptr @.str.3254) unreachable ok5017: %t148 = getelementptr inbounds %S.gen.Gen, ptr %t146, i32 0, i32 12 %t149 = load %S.gen.FnSig, ptr %t148 %t150 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t145, %S.gen.FnSig %t149) store { ptr, i64, i64 } { ptr @.str.3252, i64 12, i64 0 }, ptr %a152 store { ptr, i64, i64 } %t150, ptr %a153 call void @finch_str_concat(ptr %a151, ptr %a152, ptr %a153) %t154 = load { ptr, i64, i64 }, ptr %a151 store { ptr, i64, i64 } %t154, ptr %a156 store { ptr, i64, i64 } { ptr @.str.3255, i64 36, i64 0 }, ptr %a157 call void @finch_str_concat(ptr %a155, ptr %a156, ptr %a157) %t158 = load { ptr, i64, i64 }, ptr %a155 %t159 = load { ptr, i64, i64 }, ptr %a127 store { ptr, i64, i64 } %t158, ptr %a161 store { ptr, i64, i64 } %t159, ptr %a162 call void @finch_str_concat(ptr %a160, ptr %a161, ptr %a162) %t163 = load { ptr, i64, i64 }, ptr %a160 store { ptr, i64, i64 } %t163, ptr %a165 store { ptr, i64, i64 } { ptr @.str.3256, i64 3, i64 0 }, ptr %a166 call void @finch_str_concat(ptr %a164, ptr %a165, ptr %a166) %t167 = load { ptr, i64, i64 }, ptr %a164 %t168 = call { ptr, i64, i64 } @finch.gen.op(ptr %t144, { ptr, i64, i64 } %t167) store { ptr, i64, i64 } %t143, ptr %a170 store { ptr, i64, i64 } %t168, ptr %a171 call void @finch_str_concat(ptr %a169, ptr %a170, ptr %a171) %t172 = load { ptr, i64, i64 }, ptr %a169 call void @finch.gen.emit(ptr %t129, { ptr, i64, i64 } %t172) %t173 = load ptr, ptr %a1 %t174 = icmp eq ptr %t173, null br i1 %t174, label %panic5018, label %ok5019 panic5018: call void @finch_panic(ptr @.str.3257, i64 2400, ptr @.str.3258) unreachable ok5019: %t175 = getelementptr inbounds %S.gen.Gen, ptr %t173, i32 0, i32 9 store i1 true, ptr %t175 ret void endif4993: %t176 = load ptr, ptr %a1 %t177 = icmp eq ptr %t176, null br i1 %t177, label %panic5020, label %ok5021 panic5020: call void @finch_panic(ptr @.str.3259, i64 2403, ptr @.str.3260) unreachable ok5021: %t178 = getelementptr inbounds %S.gen.Gen, ptr %t176, i32 0, i32 12 %t179 = getelementptr inbounds %S.gen.FnSig, ptr %t178, i32 0, i32 12 %t180 = getelementptr inbounds %S.ast.Type, ptr %t179, i32 0, i32 0 %t181 = load { ptr, i64, i64 }, ptr %t180 store { ptr, i64, i64 } %t181, ptr %a182 store { ptr, i64, i64 } { ptr @.str.3261, i64 4, i64 0 }, ptr %a183 %t184 = call i32 @finch_str_eq(ptr %a182, ptr %a183) %t185 = icmp ne i32 %t184, 0 br i1 %t185, label %then5022, label %endif5024 then5022: %t186 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t187 = getelementptr inbounds { ptr, i64, i64 }, ptr %t186, i32 0, i32 1 %t188 = load i64, ptr %t187 %t189 = icmp sgt i64 %t188, 0 br i1 %t189, label %then5025, label %endif5027 then5025: %t190 = load ptr, ptr %a1 %t191 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t192 = load { ptr, i64, i64 }, ptr %t191 %t193 = extractvalue { ptr, i64, i64 } %t192, 1 %t194 = icmp uge i64 0, %t193 br i1 %t194, label %range5028, label %inrange5029 range5028: call void @finch_panic_index(ptr @.str.3262, i64 2405, i64 0, i64 %t193) unreachable inrange5029: %t195 = extractvalue { ptr, i64, i64 } %t192, 0 %t196 = getelementptr inbounds %S.ast.Node, ptr %t195, i64 0 %t197 = load %S.ast.Node, ptr %t196 %t198 = load ptr, ptr %a1 %t199 = icmp eq ptr %t198, null br i1 %t199, label %panic5030, label %ok5031 panic5030: call void @finch_panic(ptr @.str.3264, i64 2405, ptr @.str.3265) unreachable ok5031: %t200 = getelementptr inbounds %S.gen.Gen, ptr %t198, i32 0, i32 12 %t201 = getelementptr inbounds %S.gen.FnSig, ptr %t200, i32 0, i32 1 %t202 = load { ptr, i64, i64 }, ptr %t201 store { ptr, i64, i64 } { ptr @.str.3263, i64 1, i64 0 }, ptr %a204 store { ptr, i64, i64 } %t202, ptr %a205 call void @finch_str_concat(ptr %a203, ptr %a204, ptr %a205) %t206 = load { ptr, i64, i64 }, ptr %a203 store { ptr, i64, i64 } %t206, ptr %a208 store { ptr, i64, i64 } { ptr @.str.3266, i64 46, i64 0 }, ptr %a209 call void @finch_str_concat(ptr %a207, ptr %a208, ptr %a209) %t210 = load { ptr, i64, i64 }, ptr %a207 call void @finch.gen.fail(ptr %t190, %S.ast.Node %t197, { ptr, i64, i64 } %t210) br label %endif5027 endif5027: %t211 = load ptr, ptr %a1 call void @finch.gen.unwind(ptr %t211, i64 0) %t212 = load ptr, ptr %a1 %t213 = icmp eq ptr %t212, null br i1 %t213, label %panic5032, label %ok5033 panic5032: call void @finch_panic(ptr @.str.3267, i64 2408, ptr @.str.3268) unreachable ok5033: %t214 = getelementptr inbounds %S.gen.Gen, ptr %t212, i32 0, i32 12 %t215 = getelementptr inbounds %S.gen.FnSig, ptr %t214, i32 0, i32 9 %t216 = load i1, ptr %t215 br i1 %t216, label %then5034, label %else5035 then5034: %t217 = load ptr, ptr %a1 %t218 = load ptr, ptr %a1 %t219 = load ptr, ptr %a1 %t220 = icmp eq ptr %t219, null br i1 %t220, label %panic5037, label %ok5038 panic5037: call void @finch_panic(ptr @.str.3270, i64 2409, ptr @.str.3271) unreachable ok5038: %t221 = getelementptr inbounds %S.gen.Gen, ptr %t219, i32 0, i32 12 %t222 = load %S.gen.FnSig, ptr %t221 %t223 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t218, %S.gen.FnSig %t222) store { ptr, i64, i64 } { ptr @.str.3269, i64 4, i64 0 }, ptr %a225 store { ptr, i64, i64 } %t223, ptr %a226 call void @finch_str_concat(ptr %a224, ptr %a225, ptr %a226) %t227 = load { ptr, i64, i64 }, ptr %a224 store { ptr, i64, i64 } %t227, ptr %a229 store { ptr, i64, i64 } { ptr @.str.3272, i64 53, i64 0 }, ptr %a230 call void @finch_str_concat(ptr %a228, ptr %a229, ptr %a230) %t231 = load { ptr, i64, i64 }, ptr %a228 call void @finch.gen.emit(ptr %t217, { ptr, i64, i64 } %t231) br label %endif5036 else5035: %t232 = load ptr, ptr %a1 call void @finch.gen.emit(ptr %t232, { ptr, i64, i64 } { ptr @.str.3273, i64 8, i64 0 }) br label %endif5036 endif5036: %t233 = load ptr, ptr %a1 %t234 = icmp eq ptr %t233, null br i1 %t234, label %panic5039, label %ok5040 panic5039: call void @finch_panic(ptr @.str.3274, i64 2413, ptr @.str.3275) unreachable ok5040: %t235 = getelementptr inbounds %S.gen.Gen, ptr %t233, i32 0, i32 9 store i1 true, ptr %t235 ret void endif5024: %t236 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t237 = getelementptr inbounds { ptr, i64, i64 }, ptr %t236, i32 0, i32 1 %t238 = load i64, ptr %t237 %t239 = icmp eq i64 %t238, 0 br i1 %t239, label %then5041, label %endif5043 then5041: %t240 = load ptr, ptr %a1 %t241 = load %S.ast.Node, ptr %a2 %t242 = load ptr, ptr %a1 %t243 = icmp eq ptr %t242, null br i1 %t243, label %panic5044, label %ok5045 panic5044: call void @finch_panic(ptr @.str.3277, i64 2417, ptr @.str.3278) unreachable ok5045: %t244 = getelementptr inbounds %S.gen.Gen, ptr %t242, i32 0, i32 12 %t245 = getelementptr inbounds %S.gen.FnSig, ptr %t244, i32 0, i32 1 %t246 = load { ptr, i64, i64 }, ptr %t245 store { ptr, i64, i64 } { ptr @.str.3276, i64 1, i64 0 }, ptr %a248 store { ptr, i64, i64 } %t246, ptr %a249 call void @finch_str_concat(ptr %a247, ptr %a248, ptr %a249) %t250 = load { ptr, i64, i64 }, ptr %a247 store { ptr, i64, i64 } %t250, ptr %a252 store { ptr, i64, i64 } { ptr @.str.3279, i64 14, i64 0 }, ptr %a253 call void @finch_str_concat(ptr %a251, ptr %a252, ptr %a253) %t254 = load { ptr, i64, i64 }, ptr %a251 %t255 = load ptr, ptr %a1 %t256 = icmp eq ptr %t255, null br i1 %t256, label %panic5046, label %ok5047 panic5046: call void @finch_panic(ptr @.str.3280, i64 2417, ptr @.str.3281) unreachable ok5047: %t257 = getelementptr inbounds %S.gen.Gen, ptr %t255, i32 0, i32 12 %t258 = getelementptr inbounds %S.gen.FnSig, ptr %t257, i32 0, i32 12 %t259 = load %S.ast.Type, ptr %t258 %t260 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t259) store { ptr, i64, i64 } %t254, ptr %a262 store { ptr, i64, i64 } %t260, ptr %a263 call void @finch_str_concat(ptr %a261, ptr %a262, ptr %a263) %t264 = load { ptr, i64, i64 }, ptr %a261 call void @finch.gen.fail(ptr %t240, %S.ast.Node %t241, { ptr, i64, i64 } %t264) br label %endif5043 endif5043: %t265 = load ptr, ptr %a1 %t266 = load ptr, ptr %a1 %t267 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t268 = load { ptr, i64, i64 }, ptr %t267 %t269 = extractvalue { ptr, i64, i64 } %t268, 1 %t270 = icmp uge i64 0, %t269 br i1 %t270, label %range5048, label %inrange5049 range5048: call void @finch_panic_index(ptr @.str.3282, i64 2419, i64 0, i64 %t269) unreachable inrange5049: %t271 = extractvalue { ptr, i64, i64 } %t268, 0 %t272 = getelementptr inbounds %S.ast.Node, ptr %t271, i64 0 %t273 = load %S.ast.Node, ptr %t272 %t274 = load ptr, ptr %a1 %t275 = icmp eq ptr %t274, null br i1 %t275, label %panic5050, label %ok5051 panic5050: call void @finch_panic(ptr @.str.3283, i64 2419, ptr @.str.3284) unreachable ok5051: %t276 = getelementptr inbounds %S.gen.Gen, ptr %t274, i32 0, i32 12 %t277 = getelementptr inbounds %S.gen.FnSig, ptr %t276, i32 0, i32 12 %t278 = load %S.ast.Type, ptr %t277 %t279 = call %S.gen.Val @finch.gen.exprWant(ptr %t266, %S.ast.Node %t273, %S.ast.Type %t278) %t280 = load ptr, ptr %a1 %t281 = icmp eq ptr %t280, null br i1 %t281, label %panic5052, label %ok5053 panic5052: call void @finch_panic(ptr @.str.3285, i64 2419, ptr @.str.3286) unreachable ok5053: %t282 = getelementptr inbounds %S.gen.Gen, ptr %t280, i32 0, i32 12 %t283 = getelementptr inbounds %S.gen.FnSig, ptr %t282, i32 0, i32 12 %t284 = load %S.ast.Type, ptr %t283 %t285 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t286 = load { ptr, i64, i64 }, ptr %t285 %t287 = extractvalue { ptr, i64, i64 } %t286, 1 %t288 = icmp uge i64 0, %t287 br i1 %t288, label %range5054, label %inrange5055 range5054: call void @finch_panic_index(ptr @.str.3287, i64 2419, i64 0, i64 %t287) unreachable inrange5055: %t289 = extractvalue { ptr, i64, i64 } %t286, 0 %t290 = getelementptr inbounds %S.ast.Node, ptr %t289, i64 0 %t291 = load %S.ast.Node, ptr %t290 %t292 = call %S.gen.Val @finch.gen.coerce(ptr %t265, %S.gen.Val %t279, %S.ast.Type %t284, %S.ast.Node %t291, { ptr, i64, i64 } { ptr @.str.3288, i64 18, i64 0 }) store %S.gen.Val %t292, ptr %a293 %t294 = getelementptr inbounds %S.gen.Val, ptr %a293, i32 0, i32 0 %t295 = load { ptr, i64, i64 }, ptr %t294 store { ptr, i64, i64 } %t295, ptr %a296 call void @finch_str_copy(ptr %a297, ptr %a296) %t298 = load { ptr, i64, i64 }, ptr %a297 store { ptr, i64, i64 } %t298, ptr %a299 store i1 false, ptr %a300 %t301 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t302 = load { ptr, i64, i64 }, ptr %t301 %t303 = extractvalue { ptr, i64, i64 } %t302, 1 %t304 = icmp uge i64 0, %t303 br i1 %t304, label %range5056, label %inrange5057 range5056: call void @finch_panic_index(ptr @.str.3289, i64 2423, i64 0, i64 %t303) unreachable inrange5057: %t305 = extractvalue { ptr, i64, i64 } %t302, 0 %t306 = getelementptr inbounds %S.ast.Node, ptr %t305, i64 0 %t307 = getelementptr inbounds %S.ast.Node, ptr %t306, i32 0, i32 0 %t308 = load { ptr, i64, i64 }, ptr %t307 store { ptr, i64, i64 } %t308, ptr %a309 store { ptr, i64, i64 } { ptr @.str.3290, i64 3, i64 0 }, ptr %a310 %t311 = call i32 @finch_str_eq(ptr %a309, ptr %a310) %t312 = icmp ne i32 %t311, 0 br i1 %t312, label %then5058, label %endif5060 then5058: %t313 = load ptr, ptr %a1 %t314 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t315 = load { ptr, i64, i64 }, ptr %t314 %t316 = extractvalue { ptr, i64, i64 } %t315, 1 %t317 = icmp uge i64 0, %t316 br i1 %t317, label %range5061, label %inrange5062 range5061: call void @finch_panic_index(ptr @.str.3291, i64 2424, i64 0, i64 %t316) unreachable inrange5062: %t318 = extractvalue { ptr, i64, i64 } %t315, 0 %t319 = getelementptr inbounds %S.ast.Node, ptr %t318, i64 0 %t320 = getelementptr inbounds %S.ast.Node, ptr %t319, i32 0, i32 1 %t321 = load { ptr, i64, i64 }, ptr %t320 %t322 = call i64 @finch.gen.lookup(ptr %t313, { ptr, i64, i64 } %t321) store i64 %t322, ptr %a323 %t324 = load i64, ptr %a323 %t325 = icmp sge i64 %t324, 0 br label %logic.from5063 logic.from5063: br i1 %t325, label %logic.rhs5064, label %logic.end5065 logic.rhs5064: %t326 = load i64, ptr %a323 %t327 = sdiv i64 %t326, 100000 %t328 = icmp sgt i64 %t327, 0 br label %logic.rend5066 logic.rend5066: br label %logic.end5065 logic.end5065: %t329 = phi i1 [ false, %logic.from5063 ], [ %t328, %logic.rend5066 ] store i1 %t329, ptr %a300 br label %endif5060 endif5060: %t330 = load i1, ptr %a300 %t331 = xor i1 %t330, true br i1 %t331, label %then5067, label %endif5069 then5067: %t332 = load ptr, ptr %a1 %t333 = load %S.gen.Val, ptr %a293 %t334 = call { ptr, i64, i64 } @finch.gen.own(ptr %t332, %S.gen.Val %t333) store { ptr, i64, i64 } %t334, ptr %a299 br label %endif5069 endif5069: %t335 = load ptr, ptr %a1 call void @finch.gen.unwind(ptr %t335, i64 0) %t336 = load ptr, ptr %a1 %t337 = icmp eq ptr %t336, null br i1 %t337, label %panic5070, label %ok5071 panic5070: call void @finch_panic(ptr @.str.3292, i64 2431, ptr @.str.3293) unreachable ok5071: %t338 = getelementptr inbounds %S.gen.Gen, ptr %t336, i32 0, i32 12 %t339 = getelementptr inbounds %S.gen.FnSig, ptr %t338, i32 0, i32 9 %t340 = load i1, ptr %t339 br i1 %t340, label %then5072, label %else5073 then5072: %t341 = load ptr, ptr %a1 %t342 = load ptr, ptr %a1 %t343 = load ptr, ptr %a1 %t344 = icmp eq ptr %t343, null br i1 %t344, label %panic5075, label %ok5076 panic5075: call void @finch_panic(ptr @.str.3295, i64 2432, ptr @.str.3296) unreachable ok5076: %t345 = getelementptr inbounds %S.gen.Gen, ptr %t343, i32 0, i32 12 %t346 = load %S.gen.FnSig, ptr %t345 %t347 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t342, %S.gen.FnSig %t346) store { ptr, i64, i64 } { ptr @.str.3294, i64 12, i64 0 }, ptr %a349 store { ptr, i64, i64 } %t347, ptr %a350 call void @finch_str_concat(ptr %a348, ptr %a349, ptr %a350) %t351 = load { ptr, i64, i64 }, ptr %a348 store { ptr, i64, i64 } %t351, ptr %a353 store { ptr, i64, i64 } { ptr @.str.3297, i64 28, i64 0 }, ptr %a354 call void @finch_str_concat(ptr %a352, ptr %a353, ptr %a354) %t355 = load { ptr, i64, i64 }, ptr %a352 %t356 = call { ptr, i64, i64 } @finch.gen.op(ptr %t341, { ptr, i64, i64 } %t355) store { ptr, i64, i64 } %t356, ptr %a357 %t358 = load ptr, ptr %a1 %t359 = load ptr, ptr %a1 %t360 = load ptr, ptr %a1 %t361 = icmp eq ptr %t360, null br i1 %t361, label %panic5077, label %ok5078 panic5077: call void @finch_panic(ptr @.str.3299, i64 2433, ptr @.str.3300) unreachable ok5078: %t362 = getelementptr inbounds %S.gen.Gen, ptr %t360, i32 0, i32 12 %t363 = load %S.gen.FnSig, ptr %t362 %t364 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t359, %S.gen.FnSig %t363) store { ptr, i64, i64 } { ptr @.str.3298, i64 12, i64 0 }, ptr %a366 store { ptr, i64, i64 } %t364, ptr %a367 call void @finch_str_concat(ptr %a365, ptr %a366, ptr %a367) %t368 = load { ptr, i64, i64 }, ptr %a365 store { ptr, i64, i64 } %t368, ptr %a370 store { ptr, i64, i64 } { ptr @.str.3301, i64 1, i64 0 }, ptr %a371 call void @finch_str_concat(ptr %a369, ptr %a370, ptr %a371) %t372 = load { ptr, i64, i64 }, ptr %a369 %t373 = load { ptr, i64, i64 }, ptr %a357 store { ptr, i64, i64 } %t372, ptr %a375 store { ptr, i64, i64 } %t373, ptr %a376 call void @finch_str_concat(ptr %a374, ptr %a375, ptr %a376) %t377 = load { ptr, i64, i64 }, ptr %a374 store { ptr, i64, i64 } %t377, ptr %a379 store { ptr, i64, i64 } { ptr @.str.3302, i64 2, i64 0 }, ptr %a380 call void @finch_str_concat(ptr %a378, ptr %a379, ptr %a380) %t381 = load { ptr, i64, i64 }, ptr %a378 %t382 = load ptr, ptr %a1 %t383 = load ptr, ptr %a1 %t384 = icmp eq ptr %t383, null br i1 %t384, label %panic5079, label %ok5080 panic5079: call void @finch_panic(ptr @.str.3303, i64 2433, ptr @.str.3304) unreachable ok5080: %t385 = getelementptr inbounds %S.gen.Gen, ptr %t383, i32 0, i32 12 %t386 = getelementptr inbounds %S.gen.FnSig, ptr %t385, i32 0, i32 12 %t387 = load %S.ast.Type, ptr %t386 %t388 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t382, %S.ast.Type %t387) store { ptr, i64, i64 } %t381, ptr %a390 store { ptr, i64, i64 } %t388, ptr %a391 call void @finch_str_concat(ptr %a389, ptr %a390, ptr %a391) %t392 = load { ptr, i64, i64 }, ptr %a389 store { ptr, i64, i64 } %t392, ptr %a394 store { ptr, i64, i64 } { ptr @.str.3305, i64 1, i64 0 }, ptr %a395 call void @finch_str_concat(ptr %a393, ptr %a394, ptr %a395) %t396 = load { ptr, i64, i64 }, ptr %a393 %t397 = load { ptr, i64, i64 }, ptr %a299 store { ptr, i64, i64 } %t396, ptr %a399 store { ptr, i64, i64 } %t397, ptr %a400 call void @finch_str_concat(ptr %a398, ptr %a399, ptr %a400) %t401 = load { ptr, i64, i64 }, ptr %a398 store { ptr, i64, i64 } %t401, ptr %a403 store { ptr, i64, i64 } { ptr @.str.3306, i64 3, i64 0 }, ptr %a404 call void @finch_str_concat(ptr %a402, ptr %a403, ptr %a404) %t405 = load { ptr, i64, i64 }, ptr %a402 %t406 = call { ptr, i64, i64 } @finch.gen.op(ptr %t358, { ptr, i64, i64 } %t405) store { ptr, i64, i64 } %t406, ptr %a407 %t408 = load ptr, ptr %a1 %t409 = load ptr, ptr %a1 %t410 = load ptr, ptr %a1 %t411 = icmp eq ptr %t410, null br i1 %t411, label %panic5081, label %ok5082 panic5081: call void @finch_panic(ptr @.str.3308, i64 2434, ptr @.str.3309) unreachable ok5082: %t412 = getelementptr inbounds %S.gen.Gen, ptr %t410, i32 0, i32 12 %t413 = load %S.gen.FnSig, ptr %t412 %t414 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t409, %S.gen.FnSig %t413) store { ptr, i64, i64 } { ptr @.str.3307, i64 4, i64 0 }, ptr %a416 store { ptr, i64, i64 } %t414, ptr %a417 call void @finch_str_concat(ptr %a415, ptr %a416, ptr %a417) %t418 = load { ptr, i64, i64 }, ptr %a415 store { ptr, i64, i64 } %t418, ptr %a420 store { ptr, i64, i64 } { ptr @.str.3310, i64 1, i64 0 }, ptr %a421 call void @finch_str_concat(ptr %a419, ptr %a420, ptr %a421) %t422 = load { ptr, i64, i64 }, ptr %a419 %t423 = load { ptr, i64, i64 }, ptr %a407 store { ptr, i64, i64 } %t422, ptr %a425 store { ptr, i64, i64 } %t423, ptr %a426 call void @finch_str_concat(ptr %a424, ptr %a425, ptr %a426) %t427 = load { ptr, i64, i64 }, ptr %a424 call void @finch.gen.emit(ptr %t408, { ptr, i64, i64 } %t427) br label %endif5074 else5073: %t428 = load ptr, ptr %a1 %t429 = load ptr, ptr %a1 %t430 = load ptr, ptr %a1 %t431 = icmp eq ptr %t430, null br i1 %t431, label %panic5083, label %ok5084 panic5083: call void @finch_panic(ptr @.str.3312, i64 2436, ptr @.str.3313) unreachable ok5084: %t432 = getelementptr inbounds %S.gen.Gen, ptr %t430, i32 0, i32 12 %t433 = getelementptr inbounds %S.gen.FnSig, ptr %t432, i32 0, i32 12 %t434 = load %S.ast.Type, ptr %t433 %t435 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t429, %S.ast.Type %t434) store { ptr, i64, i64 } { ptr @.str.3311, i64 4, i64 0 }, ptr %a437 store { ptr, i64, i64 } %t435, ptr %a438 call void @finch_str_concat(ptr %a436, ptr %a437, ptr %a438) %t439 = load { ptr, i64, i64 }, ptr %a436 store { ptr, i64, i64 } %t439, ptr %a441 store { ptr, i64, i64 } { ptr @.str.3314, i64 1, i64 0 }, ptr %a442 call void @finch_str_concat(ptr %a440, ptr %a441, ptr %a442) %t443 = load { ptr, i64, i64 }, ptr %a440 %t444 = load { ptr, i64, i64 }, ptr %a299 store { ptr, i64, i64 } %t443, ptr %a446 store { ptr, i64, i64 } %t444, ptr %a447 call void @finch_str_concat(ptr %a445, ptr %a446, ptr %a447) %t448 = load { ptr, i64, i64 }, ptr %a445 call void @finch.gen.emit(ptr %t428, { ptr, i64, i64 } %t448) br label %endif5074 endif5074: %t449 = load ptr, ptr %a1 %t450 = icmp eq ptr %t449, null br i1 %t450, label %panic5085, label %ok5086 panic5085: call void @finch_panic(ptr @.str.3315, i64 2438, ptr @.str.3316) unreachable ok5086: %t451 = getelementptr inbounds %S.gen.Gen, ptr %t449, i32 0, i32 9 store i1 true, ptr %t451 ret void } define internal { ptr, i64, i64 } @finch.gen.entryTy(ptr %p0, %S.ast.Type %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Type, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Type %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t5 = load { ptr, i64, i64 }, ptr %t4 %t6 = extractvalue { ptr, i64, i64 } %t5, 1 %t7 = icmp uge i64 0, %t6 br i1 %t7, label %range5087, label %inrange5088 range5087: call void @finch_panic_index(ptr @.str.3318, i64 2450, i64 0, i64 %t6) unreachable inrange5088: %t8 = extractvalue { ptr, i64, i64 } %t5, 0 %t9 = getelementptr inbounds %S.ast.Type, ptr %t8, i64 0 %t10 = load %S.ast.Type, ptr %t9 %t11 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t3, %S.ast.Type %t10) store { ptr, i64, i64 } { ptr @.str.3317, i64 7, i64 0 }, ptr %a13 store { ptr, i64, i64 } %t11, ptr %a14 call void @finch_str_concat(ptr %a12, ptr %a13, ptr %a14) %t15 = load { ptr, i64, i64 }, ptr %a12 store { ptr, i64, i64 } %t15, ptr %a17 store { ptr, i64, i64 } { ptr @.str.3319, i64 2, i64 0 }, ptr %a18 call void @finch_str_concat(ptr %a16, ptr %a17, ptr %a18) %t19 = load { ptr, i64, i64 }, ptr %a16 %t20 = load ptr, ptr %a1 %t21 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t22 = load { ptr, i64, i64 }, ptr %t21 %t23 = extractvalue { ptr, i64, i64 } %t22, 1 %t24 = icmp uge i64 1, %t23 br i1 %t24, label %range5089, label %inrange5090 range5089: call void @finch_panic_index(ptr @.str.3320, i64 2450, i64 1, i64 %t23) unreachable inrange5090: %t25 = extractvalue { ptr, i64, i64 } %t22, 0 %t26 = getelementptr inbounds %S.ast.Type, ptr %t25, i64 1 %t27 = load %S.ast.Type, ptr %t26 %t28 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t20, %S.ast.Type %t27) store { ptr, i64, i64 } %t19, ptr %a30 store { ptr, i64, i64 } %t28, ptr %a31 call void @finch_str_concat(ptr %a29, ptr %a30, ptr %a31) %t32 = load { ptr, i64, i64 }, ptr %a29 store { ptr, i64, i64 } %t32, ptr %a34 store { ptr, i64, i64 } { ptr @.str.3321, i64 2, i64 0 }, ptr %a35 call void @finch_str_concat(ptr %a33, ptr %a34, ptr %a35) %t36 = load { ptr, i64, i64 }, ptr %a33 ret { ptr, i64, i64 } %t36 } define internal { ptr, i64, i64 } @finch.gen.entrySize(ptr %p0, %S.ast.Type %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Type, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Type %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = load %S.ast.Type, ptr %a2 %t5 = call { ptr, i64, i64 } @finch.gen.entryTy(ptr %t3, %S.ast.Type %t4) store { ptr, i64, i64 } { ptr @.str.3322, i64 29, i64 0 }, ptr %a7 store { ptr, i64, i64 } %t5, ptr %a8 call void @finch_str_concat(ptr %a6, ptr %a7, ptr %a8) %t9 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t9, ptr %a11 store { ptr, i64, i64 } { ptr @.str.3323, i64 26, i64 0 }, ptr %a12 call void @finch_str_concat(ptr %a10, ptr %a11, ptr %a12) %t13 = load { ptr, i64, i64 }, ptr %a10 ret { ptr, i64, i64 } %t13 } define internal { ptr, i64, i64 } @finch.gen.entryAt(ptr %p0, { ptr, i64, i64 } %p1, %S.ast.Type %p2, { ptr, i64, i64 } %p3) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca %S.ast.Type, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store %S.ast.Type %p2, ptr %a3 store { ptr, i64, i64 } %p3, ptr %a4 %t5 = load ptr, ptr %a1 %t6 = load ptr, ptr %a1 %t7 = load ptr, ptr %a1 %t8 = load %S.ast.Type, ptr %a3 %t9 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t7, %S.ast.Type %t8) store { ptr, i64, i64 } { ptr @.str.3325, i64 23, i64 0 }, ptr %a11 store { ptr, i64, i64 } %t9, ptr %a12 call void @finch_str_concat(ptr %a10, ptr %a11, ptr %a12) %t13 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t13, ptr %a15 store { ptr, i64, i64 } { ptr @.str.3326, i64 6, i64 0 }, ptr %a16 call void @finch_str_concat(ptr %a14, ptr %a15, ptr %a16) %t17 = load { ptr, i64, i64 }, ptr %a14 %t18 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t17, ptr %a20 store { ptr, i64, i64 } %t18, ptr %a21 call void @finch_str_concat(ptr %a19, ptr %a20, ptr %a21) %t22 = load { ptr, i64, i64 }, ptr %a19 store { ptr, i64, i64 } %t22, ptr %a24 store { ptr, i64, i64 } { ptr @.str.3327, i64 14, i64 0 }, ptr %a25 call void @finch_str_concat(ptr %a23, ptr %a24, ptr %a25) %t26 = load { ptr, i64, i64 }, ptr %a23 %t27 = call { ptr, i64, i64 } @finch.gen.op(ptr %t6, { ptr, i64, i64 } %t26) %t28 = call { ptr, i64, i64 } @finch.gen.load(ptr %t5, { ptr, i64, i64 } { ptr @.str.3324, i64 3, i64 0 }, { ptr, i64, i64 } %t27) store { ptr, i64, i64 } %t28, ptr %a29 %t30 = load ptr, ptr %a1 %t31 = load ptr, ptr %a1 %t32 = load %S.ast.Type, ptr %a3 %t33 = call { ptr, i64, i64 } @finch.gen.entryTy(ptr %t31, %S.ast.Type %t32) store { ptr, i64, i64 } { ptr @.str.3328, i64 23, i64 0 }, ptr %a35 store { ptr, i64, i64 } %t33, ptr %a36 call void @finch_str_concat(ptr %a34, ptr %a35, ptr %a36) %t37 = load { ptr, i64, i64 }, ptr %a34 store { ptr, i64, i64 } %t37, ptr %a39 store { ptr, i64, i64 } { ptr @.str.3329, i64 6, i64 0 }, ptr %a40 call void @finch_str_concat(ptr %a38, ptr %a39, ptr %a40) %t41 = load { ptr, i64, i64 }, ptr %a38 %t42 = load { ptr, i64, i64 }, ptr %a29 store { ptr, i64, i64 } %t41, ptr %a44 store { ptr, i64, i64 } %t42, ptr %a45 call void @finch_str_concat(ptr %a43, ptr %a44, ptr %a45) %t46 = load { ptr, i64, i64 }, ptr %a43 store { ptr, i64, i64 } %t46, ptr %a48 store { ptr, i64, i64 } { ptr @.str.3330, i64 6, i64 0 }, ptr %a49 call void @finch_str_concat(ptr %a47, ptr %a48, ptr %a49) %t50 = load { ptr, i64, i64 }, ptr %a47 %t51 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t50, ptr %a53 store { ptr, i64, i64 } %t51, ptr %a54 call void @finch_str_concat(ptr %a52, ptr %a53, ptr %a54) %t55 = load { ptr, i64, i64 }, ptr %a52 %t56 = call { ptr, i64, i64 } @finch.gen.op(ptr %t30, { ptr, i64, i64 } %t55) ret { ptr, i64, i64 } %t56 } define internal { ptr, i64, i64 } @finch.gen.entryField(ptr %p0, { ptr, i64, i64 } %p1, %S.ast.Type %p2, i64 %p3) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca %S.ast.Type, align 16 %a4 = alloca i64, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store %S.ast.Type %p2, ptr %a3 store i64 %p3, ptr %a4 %t5 = load ptr, ptr %a1 %t6 = load ptr, ptr %a1 %t7 = load %S.ast.Type, ptr %a3 %t8 = call { ptr, i64, i64 } @finch.gen.entryTy(ptr %t6, %S.ast.Type %t7) store { ptr, i64, i64 } { ptr @.str.3331, i64 23, i64 0 }, ptr %a10 store { ptr, i64, i64 } %t8, ptr %a11 call void @finch_str_concat(ptr %a9, ptr %a10, ptr %a11) %t12 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t12, ptr %a14 store { ptr, i64, i64 } { ptr @.str.3332, i64 6, i64 0 }, ptr %a15 call void @finch_str_concat(ptr %a13, ptr %a14, ptr %a15) %t16 = load { ptr, i64, i64 }, ptr %a13 %t17 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t16, ptr %a19 store { ptr, i64, i64 } %t17, ptr %a20 call void @finch_str_concat(ptr %a18, ptr %a19, ptr %a20) %t21 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t21, ptr %a23 store { ptr, i64, i64 } { ptr @.str.3333, i64 13, i64 0 }, ptr %a24 call void @finch_str_concat(ptr %a22, ptr %a23, ptr %a24) %t25 = load { ptr, i64, i64 }, ptr %a22 %t26 = load i64, ptr %a4 call void @finch_str_from_int(ptr %a27, i64 %t26) %t28 = load { ptr, i64, i64 }, ptr %a27 store { ptr, i64, i64 } %t25, ptr %a30 store { ptr, i64, i64 } %t28, ptr %a31 call void @finch_str_concat(ptr %a29, ptr %a30, ptr %a31) %t32 = load { ptr, i64, i64 }, ptr %a29 %t33 = call { ptr, i64, i64 } @finch.gen.op(ptr %t5, { ptr, i64, i64 } %t32) ret { ptr, i64, i64 } %t33 } define internal { ptr, i64, i64 } @finch.gen.mapArgs(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, %S.ast.Type %p3) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca %S.ast.Type, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 store %S.ast.Type %p3, ptr %a4 store { ptr, i64, i64 } { ptr @.str.3334, i64 1, i64 0 }, ptr %a5 %t6 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 1 %t7 = load { ptr, i64, i64 }, ptr %t6 %t8 = extractvalue { ptr, i64, i64 } %t7, 1 %t9 = icmp uge i64 0, %t8 br i1 %t9, label %range5091, label %inrange5092 range5091: call void @finch_panic_index(ptr @.str.3335, i64 2470, i64 0, i64 %t8) unreachable inrange5092: %t10 = extractvalue { ptr, i64, i64 } %t7, 0 %t11 = getelementptr inbounds %S.ast.Type, ptr %t10, i64 0 %t12 = getelementptr inbounds %S.ast.Type, ptr %t11, i32 0, i32 0 %t13 = load { ptr, i64, i64 }, ptr %t12 store { ptr, i64, i64 } %t13, ptr %a14 store { ptr, i64, i64 } { ptr @.str.3336, i64 3, i64 0 }, ptr %a15 %t16 = call i32 @finch_str_eq(ptr %a14, ptr %a15) %t17 = icmp ne i32 %t16, 0 br i1 %t17, label %then5093, label %endif5095 then5093: store { ptr, i64, i64 } { ptr @.str.3337, i64 1, i64 0 }, ptr %a5 br label %endif5095 endif5095: %t18 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.3338, i64 4, i64 0 }, ptr %a20 store { ptr, i64, i64 } %t18, ptr %a21 call void @finch_str_concat(ptr %a19, ptr %a20, ptr %a21) %t22 = load { ptr, i64, i64 }, ptr %a19 store { ptr, i64, i64 } %t22, ptr %a24 store { ptr, i64, i64 } { ptr @.str.3339, i64 6, i64 0 }, ptr %a25 call void @finch_str_concat(ptr %a23, ptr %a24, ptr %a25) %t26 = load { ptr, i64, i64 }, ptr %a23 %t27 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t26, ptr %a29 store { ptr, i64, i64 } %t27, ptr %a30 call void @finch_str_concat(ptr %a28, ptr %a29, ptr %a30) %t31 = load { ptr, i64, i64 }, ptr %a28 store { ptr, i64, i64 } %t31, ptr %a33 store { ptr, i64, i64 } { ptr @.str.3340, i64 6, i64 0 }, ptr %a34 call void @finch_str_concat(ptr %a32, ptr %a33, ptr %a34) %t35 = load { ptr, i64, i64 }, ptr %a32 %t36 = load ptr, ptr %a1 %t37 = load %S.ast.Type, ptr %a4 %t38 = call { ptr, i64, i64 } @finch.gen.entrySize(ptr %t36, %S.ast.Type %t37) store { ptr, i64, i64 } %t35, ptr %a40 store { ptr, i64, i64 } %t38, ptr %a41 call void @finch_str_concat(ptr %a39, ptr %a40, ptr %a41) %t42 = load { ptr, i64, i64 }, ptr %a39 store { ptr, i64, i64 } %t42, ptr %a44 store { ptr, i64, i64 } { ptr @.str.3341, i64 6, i64 0 }, ptr %a45 call void @finch_str_concat(ptr %a43, ptr %a44, ptr %a45) %t46 = load { ptr, i64, i64 }, ptr %a43 %t47 = load ptr, ptr %a1 %t48 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 1 %t49 = load { ptr, i64, i64 }, ptr %t48 %t50 = extractvalue { ptr, i64, i64 } %t49, 1 %t51 = icmp uge i64 0, %t50 br i1 %t51, label %range5096, label %inrange5097 range5096: call void @finch_panic_index(ptr @.str.3342, i64 2473, i64 0, i64 %t50) unreachable inrange5097: %t52 = extractvalue { ptr, i64, i64 } %t49, 0 %t53 = getelementptr inbounds %S.ast.Type, ptr %t52, i64 0 %t54 = load %S.ast.Type, ptr %t53 %t55 = call { ptr, i64, i64 } @finch.gen.sizeOf(ptr %t47, %S.ast.Type %t54) store { ptr, i64, i64 } %t46, ptr %a57 store { ptr, i64, i64 } %t55, ptr %a58 call void @finch_str_concat(ptr %a56, ptr %a57, ptr %a58) %t59 = load { ptr, i64, i64 }, ptr %a56 store { ptr, i64, i64 } %t59, ptr %a61 store { ptr, i64, i64 } { ptr @.str.3343, i64 6, i64 0 }, ptr %a62 call void @finch_str_concat(ptr %a60, ptr %a61, ptr %a62) %t63 = load { ptr, i64, i64 }, ptr %a60 %t64 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } %t63, ptr %a66 store { ptr, i64, i64 } %t64, ptr %a67 call void @finch_str_concat(ptr %a65, ptr %a66, ptr %a67) %t68 = load { ptr, i64, i64 }, ptr %a65 ret { ptr, i64, i64 } %t68 } define internal { ptr, i64, i64 } @finch.gen.mapFind(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, %S.ast.Type %p3) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca %S.ast.Type, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 store %S.ast.Type %p3, ptr %a4 %t5 = load ptr, ptr %a1 %t6 = load ptr, ptr %a1 %t7 = load { ptr, i64, i64 }, ptr %a2 %t8 = load { ptr, i64, i64 }, ptr %a3 %t9 = load %S.ast.Type, ptr %a4 %t10 = call { ptr, i64, i64 } @finch.gen.mapArgs(ptr %t6, { ptr, i64, i64 } %t7, { ptr, i64, i64 } %t8, %S.ast.Type %t9) store { ptr, i64, i64 } { ptr @.str.3344, i64 25, i64 0 }, ptr %a12 store { ptr, i64, i64 } %t10, ptr %a13 call void @finch_str_concat(ptr %a11, ptr %a12, ptr %a13) %t14 = load { ptr, i64, i64 }, ptr %a11 store { ptr, i64, i64 } %t14, ptr %a16 store { ptr, i64, i64 } { ptr @.str.3345, i64 1, i64 0 }, ptr %a17 call void @finch_str_concat(ptr %a15, ptr %a16, ptr %a17) %t18 = load { ptr, i64, i64 }, ptr %a15 %t19 = call { ptr, i64, i64 } @finch.gen.op(ptr %t5, { ptr, i64, i64 } %t18) ret { ptr, i64, i64 } %t19 } define internal { ptr, i64, i64 } @finch.gen.defaultVal(ptr %p0, %S.ast.Type %p1, %S.ast.Node %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Type, align 16 %a3 = alloca %S.ast.Node, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Type %p1, ptr %a2 store %S.ast.Node %p2, ptr %a3 %t4 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t5 = load { ptr, i64, i64 }, ptr %t4 store { ptr, i64, i64 } %t5, ptr %a6 store { ptr, i64, i64 } { ptr @.str.3346, i64 6, i64 0 }, ptr %a7 %t8 = call i32 @finch_str_eq(ptr %a6, ptr %a7) %t9 = icmp ne i32 %t8, 0 br label %logic.from5098 logic.from5098: br i1 %t9, label %logic.rhs5099, label %logic.end5100 logic.rhs5099: %t10 = load ptr, ptr %a1 %t11 = load %S.ast.Type, ptr %a2 %t12 = call i1 @finch.gen.hasDefaults(ptr %t10, %S.ast.Type %t11) br label %logic.rend5101 logic.rend5101: br label %logic.end5100 logic.end5100: %t13 = phi i1 [ false, %logic.from5098 ], [ %t12, %logic.rend5101 ] br i1 %t13, label %then5102, label %endif5104 then5102: store { ptr, i64, i64 } zeroinitializer, ptr %a14 store { ptr, i64, i64 } zeroinitializer, ptr %a15 %t16 = load ptr, ptr %a1 %t17 = load ptr, ptr %a1 %t18 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t19 = load { ptr, i64, i64 }, ptr %t18 %t20 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t21 = load { ptr, i64, i64 }, ptr %t20 %t22 = call i64 @finch.gen.findStruct(ptr %t17, { ptr, i64, i64 } %t19, { ptr, i64, i64 } %t21) %t23 = load { ptr, i64, i64 }, ptr %a14 %t24 = load { ptr, i64, i64 }, ptr %a15 %t25 = load %S.ast.Node, ptr %a3 %t26 = call %S.gen.Val @finch.gen.construct(ptr %t16, i64 %t22, { ptr, i64, i64 } %t23, { ptr, i64, i64 } %t24, %S.ast.Node %t25) %t27 = extractvalue %S.gen.Val %t26, 0 store { ptr, i64, i64 } %t27, ptr %a28 call void @finch_str_copy(ptr %a29, ptr %a28) %t30 = load { ptr, i64, i64 }, ptr %a29 ret { ptr, i64, i64 } %t30 endif5104: %t31 = load %S.ast.Type, ptr %a2 %t32 = call { ptr, i64, i64 } @finch.gen.zeroOf(%S.ast.Type %t31) ret { ptr, i64, i64 } %t32 } define internal { ptr, i64, i64 } @finch.gen.mapSlot(ptr %p0, { ptr, i64, i64 } %p1, %S.ast.Type %p2, %S.gen.Val %p3, i1 %p4, %S.ast.Node %p5) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca %S.ast.Type, align 16 %a4 = alloca %S.gen.Val, align 16 %a5 = alloca i1, align 16 %a6 = alloca %S.ast.Node, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a114 = alloca %S.ast.Type, align 16 %a115 = alloca %S.ast.Type, align 16 %a129 = alloca { ptr, i64, i64 }, align 16 %a130 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store %S.ast.Type %p2, ptr %a3 store %S.gen.Val %p3, ptr %a4 store i1 %p4, ptr %a5 store %S.ast.Node %p5, ptr %a6 %t7 = load ptr, ptr %a1 %t8 = load %S.gen.Val, ptr %a4 %t9 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t7, %S.gen.Val %t8) store { ptr, i64, i64 } %t9, ptr %a10 %t11 = load ptr, ptr %a1 %t12 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t11, { ptr, i64, i64 } { ptr @.str.3347, i64 3, i64 0 }) store { ptr, i64, i64 } %t12, ptr %a13 %t14 = load ptr, ptr %a1 %t15 = load { ptr, i64, i64 }, ptr %a13 call void @finch.gen.store(ptr %t14, { ptr, i64, i64 } { ptr @.str.3348, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.3349, i64 1, i64 0 }, { ptr, i64, i64 } %t15) %t16 = load ptr, ptr %a1 %t17 = load ptr, ptr %a1 %t18 = load { ptr, i64, i64 }, ptr %a2 %t19 = load { ptr, i64, i64 }, ptr %a10 %t20 = load %S.ast.Type, ptr %a3 %t21 = call { ptr, i64, i64 } @finch.gen.mapArgs(ptr %t17, { ptr, i64, i64 } %t18, { ptr, i64, i64 } %t19, %S.ast.Type %t20) store { ptr, i64, i64 } { ptr @.str.3350, i64 25, i64 0 }, ptr %a23 store { ptr, i64, i64 } %t21, ptr %a24 call void @finch_str_concat(ptr %a22, ptr %a23, ptr %a24) %t25 = load { ptr, i64, i64 }, ptr %a22 store { ptr, i64, i64 } %t25, ptr %a27 store { ptr, i64, i64 } { ptr @.str.3351, i64 6, i64 0 }, ptr %a28 call void @finch_str_concat(ptr %a26, ptr %a27, ptr %a28) %t29 = load { ptr, i64, i64 }, ptr %a26 %t30 = load { ptr, i64, i64 }, ptr %a13 store { ptr, i64, i64 } %t29, ptr %a32 store { ptr, i64, i64 } %t30, ptr %a33 call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33) %t34 = load { ptr, i64, i64 }, ptr %a31 store { ptr, i64, i64 } %t34, ptr %a36 store { ptr, i64, i64 } { ptr @.str.3352, i64 1, i64 0 }, ptr %a37 call void @finch_str_concat(ptr %a35, ptr %a36, ptr %a37) %t38 = load { ptr, i64, i64 }, ptr %a35 %t39 = call { ptr, i64, i64 } @finch.gen.op(ptr %t16, { ptr, i64, i64 } %t38) store { ptr, i64, i64 } %t39, ptr %a40 %t41 = load ptr, ptr %a1 %t42 = load { ptr, i64, i64 }, ptr %a2 %t43 = load %S.ast.Type, ptr %a3 %t44 = load { ptr, i64, i64 }, ptr %a40 %t45 = call { ptr, i64, i64 } @finch.gen.entryAt(ptr %t41, { ptr, i64, i64 } %t42, %S.ast.Type %t43, { ptr, i64, i64 } %t44) store { ptr, i64, i64 } %t45, ptr %a46 %t47 = load ptr, ptr %a1 %t48 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t47, { ptr, i64, i64 } { ptr @.str.3353, i64 7, i64 0 }) store { ptr, i64, i64 } %t48, ptr %a49 %t50 = load ptr, ptr %a1 %t51 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t50, { ptr, i64, i64 } { ptr @.str.3354, i64 8, i64 0 }) store { ptr, i64, i64 } %t51, ptr %a52 %t53 = load ptr, ptr %a1 %t54 = load ptr, ptr %a1 %t55 = load ptr, ptr %a1 %t56 = load { ptr, i64, i64 }, ptr %a13 %t57 = call { ptr, i64, i64 } @finch.gen.load(ptr %t55, { ptr, i64, i64 } { ptr @.str.3356, i64 3, i64 0 }, { ptr, i64, i64 } %t56) store { ptr, i64, i64 } { ptr @.str.3355, i64 12, i64 0 }, ptr %a59 store { ptr, i64, i64 } %t57, ptr %a60 call void @finch_str_concat(ptr %a58, ptr %a59, ptr %a60) %t61 = load { ptr, i64, i64 }, ptr %a58 store { ptr, i64, i64 } %t61, ptr %a63 store { ptr, i64, i64 } { ptr @.str.3357, i64 3, i64 0 }, ptr %a64 call void @finch_str_concat(ptr %a62, ptr %a63, ptr %a64) %t65 = load { ptr, i64, i64 }, ptr %a62 %t66 = call { ptr, i64, i64 } @finch.gen.op(ptr %t54, { ptr, i64, i64 } %t65) %t67 = load { ptr, i64, i64 }, ptr %a49 %t68 = load { ptr, i64, i64 }, ptr %a52 call void @finch.gen.condBr(ptr %t53, { ptr, i64, i64 } %t66, { ptr, i64, i64 } %t67, { ptr, i64, i64 } %t68) %t69 = load ptr, ptr %a1 %t70 = load { ptr, i64, i64 }, ptr %a49 call void @finch.gen.label(ptr %t69, { ptr, i64, i64 } %t70) %t71 = load ptr, ptr %a1 %t72 = load ptr, ptr %a1 %t73 = load { ptr, i64, i64 }, ptr %a46 %t74 = load %S.ast.Type, ptr %a3 %t75 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t72, { ptr, i64, i64 } %t73, %S.ast.Type %t74, i64 1) %t76 = load { ptr, i64, i64 }, ptr %a10 %t77 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 %t78 = load { ptr, i64, i64 }, ptr %t77 %t79 = extractvalue { ptr, i64, i64 } %t78, 1 %t80 = icmp uge i64 0, %t79 br i1 %t80, label %range5105, label %inrange5106 range5105: call void @finch_panic_index(ptr @.str.3358, i64 2501, i64 0, i64 %t79) unreachable inrange5106: %t81 = extractvalue { ptr, i64, i64 } %t78, 0 %t82 = getelementptr inbounds %S.ast.Type, ptr %t81, i64 0 %t83 = load %S.ast.Type, ptr %t82 call void @finch.gen.copyAt(ptr %t71, { ptr, i64, i64 } %t75, { ptr, i64, i64 } %t76, %S.ast.Type %t83) %t84 = load i1, ptr %a5 br i1 %t84, label %then5107, label %endif5109 then5107: %t85 = load ptr, ptr %a1 %t86 = load ptr, ptr %a1 %t87 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 %t88 = load { ptr, i64, i64 }, ptr %t87 %t89 = extractvalue { ptr, i64, i64 } %t88, 1 %t90 = icmp uge i64 1, %t89 br i1 %t90, label %range5110, label %inrange5111 range5110: call void @finch_panic_index(ptr @.str.3359, i64 2503, i64 1, i64 %t89) unreachable inrange5111: %t91 = extractvalue { ptr, i64, i64 } %t88, 0 %t92 = getelementptr inbounds %S.ast.Type, ptr %t91, i64 1 %t93 = load %S.ast.Type, ptr %t92 %t94 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t86, %S.ast.Type %t93) %t95 = load ptr, ptr %a1 %t96 = load ptr, ptr %a1 %t97 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 %t98 = load { ptr, i64, i64 }, ptr %t97 %t99 = extractvalue { ptr, i64, i64 } %t98, 1 %t100 = icmp uge i64 1, %t99 br i1 %t100, label %range5112, label %inrange5113 range5112: call void @finch_panic_index(ptr @.str.3360, i64 2503, i64 1, i64 %t99) unreachable inrange5113: %t101 = extractvalue { ptr, i64, i64 } %t98, 0 %t102 = getelementptr inbounds %S.ast.Type, ptr %t101, i64 1 %t103 = load %S.ast.Type, ptr %t102 %t104 = load %S.ast.Node, ptr %a6 %t105 = call { ptr, i64, i64 } @finch.gen.defaultVal(ptr %t96, %S.ast.Type %t103, %S.ast.Node %t104) %t106 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t105, 0 %t107 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 %t108 = load { ptr, i64, i64 }, ptr %t107 %t109 = extractvalue { ptr, i64, i64 } %t108, 1 %t110 = icmp uge i64 1, %t109 br i1 %t110, label %range5114, label %inrange5115 range5114: call void @finch_panic_index(ptr @.str.3361, i64 2503, i64 1, i64 %t109) unreachable inrange5115: %t111 = extractvalue { ptr, i64, i64 } %t108, 0 %t112 = getelementptr inbounds %S.ast.Type, ptr %t111, i64 1 %t113 = load %S.ast.Type, ptr %t112 store %S.ast.Type %t113, ptr %a114 call void @finch.copy.S_ast_Type(ptr %a115, ptr %a114) %t116 = load %S.ast.Type, ptr %a115 %t117 = insertvalue %S.gen.Val %t106, %S.ast.Type %t116, 1 %t118 = insertvalue %S.gen.Val %t117, i1 true, 2 %t119 = call { ptr, i64, i64 } @finch.gen.own(ptr %t95, %S.gen.Val %t118) %t120 = load ptr, ptr %a1 %t121 = load { ptr, i64, i64 }, ptr %a46 %t122 = load %S.ast.Type, ptr %a3 %t123 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t120, { ptr, i64, i64 } %t121, %S.ast.Type %t122, i64 2) call void @finch.gen.store(ptr %t85, { ptr, i64, i64 } %t94, { ptr, i64, i64 } %t119, { ptr, i64, i64 } %t123) br label %endif5109 endif5109: %t124 = load ptr, ptr %a1 %t125 = load { ptr, i64, i64 }, ptr %a52 call void @finch.gen.br(ptr %t124, { ptr, i64, i64 } %t125) %t126 = load ptr, ptr %a1 %t127 = load { ptr, i64, i64 }, ptr %a52 call void @finch.gen.label(ptr %t126, { ptr, i64, i64 } %t127) %t128 = load { ptr, i64, i64 }, ptr %a46 store { ptr, i64, i64 } %t128, ptr %a129 call void @finch_str_copy(ptr %a130, ptr %a129) %t131 = load { ptr, i64, i64 }, ptr %a130 ret { ptr, i64, i64 } %t131 } define internal %S.gen.Ref @finch.gen.mapIndex(ptr %p0, %S.ast.Node %p1, %S.gen.Ref %p2, %S.ast.Type %p3, i1 %p4) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a3 = alloca %S.gen.Ref, align 16 %a4 = alloca %S.ast.Type, align 16 %a5 = alloca i1, align 16 %a13 = alloca %S.ast.Type, align 16 %a14 = alloca %S.ast.Type, align 16 %a16 = alloca %S.ast.Type, align 16 %a24 = alloca %S.ast.Type, align 16 %a25 = alloca %S.ast.Type, align 16 %a27 = alloca %S.ast.Type, align 16 %a48 = alloca %S.gen.Val, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca %S.ast.Type, align 16 %a72 = alloca %S.ast.Type, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 %a104 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca { ptr, i64, i64 }, align 16 %a110 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 %a113 = alloca { ptr, i64, i64 }, align 16 %a114 = alloca { ptr, i64, i64 }, align 16 %a123 = alloca { ptr, i64, i64 }, align 16 %a145 = alloca { ptr, i64, i64 }, align 16 %a146 = alloca { ptr, i64, i64 }, align 16 %a147 = alloca { ptr, i64, i64 }, align 16 %a149 = alloca { ptr, i64, i64 }, align 16 %a150 = alloca { ptr, i64, i64 }, align 16 %a151 = alloca { ptr, i64, i64 }, align 16 %a155 = alloca { ptr, i64, i64 }, align 16 %a157 = alloca { ptr, i64, i64 }, align 16 %a158 = alloca { ptr, i64, i64 }, align 16 %a159 = alloca { ptr, i64, i64 }, align 16 %a161 = alloca { ptr, i64, i64 }, align 16 %a162 = alloca { ptr, i64, i64 }, align 16 %a163 = alloca { ptr, i64, i64 }, align 16 %a166 = alloca { ptr, i64, i64 }, align 16 %a167 = alloca { ptr, i64, i64 }, align 16 %a168 = alloca { ptr, i64, i64 }, align 16 %a170 = alloca { ptr, i64, i64 }, align 16 %a171 = alloca { ptr, i64, i64 }, align 16 %a172 = alloca { ptr, i64, i64 }, align 16 %a188 = alloca { ptr, i64, i64 }, align 16 %a193 = alloca { ptr, i64, i64 }, align 16 %a194 = alloca { ptr, i64, i64 }, align 16 %a198 = alloca %S.ast.Type, align 16 %a199 = alloca %S.ast.Type, align 16 %a209 = alloca { ptr, i64, i64 }, align 16 %a211 = alloca { ptr, i64, i64 }, align 16 %a212 = alloca { ptr, i64, i64 }, align 16 %a216 = alloca %S.ast.Type, align 16 %a217 = alloca %S.ast.Type, align 16 %a220 = alloca %S.gen.Val, align 16 %a234 = alloca %S.ast.Type, align 16 %a235 = alloca %S.ast.Type, align 16 %a241 = alloca %S.gen.Val, align 16 %a242 = alloca %S.gen.Val, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 store %S.gen.Ref %p2, ptr %a3 store %S.ast.Type %p3, ptr %a4 store i1 %p4, ptr %a5 %t6 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 1 %t7 = load { ptr, i64, i64 }, ptr %t6 %t8 = extractvalue { ptr, i64, i64 } %t7, 1 %t9 = icmp uge i64 0, %t8 br i1 %t9, label %range5116, label %inrange5117 range5116: call void @finch_panic_index(ptr @.str.3362, i64 2512, i64 0, i64 %t8) unreachable inrange5117: %t10 = extractvalue { ptr, i64, i64 } %t7, 0 %t11 = getelementptr inbounds %S.ast.Type, ptr %t10, i64 0 %t12 = load %S.ast.Type, ptr %t11 store %S.ast.Type %t12, ptr %a13 call void @finch.copy.S_ast_Type(ptr %a14, ptr %a13) %t15 = load %S.ast.Type, ptr %a14 store %S.ast.Type %t15, ptr %a16 %t17 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 1 %t18 = load { ptr, i64, i64 }, ptr %t17 %t19 = extractvalue { ptr, i64, i64 } %t18, 1 %t20 = icmp uge i64 1, %t19 br i1 %t20, label %range5118, label %inrange5119 range5118: call void @finch_panic_index(ptr @.str.3363, i64 2513, i64 1, i64 %t19) unreachable inrange5119: %t21 = extractvalue { ptr, i64, i64 } %t18, 0 %t22 = getelementptr inbounds %S.ast.Type, ptr %t21, i64 1 %t23 = load %S.ast.Type, ptr %t22 store %S.ast.Type %t23, ptr %a24 call void @finch.copy.S_ast_Type(ptr %a25, ptr %a24) %t26 = load %S.ast.Type, ptr %a25 store %S.ast.Type %t26, ptr %a27 %t28 = load ptr, ptr %a1 %t29 = load ptr, ptr %a1 %t30 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t31 = load { ptr, i64, i64 }, ptr %t30 %t32 = extractvalue { ptr, i64, i64 } %t31, 1 %t33 = icmp uge i64 1, %t32 br i1 %t33, label %range5120, label %inrange5121 range5120: call void @finch_panic_index(ptr @.str.3364, i64 2514, i64 1, i64 %t32) unreachable inrange5121: %t34 = extractvalue { ptr, i64, i64 } %t31, 0 %t35 = getelementptr inbounds %S.ast.Node, ptr %t34, i64 1 %t36 = load %S.ast.Node, ptr %t35 %t37 = load %S.ast.Type, ptr %a16 %t38 = call %S.gen.Val @finch.gen.exprWant(ptr %t29, %S.ast.Node %t36, %S.ast.Type %t37) %t39 = load %S.ast.Type, ptr %a16 %t40 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t41 = load { ptr, i64, i64 }, ptr %t40 %t42 = extractvalue { ptr, i64, i64 } %t41, 1 %t43 = icmp uge i64 1, %t42 br i1 %t43, label %range5122, label %inrange5123 range5122: call void @finch_panic_index(ptr @.str.3365, i64 2514, i64 1, i64 %t42) unreachable inrange5123: %t44 = extractvalue { ptr, i64, i64 } %t41, 0 %t45 = getelementptr inbounds %S.ast.Node, ptr %t44, i64 1 %t46 = load %S.ast.Node, ptr %t45 %t47 = call %S.gen.Val @finch.gen.coerce(ptr %t28, %S.gen.Val %t38, %S.ast.Type %t39, %S.ast.Node %t46, { ptr, i64, i64 } { ptr @.str.3366, i64 7, i64 0 }) store %S.gen.Val %t47, ptr %a48 %t49 = load i1, ptr %a5 br i1 %t49, label %then5124, label %endif5126 then5124: %t50 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 0 %t51 = load i1, ptr %t50 %t52 = xor i1 %t51, true br i1 %t52, label %then5127, label %endif5129 then5127: %t53 = load ptr, ptr %a1 %t54 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t53, %S.ast.Node %t54, { ptr, i64, i64 } { ptr @.str.3367, i64 44, i64 0 }) br label %endif5129 endif5129: %t55 = load ptr, ptr %a1 %t56 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 1 %t57 = getelementptr inbounds %S.gen.Place, ptr %t56, i32 0, i32 0 %t58 = load { ptr, i64, i64 }, ptr %t57 %t59 = load %S.ast.Type, ptr %a4 %t60 = load %S.gen.Val, ptr %a48 %t61 = load %S.ast.Node, ptr %a2 %t62 = call { ptr, i64, i64 } @finch.gen.mapSlot(ptr %t55, { ptr, i64, i64 } %t58, %S.ast.Type %t59, %S.gen.Val %t60, i1 true, %S.ast.Node %t61) store { ptr, i64, i64 } %t62, ptr %a63 %t64 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0 %t65 = load ptr, ptr %a1 %t66 = load { ptr, i64, i64 }, ptr %a63 %t67 = load %S.ast.Type, ptr %a4 %t68 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t65, { ptr, i64, i64 } %t66, %S.ast.Type %t67, i64 2) %t69 = insertvalue %S.gen.Place zeroinitializer, { ptr, i64, i64 } %t68, 0 %t70 = load %S.ast.Type, ptr %a27 store %S.ast.Type %t70, ptr %a71 call void @finch.copy.S_ast_Type(ptr %a72, ptr %a71) %t73 = load %S.ast.Type, ptr %a72 %t74 = insertvalue %S.gen.Place %t69, %S.ast.Type %t73, 1 %t75 = insertvalue %S.gen.Ref %t64, %S.gen.Place %t74, 1 ret %S.gen.Ref %t75 endif5126: store { ptr, i64, i64 } { ptr @.str.3368, i64 0, i64 0 }, ptr %a76 %t77 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 0 %t78 = load i1, ptr %t77 br i1 %t78, label %then5130, label %else5131 then5130: %t79 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 1 %t80 = getelementptr inbounds %S.gen.Place, ptr %t79, i32 0, i32 0 %t81 = load { ptr, i64, i64 }, ptr %t80 store { ptr, i64, i64 } %t81, ptr %a82 call void @finch_str_copy(ptr %a83, ptr %a82) %t84 = load { ptr, i64, i64 }, ptr %a83 store { ptr, i64, i64 } %t84, ptr %a76 br label %endif5132 else5131: %t85 = load ptr, ptr %a1 %t86 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 2 %t87 = load %S.gen.Val, ptr %t86 %t88 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t85, %S.gen.Val %t87) store { ptr, i64, i64 } %t88, ptr %a76 br label %endif5132 endif5132: %t89 = load ptr, ptr %a1 %t90 = load %S.gen.Val, ptr %a48 %t91 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t89, %S.gen.Val %t90) store { ptr, i64, i64 } %t91, ptr %a92 %t93 = load ptr, ptr %a1 %t94 = load { ptr, i64, i64 }, ptr %a76 %t95 = load { ptr, i64, i64 }, ptr %a92 %t96 = load %S.ast.Type, ptr %a4 %t97 = call { ptr, i64, i64 } @finch.gen.mapFind(ptr %t93, { ptr, i64, i64 } %t94, { ptr, i64, i64 } %t95, %S.ast.Type %t96) store { ptr, i64, i64 } %t97, ptr %a98 %t99 = load ptr, ptr %a1 %t100 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t99, { ptr, i64, i64 } { ptr @.str.3369, i64 11, i64 0 }) store { ptr, i64, i64 } %t100, ptr %a101 %t102 = load ptr, ptr %a1 %t103 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t102, { ptr, i64, i64 } { ptr @.str.3370, i64 9, i64 0 }) store { ptr, i64, i64 } %t103, ptr %a104 %t105 = load ptr, ptr %a1 %t106 = load ptr, ptr %a1 %t107 = load { ptr, i64, i64 }, ptr %a98 store { ptr, i64, i64 } { ptr @.str.3371, i64 13, i64 0 }, ptr %a109 store { ptr, i64, i64 } %t107, ptr %a110 call void @finch_str_concat(ptr %a108, ptr %a109, ptr %a110) %t111 = load { ptr, i64, i64 }, ptr %a108 store { ptr, i64, i64 } %t111, ptr %a113 store { ptr, i64, i64 } { ptr @.str.3372, i64 3, i64 0 }, ptr %a114 call void @finch_str_concat(ptr %a112, ptr %a113, ptr %a114) %t115 = load { ptr, i64, i64 }, ptr %a112 %t116 = call { ptr, i64, i64 } @finch.gen.op(ptr %t106, { ptr, i64, i64 } %t115) %t117 = load { ptr, i64, i64 }, ptr %a101 %t118 = load { ptr, i64, i64 }, ptr %a104 call void @finch.gen.condBr(ptr %t105, { ptr, i64, i64 } %t116, { ptr, i64, i64 } %t117, { ptr, i64, i64 } %t118) %t119 = load ptr, ptr %a1 %t120 = load { ptr, i64, i64 }, ptr %a101 call void @finch.gen.label(ptr %t119, { ptr, i64, i64 } %t120) %t121 = load ptr, ptr %a1 %t122 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t121, { ptr, i64, i64 } { ptr @.str.3373, i64 17, i64 0 }) store { ptr, i64, i64 } %t122, ptr %a123 %t124 = load ptr, ptr %a1 %t125 = load { ptr, i64, i64 }, ptr %a123 call void @finch.gen.store(ptr %t124, { ptr, i64, i64 } { ptr @.str.3374, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.3375, i64 15, i64 0 }, { ptr, i64, i64 } %t125) %t126 = load ptr, ptr %a1 %t127 = load { ptr, i64, i64 }, ptr %a123 %t128 = getelementptr inbounds %S.gen.Val, ptr %a48, i32 0, i32 0 %t129 = load { ptr, i64, i64 }, ptr %t128 %t130 = load %S.ast.Type, ptr %a16 call void @finch.gen.emitFormat(ptr %t126, { ptr, i64, i64 } %t127, { ptr, i64, i64 } %t129, %S.ast.Type %t130, i1 true) %t131 = load ptr, ptr %a1 %t132 = load ptr, ptr %a1 %t133 = load ptr, ptr %a1 %t134 = icmp eq ptr %t133, null br i1 %t134, label %panic5133, label %ok5134 panic5133: call void @finch_panic(ptr @.str.3377, i64 2537, ptr @.str.3378) unreachable ok5134: %t135 = getelementptr inbounds %S.gen.Gen, ptr %t133, i32 0, i32 1 %t136 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 %t137 = load i64, ptr %t136 %t138 = load { ptr, i64, i64 }, ptr %t135 %t139 = extractvalue { ptr, i64, i64 } %t138, 1 %t140 = icmp uge i64 %t137, %t139 br i1 %t140, label %range5135, label %inrange5136 range5135: call void @finch_panic_index(ptr @.str.3379, i64 2537, i64 %t137, i64 %t139) unreachable inrange5136: %t141 = extractvalue { ptr, i64, i64 } %t138, 0 %t142 = getelementptr inbounds { ptr, i64, i64 }, ptr %t141, i64 %t137 %t143 = load { ptr, i64, i64 }, ptr %t142 %t144 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t132, { ptr, i64, i64 } %t143) store { ptr, i64, i64 } { ptr @.str.3376, i64 33, i64 0 }, ptr %a146 store { ptr, i64, i64 } %t144, ptr %a147 call void @finch_str_concat(ptr %a145, ptr %a146, ptr %a147) %t148 = load { ptr, i64, i64 }, ptr %a145 store { ptr, i64, i64 } %t148, ptr %a150 store { ptr, i64, i64 } { ptr @.str.3380, i64 6, i64 0 }, ptr %a151 call void @finch_str_concat(ptr %a149, ptr %a150, ptr %a151) %t152 = load { ptr, i64, i64 }, ptr %a149 %t153 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 %t154 = load i64, ptr %t153 call void @finch_str_from_int(ptr %a155, i64 %t154) %t156 = load { ptr, i64, i64 }, ptr %a155 store { ptr, i64, i64 } %t152, ptr %a158 store { ptr, i64, i64 } %t156, ptr %a159 call void @finch_str_concat(ptr %a157, ptr %a158, ptr %a159) %t160 = load { ptr, i64, i64 }, ptr %a157 store { ptr, i64, i64 } %t160, ptr %a162 store { ptr, i64, i64 } { ptr @.str.3381, i64 6, i64 0 }, ptr %a163 call void @finch_str_concat(ptr %a161, ptr %a162, ptr %a163) %t164 = load { ptr, i64, i64 }, ptr %a161 %t165 = load { ptr, i64, i64 }, ptr %a123 store { ptr, i64, i64 } %t164, ptr %a167 store { ptr, i64, i64 } %t165, ptr %a168 call void @finch_str_concat(ptr %a166, ptr %a167, ptr %a168) %t169 = load { ptr, i64, i64 }, ptr %a166 store { ptr, i64, i64 } %t169, ptr %a171 store { ptr, i64, i64 } { ptr @.str.3382, i64 1, i64 0 }, ptr %a172 call void @finch_str_concat(ptr %a170, ptr %a171, ptr %a172) %t173 = load { ptr, i64, i64 }, ptr %a170 call void @finch.gen.emit(ptr %t131, { ptr, i64, i64 } %t173) %t174 = load ptr, ptr %a1 call void @finch.gen.emit(ptr %t174, { ptr, i64, i64 } { ptr @.str.3383, i64 11, i64 0 }) %t175 = load ptr, ptr %a1 %t176 = icmp eq ptr %t175, null br i1 %t176, label %panic5137, label %ok5138 panic5137: call void @finch_panic(ptr @.str.3384, i64 2539, ptr @.str.3385) unreachable ok5138: %t177 = getelementptr inbounds %S.gen.Gen, ptr %t175, i32 0, i32 9 store i1 true, ptr %t177 %t178 = load ptr, ptr %a1 %t179 = load { ptr, i64, i64 }, ptr %a104 call void @finch.gen.label(ptr %t178, { ptr, i64, i64 } %t179) %t180 = load ptr, ptr %a1 %t181 = load ptr, ptr %a1 %t182 = load { ptr, i64, i64 }, ptr %a76 %t183 = load %S.ast.Type, ptr %a4 %t184 = load { ptr, i64, i64 }, ptr %a98 %t185 = call { ptr, i64, i64 } @finch.gen.entryAt(ptr %t181, { ptr, i64, i64 } %t182, %S.ast.Type %t183, { ptr, i64, i64 } %t184) %t186 = load %S.ast.Type, ptr %a4 %t187 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t180, { ptr, i64, i64 } %t185, %S.ast.Type %t186, i64 2) store { ptr, i64, i64 } %t187, ptr %a188 %t189 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 0 %t190 = load i1, ptr %t189 br i1 %t190, label %then5139, label %endif5141 then5139: %t191 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0 %t192 = load { ptr, i64, i64 }, ptr %a188 store { ptr, i64, i64 } %t192, ptr %a193 call void @finch_str_copy(ptr %a194, ptr %a193) %t195 = load { ptr, i64, i64 }, ptr %a194 %t196 = insertvalue %S.gen.Place zeroinitializer, { ptr, i64, i64 } %t195, 0 %t197 = load %S.ast.Type, ptr %a27 store %S.ast.Type %t197, ptr %a198 call void @finch.copy.S_ast_Type(ptr %a199, ptr %a198) %t200 = load %S.ast.Type, ptr %a199 %t201 = insertvalue %S.gen.Place %t196, %S.ast.Type %t200, 1 %t202 = insertvalue %S.gen.Ref %t191, %S.gen.Place %t201, 1 ret %S.gen.Ref %t202 endif5141: %t203 = load ptr, ptr %a1 %t204 = load ptr, ptr %a1 %t205 = load %S.ast.Type, ptr %a27 %t206 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t204, %S.ast.Type %t205) %t207 = load { ptr, i64, i64 }, ptr %a188 %t208 = call { ptr, i64, i64 } @finch.gen.load(ptr %t203, { ptr, i64, i64 } %t206, { ptr, i64, i64 } %t207) store { ptr, i64, i64 } %t208, ptr %a209 %t210 = load { ptr, i64, i64 }, ptr %a209 store { ptr, i64, i64 } %t210, ptr %a211 call void @finch_str_copy(ptr %a212, ptr %a211) %t213 = load { ptr, i64, i64 }, ptr %a212 %t214 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t213, 0 %t215 = load %S.ast.Type, ptr %a27 store %S.ast.Type %t215, ptr %a216 call void @finch.copy.S_ast_Type(ptr %a217, ptr %a216) %t218 = load %S.ast.Type, ptr %a217 %t219 = insertvalue %S.gen.Val %t214, %S.ast.Type %t218, 1 store %S.gen.Val %t219, ptr %a220 %t221 = load ptr, ptr %a1 %t222 = load %S.ast.Type, ptr %a27 %t223 = call i1 @finch.gen.owning(ptr %t221, %S.ast.Type %t222) br label %logic.from5142 logic.from5142: br i1 %t223, label %logic.rhs5143, label %logic.end5144 logic.rhs5143: %t224 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 2 %t225 = getelementptr inbounds %S.gen.Val, ptr %t224, i32 0, i32 2 %t226 = load i1, ptr %t225 br label %logic.rend5145 logic.rend5145: br label %logic.end5144 logic.end5144: %t227 = phi i1 [ false, %logic.from5142 ], [ %t226, %logic.rend5145 ] br i1 %t227, label %then5146, label %endif5148 then5146: %t228 = load ptr, ptr %a1 %t229 = load { ptr, i64, i64 }, ptr %a209 %t230 = load %S.ast.Type, ptr %a27 %t231 = call { ptr, i64, i64 } @finch.gen.copyValue(ptr %t228, { ptr, i64, i64 } %t229, %S.ast.Type %t230) %t232 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t231, 0 %t233 = load %S.ast.Type, ptr %a27 store %S.ast.Type %t233, ptr %a234 call void @finch.copy.S_ast_Type(ptr %a235, ptr %a234) %t236 = load %S.ast.Type, ptr %a235 %t237 = insertvalue %S.gen.Val %t232, %S.ast.Type %t236, 1 %t238 = insertvalue %S.gen.Val %t237, i1 true, 2 store %S.gen.Val %t238, ptr %a220 br label %endif5148 endif5148: %t239 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 %t240 = load %S.gen.Val, ptr %a220 store %S.gen.Val %t240, ptr %a241 call void @finch.copy.S_gen_Val(ptr %a242, ptr %a241) %t243 = load %S.gen.Val, ptr %a242 %t244 = insertvalue %S.gen.Ref %t239, %S.gen.Val %t243, 2 ret %S.gen.Ref %t244 } define internal %S.gen.Val @finch.gen.mapLit(ptr %p0, %S.ast.Node %p1, %S.ast.Type %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a3 = alloca %S.ast.Type, align 16 %a5 = alloca %S.ast.Type, align 16 %a6 = alloca %S.ast.Type, align 16 %a8 = alloca %S.ast.Type, align 16 %a9 = alloca i1, align 16 %a10 = alloca %S.gen.Val, align 16 %a11 = alloca %S.gen.Val, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca i1, align 16 %a25 = alloca i1, align 16 %a30 = alloca i64, align 16 %a43 = alloca %S.ast.Node, align 16 %a44 = alloca %S.ast.Node, align 16 %a46 = alloca %S.ast.Node, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca %S.ast.Node, align 16 %a68 = alloca %S.ast.Node, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 %a106 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 %a113 = alloca { ptr, i64, i64 }, align 16 %a128 = alloca { ptr, i64, i64 }, align 16 %a129 = alloca { ptr, i64, i64 }, align 16 %a135 = alloca { ptr, i64, i64 }, align 16 %a136 = alloca { ptr, i64, i64 }, align 16 %a150 = alloca %S.ast.Type, align 16 %a151 = alloca %S.ast.Type, align 16 %a153 = alloca %S.ast.Type, align 16 %a167 = alloca { ptr, i64, i64 }, align 16 %a177 = alloca i64, align 16 %a181 = alloca %S.gen.Val, align 16 %a182 = alloca %S.gen.Val, align 16 %a184 = alloca %S.gen.Val, align 16 %a186 = alloca %S.gen.Val, align 16 %a187 = alloca %S.gen.Val, align 16 %a189 = alloca %S.gen.Val, align 16 %a274 = alloca { ptr, i64, i64 }, align 16 %a281 = alloca { ptr, i64, i64 }, align 16 %a307 = alloca %S.ast.Type, align 16 %a308 = alloca %S.ast.Type, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 store %S.ast.Type %p2, ptr %a3 %t4 = load %S.ast.Type, ptr %a3 store %S.ast.Type %t4, ptr %a5 call void @finch.copy.S_ast_Type(ptr %a6, ptr %a5) %t7 = load %S.ast.Type, ptr %a6 store %S.ast.Type %t7, ptr %a8 store i1 false, ptr %a9 store %S.gen.Val zeroinitializer, ptr %a10 store %S.gen.Val zeroinitializer, ptr %a11 %t12 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 %t13 = load { ptr, i64, i64 }, ptr %t12 store { ptr, i64, i64 } %t13, ptr %a14 store { ptr, i64, i64 } { ptr @.str.3386, i64 3, i64 0 }, ptr %a15 %t16 = call i32 @finch_str_eq(ptr %a14, ptr %a15) %t17 = icmp eq i32 %t16, 0 br i1 %t17, label %then5149, label %endif5151 then5149: %t18 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t18, i32 0, i32 1 %t20 = load i64, ptr %t19 %t21 = icmp eq i64 %t20, 0 br i1 %t21, label %then5152, label %endif5154 then5152: %t22 = load ptr, ptr %a1 %t23 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t22, %S.ast.Node %t23, { ptr, i64, i64 } { ptr @.str.3387, i64 52, i64 0 }) br label %endif5154 endif5154: store i1 true, ptr %a24 store i1 false, ptr %a25 %t26 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %t26, i32 0, i32 1 %t28 = load i64, ptr %t27 %t29 = sdiv i64 %t28, 2 store i64 0, ptr %a30 br label %for.cond5155 for.cond5155: %t31 = load i64, ptr %a30 %t32 = icmp slt i64 %t31, %t29 br i1 %t32, label %for.body5156, label %for.end5158 for.body5156: %t33 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t34 = load i64, ptr %a30 %t35 = mul i64 2, %t34 %t36 = add i64 %t35, 1 %t37 = load { ptr, i64, i64 }, ptr %t33 %t38 = extractvalue { ptr, i64, i64 } %t37, 1 %t39 = icmp uge i64 %t36, %t38 br i1 %t39, label %range5159, label %inrange5160 range5159: call void @finch_panic_index(ptr @.str.3388, i64 2567, i64 %t36, i64 %t38) unreachable inrange5160: %t40 = extractvalue { ptr, i64, i64 } %t37, 0 %t41 = getelementptr inbounds %S.ast.Node, ptr %t40, i64 %t36 %t42 = load %S.ast.Node, ptr %t41 store %S.ast.Node %t42, ptr %a43 call void @finch.copy.S_ast_Node(ptr %a44, ptr %a43) %t45 = load %S.ast.Node, ptr %a44 store %S.ast.Node %t45, ptr %a46 %t47 = getelementptr inbounds %S.ast.Node, ptr %a46, i32 0, i32 0 %t48 = load { ptr, i64, i64 }, ptr %t47 store { ptr, i64, i64 } %t48, ptr %a49 store { ptr, i64, i64 } { ptr @.str.3389, i64 5, i64 0 }, ptr %a50 %t51 = call i32 @finch_str_eq(ptr %a49, ptr %a50) %t52 = icmp ne i32 %t51, 0 br label %logic.from5161 logic.from5161: br i1 %t52, label %logic.rhs5162, label %logic.end5163 logic.rhs5162: %t53 = getelementptr inbounds %S.ast.Node, ptr %a46, i32 0, i32 1 %t54 = load { ptr, i64, i64 }, ptr %t53 store { ptr, i64, i64 } %t54, ptr %a55 store { ptr, i64, i64 } { ptr @.str.3390, i64 1, i64 0 }, ptr %a56 %t57 = call i32 @finch_str_eq(ptr %a55, ptr %a56) %t58 = icmp ne i32 %t57, 0 br label %logic.rend5164 logic.rend5164: br label %logic.end5163 logic.end5163: %t59 = phi i1 [ false, %logic.from5161 ], [ %t58, %logic.rend5164 ] br i1 %t59, label %then5165, label %endif5167 then5165: %t60 = getelementptr inbounds %S.ast.Node, ptr %a46, i32 0, i32 9 %t61 = load { ptr, i64, i64 }, ptr %t60 %t62 = extractvalue { ptr, i64, i64 } %t61, 1 %t63 = icmp uge i64 0, %t62 br i1 %t63, label %range5168, label %inrange5169 range5168: call void @finch_panic_index(ptr @.str.3391, i64 2569, i64 0, i64 %t62) unreachable inrange5169: %t64 = extractvalue { ptr, i64, i64 } %t61, 0 %t65 = getelementptr inbounds %S.ast.Node, ptr %t64, i64 0 %t66 = load %S.ast.Node, ptr %t65 store %S.ast.Node %t66, ptr %a67 call void @finch.copy.S_ast_Node(ptr %a68, ptr %a67) %t69 = load %S.ast.Node, ptr %a68 store %S.ast.Node %t69, ptr %a46 br label %endif5167 endif5167: %t70 = getelementptr inbounds %S.ast.Node, ptr %a46, i32 0, i32 0 %t71 = load { ptr, i64, i64 }, ptr %t70 store { ptr, i64, i64 } %t71, ptr %a72 store { ptr, i64, i64 } { ptr @.str.3392, i64 5, i64 0 }, ptr %a73 %t74 = call i32 @finch_str_eq(ptr %a72, ptr %a73) %t75 = icmp ne i32 %t74, 0 br i1 %t75, label %then5170, label %else5171 then5170: store i1 true, ptr %a25 br label %endif5172 else5171: %t76 = getelementptr inbounds %S.ast.Node, ptr %a46, i32 0, i32 0 %t77 = load { ptr, i64, i64 }, ptr %t76 store { ptr, i64, i64 } %t77, ptr %a78 store { ptr, i64, i64 } { ptr @.str.3393, i64 3, i64 0 }, ptr %a79 %t80 = call i32 @finch_str_eq(ptr %a78, ptr %a79) %t81 = icmp eq i32 %t80, 0 br i1 %t81, label %then5173, label %endif5175 then5173: store i1 false, ptr %a24 br label %endif5175 endif5175: br label %endif5172 endif5172: br label %for.step5157 for.step5157: %t82 = load i64, ptr %a30 %t83 = add i64 %t82, 1 store i64 %t83, ptr %a30 br label %for.cond5155 for.end5158: %t84 = load ptr, ptr %a1 %t85 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t86 = load { ptr, i64, i64 }, ptr %t85 %t87 = extractvalue { ptr, i64, i64 } %t86, 1 %t88 = icmp uge i64 0, %t87 br i1 %t88, label %range5176, label %inrange5177 range5176: call void @finch_panic_index(ptr @.str.3394, i64 2577, i64 0, i64 %t87) unreachable inrange5177: %t89 = extractvalue { ptr, i64, i64 } %t86, 0 %t90 = getelementptr inbounds %S.ast.Node, ptr %t89, i64 0 %t91 = load %S.ast.Node, ptr %t90 %t92 = call %S.gen.Val @finch.gen.expr(ptr %t84, %S.ast.Node %t91) store %S.gen.Val %t92, ptr %a10 %t93 = load ptr, ptr %a1 %t94 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t95 = load { ptr, i64, i64 }, ptr %t94 %t96 = extractvalue { ptr, i64, i64 } %t95, 1 %t97 = icmp uge i64 1, %t96 br i1 %t97, label %range5178, label %inrange5179 range5178: call void @finch_panic_index(ptr @.str.3395, i64 2578, i64 1, i64 %t96) unreachable inrange5179: %t98 = extractvalue { ptr, i64, i64 } %t95, 0 %t99 = getelementptr inbounds %S.ast.Node, ptr %t98, i64 1 %t100 = load %S.ast.Node, ptr %t99 %t101 = call %S.gen.Val @finch.gen.expr(ptr %t93, %S.ast.Node %t100) store %S.gen.Val %t101, ptr %a11 %t102 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 1 %t103 = getelementptr inbounds %S.ast.Type, ptr %t102, i32 0, i32 0 %t104 = load { ptr, i64, i64 }, ptr %t103 store { ptr, i64, i64 } %t104, ptr %a105 store { ptr, i64, i64 } { ptr @.str.3396, i64 4, i64 0 }, ptr %a106 %t107 = call i32 @finch_str_eq(ptr %a105, ptr %a106) %t108 = icmp ne i32 %t107, 0 br label %logic.from5180 logic.from5180: br i1 %t108, label %logic.end5182, label %logic.rhs5181 logic.rhs5181: %t109 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 1 %t110 = getelementptr inbounds %S.ast.Type, ptr %t109, i32 0, i32 0 %t111 = load { ptr, i64, i64 }, ptr %t110 store { ptr, i64, i64 } %t111, ptr %a112 store { ptr, i64, i64 } { ptr @.str.3397, i64 4, i64 0 }, ptr %a113 %t114 = call i32 @finch_str_eq(ptr %a112, ptr %a113) %t115 = icmp ne i32 %t114, 0 br label %logic.rend5183 logic.rend5183: br label %logic.end5182 logic.end5182: %t116 = phi i1 [ true, %logic.from5180 ], [ %t115, %logic.rend5183 ] br i1 %t116, label %then5184, label %endif5186 then5184: %t117 = load ptr, ptr %a1 %t118 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t119 = load { ptr, i64, i64 }, ptr %t118 %t120 = extractvalue { ptr, i64, i64 } %t119, 1 %t121 = icmp uge i64 0, %t120 br i1 %t121, label %range5187, label %inrange5188 range5187: call void @finch_panic_index(ptr @.str.3398, i64 2580, i64 0, i64 %t120) unreachable inrange5188: %t122 = extractvalue { ptr, i64, i64 } %t119, 0 %t123 = getelementptr inbounds %S.ast.Node, ptr %t122, i64 0 %t124 = load %S.ast.Node, ptr %t123 call void @finch.gen.fail(ptr %t117, %S.ast.Node %t124, { ptr, i64, i64 } { ptr @.str.3399, i64 35, i64 0 }) br label %endif5186 endif5186: %t125 = getelementptr inbounds %S.gen.Val, ptr %a11, i32 0, i32 1 %t126 = getelementptr inbounds %S.ast.Type, ptr %t125, i32 0, i32 0 %t127 = load { ptr, i64, i64 }, ptr %t126 store { ptr, i64, i64 } %t127, ptr %a128 store { ptr, i64, i64 } { ptr @.str.3400, i64 4, i64 0 }, ptr %a129 %t130 = call i32 @finch_str_eq(ptr %a128, ptr %a129) %t131 = icmp ne i32 %t130, 0 br label %logic.from5189 logic.from5189: br i1 %t131, label %logic.end5191, label %logic.rhs5190 logic.rhs5190: %t132 = getelementptr inbounds %S.gen.Val, ptr %a11, i32 0, i32 1 %t133 = getelementptr inbounds %S.ast.Type, ptr %t132, i32 0, i32 0 %t134 = load { ptr, i64, i64 }, ptr %t133 store { ptr, i64, i64 } %t134, ptr %a135 store { ptr, i64, i64 } { ptr @.str.3401, i64 4, i64 0 }, ptr %a136 %t137 = call i32 @finch_str_eq(ptr %a135, ptr %a136) %t138 = icmp ne i32 %t137, 0 br label %logic.rend5192 logic.rend5192: br label %logic.end5191 logic.end5191: %t139 = phi i1 [ true, %logic.from5189 ], [ %t138, %logic.rend5192 ] br i1 %t139, label %then5193, label %endif5195 then5193: %t140 = load ptr, ptr %a1 %t141 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t142 = load { ptr, i64, i64 }, ptr %t141 %t143 = extractvalue { ptr, i64, i64 } %t142, 1 %t144 = icmp uge i64 1, %t143 br i1 %t144, label %range5196, label %inrange5197 range5196: call void @finch_panic_index(ptr @.str.3402, i64 2583, i64 1, i64 %t143) unreachable inrange5197: %t145 = extractvalue { ptr, i64, i64 } %t142, 0 %t146 = getelementptr inbounds %S.ast.Node, ptr %t145, i64 1 %t147 = load %S.ast.Node, ptr %t146 call void @finch.gen.fail(ptr %t140, %S.ast.Node %t147, { ptr, i64, i64 } { ptr @.str.3403, i64 37, i64 0 }) br label %endif5195 endif5195: %t148 = getelementptr inbounds %S.gen.Val, ptr %a11, i32 0, i32 1 %t149 = load %S.ast.Type, ptr %t148 store %S.ast.Type %t149, ptr %a150 call void @finch.copy.S_ast_Type(ptr %a151, ptr %a150) %t152 = load %S.ast.Type, ptr %a151 store %S.ast.Type %t152, ptr %a153 %t154 = load i1, ptr %a24 br label %logic.from5198 logic.from5198: br i1 %t154, label %logic.rhs5199, label %logic.end5200 logic.rhs5199: %t155 = load i1, ptr %a25 br label %logic.rend5201 logic.rend5201: br label %logic.end5200 logic.end5200: %t156 = phi i1 [ false, %logic.from5198 ], [ %t155, %logic.rend5201 ] br i1 %t156, label %then5202, label %endif5204 then5202: %t157 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3404, i64 5, i64 0 }) store %S.ast.Type %t157, ptr %a153 br label %endif5204 endif5204: %t158 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 1 %t159 = load %S.ast.Type, ptr %t158 %t160 = load %S.ast.Type, ptr %a153 %t161 = call %S.ast.Type @finch.ast.mapOf(%S.ast.Type %t159, %S.ast.Type %t160) store %S.ast.Type %t161, ptr %a8 store i1 true, ptr %a9 br label %endif5151 endif5151: %t162 = load ptr, ptr %a1 %t163 = load ptr, ptr %a1 %t164 = load %S.ast.Type, ptr %a8 %t165 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t163, %S.ast.Type %t164) %t166 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t162, { ptr, i64, i64 } %t165) store { ptr, i64, i64 } %t166, ptr %a167 %t168 = load ptr, ptr %a1 %t169 = load ptr, ptr %a1 %t170 = load %S.ast.Type, ptr %a8 %t171 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t169, %S.ast.Type %t170) %t172 = load { ptr, i64, i64 }, ptr %a167 call void @finch.gen.store(ptr %t168, { ptr, i64, i64 } %t171, { ptr, i64, i64 } { ptr @.str.3405, i64 15, i64 0 }, { ptr, i64, i64 } %t172) %t173 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t174 = getelementptr inbounds { ptr, i64, i64 }, ptr %t173, i32 0, i32 1 %t175 = load i64, ptr %t174 %t176 = sdiv i64 %t175, 2 store i64 0, ptr %a177 br label %for.cond5205 for.cond5205: %t178 = load i64, ptr %a177 %t179 = icmp slt i64 %t178, %t176 br i1 %t179, label %for.body5206, label %for.end5208 for.body5206: %t180 = load %S.gen.Val, ptr %a10 store %S.gen.Val %t180, ptr %a181 call void @finch.copy.S_gen_Val(ptr %a182, ptr %a181) %t183 = load %S.gen.Val, ptr %a182 store %S.gen.Val %t183, ptr %a184 %t185 = load %S.gen.Val, ptr %a11 store %S.gen.Val %t185, ptr %a186 call void @finch.copy.S_gen_Val(ptr %a187, ptr %a186) %t188 = load %S.gen.Val, ptr %a187 store %S.gen.Val %t188, ptr %a189 %t190 = load i64, ptr %a177 %t191 = icmp eq i64 %t190, 0 br label %logic.from5209 logic.from5209: br i1 %t191, label %logic.rhs5210, label %logic.end5211 logic.rhs5210: %t192 = load i1, ptr %a9 br label %logic.rend5212 logic.rend5212: br label %logic.end5211 logic.end5211: %t193 = phi i1 [ false, %logic.from5209 ], [ %t192, %logic.rend5212 ] %t194 = xor i1 %t193, true br i1 %t194, label %then5213, label %endif5215 then5213: %t195 = load ptr, ptr %a1 %t196 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t197 = load i64, ptr %a177 %t198 = mul i64 2, %t197 %t199 = load { ptr, i64, i64 }, ptr %t196 %t200 = extractvalue { ptr, i64, i64 } %t199, 1 %t201 = icmp uge i64 %t198, %t200 br i1 %t201, label %range5216, label %inrange5217 range5216: call void @finch_panic_index(ptr @.str.3406, i64 2598, i64 %t198, i64 %t200) unreachable inrange5217: %t202 = extractvalue { ptr, i64, i64 } %t199, 0 %t203 = getelementptr inbounds %S.ast.Node, ptr %t202, i64 %t198 %t204 = load %S.ast.Node, ptr %t203 %t205 = getelementptr inbounds %S.ast.Type, ptr %a8, i32 0, i32 1 %t206 = load { ptr, i64, i64 }, ptr %t205 %t207 = extractvalue { ptr, i64, i64 } %t206, 1 %t208 = icmp uge i64 0, %t207 br i1 %t208, label %range5218, label %inrange5219 range5218: call void @finch_panic_index(ptr @.str.3407, i64 2598, i64 0, i64 %t207) unreachable inrange5219: %t209 = extractvalue { ptr, i64, i64 } %t206, 0 %t210 = getelementptr inbounds %S.ast.Type, ptr %t209, i64 0 %t211 = load %S.ast.Type, ptr %t210 %t212 = call %S.gen.Val @finch.gen.exprWant(ptr %t195, %S.ast.Node %t204, %S.ast.Type %t211) store %S.gen.Val %t212, ptr %a184 %t213 = load ptr, ptr %a1 %t214 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t215 = load i64, ptr %a177 %t216 = mul i64 2, %t215 %t217 = add i64 %t216, 1 %t218 = load { ptr, i64, i64 }, ptr %t214 %t219 = extractvalue { ptr, i64, i64 } %t218, 1 %t220 = icmp uge i64 %t217, %t219 br i1 %t220, label %range5220, label %inrange5221 range5220: call void @finch_panic_index(ptr @.str.3408, i64 2599, i64 %t217, i64 %t219) unreachable inrange5221: %t221 = extractvalue { ptr, i64, i64 } %t218, 0 %t222 = getelementptr inbounds %S.ast.Node, ptr %t221, i64 %t217 %t223 = load %S.ast.Node, ptr %t222 %t224 = getelementptr inbounds %S.ast.Type, ptr %a8, i32 0, i32 1 %t225 = load { ptr, i64, i64 }, ptr %t224 %t226 = extractvalue { ptr, i64, i64 } %t225, 1 %t227 = icmp uge i64 1, %t226 br i1 %t227, label %range5222, label %inrange5223 range5222: call void @finch_panic_index(ptr @.str.3409, i64 2599, i64 1, i64 %t226) unreachable inrange5223: %t228 = extractvalue { ptr, i64, i64 } %t225, 0 %t229 = getelementptr inbounds %S.ast.Type, ptr %t228, i64 1 %t230 = load %S.ast.Type, ptr %t229 %t231 = call %S.gen.Val @finch.gen.exprWant(ptr %t213, %S.ast.Node %t223, %S.ast.Type %t230) store %S.gen.Val %t231, ptr %a189 br label %endif5215 endif5215: %t232 = load ptr, ptr %a1 %t233 = load %S.gen.Val, ptr %a184 %t234 = getelementptr inbounds %S.ast.Type, ptr %a8, i32 0, i32 1 %t235 = load { ptr, i64, i64 }, ptr %t234 %t236 = extractvalue { ptr, i64, i64 } %t235, 1 %t237 = icmp uge i64 0, %t236 br i1 %t237, label %range5224, label %inrange5225 range5224: call void @finch_panic_index(ptr @.str.3410, i64 2601, i64 0, i64 %t236) unreachable inrange5225: %t238 = extractvalue { ptr, i64, i64 } %t235, 0 %t239 = getelementptr inbounds %S.ast.Type, ptr %t238, i64 0 %t240 = load %S.ast.Type, ptr %t239 %t241 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t242 = load i64, ptr %a177 %t243 = mul i64 2, %t242 %t244 = load { ptr, i64, i64 }, ptr %t241 %t245 = extractvalue { ptr, i64, i64 } %t244, 1 %t246 = icmp uge i64 %t243, %t245 br i1 %t246, label %range5226, label %inrange5227 range5226: call void @finch_panic_index(ptr @.str.3411, i64 2601, i64 %t243, i64 %t245) unreachable inrange5227: %t247 = extractvalue { ptr, i64, i64 } %t244, 0 %t248 = getelementptr inbounds %S.ast.Node, ptr %t247, i64 %t243 %t249 = load %S.ast.Node, ptr %t248 %t250 = call %S.gen.Val @finch.gen.coerce(ptr %t232, %S.gen.Val %t233, %S.ast.Type %t240, %S.ast.Node %t249, { ptr, i64, i64 } { ptr @.str.3412, i64 21, i64 0 }) store %S.gen.Val %t250, ptr %a184 %t251 = load ptr, ptr %a1 %t252 = load %S.gen.Val, ptr %a189 %t253 = getelementptr inbounds %S.ast.Type, ptr %a8, i32 0, i32 1 %t254 = load { ptr, i64, i64 }, ptr %t253 %t255 = extractvalue { ptr, i64, i64 } %t254, 1 %t256 = icmp uge i64 1, %t255 br i1 %t256, label %range5228, label %inrange5229 range5228: call void @finch_panic_index(ptr @.str.3413, i64 2602, i64 1, i64 %t255) unreachable inrange5229: %t257 = extractvalue { ptr, i64, i64 } %t254, 0 %t258 = getelementptr inbounds %S.ast.Type, ptr %t257, i64 1 %t259 = load %S.ast.Type, ptr %t258 %t260 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t261 = load i64, ptr %a177 %t262 = mul i64 2, %t261 %t263 = add i64 %t262, 1 %t264 = load { ptr, i64, i64 }, ptr %t260 %t265 = extractvalue { ptr, i64, i64 } %t264, 1 %t266 = icmp uge i64 %t263, %t265 br i1 %t266, label %range5230, label %inrange5231 range5230: call void @finch_panic_index(ptr @.str.3414, i64 2602, i64 %t263, i64 %t265) unreachable inrange5231: %t267 = extractvalue { ptr, i64, i64 } %t264, 0 %t268 = getelementptr inbounds %S.ast.Node, ptr %t267, i64 %t263 %t269 = load %S.ast.Node, ptr %t268 %t270 = call %S.gen.Val @finch.gen.coerce(ptr %t251, %S.gen.Val %t252, %S.ast.Type %t259, %S.ast.Node %t269, { ptr, i64, i64 } { ptr @.str.3415, i64 23, i64 0 }) store %S.gen.Val %t270, ptr %a189 %t271 = load ptr, ptr %a1 %t272 = load %S.gen.Val, ptr %a189 %t273 = call { ptr, i64, i64 } @finch.gen.own(ptr %t271, %S.gen.Val %t272) store { ptr, i64, i64 } %t273, ptr %a274 %t275 = load ptr, ptr %a1 %t276 = load { ptr, i64, i64 }, ptr %a167 %t277 = load %S.ast.Type, ptr %a8 %t278 = load %S.gen.Val, ptr %a184 %t279 = load %S.ast.Node, ptr %a2 %t280 = call { ptr, i64, i64 } @finch.gen.mapSlot(ptr %t275, { ptr, i64, i64 } %t276, %S.ast.Type %t277, %S.gen.Val %t278, i1 false, %S.ast.Node %t279) store { ptr, i64, i64 } %t280, ptr %a281 %t282 = load ptr, ptr %a1 %t283 = load ptr, ptr %a1 %t284 = getelementptr inbounds %S.ast.Type, ptr %a8, i32 0, i32 1 %t285 = load { ptr, i64, i64 }, ptr %t284 %t286 = extractvalue { ptr, i64, i64 } %t285, 1 %t287 = icmp uge i64 1, %t286 br i1 %t287, label %range5232, label %inrange5233 range5232: call void @finch_panic_index(ptr @.str.3416, i64 2605, i64 1, i64 %t286) unreachable inrange5233: %t288 = extractvalue { ptr, i64, i64 } %t285, 0 %t289 = getelementptr inbounds %S.ast.Type, ptr %t288, i64 1 %t290 = load %S.ast.Type, ptr %t289 %t291 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t283, %S.ast.Type %t290) %t292 = load { ptr, i64, i64 }, ptr %a274 %t293 = load ptr, ptr %a1 %t294 = load { ptr, i64, i64 }, ptr %a281 %t295 = load %S.ast.Type, ptr %a8 %t296 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t293, { ptr, i64, i64 } %t294, %S.ast.Type %t295, i64 2) call void @finch.gen.store(ptr %t282, { ptr, i64, i64 } %t291, { ptr, i64, i64 } %t292, { ptr, i64, i64 } %t296) br label %for.step5207 for.step5207: %t297 = load i64, ptr %a177 %t298 = add i64 %t297, 1 store i64 %t298, ptr %a177 br label %for.cond5205 for.end5208: %t299 = load ptr, ptr %a1 %t300 = load ptr, ptr %a1 %t301 = load %S.ast.Type, ptr %a8 %t302 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t300, %S.ast.Type %t301) %t303 = load { ptr, i64, i64 }, ptr %a167 %t304 = call { ptr, i64, i64 } @finch.gen.load(ptr %t299, { ptr, i64, i64 } %t302, { ptr, i64, i64 } %t303) %t305 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t304, 0 %t306 = load %S.ast.Type, ptr %a8 store %S.ast.Type %t306, ptr %a307 call void @finch.copy.S_ast_Type(ptr %a308, ptr %a307) %t309 = load %S.ast.Type, ptr %a308 %t310 = insertvalue %S.gen.Val %t305, %S.ast.Type %t309, 1 %t311 = insertvalue %S.gen.Val %t310, i1 true, 2 ret %S.gen.Val %t311 } define internal %S.gen.Val @finch.gen.mapMethod(ptr %p0, %S.ast.Node %p1, { ptr, i64, i64 } %p2, %S.ast.Type %p3) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca %S.ast.Type, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca %S.ast.Type, align 16 %a19 = alloca %S.ast.Type, align 16 %a21 = alloca %S.ast.Type, align 16 %a29 = alloca %S.ast.Type, align 16 %a30 = alloca %S.ast.Type, align 16 %a32 = alloca %S.ast.Type, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca %S.gen.Val, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca { ptr, i64, i64 }, align 16 %a104 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca { ptr, i64, i64 }, align 16 %a115 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca { ptr, i64, i64 }, align 16 %a121 = alloca { ptr, i64, i64 }, align 16 %a124 = alloca { ptr, i64, i64 }, align 16 %a133 = alloca { ptr, i64, i64 }, align 16 %a134 = alloca { ptr, i64, i64 }, align 16 %a135 = alloca { ptr, i64, i64 }, align 16 %a137 = alloca { ptr, i64, i64 }, align 16 %a138 = alloca { ptr, i64, i64 }, align 16 %a139 = alloca { ptr, i64, i64 }, align 16 %a142 = alloca { ptr, i64, i64 }, align 16 %a143 = alloca { ptr, i64, i64 }, align 16 %a144 = alloca { ptr, i64, i64 }, align 16 %a146 = alloca { ptr, i64, i64 }, align 16 %a147 = alloca { ptr, i64, i64 }, align 16 %a148 = alloca { ptr, i64, i64 }, align 16 %a153 = alloca { ptr, i64, i64 }, align 16 %a154 = alloca { ptr, i64, i64 }, align 16 %a155 = alloca { ptr, i64, i64 }, align 16 %a157 = alloca { ptr, i64, i64 }, align 16 %a158 = alloca { ptr, i64, i64 }, align 16 %a159 = alloca { ptr, i64, i64 }, align 16 %a166 = alloca { ptr, i64, i64 }, align 16 %a167 = alloca { ptr, i64, i64 }, align 16 %a174 = alloca { ptr, i64, i64 }, align 16 %a177 = alloca { ptr, i64, i64 }, align 16 %a180 = alloca { ptr, i64, i64 }, align 16 %a183 = alloca { ptr, i64, i64 }, align 16 %a186 = alloca { ptr, i64, i64 }, align 16 %a209 = alloca { ptr, i64, i64 }, align 16 %a240 = alloca { ptr, i64, i64 }, align 16 %a253 = alloca { ptr, i64, i64 }, align 16 %a254 = alloca { ptr, i64, i64 }, align 16 %a255 = alloca { ptr, i64, i64 }, align 16 %a257 = alloca { ptr, i64, i64 }, align 16 %a258 = alloca { ptr, i64, i64 }, align 16 %a259 = alloca { ptr, i64, i64 }, align 16 %a262 = alloca { ptr, i64, i64 }, align 16 %a263 = alloca { ptr, i64, i64 }, align 16 %a264 = alloca { ptr, i64, i64 }, align 16 %a266 = alloca { ptr, i64, i64 }, align 16 %a267 = alloca { ptr, i64, i64 }, align 16 %a268 = alloca { ptr, i64, i64 }, align 16 %a271 = alloca { ptr, i64, i64 }, align 16 %a272 = alloca { ptr, i64, i64 }, align 16 %a273 = alloca { ptr, i64, i64 }, align 16 %a275 = alloca { ptr, i64, i64 }, align 16 %a276 = alloca { ptr, i64, i64 }, align 16 %a277 = alloca { ptr, i64, i64 }, align 16 %a280 = alloca { ptr, i64, i64 }, align 16 %a281 = alloca { ptr, i64, i64 }, align 16 %a282 = alloca { ptr, i64, i64 }, align 16 %a284 = alloca { ptr, i64, i64 }, align 16 %a285 = alloca { ptr, i64, i64 }, align 16 %a286 = alloca { ptr, i64, i64 }, align 16 %a289 = alloca { ptr, i64, i64 }, align 16 %a290 = alloca { ptr, i64, i64 }, align 16 %a291 = alloca { ptr, i64, i64 }, align 16 %a293 = alloca { ptr, i64, i64 }, align 16 %a294 = alloca { ptr, i64, i64 }, align 16 %a295 = alloca { ptr, i64, i64 }, align 16 %a300 = alloca %S.ast.Type, align 16 %a301 = alloca %S.ast.Type, align 16 %a309 = alloca { ptr, i64, i64 }, align 16 %a310 = alloca { ptr, i64, i64 }, align 16 %a318 = alloca { ptr, i64, i64 }, align 16 %a319 = alloca { ptr, i64, i64 }, align 16 %a320 = alloca { ptr, i64, i64 }, align 16 %a322 = alloca { ptr, i64, i64 }, align 16 %a323 = alloca { ptr, i64, i64 }, align 16 %a324 = alloca { ptr, i64, i64 }, align 16 %a329 = alloca { ptr, i64, i64 }, align 16 %a330 = alloca { ptr, i64, i64 }, align 16 %a334 = alloca { ptr, i64, i64 }, align 16 %a335 = alloca { ptr, i64, i64 }, align 16 %a342 = alloca i64, align 16 %a344 = alloca %S.ast.Type, align 16 %a345 = alloca %S.ast.Type, align 16 %a347 = alloca %S.ast.Type, align 16 %a349 = alloca { ptr, i64, i64 }, align 16 %a350 = alloca { ptr, i64, i64 }, align 16 %a354 = alloca %S.ast.Type, align 16 %a355 = alloca %S.ast.Type, align 16 %a359 = alloca %S.ast.Type, align 16 %a362 = alloca { ptr, i64, i64 }, align 16 %a370 = alloca { ptr, i64, i64 }, align 16 %a371 = alloca { ptr, i64, i64 }, align 16 %a372 = alloca { ptr, i64, i64 }, align 16 %a374 = alloca { ptr, i64, i64 }, align 16 %a375 = alloca { ptr, i64, i64 }, align 16 %a376 = alloca { ptr, i64, i64 }, align 16 %a379 = alloca { ptr, i64, i64 }, align 16 %a380 = alloca { ptr, i64, i64 }, align 16 %a381 = alloca { ptr, i64, i64 }, align 16 %a383 = alloca { ptr, i64, i64 }, align 16 %a384 = alloca { ptr, i64, i64 }, align 16 %a385 = alloca { ptr, i64, i64 }, align 16 %a389 = alloca { ptr, i64, i64 }, align 16 %a392 = alloca { ptr, i64, i64 }, align 16 %a393 = alloca { ptr, i64, i64 }, align 16 %a394 = alloca { ptr, i64, i64 }, align 16 %a396 = alloca { ptr, i64, i64 }, align 16 %a397 = alloca { ptr, i64, i64 }, align 16 %a398 = alloca { ptr, i64, i64 }, align 16 %a401 = alloca { ptr, i64, i64 }, align 16 %a402 = alloca { ptr, i64, i64 }, align 16 %a403 = alloca { ptr, i64, i64 }, align 16 %a405 = alloca { ptr, i64, i64 }, align 16 %a406 = alloca { ptr, i64, i64 }, align 16 %a407 = alloca { ptr, i64, i64 }, align 16 %a412 = alloca { ptr, i64, i64 }, align 16 %a413 = alloca { ptr, i64, i64 }, align 16 %a414 = alloca { ptr, i64, i64 }, align 16 %a416 = alloca { ptr, i64, i64 }, align 16 %a417 = alloca { ptr, i64, i64 }, align 16 %a418 = alloca { ptr, i64, i64 }, align 16 %a423 = alloca { ptr, i64, i64 }, align 16 %a426 = alloca { ptr, i64, i64 }, align 16 %a434 = alloca { ptr, i64, i64 }, align 16 %a435 = alloca { ptr, i64, i64 }, align 16 %a436 = alloca { ptr, i64, i64 }, align 16 %a438 = alloca { ptr, i64, i64 }, align 16 %a439 = alloca { ptr, i64, i64 }, align 16 %a440 = alloca { ptr, i64, i64 }, align 16 %a443 = alloca { ptr, i64, i64 }, align 16 %a444 = alloca { ptr, i64, i64 }, align 16 %a445 = alloca { ptr, i64, i64 }, align 16 %a447 = alloca { ptr, i64, i64 }, align 16 %a448 = alloca { ptr, i64, i64 }, align 16 %a449 = alloca { ptr, i64, i64 }, align 16 %a453 = alloca { ptr, i64, i64 }, align 16 %a457 = alloca { ptr, i64, i64 }, align 16 %a468 = alloca { ptr, i64, i64 }, align 16 %a471 = alloca { ptr, i64, i64 }, align 16 %a474 = alloca { ptr, i64, i64 }, align 16 %a483 = alloca { ptr, i64, i64 }, align 16 %a484 = alloca { ptr, i64, i64 }, align 16 %a485 = alloca { ptr, i64, i64 }, align 16 %a487 = alloca { ptr, i64, i64 }, align 16 %a488 = alloca { ptr, i64, i64 }, align 16 %a489 = alloca { ptr, i64, i64 }, align 16 %a499 = alloca { ptr, i64, i64 }, align 16 %a505 = alloca { ptr, i64, i64 }, align 16 %a506 = alloca { ptr, i64, i64 }, align 16 %a507 = alloca { ptr, i64, i64 }, align 16 %a509 = alloca { ptr, i64, i64 }, align 16 %a510 = alloca { ptr, i64, i64 }, align 16 %a511 = alloca { ptr, i64, i64 }, align 16 %a514 = alloca { ptr, i64, i64 }, align 16 %a515 = alloca { ptr, i64, i64 }, align 16 %a516 = alloca { ptr, i64, i64 }, align 16 %a518 = alloca { ptr, i64, i64 }, align 16 %a519 = alloca { ptr, i64, i64 }, align 16 %a520 = alloca { ptr, i64, i64 }, align 16 %a523 = alloca { ptr, i64, i64 }, align 16 %a524 = alloca { ptr, i64, i64 }, align 16 %a525 = alloca { ptr, i64, i64 }, align 16 %a537 = alloca { ptr, i64, i64 }, align 16 %a538 = alloca { ptr, i64, i64 }, align 16 %a539 = alloca { ptr, i64, i64 }, align 16 %a541 = alloca { ptr, i64, i64 }, align 16 %a542 = alloca { ptr, i64, i64 }, align 16 %a543 = alloca { ptr, i64, i64 }, align 16 %a558 = alloca %S.ast.Type, align 16 %a559 = alloca %S.ast.Type, align 16 %a566 = alloca { ptr, i64, i64 }, align 16 %a567 = alloca { ptr, i64, i64 }, align 16 %a568 = alloca { ptr, i64, i64 }, align 16 %a570 = alloca { ptr, i64, i64 }, align 16 %a571 = alloca { ptr, i64, i64 }, align 16 %a572 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 store %S.ast.Type %p3, ptr %a4 %t5 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t6 = load { ptr, i64, i64 }, ptr %t5 store { ptr, i64, i64 } %t6, ptr %a7 call void @finch_str_copy(ptr %a8, ptr %a7) %t9 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t9, ptr %a10 %t11 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 1 %t12 = load { ptr, i64, i64 }, ptr %t11 %t13 = extractvalue { ptr, i64, i64 } %t12, 1 %t14 = icmp uge i64 0, %t13 br i1 %t14, label %range5234, label %inrange5235 range5234: call void @finch_panic_index(ptr @.str.3417, i64 2612, i64 0, i64 %t13) unreachable inrange5235: %t15 = extractvalue { ptr, i64, i64 } %t12, 0 %t16 = getelementptr inbounds %S.ast.Type, ptr %t15, i64 0 %t17 = load %S.ast.Type, ptr %t16 store %S.ast.Type %t17, ptr %a18 call void @finch.copy.S_ast_Type(ptr %a19, ptr %a18) %t20 = load %S.ast.Type, ptr %a19 store %S.ast.Type %t20, ptr %a21 %t22 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 1 %t23 = load { ptr, i64, i64 }, ptr %t22 %t24 = extractvalue { ptr, i64, i64 } %t23, 1 %t25 = icmp uge i64 1, %t24 br i1 %t25, label %range5236, label %inrange5237 range5236: call void @finch_panic_index(ptr @.str.3418, i64 2613, i64 1, i64 %t24) unreachable inrange5237: %t26 = extractvalue { ptr, i64, i64 } %t23, 0 %t27 = getelementptr inbounds %S.ast.Type, ptr %t26, i64 1 %t28 = load %S.ast.Type, ptr %t27 store %S.ast.Type %t28, ptr %a29 call void @finch.copy.S_ast_Type(ptr %a30, ptr %a29) %t31 = load %S.ast.Type, ptr %a30 store %S.ast.Type %t31, ptr %a32 %t33 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t33, ptr %a34 store { ptr, i64, i64 } { ptr @.str.3419, i64 3, i64 0 }, ptr %a35 %t36 = call i32 @finch_str_eq(ptr %a34, ptr %a35) %t37 = icmp ne i32 %t36, 0 br label %logic.from5238 logic.from5238: br i1 %t37, label %logic.end5240, label %logic.rhs5239 logic.rhs5239: %t38 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t38, ptr %a39 store { ptr, i64, i64 } { ptr @.str.3420, i64 3, i64 0 }, ptr %a40 %t41 = call i32 @finch_str_eq(ptr %a39, ptr %a40) %t42 = icmp ne i32 %t41, 0 br label %logic.rend5241 logic.rend5241: br label %logic.end5240 logic.end5240: %t43 = phi i1 [ true, %logic.from5238 ], [ %t42, %logic.rend5241 ] br label %logic.from5242 logic.from5242: br i1 %t43, label %logic.end5244, label %logic.rhs5243 logic.rhs5243: %t44 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t44, ptr %a45 store { ptr, i64, i64 } { ptr @.str.3421, i64 6, i64 0 }, ptr %a46 %t47 = call i32 @finch_str_eq(ptr %a45, ptr %a46) %t48 = icmp ne i32 %t47, 0 br label %logic.rend5245 logic.rend5245: br label %logic.end5244 logic.end5244: %t49 = phi i1 [ true, %logic.from5242 ], [ %t48, %logic.rend5245 ] br i1 %t49, label %then5246, label %endif5248 then5246: %t50 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t50, ptr %a51 store { ptr, i64, i64 } { ptr @.str.3422, i64 3, i64 0 }, ptr %a52 %t53 = call i32 @finch_str_eq(ptr %a51, ptr %a52) %t54 = icmp ne i32 %t53, 0 br i1 %t54, label %then5249, label %else5250 then5249: %t55 = load ptr, ptr %a1 %t56 = load %S.ast.Node, ptr %a2 %t57 = load { ptr, i64, i64 }, ptr %a10 call void @finch.gen.checkArgs(ptr %t55, %S.ast.Node %t56, i64 1, i64 2, { ptr, i64, i64 } %t57) br label %endif5251 else5250: %t58 = load ptr, ptr %a1 %t59 = load %S.ast.Node, ptr %a2 %t60 = load { ptr, i64, i64 }, ptr %a10 call void @finch.gen.checkArgs(ptr %t58, %S.ast.Node %t59, i64 1, i64 1, { ptr, i64, i64 } %t60) br label %endif5251 endif5251: %t61 = load ptr, ptr %a1 %t62 = load ptr, ptr %a1 %t63 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t64 = load { ptr, i64, i64 }, ptr %t63 %t65 = extractvalue { ptr, i64, i64 } %t64, 1 %t66 = icmp uge i64 1, %t65 br i1 %t66, label %range5252, label %inrange5253 range5252: call void @finch_panic_index(ptr @.str.3423, i64 2620, i64 1, i64 %t65) unreachable inrange5253: %t67 = extractvalue { ptr, i64, i64 } %t64, 0 %t68 = getelementptr inbounds %S.ast.Node, ptr %t67, i64 1 %t69 = load %S.ast.Node, ptr %t68 %t70 = load %S.ast.Type, ptr %a21 %t71 = call %S.gen.Val @finch.gen.exprWant(ptr %t62, %S.ast.Node %t69, %S.ast.Type %t70) %t72 = load %S.ast.Type, ptr %a21 %t73 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t74 = load { ptr, i64, i64 }, ptr %t73 %t75 = extractvalue { ptr, i64, i64 } %t74, 1 %t76 = icmp uge i64 1, %t75 br i1 %t76, label %range5254, label %inrange5255 range5254: call void @finch_panic_index(ptr @.str.3424, i64 2620, i64 1, i64 %t75) unreachable inrange5255: %t77 = extractvalue { ptr, i64, i64 } %t74, 0 %t78 = getelementptr inbounds %S.ast.Node, ptr %t77, i64 1 %t79 = load %S.ast.Node, ptr %t78 %t80 = call %S.gen.Val @finch.gen.coerce(ptr %t61, %S.gen.Val %t71, %S.ast.Type %t72, %S.ast.Node %t79, { ptr, i64, i64 } { ptr @.str.3425, i64 7, i64 0 }) store %S.gen.Val %t80, ptr %a81 %t82 = load ptr, ptr %a1 %t83 = load { ptr, i64, i64 }, ptr %a3 %t84 = load ptr, ptr %a1 %t85 = load %S.gen.Val, ptr %a81 %t86 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t84, %S.gen.Val %t85) %t87 = load %S.ast.Type, ptr %a4 %t88 = call { ptr, i64, i64 } @finch.gen.mapFind(ptr %t82, { ptr, i64, i64 } %t83, { ptr, i64, i64 } %t86, %S.ast.Type %t87) store { ptr, i64, i64 } %t88, ptr %a89 %t90 = load ptr, ptr %a1 %t91 = load { ptr, i64, i64 }, ptr %a89 store { ptr, i64, i64 } { ptr @.str.3426, i64 13, i64 0 }, ptr %a93 store { ptr, i64, i64 } %t91, ptr %a94 call void @finch_str_concat(ptr %a92, ptr %a93, ptr %a94) %t95 = load { ptr, i64, i64 }, ptr %a92 store { ptr, i64, i64 } %t95, ptr %a97 store { ptr, i64, i64 } { ptr @.str.3427, i64 3, i64 0 }, ptr %a98 call void @finch_str_concat(ptr %a96, ptr %a97, ptr %a98) %t99 = load { ptr, i64, i64 }, ptr %a96 %t100 = call { ptr, i64, i64 } @finch.gen.op(ptr %t90, { ptr, i64, i64 } %t99) store { ptr, i64, i64 } %t100, ptr %a101 %t102 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t102, ptr %a103 store { ptr, i64, i64 } { ptr @.str.3428, i64 3, i64 0 }, ptr %a104 %t105 = call i32 @finch_str_eq(ptr %a103, ptr %a104) %t106 = icmp ne i32 %t105, 0 br i1 %t106, label %then5256, label %endif5258 then5256: %t107 = load { ptr, i64, i64 }, ptr %a101 store { ptr, i64, i64 } %t107, ptr %a108 call void @finch_str_copy(ptr %a109, ptr %a108) %t110 = load { ptr, i64, i64 }, ptr %a109 %t111 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t110, 0 %t112 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3429, i64 4, i64 0 }) %t113 = insertvalue %S.gen.Val %t111, %S.ast.Type %t112, 1 ret %S.gen.Val %t113 endif5258: %t114 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t114, ptr %a115 store { ptr, i64, i64 } { ptr @.str.3430, i64 6, i64 0 }, ptr %a116 %t117 = call i32 @finch_str_eq(ptr %a115, ptr %a116) %t118 = icmp ne i32 %t117, 0 br i1 %t118, label %then5259, label %endif5261 then5259: %t119 = load ptr, ptr %a1 %t120 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t119, { ptr, i64, i64 } { ptr @.str.3431, i64 10, i64 0 }) store { ptr, i64, i64 } %t120, ptr %a121 %t122 = load ptr, ptr %a1 %t123 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t122, { ptr, i64, i64 } { ptr @.str.3432, i64 10, i64 0 }) store { ptr, i64, i64 } %t123, ptr %a124 %t125 = load ptr, ptr %a1 %t126 = load { ptr, i64, i64 }, ptr %a101 %t127 = load { ptr, i64, i64 }, ptr %a121 %t128 = load { ptr, i64, i64 }, ptr %a124 call void @finch.gen.condBr(ptr %t125, { ptr, i64, i64 } %t126, { ptr, i64, i64 } %t127, { ptr, i64, i64 } %t128) %t129 = load ptr, ptr %a1 %t130 = load { ptr, i64, i64 }, ptr %a121 call void @finch.gen.label(ptr %t129, { ptr, i64, i64 } %t130) %t131 = load ptr, ptr %a1 %t132 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } { ptr @.str.3433, i64 35, i64 0 }, ptr %a134 store { ptr, i64, i64 } %t132, ptr %a135 call void @finch_str_concat(ptr %a133, ptr %a134, ptr %a135) %t136 = load { ptr, i64, i64 }, ptr %a133 store { ptr, i64, i64 } %t136, ptr %a138 store { ptr, i64, i64 } { ptr @.str.3434, i64 6, i64 0 }, ptr %a139 call void @finch_str_concat(ptr %a137, ptr %a138, ptr %a139) %t140 = load { ptr, i64, i64 }, ptr %a137 %t141 = load { ptr, i64, i64 }, ptr %a89 store { ptr, i64, i64 } %t140, ptr %a143 store { ptr, i64, i64 } %t141, ptr %a144 call void @finch_str_concat(ptr %a142, ptr %a143, ptr %a144) %t145 = load { ptr, i64, i64 }, ptr %a142 store { ptr, i64, i64 } %t145, ptr %a147 store { ptr, i64, i64 } { ptr @.str.3435, i64 6, i64 0 }, ptr %a148 call void @finch_str_concat(ptr %a146, ptr %a147, ptr %a148) %t149 = load { ptr, i64, i64 }, ptr %a146 %t150 = load ptr, ptr %a1 %t151 = load %S.ast.Type, ptr %a4 %t152 = call { ptr, i64, i64 } @finch.gen.entrySize(ptr %t150, %S.ast.Type %t151) store { ptr, i64, i64 } %t149, ptr %a154 store { ptr, i64, i64 } %t152, ptr %a155 call void @finch_str_concat(ptr %a153, ptr %a154, ptr %a155) %t156 = load { ptr, i64, i64 }, ptr %a153 store { ptr, i64, i64 } %t156, ptr %a158 store { ptr, i64, i64 } { ptr @.str.3436, i64 1, i64 0 }, ptr %a159 call void @finch_str_concat(ptr %a157, ptr %a158, ptr %a159) %t160 = load { ptr, i64, i64 }, ptr %a157 call void @finch.gen.emit(ptr %t131, { ptr, i64, i64 } %t160) %t161 = load ptr, ptr %a1 %t162 = load { ptr, i64, i64 }, ptr %a124 call void @finch.gen.br(ptr %t161, { ptr, i64, i64 } %t162) %t163 = load ptr, ptr %a1 %t164 = load { ptr, i64, i64 }, ptr %a124 call void @finch.gen.label(ptr %t163, { ptr, i64, i64 } %t164) %t165 = load { ptr, i64, i64 }, ptr %a101 store { ptr, i64, i64 } %t165, ptr %a166 call void @finch_str_copy(ptr %a167, ptr %a166) %t168 = load { ptr, i64, i64 }, ptr %a167 %t169 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t168, 0 %t170 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3437, i64 4, i64 0 }) %t171 = insertvalue %S.gen.Val %t169, %S.ast.Type %t170, 1 ret %S.gen.Val %t171 endif5261: %t172 = load ptr, ptr %a1 %t173 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t172, { ptr, i64, i64 } { ptr @.str.3438, i64 9, i64 0 }) store { ptr, i64, i64 } %t173, ptr %a174 %t175 = load ptr, ptr %a1 %t176 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t175, { ptr, i64, i64 } { ptr @.str.3439, i64 11, i64 0 }) store { ptr, i64, i64 } %t176, ptr %a177 %t178 = load ptr, ptr %a1 %t179 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t178, { ptr, i64, i64 } { ptr @.str.3440, i64 8, i64 0 }) store { ptr, i64, i64 } %t179, ptr %a180 %t181 = load ptr, ptr %a1 %t182 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t181, { ptr, i64, i64 } { ptr @.str.3441, i64 8, i64 0 }) store { ptr, i64, i64 } %t182, ptr %a183 %t184 = load ptr, ptr %a1 %t185 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t184, { ptr, i64, i64 } { ptr @.str.3442, i64 7, i64 0 }) store { ptr, i64, i64 } %t185, ptr %a186 %t187 = load ptr, ptr %a1 %t188 = load { ptr, i64, i64 }, ptr %a101 %t189 = load { ptr, i64, i64 }, ptr %a174 %t190 = load { ptr, i64, i64 }, ptr %a177 call void @finch.gen.condBr(ptr %t187, { ptr, i64, i64 } %t188, { ptr, i64, i64 } %t189, { ptr, i64, i64 } %t190) %t191 = load ptr, ptr %a1 %t192 = load { ptr, i64, i64 }, ptr %a174 call void @finch.gen.label(ptr %t191, { ptr, i64, i64 } %t192) %t193 = load ptr, ptr %a1 %t194 = load ptr, ptr %a1 %t195 = load ptr, ptr %a1 %t196 = load %S.ast.Type, ptr %a32 %t197 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t195, %S.ast.Type %t196) %t198 = load ptr, ptr %a1 %t199 = load ptr, ptr %a1 %t200 = load { ptr, i64, i64 }, ptr %a3 %t201 = load %S.ast.Type, ptr %a4 %t202 = load { ptr, i64, i64 }, ptr %a89 %t203 = call { ptr, i64, i64 } @finch.gen.entryAt(ptr %t199, { ptr, i64, i64 } %t200, %S.ast.Type %t201, { ptr, i64, i64 } %t202) %t204 = load %S.ast.Type, ptr %a4 %t205 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t198, { ptr, i64, i64 } %t203, %S.ast.Type %t204, i64 2) %t206 = call { ptr, i64, i64 } @finch.gen.load(ptr %t194, { ptr, i64, i64 } %t197, { ptr, i64, i64 } %t205) %t207 = load %S.ast.Type, ptr %a32 %t208 = call { ptr, i64, i64 } @finch.gen.copyValue(ptr %t193, { ptr, i64, i64 } %t206, %S.ast.Type %t207) store { ptr, i64, i64 } %t208, ptr %a209 %t210 = load ptr, ptr %a1 %t211 = load { ptr, i64, i64 }, ptr %a180 call void @finch.gen.br(ptr %t210, { ptr, i64, i64 } %t211) %t212 = load ptr, ptr %a1 %t213 = load { ptr, i64, i64 }, ptr %a180 call void @finch.gen.label(ptr %t212, { ptr, i64, i64 } %t213) %t214 = load ptr, ptr %a1 %t215 = load { ptr, i64, i64 }, ptr %a186 call void @finch.gen.br(ptr %t214, { ptr, i64, i64 } %t215) %t216 = load ptr, ptr %a1 %t217 = load { ptr, i64, i64 }, ptr %a177 call void @finch.gen.label(ptr %t216, { ptr, i64, i64 } %t217) %t218 = load ptr, ptr %a1 %t219 = load ptr, ptr %a1 %t220 = load ptr, ptr %a1 %t221 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t222 = load { ptr, i64, i64 }, ptr %t221 %t223 = extractvalue { ptr, i64, i64 } %t222, 1 %t224 = icmp uge i64 2, %t223 br i1 %t224, label %range5262, label %inrange5263 range5262: call void @finch_panic_index(ptr @.str.3443, i64 2649, i64 2, i64 %t223) unreachable inrange5263: %t225 = extractvalue { ptr, i64, i64 } %t222, 0 %t226 = getelementptr inbounds %S.ast.Node, ptr %t225, i64 2 %t227 = load %S.ast.Node, ptr %t226 %t228 = load %S.ast.Type, ptr %a32 %t229 = call %S.gen.Val @finch.gen.exprWant(ptr %t220, %S.ast.Node %t227, %S.ast.Type %t228) %t230 = load %S.ast.Type, ptr %a32 %t231 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t232 = load { ptr, i64, i64 }, ptr %t231 %t233 = extractvalue { ptr, i64, i64 } %t232, 1 %t234 = icmp uge i64 2, %t233 br i1 %t234, label %range5264, label %inrange5265 range5264: call void @finch_panic_index(ptr @.str.3444, i64 2649, i64 2, i64 %t233) unreachable inrange5265: %t235 = extractvalue { ptr, i64, i64 } %t232, 0 %t236 = getelementptr inbounds %S.ast.Node, ptr %t235, i64 2 %t237 = load %S.ast.Node, ptr %t236 %t238 = call %S.gen.Val @finch.gen.coerce(ptr %t219, %S.gen.Val %t229, %S.ast.Type %t230, %S.ast.Node %t237, { ptr, i64, i64 } { ptr @.str.3445, i64 11, i64 0 }) %t239 = call { ptr, i64, i64 } @finch.gen.own(ptr %t218, %S.gen.Val %t238) store { ptr, i64, i64 } %t239, ptr %a240 %t241 = load ptr, ptr %a1 %t242 = load { ptr, i64, i64 }, ptr %a183 call void @finch.gen.br(ptr %t241, { ptr, i64, i64 } %t242) %t243 = load ptr, ptr %a1 %t244 = load { ptr, i64, i64 }, ptr %a183 call void @finch.gen.label(ptr %t243, { ptr, i64, i64 } %t244) %t245 = load ptr, ptr %a1 %t246 = load { ptr, i64, i64 }, ptr %a186 call void @finch.gen.br(ptr %t245, { ptr, i64, i64 } %t246) %t247 = load ptr, ptr %a1 %t248 = load { ptr, i64, i64 }, ptr %a186 call void @finch.gen.label(ptr %t247, { ptr, i64, i64 } %t248) %t249 = load ptr, ptr %a1 %t250 = load ptr, ptr %a1 %t251 = load %S.ast.Type, ptr %a32 %t252 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t250, %S.ast.Type %t251) store { ptr, i64, i64 } { ptr @.str.3446, i64 4, i64 0 }, ptr %a254 store { ptr, i64, i64 } %t252, ptr %a255 call void @finch_str_concat(ptr %a253, ptr %a254, ptr %a255) %t256 = load { ptr, i64, i64 }, ptr %a253 store { ptr, i64, i64 } %t256, ptr %a258 store { ptr, i64, i64 } { ptr @.str.3447, i64 3, i64 0 }, ptr %a259 call void @finch_str_concat(ptr %a257, ptr %a258, ptr %a259) %t260 = load { ptr, i64, i64 }, ptr %a257 %t261 = load { ptr, i64, i64 }, ptr %a209 store { ptr, i64, i64 } %t260, ptr %a263 store { ptr, i64, i64 } %t261, ptr %a264 call void @finch_str_concat(ptr %a262, ptr %a263, ptr %a264) %t265 = load { ptr, i64, i64 }, ptr %a262 store { ptr, i64, i64 } %t265, ptr %a267 store { ptr, i64, i64 } { ptr @.str.3448, i64 3, i64 0 }, ptr %a268 call void @finch_str_concat(ptr %a266, ptr %a267, ptr %a268) %t269 = load { ptr, i64, i64 }, ptr %a266 %t270 = load { ptr, i64, i64 }, ptr %a180 store { ptr, i64, i64 } %t269, ptr %a272 store { ptr, i64, i64 } %t270, ptr %a273 call void @finch_str_concat(ptr %a271, ptr %a272, ptr %a273) %t274 = load { ptr, i64, i64 }, ptr %a271 store { ptr, i64, i64 } %t274, ptr %a276 store { ptr, i64, i64 } { ptr @.str.3449, i64 6, i64 0 }, ptr %a277 call void @finch_str_concat(ptr %a275, ptr %a276, ptr %a277) %t278 = load { ptr, i64, i64 }, ptr %a275 %t279 = load { ptr, i64, i64 }, ptr %a240 store { ptr, i64, i64 } %t278, ptr %a281 store { ptr, i64, i64 } %t279, ptr %a282 call void @finch_str_concat(ptr %a280, ptr %a281, ptr %a282) %t283 = load { ptr, i64, i64 }, ptr %a280 store { ptr, i64, i64 } %t283, ptr %a285 store { ptr, i64, i64 } { ptr @.str.3450, i64 3, i64 0 }, ptr %a286 call void @finch_str_concat(ptr %a284, ptr %a285, ptr %a286) %t287 = load { ptr, i64, i64 }, ptr %a284 %t288 = load { ptr, i64, i64 }, ptr %a183 store { ptr, i64, i64 } %t287, ptr %a290 store { ptr, i64, i64 } %t288, ptr %a291 call void @finch_str_concat(ptr %a289, ptr %a290, ptr %a291) %t292 = load { ptr, i64, i64 }, ptr %a289 store { ptr, i64, i64 } %t292, ptr %a294 store { ptr, i64, i64 } { ptr @.str.3451, i64 2, i64 0 }, ptr %a295 call void @finch_str_concat(ptr %a293, ptr %a294, ptr %a295) %t296 = load { ptr, i64, i64 }, ptr %a293 %t297 = call { ptr, i64, i64 } @finch.gen.op(ptr %t249, { ptr, i64, i64 } %t296) %t298 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t297, 0 %t299 = load %S.ast.Type, ptr %a32 store %S.ast.Type %t299, ptr %a300 call void @finch.copy.S_ast_Type(ptr %a301, ptr %a300) %t302 = load %S.ast.Type, ptr %a301 %t303 = insertvalue %S.gen.Val %t298, %S.ast.Type %t302, 1 %t304 = load ptr, ptr %a1 %t305 = load %S.ast.Type, ptr %a32 %t306 = call i1 @finch.gen.owning(ptr %t304, %S.ast.Type %t305) %t307 = insertvalue %S.gen.Val %t303, i1 %t306, 2 ret %S.gen.Val %t307 endif5248: %t308 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t308, ptr %a309 store { ptr, i64, i64 } { ptr @.str.3452, i64 5, i64 0 }, ptr %a310 %t311 = call i32 @finch_str_eq(ptr %a309, ptr %a310) %t312 = icmp ne i32 %t311, 0 br i1 %t312, label %then5266, label %endif5268 then5266: %t313 = load ptr, ptr %a1 %t314 = load %S.ast.Node, ptr %a2 %t315 = load { ptr, i64, i64 }, ptr %a10 call void @finch.gen.checkArgs(ptr %t313, %S.ast.Node %t314, i64 1, i64 0, { ptr, i64, i64 } %t315) %t316 = load ptr, ptr %a1 %t317 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } { ptr @.str.3453, i64 31, i64 0 }, ptr %a319 store { ptr, i64, i64 } %t317, ptr %a320 call void @finch_str_concat(ptr %a318, ptr %a319, ptr %a320) %t321 = load { ptr, i64, i64 }, ptr %a318 store { ptr, i64, i64 } %t321, ptr %a323 store { ptr, i64, i64 } { ptr @.str.3454, i64 1, i64 0 }, ptr %a324 call void @finch_str_concat(ptr %a322, ptr %a323, ptr %a324) %t325 = load { ptr, i64, i64 }, ptr %a322 call void @finch.gen.emit(ptr %t316, { ptr, i64, i64 } %t325) %t326 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3455, i64 4, i64 0 }) %t327 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t326, 1 ret %S.gen.Val %t327 endif5268: %t328 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t328, ptr %a329 store { ptr, i64, i64 } { ptr @.str.3456, i64 4, i64 0 }, ptr %a330 %t331 = call i32 @finch_str_eq(ptr %a329, ptr %a330) %t332 = icmp ne i32 %t331, 0 br label %logic.from5269 logic.from5269: br i1 %t332, label %logic.end5271, label %logic.rhs5270 logic.rhs5270: %t333 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t333, ptr %a334 store { ptr, i64, i64 } { ptr @.str.3457, i64 6, i64 0 }, ptr %a335 %t336 = call i32 @finch_str_eq(ptr %a334, ptr %a335) %t337 = icmp ne i32 %t336, 0 br label %logic.rend5272 logic.rend5272: br label %logic.end5271 logic.end5271: %t338 = phi i1 [ true, %logic.from5269 ], [ %t337, %logic.rend5272 ] br i1 %t338, label %then5273, label %endif5275 then5273: %t339 = load ptr, ptr %a1 %t340 = load %S.ast.Node, ptr %a2 %t341 = load { ptr, i64, i64 }, ptr %a10 call void @finch.gen.checkArgs(ptr %t339, %S.ast.Node %t340, i64 1, i64 0, { ptr, i64, i64 } %t341) store i64 1, ptr %a342 %t343 = load %S.ast.Type, ptr %a21 store %S.ast.Type %t343, ptr %a344 call void @finch.copy.S_ast_Type(ptr %a345, ptr %a344) %t346 = load %S.ast.Type, ptr %a345 store %S.ast.Type %t346, ptr %a347 %t348 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t348, ptr %a349 store { ptr, i64, i64 } { ptr @.str.3458, i64 6, i64 0 }, ptr %a350 %t351 = call i32 @finch_str_eq(ptr %a349, ptr %a350) %t352 = icmp ne i32 %t351, 0 br i1 %t352, label %then5276, label %endif5278 then5276: store i64 2, ptr %a342 %t353 = load %S.ast.Type, ptr %a32 store %S.ast.Type %t353, ptr %a354 call void @finch.copy.S_ast_Type(ptr %a355, ptr %a354) %t356 = load %S.ast.Type, ptr %a355 store %S.ast.Type %t356, ptr %a347 br label %endif5278 endif5278: %t357 = load %S.ast.Type, ptr %a347 %t358 = call %S.ast.Type @finch.ast.arrayOf(%S.ast.Type %t357) store %S.ast.Type %t358, ptr %a359 %t360 = load ptr, ptr %a1 %t361 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t360, { ptr, i64, i64 } { ptr @.str.3459, i64 17, i64 0 }) store { ptr, i64, i64 } %t361, ptr %a362 %t363 = load ptr, ptr %a1 %t364 = load { ptr, i64, i64 }, ptr %a362 call void @finch.gen.store(ptr %t363, { ptr, i64, i64 } { ptr @.str.3460, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.3461, i64 15, i64 0 }, { ptr, i64, i64 } %t364) %t365 = load ptr, ptr %a1 %t366 = load ptr, ptr %a1 %t367 = load ptr, ptr %a1 %t368 = load %S.ast.Type, ptr %a4 %t369 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t367, %S.ast.Type %t368) store { ptr, i64, i64 } { ptr @.str.3463, i64 23, i64 0 }, ptr %a371 store { ptr, i64, i64 } %t369, ptr %a372 call void @finch_str_concat(ptr %a370, ptr %a371, ptr %a372) %t373 = load { ptr, i64, i64 }, ptr %a370 store { ptr, i64, i64 } %t373, ptr %a375 store { ptr, i64, i64 } { ptr @.str.3464, i64 6, i64 0 }, ptr %a376 call void @finch_str_concat(ptr %a374, ptr %a375, ptr %a376) %t377 = load { ptr, i64, i64 }, ptr %a374 %t378 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t377, ptr %a380 store { ptr, i64, i64 } %t378, ptr %a381 call void @finch_str_concat(ptr %a379, ptr %a380, ptr %a381) %t382 = load { ptr, i64, i64 }, ptr %a379 store { ptr, i64, i64 } %t382, ptr %a384 store { ptr, i64, i64 } { ptr @.str.3465, i64 14, i64 0 }, ptr %a385 call void @finch_str_concat(ptr %a383, ptr %a384, ptr %a385) %t386 = load { ptr, i64, i64 }, ptr %a383 %t387 = call { ptr, i64, i64 } @finch.gen.op(ptr %t366, { ptr, i64, i64 } %t386) %t388 = call { ptr, i64, i64 } @finch.gen.load(ptr %t365, { ptr, i64, i64 } { ptr @.str.3462, i64 3, i64 0 }, { ptr, i64, i64 } %t387) store { ptr, i64, i64 } %t388, ptr %a389 %t390 = load ptr, ptr %a1 %t391 = load { ptr, i64, i64 }, ptr %a362 store { ptr, i64, i64 } { ptr @.str.3466, i64 30, i64 0 }, ptr %a393 store { ptr, i64, i64 } %t391, ptr %a394 call void @finch_str_concat(ptr %a392, ptr %a393, ptr %a394) %t395 = load { ptr, i64, i64 }, ptr %a392 store { ptr, i64, i64 } %t395, ptr %a397 store { ptr, i64, i64 } { ptr @.str.3467, i64 6, i64 0 }, ptr %a398 call void @finch_str_concat(ptr %a396, ptr %a397, ptr %a398) %t399 = load { ptr, i64, i64 }, ptr %a396 %t400 = load { ptr, i64, i64 }, ptr %a389 store { ptr, i64, i64 } %t399, ptr %a402 store { ptr, i64, i64 } %t400, ptr %a403 call void @finch_str_concat(ptr %a401, ptr %a402, ptr %a403) %t404 = load { ptr, i64, i64 }, ptr %a401 store { ptr, i64, i64 } %t404, ptr %a406 store { ptr, i64, i64 } { ptr @.str.3468, i64 6, i64 0 }, ptr %a407 call void @finch_str_concat(ptr %a405, ptr %a406, ptr %a407) %t408 = load { ptr, i64, i64 }, ptr %a405 %t409 = load ptr, ptr %a1 %t410 = load %S.ast.Type, ptr %a347 %t411 = call { ptr, i64, i64 } @finch.gen.sizeOf(ptr %t409, %S.ast.Type %t410) store { ptr, i64, i64 } %t408, ptr %a413 store { ptr, i64, i64 } %t411, ptr %a414 call void @finch_str_concat(ptr %a412, ptr %a413, ptr %a414) %t415 = load { ptr, i64, i64 }, ptr %a412 store { ptr, i64, i64 } %t415, ptr %a417 store { ptr, i64, i64 } { ptr @.str.3469, i64 1, i64 0 }, ptr %a418 call void @finch_str_concat(ptr %a416, ptr %a417, ptr %a418) %t419 = load { ptr, i64, i64 }, ptr %a416 call void @finch.gen.emit(ptr %t390, { ptr, i64, i64 } %t419) %t420 = load ptr, ptr %a1 %t421 = load { ptr, i64, i64 }, ptr %a362 %t422 = call { ptr, i64, i64 } @finch.gen.load(ptr %t420, { ptr, i64, i64 } { ptr @.str.3470, i64 3, i64 0 }, { ptr, i64, i64 } %t421) store { ptr, i64, i64 } %t422, ptr %a423 %t424 = load ptr, ptr %a1 %t425 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t424, { ptr, i64, i64 } { ptr @.str.3471, i64 3, i64 0 }) store { ptr, i64, i64 } %t425, ptr %a426 %t427 = load ptr, ptr %a1 %t428 = load { ptr, i64, i64 }, ptr %a426 call void @finch.gen.store(ptr %t427, { ptr, i64, i64 } { ptr @.str.3472, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.3473, i64 1, i64 0 }, { ptr, i64, i64 } %t428) %t429 = load ptr, ptr %a1 %t430 = load ptr, ptr %a1 %t431 = load ptr, ptr %a1 %t432 = load %S.ast.Type, ptr %a4 %t433 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t431, %S.ast.Type %t432) store { ptr, i64, i64 } { ptr @.str.3475, i64 23, i64 0 }, ptr %a435 store { ptr, i64, i64 } %t433, ptr %a436 call void @finch_str_concat(ptr %a434, ptr %a435, ptr %a436) %t437 = load { ptr, i64, i64 }, ptr %a434 store { ptr, i64, i64 } %t437, ptr %a439 store { ptr, i64, i64 } { ptr @.str.3476, i64 6, i64 0 }, ptr %a440 call void @finch_str_concat(ptr %a438, ptr %a439, ptr %a440) %t441 = load { ptr, i64, i64 }, ptr %a438 %t442 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t441, ptr %a444 store { ptr, i64, i64 } %t442, ptr %a445 call void @finch_str_concat(ptr %a443, ptr %a444, ptr %a445) %t446 = load { ptr, i64, i64 }, ptr %a443 store { ptr, i64, i64 } %t446, ptr %a448 store { ptr, i64, i64 } { ptr @.str.3477, i64 14, i64 0 }, ptr %a449 call void @finch_str_concat(ptr %a447, ptr %a448, ptr %a449) %t450 = load { ptr, i64, i64 }, ptr %a447 %t451 = call { ptr, i64, i64 } @finch.gen.op(ptr %t430, { ptr, i64, i64 } %t450) %t452 = call { ptr, i64, i64 } @finch.gen.load(ptr %t429, { ptr, i64, i64 } { ptr @.str.3474, i64 3, i64 0 }, { ptr, i64, i64 } %t451) store { ptr, i64, i64 } %t452, ptr %a453 %t454 = load ptr, ptr %a1 %t455 = load { ptr, i64, i64 }, ptr %a453 %t456 = call { ptr, i64, i64 } @finch.gen.loopStart(ptr %t454, { ptr, i64, i64 } %t455) store { ptr, i64, i64 } %t456, ptr %a457 %t458 = load ptr, ptr %a1 %t459 = load { ptr, i64, i64 }, ptr %a3 %t460 = load %S.ast.Type, ptr %a4 %t461 = load { ptr, i64, i64 }, ptr %a457 %t462 = extractvalue { ptr, i64, i64 } %t461, 1 %t463 = icmp uge i64 3, %t462 br i1 %t463, label %range5279, label %inrange5280 range5279: call void @finch_panic_index(ptr @.str.3478, i64 2679, i64 3, i64 %t462) unreachable inrange5280: %t464 = extractvalue { ptr, i64, i64 } %t461, 0 %t465 = getelementptr inbounds { ptr, i64, i64 }, ptr %t464, i64 3 %t466 = load { ptr, i64, i64 }, ptr %t465 %t467 = call { ptr, i64, i64 } @finch.gen.entryAt(ptr %t458, { ptr, i64, i64 } %t459, %S.ast.Type %t460, { ptr, i64, i64 } %t466) store { ptr, i64, i64 } %t467, ptr %a468 %t469 = load ptr, ptr %a1 %t470 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t469, { ptr, i64, i64 } { ptr @.str.3479, i64 10, i64 0 }) store { ptr, i64, i64 } %t470, ptr %a471 %t472 = load ptr, ptr %a1 %t473 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t472, { ptr, i64, i64 } { ptr @.str.3480, i64 10, i64 0 }) store { ptr, i64, i64 } %t473, ptr %a474 %t475 = load ptr, ptr %a1 %t476 = load ptr, ptr %a1 %t477 = load ptr, ptr %a1 %t478 = load ptr, ptr %a1 %t479 = load { ptr, i64, i64 }, ptr %a468 %t480 = load %S.ast.Type, ptr %a4 %t481 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t478, { ptr, i64, i64 } %t479, %S.ast.Type %t480, i64 0) %t482 = call { ptr, i64, i64 } @finch.gen.load(ptr %t477, { ptr, i64, i64 } { ptr @.str.3482, i64 3, i64 0 }, { ptr, i64, i64 } %t481) store { ptr, i64, i64 } { ptr @.str.3481, i64 12, i64 0 }, ptr %a484 store { ptr, i64, i64 } %t482, ptr %a485 call void @finch_str_concat(ptr %a483, ptr %a484, ptr %a485) %t486 = load { ptr, i64, i64 }, ptr %a483 store { ptr, i64, i64 } %t486, ptr %a488 store { ptr, i64, i64 } { ptr @.str.3483, i64 3, i64 0 }, ptr %a489 call void @finch_str_concat(ptr %a487, ptr %a488, ptr %a489) %t490 = load { ptr, i64, i64 }, ptr %a487 %t491 = call { ptr, i64, i64 } @finch.gen.op(ptr %t476, { ptr, i64, i64 } %t490) %t492 = load { ptr, i64, i64 }, ptr %a471 %t493 = load { ptr, i64, i64 }, ptr %a474 call void @finch.gen.condBr(ptr %t475, { ptr, i64, i64 } %t491, { ptr, i64, i64 } %t492, { ptr, i64, i64 } %t493) %t494 = load ptr, ptr %a1 %t495 = load { ptr, i64, i64 }, ptr %a471 call void @finch.gen.label(ptr %t494, { ptr, i64, i64 } %t495) %t496 = load ptr, ptr %a1 %t497 = load { ptr, i64, i64 }, ptr %a426 %t498 = call { ptr, i64, i64 } @finch.gen.load(ptr %t496, { ptr, i64, i64 } { ptr @.str.3484, i64 3, i64 0 }, { ptr, i64, i64 } %t497) store { ptr, i64, i64 } %t498, ptr %a499 %t500 = load ptr, ptr %a1 %t501 = load ptr, ptr %a1 %t502 = load ptr, ptr %a1 %t503 = load %S.ast.Type, ptr %a347 %t504 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t502, %S.ast.Type %t503) store { ptr, i64, i64 } { ptr @.str.3485, i64 23, i64 0 }, ptr %a506 store { ptr, i64, i64 } %t504, ptr %a507 call void @finch_str_concat(ptr %a505, ptr %a506, ptr %a507) %t508 = load { ptr, i64, i64 }, ptr %a505 store { ptr, i64, i64 } %t508, ptr %a510 store { ptr, i64, i64 } { ptr @.str.3486, i64 6, i64 0 }, ptr %a511 call void @finch_str_concat(ptr %a509, ptr %a510, ptr %a511) %t512 = load { ptr, i64, i64 }, ptr %a509 %t513 = load { ptr, i64, i64 }, ptr %a423 store { ptr, i64, i64 } %t512, ptr %a515 store { ptr, i64, i64 } %t513, ptr %a516 call void @finch_str_concat(ptr %a514, ptr %a515, ptr %a516) %t517 = load { ptr, i64, i64 }, ptr %a514 store { ptr, i64, i64 } %t517, ptr %a519 store { ptr, i64, i64 } { ptr @.str.3487, i64 6, i64 0 }, ptr %a520 call void @finch_str_concat(ptr %a518, ptr %a519, ptr %a520) %t521 = load { ptr, i64, i64 }, ptr %a518 %t522 = load { ptr, i64, i64 }, ptr %a499 store { ptr, i64, i64 } %t521, ptr %a524 store { ptr, i64, i64 } %t522, ptr %a525 call void @finch_str_concat(ptr %a523, ptr %a524, ptr %a525) %t526 = load { ptr, i64, i64 }, ptr %a523 %t527 = call { ptr, i64, i64 } @finch.gen.op(ptr %t501, { ptr, i64, i64 } %t526) %t528 = load ptr, ptr %a1 %t529 = load { ptr, i64, i64 }, ptr %a468 %t530 = load %S.ast.Type, ptr %a4 %t531 = load i64, ptr %a342 %t532 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t528, { ptr, i64, i64 } %t529, %S.ast.Type %t530, i64 %t531) %t533 = load %S.ast.Type, ptr %a347 call void @finch.gen.copyAt(ptr %t500, { ptr, i64, i64 } %t527, { ptr, i64, i64 } %t532, %S.ast.Type %t533) %t534 = load ptr, ptr %a1 %t535 = load ptr, ptr %a1 %t536 = load { ptr, i64, i64 }, ptr %a499 store { ptr, i64, i64 } { ptr @.str.3489, i64 8, i64 0 }, ptr %a538 store { ptr, i64, i64 } %t536, ptr %a539 call void @finch_str_concat(ptr %a537, ptr %a538, ptr %a539) %t540 = load { ptr, i64, i64 }, ptr %a537 store { ptr, i64, i64 } %t540, ptr %a542 store { ptr, i64, i64 } { ptr @.str.3490, i64 3, i64 0 }, ptr %a543 call void @finch_str_concat(ptr %a541, ptr %a542, ptr %a543) %t544 = load { ptr, i64, i64 }, ptr %a541 %t545 = call { ptr, i64, i64 } @finch.gen.op(ptr %t535, { ptr, i64, i64 } %t544) %t546 = load { ptr, i64, i64 }, ptr %a426 call void @finch.gen.store(ptr %t534, { ptr, i64, i64 } { ptr @.str.3488, i64 3, i64 0 }, { ptr, i64, i64 } %t545, { ptr, i64, i64 } %t546) %t547 = load ptr, ptr %a1 %t548 = load { ptr, i64, i64 }, ptr %a474 call void @finch.gen.br(ptr %t547, { ptr, i64, i64 } %t548) %t549 = load ptr, ptr %a1 %t550 = load { ptr, i64, i64 }, ptr %a474 call void @finch.gen.label(ptr %t549, { ptr, i64, i64 } %t550) %t551 = load ptr, ptr %a1 %t552 = load { ptr, i64, i64 }, ptr %a457 call void @finch.gen.loopEnd(ptr %t551, { ptr, i64, i64 } %t552) %t553 = load ptr, ptr %a1 %t554 = load { ptr, i64, i64 }, ptr %a362 %t555 = call { ptr, i64, i64 } @finch.gen.load(ptr %t553, { ptr, i64, i64 } { ptr @.str.3491, i64 17, i64 0 }, { ptr, i64, i64 } %t554) %t556 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t555, 0 %t557 = load %S.ast.Type, ptr %a359 store %S.ast.Type %t557, ptr %a558 call void @finch.copy.S_ast_Type(ptr %a559, ptr %a558) %t560 = load %S.ast.Type, ptr %a559 %t561 = insertvalue %S.gen.Val %t556, %S.ast.Type %t560, 1 %t562 = insertvalue %S.gen.Val %t561, i1 true, 2 ret %S.gen.Val %t562 endif5275: %t563 = load ptr, ptr %a1 %t564 = load %S.ast.Node, ptr %a2 %t565 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } { ptr @.str.3492, i64 21, i64 0 }, ptr %a567 store { ptr, i64, i64 } %t565, ptr %a568 call void @finch_str_concat(ptr %a566, ptr %a567, ptr %a568) %t569 = load { ptr, i64, i64 }, ptr %a566 store { ptr, i64, i64 } %t569, ptr %a571 store { ptr, i64, i64 } { ptr @.str.3493, i64 49, i64 0 }, ptr %a572 call void @finch_str_concat(ptr %a570, ptr %a571, ptr %a572) %t573 = load { ptr, i64, i64 }, ptr %a570 call void @finch.gen.fail(ptr %t563, %S.ast.Node %t564, { ptr, i64, i64 } %t573) ret %S.gen.Val zeroinitializer } define internal %S.gen.Val @finch.gen.patternValue(ptr %p0, %S.ast.Node %p1, %S.ast.Type %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a3 = alloca %S.ast.Type, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca %S.gen.EnumDef, align 16 %a39 = alloca %S.gen.EnumDef, align 16 %a41 = alloca %S.gen.EnumDef, align 16 %a46 = alloca i64, align 16 %a49 = alloca i64, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca i64, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca { ptr, i64, i64 }, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a106 = alloca { ptr, i64, i64 }, align 16 %a110 = alloca %S.ast.Type, align 16 %a111 = alloca %S.ast.Type, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 store %S.ast.Type %p2, ptr %a3 %t4 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 %t5 = load { ptr, i64, i64 }, ptr %t4 store { ptr, i64, i64 } %t5, ptr %a6 store { ptr, i64, i64 } { ptr @.str.3494, i64 4, i64 0 }, ptr %a7 %t8 = call i32 @finch_str_eq(ptr %a6, ptr %a7) %t9 = icmp ne i32 %t8, 0 br label %logic.from5281 logic.from5281: br i1 %t9, label %logic.rhs5282, label %logic.end5283 logic.rhs5282: %t10 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 %t11 = load { ptr, i64, i64 }, ptr %t10 store { ptr, i64, i64 } %t11, ptr %a12 store { ptr, i64, i64 } { ptr @.str.3495, i64 3, i64 0 }, ptr %a13 %t14 = call i32 @finch_str_eq(ptr %a12, ptr %a13) %t15 = icmp ne i32 %t14, 0 br label %logic.rend5284 logic.rend5284: br label %logic.end5283 logic.end5283: %t16 = phi i1 [ false, %logic.from5281 ], [ %t15, %logic.rend5284 ] br label %logic.from5285 logic.from5285: br i1 %t16, label %logic.rhs5286, label %logic.end5287 logic.rhs5286: %t17 = load ptr, ptr %a1 %t18 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t19 = load { ptr, i64, i64 }, ptr %t18 %t20 = call i64 @finch.gen.lookup(ptr %t17, { ptr, i64, i64 } %t19) %t21 = icmp slt i64 %t20, 0 br label %logic.rend5288 logic.rend5288: br label %logic.end5287 logic.end5287: %t22 = phi i1 [ false, %logic.from5285 ], [ %t21, %logic.rend5288 ] br i1 %t22, label %then5289, label %endif5291 then5289: %t23 = load ptr, ptr %a1 %t24 = icmp eq ptr %t23, null br i1 %t24, label %panic5292, label %ok5293 panic5292: call void @finch_panic(ptr @.str.3496, i64 2701, ptr @.str.3497) unreachable ok5293: %t25 = getelementptr inbounds %S.gen.Gen, ptr %t23, i32 0, i32 20 %t26 = load ptr, ptr %a1 %t27 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 3 %t28 = load { ptr, i64, i64 }, ptr %t27 %t29 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 2 %t30 = load { ptr, i64, i64 }, ptr %t29 %t31 = call i64 @finch.gen.findEnum(ptr %t26, { ptr, i64, i64 } %t28, { ptr, i64, i64 } %t30) %t32 = load { ptr, i64, i64 }, ptr %t25 %t33 = extractvalue { ptr, i64, i64 } %t32, 1 %t34 = icmp uge i64 %t31, %t33 br i1 %t34, label %range5294, label %inrange5295 range5294: call void @finch_panic_index(ptr @.str.3498, i64 2701, i64 %t31, i64 %t33) unreachable inrange5295: %t35 = extractvalue { ptr, i64, i64 } %t32, 0 %t36 = getelementptr inbounds %S.gen.EnumDef, ptr %t35, i64 %t31 %t37 = load %S.gen.EnumDef, ptr %t36 store %S.gen.EnumDef %t37, ptr %a38 call void @finch.copy.S_gen_EnumDef(ptr %a39, ptr %a38) %t40 = load %S.gen.EnumDef, ptr %a39 store %S.gen.EnumDef %t40, ptr %a41 %t42 = getelementptr inbounds %S.gen.EnumDef, ptr %a41, i32 0, i32 2 %t43 = getelementptr inbounds { ptr, i64, i64 }, ptr %t42, i32 0, i32 1 %t44 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t45 = load { ptr, i64, i64 }, ptr %t44 store i64 -1, ptr %a46 %t47 = load i64, ptr %t43 %t48 = load ptr, ptr %t42 store i64 0, ptr %a49 br label %find.cond5296 find.cond5296: %t50 = load i64, ptr %a49 %t51 = icmp slt i64 %t50, %t47 br i1 %t51, label %find.body5297, label %find.end5300 find.body5297: %t52 = getelementptr inbounds { ptr, i64, i64 }, ptr %t48, i64 %t50 %t53 = load { ptr, i64, i64 }, ptr %t52 store { ptr, i64, i64 } %t53, ptr %a54 store { ptr, i64, i64 } %t45, ptr %a55 %t56 = call i32 @finch_str_eq(ptr %a54, ptr %a55) %t57 = icmp ne i32 %t56, 0 br i1 %t57, label %find.hit5298, label %find.next5299 find.hit5298: store i64 %t50, ptr %a46 br label %find.end5300 find.next5299: %t58 = add i64 %t50, 1 store i64 %t58, ptr %a49 br label %find.cond5296 find.end5300: %t59 = load i64, ptr %a46 store i64 %t59, ptr %a60 %t61 = load i64, ptr %a60 %t62 = icmp slt i64 %t61, 0 br i1 %t62, label %then5301, label %endif5303 then5301: %t63 = load ptr, ptr %a1 %t64 = load %S.ast.Node, ptr %a2 %t65 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t66 = load { ptr, i64, i64 }, ptr %t65 store { ptr, i64, i64 } { ptr @.str.3499, i64 1, i64 0 }, ptr %a68 store { ptr, i64, i64 } %t66, ptr %a69 call void @finch_str_concat(ptr %a67, ptr %a68, ptr %a69) %t70 = load { ptr, i64, i64 }, ptr %a67 store { ptr, i64, i64 } %t70, ptr %a72 store { ptr, i64, i64 } { ptr @.str.3500, i64 22, i64 0 }, ptr %a73 call void @finch_str_concat(ptr %a71, ptr %a72, ptr %a73) %t74 = load { ptr, i64, i64 }, ptr %a71 %t75 = getelementptr inbounds %S.gen.EnumDef, ptr %a41, i32 0, i32 1 %t76 = load { ptr, i64, i64 }, ptr %t75 store { ptr, i64, i64 } %t74, ptr %a78 store { ptr, i64, i64 } %t76, ptr %a79 call void @finch_str_concat(ptr %a77, ptr %a78, ptr %a79) %t80 = load { ptr, i64, i64 }, ptr %a77 store { ptr, i64, i64 } %t80, ptr %a82 store { ptr, i64, i64 } { ptr @.str.3501, i64 10, i64 0 }, ptr %a83 call void @finch_str_concat(ptr %a81, ptr %a82, ptr %a83) %t84 = load { ptr, i64, i64 }, ptr %a81 %t85 = getelementptr inbounds %S.gen.EnumDef, ptr %a41, i32 0, i32 2 %t86 = getelementptr inbounds { ptr, i64, i64 }, ptr %t85, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.3502, i64 2, i64 0 }, ptr %a87 call void @finch_str_join(ptr %a88, ptr %t85, ptr %a87) %t89 = load { ptr, i64, i64 }, ptr %a88 store { ptr, i64, i64 } %t84, ptr %a91 store { ptr, i64, i64 } %t89, ptr %a92 call void @finch_str_concat(ptr %a90, ptr %a91, ptr %a92) %t93 = load { ptr, i64, i64 }, ptr %a90 store { ptr, i64, i64 } %t93, ptr %a95 store { ptr, i64, i64 } { ptr @.str.3503, i64 1, i64 0 }, ptr %a96 call void @finch_str_concat(ptr %a94, ptr %a95, ptr %a96) %t97 = load { ptr, i64, i64 }, ptr %a94 call void @finch.gen.fail(ptr %t63, %S.ast.Node %t64, { ptr, i64, i64 } %t97) br label %endif5303 endif5303: %t98 = getelementptr inbounds %S.gen.EnumDef, ptr %a41, i32 0, i32 3 %t99 = load i64, ptr %a60 %t100 = load { ptr, i64, i64 }, ptr %t98 %t101 = extractvalue { ptr, i64, i64 } %t100, 1 %t102 = icmp uge i64 %t99, %t101 br i1 %t102, label %range5304, label %inrange5305 range5304: call void @finch_panic_index(ptr @.str.3504, i64 2706, i64 %t99, i64 %t101) unreachable inrange5305: %t103 = extractvalue { ptr, i64, i64 } %t100, 0 %t104 = getelementptr inbounds i64, ptr %t103, i64 %t99 %t105 = load i64, ptr %t104 call void @finch_str_from_int(ptr %a106, i64 %t105) %t107 = load { ptr, i64, i64 }, ptr %a106 %t108 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t107, 0 %t109 = load %S.ast.Type, ptr %a3 store %S.ast.Type %t109, ptr %a110 call void @finch.copy.S_ast_Type(ptr %a111, ptr %a110) %t112 = load %S.ast.Type, ptr %a111 %t113 = insertvalue %S.gen.Val %t108, %S.ast.Type %t112, 1 ret %S.gen.Val %t113 endif5291: %t114 = load ptr, ptr %a1 %t115 = load ptr, ptr %a1 %t116 = load %S.ast.Node, ptr %a2 %t117 = load %S.ast.Type, ptr %a3 %t118 = call %S.gen.Val @finch.gen.exprWant(ptr %t115, %S.ast.Node %t116, %S.ast.Type %t117) %t119 = load %S.ast.Type, ptr %a3 %t120 = load %S.ast.Node, ptr %a2 %t121 = call %S.gen.Val @finch.gen.coerce(ptr %t114, %S.gen.Val %t118, %S.ast.Type %t119, %S.ast.Node %t120, { ptr, i64, i64 } { ptr @.str.3505, i64 12, i64 0 }) ret %S.gen.Val %t121 } define internal %S.gen.Val @finch.gen.matchGen(ptr %p0, %S.ast.Node %p1, i1 %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a3 = alloca i1, align 16 %a13 = alloca %S.gen.Val, align 16 %a16 = alloca %S.ast.Type, align 16 %a17 = alloca %S.ast.Type, align 16 %a19 = alloca %S.ast.Type, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca i1, align 16 %a45 = alloca i1, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca %S.ast.Type, align 16 %a55 = alloca i64, align 16 %a57 = alloca i64, align 16 %a69 = alloca %S.ast.Node, align 16 %a70 = alloca %S.ast.Node, align 16 %a72 = alloca %S.ast.Node, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca { ptr, i64, i64 }, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca i64, align 16 %a113 = alloca %S.gen.Val, align 16 %a117 = alloca i64, align 16 %a120 = alloca i64, align 16 %a125 = alloca { ptr, i64, i64 }, align 16 %a126 = alloca { ptr, i64, i64 }, align 16 %a134 = alloca { ptr, i64, i64 }, align 16 %a135 = alloca { ptr, i64, i64 }, align 16 %a150 = alloca { ptr, i64, i64 }, align 16 %a151 = alloca { ptr, i64, i64 }, align 16 %a168 = alloca %S.gen.Val, align 16 %a181 = alloca { ptr, i64, i64 }, align 16 %a200 = alloca %S.ast.Node, align 16 %a201 = alloca %S.ast.Node, align 16 %a203 = alloca %S.ast.Node, align 16 %a208 = alloca %S.gen.Val, align 16 %a213 = alloca { ptr, i64, i64 }, align 16 %a214 = alloca { ptr, i64, i64 }, align 16 %a221 = alloca { ptr, i64, i64 }, align 16 %a222 = alloca { ptr, i64, i64 }, align 16 %a228 = alloca { ptr, i64, i64 }, align 16 %a229 = alloca { ptr, i64, i64 }, align 16 %a237 = alloca %S.ast.Type, align 16 %a238 = alloca %S.ast.Type, align 16 %a248 = alloca { ptr, i64, i64 }, align 16 %a251 = alloca { ptr, i64, i64 }, align 16 %a258 = alloca { ptr, i64, i64 }, align 16 %a259 = alloca { ptr, i64, i64 }, align 16 %a267 = alloca { ptr, i64, i64 }, align 16 %a268 = alloca { ptr, i64, i64 }, align 16 %a278 = alloca { ptr, i64, i64 }, align 16 %a279 = alloca { ptr, i64, i64 }, align 16 %a304 = alloca { ptr, i64, i64 }, align 16 %a305 = alloca { ptr, i64, i64 }, align 16 %a323 = alloca %S.gen.EnumDef, align 16 %a324 = alloca %S.gen.EnumDef, align 16 %a326 = alloca %S.gen.EnumDef, align 16 %a327 = alloca { ptr, i64, i64 }, align 16 %a331 = alloca i64, align 16 %a343 = alloca { ptr, i64, i64 }, align 16 %a345 = alloca i64, align 16 %a348 = alloca i64, align 16 %a353 = alloca { ptr, i64, i64 }, align 16 %a354 = alloca { ptr, i64, i64 }, align 16 %a370 = alloca { ptr, i64, i64 }, align 16 %a371 = alloca { ptr, i64, i64 }, align 16 %a385 = alloca { ptr, i64, i64 }, align 16 %a386 = alloca { ptr, i64, i64 }, align 16 %a388 = alloca { ptr, i64, i64 }, align 16 %a389 = alloca { ptr, i64, i64 }, align 16 %a390 = alloca { ptr, i64, i64 }, align 16 %a392 = alloca { ptr, i64, i64 }, align 16 %a393 = alloca { ptr, i64, i64 }, align 16 %a394 = alloca { ptr, i64, i64 }, align 16 %a400 = alloca { ptr, i64, i64 }, align 16 %a401 = alloca { ptr, i64, i64 }, align 16 %a402 = alloca { ptr, i64, i64 }, align 16 %a404 = alloca { ptr, i64, i64 }, align 16 %a405 = alloca { ptr, i64, i64 }, align 16 %a406 = alloca { ptr, i64, i64 }, align 16 %a429 = alloca { ptr, i64, i64 }, align 16 %a430 = alloca { ptr, i64, i64 }, align 16 %a431 = alloca { ptr, i64, i64 }, align 16 %a433 = alloca { ptr, i64, i64 }, align 16 %a434 = alloca { ptr, i64, i64 }, align 16 %a435 = alloca { ptr, i64, i64 }, align 16 %a440 = alloca { ptr, i64, i64 }, align 16 %a441 = alloca { ptr, i64, i64 }, align 16 %a442 = alloca { ptr, i64, i64 }, align 16 %a447 = alloca %S.ast.Type, align 16 %a448 = alloca %S.ast.Type, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 store i1 %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t6 = load { ptr, i64, i64 }, ptr %t5 %t7 = extractvalue { ptr, i64, i64 } %t6, 1 %t8 = icmp uge i64 0, %t7 br i1 %t8, label %range5306, label %inrange5307 range5306: call void @finch_panic_index(ptr @.str.3506, i64 2714, i64 0, i64 %t7) unreachable inrange5307: %t9 = extractvalue { ptr, i64, i64 } %t6, 0 %t10 = getelementptr inbounds %S.ast.Node, ptr %t9, i64 0 %t11 = load %S.ast.Node, ptr %t10 %t12 = call %S.gen.Val @finch.gen.expr(ptr %t4, %S.ast.Node %t11) store %S.gen.Val %t12, ptr %a13 %t14 = getelementptr inbounds %S.gen.Val, ptr %a13, i32 0, i32 1 %t15 = load %S.ast.Type, ptr %t14 store %S.ast.Type %t15, ptr %a16 call void @finch.copy.S_ast_Type(ptr %a17, ptr %a16) %t18 = load %S.ast.Type, ptr %a17 store %S.ast.Type %t18, ptr %a19 %t20 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 0 %t21 = load { ptr, i64, i64 }, ptr %t20 store { ptr, i64, i64 } %t21, ptr %a22 store { ptr, i64, i64 } { ptr @.str.3507, i64 4, i64 0 }, ptr %a23 %t24 = call i32 @finch_str_eq(ptr %a22, ptr %a23) %t25 = icmp ne i32 %t24, 0 br label %logic.from5308 logic.from5308: br i1 %t25, label %logic.end5310, label %logic.rhs5309 logic.rhs5309: %t26 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 0 %t27 = load { ptr, i64, i64 }, ptr %t26 store { ptr, i64, i64 } %t27, ptr %a28 store { ptr, i64, i64 } { ptr @.str.3508, i64 4, i64 0 }, ptr %a29 %t30 = call i32 @finch_str_eq(ptr %a28, ptr %a29) %t31 = icmp ne i32 %t30, 0 br label %logic.rend5311 logic.rend5311: br label %logic.end5310 logic.end5310: %t32 = phi i1 [ true, %logic.from5308 ], [ %t31, %logic.rend5311 ] br i1 %t32, label %then5312, label %endif5314 then5312: %t33 = load ptr, ptr %a1 %t34 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t35 = load { ptr, i64, i64 }, ptr %t34 %t36 = extractvalue { ptr, i64, i64 } %t35, 1 %t37 = icmp uge i64 0, %t36 br i1 %t37, label %range5315, label %inrange5316 range5315: call void @finch_panic_index(ptr @.str.3509, i64 2717, i64 0, i64 %t36) unreachable inrange5316: %t38 = extractvalue { ptr, i64, i64 } %t35, 0 %t39 = getelementptr inbounds %S.ast.Node, ptr %t38, i64 0 %t40 = load %S.ast.Node, ptr %t39 call void @finch.gen.fail(ptr %t33, %S.ast.Node %t40, { ptr, i64, i64 } { ptr @.str.3510, i64 30, i64 0 }) br label %endif5314 endif5314: %t41 = load ptr, ptr %a1 %t42 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t41, { ptr, i64, i64 } { ptr @.str.3511, i64 9, i64 0 }) store { ptr, i64, i64 } %t42, ptr %a43 store i1 false, ptr %a44 store i1 false, ptr %a45 store { ptr, i64, i64 } zeroinitializer, ptr %a46 store { ptr, i64, i64 } zeroinitializer, ptr %a47 store { ptr, i64, i64 } zeroinitializer, ptr %a48 %t49 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3512, i64 4, i64 0 }) store %S.ast.Type %t49, ptr %a50 %t51 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t52 = getelementptr inbounds { ptr, i64, i64 }, ptr %t51, i32 0, i32 1 %t53 = load i64, ptr %t52 %t54 = sub i64 %t53, 1 store i64 %t54, ptr %a55 %t56 = load i64, ptr %a55 store i64 0, ptr %a57 br label %for.cond5317 for.cond5317: %t58 = load i64, ptr %a57 %t59 = icmp slt i64 %t58, %t56 br i1 %t59, label %for.body5318, label %for.end5320 for.body5318: %t60 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t61 = load i64, ptr %a57 %t62 = add i64 1, %t61 %t63 = load { ptr, i64, i64 }, ptr %t60 %t64 = extractvalue { ptr, i64, i64 } %t63, 1 %t65 = icmp uge i64 %t62, %t64 br i1 %t65, label %range5321, label %inrange5322 range5321: call void @finch_panic_index(ptr @.str.3513, i64 2728, i64 %t62, i64 %t64) unreachable inrange5322: %t66 = extractvalue { ptr, i64, i64 } %t63, 0 %t67 = getelementptr inbounds %S.ast.Node, ptr %t66, i64 %t62 %t68 = load %S.ast.Node, ptr %t67 store %S.ast.Node %t68, ptr %a69 call void @finch.copy.S_ast_Node(ptr %a70, ptr %a69) %t71 = load %S.ast.Node, ptr %a70 store %S.ast.Node %t71, ptr %a72 %t73 = load i1, ptr %a44 br i1 %t73, label %then5323, label %endif5325 then5323: %t74 = load ptr, ptr %a1 %t75 = load %S.ast.Node, ptr %a72 call void @finch.gen.fail(ptr %t74, %S.ast.Node %t75, { ptr, i64, i64 } { ptr @.str.3514, i64 72, i64 0 }) br label %endif5325 endif5325: %t76 = load ptr, ptr %a1 %t77 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t76, { ptr, i64, i64 } { ptr @.str.3515, i64 9, i64 0 }) store { ptr, i64, i64 } %t77, ptr %a78 %t79 = load ptr, ptr %a1 %t80 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t79, { ptr, i64, i64 } { ptr @.str.3516, i64 10, i64 0 }) store { ptr, i64, i64 } %t80, ptr %a81 %t82 = getelementptr inbounds %S.ast.Node, ptr %a72, i32 0, i32 6 %t83 = load i1, ptr %t82 br i1 %t83, label %then5326, label %else5327 then5326: store i1 true, ptr %a44 %t84 = load ptr, ptr %a1 %t85 = load { ptr, i64, i64 }, ptr %a78 call void @finch.gen.br(ptr %t84, { ptr, i64, i64 } %t85) br label %endif5328 else5327: %t86 = getelementptr inbounds %S.ast.Node, ptr %a72, i32 0, i32 9 %t87 = load { ptr, i64, i64 }, ptr %t86 %t88 = extractvalue { ptr, i64, i64 } %t87, 1 %t89 = icmp uge i64 0, %t88 br i1 %t89, label %range5329, label %inrange5330 range5329: call void @finch_panic_index(ptr @.str.3517, i64 2738, i64 0, i64 %t88) unreachable inrange5330: %t90 = extractvalue { ptr, i64, i64 } %t87, 0 %t91 = getelementptr inbounds %S.ast.Node, ptr %t90, i64 0 %t92 = getelementptr inbounds %S.ast.Node, ptr %t91, i32 0, i32 9 %t93 = load { ptr, i64, i64 }, ptr %t92 store { ptr, i64, i64 } %t93, ptr %a94 call void @finch.copy.arr_S_ast_Node(ptr %a95, ptr %a94) %t96 = load { ptr, i64, i64 }, ptr %a95 store { ptr, i64, i64 } %t96, ptr %a97 %t98 = getelementptr inbounds { ptr, i64, i64 }, ptr %a97, i32 0, i32 1 %t99 = load i64, ptr %t98 store i64 0, ptr %a100 br label %for.cond5331 for.cond5331: %t101 = load i64, ptr %a100 %t102 = icmp slt i64 %t101, %t99 br i1 %t102, label %for.body5332, label %for.end5334 for.body5332: %t103 = load ptr, ptr %a1 %t104 = load i64, ptr %a100 %t105 = load { ptr, i64, i64 }, ptr %a97 %t106 = extractvalue { ptr, i64, i64 } %t105, 1 %t107 = icmp uge i64 %t104, %t106 br i1 %t107, label %range5335, label %inrange5336 range5335: call void @finch_panic_index(ptr @.str.3518, i64 2740, i64 %t104, i64 %t106) unreachable inrange5336: %t108 = extractvalue { ptr, i64, i64 } %t105, 0 %t109 = getelementptr inbounds %S.ast.Node, ptr %t108, i64 %t104 %t110 = load %S.ast.Node, ptr %t109 %t111 = load %S.ast.Type, ptr %a19 %t112 = call %S.gen.Val @finch.gen.patternValue(ptr %t103, %S.ast.Node %t110, %S.ast.Type %t111) store %S.gen.Val %t112, ptr %a113 %t114 = getelementptr inbounds { ptr, i64, i64 }, ptr %a46, i32 0, i32 1 %t115 = getelementptr inbounds %S.gen.Val, ptr %a113, i32 0, i32 0 %t116 = load { ptr, i64, i64 }, ptr %t115 store i64 -1, ptr %a117 %t118 = load i64, ptr %t114 %t119 = load ptr, ptr %a46 store i64 0, ptr %a120 br label %find.cond5337 find.cond5337: %t121 = load i64, ptr %a120 %t122 = icmp slt i64 %t121, %t118 br i1 %t122, label %find.body5338, label %find.end5341 find.body5338: %t123 = getelementptr inbounds { ptr, i64, i64 }, ptr %t119, i64 %t121 %t124 = load { ptr, i64, i64 }, ptr %t123 store { ptr, i64, i64 } %t124, ptr %a125 store { ptr, i64, i64 } %t116, ptr %a126 %t127 = call i32 @finch_str_eq(ptr %a125, ptr %a126) %t128 = icmp ne i32 %t127, 0 br i1 %t128, label %find.hit5339, label %find.next5340 find.hit5339: store i64 %t121, ptr %a117 br label %find.end5341 find.next5340: %t129 = add i64 %t121, 1 store i64 %t129, ptr %a120 br label %find.cond5337 find.end5341: %t130 = load i64, ptr %a117 %t131 = icmp sge i64 %t130, 0 br label %logic.from5342 logic.from5342: br i1 %t131, label %logic.rhs5343, label %logic.end5344 logic.rhs5343: %t132 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 0 %t133 = load { ptr, i64, i64 }, ptr %t132 store { ptr, i64, i64 } %t133, ptr %a134 store { ptr, i64, i64 } { ptr @.str.3519, i64 4, i64 0 }, ptr %a135 %t136 = call i32 @finch_str_eq(ptr %a134, ptr %a135) %t137 = icmp ne i32 %t136, 0 br label %logic.rend5345 logic.rend5345: br label %logic.end5344 logic.end5344: %t138 = phi i1 [ false, %logic.from5342 ], [ %t137, %logic.rend5345 ] br i1 %t138, label %then5346, label %endif5348 then5346: %t139 = load ptr, ptr %a1 %t140 = load i64, ptr %a100 %t141 = load { ptr, i64, i64 }, ptr %a97 %t142 = extractvalue { ptr, i64, i64 } %t141, 1 %t143 = icmp uge i64 %t140, %t142 br i1 %t143, label %range5349, label %inrange5350 range5349: call void @finch_panic_index(ptr @.str.3520, i64 2742, i64 %t140, i64 %t142) unreachable inrange5350: %t144 = extractvalue { ptr, i64, i64 } %t141, 0 %t145 = getelementptr inbounds %S.ast.Node, ptr %t144, i64 %t140 %t146 = load %S.ast.Node, ptr %t145 call void @finch.gen.fail(ptr %t139, %S.ast.Node %t146, { ptr, i64, i64 } { ptr @.str.3521, i64 49, i64 0 }) br label %endif5348 endif5348: %t147 = getelementptr inbounds { ptr, i64, i64 }, ptr %a46, i32 0, i32 1 %t148 = getelementptr inbounds %S.gen.Val, ptr %a113, i32 0, i32 0 %t149 = load { ptr, i64, i64 }, ptr %t148 store { ptr, i64, i64 } %t149, ptr %a150 call void @finch_str_copy(ptr %a151, ptr %a150) %t152 = load { ptr, i64, i64 }, ptr %a151 %t153 = load i64, ptr %t147 %t154 = add i64 %t153, 1 call void @finch_arr_reserve(ptr %a46, i64 %t154, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t155 = load ptr, ptr %a46 %t156 = getelementptr inbounds { ptr, i64, i64 }, ptr %t155, i64 %t153 store { ptr, i64, i64 } %t152, ptr %t156 store i64 %t154, ptr %t147 %t157 = load ptr, ptr %a1 %t158 = load %S.gen.Val, ptr %a13 %t159 = load %S.gen.Val, ptr %a113 %t160 = load i64, ptr %a100 %t161 = load { ptr, i64, i64 }, ptr %a97 %t162 = extractvalue { ptr, i64, i64 } %t161, 1 %t163 = icmp uge i64 %t160, %t162 br i1 %t163, label %range5351, label %inrange5352 range5351: call void @finch_panic_index(ptr @.str.3523, i64 2745, i64 %t160, i64 %t162) unreachable inrange5352: %t164 = extractvalue { ptr, i64, i64 } %t161, 0 %t165 = getelementptr inbounds %S.ast.Node, ptr %t164, i64 %t160 %t166 = load %S.ast.Node, ptr %t165 %t167 = call %S.gen.Val @finch.gen.compare(ptr %t157, { ptr, i64, i64 } { ptr @.str.3522, i64 2, i64 0 }, %S.gen.Val %t158, %S.gen.Val %t159, %S.ast.Node %t166) store %S.gen.Val %t167, ptr %a168 %t169 = load i64, ptr %a100 %t170 = getelementptr inbounds { ptr, i64, i64 }, ptr %a97, i32 0, i32 1 %t171 = load i64, ptr %t170 %t172 = sub i64 %t171, 1 %t173 = icmp eq i64 %t169, %t172 br i1 %t173, label %then5353, label %else5354 then5353: %t174 = load ptr, ptr %a1 %t175 = getelementptr inbounds %S.gen.Val, ptr %a168, i32 0, i32 0 %t176 = load { ptr, i64, i64 }, ptr %t175 %t177 = load { ptr, i64, i64 }, ptr %a78 %t178 = load { ptr, i64, i64 }, ptr %a81 call void @finch.gen.condBr(ptr %t174, { ptr, i64, i64 } %t176, { ptr, i64, i64 } %t177, { ptr, i64, i64 } %t178) br label %endif5355 else5354: %t179 = load ptr, ptr %a1 %t180 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t179, { ptr, i64, i64 } { ptr @.str.3524, i64 8, i64 0 }) store { ptr, i64, i64 } %t180, ptr %a181 %t182 = load ptr, ptr %a1 %t183 = getelementptr inbounds %S.gen.Val, ptr %a168, i32 0, i32 0 %t184 = load { ptr, i64, i64 }, ptr %t183 %t185 = load { ptr, i64, i64 }, ptr %a78 %t186 = load { ptr, i64, i64 }, ptr %a181 call void @finch.gen.condBr(ptr %t182, { ptr, i64, i64 } %t184, { ptr, i64, i64 } %t185, { ptr, i64, i64 } %t186) %t187 = load ptr, ptr %a1 %t188 = load { ptr, i64, i64 }, ptr %a181 call void @finch.gen.label(ptr %t187, { ptr, i64, i64 } %t188) br label %endif5355 endif5355: br label %for.step5333 for.step5333: %t189 = load i64, ptr %a100 %t190 = add i64 %t189, 1 store i64 %t190, ptr %a100 br label %for.cond5331 for.end5334: br label %endif5328 endif5328: %t191 = load ptr, ptr %a1 %t192 = load { ptr, i64, i64 }, ptr %a78 call void @finch.gen.label(ptr %t191, { ptr, i64, i64 } %t192) %t193 = getelementptr inbounds %S.ast.Node, ptr %a72, i32 0, i32 9 %t194 = load { ptr, i64, i64 }, ptr %t193 %t195 = extractvalue { ptr, i64, i64 } %t194, 1 %t196 = icmp uge i64 1, %t195 br i1 %t196, label %range5356, label %inrange5357 range5356: call void @finch_panic_index(ptr @.str.3525, i64 2756, i64 1, i64 %t195) unreachable inrange5357: %t197 = extractvalue { ptr, i64, i64 } %t194, 0 %t198 = getelementptr inbounds %S.ast.Node, ptr %t197, i64 1 %t199 = load %S.ast.Node, ptr %t198 store %S.ast.Node %t199, ptr %a200 call void @finch.copy.S_ast_Node(ptr %a201, ptr %a200) %t202 = load %S.ast.Node, ptr %a201 store %S.ast.Node %t202, ptr %a203 %t204 = load i1, ptr %a3 br i1 %t204, label %then5358, label %else5359 then5358: %t205 = load ptr, ptr %a1 %t206 = load %S.ast.Node, ptr %a203 %t207 = call %S.gen.Val @finch.gen.expr(ptr %t205, %S.ast.Node %t206) store %S.gen.Val %t207, ptr %a208 %t209 = load i64, ptr %a57 %t210 = icmp eq i64 %t209, 0 br label %logic.from5361 logic.from5361: br i1 %t210, label %logic.end5363, label %logic.rhs5362 logic.rhs5362: %t211 = getelementptr inbounds %S.ast.Type, ptr %a50, i32 0, i32 0 %t212 = load { ptr, i64, i64 }, ptr %t211 store { ptr, i64, i64 } %t212, ptr %a213 store { ptr, i64, i64 } { ptr @.str.3526, i64 4, i64 0 }, ptr %a214 %t215 = call i32 @finch_str_eq(ptr %a213, ptr %a214) %t216 = icmp ne i32 %t215, 0 br label %logic.rend5364 logic.rend5364: br label %logic.end5363 logic.end5363: %t217 = phi i1 [ true, %logic.from5361 ], [ %t216, %logic.rend5364 ] br i1 %t217, label %then5365, label %endif5367 then5365: %t218 = getelementptr inbounds %S.gen.Val, ptr %a208, i32 0, i32 1 %t219 = getelementptr inbounds %S.ast.Type, ptr %t218, i32 0, i32 0 %t220 = load { ptr, i64, i64 }, ptr %t219 store { ptr, i64, i64 } %t220, ptr %a221 store { ptr, i64, i64 } { ptr @.str.3527, i64 4, i64 0 }, ptr %a222 %t223 = call i32 @finch_str_eq(ptr %a221, ptr %a222) %t224 = icmp ne i32 %t223, 0 br label %logic.from5368 logic.from5368: br i1 %t224, label %logic.end5370, label %logic.rhs5369 logic.rhs5369: %t225 = getelementptr inbounds %S.gen.Val, ptr %a208, i32 0, i32 1 %t226 = getelementptr inbounds %S.ast.Type, ptr %t225, i32 0, i32 0 %t227 = load { ptr, i64, i64 }, ptr %t226 store { ptr, i64, i64 } %t227, ptr %a228 store { ptr, i64, i64 } { ptr @.str.3528, i64 4, i64 0 }, ptr %a229 %t230 = call i32 @finch_str_eq(ptr %a228, ptr %a229) %t231 = icmp ne i32 %t230, 0 br label %logic.rend5371 logic.rend5371: br label %logic.end5370 logic.end5370: %t232 = phi i1 [ true, %logic.from5368 ], [ %t231, %logic.rend5371 ] br i1 %t232, label %then5372, label %endif5374 then5372: %t233 = load ptr, ptr %a1 %t234 = load %S.ast.Node, ptr %a203 call void @finch.gen.fail(ptr %t233, %S.ast.Node %t234, { ptr, i64, i64 } { ptr @.str.3529, i64 52, i64 0 }) br label %endif5374 endif5374: %t235 = getelementptr inbounds %S.gen.Val, ptr %a208, i32 0, i32 1 %t236 = load %S.ast.Type, ptr %t235 store %S.ast.Type %t236, ptr %a237 call void @finch.copy.S_ast_Type(ptr %a238, ptr %a237) %t239 = load %S.ast.Type, ptr %a238 store %S.ast.Type %t239, ptr %a50 br label %endif5367 endif5367: %t240 = load ptr, ptr %a1 %t241 = load %S.gen.Val, ptr %a208 %t242 = load %S.ast.Type, ptr %a50 %t243 = load %S.ast.Node, ptr %a203 %t244 = call %S.gen.Val @finch.gen.coerce(ptr %t240, %S.gen.Val %t241, %S.ast.Type %t242, %S.ast.Node %t243, { ptr, i64, i64 } { ptr @.str.3530, i64 57, i64 0 }) store %S.gen.Val %t244, ptr %a208 %t245 = load ptr, ptr %a1 %t246 = load %S.gen.Val, ptr %a208 %t247 = call { ptr, i64, i64 } @finch.gen.own(ptr %t245, %S.gen.Val %t246) store { ptr, i64, i64 } %t247, ptr %a248 %t249 = load ptr, ptr %a1 %t250 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t249, { ptr, i64, i64 } { ptr @.str.3531, i64 10, i64 0 }) store { ptr, i64, i64 } %t250, ptr %a251 %t252 = load ptr, ptr %a1 %t253 = load { ptr, i64, i64 }, ptr %a251 call void @finch.gen.br(ptr %t252, { ptr, i64, i64 } %t253) %t254 = load ptr, ptr %a1 %t255 = load { ptr, i64, i64 }, ptr %a251 call void @finch.gen.label(ptr %t254, { ptr, i64, i64 } %t255) %t256 = getelementptr inbounds { ptr, i64, i64 }, ptr %a47, i32 0, i32 1 %t257 = load { ptr, i64, i64 }, ptr %a248 store { ptr, i64, i64 } %t257, ptr %a258 call void @finch_str_copy(ptr %a259, ptr %a258) %t260 = load { ptr, i64, i64 }, ptr %a259 %t261 = load i64, ptr %t256 %t262 = add i64 %t261, 1 call void @finch_arr_reserve(ptr %a47, i64 %t262, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t263 = load ptr, ptr %a47 %t264 = getelementptr inbounds { ptr, i64, i64 }, ptr %t263, i64 %t261 store { ptr, i64, i64 } %t260, ptr %t264 store i64 %t262, ptr %t256 %t265 = getelementptr inbounds { ptr, i64, i64 }, ptr %a48, i32 0, i32 1 %t266 = load { ptr, i64, i64 }, ptr %a251 store { ptr, i64, i64 } %t266, ptr %a267 call void @finch_str_copy(ptr %a268, ptr %a267) %t269 = load { ptr, i64, i64 }, ptr %a268 %t270 = load i64, ptr %t265 %t271 = add i64 %t270, 1 call void @finch_arr_reserve(ptr %a48, i64 %t271, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t272 = load ptr, ptr %a48 %t273 = getelementptr inbounds { ptr, i64, i64 }, ptr %t272, i64 %t270 store { ptr, i64, i64 } %t269, ptr %t273 store i64 %t271, ptr %t265 %t274 = load ptr, ptr %a1 %t275 = load { ptr, i64, i64 }, ptr %a43 call void @finch.gen.br(ptr %t274, { ptr, i64, i64 } %t275) store i1 true, ptr %a45 br label %endif5360 else5359: %t276 = getelementptr inbounds %S.ast.Node, ptr %a203, i32 0, i32 0 %t277 = load { ptr, i64, i64 }, ptr %t276 store { ptr, i64, i64 } %t277, ptr %a278 store { ptr, i64, i64 } { ptr @.str.3532, i64 5, i64 0 }, ptr %a279 %t280 = call i32 @finch_str_eq(ptr %a278, ptr %a279) %t281 = icmp ne i32 %t280, 0 br i1 %t281, label %then5375, label %else5376 then5375: %t282 = load ptr, ptr %a1 %t283 = load %S.ast.Node, ptr %a203 call void @finch.gen.block(ptr %t282, %S.ast.Node %t283, i1 true) br label %endif5377 else5376: %t284 = load ptr, ptr %a1 %t285 = load %S.ast.Node, ptr %a203 call void @finch.gen.stmt(ptr %t284, %S.ast.Node %t285) br label %endif5377 endif5377: %t286 = load ptr, ptr %a1 %t287 = icmp eq ptr %t286, null br i1 %t287, label %panic5378, label %ok5379 panic5378: call void @finch_panic(ptr @.str.3533, i64 2780, ptr @.str.3534) unreachable ok5379: %t288 = getelementptr inbounds %S.gen.Gen, ptr %t286, i32 0, i32 9 %t289 = load i1, ptr %t288 %t290 = xor i1 %t289, true br i1 %t290, label %then5380, label %endif5382 then5380: store i1 true, ptr %a45 br label %endif5382 endif5382: %t291 = load ptr, ptr %a1 %t292 = load { ptr, i64, i64 }, ptr %a43 call void @finch.gen.br(ptr %t291, { ptr, i64, i64 } %t292) br label %endif5360 endif5360: %t293 = getelementptr inbounds %S.ast.Node, ptr %a72, i32 0, i32 6 %t294 = load i1, ptr %t293 %t295 = xor i1 %t294, true br i1 %t295, label %then5383, label %endif5385 then5383: %t296 = load ptr, ptr %a1 %t297 = load { ptr, i64, i64 }, ptr %a81 call void @finch.gen.label(ptr %t296, { ptr, i64, i64 } %t297) br label %endif5385 endif5385: br label %for.step5319 for.step5319: %t298 = load i64, ptr %a57 %t299 = add i64 %t298, 1 store i64 %t299, ptr %a57 br label %for.cond5317 for.end5320: %t300 = load i1, ptr %a44 %t301 = xor i1 %t300, true br i1 %t301, label %then5386, label %endif5388 then5386: %t302 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 0 %t303 = load { ptr, i64, i64 }, ptr %t302 store { ptr, i64, i64 } %t303, ptr %a304 store { ptr, i64, i64 } { ptr @.str.3535, i64 4, i64 0 }, ptr %a305 %t306 = call i32 @finch_str_eq(ptr %a304, ptr %a305) %t307 = icmp ne i32 %t306, 0 br i1 %t307, label %then5389, label %else5390 then5389: %t308 = load ptr, ptr %a1 %t309 = icmp eq ptr %t308, null br i1 %t309, label %panic5392, label %ok5393 panic5392: call void @finch_panic(ptr @.str.3536, i64 2791, ptr @.str.3537) unreachable ok5393: %t310 = getelementptr inbounds %S.gen.Gen, ptr %t308, i32 0, i32 20 %t311 = load ptr, ptr %a1 %t312 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 3 %t313 = load { ptr, i64, i64 }, ptr %t312 %t314 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 2 %t315 = load { ptr, i64, i64 }, ptr %t314 %t316 = call i64 @finch.gen.findEnum(ptr %t311, { ptr, i64, i64 } %t313, { ptr, i64, i64 } %t315) %t317 = load { ptr, i64, i64 }, ptr %t310 %t318 = extractvalue { ptr, i64, i64 } %t317, 1 %t319 = icmp uge i64 %t316, %t318 br i1 %t319, label %range5394, label %inrange5395 range5394: call void @finch_panic_index(ptr @.str.3538, i64 2791, i64 %t316, i64 %t318) unreachable inrange5395: %t320 = extractvalue { ptr, i64, i64 } %t317, 0 %t321 = getelementptr inbounds %S.gen.EnumDef, ptr %t320, i64 %t316 %t322 = load %S.gen.EnumDef, ptr %t321 store %S.gen.EnumDef %t322, ptr %a323 call void @finch.copy.S_gen_EnumDef(ptr %a324, ptr %a323) %t325 = load %S.gen.EnumDef, ptr %a324 store %S.gen.EnumDef %t325, ptr %a326 store { ptr, i64, i64 } zeroinitializer, ptr %a327 %t328 = getelementptr inbounds %S.gen.EnumDef, ptr %a326, i32 0, i32 2 %t329 = getelementptr inbounds { ptr, i64, i64 }, ptr %t328, i32 0, i32 1 %t330 = load i64, ptr %t329 store i64 0, ptr %a331 br label %for.cond5396 for.cond5396: %t332 = load i64, ptr %a331 %t333 = icmp slt i64 %t332, %t330 br i1 %t333, label %for.body5397, label %for.end5399 for.body5397: %t334 = getelementptr inbounds { ptr, i64, i64 }, ptr %a46, i32 0, i32 1 %t335 = getelementptr inbounds %S.gen.EnumDef, ptr %a326, i32 0, i32 3 %t336 = load i64, ptr %a331 %t337 = load { ptr, i64, i64 }, ptr %t335 %t338 = extractvalue { ptr, i64, i64 } %t337, 1 %t339 = icmp uge i64 %t336, %t338 br i1 %t339, label %range5400, label %inrange5401 range5400: call void @finch_panic_index(ptr @.str.3539, i64 2794, i64 %t336, i64 %t338) unreachable inrange5401: %t340 = extractvalue { ptr, i64, i64 } %t337, 0 %t341 = getelementptr inbounds i64, ptr %t340, i64 %t336 %t342 = load i64, ptr %t341 call void @finch_str_from_int(ptr %a343, i64 %t342) %t344 = load { ptr, i64, i64 }, ptr %a343 store i64 -1, ptr %a345 %t346 = load i64, ptr %t334 %t347 = load ptr, ptr %a46 store i64 0, ptr %a348 br label %find.cond5402 find.cond5402: %t349 = load i64, ptr %a348 %t350 = icmp slt i64 %t349, %t346 br i1 %t350, label %find.body5403, label %find.end5406 find.body5403: %t351 = getelementptr inbounds { ptr, i64, i64 }, ptr %t347, i64 %t349 %t352 = load { ptr, i64, i64 }, ptr %t351 store { ptr, i64, i64 } %t352, ptr %a353 store { ptr, i64, i64 } %t344, ptr %a354 %t355 = call i32 @finch_str_eq(ptr %a353, ptr %a354) %t356 = icmp ne i32 %t355, 0 br i1 %t356, label %find.hit5404, label %find.next5405 find.hit5404: store i64 %t349, ptr %a345 br label %find.end5406 find.next5405: %t357 = add i64 %t349, 1 store i64 %t357, ptr %a348 br label %find.cond5402 find.end5406: %t358 = load i64, ptr %a345 %t359 = icmp sge i64 %t358, 0 %t360 = xor i1 %t359, true br i1 %t360, label %then5407, label %endif5409 then5407: %t361 = getelementptr inbounds { ptr, i64, i64 }, ptr %a327, i32 0, i32 1 %t362 = getelementptr inbounds %S.gen.EnumDef, ptr %a326, i32 0, i32 2 %t363 = load i64, ptr %a331 %t364 = load { ptr, i64, i64 }, ptr %t362 %t365 = extractvalue { ptr, i64, i64 } %t364, 1 %t366 = icmp uge i64 %t363, %t365 br i1 %t366, label %range5410, label %inrange5411 range5410: call void @finch_panic_index(ptr @.str.3540, i64 2795, i64 %t363, i64 %t365) unreachable inrange5411: %t367 = extractvalue { ptr, i64, i64 } %t364, 0 %t368 = getelementptr inbounds { ptr, i64, i64 }, ptr %t367, i64 %t363 %t369 = load { ptr, i64, i64 }, ptr %t368 store { ptr, i64, i64 } %t369, ptr %a370 call void @finch_str_copy(ptr %a371, ptr %a370) %t372 = load { ptr, i64, i64 }, ptr %a371 %t373 = load i64, ptr %t361 %t374 = add i64 %t373, 1 call void @finch_arr_reserve(ptr %a327, i64 %t374, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t375 = load ptr, ptr %a327 %t376 = getelementptr inbounds { ptr, i64, i64 }, ptr %t375, i64 %t373 store { ptr, i64, i64 } %t372, ptr %t376 store i64 %t374, ptr %t361 br label %endif5409 endif5409: br label %for.step5398 for.step5398: %t377 = load i64, ptr %a331 %t378 = add i64 %t377, 1 store i64 %t378, ptr %a331 br label %for.cond5396 for.end5399: %t379 = getelementptr inbounds { ptr, i64, i64 }, ptr %a327, i32 0, i32 1 %t380 = load i64, ptr %t379 %t381 = icmp sgt i64 %t380, 0 br i1 %t381, label %then5412, label %endif5414 then5412: %t382 = load ptr, ptr %a1 %t383 = load %S.ast.Node, ptr %a2 %t384 = getelementptr inbounds { ptr, i64, i64 }, ptr %a327, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.3542, i64 2, i64 0 }, ptr %a385 call void @finch_str_join(ptr %a386, ptr %a327, ptr %a385) %t387 = load { ptr, i64, i64 }, ptr %a386 store { ptr, i64, i64 } { ptr @.str.3541, i64 26, i64 0 }, ptr %a389 store { ptr, i64, i64 } %t387, ptr %a390 call void @finch_str_concat(ptr %a388, ptr %a389, ptr %a390) %t391 = load { ptr, i64, i64 }, ptr %a388 store { ptr, i64, i64 } %t391, ptr %a393 store { ptr, i64, i64 } { ptr @.str.3543, i64 29, i64 0 }, ptr %a394 call void @finch_str_concat(ptr %a392, ptr %a393, ptr %a394) %t395 = load { ptr, i64, i64 }, ptr %a392 call void @finch.gen.fail(ptr %t382, %S.ast.Node %t383, { ptr, i64, i64 } %t395) br label %endif5414 endif5414: br label %endif5391 else5390: %t396 = load ptr, ptr %a1 %t397 = load %S.ast.Node, ptr %a2 %t398 = load %S.ast.Type, ptr %a19 %t399 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t398) store { ptr, i64, i64 } { ptr @.str.3544, i64 11, i64 0 }, ptr %a401 store { ptr, i64, i64 } %t399, ptr %a402 call void @finch_str_concat(ptr %a400, ptr %a401, ptr %a402) %t403 = load { ptr, i64, i64 }, ptr %a400 store { ptr, i64, i64 } %t403, ptr %a405 store { ptr, i64, i64 } { ptr @.str.3545, i64 54, i64 0 }, ptr %a406 call void @finch_str_concat(ptr %a404, ptr %a405, ptr %a406) %t407 = load { ptr, i64, i64 }, ptr %a404 call void @finch.gen.fail(ptr %t396, %S.ast.Node %t397, { ptr, i64, i64 } %t407) br label %endif5391 endif5391: %t408 = load ptr, ptr %a1 %t409 = load %S.ast.Node, ptr %a2 call void @finch.gen.panicIf(ptr %t408, { ptr, i64, i64 } { ptr @.str.3546, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.3547, i64 35, i64 0 }, %S.ast.Node %t409) %t410 = load ptr, ptr %a1 call void @finch.gen.emit(ptr %t410, { ptr, i64, i64 } { ptr @.str.3548, i64 11, i64 0 }) %t411 = load ptr, ptr %a1 %t412 = icmp eq ptr %t411, null br i1 %t412, label %panic5415, label %ok5416 panic5415: call void @finch_panic(ptr @.str.3549, i64 2807, ptr @.str.3550) unreachable ok5416: %t413 = getelementptr inbounds %S.gen.Gen, ptr %t411, i32 0, i32 9 store i1 true, ptr %t413 br label %endif5388 endif5388: %t414 = load ptr, ptr %a1 %t415 = load { ptr, i64, i64 }, ptr %a43 call void @finch.gen.label(ptr %t414, { ptr, i64, i64 } %t415) %t416 = load i1, ptr %a45 %t417 = xor i1 %t416, true br i1 %t417, label %then5417, label %endif5419 then5417: %t418 = load ptr, ptr %a1 call void @finch.gen.emit(ptr %t418, { ptr, i64, i64 } { ptr @.str.3551, i64 11, i64 0 }) %t419 = load ptr, ptr %a1 %t420 = icmp eq ptr %t419, null br i1 %t420, label %panic5420, label %ok5421 panic5420: call void @finch_panic(ptr @.str.3552, i64 2812, ptr @.str.3553) unreachable ok5421: %t421 = getelementptr inbounds %S.gen.Gen, ptr %t419, i32 0, i32 9 store i1 true, ptr %t421 %t422 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3554, i64 4, i64 0 }) %t423 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t422, 1 ret %S.gen.Val %t423 endif5419: %t424 = load i1, ptr %a3 br i1 %t424, label %then5422, label %endif5424 then5422: %t425 = load ptr, ptr %a1 %t426 = load ptr, ptr %a1 %t427 = load %S.ast.Type, ptr %a50 %t428 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t426, %S.ast.Type %t427) store { ptr, i64, i64 } { ptr @.str.3555, i64 4, i64 0 }, ptr %a430 store { ptr, i64, i64 } %t428, ptr %a431 call void @finch_str_concat(ptr %a429, ptr %a430, ptr %a431) %t432 = load { ptr, i64, i64 }, ptr %a429 store { ptr, i64, i64 } %t432, ptr %a434 store { ptr, i64, i64 } { ptr @.str.3556, i64 1, i64 0 }, ptr %a435 call void @finch_str_concat(ptr %a433, ptr %a434, ptr %a435) %t436 = load { ptr, i64, i64 }, ptr %a433 %t437 = load { ptr, i64, i64 }, ptr %a47 %t438 = load { ptr, i64, i64 }, ptr %a48 %t439 = call { ptr, i64, i64 } @finch.gen.phiList({ ptr, i64, i64 } %t437, { ptr, i64, i64 } %t438) store { ptr, i64, i64 } %t436, ptr %a441 store { ptr, i64, i64 } %t439, ptr %a442 call void @finch_str_concat(ptr %a440, ptr %a441, ptr %a442) %t443 = load { ptr, i64, i64 }, ptr %a440 %t444 = call { ptr, i64, i64 } @finch.gen.op(ptr %t425, { ptr, i64, i64 } %t443) %t445 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t444, 0 %t446 = load %S.ast.Type, ptr %a50 store %S.ast.Type %t446, ptr %a447 call void @finch.copy.S_ast_Type(ptr %a448, ptr %a447) %t449 = load %S.ast.Type, ptr %a448 %t450 = insertvalue %S.gen.Val %t445, %S.ast.Type %t449, 1 %t451 = load ptr, ptr %a1 %t452 = load %S.ast.Type, ptr %a50 %t453 = call i1 @finch.gen.owning(ptr %t451, %S.ast.Type %t452) %t454 = insertvalue %S.gen.Val %t450, i1 %t453, 2 ret %S.gen.Val %t454 endif5424: %t455 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3557, i64 4, i64 0 }) %t456 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t455, 1 ret %S.gen.Val %t456 } define internal { ptr, i64, i64 } @finch.gen.phiList({ ptr, i64, i64 } %p0, { ptr, i64, i64 } %p1) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca i64, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store { ptr, i64, i64 } zeroinitializer, ptr %a3 %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t5 = load i64, ptr %t4 store i64 0, ptr %a6 br label %for.cond5425 for.cond5425: %t7 = load i64, ptr %a6 %t8 = icmp slt i64 %t7, %t5 br i1 %t8, label %for.body5426, label %for.end5428 for.body5426: %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 %t10 = load i64, ptr %a6 %t11 = load { ptr, i64, i64 }, ptr %a1 %t12 = extractvalue { ptr, i64, i64 } %t11, 1 %t13 = icmp uge i64 %t10, %t12 br i1 %t13, label %range5429, label %inrange5430 range5429: call void @finch_panic_index(ptr @.str.3559, i64 2824, i64 %t10, i64 %t12) unreachable inrange5430: %t14 = extractvalue { ptr, i64, i64 } %t11, 0 %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t14, i64 %t10 %t16 = load { ptr, i64, i64 }, ptr %t15 store { ptr, i64, i64 } { ptr @.str.3558, i64 2, i64 0 }, ptr %a18 store { ptr, i64, i64 } %t16, ptr %a19 call void @finch_str_concat(ptr %a17, ptr %a18, ptr %a19) %t20 = load { ptr, i64, i64 }, ptr %a17 store { ptr, i64, i64 } %t20, ptr %a22 store { ptr, i64, i64 } { ptr @.str.3560, i64 3, i64 0 }, ptr %a23 call void @finch_str_concat(ptr %a21, ptr %a22, ptr %a23) %t24 = load { ptr, i64, i64 }, ptr %a21 %t25 = load i64, ptr %a6 %t26 = load { ptr, i64, i64 }, ptr %a2 %t27 = extractvalue { ptr, i64, i64 } %t26, 1 %t28 = icmp uge i64 %t25, %t27 br i1 %t28, label %range5431, label %inrange5432 range5431: call void @finch_panic_index(ptr @.str.3561, i64 2824, i64 %t25, i64 %t27) unreachable inrange5432: %t29 = extractvalue { ptr, i64, i64 } %t26, 0 %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i64 %t25 %t31 = load { ptr, i64, i64 }, ptr %t30 store { ptr, i64, i64 } %t24, ptr %a33 store { ptr, i64, i64 } %t31, ptr %a34 call void @finch_str_concat(ptr %a32, ptr %a33, ptr %a34) %t35 = load { ptr, i64, i64 }, ptr %a32 store { ptr, i64, i64 } %t35, ptr %a37 store { ptr, i64, i64 } { ptr @.str.3562, i64 2, i64 0 }, ptr %a38 call void @finch_str_concat(ptr %a36, ptr %a37, ptr %a38) %t39 = load { ptr, i64, i64 }, ptr %a36 %t40 = load i64, ptr %t9 %t41 = add i64 %t40, 1 call void @finch_arr_reserve(ptr %a3, i64 %t41, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t42 = load ptr, ptr %a3 %t43 = getelementptr inbounds { ptr, i64, i64 }, ptr %t42, i64 %t40 store { ptr, i64, i64 } %t39, ptr %t43 store i64 %t41, ptr %t9 br label %for.step5427 for.step5427: %t44 = load i64, ptr %a6 %t45 = add i64 %t44, 1 store i64 %t45, ptr %a6 br label %for.cond5425 for.end5428: %t46 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.3563, i64 2, i64 0 }, ptr %a47 call void @finch_str_join(ptr %a48, ptr %a3, ptr %a47) %t49 = load { ptr, i64, i64 }, ptr %a48 ret { ptr, i64, i64 } %t49 } define internal void @finch.copy.S_gen_Fallible(ptr %dst, ptr %src) { entry: %t1 = load %S.gen.Fallible, ptr %src store %S.gen.Fallible %t1, ptr %dst %t2 = getelementptr inbounds %S.gen.Fallible, ptr %dst, i32 0, i32 0 %t3 = getelementptr inbounds %S.gen.Fallible, ptr %src, i32 0, i32 0 call void @finch.copy.S_gen_Val(ptr %t2, ptr %t3) %t4 = getelementptr inbounds %S.gen.Fallible, ptr %dst, i32 0, i32 1 %t5 = getelementptr inbounds %S.gen.Fallible, ptr %src, i32 0, i32 1 call void @finch_str_copy(ptr %t4, ptr %t5) %t6 = getelementptr inbounds %S.gen.Fallible, ptr %dst, i32 0, i32 2 %t7 = getelementptr inbounds %S.gen.Fallible, ptr %src, i32 0, i32 2 call void @finch_str_copy(ptr %t6, ptr %t7) ret void } define internal %S.gen.Fallible @finch.gen.fallibleCall(ptr %p0, %S.ast.Node %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca %S.gen.Val, align 16 %a58 = alloca %S.gen.Val, align 16 %a59 = alloca %S.gen.Val, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca %S.gen.Fallible, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a107 = alloca %S.gen.Fallible, align 16 %a108 = alloca %S.gen.Fallible, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 %t3 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 %t4 = load { ptr, i64, i64 }, ptr %t3 store { ptr, i64, i64 } %t4, ptr %a5 store { ptr, i64, i64 } { ptr @.str.3564, i64 4, i64 0 }, ptr %a6 %t7 = call i32 @finch_str_eq(ptr %a5, ptr %a6) %t8 = icmp eq i32 %t7, 0 br label %logic.from5433 logic.from5433: br i1 %t8, label %logic.rhs5434, label %logic.end5435 logic.rhs5434: %t9 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 %t10 = load { ptr, i64, i64 }, ptr %t9 store { ptr, i64, i64 } %t10, ptr %a11 store { ptr, i64, i64 } { ptr @.str.3565, i64 6, i64 0 }, ptr %a12 %t13 = call i32 @finch_str_eq(ptr %a11, ptr %a12) %t14 = icmp eq i32 %t13, 0 br label %logic.rend5436 logic.rend5436: br label %logic.end5435 logic.end5435: %t15 = phi i1 [ false, %logic.from5433 ], [ %t14, %logic.rend5436 ] br i1 %t15, label %then5437, label %endif5439 then5437: %t16 = load ptr, ptr %a1 %t17 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t16, %S.ast.Node %t17, { ptr, i64, i64 } { ptr @.str.3566, i64 80, i64 0 }) br label %endif5439 endif5439: %t18 = load ptr, ptr %a1 %t19 = icmp eq ptr %t18, null br i1 %t19, label %panic5440, label %ok5441 panic5440: call void @finch_panic(ptr @.str.3567, i64 2842, ptr @.str.3568) unreachable ok5441: %t20 = getelementptr inbounds %S.gen.Gen, ptr %t18, i32 0, i32 39 %t21 = load { ptr, i64, i64 }, ptr %t20 store { ptr, i64, i64 } %t21, ptr %a22 call void @finch_str_copy(ptr %a23, ptr %a22) %t24 = load { ptr, i64, i64 }, ptr %a23 store { ptr, i64, i64 } %t24, ptr %a25 %t26 = load ptr, ptr %a1 %t27 = icmp eq ptr %t26, null br i1 %t27, label %panic5442, label %ok5443 panic5442: call void @finch_panic(ptr @.str.3569, i64 2843, ptr @.str.3570) unreachable ok5443: %t28 = getelementptr inbounds %S.gen.Gen, ptr %t26, i32 0, i32 40 %t29 = load { ptr, i64, i64 }, ptr %t28 store { ptr, i64, i64 } %t29, ptr %a30 call void @finch_str_copy(ptr %a31, ptr %a30) %t32 = load { ptr, i64, i64 }, ptr %a31 store { ptr, i64, i64 } %t32, ptr %a33 %t34 = load ptr, ptr %a1 %t35 = icmp eq ptr %t34, null br i1 %t35, label %panic5444, label %ok5445 panic5444: call void @finch_panic(ptr @.str.3571, i64 2844, ptr @.str.3572) unreachable ok5445: %t36 = getelementptr inbounds %S.gen.Gen, ptr %t34, i32 0, i32 41 %t37 = load { ptr, i64, i64 }, ptr %t36 store { ptr, i64, i64 } %t37, ptr %a38 call void @finch_str_copy(ptr %a39, ptr %a38) %t40 = load { ptr, i64, i64 }, ptr %a39 store { ptr, i64, i64 } %t40, ptr %a41 %t42 = load %S.ast.Node, ptr %a2 %t43 = call { ptr, i64, i64 } @finch.gen.nodeKey(%S.ast.Node %t42) %t44 = load ptr, ptr %a1 %t45 = icmp eq ptr %t44, null br i1 %t45, label %panic5446, label %ok5447 panic5446: call void @finch_panic(ptr @.str.3573, i64 2845, ptr @.str.3574) unreachable ok5447: %t46 = getelementptr inbounds %S.gen.Gen, ptr %t44, i32 0, i32 39 store { ptr, i64, i64 } %t43, ptr %t46 %t47 = load ptr, ptr %a1 %t48 = icmp eq ptr %t47, null br i1 %t48, label %panic5448, label %ok5449 panic5448: call void @finch_panic(ptr @.str.3576, i64 2846, ptr @.str.3577) unreachable ok5449: %t49 = getelementptr inbounds %S.gen.Gen, ptr %t47, i32 0, i32 40 store { ptr, i64, i64 } { ptr @.str.3575, i64 0, i64 0 }, ptr %t49 %t50 = load ptr, ptr %a1 %t51 = icmp eq ptr %t50, null br i1 %t51, label %panic5450, label %ok5451 panic5450: call void @finch_panic(ptr @.str.3579, i64 2847, ptr @.str.3580) unreachable ok5451: %t52 = getelementptr inbounds %S.gen.Gen, ptr %t50, i32 0, i32 41 store { ptr, i64, i64 } { ptr @.str.3578, i64 0, i64 0 }, ptr %t52 %t53 = load ptr, ptr %a1 %t54 = load %S.ast.Node, ptr %a2 %t55 = call %S.gen.Val @finch.gen.expr(ptr %t53, %S.ast.Node %t54) store %S.gen.Val %t55, ptr %a56 %t57 = load %S.gen.Val, ptr %a56 store %S.gen.Val %t57, ptr %a58 call void @finch.copy.S_gen_Val(ptr %a59, ptr %a58) %t60 = load %S.gen.Val, ptr %a59 %t61 = insertvalue %S.gen.Fallible zeroinitializer, %S.gen.Val %t60, 0 %t62 = load ptr, ptr %a1 %t63 = icmp eq ptr %t62, null br i1 %t63, label %panic5452, label %ok5453 panic5452: call void @finch_panic(ptr @.str.3581, i64 2849, ptr @.str.3582) unreachable ok5453: %t64 = getelementptr inbounds %S.gen.Gen, ptr %t62, i32 0, i32 40 %t65 = load { ptr, i64, i64 }, ptr %t64 store { ptr, i64, i64 } %t65, ptr %a66 call void @finch_str_copy(ptr %a67, ptr %a66) %t68 = load { ptr, i64, i64 }, ptr %a67 %t69 = insertvalue %S.gen.Fallible %t61, { ptr, i64, i64 } %t68, 1 %t70 = load ptr, ptr %a1 %t71 = icmp eq ptr %t70, null br i1 %t71, label %panic5454, label %ok5455 panic5454: call void @finch_panic(ptr @.str.3583, i64 2849, ptr @.str.3584) unreachable ok5455: %t72 = getelementptr inbounds %S.gen.Gen, ptr %t70, i32 0, i32 41 %t73 = load { ptr, i64, i64 }, ptr %t72 store { ptr, i64, i64 } %t73, ptr %a74 call void @finch_str_copy(ptr %a75, ptr %a74) %t76 = load { ptr, i64, i64 }, ptr %a75 %t77 = insertvalue %S.gen.Fallible %t69, { ptr, i64, i64 } %t76, 2 store %S.gen.Fallible %t77, ptr %a78 %t79 = load { ptr, i64, i64 }, ptr %a25 %t80 = load ptr, ptr %a1 %t81 = icmp eq ptr %t80, null br i1 %t81, label %panic5456, label %ok5457 panic5456: call void @finch_panic(ptr @.str.3585, i64 2850, ptr @.str.3586) unreachable ok5457: %t82 = getelementptr inbounds %S.gen.Gen, ptr %t80, i32 0, i32 39 store { ptr, i64, i64 } %t79, ptr %a83 call void @finch_str_copy(ptr %a84, ptr %a83) %t85 = load { ptr, i64, i64 }, ptr %a84 store { ptr, i64, i64 } %t85, ptr %t82 %t86 = load { ptr, i64, i64 }, ptr %a33 %t87 = load ptr, ptr %a1 %t88 = icmp eq ptr %t87, null br i1 %t88, label %panic5458, label %ok5459 panic5458: call void @finch_panic(ptr @.str.3587, i64 2851, ptr @.str.3588) unreachable ok5459: %t89 = getelementptr inbounds %S.gen.Gen, ptr %t87, i32 0, i32 40 store { ptr, i64, i64 } %t86, ptr %a90 call void @finch_str_copy(ptr %a91, ptr %a90) %t92 = load { ptr, i64, i64 }, ptr %a91 store { ptr, i64, i64 } %t92, ptr %t89 %t93 = load { ptr, i64, i64 }, ptr %a41 %t94 = load ptr, ptr %a1 %t95 = icmp eq ptr %t94, null br i1 %t95, label %panic5460, label %ok5461 panic5460: call void @finch_panic(ptr @.str.3589, i64 2852, ptr @.str.3590) unreachable ok5461: %t96 = getelementptr inbounds %S.gen.Gen, ptr %t94, i32 0, i32 41 store { ptr, i64, i64 } %t93, ptr %a97 call void @finch_str_copy(ptr %a98, ptr %a97) %t99 = load { ptr, i64, i64 }, ptr %a98 store { ptr, i64, i64 } %t99, ptr %t96 %t100 = getelementptr inbounds %S.gen.Fallible, ptr %a78, i32 0, i32 1 %t101 = getelementptr inbounds { ptr, i64, i64 }, ptr %t100, i32 0, i32 1 %t102 = load i64, ptr %t101 %t103 = icmp eq i64 %t102, 0 br i1 %t103, label %then5462, label %endif5464 then5462: %t104 = load ptr, ptr %a1 %t105 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t104, %S.ast.Node %t105, { ptr, i64, i64 } { ptr @.str.3591, i64 50, i64 0 }) br label %endif5464 endif5464: %t106 = load %S.gen.Fallible, ptr %a78 store %S.gen.Fallible %t106, ptr %a107 call void @finch.copy.S_gen_Fallible(ptr %a108, ptr %a107) %t109 = load %S.gen.Fallible, ptr %a108 ret %S.gen.Fallible %t109 } define internal %S.gen.Val @finch.gen.tryExpr(ptr %p0, %S.ast.Node %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca %S.gen.Fallible, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca { ptr, i64, i64 }, align 16 %a111 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 %a113 = alloca { ptr, i64, i64 }, align 16 %a117 = alloca { ptr, i64, i64 }, align 16 %a118 = alloca { ptr, i64, i64 }, align 16 %a119 = alloca { ptr, i64, i64 }, align 16 %a121 = alloca { ptr, i64, i64 }, align 16 %a122 = alloca { ptr, i64, i64 }, align 16 %a123 = alloca { ptr, i64, i64 }, align 16 %a126 = alloca { ptr, i64, i64 }, align 16 %a127 = alloca { ptr, i64, i64 }, align 16 %a128 = alloca { ptr, i64, i64 }, align 16 %a137 = alloca %S.gen.Val, align 16 %a138 = alloca %S.gen.Val, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null br i1 %t4, label %panic5465, label %ok5466 panic5465: call void @finch_panic(ptr @.str.3592, i64 2861, ptr @.str.3593) unreachable ok5466: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 44 %t6 = load i64, ptr %t5 %t7 = icmp sgt i64 %t6, 0 br i1 %t7, label %then5467, label %endif5469 then5467: %t8 = load ptr, ptr %a1 %t9 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t8, %S.ast.Node %t9, { ptr, i64, i64 } { ptr @.str.3594, i64 30, i64 0 }) br label %endif5469 endif5469: %t10 = load ptr, ptr %a1 %t11 = icmp eq ptr %t10, null br i1 %t11, label %panic5470, label %ok5471 panic5470: call void @finch_panic(ptr @.str.3595, i64 2864, ptr @.str.3596) unreachable ok5471: %t12 = getelementptr inbounds %S.gen.Gen, ptr %t10, i32 0, i32 12 %t13 = getelementptr inbounds %S.gen.FnSig, ptr %t12, i32 0, i32 9 %t14 = load i1, ptr %t13 %t15 = xor i1 %t14, true br i1 %t15, label %then5472, label %endif5474 then5472: store { ptr, i64, i64 } { ptr @.str.3597, i64 1, i64 0 }, ptr %a16 %t17 = load ptr, ptr %a1 %t18 = icmp eq ptr %t17, null br i1 %t18, label %panic5475, label %ok5476 panic5475: call void @finch_panic(ptr @.str.3598, i64 2866, ptr @.str.3599) unreachable ok5476: %t19 = getelementptr inbounds %S.gen.Gen, ptr %t17, i32 0, i32 12 %t20 = getelementptr inbounds %S.gen.FnSig, ptr %t19, i32 0, i32 12 %t21 = getelementptr inbounds %S.ast.Type, ptr %t20, i32 0, i32 0 %t22 = load { ptr, i64, i64 }, ptr %t21 store { ptr, i64, i64 } %t22, ptr %a23 store { ptr, i64, i64 } { ptr @.str.3600, i64 4, i64 0 }, ptr %a24 %t25 = call i32 @finch_str_eq(ptr %a23, ptr %a24) %t26 = icmp eq i32 %t25, 0 br i1 %t26, label %then5477, label %endif5479 then5477: %t27 = load ptr, ptr %a1 %t28 = icmp eq ptr %t27, null br i1 %t28, label %panic5480, label %ok5481 panic5480: call void @finch_panic(ptr @.str.3601, i64 2867, ptr @.str.3602) unreachable ok5481: %t29 = getelementptr inbounds %S.gen.Gen, ptr %t27, i32 0, i32 12 %t30 = getelementptr inbounds %S.gen.FnSig, ptr %t29, i32 0, i32 12 %t31 = load %S.ast.Type, ptr %t30 %t32 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t31) store { ptr, i64, i64 } %t32, ptr %a34 store { ptr, i64, i64 } { ptr @.str.3603, i64 1, i64 0 }, ptr %a35 call void @finch_str_concat(ptr %a33, ptr %a34, ptr %a35) %t36 = load { ptr, i64, i64 }, ptr %a33 store { ptr, i64, i64 } %t36, ptr %a16 br label %endif5479 endif5479: %t37 = load ptr, ptr %a1 %t38 = load %S.ast.Node, ptr %a2 %t39 = load ptr, ptr %a1 %t40 = icmp eq ptr %t39, null br i1 %t40, label %panic5482, label %ok5483 panic5482: call void @finch_panic(ptr @.str.3605, i64 2869, ptr @.str.3606) unreachable ok5483: %t41 = getelementptr inbounds %S.gen.Gen, ptr %t39, i32 0, i32 12 %t42 = getelementptr inbounds %S.gen.FnSig, ptr %t41, i32 0, i32 1 %t43 = load { ptr, i64, i64 }, ptr %t42 store { ptr, i64, i64 } { ptr @.str.3604, i64 29, i64 0 }, ptr %a45 store { ptr, i64, i64 } %t43, ptr %a46 call void @finch_str_concat(ptr %a44, ptr %a45, ptr %a46) %t47 = load { ptr, i64, i64 }, ptr %a44 store { ptr, i64, i64 } %t47, ptr %a49 store { ptr, i64, i64 } { ptr @.str.3607, i64 31, i64 0 }, ptr %a50 call void @finch_str_concat(ptr %a48, ptr %a49, ptr %a50) %t51 = load { ptr, i64, i64 }, ptr %a48 %t52 = load { ptr, i64, i64 }, ptr %a16 store { ptr, i64, i64 } %t51, ptr %a54 store { ptr, i64, i64 } %t52, ptr %a55 call void @finch_str_concat(ptr %a53, ptr %a54, ptr %a55) %t56 = load { ptr, i64, i64 }, ptr %a53 store { ptr, i64, i64 } %t56, ptr %a58 store { ptr, i64, i64 } { ptr @.str.3608, i64 55, i64 0 }, ptr %a59 call void @finch_str_concat(ptr %a57, ptr %a58, ptr %a59) %t60 = load { ptr, i64, i64 }, ptr %a57 call void @finch.gen.fail(ptr %t37, %S.ast.Node %t38, { ptr, i64, i64 } %t60) br label %endif5474 endif5474: %t61 = load ptr, ptr %a1 %t62 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t63 = load { ptr, i64, i64 }, ptr %t62 %t64 = extractvalue { ptr, i64, i64 } %t63, 1 %t65 = icmp uge i64 0, %t64 br i1 %t65, label %range5484, label %inrange5485 range5484: call void @finch_panic_index(ptr @.str.3609, i64 2871, i64 0, i64 %t64) unreachable inrange5485: %t66 = extractvalue { ptr, i64, i64 } %t63, 0 %t67 = getelementptr inbounds %S.ast.Node, ptr %t66, i64 0 %t68 = load %S.ast.Node, ptr %t67 %t69 = call %S.gen.Fallible @finch.gen.fallibleCall(ptr %t61, %S.ast.Node %t68) store %S.gen.Fallible %t69, ptr %a70 %t71 = load ptr, ptr %a1 %t72 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t71, { ptr, i64, i64 } { ptr @.str.3610, i64 10, i64 0 }) store { ptr, i64, i64 } %t72, ptr %a73 %t74 = load ptr, ptr %a1 %t75 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t74, { ptr, i64, i64 } { ptr @.str.3611, i64 6, i64 0 }) store { ptr, i64, i64 } %t75, ptr %a76 %t77 = load ptr, ptr %a1 %t78 = getelementptr inbounds %S.gen.Fallible, ptr %a70, i32 0, i32 1 %t79 = load { ptr, i64, i64 }, ptr %t78 %t80 = load { ptr, i64, i64 }, ptr %a73 %t81 = load { ptr, i64, i64 }, ptr %a76 call void @finch.gen.condBr(ptr %t77, { ptr, i64, i64 } %t79, { ptr, i64, i64 } %t80, { ptr, i64, i64 } %t81) %t82 = load ptr, ptr %a1 %t83 = load { ptr, i64, i64 }, ptr %a73 call void @finch.gen.label(ptr %t82, { ptr, i64, i64 } %t83) %t84 = load ptr, ptr %a1 call void @finch.gen.unwind(ptr %t84, i64 0) %t85 = load ptr, ptr %a1 %t86 = load ptr, ptr %a1 %t87 = load ptr, ptr %a1 %t88 = icmp eq ptr %t87, null br i1 %t88, label %panic5486, label %ok5487 panic5486: call void @finch_panic(ptr @.str.3613, i64 2877, ptr @.str.3614) unreachable ok5487: %t89 = getelementptr inbounds %S.gen.Gen, ptr %t87, i32 0, i32 12 %t90 = load %S.gen.FnSig, ptr %t89 %t91 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t86, %S.gen.FnSig %t90) store { ptr, i64, i64 } { ptr @.str.3612, i64 4, i64 0 }, ptr %a93 store { ptr, i64, i64 } %t91, ptr %a94 call void @finch_str_concat(ptr %a92, ptr %a93, ptr %a94) %t95 = load { ptr, i64, i64 }, ptr %a92 store { ptr, i64, i64 } %t95, ptr %a97 store { ptr, i64, i64 } { ptr @.str.3615, i64 1, i64 0 }, ptr %a98 call void @finch_str_concat(ptr %a96, ptr %a97, ptr %a98) %t99 = load { ptr, i64, i64 }, ptr %a96 %t100 = load ptr, ptr %a1 %t101 = load ptr, ptr %a1 %t102 = load ptr, ptr %a1 %t103 = icmp eq ptr %t102, null br i1 %t103, label %panic5488, label %ok5489 panic5488: call void @finch_panic(ptr @.str.3617, i64 2877, ptr @.str.3618) unreachable ok5489: %t104 = getelementptr inbounds %S.gen.Gen, ptr %t102, i32 0, i32 12 %t105 = load %S.gen.FnSig, ptr %t104 %t106 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t101, %S.gen.FnSig %t105) store { ptr, i64, i64 } { ptr @.str.3616, i64 12, i64 0 }, ptr %a108 store { ptr, i64, i64 } %t106, ptr %a109 call void @finch_str_concat(ptr %a107, ptr %a108, ptr %a109) %t110 = load { ptr, i64, i64 }, ptr %a107 store { ptr, i64, i64 } %t110, ptr %a112 store { ptr, i64, i64 } { ptr @.str.3619, i64 36, i64 0 }, ptr %a113 call void @finch_str_concat(ptr %a111, ptr %a112, ptr %a113) %t114 = load { ptr, i64, i64 }, ptr %a111 %t115 = getelementptr inbounds %S.gen.Fallible, ptr %a70, i32 0, i32 2 %t116 = load { ptr, i64, i64 }, ptr %t115 store { ptr, i64, i64 } %t114, ptr %a118 store { ptr, i64, i64 } %t116, ptr %a119 call void @finch_str_concat(ptr %a117, ptr %a118, ptr %a119) %t120 = load { ptr, i64, i64 }, ptr %a117 store { ptr, i64, i64 } %t120, ptr %a122 store { ptr, i64, i64 } { ptr @.str.3620, i64 3, i64 0 }, ptr %a123 call void @finch_str_concat(ptr %a121, ptr %a122, ptr %a123) %t124 = load { ptr, i64, i64 }, ptr %a121 %t125 = call { ptr, i64, i64 } @finch.gen.op(ptr %t100, { ptr, i64, i64 } %t124) store { ptr, i64, i64 } %t99, ptr %a127 store { ptr, i64, i64 } %t125, ptr %a128 call void @finch_str_concat(ptr %a126, ptr %a127, ptr %a128) %t129 = load { ptr, i64, i64 }, ptr %a126 call void @finch.gen.emit(ptr %t85, { ptr, i64, i64 } %t129) %t130 = load ptr, ptr %a1 %t131 = icmp eq ptr %t130, null br i1 %t131, label %panic5490, label %ok5491 panic5490: call void @finch_panic(ptr @.str.3621, i64 2878, ptr @.str.3622) unreachable ok5491: %t132 = getelementptr inbounds %S.gen.Gen, ptr %t130, i32 0, i32 9 store i1 true, ptr %t132 %t133 = load ptr, ptr %a1 %t134 = load { ptr, i64, i64 }, ptr %a76 call void @finch.gen.label(ptr %t133, { ptr, i64, i64 } %t134) %t135 = getelementptr inbounds %S.gen.Fallible, ptr %a70, i32 0, i32 0 %t136 = load %S.gen.Val, ptr %t135 store %S.gen.Val %t136, ptr %a137 call void @finch.copy.S_gen_Val(ptr %a138, ptr %a137) %t139 = load %S.gen.Val, ptr %a138 ret %S.gen.Val %t139 } define internal %S.gen.Val @finch.gen.orElse(ptr %p0, %S.ast.Node %p1, i1 %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a3 = alloca i1, align 16 %a13 = alloca %S.gen.Fallible, align 16 %a16 = alloca %S.gen.Val, align 16 %a17 = alloca %S.gen.Val, align 16 %a19 = alloca %S.gen.Val, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca i1, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a104 = alloca %S.gen.Val, align 16 %a105 = alloca %S.gen.Val, align 16 %a110 = alloca { ptr, i64, i64 }, align 16 %a111 = alloca { ptr, i64, i64 }, align 16 %a151 = alloca %S.gen.Val, align 16 %a155 = alloca { ptr, i64, i64 }, align 16 %a159 = alloca { ptr, i64, i64 }, align 16 %a162 = alloca { ptr, i64, i64 }, align 16 %a180 = alloca { ptr, i64, i64 }, align 16 %a181 = alloca { ptr, i64, i64 }, align 16 %a182 = alloca { ptr, i64, i64 }, align 16 %a184 = alloca { ptr, i64, i64 }, align 16 %a185 = alloca { ptr, i64, i64 }, align 16 %a186 = alloca { ptr, i64, i64 }, align 16 %a189 = alloca { ptr, i64, i64 }, align 16 %a190 = alloca { ptr, i64, i64 }, align 16 %a191 = alloca { ptr, i64, i64 }, align 16 %a193 = alloca { ptr, i64, i64 }, align 16 %a194 = alloca { ptr, i64, i64 }, align 16 %a195 = alloca { ptr, i64, i64 }, align 16 %a198 = alloca { ptr, i64, i64 }, align 16 %a199 = alloca { ptr, i64, i64 }, align 16 %a200 = alloca { ptr, i64, i64 }, align 16 %a202 = alloca { ptr, i64, i64 }, align 16 %a203 = alloca { ptr, i64, i64 }, align 16 %a204 = alloca { ptr, i64, i64 }, align 16 %a208 = alloca { ptr, i64, i64 }, align 16 %a209 = alloca { ptr, i64, i64 }, align 16 %a210 = alloca { ptr, i64, i64 }, align 16 %a212 = alloca { ptr, i64, i64 }, align 16 %a213 = alloca { ptr, i64, i64 }, align 16 %a214 = alloca { ptr, i64, i64 }, align 16 %a217 = alloca { ptr, i64, i64 }, align 16 %a218 = alloca { ptr, i64, i64 }, align 16 %a219 = alloca { ptr, i64, i64 }, align 16 %a221 = alloca { ptr, i64, i64 }, align 16 %a222 = alloca { ptr, i64, i64 }, align 16 %a223 = alloca { ptr, i64, i64 }, align 16 %a229 = alloca %S.ast.Type, align 16 %a230 = alloca %S.ast.Type, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 store i1 %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t6 = load { ptr, i64, i64 }, ptr %t5 %t7 = extractvalue { ptr, i64, i64 } %t6, 1 %t8 = icmp uge i64 0, %t7 br i1 %t8, label %range5492, label %inrange5493 range5492: call void @finch_panic_index(ptr @.str.3623, i64 2885, i64 0, i64 %t7) unreachable inrange5493: %t9 = extractvalue { ptr, i64, i64 } %t6, 0 %t10 = getelementptr inbounds %S.ast.Node, ptr %t9, i64 0 %t11 = load %S.ast.Node, ptr %t10 %t12 = call %S.gen.Fallible @finch.gen.fallibleCall(ptr %t4, %S.ast.Node %t11) store %S.gen.Fallible %t12, ptr %a13 %t14 = getelementptr inbounds %S.gen.Fallible, ptr %a13, i32 0, i32 0 %t15 = load %S.gen.Val, ptr %t14 store %S.gen.Val %t15, ptr %a16 call void @finch.copy.S_gen_Val(ptr %a17, ptr %a16) %t18 = load %S.gen.Val, ptr %a17 store %S.gen.Val %t18, ptr %a19 %t20 = load ptr, ptr %a1 %t21 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t20, { ptr, i64, i64 } { ptr @.str.3624, i64 9, i64 0 }) store { ptr, i64, i64 } %t21, ptr %a22 %t23 = load ptr, ptr %a1 %t24 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t23, { ptr, i64, i64 } { ptr @.str.3625, i64 5, i64 0 }) store { ptr, i64, i64 } %t24, ptr %a25 %t26 = load ptr, ptr %a1 %t27 = getelementptr inbounds %S.gen.Fallible, ptr %a13, i32 0, i32 1 %t28 = load { ptr, i64, i64 }, ptr %t27 %t29 = load { ptr, i64, i64 }, ptr %a22 %t30 = load { ptr, i64, i64 }, ptr %a25 call void @finch.gen.condBr(ptr %t26, { ptr, i64, i64 } %t28, { ptr, i64, i64 } %t29, { ptr, i64, i64 } %t30) %t31 = load ptr, ptr %a1 %t32 = load { ptr, i64, i64 }, ptr %a22 call void @finch.gen.label(ptr %t31, { ptr, i64, i64 } %t32) %t33 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 6 %t34 = load i1, ptr %t33 br i1 %t34, label %then5494, label %endif5496 then5494: %t35 = load ptr, ptr %a1 call void @finch.gen.pushScope(ptr %t35) %t36 = load ptr, ptr %a1 %t37 = load %S.ast.Node, ptr %a2 %t38 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3627, i64 3, i64 0 }) %t39 = getelementptr inbounds %S.gen.Fallible, ptr %a13, i32 0, i32 2 %t40 = load { ptr, i64, i64 }, ptr %t39 %t41 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t36, %S.ast.Node %t37, { ptr, i64, i64 } { ptr @.str.3626, i64 3, i64 0 }, %S.ast.Type %t38, { ptr, i64, i64 } %t40, i1 true) %t42 = load ptr, ptr %a1 %t43 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t44 = load { ptr, i64, i64 }, ptr %t43 %t45 = extractvalue { ptr, i64, i64 } %t44, 1 %t46 = icmp uge i64 1, %t45 br i1 %t46, label %range5497, label %inrange5498 range5497: call void @finch_panic_index(ptr @.str.3628, i64 2894, i64 1, i64 %t45) unreachable inrange5498: %t47 = extractvalue { ptr, i64, i64 } %t44, 0 %t48 = getelementptr inbounds %S.ast.Node, ptr %t47, i64 1 %t49 = load %S.ast.Node, ptr %t48 call void @finch.gen.block(ptr %t42, %S.ast.Node %t49, i1 true) %t50 = load ptr, ptr %a1 %t51 = icmp eq ptr %t50, null br i1 %t51, label %panic5499, label %ok5500 panic5499: call void @finch_panic(ptr @.str.3629, i64 2895, ptr @.str.3630) unreachable ok5500: %t52 = getelementptr inbounds %S.gen.Gen, ptr %t50, i32 0, i32 9 %t53 = load i1, ptr %t52 store i1 %t53, ptr %a54 %t55 = load ptr, ptr %a1 call void @finch.gen.popScope(ptr %t55) %t56 = load i1, ptr %a54 %t57 = xor i1 %t56, true br label %logic.from5501 logic.from5501: br i1 %t57, label %logic.rhs5502, label %logic.end5503 logic.rhs5502: %t58 = getelementptr inbounds %S.gen.Val, ptr %a19, i32 0, i32 1 %t59 = getelementptr inbounds %S.ast.Type, ptr %t58, i32 0, i32 0 %t60 = load { ptr, i64, i64 }, ptr %t59 store { ptr, i64, i64 } %t60, ptr %a61 store { ptr, i64, i64 } { ptr @.str.3631, i64 4, i64 0 }, ptr %a62 %t63 = call i32 @finch_str_eq(ptr %a61, ptr %a62) %t64 = icmp eq i32 %t63, 0 br label %logic.rend5504 logic.rend5504: br label %logic.end5503 logic.end5503: %t65 = phi i1 [ false, %logic.from5501 ], [ %t64, %logic.rend5504 ] br label %logic.from5505 logic.from5505: br i1 %t65, label %logic.rhs5506, label %logic.end5507 logic.rhs5506: %t66 = load i1, ptr %a3 %t67 = xor i1 %t66, true br label %logic.rend5508 logic.rend5508: br label %logic.end5507 logic.end5507: %t68 = phi i1 [ false, %logic.from5505 ], [ %t67, %logic.rend5508 ] br i1 %t68, label %then5509, label %endif5511 then5509: %t69 = load ptr, ptr %a1 %t70 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t71 = load { ptr, i64, i64 }, ptr %t70 %t72 = extractvalue { ptr, i64, i64 } %t71, 1 %t73 = icmp uge i64 1, %t72 br i1 %t73, label %range5512, label %inrange5513 range5512: call void @finch_panic_index(ptr @.str.3632, i64 2898, i64 1, i64 %t72) unreachable inrange5513: %t74 = extractvalue { ptr, i64, i64 } %t71, 0 %t75 = getelementptr inbounds %S.ast.Node, ptr %t74, i64 1 %t76 = load %S.ast.Node, ptr %t75 call void @finch.gen.fail(ptr %t69, %S.ast.Node %t76, { ptr, i64, i64 } { ptr @.str.3633, i64 142, i64 0 }) br label %endif5511 endif5511: %t77 = load i1, ptr %a3 br label %logic.from5514 logic.from5514: br i1 %t77, label %logic.rhs5515, label %logic.end5516 logic.rhs5515: %t78 = getelementptr inbounds %S.gen.Val, ptr %a19, i32 0, i32 1 %t79 = getelementptr inbounds %S.ast.Type, ptr %t78, i32 0, i32 0 %t80 = load { ptr, i64, i64 }, ptr %t79 store { ptr, i64, i64 } %t80, ptr %a81 store { ptr, i64, i64 } { ptr @.str.3634, i64 4, i64 0 }, ptr %a82 %t83 = call i32 @finch_str_eq(ptr %a81, ptr %a82) %t84 = icmp eq i32 %t83, 0 br label %logic.rend5517 logic.rend5517: br label %logic.end5516 logic.end5516: %t85 = phi i1 [ false, %logic.from5514 ], [ %t84, %logic.rend5517 ] br i1 %t85, label %then5518, label %endif5520 then5518: %t86 = load ptr, ptr %a1 %t87 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t86, { ptr, i64, i64 } { ptr @.str.3635, i64 6, i64 0 }) store { ptr, i64, i64 } %t87, ptr %a88 %t89 = load ptr, ptr %a1 %t90 = load { ptr, i64, i64 }, ptr %a88 call void @finch.gen.br(ptr %t89, { ptr, i64, i64 } %t90) %t91 = load ptr, ptr %a1 %t92 = load { ptr, i64, i64 }, ptr %a25 call void @finch.gen.label(ptr %t91, { ptr, i64, i64 } %t92) %t93 = load ptr, ptr %a1 %t94 = load { ptr, i64, i64 }, ptr %a88 call void @finch.gen.br(ptr %t93, { ptr, i64, i64 } %t94) %t95 = load ptr, ptr %a1 %t96 = load { ptr, i64, i64 }, ptr %a88 call void @finch.gen.label(ptr %t95, { ptr, i64, i64 } %t96) %t97 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3636, i64 4, i64 0 }) %t98 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t97, 1 ret %S.gen.Val %t98 endif5520: %t99 = load ptr, ptr %a1 %t100 = load { ptr, i64, i64 }, ptr %a25 call void @finch.gen.br(ptr %t99, { ptr, i64, i64 } %t100) %t101 = load ptr, ptr %a1 %t102 = load { ptr, i64, i64 }, ptr %a25 call void @finch.gen.label(ptr %t101, { ptr, i64, i64 } %t102) %t103 = load %S.gen.Val, ptr %a19 store %S.gen.Val %t103, ptr %a104 call void @finch.copy.S_gen_Val(ptr %a105, ptr %a104) %t106 = load %S.gen.Val, ptr %a105 ret %S.gen.Val %t106 endif5496: %t107 = getelementptr inbounds %S.gen.Val, ptr %a19, i32 0, i32 1 %t108 = getelementptr inbounds %S.ast.Type, ptr %t107, i32 0, i32 0 %t109 = load { ptr, i64, i64 }, ptr %t108 store { ptr, i64, i64 } %t109, ptr %a110 store { ptr, i64, i64 } { ptr @.str.3637, i64 4, i64 0 }, ptr %a111 %t112 = call i32 @finch_str_eq(ptr %a110, ptr %a111) %t113 = icmp ne i32 %t112, 0 br i1 %t113, label %then5521, label %endif5523 then5521: %t114 = load ptr, ptr %a1 %t115 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t116 = load { ptr, i64, i64 }, ptr %t115 %t117 = extractvalue { ptr, i64, i64 } %t116, 1 %t118 = icmp uge i64 1, %t117 br i1 %t118, label %range5524, label %inrange5525 range5524: call void @finch_panic_index(ptr @.str.3638, i64 2913, i64 1, i64 %t117) unreachable inrange5525: %t119 = extractvalue { ptr, i64, i64 } %t116, 0 %t120 = getelementptr inbounds %S.ast.Node, ptr %t119, i64 1 %t121 = load %S.ast.Node, ptr %t120 call void @finch.gen.fail(ptr %t114, %S.ast.Node %t121, { ptr, i64, i64 } { ptr @.str.3639, i64 98, i64 0 }) br label %endif5523 endif5523: %t122 = load ptr, ptr %a1 call void @finch.gen.pushScope(ptr %t122) %t123 = load ptr, ptr %a1 %t124 = load %S.ast.Node, ptr %a2 %t125 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3641, i64 3, i64 0 }) %t126 = getelementptr inbounds %S.gen.Fallible, ptr %a13, i32 0, i32 2 %t127 = load { ptr, i64, i64 }, ptr %t126 %t128 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t123, %S.ast.Node %t124, { ptr, i64, i64 } { ptr @.str.3640, i64 3, i64 0 }, %S.ast.Type %t125, { ptr, i64, i64 } %t127, i1 true) %t129 = load ptr, ptr %a1 %t130 = load ptr, ptr %a1 %t131 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t132 = load { ptr, i64, i64 }, ptr %t131 %t133 = extractvalue { ptr, i64, i64 } %t132, 1 %t134 = icmp uge i64 1, %t133 br i1 %t134, label %range5526, label %inrange5527 range5526: call void @finch_panic_index(ptr @.str.3642, i64 2917, i64 1, i64 %t133) unreachable inrange5527: %t135 = extractvalue { ptr, i64, i64 } %t132, 0 %t136 = getelementptr inbounds %S.ast.Node, ptr %t135, i64 1 %t137 = load %S.ast.Node, ptr %t136 %t138 = getelementptr inbounds %S.gen.Val, ptr %a19, i32 0, i32 1 %t139 = load %S.ast.Type, ptr %t138 %t140 = call %S.gen.Val @finch.gen.exprWant(ptr %t130, %S.ast.Node %t137, %S.ast.Type %t139) %t141 = getelementptr inbounds %S.gen.Val, ptr %a19, i32 0, i32 1 %t142 = load %S.ast.Type, ptr %t141 %t143 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t144 = load { ptr, i64, i64 }, ptr %t143 %t145 = extractvalue { ptr, i64, i64 } %t144, 1 %t146 = icmp uge i64 1, %t145 br i1 %t146, label %range5528, label %inrange5529 range5528: call void @finch_panic_index(ptr @.str.3643, i64 2917, i64 1, i64 %t145) unreachable inrange5529: %t147 = extractvalue { ptr, i64, i64 } %t144, 0 %t148 = getelementptr inbounds %S.ast.Node, ptr %t147, i64 1 %t149 = load %S.ast.Node, ptr %t148 %t150 = call %S.gen.Val @finch.gen.coerce(ptr %t129, %S.gen.Val %t140, %S.ast.Type %t142, %S.ast.Node %t149, { ptr, i64, i64 } { ptr @.str.3644, i64 20, i64 0 }) store %S.gen.Val %t150, ptr %a151 %t152 = load ptr, ptr %a1 %t153 = load %S.gen.Val, ptr %a151 %t154 = call { ptr, i64, i64 } @finch.gen.own(ptr %t152, %S.gen.Val %t153) store { ptr, i64, i64 } %t154, ptr %a155 %t156 = load ptr, ptr %a1 call void @finch.gen.popScope(ptr %t156) %t157 = load ptr, ptr %a1 %t158 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t157, { ptr, i64, i64 } { ptr @.str.3645, i64 7, i64 0 }) store { ptr, i64, i64 } %t158, ptr %a159 %t160 = load ptr, ptr %a1 %t161 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t160, { ptr, i64, i64 } { ptr @.str.3646, i64 6, i64 0 }) store { ptr, i64, i64 } %t161, ptr %a162 %t163 = load ptr, ptr %a1 %t164 = load { ptr, i64, i64 }, ptr %a159 call void @finch.gen.br(ptr %t163, { ptr, i64, i64 } %t164) %t165 = load ptr, ptr %a1 %t166 = load { ptr, i64, i64 }, ptr %a159 call void @finch.gen.label(ptr %t165, { ptr, i64, i64 } %t166) %t167 = load ptr, ptr %a1 %t168 = load { ptr, i64, i64 }, ptr %a162 call void @finch.gen.br(ptr %t167, { ptr, i64, i64 } %t168) %t169 = load ptr, ptr %a1 %t170 = load { ptr, i64, i64 }, ptr %a25 call void @finch.gen.label(ptr %t169, { ptr, i64, i64 } %t170) %t171 = load ptr, ptr %a1 %t172 = load { ptr, i64, i64 }, ptr %a162 call void @finch.gen.br(ptr %t171, { ptr, i64, i64 } %t172) %t173 = load ptr, ptr %a1 %t174 = load { ptr, i64, i64 }, ptr %a162 call void @finch.gen.label(ptr %t173, { ptr, i64, i64 } %t174) %t175 = load ptr, ptr %a1 %t176 = load ptr, ptr %a1 %t177 = getelementptr inbounds %S.gen.Val, ptr %a19, i32 0, i32 1 %t178 = load %S.ast.Type, ptr %t177 %t179 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t176, %S.ast.Type %t178) store { ptr, i64, i64 } { ptr @.str.3647, i64 4, i64 0 }, ptr %a181 store { ptr, i64, i64 } %t179, ptr %a182 call void @finch_str_concat(ptr %a180, ptr %a181, ptr %a182) %t183 = load { ptr, i64, i64 }, ptr %a180 store { ptr, i64, i64 } %t183, ptr %a185 store { ptr, i64, i64 } { ptr @.str.3648, i64 3, i64 0 }, ptr %a186 call void @finch_str_concat(ptr %a184, ptr %a185, ptr %a186) %t187 = load { ptr, i64, i64 }, ptr %a184 %t188 = load { ptr, i64, i64 }, ptr %a155 store { ptr, i64, i64 } %t187, ptr %a190 store { ptr, i64, i64 } %t188, ptr %a191 call void @finch_str_concat(ptr %a189, ptr %a190, ptr %a191) %t192 = load { ptr, i64, i64 }, ptr %a189 store { ptr, i64, i64 } %t192, ptr %a194 store { ptr, i64, i64 } { ptr @.str.3649, i64 3, i64 0 }, ptr %a195 call void @finch_str_concat(ptr %a193, ptr %a194, ptr %a195) %t196 = load { ptr, i64, i64 }, ptr %a193 %t197 = load { ptr, i64, i64 }, ptr %a159 store { ptr, i64, i64 } %t196, ptr %a199 store { ptr, i64, i64 } %t197, ptr %a200 call void @finch_str_concat(ptr %a198, ptr %a199, ptr %a200) %t201 = load { ptr, i64, i64 }, ptr %a198 store { ptr, i64, i64 } %t201, ptr %a203 store { ptr, i64, i64 } { ptr @.str.3650, i64 6, i64 0 }, ptr %a204 call void @finch_str_concat(ptr %a202, ptr %a203, ptr %a204) %t205 = load { ptr, i64, i64 }, ptr %a202 %t206 = getelementptr inbounds %S.gen.Val, ptr %a19, i32 0, i32 0 %t207 = load { ptr, i64, i64 }, ptr %t206 store { ptr, i64, i64 } %t205, ptr %a209 store { ptr, i64, i64 } %t207, ptr %a210 call void @finch_str_concat(ptr %a208, ptr %a209, ptr %a210) %t211 = load { ptr, i64, i64 }, ptr %a208 store { ptr, i64, i64 } %t211, ptr %a213 store { ptr, i64, i64 } { ptr @.str.3651, i64 3, i64 0 }, ptr %a214 call void @finch_str_concat(ptr %a212, ptr %a213, ptr %a214) %t215 = load { ptr, i64, i64 }, ptr %a212 %t216 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t215, ptr %a218 store { ptr, i64, i64 } %t216, ptr %a219 call void @finch_str_concat(ptr %a217, ptr %a218, ptr %a219) %t220 = load { ptr, i64, i64 }, ptr %a217 store { ptr, i64, i64 } %t220, ptr %a222 store { ptr, i64, i64 } { ptr @.str.3652, i64 2, i64 0 }, ptr %a223 call void @finch_str_concat(ptr %a221, ptr %a222, ptr %a223) %t224 = load { ptr, i64, i64 }, ptr %a221 %t225 = call { ptr, i64, i64 } @finch.gen.op(ptr %t175, { ptr, i64, i64 } %t224) %t226 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t225, 0 %t227 = getelementptr inbounds %S.gen.Val, ptr %a19, i32 0, i32 1 %t228 = load %S.ast.Type, ptr %t227 store %S.ast.Type %t228, ptr %a229 call void @finch.copy.S_ast_Type(ptr %a230, ptr %a229) %t231 = load %S.ast.Type, ptr %a230 %t232 = insertvalue %S.gen.Val %t226, %S.ast.Type %t231, 1 %t233 = load ptr, ptr %a1 %t234 = getelementptr inbounds %S.gen.Val, ptr %a19, i32 0, i32 1 %t235 = load %S.ast.Type, ptr %t234 %t236 = call i1 @finch.gen.owning(ptr %t233, %S.ast.Type %t235) %t237 = insertvalue %S.gen.Val %t232, i1 %t236, 2 ret %S.gen.Val %t237 } define internal %S.gen.Val @finch.gen.exprWant(ptr %p0, %S.ast.Node %p1, %S.ast.Type %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a3 = alloca %S.ast.Type, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 store %S.ast.Type %p2, ptr %a3 %t4 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 %t5 = load { ptr, i64, i64 }, ptr %t4 store { ptr, i64, i64 } %t5, ptr %a6 store { ptr, i64, i64 } { ptr @.str.3653, i64 5, i64 0 }, ptr %a7 %t8 = call i32 @finch_str_eq(ptr %a6, ptr %a7) %t9 = icmp ne i32 %t8, 0 br i1 %t9, label %then5530, label %endif5532 then5530: %t10 = load ptr, ptr %a1 %t11 = load %S.ast.Node, ptr %a2 %t12 = load %S.ast.Type, ptr %a3 %t13 = call %S.gen.Val @finch.gen.arrayLit(ptr %t10, %S.ast.Node %t11, %S.ast.Type %t12) ret %S.gen.Val %t13 endif5532: %t14 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 %t15 = load { ptr, i64, i64 }, ptr %t14 store { ptr, i64, i64 } %t15, ptr %a16 store { ptr, i64, i64 } { ptr @.str.3654, i64 3, i64 0 }, ptr %a17 %t18 = call i32 @finch_str_eq(ptr %a16, ptr %a17) %t19 = icmp ne i32 %t18, 0 br i1 %t19, label %then5533, label %endif5535 then5533: %t20 = load ptr, ptr %a1 %t21 = load %S.ast.Node, ptr %a2 %t22 = load %S.ast.Type, ptr %a3 %t23 = call %S.gen.Val @finch.gen.mapLit(ptr %t20, %S.ast.Node %t21, %S.ast.Type %t22) ret %S.gen.Val %t23 endif5535: %t24 = load ptr, ptr %a1 %t25 = load %S.ast.Node, ptr %a2 %t26 = call %S.gen.Val @finch.gen.expr(ptr %t24, %S.ast.Node %t25) ret %S.gen.Val %t26 } define internal %S.gen.Val @finch.gen.expr(ptr %p0, %S.ast.Node %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca i64, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca i64, align 16 %a47 = alloca i8, align 16 %a52 = alloca i64, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca { ptr, i64, i64 }, align 16 %a104 = alloca { ptr, i64, i64 }, align 16 %a111 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 %a117 = alloca { ptr, i64, i64 }, align 16 %a118 = alloca { ptr, i64, i64 }, align 16 %a124 = alloca { ptr, i64, i64 }, align 16 %a125 = alloca { ptr, i64, i64 }, align 16 %a136 = alloca i64, align 16 %a138 = alloca { ptr, i64, i64 }, align 16 %a144 = alloca { ptr, i64, i64 }, align 16 %a145 = alloca { ptr, i64, i64 }, align 16 %a153 = alloca { ptr, i64, i64 }, align 16 %a154 = alloca { ptr, i64, i64 }, align 16 %a161 = alloca { ptr, i64, i64 }, align 16 %a162 = alloca { ptr, i64, i64 }, align 16 %a166 = alloca { ptr, i64, i64 }, align 16 %a167 = alloca { ptr, i64, i64 }, align 16 %a172 = alloca { ptr, i64, i64 }, align 16 %a173 = alloca { ptr, i64, i64 }, align 16 %a180 = alloca %S.gen.Ref, align 16 %a186 = alloca %S.gen.Val, align 16 %a187 = alloca %S.gen.Val, align 16 %a203 = alloca %S.ast.Type, align 16 %a204 = alloca %S.ast.Type, align 16 %a208 = alloca { ptr, i64, i64 }, align 16 %a209 = alloca { ptr, i64, i64 }, align 16 %a216 = alloca { ptr, i64, i64 }, align 16 %a217 = alloca { ptr, i64, i64 }, align 16 %a224 = alloca { ptr, i64, i64 }, align 16 %a225 = alloca { ptr, i64, i64 }, align 16 %a232 = alloca { ptr, i64, i64 }, align 16 %a233 = alloca { ptr, i64, i64 }, align 16 %a240 = alloca { ptr, i64, i64 }, align 16 %a241 = alloca { ptr, i64, i64 }, align 16 %a248 = alloca { ptr, i64, i64 }, align 16 %a249 = alloca { ptr, i64, i64 }, align 16 %a256 = alloca { ptr, i64, i64 }, align 16 %a257 = alloca { ptr, i64, i64 }, align 16 %a264 = alloca { ptr, i64, i64 }, align 16 %a265 = alloca { ptr, i64, i64 }, align 16 %a273 = alloca { ptr, i64, i64 }, align 16 %a274 = alloca { ptr, i64, i64 }, align 16 %a284 = alloca { ptr, i64, i64 }, align 16 %a285 = alloca { ptr, i64, i64 }, align 16 %a286 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 %t3 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 %t4 = load { ptr, i64, i64 }, ptr %t3 store { ptr, i64, i64 } %t4, ptr %a5 call void @finch_str_copy(ptr %a6, ptr %a5) %t7 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t7, ptr %a8 %t9 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t9, ptr %a10 store { ptr, i64, i64 } { ptr @.str.3655, i64 3, i64 0 }, ptr %a11 %t12 = call i32 @finch_str_eq(ptr %a10, ptr %a11) %t13 = icmp ne i32 %t12, 0 br i1 %t13, label %then5536, label %endif5538 then5536: %t14 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 %t15 = load { ptr, i64, i64 }, ptr %t14 store { ptr, i64, i64 } %t15, ptr %a16 store { ptr, i64, i64 } { ptr @.str.3657, i64 2, i64 0 }, ptr %a18 %t19 = call i32 @finch_str_starts(ptr %a16, ptr %a18) %t20 = icmp ne i32 %t19, 0 br label %logic.from5539 logic.from5539: br i1 %t20, label %logic.end5541, label %logic.rhs5540 logic.rhs5540: %t21 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 %t22 = load { ptr, i64, i64 }, ptr %t21 store { ptr, i64, i64 } %t22, ptr %a23 store { ptr, i64, i64 } { ptr @.str.3659, i64 2, i64 0 }, ptr %a25 %t26 = call i32 @finch_str_starts(ptr %a23, ptr %a25) %t27 = icmp ne i32 %t26, 0 br label %logic.rend5542 logic.rend5542: br label %logic.end5541 logic.end5541: %t28 = phi i1 [ true, %logic.from5539 ], [ %t27, %logic.rend5542 ] br i1 %t28, label %then5543, label %endif5545 then5543: store i64 0, ptr %a29 %t30 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 %t31 = load { ptr, i64, i64 }, ptr %t30 store { ptr, i64, i64 } %t31, ptr %a32 %t34 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 %t35 = getelementptr inbounds { ptr, i64, i64 }, ptr %t34, i32 0, i32 1 %t36 = load i64, ptr %t35 call void @finch_str_sub(ptr %a33, ptr %a32, i64 2, i64 %t36, ptr @.str.3660, i64 2946) %t37 = load { ptr, i64, i64 }, ptr %a33 store { ptr, i64, i64 } %t37, ptr %a38 store i64 0, ptr %a39 br label %each.cond5546 each.cond5546: %t40 = getelementptr inbounds { ptr, i64, i64 }, ptr %a38, i32 0, i32 1 %t41 = load i64, ptr %t40 %t42 = load i64, ptr %a39 %t43 = icmp slt i64 %t42, %t41 br i1 %t43, label %each.body5547, label %each.end5549 each.body5547: %t44 = load ptr, ptr %a38 %t45 = getelementptr inbounds i8, ptr %t44, i64 %t42 %t46 = load i8, ptr %t45 store i8 %t46, ptr %a47 %t48 = load i8, ptr %a47 %t49 = zext i8 %t48 to i64 %t50 = zext i8 48 to i64 %t51 = sub i64 %t49, %t50 store i64 %t51, ptr %a52 %t53 = load i8, ptr %a47 %t54 = icmp uge i8 %t53, 97 br label %logic.from5550 logic.from5550: br i1 %t54, label %logic.rhs5551, label %logic.end5552 logic.rhs5551: %t55 = load i8, ptr %a47 %t56 = icmp ule i8 %t55, 102 br label %logic.rend5553 logic.rend5553: br label %logic.end5552 logic.end5552: %t57 = phi i1 [ false, %logic.from5550 ], [ %t56, %logic.rend5553 ] br i1 %t57, label %then5554, label %endif5556 then5554: %t58 = load i8, ptr %a47 %t59 = zext i8 %t58 to i64 %t60 = zext i8 97 to i64 %t61 = sub i64 %t59, %t60 %t62 = add i64 %t61, 10 store i64 %t62, ptr %a52 br label %endif5556 endif5556: %t63 = load i8, ptr %a47 %t64 = icmp uge i8 %t63, 65 br label %logic.from5557 logic.from5557: br i1 %t64, label %logic.rhs5558, label %logic.end5559 logic.rhs5558: %t65 = load i8, ptr %a47 %t66 = icmp ule i8 %t65, 70 br label %logic.rend5560 logic.rend5560: br label %logic.end5559 logic.end5559: %t67 = phi i1 [ false, %logic.from5557 ], [ %t66, %logic.rend5560 ] br i1 %t67, label %then5561, label %endif5563 then5561: %t68 = load i8, ptr %a47 %t69 = zext i8 %t68 to i64 %t70 = zext i8 65 to i64 %t71 = sub i64 %t69, %t70 %t72 = add i64 %t71, 10 store i64 %t72, ptr %a52 br label %endif5563 endif5563: %t73 = load i64, ptr %a29 %t74 = mul i64 %t73, 16 %t75 = load i64, ptr %a52 %t76 = add i64 %t74, %t75 store i64 %t76, ptr %a29 br label %each.step5548 each.step5548: %t77 = load i64, ptr %a39 %t78 = add i64 %t77, 1 store i64 %t78, ptr %a39 br label %each.cond5546 each.end5549: %t79 = load i64, ptr %a29 call void @finch_str_from_int(ptr %a80, i64 %t79) %t81 = load { ptr, i64, i64 }, ptr %a80 %t82 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t81, 0 %t83 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3661, i64 3, i64 0 }) %t84 = insertvalue %S.gen.Val %t82, %S.ast.Type %t83, 1 %t85 = insertvalue %S.gen.Val %t84, i1 true, 3 ret %S.gen.Val %t85 endif5545: %t86 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 %t87 = load { ptr, i64, i64 }, ptr %t86 store { ptr, i64, i64 } %t87, ptr %a88 %t89 = call i64 @finch_str_to_int(ptr %a88, ptr @.str.3662, i64 2958) call void @finch_str_from_int(ptr %a90, i64 %t89) %t91 = load { ptr, i64, i64 }, ptr %a90 %t92 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t91, 0 %t93 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3663, i64 3, i64 0 }) %t94 = insertvalue %S.gen.Val %t92, %S.ast.Type %t93, 1 %t95 = insertvalue %S.gen.Val %t94, i1 true, 3 ret %S.gen.Val %t95 endif5538: %t96 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t96, ptr %a97 store { ptr, i64, i64 } { ptr @.str.3664, i64 5, i64 0 }, ptr %a98 %t99 = call i32 @finch_str_eq(ptr %a97, ptr %a98) %t100 = icmp ne i32 %t99, 0 br i1 %t100, label %then5564, label %endif5566 then5564: %t101 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 %t102 = load { ptr, i64, i64 }, ptr %t101 store { ptr, i64, i64 } %t102, ptr %a103 call void @finch_str_copy(ptr %a104, ptr %a103) %t105 = load { ptr, i64, i64 }, ptr %a104 %t106 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t105, 0 %t107 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3665, i64 5, i64 0 }) %t108 = insertvalue %S.gen.Val %t106, %S.ast.Type %t107, 1 %t109 = insertvalue %S.gen.Val %t108, i1 true, 3 ret %S.gen.Val %t109 endif5566: %t110 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t110, ptr %a111 store { ptr, i64, i64 } { ptr @.str.3666, i64 4, i64 0 }, ptr %a112 %t113 = call i32 @finch_str_eq(ptr %a111, ptr %a112) %t114 = icmp ne i32 %t113, 0 br i1 %t114, label %then5567, label %endif5569 then5567: %t115 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 %t116 = load { ptr, i64, i64 }, ptr %t115 store { ptr, i64, i64 } %t116, ptr %a117 call void @finch_str_copy(ptr %a118, ptr %a117) %t119 = load { ptr, i64, i64 }, ptr %a118 %t120 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t119, 0 %t121 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3667, i64 4, i64 0 }) %t122 = insertvalue %S.gen.Val %t120, %S.ast.Type %t121, 1 ret %S.gen.Val %t122 endif5569: %t123 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t123, ptr %a124 store { ptr, i64, i64 } { ptr @.str.3668, i64 4, i64 0 }, ptr %a125 %t126 = call i32 @finch_str_eq(ptr %a124, ptr %a125) %t127 = icmp ne i32 %t126, 0 br i1 %t127, label %then5570, label %endif5572 then5570: %t128 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 %t129 = load { ptr, i64, i64 }, ptr %t128 %t130 = extractvalue { ptr, i64, i64 } %t129, 1 %t131 = icmp uge i64 0, %t130 br i1 %t131, label %range5573, label %inrange5574 range5573: call void @finch_panic_index(ptr @.str.3669, i64 2967, i64 0, i64 %t130) unreachable inrange5574: %t132 = extractvalue { ptr, i64, i64 } %t129, 0 %t133 = getelementptr inbounds i8, ptr %t132, i64 0 %t134 = load i8, ptr %t133 %t135 = zext i8 %t134 to i64 store i64 %t135, ptr %a136 %t137 = load i64, ptr %a136 call void @finch_str_from_int(ptr %a138, i64 %t137) %t139 = load { ptr, i64, i64 }, ptr %a138 %t140 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t139, 0 %t141 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3670, i64 4, i64 0 }) %t142 = insertvalue %S.gen.Val %t140, %S.ast.Type %t141, 1 ret %S.gen.Val %t142 endif5572: %t143 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t143, ptr %a144 store { ptr, i64, i64 } { ptr @.str.3671, i64 3, i64 0 }, ptr %a145 %t146 = call i32 @finch_str_eq(ptr %a144, ptr %a145) %t147 = icmp ne i32 %t146, 0 br i1 %t147, label %then5575, label %endif5577 then5575: %t148 = load ptr, ptr %a1 %t149 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 %t150 = load { ptr, i64, i64 }, ptr %t149 %t151 = call %S.gen.Val @finch.gen.strConst(ptr %t148, { ptr, i64, i64 } %t150) ret %S.gen.Val %t151 endif5577: %t152 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t152, ptr %a153 store { ptr, i64, i64 } { ptr @.str.3672, i64 4, i64 0 }, ptr %a154 %t155 = call i32 @finch_str_eq(ptr %a153, ptr %a154) %t156 = icmp ne i32 %t155, 0 br i1 %t156, label %then5578, label %endif5580 then5578: %t157 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } { ptr @.str.3673, i64 4, i64 0 }, 0 %t158 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3674, i64 4, i64 0 }) %t159 = insertvalue %S.gen.Val %t157, %S.ast.Type %t158, 1 ret %S.gen.Val %t159 endif5580: %t160 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t160, ptr %a161 store { ptr, i64, i64 } { ptr @.str.3675, i64 3, i64 0 }, ptr %a162 %t163 = call i32 @finch_str_eq(ptr %a161, ptr %a162) %t164 = icmp ne i32 %t163, 0 br label %logic.from5581 logic.from5581: br i1 %t164, label %logic.end5583, label %logic.rhs5582 logic.rhs5582: %t165 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t165, ptr %a166 store { ptr, i64, i64 } { ptr @.str.3676, i64 6, i64 0 }, ptr %a167 %t168 = call i32 @finch_str_eq(ptr %a166, ptr %a167) %t169 = icmp ne i32 %t168, 0 br label %logic.rend5584 logic.rend5584: br label %logic.end5583 logic.end5583: %t170 = phi i1 [ true, %logic.from5581 ], [ %t169, %logic.rend5584 ] br label %logic.from5585 logic.from5585: br i1 %t170, label %logic.end5587, label %logic.rhs5586 logic.rhs5586: %t171 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t171, ptr %a172 store { ptr, i64, i64 } { ptr @.str.3677, i64 5, i64 0 }, ptr %a173 %t174 = call i32 @finch_str_eq(ptr %a172, ptr %a173) %t175 = icmp ne i32 %t174, 0 br label %logic.rend5588 logic.rend5588: br label %logic.end5587 logic.end5587: %t176 = phi i1 [ true, %logic.from5585 ], [ %t175, %logic.rend5588 ] br i1 %t176, label %then5589, label %endif5591 then5589: %t177 = load ptr, ptr %a1 %t178 = load %S.ast.Node, ptr %a2 %t179 = call %S.gen.Ref @finch.gen.ref(ptr %t177, %S.ast.Node %t178, i1 false) store %S.gen.Ref %t179, ptr %a180 %t181 = getelementptr inbounds %S.gen.Ref, ptr %a180, i32 0, i32 0 %t182 = load i1, ptr %t181 %t183 = xor i1 %t182, true br i1 %t183, label %then5592, label %endif5594 then5592: %t184 = getelementptr inbounds %S.gen.Ref, ptr %a180, i32 0, i32 2 %t185 = load %S.gen.Val, ptr %t184 store %S.gen.Val %t185, ptr %a186 call void @finch.copy.S_gen_Val(ptr %a187, ptr %a186) %t188 = load %S.gen.Val, ptr %a187 ret %S.gen.Val %t188 endif5594: %t189 = load ptr, ptr %a1 %t190 = load ptr, ptr %a1 %t191 = getelementptr inbounds %S.gen.Ref, ptr %a180, i32 0, i32 1 %t192 = getelementptr inbounds %S.gen.Place, ptr %t191, i32 0, i32 1 %t193 = load %S.ast.Type, ptr %t192 %t194 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t190, %S.ast.Type %t193) %t195 = getelementptr inbounds %S.gen.Ref, ptr %a180, i32 0, i32 1 %t196 = getelementptr inbounds %S.gen.Place, ptr %t195, i32 0, i32 0 %t197 = load { ptr, i64, i64 }, ptr %t196 %t198 = call { ptr, i64, i64 } @finch.gen.load(ptr %t189, { ptr, i64, i64 } %t194, { ptr, i64, i64 } %t197) %t199 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t198, 0 %t200 = getelementptr inbounds %S.gen.Ref, ptr %a180, i32 0, i32 1 %t201 = getelementptr inbounds %S.gen.Place, ptr %t200, i32 0, i32 1 %t202 = load %S.ast.Type, ptr %t201 store %S.ast.Type %t202, ptr %a203 call void @finch.copy.S_ast_Type(ptr %a204, ptr %a203) %t205 = load %S.ast.Type, ptr %a204 %t206 = insertvalue %S.gen.Val %t199, %S.ast.Type %t205, 1 ret %S.gen.Val %t206 endif5591: %t207 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t207, ptr %a208 store { ptr, i64, i64 } { ptr @.str.3678, i64 5, i64 0 }, ptr %a209 %t210 = call i32 @finch_str_eq(ptr %a208, ptr %a209) %t211 = icmp ne i32 %t210, 0 br i1 %t211, label %then5595, label %endif5597 then5595: %t212 = load ptr, ptr %a1 %t213 = load %S.ast.Node, ptr %a2 %t214 = call %S.gen.Val @finch.gen.matchGen(ptr %t212, %S.ast.Node %t213, i1 true) ret %S.gen.Val %t214 endif5597: %t215 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t215, ptr %a216 store { ptr, i64, i64 } { ptr @.str.3679, i64 3, i64 0 }, ptr %a217 %t218 = call i32 @finch_str_eq(ptr %a216, ptr %a217) %t219 = icmp ne i32 %t218, 0 br i1 %t219, label %then5598, label %endif5600 then5598: %t220 = load ptr, ptr %a1 %t221 = load %S.ast.Node, ptr %a2 %t222 = call %S.gen.Val @finch.gen.tryExpr(ptr %t220, %S.ast.Node %t221) ret %S.gen.Val %t222 endif5600: %t223 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t223, ptr %a224 store { ptr, i64, i64 } { ptr @.str.3680, i64 2, i64 0 }, ptr %a225 %t226 = call i32 @finch_str_eq(ptr %a224, ptr %a225) %t227 = icmp ne i32 %t226, 0 br i1 %t227, label %then5601, label %endif5603 then5601: %t228 = load ptr, ptr %a1 %t229 = load %S.ast.Node, ptr %a2 %t230 = call %S.gen.Val @finch.gen.orElse(ptr %t228, %S.ast.Node %t229, i1 false) ret %S.gen.Val %t230 endif5603: %t231 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t231, ptr %a232 store { ptr, i64, i64 } { ptr @.str.3681, i64 5, i64 0 }, ptr %a233 %t234 = call i32 @finch_str_eq(ptr %a232, ptr %a233) %t235 = icmp ne i32 %t234, 0 br i1 %t235, label %then5604, label %endif5606 then5604: %t236 = load ptr, ptr %a1 %t237 = load %S.ast.Node, ptr %a2 %t238 = call %S.gen.Val @finch.gen.unary(ptr %t236, %S.ast.Node %t237) ret %S.gen.Val %t238 endif5606: %t239 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t239, ptr %a240 store { ptr, i64, i64 } { ptr @.str.3682, i64 6, i64 0 }, ptr %a241 %t242 = call i32 @finch_str_eq(ptr %a240, ptr %a241) %t243 = icmp ne i32 %t242, 0 br i1 %t243, label %then5607, label %endif5609 then5607: %t244 = load ptr, ptr %a1 %t245 = load %S.ast.Node, ptr %a2 %t246 = call %S.gen.Val @finch.gen.binary(ptr %t244, %S.ast.Node %t245) ret %S.gen.Val %t246 endif5609: %t247 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t247, ptr %a248 store { ptr, i64, i64 } { ptr @.str.3683, i64 4, i64 0 }, ptr %a249 %t250 = call i32 @finch_str_eq(ptr %a248, ptr %a249) %t251 = icmp ne i32 %t250, 0 br i1 %t251, label %then5610, label %endif5612 then5610: %t252 = load ptr, ptr %a1 %t253 = load %S.ast.Node, ptr %a2 %t254 = call %S.gen.Val @finch.gen.call(ptr %t252, %S.ast.Node %t253) ret %S.gen.Val %t254 endif5612: %t255 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t255, ptr %a256 store { ptr, i64, i64 } { ptr @.str.3684, i64 6, i64 0 }, ptr %a257 %t258 = call i32 @finch_str_eq(ptr %a256, ptr %a257) %t259 = icmp ne i32 %t258, 0 br i1 %t259, label %then5613, label %endif5615 then5613: %t260 = load ptr, ptr %a1 %t261 = load %S.ast.Node, ptr %a2 %t262 = call %S.gen.Val @finch.gen.method(ptr %t260, %S.ast.Node %t261) ret %S.gen.Val %t262 endif5615: %t263 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t263, ptr %a264 store { ptr, i64, i64 } { ptr @.str.3685, i64 5, i64 0 }, ptr %a265 %t266 = call i32 @finch_str_eq(ptr %a264, ptr %a265) %t267 = icmp ne i32 %t266, 0 br i1 %t267, label %then5616, label %endif5618 then5616: %t268 = load ptr, ptr %a1 %t269 = load %S.ast.Node, ptr %a2 %t270 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3686, i64 4, i64 0 }) %t271 = call %S.gen.Val @finch.gen.arrayLit(ptr %t268, %S.ast.Node %t269, %S.ast.Type %t270) ret %S.gen.Val %t271 endif5618: %t272 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t272, ptr %a273 store { ptr, i64, i64 } { ptr @.str.3687, i64 3, i64 0 }, ptr %a274 %t275 = call i32 @finch_str_eq(ptr %a273, ptr %a274) %t276 = icmp ne i32 %t275, 0 br i1 %t276, label %then5619, label %endif5621 then5619: %t277 = load ptr, ptr %a1 %t278 = load %S.ast.Node, ptr %a2 %t279 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3688, i64 4, i64 0 }) %t280 = call %S.gen.Val @finch.gen.mapLit(ptr %t277, %S.ast.Node %t278, %S.ast.Type %t279) ret %S.gen.Val %t280 endif5621: %t281 = load ptr, ptr %a1 %t282 = load %S.ast.Node, ptr %a2 %t283 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } { ptr @.str.3689, i64 19, i64 0 }, ptr %a285 store { ptr, i64, i64 } %t283, ptr %a286 call void @finch_str_concat(ptr %a284, ptr %a285, ptr %a286) %t287 = load { ptr, i64, i64 }, ptr %a284 call void @finch.gen.fail(ptr %t281, %S.ast.Node %t282, { ptr, i64, i64 } %t287) ret %S.gen.Val zeroinitializer } define internal %S.gen.Val @finch.gen.unary(ptr %p0, %S.ast.Node %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a12 = alloca %S.gen.Val, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca %S.gen.Val, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a85 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca %S.ast.Type, align 16 %a93 = alloca %S.ast.Type, align 16 %a104 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 %a106 = alloca { ptr, i64, i64 }, align 16 %a115 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca { ptr, i64, i64 }, align 16 %a117 = alloca { ptr, i64, i64 }, align 16 %a122 = alloca { ptr, i64, i64 }, align 16 %a123 = alloca { ptr, i64, i64 }, align 16 %a131 = alloca %S.ast.Type, align 16 %a132 = alloca %S.ast.Type, align 16 %a138 = alloca { ptr, i64, i64 }, align 16 %a139 = alloca { ptr, i64, i64 }, align 16 %a140 = alloca { ptr, i64, i64 }, align 16 %a145 = alloca %S.ast.Type, align 16 %a146 = alloca %S.ast.Type, align 16 %a155 = alloca { ptr, i64, i64 }, align 16 %a156 = alloca { ptr, i64, i64 }, align 16 %a157 = alloca { ptr, i64, i64 }, align 16 %a159 = alloca { ptr, i64, i64 }, align 16 %a160 = alloca { ptr, i64, i64 }, align 16 %a161 = alloca { ptr, i64, i64 }, align 16 %a165 = alloca { ptr, i64, i64 }, align 16 %a166 = alloca { ptr, i64, i64 }, align 16 %a167 = alloca { ptr, i64, i64 }, align 16 %a173 = alloca %S.ast.Type, align 16 %a174 = alloca %S.ast.Type, align 16 %a185 = alloca { ptr, i64, i64 }, align 16 %a186 = alloca { ptr, i64, i64 }, align 16 %a187 = alloca { ptr, i64, i64 }, align 16 %a189 = alloca { ptr, i64, i64 }, align 16 %a190 = alloca { ptr, i64, i64 }, align 16 %a191 = alloca { ptr, i64, i64 }, align 16 %a195 = alloca { ptr, i64, i64 }, align 16 %a196 = alloca { ptr, i64, i64 }, align 16 %a197 = alloca { ptr, i64, i64 }, align 16 %a203 = alloca %S.ast.Type, align 16 %a204 = alloca %S.ast.Type, align 16 %a212 = alloca { ptr, i64, i64 }, align 16 %a213 = alloca { ptr, i64, i64 }, align 16 %a214 = alloca { ptr, i64, i64 }, align 16 %a217 = alloca %S.gen.Val, align 16 %a218 = alloca %S.gen.Val, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t5 = load { ptr, i64, i64 }, ptr %t4 %t6 = extractvalue { ptr, i64, i64 } %t5, 1 %t7 = icmp uge i64 0, %t6 br i1 %t7, label %range5622, label %inrange5623 range5622: call void @finch_panic_index(ptr @.str.3690, i64 3015, i64 0, i64 %t6) unreachable inrange5623: %t8 = extractvalue { ptr, i64, i64 } %t5, 0 %t9 = getelementptr inbounds %S.ast.Node, ptr %t8, i64 0 %t10 = load %S.ast.Node, ptr %t9 %t11 = call %S.gen.Val @finch.gen.expr(ptr %t3, %S.ast.Node %t10) store %S.gen.Val %t11, ptr %a12 %t13 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t14 = load { ptr, i64, i64 }, ptr %t13 store { ptr, i64, i64 } %t14, ptr %a15 store { ptr, i64, i64 } { ptr @.str.3691, i64 1, i64 0 }, ptr %a16 %t17 = call i32 @finch_str_eq(ptr %a15, ptr %a16) %t18 = icmp ne i32 %t17, 0 br i1 %t18, label %then5624, label %endif5626 then5624: %t19 = load ptr, ptr %a1 %t20 = load %S.gen.Val, ptr %a12 %t21 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3692, i64 4, i64 0 }) %t22 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t23 = load { ptr, i64, i64 }, ptr %t22 %t24 = extractvalue { ptr, i64, i64 } %t23, 1 %t25 = icmp uge i64 0, %t24 br i1 %t25, label %range5627, label %inrange5628 range5627: call void @finch_panic_index(ptr @.str.3693, i64 3017, i64 0, i64 %t24) unreachable inrange5628: %t26 = extractvalue { ptr, i64, i64 } %t23, 0 %t27 = getelementptr inbounds %S.ast.Node, ptr %t26, i64 0 %t28 = load %S.ast.Node, ptr %t27 %t29 = call %S.gen.Val @finch.gen.coerce(ptr %t19, %S.gen.Val %t20, %S.ast.Type %t21, %S.ast.Node %t28, { ptr, i64, i64 } { ptr @.str.3694, i64 19, i64 0 }) store %S.gen.Val %t29, ptr %a30 %t31 = load ptr, ptr %a1 %t32 = getelementptr inbounds %S.gen.Val, ptr %a30, i32 0, i32 0 %t33 = load { ptr, i64, i64 }, ptr %t32 store { ptr, i64, i64 } { ptr @.str.3695, i64 7, i64 0 }, ptr %a35 store { ptr, i64, i64 } %t33, ptr %a36 call void @finch_str_concat(ptr %a34, ptr %a35, ptr %a36) %t37 = load { ptr, i64, i64 }, ptr %a34 store { ptr, i64, i64 } %t37, ptr %a39 store { ptr, i64, i64 } { ptr @.str.3696, i64 6, i64 0 }, ptr %a40 call void @finch_str_concat(ptr %a38, ptr %a39, ptr %a40) %t41 = load { ptr, i64, i64 }, ptr %a38 %t42 = call { ptr, i64, i64 } @finch.gen.op(ptr %t31, { ptr, i64, i64 } %t41) %t43 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t42, 0 %t44 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3697, i64 4, i64 0 }) %t45 = insertvalue %S.gen.Val %t43, %S.ast.Type %t44, 1 ret %S.gen.Val %t45 endif5626: %t46 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t47 = load { ptr, i64, i64 }, ptr %t46 store { ptr, i64, i64 } %t47, ptr %a48 store { ptr, i64, i64 } { ptr @.str.3698, i64 1, i64 0 }, ptr %a49 %t50 = call i32 @finch_str_eq(ptr %a48, ptr %a49) %t51 = icmp ne i32 %t50, 0 br i1 %t51, label %then5629, label %endif5631 then5629: %t52 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 %t53 = load %S.ast.Type, ptr %t52 %t54 = call i1 @finch.gen.isInt(%S.ast.Type %t53) %t55 = xor i1 %t54, true br i1 %t55, label %then5632, label %endif5634 then5632: %t56 = load ptr, ptr %a1 %t57 = load %S.ast.Node, ptr %a2 %t58 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 %t59 = load %S.ast.Type, ptr %t58 %t60 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t59) store { ptr, i64, i64 } { ptr @.str.3699, i64 45, i64 0 }, ptr %a62 store { ptr, i64, i64 } %t60, ptr %a63 call void @finch_str_concat(ptr %a61, ptr %a62, ptr %a63) %t64 = load { ptr, i64, i64 }, ptr %a61 call void @finch.gen.fail(ptr %t56, %S.ast.Node %t57, { ptr, i64, i64 } %t64) br label %endif5634 endif5634: %t65 = load ptr, ptr %a1 %t66 = load ptr, ptr %a1 %t67 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 %t68 = load %S.ast.Type, ptr %t67 %t69 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t66, %S.ast.Type %t68) store { ptr, i64, i64 } { ptr @.str.3700, i64 4, i64 0 }, ptr %a71 store { ptr, i64, i64 } %t69, ptr %a72 call void @finch_str_concat(ptr %a70, ptr %a71, ptr %a72) %t73 = load { ptr, i64, i64 }, ptr %a70 store { ptr, i64, i64 } %t73, ptr %a75 store { ptr, i64, i64 } { ptr @.str.3701, i64 1, i64 0 }, ptr %a76 call void @finch_str_concat(ptr %a74, ptr %a75, ptr %a76) %t77 = load { ptr, i64, i64 }, ptr %a74 %t78 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 0 %t79 = load { ptr, i64, i64 }, ptr %t78 store { ptr, i64, i64 } %t77, ptr %a81 store { ptr, i64, i64 } %t79, ptr %a82 call void @finch_str_concat(ptr %a80, ptr %a81, ptr %a82) %t83 = load { ptr, i64, i64 }, ptr %a80 store { ptr, i64, i64 } %t83, ptr %a85 store { ptr, i64, i64 } { ptr @.str.3702, i64 4, i64 0 }, ptr %a86 call void @finch_str_concat(ptr %a84, ptr %a85, ptr %a86) %t87 = load { ptr, i64, i64 }, ptr %a84 %t88 = call { ptr, i64, i64 } @finch.gen.op(ptr %t65, { ptr, i64, i64 } %t87) %t89 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t88, 0 %t90 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 %t91 = load %S.ast.Type, ptr %t90 store %S.ast.Type %t91, ptr %a92 call void @finch.copy.S_ast_Type(ptr %a93, ptr %a92) %t94 = load %S.ast.Type, ptr %a93 %t95 = insertvalue %S.gen.Val %t89, %S.ast.Type %t94, 1 ret %S.gen.Val %t95 endif5631: %t96 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 %t97 = load %S.ast.Type, ptr %t96 %t98 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t97) br i1 %t98, label %then5635, label %endif5637 then5635: %t99 = load ptr, ptr %a1 %t100 = load %S.ast.Node, ptr %a2 %t101 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 %t102 = load %S.ast.Type, ptr %t101 %t103 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t102) store { ptr, i64, i64 } %t103, ptr %a105 store { ptr, i64, i64 } { ptr @.str.3703, i64 34, i64 0 }, ptr %a106 call void @finch_str_concat(ptr %a104, ptr %a105, ptr %a106) %t107 = load { ptr, i64, i64 }, ptr %a104 call void @finch.gen.fail(ptr %t99, %S.ast.Node %t100, { ptr, i64, i64 } %t107) br label %endif5637 endif5637: %t108 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 %t109 = load %S.ast.Type, ptr %t108 %t110 = call i1 @finch.gen.isSigned(%S.ast.Type %t109) br i1 %t110, label %then5638, label %endif5640 then5638: %t111 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 3 %t112 = load i1, ptr %t111 br i1 %t112, label %then5641, label %endif5643 then5641: %t113 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 0 %t114 = load { ptr, i64, i64 }, ptr %t113 store { ptr, i64, i64 } %t114, ptr %a115 store { ptr, i64, i64 } { ptr @.str.3705, i64 1, i64 0 }, ptr %a117 %t118 = call i32 @finch_str_starts(ptr %a115, ptr %a117) %t119 = icmp ne i32 %t118, 0 br i1 %t119, label %then5644, label %endif5646 then5644: %t120 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 0 %t121 = load { ptr, i64, i64 }, ptr %t120 store { ptr, i64, i64 } %t121, ptr %a122 %t124 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 0 %t125 = getelementptr inbounds { ptr, i64, i64 }, ptr %t124, i32 0, i32 1 %t126 = load i64, ptr %t125 call void @finch_str_sub(ptr %a123, ptr %a122, i64 1, i64 %t126, ptr @.str.3706, i64 3032) %t127 = load { ptr, i64, i64 }, ptr %a123 %t128 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t127, 0 %t129 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 %t130 = load %S.ast.Type, ptr %t129 store %S.ast.Type %t130, ptr %a131 call void @finch.copy.S_ast_Type(ptr %a132, ptr %a131) %t133 = load %S.ast.Type, ptr %a132 %t134 = insertvalue %S.gen.Val %t128, %S.ast.Type %t133, 1 %t135 = insertvalue %S.gen.Val %t134, i1 true, 3 ret %S.gen.Val %t135 endif5646: %t136 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 0 %t137 = load { ptr, i64, i64 }, ptr %t136 store { ptr, i64, i64 } { ptr @.str.3707, i64 1, i64 0 }, ptr %a139 store { ptr, i64, i64 } %t137, ptr %a140 call void @finch_str_concat(ptr %a138, ptr %a139, ptr %a140) %t141 = load { ptr, i64, i64 }, ptr %a138 %t142 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t141, 0 %t143 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 %t144 = load %S.ast.Type, ptr %t143 store %S.ast.Type %t144, ptr %a145 call void @finch.copy.S_ast_Type(ptr %a146, ptr %a145) %t147 = load %S.ast.Type, ptr %a146 %t148 = insertvalue %S.gen.Val %t142, %S.ast.Type %t147, 1 %t149 = insertvalue %S.gen.Val %t148, i1 true, 3 ret %S.gen.Val %t149 endif5643: %t150 = load ptr, ptr %a1 %t151 = load ptr, ptr %a1 %t152 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 %t153 = load %S.ast.Type, ptr %t152 %t154 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t151, %S.ast.Type %t153) store { ptr, i64, i64 } { ptr @.str.3708, i64 4, i64 0 }, ptr %a156 store { ptr, i64, i64 } %t154, ptr %a157 call void @finch_str_concat(ptr %a155, ptr %a156, ptr %a157) %t158 = load { ptr, i64, i64 }, ptr %a155 store { ptr, i64, i64 } %t158, ptr %a160 store { ptr, i64, i64 } { ptr @.str.3709, i64 4, i64 0 }, ptr %a161 call void @finch_str_concat(ptr %a159, ptr %a160, ptr %a161) %t162 = load { ptr, i64, i64 }, ptr %a159 %t163 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 0 %t164 = load { ptr, i64, i64 }, ptr %t163 store { ptr, i64, i64 } %t162, ptr %a166 store { ptr, i64, i64 } %t164, ptr %a167 call void @finch_str_concat(ptr %a165, ptr %a166, ptr %a167) %t168 = load { ptr, i64, i64 }, ptr %a165 %t169 = call { ptr, i64, i64 } @finch.gen.op(ptr %t150, { ptr, i64, i64 } %t168) %t170 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t169, 0 %t171 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 %t172 = load %S.ast.Type, ptr %t171 store %S.ast.Type %t172, ptr %a173 call void @finch.copy.S_ast_Type(ptr %a174, ptr %a173) %t175 = load %S.ast.Type, ptr %a174 %t176 = insertvalue %S.gen.Val %t170, %S.ast.Type %t175, 1 ret %S.gen.Val %t176 endif5640: %t177 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 %t178 = load %S.ast.Type, ptr %t177 %t179 = call i1 @finch.gen.isFloat(%S.ast.Type %t178) br i1 %t179, label %then5647, label %endif5649 then5647: %t180 = load ptr, ptr %a1 %t181 = load ptr, ptr %a1 %t182 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 %t183 = load %S.ast.Type, ptr %t182 %t184 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t181, %S.ast.Type %t183) store { ptr, i64, i64 } { ptr @.str.3710, i64 5, i64 0 }, ptr %a186 store { ptr, i64, i64 } %t184, ptr %a187 call void @finch_str_concat(ptr %a185, ptr %a186, ptr %a187) %t188 = load { ptr, i64, i64 }, ptr %a185 store { ptr, i64, i64 } %t188, ptr %a190 store { ptr, i64, i64 } { ptr @.str.3711, i64 1, i64 0 }, ptr %a191 call void @finch_str_concat(ptr %a189, ptr %a190, ptr %a191) %t192 = load { ptr, i64, i64 }, ptr %a189 %t193 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 0 %t194 = load { ptr, i64, i64 }, ptr %t193 store { ptr, i64, i64 } %t192, ptr %a196 store { ptr, i64, i64 } %t194, ptr %a197 call void @finch_str_concat(ptr %a195, ptr %a196, ptr %a197) %t198 = load { ptr, i64, i64 }, ptr %a195 %t199 = call { ptr, i64, i64 } @finch.gen.op(ptr %t180, { ptr, i64, i64 } %t198) %t200 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t199, 0 %t201 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 %t202 = load %S.ast.Type, ptr %t201 store %S.ast.Type %t202, ptr %a203 call void @finch.copy.S_ast_Type(ptr %a204, ptr %a203) %t205 = load %S.ast.Type, ptr %a204 %t206 = insertvalue %S.gen.Val %t200, %S.ast.Type %t205, 1 ret %S.gen.Val %t206 endif5649: %t207 = load ptr, ptr %a1 %t208 = load %S.ast.Node, ptr %a2 %t209 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 %t210 = load %S.ast.Type, ptr %t209 %t211 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t210) store { ptr, i64, i64 } { ptr @.str.3712, i64 26, i64 0 }, ptr %a213 store { ptr, i64, i64 } %t211, ptr %a214 call void @finch_str_concat(ptr %a212, ptr %a213, ptr %a214) %t215 = load { ptr, i64, i64 }, ptr %a212 call void @finch.gen.fail(ptr %t207, %S.ast.Node %t208, { ptr, i64, i64 } %t215) %t216 = load %S.gen.Val, ptr %a12 store %S.gen.Val %t216, ptr %a217 call void @finch.copy.S_gen_Val(ptr %a218, ptr %a217) %t219 = load %S.gen.Val, ptr %a218 ret %S.gen.Val %t219 } define internal void @finch.gen.badOperands(ptr %p0, { ptr, i64, i64 } %p1, %S.gen.Val %p2, %S.gen.Val %p3, %S.ast.Node %p4) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca %S.gen.Val, align 16 %a4 = alloca %S.gen.Val, align 16 %a5 = alloca %S.ast.Node, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca { ptr, i64, i64 }, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a113 = alloca { ptr, i64, i64 }, align 16 %a114 = alloca { ptr, i64, i64 }, align 16 %a119 = alloca { ptr, i64, i64 }, align 16 %a120 = alloca { ptr, i64, i64 }, align 16 %a125 = alloca { ptr, i64, i64 }, align 16 %a126 = alloca { ptr, i64, i64 }, align 16 %a131 = alloca { ptr, i64, i64 }, align 16 %a132 = alloca { ptr, i64, i64 }, align 16 %a133 = alloca { ptr, i64, i64 }, align 16 %a138 = alloca { ptr, i64, i64 }, align 16 %a139 = alloca { ptr, i64, i64 }, align 16 %a145 = alloca { ptr, i64, i64 }, align 16 %a146 = alloca { ptr, i64, i64 }, align 16 %a151 = alloca { ptr, i64, i64 }, align 16 %a152 = alloca { ptr, i64, i64 }, align 16 %a156 = alloca { ptr, i64, i64 }, align 16 %a157 = alloca { ptr, i64, i64 }, align 16 %a163 = alloca { ptr, i64, i64 }, align 16 %a164 = alloca { ptr, i64, i64 }, align 16 %a165 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store %S.gen.Val %p2, ptr %a3 store %S.gen.Val %p3, ptr %a4 store %S.ast.Node %p4, ptr %a5 %t6 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.3713, i64 11, i64 0 }, ptr %a8 store { ptr, i64, i64 } %t6, ptr %a9 call void @finch_str_concat(ptr %a7, ptr %a8, ptr %a9) %t10 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t10, ptr %a12 store { ptr, i64, i64 } { ptr @.str.3714, i64 5, i64 0 }, ptr %a13 call void @finch_str_concat(ptr %a11, ptr %a12, ptr %a13) %t14 = load { ptr, i64, i64 }, ptr %a11 %t15 = getelementptr inbounds %S.gen.Val, ptr %a3, i32 0, i32 1 %t16 = load %S.ast.Type, ptr %t15 %t17 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t16) store { ptr, i64, i64 } %t14, ptr %a19 store { ptr, i64, i64 } %t17, ptr %a20 call void @finch_str_concat(ptr %a18, ptr %a19, ptr %a20) %t21 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t21, ptr %a22 %t23 = getelementptr inbounds %S.gen.Val, ptr %a3, i32 0, i32 1 %t24 = load %S.ast.Type, ptr %t23 %t25 = getelementptr inbounds %S.gen.Val, ptr %a4, i32 0, i32 1 %t26 = load %S.ast.Type, ptr %t25 %t27 = call i1 @finch.ast.same(%S.ast.Type %t24, %S.ast.Type %t26) %t28 = xor i1 %t27, true br i1 %t28, label %then5650, label %endif5652 then5650: %t29 = load { ptr, i64, i64 }, ptr %a22 store { ptr, i64, i64 } %t29, ptr %a31 store { ptr, i64, i64 } { ptr @.str.3715, i64 5, i64 0 }, ptr %a32 call void @finch_str_concat(ptr %a30, ptr %a31, ptr %a32) %t33 = load { ptr, i64, i64 }, ptr %a30 %t34 = getelementptr inbounds %S.gen.Val, ptr %a4, i32 0, i32 1 %t35 = load %S.ast.Type, ptr %t34 %t36 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t35) store { ptr, i64, i64 } %t33, ptr %a38 store { ptr, i64, i64 } %t36, ptr %a39 call void @finch_str_concat(ptr %a37, ptr %a38, ptr %a39) %t40 = load { ptr, i64, i64 }, ptr %a37 store { ptr, i64, i64 } %t40, ptr %a22 br label %endif5652 endif5652: %t41 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t41, ptr %a42 store { ptr, i64, i64 } { ptr @.str.3716, i64 1, i64 0 }, ptr %a43 %t44 = call i32 @finch_str_eq(ptr %a42, ptr %a43) %t45 = icmp ne i32 %t44, 0 br label %logic.from5653 logic.from5653: br i1 %t45, label %logic.rhs5654, label %logic.end5655 logic.rhs5654: %t46 = getelementptr inbounds %S.gen.Val, ptr %a3, i32 0, i32 1 %t47 = getelementptr inbounds %S.ast.Type, ptr %t46, i32 0, i32 0 %t48 = load { ptr, i64, i64 }, ptr %t47 store { ptr, i64, i64 } %t48, ptr %a49 store { ptr, i64, i64 } { ptr @.str.3717, i64 3, i64 0 }, ptr %a50 %t51 = call i32 @finch_str_eq(ptr %a49, ptr %a50) %t52 = icmp ne i32 %t51, 0 br label %logic.from5656 logic.from5656: br i1 %t52, label %logic.end5658, label %logic.rhs5657 logic.rhs5657: %t53 = getelementptr inbounds %S.gen.Val, ptr %a4, i32 0, i32 1 %t54 = getelementptr inbounds %S.ast.Type, ptr %t53, i32 0, i32 0 %t55 = load { ptr, i64, i64 }, ptr %t54 store { ptr, i64, i64 } %t55, ptr %a56 store { ptr, i64, i64 } { ptr @.str.3718, i64 3, i64 0 }, ptr %a57 %t58 = call i32 @finch_str_eq(ptr %a56, ptr %a57) %t59 = icmp ne i32 %t58, 0 br label %logic.rend5659 logic.rend5659: br label %logic.end5658 logic.end5658: %t60 = phi i1 [ true, %logic.from5656 ], [ %t59, %logic.rend5659 ] br label %logic.rend5660 logic.rend5660: br label %logic.end5655 logic.end5655: %t61 = phi i1 [ false, %logic.from5653 ], [ %t60, %logic.rend5660 ] br i1 %t61, label %then5661, label %endif5663 then5661: %t62 = load { ptr, i64, i64 }, ptr %a22 store { ptr, i64, i64 } %t62, ptr %a64 store { ptr, i64, i64 } { ptr @.str.3719, i64 48, i64 0 }, ptr %a65 call void @finch_str_concat(ptr %a63, ptr %a64, ptr %a65) %t66 = load { ptr, i64, i64 }, ptr %a63 store { ptr, i64, i64 } %t66, ptr %a22 br label %endif5663 endif5663: %t67 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t67, ptr %a68 store { ptr, i64, i64 } { ptr @.str.3720, i64 1, i64 0 }, ptr %a69 %t70 = call i32 @finch_str_eq(ptr %a68, ptr %a69) %t71 = icmp ne i32 %t70, 0 br label %logic.from5664 logic.from5664: br i1 %t71, label %logic.end5666, label %logic.rhs5665 logic.rhs5665: %t72 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t72, ptr %a73 store { ptr, i64, i64 } { ptr @.str.3721, i64 1, i64 0 }, ptr %a74 %t75 = call i32 @finch_str_eq(ptr %a73, ptr %a74) %t76 = icmp ne i32 %t75, 0 br label %logic.rend5667 logic.rend5667: br label %logic.end5666 logic.end5666: %t77 = phi i1 [ true, %logic.from5664 ], [ %t76, %logic.rend5667 ] br label %logic.from5668 logic.from5668: br i1 %t77, label %logic.rhs5669, label %logic.end5670 logic.rhs5669: %t78 = getelementptr inbounds %S.gen.Val, ptr %a3, i32 0, i32 1 %t79 = getelementptr inbounds %S.ast.Type, ptr %t78, i32 0, i32 0 %t80 = load { ptr, i64, i64 }, ptr %t79 store { ptr, i64, i64 } %t80, ptr %a81 store { ptr, i64, i64 } { ptr @.str.3722, i64 4, i64 0 }, ptr %a82 %t83 = call i32 @finch_str_eq(ptr %a81, ptr %a82) %t84 = icmp ne i32 %t83, 0 br label %logic.rend5671 logic.rend5671: br label %logic.end5670 logic.end5670: %t85 = phi i1 [ false, %logic.from5668 ], [ %t84, %logic.rend5671 ] br i1 %t85, label %then5672, label %else5673 then5672: %t86 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t86, ptr %a87 store { ptr, i64, i64 } { ptr @.str.3723, i64 1, i64 0 }, ptr %a88 %t89 = call i32 @finch_str_eq(ptr %a87, ptr %a88) %t90 = icmp ne i32 %t89, 0 br i1 %t90, label %then5675, label %else5676 then5675: %t91 = load { ptr, i64, i64 }, ptr %a22 store { ptr, i64, i64 } %t91, ptr %a93 store { ptr, i64, i64 } { ptr @.str.3724, i64 26, i64 0 }, ptr %a94 call void @finch_str_concat(ptr %a92, ptr %a93, ptr %a94) %t95 = load { ptr, i64, i64 }, ptr %a92 store { ptr, i64, i64 } %t95, ptr %a22 br label %endif5677 else5676: %t96 = load { ptr, i64, i64 }, ptr %a22 store { ptr, i64, i64 } %t96, ptr %a98 store { ptr, i64, i64 } { ptr @.str.3725, i64 26, i64 0 }, ptr %a99 call void @finch_str_concat(ptr %a97, ptr %a98, ptr %a99) %t100 = load { ptr, i64, i64 }, ptr %a97 store { ptr, i64, i64 } %t100, ptr %a22 br label %endif5677 endif5677: br label %endif5674 else5673: %t101 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t101, ptr %a102 store { ptr, i64, i64 } { ptr @.str.3726, i64 1, i64 0 }, ptr %a103 %t104 = call i32 @finch_str_eq(ptr %a102, ptr %a103) %t105 = icmp ne i32 %t104, 0 br label %logic.from5678 logic.from5678: br i1 %t105, label %logic.end5680, label %logic.rhs5679 logic.rhs5679: %t106 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t106, ptr %a107 store { ptr, i64, i64 } { ptr @.str.3727, i64 1, i64 0 }, ptr %a108 %t109 = call i32 @finch_str_eq(ptr %a107, ptr %a108) %t110 = icmp ne i32 %t109, 0 br label %logic.rend5681 logic.rend5681: br label %logic.end5680 logic.end5680: %t111 = phi i1 [ true, %logic.from5678 ], [ %t110, %logic.rend5681 ] br label %logic.from5682 logic.from5682: br i1 %t111, label %logic.end5684, label %logic.rhs5683 logic.rhs5683: %t112 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t112, ptr %a113 store { ptr, i64, i64 } { ptr @.str.3728, i64 1, i64 0 }, ptr %a114 %t115 = call i32 @finch_str_eq(ptr %a113, ptr %a114) %t116 = icmp ne i32 %t115, 0 br label %logic.rend5685 logic.rend5685: br label %logic.end5684 logic.end5684: %t117 = phi i1 [ true, %logic.from5682 ], [ %t116, %logic.rend5685 ] br label %logic.from5686 logic.from5686: br i1 %t117, label %logic.end5688, label %logic.rhs5687 logic.rhs5687: %t118 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t118, ptr %a119 store { ptr, i64, i64 } { ptr @.str.3729, i64 2, i64 0 }, ptr %a120 %t121 = call i32 @finch_str_eq(ptr %a119, ptr %a120) %t122 = icmp ne i32 %t121, 0 br label %logic.rend5689 logic.rend5689: br label %logic.end5688 logic.end5688: %t123 = phi i1 [ true, %logic.from5686 ], [ %t122, %logic.rend5689 ] br label %logic.from5690 logic.from5690: br i1 %t123, label %logic.end5692, label %logic.rhs5691 logic.rhs5691: %t124 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t124, ptr %a125 store { ptr, i64, i64 } { ptr @.str.3730, i64 2, i64 0 }, ptr %a126 %t127 = call i32 @finch_str_eq(ptr %a125, ptr %a126) %t128 = icmp ne i32 %t127, 0 br label %logic.rend5693 logic.rend5693: br label %logic.end5692 logic.end5692: %t129 = phi i1 [ true, %logic.from5690 ], [ %t128, %logic.rend5693 ] br i1 %t129, label %then5694, label %endif5696 then5694: %t130 = load { ptr, i64, i64 }, ptr %a22 store { ptr, i64, i64 } %t130, ptr %a132 store { ptr, i64, i64 } { ptr @.str.3731, i64 43, i64 0 }, ptr %a133 call void @finch_str_concat(ptr %a131, ptr %a132, ptr %a133) %t134 = load { ptr, i64, i64 }, ptr %a131 store { ptr, i64, i64 } %t134, ptr %a22 br label %endif5696 endif5696: br label %endif5674 endif5674: %t135 = getelementptr inbounds %S.gen.Val, ptr %a3, i32 0, i32 1 %t136 = getelementptr inbounds %S.ast.Type, ptr %t135, i32 0, i32 0 %t137 = load { ptr, i64, i64 }, ptr %t136 store { ptr, i64, i64 } %t137, ptr %a138 store { ptr, i64, i64 } { ptr @.str.3732, i64 6, i64 0 }, ptr %a139 %t140 = call i32 @finch_str_eq(ptr %a138, ptr %a139) %t141 = icmp ne i32 %t140, 0 br label %logic.from5697 logic.from5697: br i1 %t141, label %logic.end5699, label %logic.rhs5698 logic.rhs5698: %t142 = getelementptr inbounds %S.gen.Val, ptr %a3, i32 0, i32 1 %t143 = getelementptr inbounds %S.ast.Type, ptr %t142, i32 0, i32 0 %t144 = load { ptr, i64, i64 }, ptr %t143 store { ptr, i64, i64 } %t144, ptr %a145 store { ptr, i64, i64 } { ptr @.str.3733, i64 5, i64 0 }, ptr %a146 %t147 = call i32 @finch_str_eq(ptr %a145, ptr %a146) %t148 = icmp ne i32 %t147, 0 br label %logic.rend5700 logic.rend5700: br label %logic.end5699 logic.end5699: %t149 = phi i1 [ true, %logic.from5697 ], [ %t148, %logic.rend5700 ] br label %logic.from5701 logic.from5701: br i1 %t149, label %logic.rhs5702, label %logic.end5703 logic.rhs5702: %t150 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t150, ptr %a151 store { ptr, i64, i64 } { ptr @.str.3734, i64 2, i64 0 }, ptr %a152 %t153 = call i32 @finch_str_eq(ptr %a151, ptr %a152) %t154 = icmp ne i32 %t153, 0 br label %logic.from5704 logic.from5704: br i1 %t154, label %logic.end5706, label %logic.rhs5705 logic.rhs5705: %t155 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t155, ptr %a156 store { ptr, i64, i64 } { ptr @.str.3735, i64 2, i64 0 }, ptr %a157 %t158 = call i32 @finch_str_eq(ptr %a156, ptr %a157) %t159 = icmp ne i32 %t158, 0 br label %logic.rend5707 logic.rend5707: br label %logic.end5706 logic.end5706: %t160 = phi i1 [ true, %logic.from5704 ], [ %t159, %logic.rend5707 ] br label %logic.rend5708 logic.rend5708: br label %logic.end5703 logic.end5703: %t161 = phi i1 [ false, %logic.from5701 ], [ %t160, %logic.rend5708 ] br i1 %t161, label %then5709, label %endif5711 then5709: %t162 = load { ptr, i64, i64 }, ptr %a22 store { ptr, i64, i64 } %t162, ptr %a164 store { ptr, i64, i64 } { ptr @.str.3736, i64 31, i64 0 }, ptr %a165 call void @finch_str_concat(ptr %a163, ptr %a164, ptr %a165) %t166 = load { ptr, i64, i64 }, ptr %a163 store { ptr, i64, i64 } %t166, ptr %a22 br label %endif5711 endif5711: %t167 = load ptr, ptr %a1 %t168 = load %S.ast.Node, ptr %a5 %t169 = load { ptr, i64, i64 }, ptr %a22 call void @finch.gen.fail(ptr %t167, %S.ast.Node %t168, { ptr, i64, i64 } %t169) ret void } define internal i1 @finch.gen.unify(ptr %p0, ptr %p1, ptr %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca ptr, align 16 %a3 = alloca ptr, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca %S.ast.Type, align 16 %a61 = alloca %S.ast.Type, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca %S.ast.Type, align 16 %a104 = alloca %S.ast.Type, align 16 %a138 = alloca %S.ast.Type, align 16 %a139 = alloca %S.ast.Type, align 16 %a172 = alloca %S.ast.Type, align 16 %a173 = alloca %S.ast.Type, align 16 %a240 = alloca { ptr, i64, i64 }, align 16 %a241 = alloca { ptr, i64, i64 }, align 16 %a265 = alloca { ptr, i64, i64 }, align 16 %a266 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store ptr %p1, ptr %a2 store ptr %p2, ptr %a3 %t4 = load ptr, ptr %a2 %t5 = icmp eq ptr %t4, null br i1 %t5, label %panic5712, label %ok5713 panic5712: call void @finch_panic(ptr @.str.3737, i64 3069, ptr @.str.3738) unreachable ok5713: %t6 = getelementptr inbounds %S.gen.Val, ptr %t4, i32 0, i32 1 %t7 = load %S.ast.Type, ptr %t6 %t8 = load ptr, ptr %a3 %t9 = icmp eq ptr %t8, null br i1 %t9, label %panic5714, label %ok5715 panic5714: call void @finch_panic(ptr @.str.3739, i64 3069, ptr @.str.3740) unreachable ok5715: %t10 = getelementptr inbounds %S.gen.Val, ptr %t8, i32 0, i32 1 %t11 = load %S.ast.Type, ptr %t10 %t12 = call i1 @finch.ast.same(%S.ast.Type %t7, %S.ast.Type %t11) br i1 %t12, label %then5716, label %endif5718 then5716: ret i1 true endif5718: %t13 = load ptr, ptr %a2 %t14 = icmp eq ptr %t13, null br i1 %t14, label %panic5719, label %ok5720 panic5719: call void @finch_panic(ptr @.str.3741, i64 3072, ptr @.str.3742) unreachable ok5720: %t15 = getelementptr inbounds %S.gen.Val, ptr %t13, i32 0, i32 1 %t16 = load %S.ast.Type, ptr %t15 %t17 = call i1 @finch.gen.isInt(%S.ast.Type %t16) br label %logic.from5721 logic.from5721: br i1 %t17, label %logic.rhs5722, label %logic.end5723 logic.rhs5722: %t18 = load ptr, ptr %a3 %t19 = icmp eq ptr %t18, null br i1 %t19, label %panic5724, label %ok5725 panic5724: call void @finch_panic(ptr @.str.3743, i64 3072, ptr @.str.3744) unreachable ok5725: %t20 = getelementptr inbounds %S.gen.Val, ptr %t18, i32 0, i32 1 %t21 = load %S.ast.Type, ptr %t20 %t22 = call i1 @finch.gen.isInt(%S.ast.Type %t21) br label %logic.rend5726 logic.rend5726: br label %logic.end5723 logic.end5723: %t23 = phi i1 [ false, %logic.from5721 ], [ %t22, %logic.rend5726 ] br i1 %t23, label %then5727, label %endif5729 then5727: %t24 = load ptr, ptr %a2 %t25 = icmp eq ptr %t24, null br i1 %t25, label %panic5730, label %ok5731 panic5730: call void @finch_panic(ptr @.str.3745, i64 3075, ptr @.str.3746) unreachable ok5731: %t26 = getelementptr inbounds %S.gen.Val, ptr %t24, i32 0, i32 3 %t27 = load i1, ptr %t26 br label %logic.from5732 logic.from5732: br i1 %t27, label %logic.rhs5733, label %logic.end5734 logic.rhs5733: %t28 = load ptr, ptr %a3 %t29 = icmp eq ptr %t28, null br i1 %t29, label %panic5735, label %ok5736 panic5735: call void @finch_panic(ptr @.str.3747, i64 3075, ptr @.str.3748) unreachable ok5736: %t30 = getelementptr inbounds %S.gen.Val, ptr %t28, i32 0, i32 3 %t31 = load i1, ptr %t30 %t32 = xor i1 %t31, true br label %logic.rend5737 logic.rend5737: br label %logic.end5734 logic.end5734: %t33 = phi i1 [ false, %logic.from5732 ], [ %t32, %logic.rend5737 ] br label %logic.from5738 logic.from5738: br i1 %t33, label %logic.rhs5739, label %logic.end5740 logic.rhs5739: %t34 = load ptr, ptr %a2 %t35 = icmp eq ptr %t34, null br i1 %t35, label %panic5741, label %ok5742 panic5741: call void @finch_panic(ptr @.str.3749, i64 3075, ptr @.str.3750) unreachable ok5742: %t36 = getelementptr inbounds %S.gen.Val, ptr %t34, i32 0, i32 0 %t37 = load { ptr, i64, i64 }, ptr %t36 %t38 = load ptr, ptr %a2 %t39 = icmp eq ptr %t38, null br i1 %t39, label %panic5743, label %ok5744 panic5743: call void @finch_panic(ptr @.str.3751, i64 3075, ptr @.str.3752) unreachable ok5744: %t40 = getelementptr inbounds %S.gen.Val, ptr %t38, i32 0, i32 1 %t41 = load %S.ast.Type, ptr %t40 %t42 = load ptr, ptr %a3 %t43 = icmp eq ptr %t42, null br i1 %t43, label %panic5745, label %ok5746 panic5745: call void @finch_panic(ptr @.str.3753, i64 3075, ptr @.str.3754) unreachable ok5746: %t44 = getelementptr inbounds %S.gen.Val, ptr %t42, i32 0, i32 1 %t45 = load %S.ast.Type, ptr %t44 %t46 = call i1 @finch.gen.fits({ ptr, i64, i64 } %t37, %S.ast.Type %t41, %S.ast.Type %t45) br label %logic.rend5747 logic.rend5747: br label %logic.end5740 logic.end5740: %t47 = phi i1 [ false, %logic.from5738 ], [ %t46, %logic.rend5747 ] br i1 %t47, label %then5748, label %endif5750 then5748: %t48 = load ptr, ptr %a2 %t49 = icmp eq ptr %t48, null br i1 %t49, label %panic5751, label %ok5752 panic5751: call void @finch_panic(ptr @.str.3755, i64 3076, ptr @.str.3756) unreachable ok5752: %t50 = getelementptr inbounds %S.gen.Val, ptr %t48, i32 0, i32 0 %t51 = load { ptr, i64, i64 }, ptr %t50 store { ptr, i64, i64 } %t51, ptr %a52 call void @finch_str_copy(ptr %a53, ptr %a52) %t54 = load { ptr, i64, i64 }, ptr %a53 %t55 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t54, 0 %t56 = load ptr, ptr %a3 %t57 = icmp eq ptr %t56, null br i1 %t57, label %panic5753, label %ok5754 panic5753: call void @finch_panic(ptr @.str.3757, i64 3076, ptr @.str.3758) unreachable ok5754: %t58 = getelementptr inbounds %S.gen.Val, ptr %t56, i32 0, i32 1 %t59 = load %S.ast.Type, ptr %t58 store %S.ast.Type %t59, ptr %a60 call void @finch.copy.S_ast_Type(ptr %a61, ptr %a60) %t62 = load %S.ast.Type, ptr %a61 %t63 = insertvalue %S.gen.Val %t55, %S.ast.Type %t62, 1 %t64 = insertvalue %S.gen.Val %t63, i1 true, 3 %t65 = load ptr, ptr %a2 %t66 = icmp eq ptr %t65, null br i1 %t66, label %panic5755, label %ok5756 panic5755: call void @finch_panic(ptr @.str.3759, i64 3076, ptr @.str.3760) unreachable ok5756: store %S.gen.Val %t64, ptr %t65 ret i1 true endif5750: %t67 = load ptr, ptr %a3 %t68 = icmp eq ptr %t67, null br i1 %t68, label %panic5757, label %ok5758 panic5757: call void @finch_panic(ptr @.str.3761, i64 3079, ptr @.str.3762) unreachable ok5758: %t69 = getelementptr inbounds %S.gen.Val, ptr %t67, i32 0, i32 3 %t70 = load i1, ptr %t69 br label %logic.from5759 logic.from5759: br i1 %t70, label %logic.rhs5760, label %logic.end5761 logic.rhs5760: %t71 = load ptr, ptr %a2 %t72 = icmp eq ptr %t71, null br i1 %t72, label %panic5762, label %ok5763 panic5762: call void @finch_panic(ptr @.str.3763, i64 3079, ptr @.str.3764) unreachable ok5763: %t73 = getelementptr inbounds %S.gen.Val, ptr %t71, i32 0, i32 3 %t74 = load i1, ptr %t73 %t75 = xor i1 %t74, true br label %logic.rend5764 logic.rend5764: br label %logic.end5761 logic.end5761: %t76 = phi i1 [ false, %logic.from5759 ], [ %t75, %logic.rend5764 ] br label %logic.from5765 logic.from5765: br i1 %t76, label %logic.rhs5766, label %logic.end5767 logic.rhs5766: %t77 = load ptr, ptr %a3 %t78 = icmp eq ptr %t77, null br i1 %t78, label %panic5768, label %ok5769 panic5768: call void @finch_panic(ptr @.str.3765, i64 3079, ptr @.str.3766) unreachable ok5769: %t79 = getelementptr inbounds %S.gen.Val, ptr %t77, i32 0, i32 0 %t80 = load { ptr, i64, i64 }, ptr %t79 %t81 = load ptr, ptr %a3 %t82 = icmp eq ptr %t81, null br i1 %t82, label %panic5770, label %ok5771 panic5770: call void @finch_panic(ptr @.str.3767, i64 3079, ptr @.str.3768) unreachable ok5771: %t83 = getelementptr inbounds %S.gen.Val, ptr %t81, i32 0, i32 1 %t84 = load %S.ast.Type, ptr %t83 %t85 = load ptr, ptr %a2 %t86 = icmp eq ptr %t85, null br i1 %t86, label %panic5772, label %ok5773 panic5772: call void @finch_panic(ptr @.str.3769, i64 3079, ptr @.str.3770) unreachable ok5773: %t87 = getelementptr inbounds %S.gen.Val, ptr %t85, i32 0, i32 1 %t88 = load %S.ast.Type, ptr %t87 %t89 = call i1 @finch.gen.fits({ ptr, i64, i64 } %t80, %S.ast.Type %t84, %S.ast.Type %t88) br label %logic.rend5774 logic.rend5774: br label %logic.end5767 logic.end5767: %t90 = phi i1 [ false, %logic.from5765 ], [ %t89, %logic.rend5774 ] br i1 %t90, label %then5775, label %endif5777 then5775: %t91 = load ptr, ptr %a3 %t92 = icmp eq ptr %t91, null br i1 %t92, label %panic5778, label %ok5779 panic5778: call void @finch_panic(ptr @.str.3771, i64 3080, ptr @.str.3772) unreachable ok5779: %t93 = getelementptr inbounds %S.gen.Val, ptr %t91, i32 0, i32 0 %t94 = load { ptr, i64, i64 }, ptr %t93 store { ptr, i64, i64 } %t94, ptr %a95 call void @finch_str_copy(ptr %a96, ptr %a95) %t97 = load { ptr, i64, i64 }, ptr %a96 %t98 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t97, 0 %t99 = load ptr, ptr %a2 %t100 = icmp eq ptr %t99, null br i1 %t100, label %panic5780, label %ok5781 panic5780: call void @finch_panic(ptr @.str.3773, i64 3080, ptr @.str.3774) unreachable ok5781: %t101 = getelementptr inbounds %S.gen.Val, ptr %t99, i32 0, i32 1 %t102 = load %S.ast.Type, ptr %t101 store %S.ast.Type %t102, ptr %a103 call void @finch.copy.S_ast_Type(ptr %a104, ptr %a103) %t105 = load %S.ast.Type, ptr %a104 %t106 = insertvalue %S.gen.Val %t98, %S.ast.Type %t105, 1 %t107 = insertvalue %S.gen.Val %t106, i1 true, 3 %t108 = load ptr, ptr %a3 %t109 = icmp eq ptr %t108, null br i1 %t109, label %panic5782, label %ok5783 panic5782: call void @finch_panic(ptr @.str.3775, i64 3080, ptr @.str.3776) unreachable ok5783: store %S.gen.Val %t107, ptr %t108 ret i1 true endif5777: %t110 = load ptr, ptr %a2 %t111 = icmp eq ptr %t110, null br i1 %t111, label %panic5784, label %ok5785 panic5784: call void @finch_panic(ptr @.str.3777, i64 3083, ptr @.str.3778) unreachable ok5785: %t112 = getelementptr inbounds %S.gen.Val, ptr %t110, i32 0, i32 1 %t113 = load %S.ast.Type, ptr %t112 %t114 = load ptr, ptr %a3 %t115 = icmp eq ptr %t114, null br i1 %t115, label %panic5786, label %ok5787 panic5786: call void @finch_panic(ptr @.str.3779, i64 3083, ptr @.str.3780) unreachable ok5787: %t116 = getelementptr inbounds %S.gen.Val, ptr %t114, i32 0, i32 1 %t117 = load %S.ast.Type, ptr %t116 %t118 = call i1 @finch.gen.widens(%S.ast.Type %t113, %S.ast.Type %t117) br i1 %t118, label %then5788, label %endif5790 then5788: %t119 = load ptr, ptr %a1 %t120 = load ptr, ptr %a2 %t121 = icmp eq ptr %t120, null br i1 %t121, label %panic5791, label %ok5792 panic5791: call void @finch_panic(ptr @.str.3781, i64 3084, ptr @.str.3782) unreachable ok5792: %t122 = getelementptr inbounds %S.gen.Val, ptr %t120, i32 0, i32 0 %t123 = load { ptr, i64, i64 }, ptr %t122 %t124 = load ptr, ptr %a2 %t125 = icmp eq ptr %t124, null br i1 %t125, label %panic5793, label %ok5794 panic5793: call void @finch_panic(ptr @.str.3783, i64 3084, ptr @.str.3784) unreachable ok5794: %t126 = getelementptr inbounds %S.gen.Val, ptr %t124, i32 0, i32 1 %t127 = load %S.ast.Type, ptr %t126 %t128 = load ptr, ptr %a3 %t129 = icmp eq ptr %t128, null br i1 %t129, label %panic5795, label %ok5796 panic5795: call void @finch_panic(ptr @.str.3785, i64 3084, ptr @.str.3786) unreachable ok5796: %t130 = getelementptr inbounds %S.gen.Val, ptr %t128, i32 0, i32 1 %t131 = load %S.ast.Type, ptr %t130 %t132 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t119, { ptr, i64, i64 } %t123, %S.ast.Type %t127, %S.ast.Type %t131) %t133 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t132, 0 %t134 = load ptr, ptr %a3 %t135 = icmp eq ptr %t134, null br i1 %t135, label %panic5797, label %ok5798 panic5797: call void @finch_panic(ptr @.str.3787, i64 3084, ptr @.str.3788) unreachable ok5798: %t136 = getelementptr inbounds %S.gen.Val, ptr %t134, i32 0, i32 1 %t137 = load %S.ast.Type, ptr %t136 store %S.ast.Type %t137, ptr %a138 call void @finch.copy.S_ast_Type(ptr %a139, ptr %a138) %t140 = load %S.ast.Type, ptr %a139 %t141 = insertvalue %S.gen.Val %t133, %S.ast.Type %t140, 1 %t142 = load ptr, ptr %a2 %t143 = icmp eq ptr %t142, null br i1 %t143, label %panic5799, label %ok5800 panic5799: call void @finch_panic(ptr @.str.3789, i64 3084, ptr @.str.3790) unreachable ok5800: store %S.gen.Val %t141, ptr %t142 ret i1 true endif5790: %t144 = load ptr, ptr %a3 %t145 = icmp eq ptr %t144, null br i1 %t145, label %panic5801, label %ok5802 panic5801: call void @finch_panic(ptr @.str.3791, i64 3087, ptr @.str.3792) unreachable ok5802: %t146 = getelementptr inbounds %S.gen.Val, ptr %t144, i32 0, i32 1 %t147 = load %S.ast.Type, ptr %t146 %t148 = load ptr, ptr %a2 %t149 = icmp eq ptr %t148, null br i1 %t149, label %panic5803, label %ok5804 panic5803: call void @finch_panic(ptr @.str.3793, i64 3087, ptr @.str.3794) unreachable ok5804: %t150 = getelementptr inbounds %S.gen.Val, ptr %t148, i32 0, i32 1 %t151 = load %S.ast.Type, ptr %t150 %t152 = call i1 @finch.gen.widens(%S.ast.Type %t147, %S.ast.Type %t151) br i1 %t152, label %then5805, label %endif5807 then5805: %t153 = load ptr, ptr %a1 %t154 = load ptr, ptr %a3 %t155 = icmp eq ptr %t154, null br i1 %t155, label %panic5808, label %ok5809 panic5808: call void @finch_panic(ptr @.str.3795, i64 3088, ptr @.str.3796) unreachable ok5809: %t156 = getelementptr inbounds %S.gen.Val, ptr %t154, i32 0, i32 0 %t157 = load { ptr, i64, i64 }, ptr %t156 %t158 = load ptr, ptr %a3 %t159 = icmp eq ptr %t158, null br i1 %t159, label %panic5810, label %ok5811 panic5810: call void @finch_panic(ptr @.str.3797, i64 3088, ptr @.str.3798) unreachable ok5811: %t160 = getelementptr inbounds %S.gen.Val, ptr %t158, i32 0, i32 1 %t161 = load %S.ast.Type, ptr %t160 %t162 = load ptr, ptr %a2 %t163 = icmp eq ptr %t162, null br i1 %t163, label %panic5812, label %ok5813 panic5812: call void @finch_panic(ptr @.str.3799, i64 3088, ptr @.str.3800) unreachable ok5813: %t164 = getelementptr inbounds %S.gen.Val, ptr %t162, i32 0, i32 1 %t165 = load %S.ast.Type, ptr %t164 %t166 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t153, { ptr, i64, i64 } %t157, %S.ast.Type %t161, %S.ast.Type %t165) %t167 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t166, 0 %t168 = load ptr, ptr %a2 %t169 = icmp eq ptr %t168, null br i1 %t169, label %panic5814, label %ok5815 panic5814: call void @finch_panic(ptr @.str.3801, i64 3088, ptr @.str.3802) unreachable ok5815: %t170 = getelementptr inbounds %S.gen.Val, ptr %t168, i32 0, i32 1 %t171 = load %S.ast.Type, ptr %t170 store %S.ast.Type %t171, ptr %a172 call void @finch.copy.S_ast_Type(ptr %a173, ptr %a172) %t174 = load %S.ast.Type, ptr %a173 %t175 = insertvalue %S.gen.Val %t167, %S.ast.Type %t174, 1 %t176 = load ptr, ptr %a3 %t177 = icmp eq ptr %t176, null br i1 %t177, label %panic5816, label %ok5817 panic5816: call void @finch_panic(ptr @.str.3803, i64 3088, ptr @.str.3804) unreachable ok5817: store %S.gen.Val %t175, ptr %t176 ret i1 true endif5807: ret i1 false endif5729: %t178 = load ptr, ptr %a2 %t179 = icmp eq ptr %t178, null br i1 %t179, label %panic5818, label %ok5819 panic5818: call void @finch_panic(ptr @.str.3805, i64 3093, ptr @.str.3806) unreachable ok5819: %t180 = getelementptr inbounds %S.gen.Val, ptr %t178, i32 0, i32 1 %t181 = load %S.ast.Type, ptr %t180 %t182 = call i1 @finch.gen.isInt(%S.ast.Type %t181) br label %logic.from5820 logic.from5820: br i1 %t182, label %logic.rhs5821, label %logic.end5822 logic.rhs5821: %t183 = load ptr, ptr %a3 %t184 = icmp eq ptr %t183, null br i1 %t184, label %panic5823, label %ok5824 panic5823: call void @finch_panic(ptr @.str.3807, i64 3093, ptr @.str.3808) unreachable ok5824: %t185 = getelementptr inbounds %S.gen.Val, ptr %t183, i32 0, i32 1 %t186 = load %S.ast.Type, ptr %t185 %t187 = call i1 @finch.gen.isFloat(%S.ast.Type %t186) br label %logic.rend5825 logic.rend5825: br label %logic.end5822 logic.end5822: %t188 = phi i1 [ false, %logic.from5820 ], [ %t187, %logic.rend5825 ] br i1 %t188, label %then5826, label %endif5828 then5826: %t189 = load ptr, ptr %a1 %t190 = load ptr, ptr %a2 %t191 = icmp eq ptr %t190, null br i1 %t191, label %panic5829, label %ok5830 panic5829: call void @finch_panic(ptr @.str.3809, i64 3094, ptr @.str.3810) unreachable ok5830: %t192 = load %S.gen.Val, ptr %t190 %t193 = load ptr, ptr %a3 %t194 = icmp eq ptr %t193, null br i1 %t194, label %panic5831, label %ok5832 panic5831: call void @finch_panic(ptr @.str.3811, i64 3094, ptr @.str.3812) unreachable ok5832: %t195 = getelementptr inbounds %S.gen.Val, ptr %t193, i32 0, i32 1 %t196 = load %S.ast.Type, ptr %t195 %t197 = call %S.ast.Node @finch.gen.Node0() %t198 = call %S.gen.Val @finch.gen.coerce(ptr %t189, %S.gen.Val %t192, %S.ast.Type %t196, %S.ast.Node %t197, { ptr, i64, i64 } { ptr @.str.3813, i64 0, i64 0 }) %t199 = load ptr, ptr %a2 %t200 = icmp eq ptr %t199, null br i1 %t200, label %panic5833, label %ok5834 panic5833: call void @finch_panic(ptr @.str.3814, i64 3094, ptr @.str.3815) unreachable ok5834: store %S.gen.Val %t198, ptr %t199 ret i1 true endif5828: %t201 = load ptr, ptr %a2 %t202 = icmp eq ptr %t201, null br i1 %t202, label %panic5835, label %ok5836 panic5835: call void @finch_panic(ptr @.str.3816, i64 3097, ptr @.str.3817) unreachable ok5836: %t203 = getelementptr inbounds %S.gen.Val, ptr %t201, i32 0, i32 1 %t204 = load %S.ast.Type, ptr %t203 %t205 = call i1 @finch.gen.isFloat(%S.ast.Type %t204) br label %logic.from5837 logic.from5837: br i1 %t205, label %logic.rhs5838, label %logic.end5839 logic.rhs5838: %t206 = load ptr, ptr %a3 %t207 = icmp eq ptr %t206, null br i1 %t207, label %panic5840, label %ok5841 panic5840: call void @finch_panic(ptr @.str.3818, i64 3097, ptr @.str.3819) unreachable ok5841: %t208 = getelementptr inbounds %S.gen.Val, ptr %t206, i32 0, i32 1 %t209 = load %S.ast.Type, ptr %t208 %t210 = call i1 @finch.gen.isInt(%S.ast.Type %t209) br label %logic.rend5842 logic.rend5842: br label %logic.end5839 logic.end5839: %t211 = phi i1 [ false, %logic.from5837 ], [ %t210, %logic.rend5842 ] br i1 %t211, label %then5843, label %endif5845 then5843: %t212 = load ptr, ptr %a1 %t213 = load ptr, ptr %a3 %t214 = icmp eq ptr %t213, null br i1 %t214, label %panic5846, label %ok5847 panic5846: call void @finch_panic(ptr @.str.3820, i64 3098, ptr @.str.3821) unreachable ok5847: %t215 = load %S.gen.Val, ptr %t213 %t216 = load ptr, ptr %a2 %t217 = icmp eq ptr %t216, null br i1 %t217, label %panic5848, label %ok5849 panic5848: call void @finch_panic(ptr @.str.3822, i64 3098, ptr @.str.3823) unreachable ok5849: %t218 = getelementptr inbounds %S.gen.Val, ptr %t216, i32 0, i32 1 %t219 = load %S.ast.Type, ptr %t218 %t220 = call %S.ast.Node @finch.gen.Node0() %t221 = call %S.gen.Val @finch.gen.coerce(ptr %t212, %S.gen.Val %t215, %S.ast.Type %t219, %S.ast.Node %t220, { ptr, i64, i64 } { ptr @.str.3824, i64 0, i64 0 }) %t222 = load ptr, ptr %a3 %t223 = icmp eq ptr %t222, null br i1 %t223, label %panic5850, label %ok5851 panic5850: call void @finch_panic(ptr @.str.3825, i64 3098, ptr @.str.3826) unreachable ok5851: store %S.gen.Val %t221, ptr %t222 ret i1 true endif5845: %t224 = load ptr, ptr %a2 %t225 = icmp eq ptr %t224, null br i1 %t225, label %panic5852, label %ok5853 panic5852: call void @finch_panic(ptr @.str.3827, i64 3101, ptr @.str.3828) unreachable ok5853: %t226 = getelementptr inbounds %S.gen.Val, ptr %t224, i32 0, i32 1 %t227 = load %S.ast.Type, ptr %t226 %t228 = call i1 @finch.gen.isFloat(%S.ast.Type %t227) br label %logic.from5854 logic.from5854: br i1 %t228, label %logic.rhs5855, label %logic.end5856 logic.rhs5855: %t229 = load ptr, ptr %a3 %t230 = icmp eq ptr %t229, null br i1 %t230, label %panic5857, label %ok5858 panic5857: call void @finch_panic(ptr @.str.3829, i64 3101, ptr @.str.3830) unreachable ok5858: %t231 = getelementptr inbounds %S.gen.Val, ptr %t229, i32 0, i32 1 %t232 = load %S.ast.Type, ptr %t231 %t233 = call i1 @finch.gen.isFloat(%S.ast.Type %t232) br label %logic.rend5859 logic.rend5859: br label %logic.end5856 logic.end5856: %t234 = phi i1 [ false, %logic.from5854 ], [ %t233, %logic.rend5859 ] br i1 %t234, label %then5860, label %endif5862 then5860: %t235 = load ptr, ptr %a2 %t236 = icmp eq ptr %t235, null br i1 %t236, label %panic5863, label %ok5864 panic5863: call void @finch_panic(ptr @.str.3831, i64 3102, ptr @.str.3832) unreachable ok5864: %t237 = getelementptr inbounds %S.gen.Val, ptr %t235, i32 0, i32 1 %t238 = getelementptr inbounds %S.ast.Type, ptr %t237, i32 0, i32 0 %t239 = load { ptr, i64, i64 }, ptr %t238 store { ptr, i64, i64 } %t239, ptr %a240 store { ptr, i64, i64 } { ptr @.str.3833, i64 3, i64 0 }, ptr %a241 %t242 = call i32 @finch_str_eq(ptr %a240, ptr %a241) %t243 = icmp ne i32 %t242, 0 br i1 %t243, label %then5865, label %endif5867 then5865: %t244 = load ptr, ptr %a1 %t245 = load ptr, ptr %a2 %t246 = icmp eq ptr %t245, null br i1 %t246, label %panic5868, label %ok5869 panic5868: call void @finch_panic(ptr @.str.3834, i64 3103, ptr @.str.3835) unreachable ok5869: %t247 = getelementptr inbounds %S.gen.Val, ptr %t245, i32 0, i32 0 %t248 = load { ptr, i64, i64 }, ptr %t247 %t249 = load ptr, ptr %a2 %t250 = icmp eq ptr %t249, null br i1 %t250, label %panic5870, label %ok5871 panic5870: call void @finch_panic(ptr @.str.3836, i64 3103, ptr @.str.3837) unreachable ok5871: %t251 = getelementptr inbounds %S.gen.Val, ptr %t249, i32 0, i32 1 %t252 = load %S.ast.Type, ptr %t251 %t253 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3838, i64 5, i64 0 }) %t254 = call { ptr, i64, i64 } @finch.gen.floatCast(ptr %t244, { ptr, i64, i64 } %t248, %S.ast.Type %t252, %S.ast.Type %t253) %t255 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t254, 0 %t256 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3839, i64 5, i64 0 }) %t257 = insertvalue %S.gen.Val %t255, %S.ast.Type %t256, 1 %t258 = load ptr, ptr %a2 %t259 = icmp eq ptr %t258, null br i1 %t259, label %panic5872, label %ok5873 panic5872: call void @finch_panic(ptr @.str.3840, i64 3103, ptr @.str.3841) unreachable ok5873: store %S.gen.Val %t257, ptr %t258 br label %endif5867 endif5867: %t260 = load ptr, ptr %a3 %t261 = icmp eq ptr %t260, null br i1 %t261, label %panic5874, label %ok5875 panic5874: call void @finch_panic(ptr @.str.3842, i64 3105, ptr @.str.3843) unreachable ok5875: %t262 = getelementptr inbounds %S.gen.Val, ptr %t260, i32 0, i32 1 %t263 = getelementptr inbounds %S.ast.Type, ptr %t262, i32 0, i32 0 %t264 = load { ptr, i64, i64 }, ptr %t263 store { ptr, i64, i64 } %t264, ptr %a265 store { ptr, i64, i64 } { ptr @.str.3844, i64 3, i64 0 }, ptr %a266 %t267 = call i32 @finch_str_eq(ptr %a265, ptr %a266) %t268 = icmp ne i32 %t267, 0 br i1 %t268, label %then5876, label %endif5878 then5876: %t269 = load ptr, ptr %a1 %t270 = load ptr, ptr %a3 %t271 = icmp eq ptr %t270, null br i1 %t271, label %panic5879, label %ok5880 panic5879: call void @finch_panic(ptr @.str.3845, i64 3106, ptr @.str.3846) unreachable ok5880: %t272 = getelementptr inbounds %S.gen.Val, ptr %t270, i32 0, i32 0 %t273 = load { ptr, i64, i64 }, ptr %t272 %t274 = load ptr, ptr %a3 %t275 = icmp eq ptr %t274, null br i1 %t275, label %panic5881, label %ok5882 panic5881: call void @finch_panic(ptr @.str.3847, i64 3106, ptr @.str.3848) unreachable ok5882: %t276 = getelementptr inbounds %S.gen.Val, ptr %t274, i32 0, i32 1 %t277 = load %S.ast.Type, ptr %t276 %t278 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3849, i64 5, i64 0 }) %t279 = call { ptr, i64, i64 } @finch.gen.floatCast(ptr %t269, { ptr, i64, i64 } %t273, %S.ast.Type %t277, %S.ast.Type %t278) %t280 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t279, 0 %t281 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3850, i64 5, i64 0 }) %t282 = insertvalue %S.gen.Val %t280, %S.ast.Type %t281, 1 %t283 = load ptr, ptr %a3 %t284 = icmp eq ptr %t283, null br i1 %t284, label %panic5883, label %ok5884 panic5883: call void @finch_panic(ptr @.str.3851, i64 3106, ptr @.str.3852) unreachable ok5884: store %S.gen.Val %t282, ptr %t283 br label %endif5878 endif5878: ret i1 true endif5862: ret i1 false } define internal %S.ast.Node @finch.gen.Node0() { entry: ret %S.ast.Node zeroinitializer } define internal %S.gen.Val @finch.gen.arith(ptr %p0, { ptr, i64, i64 } %p1, %S.gen.Val %p2, %S.gen.Val %p3, %S.ast.Node %p4) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca %S.gen.Val, align 16 %a4 = alloca %S.gen.Val, align 16 %a6 = alloca %S.gen.Val, align 16 %a7 = alloca %S.gen.Val, align 16 %a8 = alloca %S.gen.Val, align 16 %a10 = alloca %S.gen.Val, align 16 %a11 = alloca %S.ast.Node, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 %a117 = alloca { ptr, i64, i64 }, align 16 %a138 = alloca i64, align 16 %a141 = alloca i64, align 16 %a146 = alloca { ptr, i64, i64 }, align 16 %a147 = alloca { ptr, i64, i64 }, align 16 %a152 = alloca i64, align 16 %a164 = alloca { ptr, i64, i64 }, align 16 %a166 = alloca { ptr, i64, i64 }, align 16 %a167 = alloca { ptr, i64, i64 }, align 16 %a171 = alloca { ptr, i64, i64 }, align 16 %a172 = alloca { ptr, i64, i64 }, align 16 %a180 = alloca { ptr, i64, i64 }, align 16 %a181 = alloca { ptr, i64, i64 }, align 16 %a193 = alloca { ptr, i64, i64 }, align 16 %a194 = alloca { ptr, i64, i64 }, align 16 %a195 = alloca { ptr, i64, i64 }, align 16 %a197 = alloca { ptr, i64, i64 }, align 16 %a198 = alloca { ptr, i64, i64 }, align 16 %a199 = alloca { ptr, i64, i64 }, align 16 %a203 = alloca { ptr, i64, i64 }, align 16 %a204 = alloca { ptr, i64, i64 }, align 16 %a205 = alloca { ptr, i64, i64 }, align 16 %a207 = alloca { ptr, i64, i64 }, align 16 %a208 = alloca { ptr, i64, i64 }, align 16 %a209 = alloca { ptr, i64, i64 }, align 16 %a221 = alloca { ptr, i64, i64 }, align 16 %a222 = alloca { ptr, i64, i64 }, align 16 %a223 = alloca { ptr, i64, i64 }, align 16 %a226 = alloca { ptr, i64, i64 }, align 16 %a227 = alloca { ptr, i64, i64 }, align 16 %a228 = alloca { ptr, i64, i64 }, align 16 %a230 = alloca { ptr, i64, i64 }, align 16 %a231 = alloca { ptr, i64, i64 }, align 16 %a232 = alloca { ptr, i64, i64 }, align 16 %a236 = alloca { ptr, i64, i64 }, align 16 %a237 = alloca { ptr, i64, i64 }, align 16 %a238 = alloca { ptr, i64, i64 }, align 16 %a240 = alloca { ptr, i64, i64 }, align 16 %a241 = alloca { ptr, i64, i64 }, align 16 %a242 = alloca { ptr, i64, i64 }, align 16 %a246 = alloca { ptr, i64, i64 }, align 16 %a247 = alloca { ptr, i64, i64 }, align 16 %a248 = alloca { ptr, i64, i64 }, align 16 %a254 = alloca %S.ast.Type, align 16 %a255 = alloca %S.ast.Type, align 16 %a271 = alloca { ptr, i64, i64 }, align 16 %a282 = alloca { ptr, i64, i64 }, align 16 %a285 = alloca i64, align 16 %a288 = alloca i64, align 16 %a293 = alloca { ptr, i64, i64 }, align 16 %a294 = alloca { ptr, i64, i64 }, align 16 %a299 = alloca i64, align 16 %a315 = alloca { ptr, i64, i64 }, align 16 %a316 = alloca { ptr, i64, i64 }, align 16 %a317 = alloca { ptr, i64, i64 }, align 16 %a323 = alloca { ptr, i64, i64 }, align 16 %a324 = alloca { ptr, i64, i64 }, align 16 %a325 = alloca { ptr, i64, i64 }, align 16 %a327 = alloca { ptr, i64, i64 }, align 16 %a328 = alloca { ptr, i64, i64 }, align 16 %a329 = alloca { ptr, i64, i64 }, align 16 %a333 = alloca { ptr, i64, i64 }, align 16 %a334 = alloca { ptr, i64, i64 }, align 16 %a335 = alloca { ptr, i64, i64 }, align 16 %a337 = alloca { ptr, i64, i64 }, align 16 %a338 = alloca { ptr, i64, i64 }, align 16 %a339 = alloca { ptr, i64, i64 }, align 16 %a343 = alloca { ptr, i64, i64 }, align 16 %a344 = alloca { ptr, i64, i64 }, align 16 %a345 = alloca { ptr, i64, i64 }, align 16 %a351 = alloca %S.ast.Type, align 16 %a352 = alloca %S.ast.Type, align 16 %a361 = alloca %S.gen.Val, align 16 %a362 = alloca %S.gen.Val, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store %S.gen.Val %p2, ptr %a3 call void @finch.copy.S_gen_Val(ptr %a4, ptr %a3) %t5 = load %S.gen.Val, ptr %a4 store %S.gen.Val %t5, ptr %a6 store %S.gen.Val %p3, ptr %a7 call void @finch.copy.S_gen_Val(ptr %a8, ptr %a7) %t9 = load %S.gen.Val, ptr %a8 store %S.gen.Val %t9, ptr %a10 store %S.ast.Node %p4, ptr %a11 %t12 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t12, ptr %a13 store { ptr, i64, i64 } { ptr @.str.3853, i64 1, i64 0 }, ptr %a14 %t15 = call i32 @finch_str_eq(ptr %a13, ptr %a14) %t16 = icmp ne i32 %t15, 0 br label %logic.from5885 logic.from5885: br i1 %t16, label %logic.rhs5886, label %logic.end5887 logic.rhs5886: %t17 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 %t18 = getelementptr inbounds %S.ast.Type, ptr %t17, i32 0, i32 0 %t19 = load { ptr, i64, i64 }, ptr %t18 store { ptr, i64, i64 } %t19, ptr %a20 store { ptr, i64, i64 } { ptr @.str.3854, i64 3, i64 0 }, ptr %a21 %t22 = call i32 @finch_str_eq(ptr %a20, ptr %a21) %t23 = icmp ne i32 %t22, 0 br label %logic.rend5888 logic.rend5888: br label %logic.end5887 logic.end5887: %t24 = phi i1 [ false, %logic.from5885 ], [ %t23, %logic.rend5888 ] br label %logic.from5889 logic.from5889: br i1 %t24, label %logic.rhs5890, label %logic.end5891 logic.rhs5890: %t25 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 1 %t26 = getelementptr inbounds %S.ast.Type, ptr %t25, i32 0, i32 0 %t27 = load { ptr, i64, i64 }, ptr %t26 store { ptr, i64, i64 } %t27, ptr %a28 store { ptr, i64, i64 } { ptr @.str.3855, i64 3, i64 0 }, ptr %a29 %t30 = call i32 @finch_str_eq(ptr %a28, ptr %a29) %t31 = icmp ne i32 %t30, 0 br label %logic.rend5892 logic.rend5892: br label %logic.end5891 logic.end5891: %t32 = phi i1 [ false, %logic.from5889 ], [ %t31, %logic.rend5892 ] br i1 %t32, label %then5893, label %endif5895 then5893: %t33 = load ptr, ptr %a1 %t34 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t33, { ptr, i64, i64 } { ptr @.str.3856, i64 17, i64 0 }) store { ptr, i64, i64 } %t34, ptr %a35 %t36 = load ptr, ptr %a1 %t37 = load { ptr, i64, i64 }, ptr %a35 store { ptr, i64, i64 } { ptr @.str.3857, i64 32, i64 0 }, ptr %a39 store { ptr, i64, i64 } %t37, ptr %a40 call void @finch_str_concat(ptr %a38, ptr %a39, ptr %a40) %t41 = load { ptr, i64, i64 }, ptr %a38 store { ptr, i64, i64 } %t41, ptr %a43 store { ptr, i64, i64 } { ptr @.str.3858, i64 6, i64 0 }, ptr %a44 call void @finch_str_concat(ptr %a42, ptr %a43, ptr %a44) %t45 = load { ptr, i64, i64 }, ptr %a42 %t46 = load ptr, ptr %a1 %t47 = load %S.gen.Val, ptr %a6 %t48 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t46, %S.gen.Val %t47) store { ptr, i64, i64 } %t45, ptr %a50 store { ptr, i64, i64 } %t48, ptr %a51 call void @finch_str_concat(ptr %a49, ptr %a50, ptr %a51) %t52 = load { ptr, i64, i64 }, ptr %a49 store { ptr, i64, i64 } %t52, ptr %a54 store { ptr, i64, i64 } { ptr @.str.3859, i64 6, i64 0 }, ptr %a55 call void @finch_str_concat(ptr %a53, ptr %a54, ptr %a55) %t56 = load { ptr, i64, i64 }, ptr %a53 %t57 = load ptr, ptr %a1 %t58 = load %S.gen.Val, ptr %a10 %t59 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t57, %S.gen.Val %t58) store { ptr, i64, i64 } %t56, ptr %a61 store { ptr, i64, i64 } %t59, ptr %a62 call void @finch_str_concat(ptr %a60, ptr %a61, ptr %a62) %t63 = load { ptr, i64, i64 }, ptr %a60 store { ptr, i64, i64 } %t63, ptr %a65 store { ptr, i64, i64 } { ptr @.str.3860, i64 1, i64 0 }, ptr %a66 call void @finch_str_concat(ptr %a64, ptr %a65, ptr %a66) %t67 = load { ptr, i64, i64 }, ptr %a64 call void @finch.gen.emit(ptr %t36, { ptr, i64, i64 } %t67) %t68 = load ptr, ptr %a1 %t69 = load { ptr, i64, i64 }, ptr %a35 %t70 = call { ptr, i64, i64 } @finch.gen.load(ptr %t68, { ptr, i64, i64 } { ptr @.str.3861, i64 17, i64 0 }, { ptr, i64, i64 } %t69) %t71 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t70, 0 %t72 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3862, i64 3, i64 0 }) %t73 = insertvalue %S.gen.Val %t71, %S.ast.Type %t72, 1 %t74 = insertvalue %S.gen.Val %t73, i1 true, 2 ret %S.gen.Val %t74 endif5895: %t75 = load ptr, ptr %a1 %t76 = call i1 @finch.gen.unify(ptr %t75, ptr %a6, ptr %a10) %t77 = xor i1 %t76, true br i1 %t77, label %then5896, label %endif5898 then5896: %t78 = load ptr, ptr %a1 %t79 = load { ptr, i64, i64 }, ptr %a2 %t80 = load %S.gen.Val, ptr %a6 %t81 = load %S.gen.Val, ptr %a10 %t82 = load %S.ast.Node, ptr %a11 call void @finch.gen.badOperands(ptr %t78, { ptr, i64, i64 } %t79, %S.gen.Val %t80, %S.gen.Val %t81, %S.ast.Node %t82) br label %endif5898 endif5898: %t83 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 %t84 = load %S.ast.Type, ptr %t83 %t85 = call i1 @finch.gen.isInt(%S.ast.Type %t84) br i1 %t85, label %then5899, label %endif5901 then5899: %t86 = mul i64 10, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t87 = call ptr @finch_alloc(i64 %t86) %t88 = getelementptr inbounds { ptr, i64, i64 }, ptr %t87, i64 0 store { ptr, i64, i64 } { ptr @.str.3863, i64 1, i64 0 }, ptr %t88 %t89 = getelementptr inbounds { ptr, i64, i64 }, ptr %t87, i64 1 store { ptr, i64, i64 } { ptr @.str.3864, i64 1, i64 0 }, ptr %t89 %t90 = getelementptr inbounds { ptr, i64, i64 }, ptr %t87, i64 2 store { ptr, i64, i64 } { ptr @.str.3865, i64 1, i64 0 }, ptr %t90 %t91 = getelementptr inbounds { ptr, i64, i64 }, ptr %t87, i64 3 store { ptr, i64, i64 } { ptr @.str.3866, i64 1, i64 0 }, ptr %t91 %t92 = getelementptr inbounds { ptr, i64, i64 }, ptr %t87, i64 4 store { ptr, i64, i64 } { ptr @.str.3867, i64 1, i64 0 }, ptr %t92 %t93 = getelementptr inbounds { ptr, i64, i64 }, ptr %t87, i64 5 store { ptr, i64, i64 } { ptr @.str.3868, i64 1, i64 0 }, ptr %t93 %t94 = getelementptr inbounds { ptr, i64, i64 }, ptr %t87, i64 6 store { ptr, i64, i64 } { ptr @.str.3869, i64 1, i64 0 }, ptr %t94 %t95 = getelementptr inbounds { ptr, i64, i64 }, ptr %t87, i64 7 store { ptr, i64, i64 } { ptr @.str.3870, i64 1, i64 0 }, ptr %t95 %t96 = getelementptr inbounds { ptr, i64, i64 }, ptr %t87, i64 8 store { ptr, i64, i64 } { ptr @.str.3871, i64 2, i64 0 }, ptr %t96 %t97 = getelementptr inbounds { ptr, i64, i64 }, ptr %t87, i64 9 store { ptr, i64, i64 } { ptr @.str.3872, i64 2, i64 0 }, ptr %t97 %t98 = insertvalue { ptr, i64, i64 } undef, ptr %t87, 0 %t99 = insertvalue { ptr, i64, i64 } %t98, i64 10, 1 %t100 = insertvalue { ptr, i64, i64 } %t99, i64 10, 2 store { ptr, i64, i64 } %t100, ptr %a101 %t102 = mul i64 10, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t103 = call ptr @finch_alloc(i64 %t102) %t104 = getelementptr inbounds { ptr, i64, i64 }, ptr %t103, i64 0 store { ptr, i64, i64 } { ptr @.str.3873, i64 3, i64 0 }, ptr %t104 %t105 = getelementptr inbounds { ptr, i64, i64 }, ptr %t103, i64 1 store { ptr, i64, i64 } { ptr @.str.3874, i64 3, i64 0 }, ptr %t105 %t106 = getelementptr inbounds { ptr, i64, i64 }, ptr %t103, i64 2 store { ptr, i64, i64 } { ptr @.str.3875, i64 3, i64 0 }, ptr %t106 %t107 = getelementptr inbounds { ptr, i64, i64 }, ptr %t103, i64 3 store { ptr, i64, i64 } { ptr @.str.3876, i64 4, i64 0 }, ptr %t107 %t108 = getelementptr inbounds { ptr, i64, i64 }, ptr %t103, i64 4 store { ptr, i64, i64 } { ptr @.str.3877, i64 4, i64 0 }, ptr %t108 %t109 = getelementptr inbounds { ptr, i64, i64 }, ptr %t103, i64 5 store { ptr, i64, i64 } { ptr @.str.3878, i64 3, i64 0 }, ptr %t109 %t110 = getelementptr inbounds { ptr, i64, i64 }, ptr %t103, i64 6 store { ptr, i64, i64 } { ptr @.str.3879, i64 2, i64 0 }, ptr %t110 %t111 = getelementptr inbounds { ptr, i64, i64 }, ptr %t103, i64 7 store { ptr, i64, i64 } { ptr @.str.3880, i64 3, i64 0 }, ptr %t111 %t112 = getelementptr inbounds { ptr, i64, i64 }, ptr %t103, i64 8 store { ptr, i64, i64 } { ptr @.str.3881, i64 3, i64 0 }, ptr %t112 %t113 = getelementptr inbounds { ptr, i64, i64 }, ptr %t103, i64 9 store { ptr, i64, i64 } { ptr @.str.3882, i64 4, i64 0 }, ptr %t113 %t114 = insertvalue { ptr, i64, i64 } undef, ptr %t103, 0 %t115 = insertvalue { ptr, i64, i64 } %t114, i64 10, 1 %t116 = insertvalue { ptr, i64, i64 } %t115, i64 10, 2 store { ptr, i64, i64 } %t116, ptr %a117 %t118 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 %t119 = load %S.ast.Type, ptr %t118 %t120 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t119) br i1 %t120, label %then5902, label %endif5904 then5902: %t121 = mul i64 10, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t122 = call ptr @finch_alloc(i64 %t121) %t123 = getelementptr inbounds { ptr, i64, i64 }, ptr %t122, i64 0 store { ptr, i64, i64 } { ptr @.str.3883, i64 3, i64 0 }, ptr %t123 %t124 = getelementptr inbounds { ptr, i64, i64 }, ptr %t122, i64 1 store { ptr, i64, i64 } { ptr @.str.3884, i64 3, i64 0 }, ptr %t124 %t125 = getelementptr inbounds { ptr, i64, i64 }, ptr %t122, i64 2 store { ptr, i64, i64 } { ptr @.str.3885, i64 3, i64 0 }, ptr %t125 %t126 = getelementptr inbounds { ptr, i64, i64 }, ptr %t122, i64 3 store { ptr, i64, i64 } { ptr @.str.3886, i64 4, i64 0 }, ptr %t126 %t127 = getelementptr inbounds { ptr, i64, i64 }, ptr %t122, i64 4 store { ptr, i64, i64 } { ptr @.str.3887, i64 4, i64 0 }, ptr %t127 %t128 = getelementptr inbounds { ptr, i64, i64 }, ptr %t122, i64 5 store { ptr, i64, i64 } { ptr @.str.3888, i64 3, i64 0 }, ptr %t128 %t129 = getelementptr inbounds { ptr, i64, i64 }, ptr %t122, i64 6 store { ptr, i64, i64 } { ptr @.str.3889, i64 2, i64 0 }, ptr %t129 %t130 = getelementptr inbounds { ptr, i64, i64 }, ptr %t122, i64 7 store { ptr, i64, i64 } { ptr @.str.3890, i64 3, i64 0 }, ptr %t130 %t131 = getelementptr inbounds { ptr, i64, i64 }, ptr %t122, i64 8 store { ptr, i64, i64 } { ptr @.str.3891, i64 3, i64 0 }, ptr %t131 %t132 = getelementptr inbounds { ptr, i64, i64 }, ptr %t122, i64 9 store { ptr, i64, i64 } { ptr @.str.3892, i64 4, i64 0 }, ptr %t132 %t133 = insertvalue { ptr, i64, i64 } undef, ptr %t122, 0 %t134 = insertvalue { ptr, i64, i64 } %t133, i64 10, 1 %t135 = insertvalue { ptr, i64, i64 } %t134, i64 10, 2 store { ptr, i64, i64 } %t135, ptr %a117 br label %endif5904 endif5904: %t136 = getelementptr inbounds { ptr, i64, i64 }, ptr %a101, i32 0, i32 1 %t137 = load { ptr, i64, i64 }, ptr %a2 store i64 -1, ptr %a138 %t139 = load i64, ptr %t136 %t140 = load ptr, ptr %a101 store i64 0, ptr %a141 br label %find.cond5905 find.cond5905: %t142 = load i64, ptr %a141 %t143 = icmp slt i64 %t142, %t139 br i1 %t143, label %find.body5906, label %find.end5909 find.body5906: %t144 = getelementptr inbounds { ptr, i64, i64 }, ptr %t140, i64 %t142 %t145 = load { ptr, i64, i64 }, ptr %t144 store { ptr, i64, i64 } %t145, ptr %a146 store { ptr, i64, i64 } %t137, ptr %a147 %t148 = call i32 @finch_str_eq(ptr %a146, ptr %a147) %t149 = icmp ne i32 %t148, 0 br i1 %t149, label %find.hit5907, label %find.next5908 find.hit5907: store i64 %t142, ptr %a138 br label %find.end5909 find.next5908: %t150 = add i64 %t142, 1 store i64 %t150, ptr %a141 br label %find.cond5905 find.end5909: %t151 = load i64, ptr %a138 store i64 %t151, ptr %a152 %t153 = load i64, ptr %a152 %t154 = icmp slt i64 %t153, 0 br i1 %t154, label %then5910, label %endif5912 then5910: %t155 = load ptr, ptr %a1 %t156 = load { ptr, i64, i64 }, ptr %a2 %t157 = load %S.gen.Val, ptr %a6 %t158 = load %S.gen.Val, ptr %a10 %t159 = load %S.ast.Node, ptr %a11 call void @finch.gen.badOperands(ptr %t155, { ptr, i64, i64 } %t156, %S.gen.Val %t157, %S.gen.Val %t158, %S.ast.Node %t159) br label %endif5912 endif5912: %t160 = load ptr, ptr %a1 %t161 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 %t162 = load %S.ast.Type, ptr %t161 %t163 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t160, %S.ast.Type %t162) store { ptr, i64, i64 } %t163, ptr %a164 %t165 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t165, ptr %a166 store { ptr, i64, i64 } { ptr @.str.3893, i64 1, i64 0 }, ptr %a167 %t168 = call i32 @finch_str_eq(ptr %a166, ptr %a167) %t169 = icmp ne i32 %t168, 0 br label %logic.from5913 logic.from5913: br i1 %t169, label %logic.end5915, label %logic.rhs5914 logic.rhs5914: %t170 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t170, ptr %a171 store { ptr, i64, i64 } { ptr @.str.3894, i64 1, i64 0 }, ptr %a172 %t173 = call i32 @finch_str_eq(ptr %a171, ptr %a172) %t174 = icmp ne i32 %t173, 0 br label %logic.rend5916 logic.rend5916: br label %logic.end5915 logic.end5915: %t175 = phi i1 [ true, %logic.from5913 ], [ %t174, %logic.rend5916 ] br i1 %t175, label %then5917, label %endif5919 then5917: %t176 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 3 %t177 = load i1, ptr %t176 br label %logic.from5920 logic.from5920: br i1 %t177, label %logic.rhs5921, label %logic.end5922 logic.rhs5921: %t178 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 0 %t179 = load { ptr, i64, i64 }, ptr %t178 store { ptr, i64, i64 } %t179, ptr %a180 store { ptr, i64, i64 } { ptr @.str.3895, i64 1, i64 0 }, ptr %a181 %t182 = call i32 @finch_str_eq(ptr %a180, ptr %a181) %t183 = icmp ne i32 %t182, 0 br label %logic.rend5923 logic.rend5923: br label %logic.end5922 logic.end5922: %t184 = phi i1 [ false, %logic.from5920 ], [ %t183, %logic.rend5923 ] br i1 %t184, label %then5924, label %endif5926 then5924: %t185 = load ptr, ptr %a1 %t186 = load %S.ast.Node, ptr %a11 call void @finch.gen.fail(ptr %t185, %S.ast.Node %t186, { ptr, i64, i64 } { ptr @.str.3896, i64 16, i64 0 }) br label %endif5926 endif5926: %t187 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 3 %t188 = load i1, ptr %t187 %t189 = xor i1 %t188, true br i1 %t189, label %then5927, label %endif5929 then5927: %t190 = load ptr, ptr %a1 %t191 = load ptr, ptr %a1 %t192 = load { ptr, i64, i64 }, ptr %a164 store { ptr, i64, i64 } { ptr @.str.3897, i64 8, i64 0 }, ptr %a194 store { ptr, i64, i64 } %t192, ptr %a195 call void @finch_str_concat(ptr %a193, ptr %a194, ptr %a195) %t196 = load { ptr, i64, i64 }, ptr %a193 store { ptr, i64, i64 } %t196, ptr %a198 store { ptr, i64, i64 } { ptr @.str.3898, i64 1, i64 0 }, ptr %a199 call void @finch_str_concat(ptr %a197, ptr %a198, ptr %a199) %t200 = load { ptr, i64, i64 }, ptr %a197 %t201 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 0 %t202 = load { ptr, i64, i64 }, ptr %t201 store { ptr, i64, i64 } %t200, ptr %a204 store { ptr, i64, i64 } %t202, ptr %a205 call void @finch_str_concat(ptr %a203, ptr %a204, ptr %a205) %t206 = load { ptr, i64, i64 }, ptr %a203 store { ptr, i64, i64 } %t206, ptr %a208 store { ptr, i64, i64 } { ptr @.str.3899, i64 3, i64 0 }, ptr %a209 call void @finch_str_concat(ptr %a207, ptr %a208, ptr %a209) %t210 = load { ptr, i64, i64 }, ptr %a207 %t211 = call { ptr, i64, i64 } @finch.gen.op(ptr %t191, { ptr, i64, i64 } %t210) %t212 = load %S.ast.Node, ptr %a11 call void @finch.gen.panicIf(ptr %t190, { ptr, i64, i64 } %t211, { ptr, i64, i64 } { ptr @.str.3900, i64 16, i64 0 }, %S.ast.Node %t212) br label %endif5929 endif5929: br label %endif5919 endif5919: %t213 = load ptr, ptr %a1 %t214 = load i64, ptr %a152 %t215 = load { ptr, i64, i64 }, ptr %a117 %t216 = extractvalue { ptr, i64, i64 } %t215, 1 %t217 = icmp uge i64 %t214, %t216 br i1 %t217, label %range5930, label %inrange5931 range5930: call void @finch_panic_index(ptr @.str.3901, i64 3145, i64 %t214, i64 %t216) unreachable inrange5931: %t218 = extractvalue { ptr, i64, i64 } %t215, 0 %t219 = getelementptr inbounds { ptr, i64, i64 }, ptr %t218, i64 %t214 %t220 = load { ptr, i64, i64 }, ptr %t219 store { ptr, i64, i64 } %t220, ptr %a222 store { ptr, i64, i64 } { ptr @.str.3902, i64 1, i64 0 }, ptr %a223 call void @finch_str_concat(ptr %a221, ptr %a222, ptr %a223) %t224 = load { ptr, i64, i64 }, ptr %a221 %t225 = load { ptr, i64, i64 }, ptr %a164 store { ptr, i64, i64 } %t224, ptr %a227 store { ptr, i64, i64 } %t225, ptr %a228 call void @finch_str_concat(ptr %a226, ptr %a227, ptr %a228) %t229 = load { ptr, i64, i64 }, ptr %a226 store { ptr, i64, i64 } %t229, ptr %a231 store { ptr, i64, i64 } { ptr @.str.3903, i64 1, i64 0 }, ptr %a232 call void @finch_str_concat(ptr %a230, ptr %a231, ptr %a232) %t233 = load { ptr, i64, i64 }, ptr %a230 %t234 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 0 %t235 = load { ptr, i64, i64 }, ptr %t234 store { ptr, i64, i64 } %t233, ptr %a237 store { ptr, i64, i64 } %t235, ptr %a238 call void @finch_str_concat(ptr %a236, ptr %a237, ptr %a238) %t239 = load { ptr, i64, i64 }, ptr %a236 store { ptr, i64, i64 } %t239, ptr %a241 store { ptr, i64, i64 } { ptr @.str.3904, i64 2, i64 0 }, ptr %a242 call void @finch_str_concat(ptr %a240, ptr %a241, ptr %a242) %t243 = load { ptr, i64, i64 }, ptr %a240 %t244 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 0 %t245 = load { ptr, i64, i64 }, ptr %t244 store { ptr, i64, i64 } %t243, ptr %a247 store { ptr, i64, i64 } %t245, ptr %a248 call void @finch_str_concat(ptr %a246, ptr %a247, ptr %a248) %t249 = load { ptr, i64, i64 }, ptr %a246 %t250 = call { ptr, i64, i64 } @finch.gen.op(ptr %t213, { ptr, i64, i64 } %t249) %t251 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t250, 0 %t252 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 %t253 = load %S.ast.Type, ptr %t252 store %S.ast.Type %t253, ptr %a254 call void @finch.copy.S_ast_Type(ptr %a255, ptr %a254) %t256 = load %S.ast.Type, ptr %a255 %t257 = insertvalue %S.gen.Val %t251, %S.ast.Type %t256, 1 ret %S.gen.Val %t257 endif5901: %t258 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 %t259 = load %S.ast.Type, ptr %t258 %t260 = call i1 @finch.gen.isFloat(%S.ast.Type %t259) br i1 %t260, label %then5932, label %endif5934 then5932: %t261 = mul i64 5, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t262 = call ptr @finch_alloc(i64 %t261) %t263 = getelementptr inbounds { ptr, i64, i64 }, ptr %t262, i64 0 store { ptr, i64, i64 } { ptr @.str.3905, i64 1, i64 0 }, ptr %t263 %t264 = getelementptr inbounds { ptr, i64, i64 }, ptr %t262, i64 1 store { ptr, i64, i64 } { ptr @.str.3906, i64 1, i64 0 }, ptr %t264 %t265 = getelementptr inbounds { ptr, i64, i64 }, ptr %t262, i64 2 store { ptr, i64, i64 } { ptr @.str.3907, i64 1, i64 0 }, ptr %t265 %t266 = getelementptr inbounds { ptr, i64, i64 }, ptr %t262, i64 3 store { ptr, i64, i64 } { ptr @.str.3908, i64 1, i64 0 }, ptr %t266 %t267 = getelementptr inbounds { ptr, i64, i64 }, ptr %t262, i64 4 store { ptr, i64, i64 } { ptr @.str.3909, i64 1, i64 0 }, ptr %t267 %t268 = insertvalue { ptr, i64, i64 } undef, ptr %t262, 0 %t269 = insertvalue { ptr, i64, i64 } %t268, i64 5, 1 %t270 = insertvalue { ptr, i64, i64 } %t269, i64 5, 2 store { ptr, i64, i64 } %t270, ptr %a271 %t272 = mul i64 5, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t273 = call ptr @finch_alloc(i64 %t272) %t274 = getelementptr inbounds { ptr, i64, i64 }, ptr %t273, i64 0 store { ptr, i64, i64 } { ptr @.str.3910, i64 4, i64 0 }, ptr %t274 %t275 = getelementptr inbounds { ptr, i64, i64 }, ptr %t273, i64 1 store { ptr, i64, i64 } { ptr @.str.3911, i64 4, i64 0 }, ptr %t275 %t276 = getelementptr inbounds { ptr, i64, i64 }, ptr %t273, i64 2 store { ptr, i64, i64 } { ptr @.str.3912, i64 4, i64 0 }, ptr %t276 %t277 = getelementptr inbounds { ptr, i64, i64 }, ptr %t273, i64 3 store { ptr, i64, i64 } { ptr @.str.3913, i64 4, i64 0 }, ptr %t277 %t278 = getelementptr inbounds { ptr, i64, i64 }, ptr %t273, i64 4 store { ptr, i64, i64 } { ptr @.str.3914, i64 4, i64 0 }, ptr %t278 %t279 = insertvalue { ptr, i64, i64 } undef, ptr %t273, 0 %t280 = insertvalue { ptr, i64, i64 } %t279, i64 5, 1 %t281 = insertvalue { ptr, i64, i64 } %t280, i64 5, 2 store { ptr, i64, i64 } %t281, ptr %a282 %t283 = getelementptr inbounds { ptr, i64, i64 }, ptr %a271, i32 0, i32 1 %t284 = load { ptr, i64, i64 }, ptr %a2 store i64 -1, ptr %a285 %t286 = load i64, ptr %t283 %t287 = load ptr, ptr %a271 store i64 0, ptr %a288 br label %find.cond5935 find.cond5935: %t289 = load i64, ptr %a288 %t290 = icmp slt i64 %t289, %t286 br i1 %t290, label %find.body5936, label %find.end5939 find.body5936: %t291 = getelementptr inbounds { ptr, i64, i64 }, ptr %t287, i64 %t289 %t292 = load { ptr, i64, i64 }, ptr %t291 store { ptr, i64, i64 } %t292, ptr %a293 store { ptr, i64, i64 } %t284, ptr %a294 %t295 = call i32 @finch_str_eq(ptr %a293, ptr %a294) %t296 = icmp ne i32 %t295, 0 br i1 %t296, label %find.hit5937, label %find.next5938 find.hit5937: store i64 %t289, ptr %a285 br label %find.end5939 find.next5938: %t297 = add i64 %t289, 1 store i64 %t297, ptr %a288 br label %find.cond5935 find.end5939: %t298 = load i64, ptr %a285 store i64 %t298, ptr %a299 %t300 = load i64, ptr %a299 %t301 = icmp slt i64 %t300, 0 br i1 %t301, label %then5940, label %endif5942 then5940: %t302 = load ptr, ptr %a1 %t303 = load { ptr, i64, i64 }, ptr %a2 %t304 = load %S.gen.Val, ptr %a6 %t305 = load %S.gen.Val, ptr %a10 %t306 = load %S.ast.Node, ptr %a11 call void @finch.gen.badOperands(ptr %t302, { ptr, i64, i64 } %t303, %S.gen.Val %t304, %S.gen.Val %t305, %S.ast.Node %t306) br label %endif5942 endif5942: %t307 = load ptr, ptr %a1 %t308 = load i64, ptr %a299 %t309 = load { ptr, i64, i64 }, ptr %a282 %t310 = extractvalue { ptr, i64, i64 } %t309, 1 %t311 = icmp uge i64 %t308, %t310 br i1 %t311, label %range5943, label %inrange5944 range5943: call void @finch_panic_index(ptr @.str.3915, i64 3154, i64 %t308, i64 %t310) unreachable inrange5944: %t312 = extractvalue { ptr, i64, i64 } %t309, 0 %t313 = getelementptr inbounds { ptr, i64, i64 }, ptr %t312, i64 %t308 %t314 = load { ptr, i64, i64 }, ptr %t313 store { ptr, i64, i64 } %t314, ptr %a316 store { ptr, i64, i64 } { ptr @.str.3916, i64 1, i64 0 }, ptr %a317 call void @finch_str_concat(ptr %a315, ptr %a316, ptr %a317) %t318 = load { ptr, i64, i64 }, ptr %a315 %t319 = load ptr, ptr %a1 %t320 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 %t321 = load %S.ast.Type, ptr %t320 %t322 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t319, %S.ast.Type %t321) store { ptr, i64, i64 } %t318, ptr %a324 store { ptr, i64, i64 } %t322, ptr %a325 call void @finch_str_concat(ptr %a323, ptr %a324, ptr %a325) %t326 = load { ptr, i64, i64 }, ptr %a323 store { ptr, i64, i64 } %t326, ptr %a328 store { ptr, i64, i64 } { ptr @.str.3917, i64 1, i64 0 }, ptr %a329 call void @finch_str_concat(ptr %a327, ptr %a328, ptr %a329) %t330 = load { ptr, i64, i64 }, ptr %a327 %t331 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 0 %t332 = load { ptr, i64, i64 }, ptr %t331 store { ptr, i64, i64 } %t330, ptr %a334 store { ptr, i64, i64 } %t332, ptr %a335 call void @finch_str_concat(ptr %a333, ptr %a334, ptr %a335) %t336 = load { ptr, i64, i64 }, ptr %a333 store { ptr, i64, i64 } %t336, ptr %a338 store { ptr, i64, i64 } { ptr @.str.3918, i64 2, i64 0 }, ptr %a339 call void @finch_str_concat(ptr %a337, ptr %a338, ptr %a339) %t340 = load { ptr, i64, i64 }, ptr %a337 %t341 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 0 %t342 = load { ptr, i64, i64 }, ptr %t341 store { ptr, i64, i64 } %t340, ptr %a344 store { ptr, i64, i64 } %t342, ptr %a345 call void @finch_str_concat(ptr %a343, ptr %a344, ptr %a345) %t346 = load { ptr, i64, i64 }, ptr %a343 %t347 = call { ptr, i64, i64 } @finch.gen.op(ptr %t307, { ptr, i64, i64 } %t346) %t348 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t347, 0 %t349 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 %t350 = load %S.ast.Type, ptr %t349 store %S.ast.Type %t350, ptr %a351 call void @finch.copy.S_ast_Type(ptr %a352, ptr %a351) %t353 = load %S.ast.Type, ptr %a352 %t354 = insertvalue %S.gen.Val %t348, %S.ast.Type %t353, 1 ret %S.gen.Val %t354 endif5934: %t355 = load ptr, ptr %a1 %t356 = load { ptr, i64, i64 }, ptr %a2 %t357 = load %S.gen.Val, ptr %a6 %t358 = load %S.gen.Val, ptr %a10 %t359 = load %S.ast.Node, ptr %a11 call void @finch.gen.badOperands(ptr %t355, { ptr, i64, i64 } %t356, %S.gen.Val %t357, %S.gen.Val %t358, %S.ast.Node %t359) %t360 = load %S.gen.Val, ptr %a6 store %S.gen.Val %t360, ptr %a361 call void @finch.copy.S_gen_Val(ptr %a362, ptr %a361) %t363 = load %S.gen.Val, ptr %a362 ret %S.gen.Val %t363 } define internal %S.gen.Val @finch.gen.compare(ptr %p0, { ptr, i64, i64 } %p1, %S.gen.Val %p2, %S.gen.Val %p3, %S.ast.Node %p4) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca %S.gen.Val, align 16 %a4 = alloca %S.gen.Val, align 16 %a6 = alloca %S.gen.Val, align 16 %a7 = alloca %S.gen.Val, align 16 %a8 = alloca %S.gen.Val, align 16 %a10 = alloca %S.gen.Val, align 16 %a11 = alloca %S.ast.Node, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca i1, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca { ptr, i64, i64 }, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca { ptr, i64, i64 }, align 16 %a118 = alloca { ptr, i64, i64 }, align 16 %a119 = alloca { ptr, i64, i64 }, align 16 %a125 = alloca { ptr, i64, i64 }, align 16 %a126 = alloca { ptr, i64, i64 }, align 16 %a135 = alloca { ptr, i64, i64 }, align 16 %a136 = alloca { ptr, i64, i64 }, align 16 %a137 = alloca { ptr, i64, i64 }, align 16 %a139 = alloca { ptr, i64, i64 }, align 16 %a140 = alloca { ptr, i64, i64 }, align 16 %a141 = alloca { ptr, i64, i64 }, align 16 %a146 = alloca { ptr, i64, i64 }, align 16 %a147 = alloca { ptr, i64, i64 }, align 16 %a148 = alloca { ptr, i64, i64 }, align 16 %a150 = alloca { ptr, i64, i64 }, align 16 %a151 = alloca { ptr, i64, i64 }, align 16 %a152 = alloca { ptr, i64, i64 }, align 16 %a155 = alloca { ptr, i64, i64 }, align 16 %a156 = alloca { ptr, i64, i64 }, align 16 %a158 = alloca { ptr, i64, i64 }, align 16 %a159 = alloca { ptr, i64, i64 }, align 16 %a164 = alloca { ptr, i64, i64 }, align 16 %a165 = alloca { ptr, i64, i64 }, align 16 %a166 = alloca { ptr, i64, i64 }, align 16 %a168 = alloca { ptr, i64, i64 }, align 16 %a169 = alloca { ptr, i64, i64 }, align 16 %a170 = alloca { ptr, i64, i64 }, align 16 %a173 = alloca { ptr, i64, i64 }, align 16 %a174 = alloca { ptr, i64, i64 }, align 16 %a175 = alloca { ptr, i64, i64 }, align 16 %a177 = alloca { ptr, i64, i64 }, align 16 %a178 = alloca { ptr, i64, i64 }, align 16 %a179 = alloca { ptr, i64, i64 }, align 16 %a189 = alloca { ptr, i64, i64 }, align 16 %a190 = alloca { ptr, i64, i64 }, align 16 %a191 = alloca { ptr, i64, i64 }, align 16 %a193 = alloca { ptr, i64, i64 }, align 16 %a194 = alloca { ptr, i64, i64 }, align 16 %a195 = alloca { ptr, i64, i64 }, align 16 %a200 = alloca { ptr, i64, i64 }, align 16 %a201 = alloca { ptr, i64, i64 }, align 16 %a202 = alloca { ptr, i64, i64 }, align 16 %a204 = alloca { ptr, i64, i64 }, align 16 %a205 = alloca { ptr, i64, i64 }, align 16 %a206 = alloca { ptr, i64, i64 }, align 16 %a209 = alloca { ptr, i64, i64 }, align 16 %a213 = alloca { ptr, i64, i64 }, align 16 %a214 = alloca { ptr, i64, i64 }, align 16 %a215 = alloca { ptr, i64, i64 }, align 16 %a217 = alloca { ptr, i64, i64 }, align 16 %a218 = alloca { ptr, i64, i64 }, align 16 %a219 = alloca { ptr, i64, i64 }, align 16 %a222 = alloca { ptr, i64, i64 }, align 16 %a223 = alloca { ptr, i64, i64 }, align 16 %a224 = alloca { ptr, i64, i64 }, align 16 %a226 = alloca { ptr, i64, i64 }, align 16 %a227 = alloca { ptr, i64, i64 }, align 16 %a228 = alloca { ptr, i64, i64 }, align 16 %a245 = alloca { ptr, i64, i64 }, align 16 %a246 = alloca { ptr, i64, i64 }, align 16 %a248 = alloca { ptr, i64, i64 }, align 16 %a263 = alloca { ptr, i64, i64 }, align 16 %a275 = alloca { ptr, i64, i64 }, align 16 %a279 = alloca i64, align 16 %a282 = alloca i64, align 16 %a287 = alloca { ptr, i64, i64 }, align 16 %a288 = alloca { ptr, i64, i64 }, align 16 %a299 = alloca { ptr, i64, i64 }, align 16 %a300 = alloca { ptr, i64, i64 }, align 16 %a301 = alloca { ptr, i64, i64 }, align 16 %a303 = alloca { ptr, i64, i64 }, align 16 %a304 = alloca { ptr, i64, i64 }, align 16 %a305 = alloca { ptr, i64, i64 }, align 16 %a311 = alloca { ptr, i64, i64 }, align 16 %a312 = alloca { ptr, i64, i64 }, align 16 %a313 = alloca { ptr, i64, i64 }, align 16 %a315 = alloca { ptr, i64, i64 }, align 16 %a316 = alloca { ptr, i64, i64 }, align 16 %a317 = alloca { ptr, i64, i64 }, align 16 %a321 = alloca { ptr, i64, i64 }, align 16 %a322 = alloca { ptr, i64, i64 }, align 16 %a323 = alloca { ptr, i64, i64 }, align 16 %a325 = alloca { ptr, i64, i64 }, align 16 %a326 = alloca { ptr, i64, i64 }, align 16 %a327 = alloca { ptr, i64, i64 }, align 16 %a331 = alloca { ptr, i64, i64 }, align 16 %a332 = alloca { ptr, i64, i64 }, align 16 %a333 = alloca { ptr, i64, i64 }, align 16 %a340 = alloca { ptr, i64, i64 }, align 16 %a341 = alloca { ptr, i64, i64 }, align 16 %a348 = alloca { ptr, i64, i64 }, align 16 %a350 = alloca { ptr, i64, i64 }, align 16 %a351 = alloca { ptr, i64, i64 }, align 16 %a356 = alloca { ptr, i64, i64 }, align 16 %a357 = alloca { ptr, i64, i64 }, align 16 %a358 = alloca { ptr, i64, i64 }, align 16 %a360 = alloca { ptr, i64, i64 }, align 16 %a361 = alloca { ptr, i64, i64 }, align 16 %a362 = alloca { ptr, i64, i64 }, align 16 %a366 = alloca { ptr, i64, i64 }, align 16 %a367 = alloca { ptr, i64, i64 }, align 16 %a368 = alloca { ptr, i64, i64 }, align 16 %a370 = alloca { ptr, i64, i64 }, align 16 %a371 = alloca { ptr, i64, i64 }, align 16 %a372 = alloca { ptr, i64, i64 }, align 16 %a376 = alloca { ptr, i64, i64 }, align 16 %a377 = alloca { ptr, i64, i64 }, align 16 %a378 = alloca { ptr, i64, i64 }, align 16 %a385 = alloca { ptr, i64, i64 }, align 16 %a386 = alloca { ptr, i64, i64 }, align 16 %a402 = alloca { ptr, i64, i64 }, align 16 %a403 = alloca { ptr, i64, i64 }, align 16 %a408 = alloca { ptr, i64, i64 }, align 16 %a409 = alloca { ptr, i64, i64 }, align 16 %a424 = alloca { ptr, i64, i64 }, align 16 %a425 = alloca { ptr, i64, i64 }, align 16 %a426 = alloca { ptr, i64, i64 }, align 16 %a428 = alloca { ptr, i64, i64 }, align 16 %a429 = alloca { ptr, i64, i64 }, align 16 %a430 = alloca { ptr, i64, i64 }, align 16 %a436 = alloca { ptr, i64, i64 }, align 16 %a437 = alloca { ptr, i64, i64 }, align 16 %a438 = alloca { ptr, i64, i64 }, align 16 %a440 = alloca { ptr, i64, i64 }, align 16 %a441 = alloca { ptr, i64, i64 }, align 16 %a442 = alloca { ptr, i64, i64 }, align 16 %a446 = alloca { ptr, i64, i64 }, align 16 %a447 = alloca { ptr, i64, i64 }, align 16 %a448 = alloca { ptr, i64, i64 }, align 16 %a450 = alloca { ptr, i64, i64 }, align 16 %a451 = alloca { ptr, i64, i64 }, align 16 %a452 = alloca { ptr, i64, i64 }, align 16 %a456 = alloca { ptr, i64, i64 }, align 16 %a457 = alloca { ptr, i64, i64 }, align 16 %a458 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store %S.gen.Val %p2, ptr %a3 call void @finch.copy.S_gen_Val(ptr %a4, ptr %a3) %t5 = load %S.gen.Val, ptr %a4 store %S.gen.Val %t5, ptr %a6 store %S.gen.Val %p3, ptr %a7 call void @finch.copy.S_gen_Val(ptr %a8, ptr %a7) %t9 = load %S.gen.Val, ptr %a8 store %S.gen.Val %t9, ptr %a10 store %S.ast.Node %p4, ptr %a11 %t12 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t12, ptr %a13 store { ptr, i64, i64 } { ptr @.str.3919, i64 2, i64 0 }, ptr %a14 %t15 = call i32 @finch_str_eq(ptr %a13, ptr %a14) %t16 = icmp ne i32 %t15, 0 br label %logic.from5945 logic.from5945: br i1 %t16, label %logic.end5947, label %logic.rhs5946 logic.rhs5946: %t17 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t17, ptr %a18 store { ptr, i64, i64 } { ptr @.str.3920, i64 2, i64 0 }, ptr %a19 %t20 = call i32 @finch_str_eq(ptr %a18, ptr %a19) %t21 = icmp ne i32 %t20, 0 br label %logic.rend5948 logic.rend5948: br label %logic.end5947 logic.end5947: %t22 = phi i1 [ true, %logic.from5945 ], [ %t21, %logic.rend5948 ] store i1 %t22, ptr %a23 %t24 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 %t25 = getelementptr inbounds %S.ast.Type, ptr %t24, i32 0, i32 0 %t26 = load { ptr, i64, i64 }, ptr %t25 store { ptr, i64, i64 } %t26, ptr %a27 store { ptr, i64, i64 } { ptr @.str.3921, i64 3, i64 0 }, ptr %a28 %t29 = call i32 @finch_str_eq(ptr %a27, ptr %a28) %t30 = icmp ne i32 %t29, 0 br label %logic.from5949 logic.from5949: br i1 %t30, label %logic.end5951, label %logic.rhs5950 logic.rhs5950: %t31 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 1 %t32 = getelementptr inbounds %S.ast.Type, ptr %t31, i32 0, i32 0 %t33 = load { ptr, i64, i64 }, ptr %t32 store { ptr, i64, i64 } %t33, ptr %a34 store { ptr, i64, i64 } { ptr @.str.3922, i64 3, i64 0 }, ptr %a35 %t36 = call i32 @finch_str_eq(ptr %a34, ptr %a35) %t37 = icmp ne i32 %t36, 0 br label %logic.rend5952 logic.rend5952: br label %logic.end5951 logic.end5951: %t38 = phi i1 [ true, %logic.from5949 ], [ %t37, %logic.rend5952 ] br label %logic.from5953 logic.from5953: br i1 %t38, label %logic.end5955, label %logic.rhs5954 logic.rhs5954: %t39 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 %t40 = getelementptr inbounds %S.ast.Type, ptr %t39, i32 0, i32 0 %t41 = load { ptr, i64, i64 }, ptr %t40 store { ptr, i64, i64 } %t41, ptr %a42 store { ptr, i64, i64 } { ptr @.str.3923, i64 4, i64 0 }, ptr %a43 %t44 = call i32 @finch_str_eq(ptr %a42, ptr %a43) %t45 = icmp ne i32 %t44, 0 br label %logic.rend5956 logic.rend5956: br label %logic.end5955 logic.end5955: %t46 = phi i1 [ true, %logic.from5953 ], [ %t45, %logic.rend5956 ] br label %logic.from5957 logic.from5957: br i1 %t46, label %logic.end5959, label %logic.rhs5958 logic.rhs5958: %t47 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 1 %t48 = getelementptr inbounds %S.ast.Type, ptr %t47, i32 0, i32 0 %t49 = load { ptr, i64, i64 }, ptr %t48 store { ptr, i64, i64 } %t49, ptr %a50 store { ptr, i64, i64 } { ptr @.str.3924, i64 4, i64 0 }, ptr %a51 %t52 = call i32 @finch_str_eq(ptr %a50, ptr %a51) %t53 = icmp ne i32 %t52, 0 br label %logic.rend5960 logic.rend5960: br label %logic.end5959 logic.end5959: %t54 = phi i1 [ true, %logic.from5957 ], [ %t53, %logic.rend5960 ] br i1 %t54, label %then5961, label %endif5963 then5961: %t55 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 %t56 = getelementptr inbounds %S.ast.Type, ptr %t55, i32 0, i32 0 %t57 = load { ptr, i64, i64 }, ptr %t56 store { ptr, i64, i64 } %t57, ptr %a58 store { ptr, i64, i64 } { ptr @.str.3925, i64 3, i64 0 }, ptr %a59 %t60 = call i32 @finch_str_eq(ptr %a58, ptr %a59) %t61 = icmp ne i32 %t60, 0 br label %logic.from5964 logic.from5964: br i1 %t61, label %logic.end5966, label %logic.rhs5965 logic.rhs5965: %t62 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 1 %t63 = getelementptr inbounds %S.ast.Type, ptr %t62, i32 0, i32 0 %t64 = load { ptr, i64, i64 }, ptr %t63 store { ptr, i64, i64 } %t64, ptr %a65 store { ptr, i64, i64 } { ptr @.str.3926, i64 3, i64 0 }, ptr %a66 %t67 = call i32 @finch_str_eq(ptr %a65, ptr %a66) %t68 = icmp ne i32 %t67, 0 br label %logic.rend5967 logic.rend5967: br label %logic.end5966 logic.end5966: %t69 = phi i1 [ true, %logic.from5964 ], [ %t68, %logic.rend5967 ] br i1 %t69, label %then5968, label %endif5970 then5968: %t70 = load ptr, ptr %a1 %t71 = load %S.ast.Node, ptr %a11 call void @finch.gen.fail(ptr %t70, %S.ast.Node %t71, { ptr, i64, i64 } { ptr @.str.3927, i64 59, i64 0 }) br label %endif5970 endif5970: %t72 = load i1, ptr %a23 %t73 = xor i1 %t72, true br i1 %t73, label %then5971, label %endif5973 then5971: %t74 = load ptr, ptr %a1 %t75 = load { ptr, i64, i64 }, ptr %a2 %t76 = load %S.gen.Val, ptr %a6 %t77 = load %S.gen.Val, ptr %a10 %t78 = load %S.ast.Node, ptr %a11 call void @finch.gen.badOperands(ptr %t74, { ptr, i64, i64 } %t75, %S.gen.Val %t76, %S.gen.Val %t77, %S.ast.Node %t78) br label %endif5973 endif5973: store { ptr, i64, i64 } { ptr @.str.3928, i64 2, i64 0 }, ptr %a79 %t80 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t80, ptr %a81 store { ptr, i64, i64 } { ptr @.str.3929, i64 2, i64 0 }, ptr %a82 %t83 = call i32 @finch_str_eq(ptr %a81, ptr %a82) %t84 = icmp ne i32 %t83, 0 br i1 %t84, label %then5974, label %endif5976 then5974: store { ptr, i64, i64 } { ptr @.str.3930, i64 2, i64 0 }, ptr %a79 br label %endif5976 endif5976: %t85 = load ptr, ptr %a1 %t86 = load { ptr, i64, i64 }, ptr %a79 store { ptr, i64, i64 } { ptr @.str.3931, i64 5, i64 0 }, ptr %a88 store { ptr, i64, i64 } %t86, ptr %a89 call void @finch_str_concat(ptr %a87, ptr %a88, ptr %a89) %t90 = load { ptr, i64, i64 }, ptr %a87 store { ptr, i64, i64 } %t90, ptr %a92 store { ptr, i64, i64 } { ptr @.str.3932, i64 5, i64 0 }, ptr %a93 call void @finch_str_concat(ptr %a91, ptr %a92, ptr %a93) %t94 = load { ptr, i64, i64 }, ptr %a91 %t95 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 0 %t96 = load { ptr, i64, i64 }, ptr %t95 store { ptr, i64, i64 } %t94, ptr %a98 store { ptr, i64, i64 } %t96, ptr %a99 call void @finch_str_concat(ptr %a97, ptr %a98, ptr %a99) %t100 = load { ptr, i64, i64 }, ptr %a97 store { ptr, i64, i64 } %t100, ptr %a102 store { ptr, i64, i64 } { ptr @.str.3933, i64 2, i64 0 }, ptr %a103 call void @finch_str_concat(ptr %a101, ptr %a102, ptr %a103) %t104 = load { ptr, i64, i64 }, ptr %a101 %t105 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 0 %t106 = load { ptr, i64, i64 }, ptr %t105 store { ptr, i64, i64 } %t104, ptr %a108 store { ptr, i64, i64 } %t106, ptr %a109 call void @finch_str_concat(ptr %a107, ptr %a108, ptr %a109) %t110 = load { ptr, i64, i64 }, ptr %a107 %t111 = call { ptr, i64, i64 } @finch.gen.op(ptr %t85, { ptr, i64, i64 } %t110) %t112 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t111, 0 %t113 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3934, i64 4, i64 0 }) %t114 = insertvalue %S.gen.Val %t112, %S.ast.Type %t113, 1 ret %S.gen.Val %t114 endif5963: %t115 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 %t116 = getelementptr inbounds %S.ast.Type, ptr %t115, i32 0, i32 0 %t117 = load { ptr, i64, i64 }, ptr %t116 store { ptr, i64, i64 } %t117, ptr %a118 store { ptr, i64, i64 } { ptr @.str.3935, i64 3, i64 0 }, ptr %a119 %t120 = call i32 @finch_str_eq(ptr %a118, ptr %a119) %t121 = icmp ne i32 %t120, 0 br label %logic.from5977 logic.from5977: br i1 %t121, label %logic.rhs5978, label %logic.end5979 logic.rhs5978: %t122 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 1 %t123 = getelementptr inbounds %S.ast.Type, ptr %t122, i32 0, i32 0 %t124 = load { ptr, i64, i64 }, ptr %t123 store { ptr, i64, i64 } %t124, ptr %a125 store { ptr, i64, i64 } { ptr @.str.3936, i64 3, i64 0 }, ptr %a126 %t127 = call i32 @finch_str_eq(ptr %a125, ptr %a126) %t128 = icmp ne i32 %t127, 0 br label %logic.rend5980 logic.rend5980: br label %logic.end5979 logic.end5979: %t129 = phi i1 [ false, %logic.from5977 ], [ %t128, %logic.rend5980 ] br i1 %t129, label %then5981, label %endif5983 then5981: %t130 = load i1, ptr %a23 br i1 %t130, label %then5984, label %endif5986 then5984: %t131 = load ptr, ptr %a1 %t132 = load ptr, ptr %a1 %t133 = load %S.gen.Val, ptr %a6 %t134 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t132, %S.gen.Val %t133) store { ptr, i64, i64 } { ptr @.str.3937, i64 27, i64 0 }, ptr %a136 store { ptr, i64, i64 } %t134, ptr %a137 call void @finch_str_concat(ptr %a135, ptr %a136, ptr %a137) %t138 = load { ptr, i64, i64 }, ptr %a135 store { ptr, i64, i64 } %t138, ptr %a140 store { ptr, i64, i64 } { ptr @.str.3938, i64 6, i64 0 }, ptr %a141 call void @finch_str_concat(ptr %a139, ptr %a140, ptr %a141) %t142 = load { ptr, i64, i64 }, ptr %a139 %t143 = load ptr, ptr %a1 %t144 = load %S.gen.Val, ptr %a10 %t145 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t143, %S.gen.Val %t144) store { ptr, i64, i64 } %t142, ptr %a147 store { ptr, i64, i64 } %t145, ptr %a148 call void @finch_str_concat(ptr %a146, ptr %a147, ptr %a148) %t149 = load { ptr, i64, i64 }, ptr %a146 store { ptr, i64, i64 } %t149, ptr %a151 store { ptr, i64, i64 } { ptr @.str.3939, i64 1, i64 0 }, ptr %a152 call void @finch_str_concat(ptr %a150, ptr %a151, ptr %a152) %t153 = load { ptr, i64, i64 }, ptr %a150 %t154 = call { ptr, i64, i64 } @finch.gen.op(ptr %t131, { ptr, i64, i64 } %t153) store { ptr, i64, i64 } %t154, ptr %a155 store { ptr, i64, i64 } { ptr @.str.3940, i64 2, i64 0 }, ptr %a156 %t157 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t157, ptr %a158 store { ptr, i64, i64 } { ptr @.str.3941, i64 2, i64 0 }, ptr %a159 %t160 = call i32 @finch_str_eq(ptr %a158, ptr %a159) %t161 = icmp ne i32 %t160, 0 br i1 %t161, label %then5987, label %endif5989 then5987: store { ptr, i64, i64 } { ptr @.str.3942, i64 2, i64 0 }, ptr %a156 br label %endif5989 endif5989: %t162 = load ptr, ptr %a1 %t163 = load { ptr, i64, i64 }, ptr %a156 store { ptr, i64, i64 } { ptr @.str.3943, i64 5, i64 0 }, ptr %a165 store { ptr, i64, i64 } %t163, ptr %a166 call void @finch_str_concat(ptr %a164, ptr %a165, ptr %a166) %t167 = load { ptr, i64, i64 }, ptr %a164 store { ptr, i64, i64 } %t167, ptr %a169 store { ptr, i64, i64 } { ptr @.str.3944, i64 5, i64 0 }, ptr %a170 call void @finch_str_concat(ptr %a168, ptr %a169, ptr %a170) %t171 = load { ptr, i64, i64 }, ptr %a168 %t172 = load { ptr, i64, i64 }, ptr %a155 store { ptr, i64, i64 } %t171, ptr %a174 store { ptr, i64, i64 } %t172, ptr %a175 call void @finch_str_concat(ptr %a173, ptr %a174, ptr %a175) %t176 = load { ptr, i64, i64 }, ptr %a173 store { ptr, i64, i64 } %t176, ptr %a178 store { ptr, i64, i64 } { ptr @.str.3945, i64 3, i64 0 }, ptr %a179 call void @finch_str_concat(ptr %a177, ptr %a178, ptr %a179) %t180 = load { ptr, i64, i64 }, ptr %a177 %t181 = call { ptr, i64, i64 } @finch.gen.op(ptr %t162, { ptr, i64, i64 } %t180) %t182 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t181, 0 %t183 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3946, i64 4, i64 0 }) %t184 = insertvalue %S.gen.Val %t182, %S.ast.Type %t183, 1 ret %S.gen.Val %t184 endif5986: %t185 = load ptr, ptr %a1 %t186 = load ptr, ptr %a1 %t187 = load %S.gen.Val, ptr %a6 %t188 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t186, %S.gen.Val %t187) store { ptr, i64, i64 } { ptr @.str.3947, i64 28, i64 0 }, ptr %a190 store { ptr, i64, i64 } %t188, ptr %a191 call void @finch_str_concat(ptr %a189, ptr %a190, ptr %a191) %t192 = load { ptr, i64, i64 }, ptr %a189 store { ptr, i64, i64 } %t192, ptr %a194 store { ptr, i64, i64 } { ptr @.str.3948, i64 6, i64 0 }, ptr %a195 call void @finch_str_concat(ptr %a193, ptr %a194, ptr %a195) %t196 = load { ptr, i64, i64 }, ptr %a193 %t197 = load ptr, ptr %a1 %t198 = load %S.gen.Val, ptr %a10 %t199 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t197, %S.gen.Val %t198) store { ptr, i64, i64 } %t196, ptr %a201 store { ptr, i64, i64 } %t199, ptr %a202 call void @finch_str_concat(ptr %a200, ptr %a201, ptr %a202) %t203 = load { ptr, i64, i64 }, ptr %a200 store { ptr, i64, i64 } %t203, ptr %a205 store { ptr, i64, i64 } { ptr @.str.3949, i64 1, i64 0 }, ptr %a206 call void @finch_str_concat(ptr %a204, ptr %a205, ptr %a206) %t207 = load { ptr, i64, i64 }, ptr %a204 %t208 = call { ptr, i64, i64 } @finch.gen.op(ptr %t185, { ptr, i64, i64 } %t207) store { ptr, i64, i64 } %t208, ptr %a209 %t210 = load ptr, ptr %a1 %t211 = load { ptr, i64, i64 }, ptr %a2 %t212 = call { ptr, i64, i64 } @finch.gen.intPred({ ptr, i64, i64 } %t211, i1 true) store { ptr, i64, i64 } { ptr @.str.3950, i64 5, i64 0 }, ptr %a214 store { ptr, i64, i64 } %t212, ptr %a215 call void @finch_str_concat(ptr %a213, ptr %a214, ptr %a215) %t216 = load { ptr, i64, i64 }, ptr %a213 store { ptr, i64, i64 } %t216, ptr %a218 store { ptr, i64, i64 } { ptr @.str.3951, i64 5, i64 0 }, ptr %a219 call void @finch_str_concat(ptr %a217, ptr %a218, ptr %a219) %t220 = load { ptr, i64, i64 }, ptr %a217 %t221 = load { ptr, i64, i64 }, ptr %a209 store { ptr, i64, i64 } %t220, ptr %a223 store { ptr, i64, i64 } %t221, ptr %a224 call void @finch_str_concat(ptr %a222, ptr %a223, ptr %a224) %t225 = load { ptr, i64, i64 }, ptr %a222 store { ptr, i64, i64 } %t225, ptr %a227 store { ptr, i64, i64 } { ptr @.str.3952, i64 3, i64 0 }, ptr %a228 call void @finch_str_concat(ptr %a226, ptr %a227, ptr %a228) %t229 = load { ptr, i64, i64 }, ptr %a226 %t230 = call { ptr, i64, i64 } @finch.gen.op(ptr %t210, { ptr, i64, i64 } %t229) %t231 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t230, 0 %t232 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3953, i64 4, i64 0 }) %t233 = insertvalue %S.gen.Val %t231, %S.ast.Type %t232, 1 ret %S.gen.Val %t233 endif5983: %t234 = load ptr, ptr %a1 %t235 = call i1 @finch.gen.unify(ptr %t234, ptr %a6, ptr %a10) %t236 = xor i1 %t235, true br i1 %t236, label %then5990, label %endif5992 then5990: %t237 = load ptr, ptr %a1 %t238 = load { ptr, i64, i64 }, ptr %a2 %t239 = load %S.gen.Val, ptr %a6 %t240 = load %S.gen.Val, ptr %a10 %t241 = load %S.ast.Node, ptr %a11 call void @finch.gen.badOperands(ptr %t237, { ptr, i64, i64 } %t238, %S.gen.Val %t239, %S.gen.Val %t240, %S.ast.Node %t241) br label %endif5992 endif5992: %t242 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 %t243 = getelementptr inbounds %S.ast.Type, ptr %t242, i32 0, i32 0 %t244 = load { ptr, i64, i64 }, ptr %t243 store { ptr, i64, i64 } %t244, ptr %a245 call void @finch_str_copy(ptr %a246, ptr %a245) %t247 = load { ptr, i64, i64 }, ptr %a246 store { ptr, i64, i64 } %t247, ptr %a248 %t249 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 %t250 = load %S.ast.Type, ptr %t249 %t251 = call i1 @finch.gen.isFloat(%S.ast.Type %t250) br i1 %t251, label %then5993, label %endif5995 then5993: %t252 = mul i64 6, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t253 = call ptr @finch_alloc(i64 %t252) %t254 = getelementptr inbounds { ptr, i64, i64 }, ptr %t253, i64 0 store { ptr, i64, i64 } { ptr @.str.3954, i64 2, i64 0 }, ptr %t254 %t255 = getelementptr inbounds { ptr, i64, i64 }, ptr %t253, i64 1 store { ptr, i64, i64 } { ptr @.str.3955, i64 2, i64 0 }, ptr %t255 %t256 = getelementptr inbounds { ptr, i64, i64 }, ptr %t253, i64 2 store { ptr, i64, i64 } { ptr @.str.3956, i64 1, i64 0 }, ptr %t256 %t257 = getelementptr inbounds { ptr, i64, i64 }, ptr %t253, i64 3 store { ptr, i64, i64 } { ptr @.str.3957, i64 2, i64 0 }, ptr %t257 %t258 = getelementptr inbounds { ptr, i64, i64 }, ptr %t253, i64 4 store { ptr, i64, i64 } { ptr @.str.3958, i64 1, i64 0 }, ptr %t258 %t259 = getelementptr inbounds { ptr, i64, i64 }, ptr %t253, i64 5 store { ptr, i64, i64 } { ptr @.str.3959, i64 2, i64 0 }, ptr %t259 %t260 = insertvalue { ptr, i64, i64 } undef, ptr %t253, 0 %t261 = insertvalue { ptr, i64, i64 } %t260, i64 6, 1 %t262 = insertvalue { ptr, i64, i64 } %t261, i64 6, 2 store { ptr, i64, i64 } %t262, ptr %a263 %t264 = mul i64 6, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t265 = call ptr @finch_alloc(i64 %t264) %t266 = getelementptr inbounds { ptr, i64, i64 }, ptr %t265, i64 0 store { ptr, i64, i64 } { ptr @.str.3960, i64 3, i64 0 }, ptr %t266 %t267 = getelementptr inbounds { ptr, i64, i64 }, ptr %t265, i64 1 store { ptr, i64, i64 } { ptr @.str.3961, i64 3, i64 0 }, ptr %t267 %t268 = getelementptr inbounds { ptr, i64, i64 }, ptr %t265, i64 2 store { ptr, i64, i64 } { ptr @.str.3962, i64 3, i64 0 }, ptr %t268 %t269 = getelementptr inbounds { ptr, i64, i64 }, ptr %t265, i64 3 store { ptr, i64, i64 } { ptr @.str.3963, i64 3, i64 0 }, ptr %t269 %t270 = getelementptr inbounds { ptr, i64, i64 }, ptr %t265, i64 4 store { ptr, i64, i64 } { ptr @.str.3964, i64 3, i64 0 }, ptr %t270 %t271 = getelementptr inbounds { ptr, i64, i64 }, ptr %t265, i64 5 store { ptr, i64, i64 } { ptr @.str.3965, i64 3, i64 0 }, ptr %t271 %t272 = insertvalue { ptr, i64, i64 } undef, ptr %t265, 0 %t273 = insertvalue { ptr, i64, i64 } %t272, i64 6, 1 %t274 = insertvalue { ptr, i64, i64 } %t273, i64 6, 2 store { ptr, i64, i64 } %t274, ptr %a275 %t276 = load ptr, ptr %a1 %t277 = getelementptr inbounds { ptr, i64, i64 }, ptr %a263, i32 0, i32 1 %t278 = load { ptr, i64, i64 }, ptr %a2 store i64 -1, ptr %a279 %t280 = load i64, ptr %t277 %t281 = load ptr, ptr %a263 store i64 0, ptr %a282 br label %find.cond5996 find.cond5996: %t283 = load i64, ptr %a282 %t284 = icmp slt i64 %t283, %t280 br i1 %t284, label %find.body5997, label %find.end6000 find.body5997: %t285 = getelementptr inbounds { ptr, i64, i64 }, ptr %t281, i64 %t283 %t286 = load { ptr, i64, i64 }, ptr %t285 store { ptr, i64, i64 } %t286, ptr %a287 store { ptr, i64, i64 } %t278, ptr %a288 %t289 = call i32 @finch_str_eq(ptr %a287, ptr %a288) %t290 = icmp ne i32 %t289, 0 br i1 %t290, label %find.hit5998, label %find.next5999 find.hit5998: store i64 %t283, ptr %a279 br label %find.end6000 find.next5999: %t291 = add i64 %t283, 1 store i64 %t291, ptr %a282 br label %find.cond5996 find.end6000: %t292 = load i64, ptr %a279 %t293 = load { ptr, i64, i64 }, ptr %a275 %t294 = extractvalue { ptr, i64, i64 } %t293, 1 %t295 = icmp uge i64 %t292, %t294 br i1 %t295, label %range6001, label %inrange6002 range6001: call void @finch_panic_index(ptr @.str.3967, i64 3194, i64 %t292, i64 %t294) unreachable inrange6002: %t296 = extractvalue { ptr, i64, i64 } %t293, 0 %t297 = getelementptr inbounds { ptr, i64, i64 }, ptr %t296, i64 %t292 %t298 = load { ptr, i64, i64 }, ptr %t297 store { ptr, i64, i64 } { ptr @.str.3966, i64 5, i64 0 }, ptr %a300 store { ptr, i64, i64 } %t298, ptr %a301 call void @finch_str_concat(ptr %a299, ptr %a300, ptr %a301) %t302 = load { ptr, i64, i64 }, ptr %a299 store { ptr, i64, i64 } %t302, ptr %a304 store { ptr, i64, i64 } { ptr @.str.3968, i64 1, i64 0 }, ptr %a305 call void @finch_str_concat(ptr %a303, ptr %a304, ptr %a305) %t306 = load { ptr, i64, i64 }, ptr %a303 %t307 = load ptr, ptr %a1 %t308 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 %t309 = load %S.ast.Type, ptr %t308 %t310 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t307, %S.ast.Type %t309) store { ptr, i64, i64 } %t306, ptr %a312 store { ptr, i64, i64 } %t310, ptr %a313 call void @finch_str_concat(ptr %a311, ptr %a312, ptr %a313) %t314 = load { ptr, i64, i64 }, ptr %a311 store { ptr, i64, i64 } %t314, ptr %a316 store { ptr, i64, i64 } { ptr @.str.3969, i64 1, i64 0 }, ptr %a317 call void @finch_str_concat(ptr %a315, ptr %a316, ptr %a317) %t318 = load { ptr, i64, i64 }, ptr %a315 %t319 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 0 %t320 = load { ptr, i64, i64 }, ptr %t319 store { ptr, i64, i64 } %t318, ptr %a322 store { ptr, i64, i64 } %t320, ptr %a323 call void @finch_str_concat(ptr %a321, ptr %a322, ptr %a323) %t324 = load { ptr, i64, i64 }, ptr %a321 store { ptr, i64, i64 } %t324, ptr %a326 store { ptr, i64, i64 } { ptr @.str.3970, i64 2, i64 0 }, ptr %a327 call void @finch_str_concat(ptr %a325, ptr %a326, ptr %a327) %t328 = load { ptr, i64, i64 }, ptr %a325 %t329 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 0 %t330 = load { ptr, i64, i64 }, ptr %t329 store { ptr, i64, i64 } %t328, ptr %a332 store { ptr, i64, i64 } %t330, ptr %a333 call void @finch_str_concat(ptr %a331, ptr %a332, ptr %a333) %t334 = load { ptr, i64, i64 }, ptr %a331 %t335 = call { ptr, i64, i64 } @finch.gen.op(ptr %t276, { ptr, i64, i64 } %t334) %t336 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t335, 0 %t337 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3971, i64 4, i64 0 }) %t338 = insertvalue %S.gen.Val %t336, %S.ast.Type %t337, 1 ret %S.gen.Val %t338 endif5995: %t339 = load { ptr, i64, i64 }, ptr %a248 store { ptr, i64, i64 } %t339, ptr %a340 store { ptr, i64, i64 } { ptr @.str.3972, i64 4, i64 0 }, ptr %a341 %t342 = call i32 @finch_str_eq(ptr %a340, ptr %a341) %t343 = icmp ne i32 %t342, 0 br i1 %t343, label %then6003, label %endif6005 then6003: %t344 = load i1, ptr %a23 %t345 = xor i1 %t344, true br i1 %t345, label %then6006, label %endif6008 then6006: %t346 = load ptr, ptr %a1 %t347 = load %S.ast.Node, ptr %a11 call void @finch.gen.fail(ptr %t346, %S.ast.Node %t347, { ptr, i64, i64 } { ptr @.str.3973, i64 115, i64 0 }) br label %endif6008 endif6008: store { ptr, i64, i64 } { ptr @.str.3974, i64 2, i64 0 }, ptr %a348 %t349 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t349, ptr %a350 store { ptr, i64, i64 } { ptr @.str.3975, i64 2, i64 0 }, ptr %a351 %t352 = call i32 @finch_str_eq(ptr %a350, ptr %a351) %t353 = icmp ne i32 %t352, 0 br i1 %t353, label %then6009, label %endif6011 then6009: store { ptr, i64, i64 } { ptr @.str.3976, i64 2, i64 0 }, ptr %a348 br label %endif6011 endif6011: %t354 = load ptr, ptr %a1 %t355 = load { ptr, i64, i64 }, ptr %a348 store { ptr, i64, i64 } { ptr @.str.3977, i64 5, i64 0 }, ptr %a357 store { ptr, i64, i64 } %t355, ptr %a358 call void @finch_str_concat(ptr %a356, ptr %a357, ptr %a358) %t359 = load { ptr, i64, i64 }, ptr %a356 store { ptr, i64, i64 } %t359, ptr %a361 store { ptr, i64, i64 } { ptr @.str.3978, i64 5, i64 0 }, ptr %a362 call void @finch_str_concat(ptr %a360, ptr %a361, ptr %a362) %t363 = load { ptr, i64, i64 }, ptr %a360 %t364 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 0 %t365 = load { ptr, i64, i64 }, ptr %t364 store { ptr, i64, i64 } %t363, ptr %a367 store { ptr, i64, i64 } %t365, ptr %a368 call void @finch_str_concat(ptr %a366, ptr %a367, ptr %a368) %t369 = load { ptr, i64, i64 }, ptr %a366 store { ptr, i64, i64 } %t369, ptr %a371 store { ptr, i64, i64 } { ptr @.str.3979, i64 2, i64 0 }, ptr %a372 call void @finch_str_concat(ptr %a370, ptr %a371, ptr %a372) %t373 = load { ptr, i64, i64 }, ptr %a370 %t374 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 0 %t375 = load { ptr, i64, i64 }, ptr %t374 store { ptr, i64, i64 } %t373, ptr %a377 store { ptr, i64, i64 } %t375, ptr %a378 call void @finch_str_concat(ptr %a376, ptr %a377, ptr %a378) %t379 = load { ptr, i64, i64 }, ptr %a376 %t380 = call { ptr, i64, i64 } @finch.gen.op(ptr %t354, { ptr, i64, i64 } %t379) %t381 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t380, 0 %t382 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3980, i64 4, i64 0 }) %t383 = insertvalue %S.gen.Val %t381, %S.ast.Type %t382, 1 ret %S.gen.Val %t383 endif6005: %t384 = load { ptr, i64, i64 }, ptr %a248 store { ptr, i64, i64 } %t384, ptr %a385 store { ptr, i64, i64 } { ptr @.str.3981, i64 4, i64 0 }, ptr %a386 %t387 = call i32 @finch_str_eq(ptr %a385, ptr %a386) %t388 = icmp ne i32 %t387, 0 br label %logic.from6012 logic.from6012: br i1 %t388, label %logic.rhs6013, label %logic.end6014 logic.rhs6013: %t389 = load i1, ptr %a23 %t390 = xor i1 %t389, true br label %logic.rend6015 logic.rend6015: br label %logic.end6014 logic.end6014: %t391 = phi i1 [ false, %logic.from6012 ], [ %t390, %logic.rend6015 ] br i1 %t391, label %then6016, label %endif6018 then6016: %t392 = load ptr, ptr %a1 %t393 = load { ptr, i64, i64 }, ptr %a2 %t394 = load %S.gen.Val, ptr %a6 %t395 = load %S.gen.Val, ptr %a10 %t396 = load %S.ast.Node, ptr %a11 call void @finch.gen.badOperands(ptr %t392, { ptr, i64, i64 } %t393, %S.gen.Val %t394, %S.gen.Val %t395, %S.ast.Node %t396) br label %endif6018 endif6018: %t397 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 %t398 = load %S.ast.Type, ptr %t397 %t399 = call i1 @finch.gen.isInt(%S.ast.Type %t398) %t400 = xor i1 %t399, true br label %logic.from6019 logic.from6019: br i1 %t400, label %logic.rhs6020, label %logic.end6021 logic.rhs6020: %t401 = load { ptr, i64, i64 }, ptr %a248 store { ptr, i64, i64 } %t401, ptr %a402 store { ptr, i64, i64 } { ptr @.str.3982, i64 4, i64 0 }, ptr %a403 %t404 = call i32 @finch_str_eq(ptr %a402, ptr %a403) %t405 = icmp eq i32 %t404, 0 br label %logic.rend6022 logic.rend6022: br label %logic.end6021 logic.end6021: %t406 = phi i1 [ false, %logic.from6019 ], [ %t405, %logic.rend6022 ] br label %logic.from6023 logic.from6023: br i1 %t406, label %logic.rhs6024, label %logic.end6025 logic.rhs6024: %t407 = load { ptr, i64, i64 }, ptr %a248 store { ptr, i64, i64 } %t407, ptr %a408 store { ptr, i64, i64 } { ptr @.str.3983, i64 4, i64 0 }, ptr %a409 %t410 = call i32 @finch_str_eq(ptr %a408, ptr %a409) %t411 = icmp eq i32 %t410, 0 br label %logic.rend6026 logic.rend6026: br label %logic.end6025 logic.end6025: %t412 = phi i1 [ false, %logic.from6023 ], [ %t411, %logic.rend6026 ] br i1 %t412, label %then6027, label %endif6029 then6027: %t413 = load ptr, ptr %a1 %t414 = load { ptr, i64, i64 }, ptr %a2 %t415 = load %S.gen.Val, ptr %a6 %t416 = load %S.gen.Val, ptr %a10 %t417 = load %S.ast.Node, ptr %a11 call void @finch.gen.badOperands(ptr %t413, { ptr, i64, i64 } %t414, %S.gen.Val %t415, %S.gen.Val %t416, %S.ast.Node %t417) br label %endif6029 endif6029: %t418 = load ptr, ptr %a1 %t419 = load { ptr, i64, i64 }, ptr %a2 %t420 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 %t421 = load %S.ast.Type, ptr %t420 %t422 = call i1 @finch.gen.isSigned(%S.ast.Type %t421) %t423 = call { ptr, i64, i64 } @finch.gen.intPred({ ptr, i64, i64 } %t419, i1 %t422) store { ptr, i64, i64 } { ptr @.str.3984, i64 5, i64 0 }, ptr %a425 store { ptr, i64, i64 } %t423, ptr %a426 call void @finch_str_concat(ptr %a424, ptr %a425, ptr %a426) %t427 = load { ptr, i64, i64 }, ptr %a424 store { ptr, i64, i64 } %t427, ptr %a429 store { ptr, i64, i64 } { ptr @.str.3985, i64 1, i64 0 }, ptr %a430 call void @finch_str_concat(ptr %a428, ptr %a429, ptr %a430) %t431 = load { ptr, i64, i64 }, ptr %a428 %t432 = load ptr, ptr %a1 %t433 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 %t434 = load %S.ast.Type, ptr %t433 %t435 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t432, %S.ast.Type %t434) store { ptr, i64, i64 } %t431, ptr %a437 store { ptr, i64, i64 } %t435, ptr %a438 call void @finch_str_concat(ptr %a436, ptr %a437, ptr %a438) %t439 = load { ptr, i64, i64 }, ptr %a436 store { ptr, i64, i64 } %t439, ptr %a441 store { ptr, i64, i64 } { ptr @.str.3986, i64 1, i64 0 }, ptr %a442 call void @finch_str_concat(ptr %a440, ptr %a441, ptr %a442) %t443 = load { ptr, i64, i64 }, ptr %a440 %t444 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 0 %t445 = load { ptr, i64, i64 }, ptr %t444 store { ptr, i64, i64 } %t443, ptr %a447 store { ptr, i64, i64 } %t445, ptr %a448 call void @finch_str_concat(ptr %a446, ptr %a447, ptr %a448) %t449 = load { ptr, i64, i64 }, ptr %a446 store { ptr, i64, i64 } %t449, ptr %a451 store { ptr, i64, i64 } { ptr @.str.3987, i64 2, i64 0 }, ptr %a452 call void @finch_str_concat(ptr %a450, ptr %a451, ptr %a452) %t453 = load { ptr, i64, i64 }, ptr %a450 %t454 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 0 %t455 = load { ptr, i64, i64 }, ptr %t454 store { ptr, i64, i64 } %t453, ptr %a457 store { ptr, i64, i64 } %t455, ptr %a458 call void @finch_str_concat(ptr %a456, ptr %a457, ptr %a458) %t459 = load { ptr, i64, i64 }, ptr %a456 %t460 = call { ptr, i64, i64 } @finch.gen.op(ptr %t418, { ptr, i64, i64 } %t459) %t461 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t460, 0 %t462 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3988, i64 4, i64 0 }) %t463 = insertvalue %S.gen.Val %t461, %S.ast.Type %t462, 1 ret %S.gen.Val %t463 } define internal { ptr, i64, i64 } @finch.gen.intPred({ ptr, i64, i64 } %p0, i1 %p1) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a2 = alloca i1, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca i64, align 16 %a44 = alloca i64, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 store i1 %p1, ptr %a2 %t3 = mul i64 6, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t4 = call ptr @finch_alloc(i64 %t3) %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i64 0 store { ptr, i64, i64 } { ptr @.str.3989, i64 2, i64 0 }, ptr %t5 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i64 1 store { ptr, i64, i64 } { ptr @.str.3990, i64 2, i64 0 }, ptr %t6 %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i64 2 store { ptr, i64, i64 } { ptr @.str.3991, i64 1, i64 0 }, ptr %t7 %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i64 3 store { ptr, i64, i64 } { ptr @.str.3992, i64 2, i64 0 }, ptr %t8 %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i64 4 store { ptr, i64, i64 } { ptr @.str.3993, i64 1, i64 0 }, ptr %t9 %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i64 5 store { ptr, i64, i64 } { ptr @.str.3994, i64 2, i64 0 }, ptr %t10 %t11 = insertvalue { ptr, i64, i64 } undef, ptr %t4, 0 %t12 = insertvalue { ptr, i64, i64 } %t11, i64 6, 1 %t13 = insertvalue { ptr, i64, i64 } %t12, i64 6, 2 store { ptr, i64, i64 } %t13, ptr %a14 %t15 = mul i64 6, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t16 = call ptr @finch_alloc(i64 %t15) %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t16, i64 0 store { ptr, i64, i64 } { ptr @.str.3995, i64 2, i64 0 }, ptr %t17 %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t16, i64 1 store { ptr, i64, i64 } { ptr @.str.3996, i64 2, i64 0 }, ptr %t18 %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t16, i64 2 store { ptr, i64, i64 } { ptr @.str.3997, i64 3, i64 0 }, ptr %t19 %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t16, i64 3 store { ptr, i64, i64 } { ptr @.str.3998, i64 3, i64 0 }, ptr %t20 %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t16, i64 4 store { ptr, i64, i64 } { ptr @.str.3999, i64 3, i64 0 }, ptr %t21 %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %t16, i64 5 store { ptr, i64, i64 } { ptr @.str.4000, i64 3, i64 0 }, ptr %t22 %t23 = insertvalue { ptr, i64, i64 } undef, ptr %t16, 0 %t24 = insertvalue { ptr, i64, i64 } %t23, i64 6, 1 %t25 = insertvalue { ptr, i64, i64 } %t24, i64 6, 2 store { ptr, i64, i64 } %t25, ptr %a26 %t27 = load i1, ptr %a2 br i1 %t27, label %then6030, label %endif6032 then6030: %t28 = mul i64 6, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t29 = call ptr @finch_alloc(i64 %t28) %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i64 0 store { ptr, i64, i64 } { ptr @.str.4001, i64 2, i64 0 }, ptr %t30 %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i64 1 store { ptr, i64, i64 } { ptr @.str.4002, i64 2, i64 0 }, ptr %t31 %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i64 2 store { ptr, i64, i64 } { ptr @.str.4003, i64 3, i64 0 }, ptr %t32 %t33 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i64 3 store { ptr, i64, i64 } { ptr @.str.4004, i64 3, i64 0 }, ptr %t33 %t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i64 4 store { ptr, i64, i64 } { ptr @.str.4005, i64 3, i64 0 }, ptr %t34 %t35 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i64 5 store { ptr, i64, i64 } { ptr @.str.4006, i64 3, i64 0 }, ptr %t35 %t36 = insertvalue { ptr, i64, i64 } undef, ptr %t29, 0 %t37 = insertvalue { ptr, i64, i64 } %t36, i64 6, 1 %t38 = insertvalue { ptr, i64, i64 } %t37, i64 6, 2 store { ptr, i64, i64 } %t38, ptr %a26 br label %endif6032 endif6032: %t39 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 %t40 = load { ptr, i64, i64 }, ptr %a1 store i64 -1, ptr %a41 %t42 = load i64, ptr %t39 %t43 = load ptr, ptr %a14 store i64 0, ptr %a44 br label %find.cond6033 find.cond6033: %t45 = load i64, ptr %a44 %t46 = icmp slt i64 %t45, %t42 br i1 %t46, label %find.body6034, label %find.end6037 find.body6034: %t47 = getelementptr inbounds { ptr, i64, i64 }, ptr %t43, i64 %t45 %t48 = load { ptr, i64, i64 }, ptr %t47 store { ptr, i64, i64 } %t48, ptr %a49 store { ptr, i64, i64 } %t40, ptr %a50 %t51 = call i32 @finch_str_eq(ptr %a49, ptr %a50) %t52 = icmp ne i32 %t51, 0 br i1 %t52, label %find.hit6035, label %find.next6036 find.hit6035: store i64 %t45, ptr %a41 br label %find.end6037 find.next6036: %t53 = add i64 %t45, 1 store i64 %t53, ptr %a44 br label %find.cond6033 find.end6037: %t54 = load i64, ptr %a41 %t55 = load { ptr, i64, i64 }, ptr %a26 %t56 = extractvalue { ptr, i64, i64 } %t55, 1 %t57 = icmp uge i64 %t54, %t56 br i1 %t57, label %range6038, label %inrange6039 range6038: call void @finch_panic_index(ptr @.str.4007, i64 3221, i64 %t54, i64 %t56) unreachable inrange6039: %t58 = extractvalue { ptr, i64, i64 } %t55, 0 %t59 = getelementptr inbounds { ptr, i64, i64 }, ptr %t58, i64 %t54 %t60 = load { ptr, i64, i64 }, ptr %t59 store { ptr, i64, i64 } %t60, ptr %a61 call void @finch_str_copy(ptr %a62, ptr %a61) %t63 = load { ptr, i64, i64 }, ptr %a62 ret { ptr, i64, i64 } %t63 } define internal %S.gen.Val @finch.gen.binary(ptr %p0, %S.ast.Node %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca { ptr, i64, i64 }, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 %a106 = alloca { ptr, i64, i64 }, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca { ptr, i64, i64 }, align 16 %a110 = alloca { ptr, i64, i64 }, align 16 %a111 = alloca { ptr, i64, i64 }, align 16 %a114 = alloca { ptr, i64, i64 }, align 16 %a115 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca { ptr, i64, i64 }, align 16 %a118 = alloca { ptr, i64, i64 }, align 16 %a119 = alloca { ptr, i64, i64 }, align 16 %a120 = alloca { ptr, i64, i64 }, align 16 %a135 = alloca %S.gen.Val, align 16 %a145 = alloca %S.gen.Val, align 16 %a147 = alloca { ptr, i64, i64 }, align 16 %a148 = alloca { ptr, i64, i64 }, align 16 %a152 = alloca { ptr, i64, i64 }, align 16 %a153 = alloca { ptr, i64, i64 }, align 16 %a158 = alloca { ptr, i64, i64 }, align 16 %a159 = alloca { ptr, i64, i64 }, align 16 %a164 = alloca { ptr, i64, i64 }, align 16 %a165 = alloca { ptr, i64, i64 }, align 16 %a170 = alloca { ptr, i64, i64 }, align 16 %a171 = alloca { ptr, i64, i64 }, align 16 %a176 = alloca { ptr, i64, i64 }, align 16 %a177 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 %t3 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t4 = load { ptr, i64, i64 }, ptr %t3 store { ptr, i64, i64 } %t4, ptr %a5 call void @finch_str_copy(ptr %a6, ptr %a5) %t7 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t7, ptr %a8 %t9 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t9, ptr %a10 store { ptr, i64, i64 } { ptr @.str.4008, i64 2, i64 0 }, ptr %a11 %t12 = call i32 @finch_str_eq(ptr %a10, ptr %a11) %t13 = icmp ne i32 %t12, 0 br label %logic.from6040 logic.from6040: br i1 %t13, label %logic.end6042, label %logic.rhs6041 logic.rhs6041: %t14 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t14, ptr %a15 store { ptr, i64, i64 } { ptr @.str.4009, i64 2, i64 0 }, ptr %a16 %t17 = call i32 @finch_str_eq(ptr %a15, ptr %a16) %t18 = icmp ne i32 %t17, 0 br label %logic.rend6043 logic.rend6043: br label %logic.end6042 logic.end6042: %t19 = phi i1 [ true, %logic.from6040 ], [ %t18, %logic.rend6043 ] br i1 %t19, label %then6044, label %endif6046 then6044: %t20 = load ptr, ptr %a1 %t21 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t22 = load { ptr, i64, i64 }, ptr %t21 %t23 = extractvalue { ptr, i64, i64 } %t22, 1 %t24 = icmp uge i64 0, %t23 br i1 %t24, label %range6047, label %inrange6048 range6047: call void @finch_panic_index(ptr @.str.4010, i64 3227, i64 0, i64 %t23) unreachable inrange6048: %t25 = extractvalue { ptr, i64, i64 } %t22, 0 %t26 = getelementptr inbounds %S.ast.Node, ptr %t25, i64 0 %t27 = load %S.ast.Node, ptr %t26 %t28 = call { ptr, i64, i64 } @finch.gen.condition(ptr %t20, %S.ast.Node %t27) store { ptr, i64, i64 } %t28, ptr %a29 %t30 = load ptr, ptr %a1 %t31 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t30, { ptr, i64, i64 } { ptr @.str.4011, i64 10, i64 0 }) store { ptr, i64, i64 } %t31, ptr %a32 %t33 = load ptr, ptr %a1 %t34 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t33, { ptr, i64, i64 } { ptr @.str.4012, i64 9, i64 0 }) store { ptr, i64, i64 } %t34, ptr %a35 %t36 = load ptr, ptr %a1 %t37 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t36, { ptr, i64, i64 } { ptr @.str.4013, i64 9, i64 0 }) store { ptr, i64, i64 } %t37, ptr %a38 %t39 = load ptr, ptr %a1 %t40 = load { ptr, i64, i64 }, ptr %a32 call void @finch.gen.br(ptr %t39, { ptr, i64, i64 } %t40) %t41 = load ptr, ptr %a1 %t42 = load { ptr, i64, i64 }, ptr %a32 call void @finch.gen.label(ptr %t41, { ptr, i64, i64 } %t42) %t43 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t43, ptr %a44 store { ptr, i64, i64 } { ptr @.str.4014, i64 2, i64 0 }, ptr %a45 %t46 = call i32 @finch_str_eq(ptr %a44, ptr %a45) %t47 = icmp ne i32 %t46, 0 br i1 %t47, label %then6049, label %else6050 then6049: %t48 = load ptr, ptr %a1 %t49 = load { ptr, i64, i64 }, ptr %a29 %t50 = load { ptr, i64, i64 }, ptr %a35 %t51 = load { ptr, i64, i64 }, ptr %a38 call void @finch.gen.condBr(ptr %t48, { ptr, i64, i64 } %t49, { ptr, i64, i64 } %t50, { ptr, i64, i64 } %t51) br label %endif6051 else6050: %t52 = load ptr, ptr %a1 %t53 = load { ptr, i64, i64 }, ptr %a29 %t54 = load { ptr, i64, i64 }, ptr %a38 %t55 = load { ptr, i64, i64 }, ptr %a35 call void @finch.gen.condBr(ptr %t52, { ptr, i64, i64 } %t53, { ptr, i64, i64 } %t54, { ptr, i64, i64 } %t55) br label %endif6051 endif6051: %t56 = load ptr, ptr %a1 %t57 = load { ptr, i64, i64 }, ptr %a35 call void @finch.gen.label(ptr %t56, { ptr, i64, i64 } %t57) %t58 = load ptr, ptr %a1 %t59 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t60 = load { ptr, i64, i64 }, ptr %t59 %t61 = extractvalue { ptr, i64, i64 } %t60, 1 %t62 = icmp uge i64 1, %t61 br i1 %t62, label %range6052, label %inrange6053 range6052: call void @finch_panic_index(ptr @.str.4015, i64 3239, i64 1, i64 %t61) unreachable inrange6053: %t63 = extractvalue { ptr, i64, i64 } %t60, 0 %t64 = getelementptr inbounds %S.ast.Node, ptr %t63, i64 1 %t65 = load %S.ast.Node, ptr %t64 %t66 = call { ptr, i64, i64 } @finch.gen.condition(ptr %t58, %S.ast.Node %t65) store { ptr, i64, i64 } %t66, ptr %a67 %t68 = load ptr, ptr %a1 %t69 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t68, { ptr, i64, i64 } { ptr @.str.4016, i64 10, i64 0 }) store { ptr, i64, i64 } %t69, ptr %a70 %t71 = load ptr, ptr %a1 %t72 = load { ptr, i64, i64 }, ptr %a70 call void @finch.gen.br(ptr %t71, { ptr, i64, i64 } %t72) %t73 = load ptr, ptr %a1 %t74 = load { ptr, i64, i64 }, ptr %a70 call void @finch.gen.label(ptr %t73, { ptr, i64, i64 } %t74) %t75 = load ptr, ptr %a1 %t76 = load { ptr, i64, i64 }, ptr %a38 call void @finch.gen.br(ptr %t75, { ptr, i64, i64 } %t76) %t77 = load ptr, ptr %a1 %t78 = load { ptr, i64, i64 }, ptr %a38 call void @finch.gen.label(ptr %t77, { ptr, i64, i64 } %t78) store { ptr, i64, i64 } { ptr @.str.4017, i64 4, i64 0 }, ptr %a79 %t80 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t80, ptr %a81 store { ptr, i64, i64 } { ptr @.str.4018, i64 2, i64 0 }, ptr %a82 %t83 = call i32 @finch_str_eq(ptr %a81, ptr %a82) %t84 = icmp ne i32 %t83, 0 br i1 %t84, label %then6054, label %endif6056 then6054: store { ptr, i64, i64 } { ptr @.str.4019, i64 5, i64 0 }, ptr %a79 br label %endif6056 endif6056: %t85 = load ptr, ptr %a1 %t86 = load { ptr, i64, i64 }, ptr %a79 store { ptr, i64, i64 } { ptr @.str.4020, i64 9, i64 0 }, ptr %a88 store { ptr, i64, i64 } %t86, ptr %a89 call void @finch_str_concat(ptr %a87, ptr %a88, ptr %a89) %t90 = load { ptr, i64, i64 }, ptr %a87 store { ptr, i64, i64 } %t90, ptr %a92 store { ptr, i64, i64 } { ptr @.str.4021, i64 3, i64 0 }, ptr %a93 call void @finch_str_concat(ptr %a91, ptr %a92, ptr %a93) %t94 = load { ptr, i64, i64 }, ptr %a91 %t95 = load { ptr, i64, i64 }, ptr %a32 store { ptr, i64, i64 } %t94, ptr %a97 store { ptr, i64, i64 } %t95, ptr %a98 call void @finch_str_concat(ptr %a96, ptr %a97, ptr %a98) %t99 = load { ptr, i64, i64 }, ptr %a96 store { ptr, i64, i64 } %t99, ptr %a101 store { ptr, i64, i64 } { ptr @.str.4022, i64 6, i64 0 }, ptr %a102 call void @finch_str_concat(ptr %a100, ptr %a101, ptr %a102) %t103 = load { ptr, i64, i64 }, ptr %a100 %t104 = load { ptr, i64, i64 }, ptr %a67 store { ptr, i64, i64 } %t103, ptr %a106 store { ptr, i64, i64 } %t104, ptr %a107 call void @finch_str_concat(ptr %a105, ptr %a106, ptr %a107) %t108 = load { ptr, i64, i64 }, ptr %a105 store { ptr, i64, i64 } %t108, ptr %a110 store { ptr, i64, i64 } { ptr @.str.4023, i64 3, i64 0 }, ptr %a111 call void @finch_str_concat(ptr %a109, ptr %a110, ptr %a111) %t112 = load { ptr, i64, i64 }, ptr %a109 %t113 = load { ptr, i64, i64 }, ptr %a70 store { ptr, i64, i64 } %t112, ptr %a115 store { ptr, i64, i64 } %t113, ptr %a116 call void @finch_str_concat(ptr %a114, ptr %a115, ptr %a116) %t117 = load { ptr, i64, i64 }, ptr %a114 store { ptr, i64, i64 } %t117, ptr %a119 store { ptr, i64, i64 } { ptr @.str.4024, i64 2, i64 0 }, ptr %a120 call void @finch_str_concat(ptr %a118, ptr %a119, ptr %a120) %t121 = load { ptr, i64, i64 }, ptr %a118 %t122 = call { ptr, i64, i64 } @finch.gen.op(ptr %t85, { ptr, i64, i64 } %t121) %t123 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t122, 0 %t124 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4025, i64 4, i64 0 }) %t125 = insertvalue %S.gen.Val %t123, %S.ast.Type %t124, 1 ret %S.gen.Val %t125 endif6046: %t126 = load ptr, ptr %a1 %t127 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t128 = load { ptr, i64, i64 }, ptr %t127 %t129 = extractvalue { ptr, i64, i64 } %t128, 1 %t130 = icmp uge i64 0, %t129 br i1 %t130, label %range6057, label %inrange6058 range6057: call void @finch_panic_index(ptr @.str.4026, i64 3251, i64 0, i64 %t129) unreachable inrange6058: %t131 = extractvalue { ptr, i64, i64 } %t128, 0 %t132 = getelementptr inbounds %S.ast.Node, ptr %t131, i64 0 %t133 = load %S.ast.Node, ptr %t132 %t134 = call %S.gen.Val @finch.gen.expr(ptr %t126, %S.ast.Node %t133) store %S.gen.Val %t134, ptr %a135 %t136 = load ptr, ptr %a1 %t137 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t138 = load { ptr, i64, i64 }, ptr %t137 %t139 = extractvalue { ptr, i64, i64 } %t138, 1 %t140 = icmp uge i64 1, %t139 br i1 %t140, label %range6059, label %inrange6060 range6059: call void @finch_panic_index(ptr @.str.4027, i64 3252, i64 1, i64 %t139) unreachable inrange6060: %t141 = extractvalue { ptr, i64, i64 } %t138, 0 %t142 = getelementptr inbounds %S.ast.Node, ptr %t141, i64 1 %t143 = load %S.ast.Node, ptr %t142 %t144 = call %S.gen.Val @finch.gen.expr(ptr %t136, %S.ast.Node %t143) store %S.gen.Val %t144, ptr %a145 %t146 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t146, ptr %a147 store { ptr, i64, i64 } { ptr @.str.4028, i64 2, i64 0 }, ptr %a148 %t149 = call i32 @finch_str_eq(ptr %a147, ptr %a148) %t150 = icmp ne i32 %t149, 0 br label %logic.from6061 logic.from6061: br i1 %t150, label %logic.end6063, label %logic.rhs6062 logic.rhs6062: %t151 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t151, ptr %a152 store { ptr, i64, i64 } { ptr @.str.4029, i64 2, i64 0 }, ptr %a153 %t154 = call i32 @finch_str_eq(ptr %a152, ptr %a153) %t155 = icmp ne i32 %t154, 0 br label %logic.rend6064 logic.rend6064: br label %logic.end6063 logic.end6063: %t156 = phi i1 [ true, %logic.from6061 ], [ %t155, %logic.rend6064 ] br label %logic.from6065 logic.from6065: br i1 %t156, label %logic.end6067, label %logic.rhs6066 logic.rhs6066: %t157 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t157, ptr %a158 store { ptr, i64, i64 } { ptr @.str.4030, i64 1, i64 0 }, ptr %a159 %t160 = call i32 @finch_str_eq(ptr %a158, ptr %a159) %t161 = icmp ne i32 %t160, 0 br label %logic.rend6068 logic.rend6068: br label %logic.end6067 logic.end6067: %t162 = phi i1 [ true, %logic.from6065 ], [ %t161, %logic.rend6068 ] br label %logic.from6069 logic.from6069: br i1 %t162, label %logic.end6071, label %logic.rhs6070 logic.rhs6070: %t163 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t163, ptr %a164 store { ptr, i64, i64 } { ptr @.str.4031, i64 2, i64 0 }, ptr %a165 %t166 = call i32 @finch_str_eq(ptr %a164, ptr %a165) %t167 = icmp ne i32 %t166, 0 br label %logic.rend6072 logic.rend6072: br label %logic.end6071 logic.end6071: %t168 = phi i1 [ true, %logic.from6069 ], [ %t167, %logic.rend6072 ] br label %logic.from6073 logic.from6073: br i1 %t168, label %logic.end6075, label %logic.rhs6074 logic.rhs6074: %t169 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t169, ptr %a170 store { ptr, i64, i64 } { ptr @.str.4032, i64 1, i64 0 }, ptr %a171 %t172 = call i32 @finch_str_eq(ptr %a170, ptr %a171) %t173 = icmp ne i32 %t172, 0 br label %logic.rend6076 logic.rend6076: br label %logic.end6075 logic.end6075: %t174 = phi i1 [ true, %logic.from6073 ], [ %t173, %logic.rend6076 ] br label %logic.from6077 logic.from6077: br i1 %t174, label %logic.end6079, label %logic.rhs6078 logic.rhs6078: %t175 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t175, ptr %a176 store { ptr, i64, i64 } { ptr @.str.4033, i64 2, i64 0 }, ptr %a177 %t178 = call i32 @finch_str_eq(ptr %a176, ptr %a177) %t179 = icmp ne i32 %t178, 0 br label %logic.rend6080 logic.rend6080: br label %logic.end6079 logic.end6079: %t180 = phi i1 [ true, %logic.from6077 ], [ %t179, %logic.rend6080 ] br i1 %t180, label %then6081, label %endif6083 then6081: %t181 = load ptr, ptr %a1 %t182 = load { ptr, i64, i64 }, ptr %a8 %t183 = load %S.gen.Val, ptr %a135 %t184 = load %S.gen.Val, ptr %a145 %t185 = load %S.ast.Node, ptr %a2 %t186 = call %S.gen.Val @finch.gen.compare(ptr %t181, { ptr, i64, i64 } %t182, %S.gen.Val %t183, %S.gen.Val %t184, %S.ast.Node %t185) ret %S.gen.Val %t186 endif6083: %t187 = load ptr, ptr %a1 %t188 = load { ptr, i64, i64 }, ptr %a8 %t189 = load %S.gen.Val, ptr %a135 %t190 = load %S.gen.Val, ptr %a145 %t191 = load %S.ast.Node, ptr %a2 %t192 = call %S.gen.Val @finch.gen.arith(ptr %t187, { ptr, i64, i64 } %t188, %S.gen.Val %t189, %S.gen.Val %t190, %S.ast.Node %t191) ret %S.gen.Val %t192 } define internal %S.gen.Val @finch.gen.arrayLit(ptr %p0, %S.ast.Node %p1, %S.ast.Type %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a3 = alloca %S.ast.Type, align 16 %a5 = alloca %S.ast.Type, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca %S.ast.Type, align 16 %a20 = alloca %S.ast.Type, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca i64, align 16 %a38 = alloca %S.ast.Node, align 16 %a39 = alloca %S.gen.Val, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca %S.ast.Type, align 16 %a52 = alloca %S.ast.Type, align 16 %a75 = alloca %S.ast.Type, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca { ptr, i64, i64 }, align 16 %a106 = alloca { ptr, i64, i64 }, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a110 = alloca { ptr, i64, i64 }, align 16 %a111 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 %a117 = alloca i64, align 16 %a124 = alloca { ptr, i64, i64 }, align 16 %a125 = alloca { ptr, i64, i64 }, align 16 %a126 = alloca { ptr, i64, i64 }, align 16 %a128 = alloca { ptr, i64, i64 }, align 16 %a129 = alloca { ptr, i64, i64 }, align 16 %a130 = alloca { ptr, i64, i64 }, align 16 %a133 = alloca { ptr, i64, i64 }, align 16 %a134 = alloca { ptr, i64, i64 }, align 16 %a135 = alloca { ptr, i64, i64 }, align 16 %a137 = alloca { ptr, i64, i64 }, align 16 %a138 = alloca { ptr, i64, i64 }, align 16 %a139 = alloca { ptr, i64, i64 }, align 16 %a142 = alloca { ptr, i64, i64 }, align 16 %a144 = alloca { ptr, i64, i64 }, align 16 %a145 = alloca { ptr, i64, i64 }, align 16 %a146 = alloca { ptr, i64, i64 }, align 16 %a149 = alloca { ptr, i64, i64 }, align 16 %a166 = alloca { ptr, i64, i64 }, align 16 %a167 = alloca { ptr, i64, i64 }, align 16 %a168 = alloca { ptr, i64, i64 }, align 16 %a170 = alloca { ptr, i64, i64 }, align 16 %a171 = alloca { ptr, i64, i64 }, align 16 %a172 = alloca { ptr, i64, i64 }, align 16 %a175 = alloca { ptr, i64, i64 }, align 16 %a178 = alloca { ptr, i64, i64 }, align 16 %a179 = alloca { ptr, i64, i64 }, align 16 %a180 = alloca { ptr, i64, i64 }, align 16 %a182 = alloca { ptr, i64, i64 }, align 16 %a183 = alloca { ptr, i64, i64 }, align 16 %a184 = alloca { ptr, i64, i64 }, align 16 %a187 = alloca { ptr, i64, i64 }, align 16 %a188 = alloca { ptr, i64, i64 }, align 16 %a189 = alloca { ptr, i64, i64 }, align 16 %a191 = alloca { ptr, i64, i64 }, align 16 %a192 = alloca { ptr, i64, i64 }, align 16 %a193 = alloca { ptr, i64, i64 }, align 16 %a196 = alloca { ptr, i64, i64 }, align 16 %a199 = alloca { ptr, i64, i64 }, align 16 %a200 = alloca { ptr, i64, i64 }, align 16 %a201 = alloca { ptr, i64, i64 }, align 16 %a203 = alloca { ptr, i64, i64 }, align 16 %a204 = alloca { ptr, i64, i64 }, align 16 %a205 = alloca { ptr, i64, i64 }, align 16 %a208 = alloca { ptr, i64, i64 }, align 16 %a209 = alloca { ptr, i64, i64 }, align 16 %a210 = alloca { ptr, i64, i64 }, align 16 %a212 = alloca { ptr, i64, i64 }, align 16 %a213 = alloca { ptr, i64, i64 }, align 16 %a214 = alloca { ptr, i64, i64 }, align 16 %a217 = alloca { ptr, i64, i64 }, align 16 %a219 = alloca { ptr, i64, i64 }, align 16 %a220 = alloca { ptr, i64, i64 }, align 16 %a224 = alloca %S.ast.Type, align 16 %a225 = alloca %S.ast.Type, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 store %S.ast.Type %p2, ptr %a3 %t4 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4034, i64 4, i64 0 }) store %S.ast.Type %t4, ptr %a5 %t6 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 %t7 = load { ptr, i64, i64 }, ptr %t6 store { ptr, i64, i64 } %t7, ptr %a8 store { ptr, i64, i64 } { ptr @.str.4035, i64 5, i64 0 }, ptr %a9 %t10 = call i32 @finch_str_eq(ptr %a8, ptr %a9) %t11 = icmp ne i32 %t10, 0 br i1 %t11, label %then6084, label %else6085 then6084: %t12 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 %t13 = load { ptr, i64, i64 }, ptr %t12 %t14 = extractvalue { ptr, i64, i64 } %t13, 1 %t15 = icmp uge i64 0, %t14 br i1 %t15, label %range6087, label %inrange6088 range6087: call void @finch_panic_index(ptr @.str.4036, i64 3262, i64 0, i64 %t14) unreachable inrange6088: %t16 = extractvalue { ptr, i64, i64 } %t13, 0 %t17 = getelementptr inbounds %S.ast.Type, ptr %t16, i64 0 %t18 = load %S.ast.Type, ptr %t17 store %S.ast.Type %t18, ptr %a19 call void @finch.copy.S_ast_Type(ptr %a20, ptr %a19) %t21 = load %S.ast.Type, ptr %a20 store %S.ast.Type %t21, ptr %a5 br label %endif6086 else6085: %t22 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t22, i32 0, i32 1 %t24 = load i64, ptr %t23 %t25 = icmp eq i64 %t24, 0 br i1 %t25, label %then6089, label %endif6091 then6089: %t26 = load ptr, ptr %a1 %t27 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t26, %S.ast.Node %t27, { ptr, i64, i64 } { ptr @.str.4037, i64 47, i64 0 }) br label %endif6091 endif6091: br label %endif6086 endif6086: store { ptr, i64, i64 } zeroinitializer, ptr %a28 %t29 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 store i64 0, ptr %a30 br label %each.cond6092 each.cond6092: %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i32 0, i32 1 %t32 = load i64, ptr %t31 %t33 = load i64, ptr %a30 %t34 = icmp slt i64 %t33, %t32 br i1 %t34, label %each.body6093, label %each.end6095 each.body6093: %t35 = load ptr, ptr %t29 %t36 = getelementptr inbounds %S.ast.Node, ptr %t35, i64 %t33 %t37 = load %S.ast.Node, ptr %t36 store %S.ast.Node %t37, ptr %a38 store %S.gen.Val zeroinitializer, ptr %a39 %t40 = getelementptr inbounds %S.ast.Type, ptr %a5, i32 0, i32 0 %t41 = load { ptr, i64, i64 }, ptr %t40 store { ptr, i64, i64 } %t41, ptr %a42 store { ptr, i64, i64 } { ptr @.str.4038, i64 4, i64 0 }, ptr %a43 %t44 = call i32 @finch_str_eq(ptr %a42, ptr %a43) %t45 = icmp ne i32 %t44, 0 br i1 %t45, label %then6096, label %else6097 then6096: %t46 = load ptr, ptr %a1 %t47 = load %S.ast.Node, ptr %a38 %t48 = call %S.gen.Val @finch.gen.expr(ptr %t46, %S.ast.Node %t47) store %S.gen.Val %t48, ptr %a39 %t49 = getelementptr inbounds %S.gen.Val, ptr %a39, i32 0, i32 1 %t50 = load %S.ast.Type, ptr %t49 store %S.ast.Type %t50, ptr %a51 call void @finch.copy.S_ast_Type(ptr %a52, ptr %a51) %t53 = load %S.ast.Type, ptr %a52 store %S.ast.Type %t53, ptr %a5 br label %endif6098 else6097: %t54 = load ptr, ptr %a1 %t55 = load %S.ast.Node, ptr %a38 %t56 = load %S.ast.Type, ptr %a5 %t57 = call %S.gen.Val @finch.gen.exprWant(ptr %t54, %S.ast.Node %t55, %S.ast.Type %t56) store %S.gen.Val %t57, ptr %a39 br label %endif6098 endif6098: %t58 = load ptr, ptr %a1 %t59 = load %S.gen.Val, ptr %a39 %t60 = load %S.ast.Type, ptr %a5 %t61 = load %S.ast.Node, ptr %a38 %t62 = call %S.gen.Val @finch.gen.coerce(ptr %t58, %S.gen.Val %t59, %S.ast.Type %t60, %S.ast.Node %t61, { ptr, i64, i64 } { ptr @.str.4039, i64 27, i64 0 }) store %S.gen.Val %t62, ptr %a39 %t63 = getelementptr inbounds { ptr, i64, i64 }, ptr %a28, i32 0, i32 1 %t64 = load ptr, ptr %a1 %t65 = load %S.gen.Val, ptr %a39 %t66 = call { ptr, i64, i64 } @finch.gen.own(ptr %t64, %S.gen.Val %t65) %t67 = load i64, ptr %t63 %t68 = add i64 %t67, 1 call void @finch_arr_reserve(ptr %a28, i64 %t68, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t69 = load ptr, ptr %a28 %t70 = getelementptr inbounds { ptr, i64, i64 }, ptr %t69, i64 %t67 store { ptr, i64, i64 } %t66, ptr %t70 store i64 %t68, ptr %t63 br label %each.step6094 each.step6094: %t71 = load i64, ptr %a30 %t72 = add i64 %t71, 1 store i64 %t72, ptr %a30 br label %each.cond6092 each.end6095: %t73 = load %S.ast.Type, ptr %a5 %t74 = call %S.ast.Type @finch.ast.arrayOf(%S.ast.Type %t73) store %S.ast.Type %t74, ptr %a75 %t76 = getelementptr inbounds { ptr, i64, i64 }, ptr %a28, i32 0, i32 1 %t77 = load i64, ptr %t76 call void @finch_str_from_int(ptr %a78, i64 %t77) %t79 = load { ptr, i64, i64 }, ptr %a78 store { ptr, i64, i64 } %t79, ptr %a80 store { ptr, i64, i64 } { ptr @.str.4040, i64 4, i64 0 }, ptr %a81 %t82 = getelementptr inbounds { ptr, i64, i64 }, ptr %a28, i32 0, i32 1 %t83 = load i64, ptr %t82 %t84 = icmp sgt i64 %t83, 0 br i1 %t84, label %then6099, label %endif6101 then6099: %t85 = load ptr, ptr %a1 %t86 = load { ptr, i64, i64 }, ptr %a80 store { ptr, i64, i64 } { ptr @.str.4041, i64 8, i64 0 }, ptr %a88 store { ptr, i64, i64 } %t86, ptr %a89 call void @finch_str_concat(ptr %a87, ptr %a88, ptr %a89) %t90 = load { ptr, i64, i64 }, ptr %a87 store { ptr, i64, i64 } %t90, ptr %a92 store { ptr, i64, i64 } { ptr @.str.4042, i64 2, i64 0 }, ptr %a93 call void @finch_str_concat(ptr %a91, ptr %a92, ptr %a93) %t94 = load { ptr, i64, i64 }, ptr %a91 %t95 = load ptr, ptr %a1 %t96 = load %S.ast.Type, ptr %a5 %t97 = call { ptr, i64, i64 } @finch.gen.sizeOf(ptr %t95, %S.ast.Type %t96) store { ptr, i64, i64 } %t94, ptr %a99 store { ptr, i64, i64 } %t97, ptr %a100 call void @finch_str_concat(ptr %a98, ptr %a99, ptr %a100) %t101 = load { ptr, i64, i64 }, ptr %a98 %t102 = call { ptr, i64, i64 } @finch.gen.op(ptr %t85, { ptr, i64, i64 } %t101) store { ptr, i64, i64 } %t102, ptr %a103 %t104 = load ptr, ptr %a1 %t105 = load { ptr, i64, i64 }, ptr %a103 store { ptr, i64, i64 } { ptr @.str.4043, i64 26, i64 0 }, ptr %a107 store { ptr, i64, i64 } %t105, ptr %a108 call void @finch_str_concat(ptr %a106, ptr %a107, ptr %a108) %t109 = load { ptr, i64, i64 }, ptr %a106 store { ptr, i64, i64 } %t109, ptr %a111 store { ptr, i64, i64 } { ptr @.str.4044, i64 1, i64 0 }, ptr %a112 call void @finch_str_concat(ptr %a110, ptr %a111, ptr %a112) %t113 = load { ptr, i64, i64 }, ptr %a110 %t114 = call { ptr, i64, i64 } @finch.gen.op(ptr %t104, { ptr, i64, i64 } %t113) store { ptr, i64, i64 } %t114, ptr %a81 br label %endif6101 endif6101: %t115 = getelementptr inbounds { ptr, i64, i64 }, ptr %a28, i32 0, i32 1 %t116 = load i64, ptr %t115 store i64 0, ptr %a117 br label %for.cond6102 for.cond6102: %t118 = load i64, ptr %a117 %t119 = icmp slt i64 %t118, %t116 br i1 %t119, label %for.body6103, label %for.end6105 for.body6103: %t120 = load ptr, ptr %a1 %t121 = load ptr, ptr %a1 %t122 = load %S.ast.Type, ptr %a5 %t123 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t121, %S.ast.Type %t122) store { ptr, i64, i64 } { ptr @.str.4045, i64 23, i64 0 }, ptr %a125 store { ptr, i64, i64 } %t123, ptr %a126 call void @finch_str_concat(ptr %a124, ptr %a125, ptr %a126) %t127 = load { ptr, i64, i64 }, ptr %a124 store { ptr, i64, i64 } %t127, ptr %a129 store { ptr, i64, i64 } { ptr @.str.4046, i64 6, i64 0 }, ptr %a130 call void @finch_str_concat(ptr %a128, ptr %a129, ptr %a130) %t131 = load { ptr, i64, i64 }, ptr %a128 %t132 = load { ptr, i64, i64 }, ptr %a81 store { ptr, i64, i64 } %t131, ptr %a134 store { ptr, i64, i64 } %t132, ptr %a135 call void @finch_str_concat(ptr %a133, ptr %a134, ptr %a135) %t136 = load { ptr, i64, i64 }, ptr %a133 store { ptr, i64, i64 } %t136, ptr %a138 store { ptr, i64, i64 } { ptr @.str.4047, i64 6, i64 0 }, ptr %a139 call void @finch_str_concat(ptr %a137, ptr %a138, ptr %a139) %t140 = load { ptr, i64, i64 }, ptr %a137 %t141 = load i64, ptr %a117 call void @finch_str_from_int(ptr %a142, i64 %t141) %t143 = load { ptr, i64, i64 }, ptr %a142 store { ptr, i64, i64 } %t140, ptr %a145 store { ptr, i64, i64 } %t143, ptr %a146 call void @finch_str_concat(ptr %a144, ptr %a145, ptr %a146) %t147 = load { ptr, i64, i64 }, ptr %a144 %t148 = call { ptr, i64, i64 } @finch.gen.op(ptr %t120, { ptr, i64, i64 } %t147) store { ptr, i64, i64 } %t148, ptr %a149 %t150 = load ptr, ptr %a1 %t151 = load ptr, ptr %a1 %t152 = load %S.ast.Type, ptr %a5 %t153 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t151, %S.ast.Type %t152) %t154 = load i64, ptr %a117 %t155 = load { ptr, i64, i64 }, ptr %a28 %t156 = extractvalue { ptr, i64, i64 } %t155, 1 %t157 = icmp uge i64 %t154, %t156 br i1 %t157, label %range6106, label %inrange6107 range6106: call void @finch_panic_index(ptr @.str.4048, i64 3287, i64 %t154, i64 %t156) unreachable inrange6107: %t158 = extractvalue { ptr, i64, i64 } %t155, 0 %t159 = getelementptr inbounds { ptr, i64, i64 }, ptr %t158, i64 %t154 %t160 = load { ptr, i64, i64 }, ptr %t159 %t161 = load { ptr, i64, i64 }, ptr %a149 call void @finch.gen.store(ptr %t150, { ptr, i64, i64 } %t153, { ptr, i64, i64 } %t160, { ptr, i64, i64 } %t161) br label %for.step6104 for.step6104: %t162 = load i64, ptr %a117 %t163 = add i64 %t162, 1 store i64 %t163, ptr %a117 br label %for.cond6102 for.end6105: %t164 = load ptr, ptr %a1 %t165 = load { ptr, i64, i64 }, ptr %a81 store { ptr, i64, i64 } { ptr @.str.4049, i64 41, i64 0 }, ptr %a167 store { ptr, i64, i64 } %t165, ptr %a168 call void @finch_str_concat(ptr %a166, ptr %a167, ptr %a168) %t169 = load { ptr, i64, i64 }, ptr %a166 store { ptr, i64, i64 } %t169, ptr %a171 store { ptr, i64, i64 } { ptr @.str.4050, i64 3, i64 0 }, ptr %a172 call void @finch_str_concat(ptr %a170, ptr %a171, ptr %a172) %t173 = load { ptr, i64, i64 }, ptr %a170 %t174 = call { ptr, i64, i64 } @finch.gen.op(ptr %t164, { ptr, i64, i64 } %t173) store { ptr, i64, i64 } %t174, ptr %a175 %t176 = load ptr, ptr %a1 %t177 = load { ptr, i64, i64 }, ptr %a175 store { ptr, i64, i64 } { ptr @.str.4051, i64 30, i64 0 }, ptr %a179 store { ptr, i64, i64 } %t177, ptr %a180 call void @finch_str_concat(ptr %a178, ptr %a179, ptr %a180) %t181 = load { ptr, i64, i64 }, ptr %a178 store { ptr, i64, i64 } %t181, ptr %a183 store { ptr, i64, i64 } { ptr @.str.4052, i64 6, i64 0 }, ptr %a184 call void @finch_str_concat(ptr %a182, ptr %a183, ptr %a184) %t185 = load { ptr, i64, i64 }, ptr %a182 %t186 = load { ptr, i64, i64 }, ptr %a80 store { ptr, i64, i64 } %t185, ptr %a188 store { ptr, i64, i64 } %t186, ptr %a189 call void @finch_str_concat(ptr %a187, ptr %a188, ptr %a189) %t190 = load { ptr, i64, i64 }, ptr %a187 store { ptr, i64, i64 } %t190, ptr %a192 store { ptr, i64, i64 } { ptr @.str.4053, i64 3, i64 0 }, ptr %a193 call void @finch_str_concat(ptr %a191, ptr %a192, ptr %a193) %t194 = load { ptr, i64, i64 }, ptr %a191 %t195 = call { ptr, i64, i64 } @finch.gen.op(ptr %t176, { ptr, i64, i64 } %t194) store { ptr, i64, i64 } %t195, ptr %a196 %t197 = load ptr, ptr %a1 %t198 = load { ptr, i64, i64 }, ptr %a196 store { ptr, i64, i64 } { ptr @.str.4054, i64 30, i64 0 }, ptr %a200 store { ptr, i64, i64 } %t198, ptr %a201 call void @finch_str_concat(ptr %a199, ptr %a200, ptr %a201) %t202 = load { ptr, i64, i64 }, ptr %a199 store { ptr, i64, i64 } %t202, ptr %a204 store { ptr, i64, i64 } { ptr @.str.4055, i64 6, i64 0 }, ptr %a205 call void @finch_str_concat(ptr %a203, ptr %a204, ptr %a205) %t206 = load { ptr, i64, i64 }, ptr %a203 %t207 = load { ptr, i64, i64 }, ptr %a80 store { ptr, i64, i64 } %t206, ptr %a209 store { ptr, i64, i64 } %t207, ptr %a210 call void @finch_str_concat(ptr %a208, ptr %a209, ptr %a210) %t211 = load { ptr, i64, i64 }, ptr %a208 store { ptr, i64, i64 } %t211, ptr %a213 store { ptr, i64, i64 } { ptr @.str.4056, i64 3, i64 0 }, ptr %a214 call void @finch_str_concat(ptr %a212, ptr %a213, ptr %a214) %t215 = load { ptr, i64, i64 }, ptr %a212 %t216 = call { ptr, i64, i64 } @finch.gen.op(ptr %t197, { ptr, i64, i64 } %t215) store { ptr, i64, i64 } %t216, ptr %a217 %t218 = load { ptr, i64, i64 }, ptr %a217 store { ptr, i64, i64 } %t218, ptr %a219 call void @finch_str_copy(ptr %a220, ptr %a219) %t221 = load { ptr, i64, i64 }, ptr %a220 %t222 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t221, 0 %t223 = load %S.ast.Type, ptr %a75 store %S.ast.Type %t223, ptr %a224 call void @finch.copy.S_ast_Type(ptr %a225, ptr %a224) %t226 = load %S.ast.Type, ptr %a225 %t227 = insertvalue %S.gen.Val %t222, %S.ast.Type %t226, 1 %t228 = insertvalue %S.gen.Val %t227, i1 true, 2 ret %S.gen.Val %t228 } define internal void @finch.copy.S_gen_Place(ptr %dst, ptr %src) { entry: %t1 = load %S.gen.Place, ptr %src store %S.gen.Place %t1, ptr %dst %t2 = getelementptr inbounds %S.gen.Place, ptr %dst, i32 0, i32 0 %t3 = getelementptr inbounds %S.gen.Place, ptr %src, i32 0, i32 0 call void @finch_str_copy(ptr %t2, ptr %t3) %t4 = getelementptr inbounds %S.gen.Place, ptr %dst, i32 0, i32 1 %t5 = getelementptr inbounds %S.gen.Place, ptr %src, i32 0, i32 1 call void @finch.copy.S_ast_Type(ptr %t4, ptr %t5) ret void } define internal %S.gen.Place @finch.gen.place(ptr %p0, %S.ast.Node %p1, i1 %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a3 = alloca i1, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca %S.gen.Ref, align 16 %a40 = alloca %S.gen.Place, align 16 %a41 = alloca %S.gen.Place, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 store i1 %p2, ptr %a3 %t4 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 %t5 = load { ptr, i64, i64 }, ptr %t4 store { ptr, i64, i64 } %t5, ptr %a6 store { ptr, i64, i64 } { ptr @.str.4057, i64 3, i64 0 }, ptr %a7 %t8 = call i32 @finch_str_eq(ptr %a6, ptr %a7) %t9 = icmp ne i32 %t8, 0 br label %logic.from6108 logic.from6108: br i1 %t9, label %logic.rhs6109, label %logic.end6110 logic.rhs6109: %t10 = load ptr, ptr %a1 %t11 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t12 = load { ptr, i64, i64 }, ptr %t11 %t13 = call i64 @finch.gen.lookup(ptr %t10, { ptr, i64, i64 } %t12) %t14 = icmp slt i64 %t13, 0 br label %logic.rend6111 logic.rend6111: br label %logic.end6110 logic.end6110: %t15 = phi i1 [ false, %logic.from6108 ], [ %t14, %logic.rend6111 ] br i1 %t15, label %then6112, label %endif6114 then6112: %t16 = load ptr, ptr %a1 %t17 = load %S.ast.Node, ptr %a2 %t18 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t19 = load { ptr, i64, i64 }, ptr %t18 store { ptr, i64, i64 } { ptr @.str.4058, i64 28, i64 0 }, ptr %a21 store { ptr, i64, i64 } %t19, ptr %a22 call void @finch_str_concat(ptr %a20, ptr %a21, ptr %a22) %t23 = load { ptr, i64, i64 }, ptr %a20 store { ptr, i64, i64 } %t23, ptr %a25 store { ptr, i64, i64 } { ptr @.str.4059, i64 1, i64 0 }, ptr %a26 call void @finch_str_concat(ptr %a24, ptr %a25, ptr %a26) %t27 = load { ptr, i64, i64 }, ptr %a24 call void @finch.gen.fail(ptr %t16, %S.ast.Node %t17, { ptr, i64, i64 } %t27) br label %endif6114 endif6114: %t28 = load ptr, ptr %a1 %t29 = load %S.ast.Node, ptr %a2 %t30 = load i1, ptr %a3 %t31 = call %S.gen.Ref @finch.gen.ref(ptr %t28, %S.ast.Node %t29, i1 %t30) store %S.gen.Ref %t31, ptr %a32 %t33 = getelementptr inbounds %S.gen.Ref, ptr %a32, i32 0, i32 0 %t34 = load i1, ptr %t33 %t35 = xor i1 %t34, true br i1 %t35, label %then6115, label %endif6117 then6115: %t36 = load ptr, ptr %a1 %t37 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t36, %S.ast.Node %t37, { ptr, i64, i64 } { ptr @.str.4060, i64 60, i64 0 }) br label %endif6117 endif6117: %t38 = getelementptr inbounds %S.gen.Ref, ptr %a32, i32 0, i32 1 %t39 = load %S.gen.Place, ptr %t38 store %S.gen.Place %t39, ptr %a40 call void @finch.copy.S_gen_Place(ptr %a41, ptr %a40) %t42 = load %S.gen.Place, ptr %a41 ret %S.gen.Place %t42 } define internal void @finch.copy.S_cimport_CConst(ptr %dst, ptr %src) { entry: %t1 = load %S.cimport.CConst, ptr %src store %S.cimport.CConst %t1, ptr %dst %t2 = getelementptr inbounds %S.cimport.CConst, ptr %dst, i32 0, i32 3 %t3 = getelementptr inbounds %S.cimport.CConst, ptr %src, i32 0, i32 3 call void @finch_str_copy(ptr %t2, ptr %t3) ret void } define internal %S.gen.Ref @finch.gen.ref(ptr %p0, %S.ast.Node %p1, i1 %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a3 = alloca i1, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca i64, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca %S.cimport.CConst, align 16 %a44 = alloca %S.cimport.CConst, align 16 %a46 = alloca %S.cimport.CConst, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a85 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a104 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 %a110 = alloca { ptr, i64, i64 }, align 16 %a113 = alloca { ptr, i64, i64 }, align 16 %a114 = alloca { ptr, i64, i64 }, align 16 %a119 = alloca { ptr, i64, i64 }, align 16 %a120 = alloca { ptr, i64, i64 }, align 16 %a126 = alloca { ptr, i64, i64 }, align 16 %a127 = alloca { ptr, i64, i64 }, align 16 %a128 = alloca { ptr, i64, i64 }, align 16 %a130 = alloca { ptr, i64, i64 }, align 16 %a131 = alloca { ptr, i64, i64 }, align 16 %a132 = alloca { ptr, i64, i64 }, align 16 %a147 = alloca { ptr, i64, i64 }, align 16 %a158 = alloca { ptr, i64, i64 }, align 16 %a161 = alloca { ptr, i64, i64 }, align 16 %a162 = alloca { ptr, i64, i64 }, align 16 %a170 = alloca %S.ast.Type, align 16 %a177 = alloca { ptr, i64, i64 }, align 16 %a178 = alloca { ptr, i64, i64 }, align 16 %a179 = alloca { ptr, i64, i64 }, align 16 %a181 = alloca i64, align 16 %a184 = alloca i64, align 16 %a189 = alloca { ptr, i64, i64 }, align 16 %a190 = alloca { ptr, i64, i64 }, align 16 %a203 = alloca { ptr, i64, i64 }, align 16 %a204 = alloca { ptr, i64, i64 }, align 16 %a205 = alloca { ptr, i64, i64 }, align 16 %a217 = alloca { ptr, i64, i64 }, align 16 %a218 = alloca { ptr, i64, i64 }, align 16 %a219 = alloca { ptr, i64, i64 }, align 16 %a221 = alloca { ptr, i64, i64 }, align 16 %a222 = alloca { ptr, i64, i64 }, align 16 %a223 = alloca { ptr, i64, i64 }, align 16 %a228 = alloca { ptr, i64, i64 }, align 16 %a229 = alloca { ptr, i64, i64 }, align 16 %a230 = alloca { ptr, i64, i64 }, align 16 %a239 = alloca { ptr, i64, i64 }, align 16 %a240 = alloca { ptr, i64, i64 }, align 16 %a241 = alloca { ptr, i64, i64 }, align 16 %a245 = alloca %S.ast.Type, align 16 %a246 = alloca %S.ast.Type, align 16 %a260 = alloca { ptr, i64, i64 }, align 16 %a261 = alloca { ptr, i64, i64 }, align 16 %a262 = alloca { ptr, i64, i64 }, align 16 %a264 = alloca { ptr, i64, i64 }, align 16 %a265 = alloca { ptr, i64, i64 }, align 16 %a266 = alloca { ptr, i64, i64 }, align 16 %a270 = alloca { ptr, i64, i64 }, align 16 %a271 = alloca { ptr, i64, i64 }, align 16 %a272 = alloca { ptr, i64, i64 }, align 16 %a274 = alloca { ptr, i64, i64 }, align 16 %a275 = alloca { ptr, i64, i64 }, align 16 %a276 = alloca { ptr, i64, i64 }, align 16 %a282 = alloca { ptr, i64, i64 }, align 16 %a283 = alloca { ptr, i64, i64 }, align 16 %a284 = alloca { ptr, i64, i64 }, align 16 %a286 = alloca { ptr, i64, i64 }, align 16 %a287 = alloca { ptr, i64, i64 }, align 16 %a288 = alloca { ptr, i64, i64 }, align 16 %a293 = alloca %S.gen.Var, align 16 %a304 = alloca { ptr, i64, i64 }, align 16 %a305 = alloca { ptr, i64, i64 }, align 16 %a306 = alloca { ptr, i64, i64 }, align 16 %a308 = alloca { ptr, i64, i64 }, align 16 %a309 = alloca { ptr, i64, i64 }, align 16 %a310 = alloca { ptr, i64, i64 }, align 16 %a314 = alloca { ptr, i64, i64 }, align 16 %a315 = alloca { ptr, i64, i64 }, align 16 %a316 = alloca { ptr, i64, i64 }, align 16 %a318 = alloca { ptr, i64, i64 }, align 16 %a319 = alloca { ptr, i64, i64 }, align 16 %a320 = alloca { ptr, i64, i64 }, align 16 %a331 = alloca { ptr, i64, i64 }, align 16 %a332 = alloca { ptr, i64, i64 }, align 16 %a337 = alloca %S.ast.Type, align 16 %a338 = alloca %S.ast.Type, align 16 %a344 = alloca { ptr, i64, i64 }, align 16 %a345 = alloca { ptr, i64, i64 }, align 16 %a354 = alloca { ptr, i64, i64 }, align 16 %a355 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 store i1 %p2, ptr %a3 %t4 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 %t5 = load { ptr, i64, i64 }, ptr %t4 store { ptr, i64, i64 } %t5, ptr %a6 store { ptr, i64, i64 } { ptr @.str.4061, i64 3, i64 0 }, ptr %a7 %t8 = call i32 @finch_str_eq(ptr %a6, ptr %a7) %t9 = icmp ne i32 %t8, 0 br i1 %t9, label %then6118, label %endif6120 then6118: %t10 = load ptr, ptr %a1 %t11 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t12 = load { ptr, i64, i64 }, ptr %t11 %t13 = call i64 @finch.gen.lookup(ptr %t10, { ptr, i64, i64 } %t12) store i64 %t13, ptr %a14 %t15 = load i64, ptr %a14 %t16 = icmp slt i64 %t15, 0 br label %logic.from6121 logic.from6121: br i1 %t16, label %logic.rhs6122, label %logic.end6123 logic.rhs6122: %t17 = load ptr, ptr %a1 %t18 = icmp eq ptr %t17, null br i1 %t18, label %panic6124, label %ok6125 panic6124: call void @finch_panic(ptr @.str.4062, i64 3311, ptr @.str.4063) unreachable ok6125: %t19 = getelementptr inbounds %S.gen.Gen, ptr %t17, i32 0, i32 24 %t20 = getelementptr inbounds %S.cimport.CImports, ptr %t19, i32 0, i32 1 %t21 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t22 = load { ptr, i64, i64 }, ptr %t21 store { ptr, i64, i64 } %t22, ptr %a23 %t24 = call i64 @finch_map_find(ptr %t20, ptr %a23, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t25 = icmp sge i64 %t24, 0 br label %logic.rend6126 logic.rend6126: br label %logic.end6123 logic.end6123: %t26 = phi i1 [ false, %logic.from6121 ], [ %t25, %logic.rend6126 ] br i1 %t26, label %then6127, label %endif6129 then6127: %t27 = load ptr, ptr %a1 %t28 = icmp eq ptr %t27, null br i1 %t28, label %panic6130, label %ok6131 panic6130: call void @finch_panic(ptr @.str.4064, i64 3312, ptr @.str.4065) unreachable ok6131: %t29 = getelementptr inbounds %S.gen.Gen, ptr %t27, i32 0, i32 24 %t30 = getelementptr inbounds %S.cimport.CImports, ptr %t29, i32 0, i32 1 %t31 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t32 = load { ptr, i64, i64 }, ptr %t31 store { ptr, i64, i64 } %t32, ptr %a33 %t34 = call i64 @finch_map_find(ptr %t30, ptr %a33, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t35 = icmp slt i64 %t34, 0 br i1 %t35, label %map.missing6132, label %map.found6133 map.missing6132: store { ptr, i64, i64 } zeroinitializer, ptr %a36 store { ptr, i64, i64 } %t32, ptr %a37 call void @finch_buf_str(ptr %a36, ptr %a37, i32 1) call void @finch_map_missing(ptr @.str.4066, i64 3312, ptr %a36) unreachable map.found6133: %t38 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t30, i32 0, i32 0 %t39 = load ptr, ptr %t38 %t40 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t39, i64 %t34 %t41 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t40, i32 0, i32 2 %t42 = load %S.cimport.CConst, ptr %t41 store %S.cimport.CConst %t42, ptr %a43 call void @finch.copy.S_cimport_CConst(ptr %a44, ptr %a43) %t45 = load %S.cimport.CConst, ptr %a44 store %S.cimport.CConst %t45, ptr %a46 %t47 = getelementptr inbounds %S.cimport.CConst, ptr %a46, i32 0, i32 0 %t48 = load i1, ptr %t47 br i1 %t48, label %then6134, label %endif6136 then6134: %t49 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 %t50 = getelementptr inbounds %S.cimport.CConst, ptr %a46, i32 0, i32 3 %t51 = load { ptr, i64, i64 }, ptr %t50 %t52 = call { ptr, i64, i64 } @finch.gen.llFloat({ ptr, i64, i64 } %t51) %t53 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t52, 0 %t54 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4067, i64 5, i64 0 }) %t55 = insertvalue %S.gen.Val %t53, %S.ast.Type %t54, 1 %t56 = insertvalue %S.gen.Val %t55, i1 true, 3 %t57 = insertvalue %S.gen.Ref %t49, %S.gen.Val %t56, 2 ret %S.gen.Ref %t57 endif6136: %t58 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 %t59 = getelementptr inbounds %S.cimport.CConst, ptr %a46, i32 0, i32 1 %t60 = load i64, ptr %t59 call void @finch_str_from_int(ptr %a61, i64 %t60) %t62 = load { ptr, i64, i64 }, ptr %a61 %t63 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t62, 0 %t64 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4068, i64 3, i64 0 }) %t65 = insertvalue %S.gen.Val %t63, %S.ast.Type %t64, 1 %t66 = insertvalue %S.gen.Val %t65, i1 true, 3 %t67 = insertvalue %S.gen.Ref %t58, %S.gen.Val %t66, 2 ret %S.gen.Ref %t67 endif6129: %t68 = load i64, ptr %a14 %t69 = icmp slt i64 %t68, 0 br label %logic.from6137 logic.from6137: br i1 %t69, label %logic.rhs6138, label %logic.end6139 logic.rhs6138: %t70 = load ptr, ptr %a1 %t71 = icmp eq ptr %t70, null br i1 %t71, label %panic6140, label %ok6141 panic6140: call void @finch_panic(ptr @.str.4069, i64 3319, ptr @.str.4070) unreachable ok6141: %t72 = getelementptr inbounds %S.gen.Gen, ptr %t70, i32 0, i32 24 %t73 = getelementptr inbounds %S.cimport.CImports, ptr %t72, i32 0, i32 2 %t74 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t75 = load { ptr, i64, i64 }, ptr %t74 store { ptr, i64, i64 } %t75, ptr %a76 %t77 = call i64 @finch_map_find(ptr %t73, ptr %a76, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.ast.Type }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t78 = icmp sge i64 %t77, 0 %t79 = xor i1 %t78, true br label %logic.rend6142 logic.rend6142: br label %logic.end6139 logic.end6139: %t80 = phi i1 [ false, %logic.from6137 ], [ %t79, %logic.rend6142 ] br label %logic.from6143 logic.from6143: br i1 %t80, label %logic.rhs6144, label %logic.end6145 logic.rhs6144: %t81 = load ptr, ptr %a1 %t82 = icmp eq ptr %t81, null br i1 %t82, label %panic6146, label %ok6147 panic6146: call void @finch_panic(ptr @.str.4071, i64 3319, ptr @.str.4072) unreachable ok6147: %t83 = getelementptr inbounds %S.gen.Gen, ptr %t81, i32 0, i32 24 %t84 = getelementptr inbounds %S.cimport.CImports, ptr %t83, i32 0, i32 0 store { ptr, i64, i64 } { ptr @.str.4073, i64 7, i64 0 }, ptr %a85 %t86 = call i64 @finch_map_find(ptr %t84, ptr %a85, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t87 = icmp sge i64 %t86, 0 br label %logic.rend6148 logic.rend6148: br label %logic.end6145 logic.end6145: %t88 = phi i1 [ false, %logic.from6143 ], [ %t87, %logic.rend6148 ] br label %logic.from6149 logic.from6149: br i1 %t88, label %logic.rhs6150, label %logic.end6151 logic.rhs6150: %t89 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t90 = load { ptr, i64, i64 }, ptr %t89 store { ptr, i64, i64 } %t90, ptr %a91 store { ptr, i64, i64 } { ptr @.str.4074, i64 5, i64 0 }, ptr %a92 %t93 = call i32 @finch_str_eq(ptr %a91, ptr %a92) %t94 = icmp ne i32 %t93, 0 br label %logic.from6152 logic.from6152: br i1 %t94, label %logic.end6154, label %logic.rhs6153 logic.rhs6153: %t95 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t96 = load { ptr, i64, i64 }, ptr %t95 store { ptr, i64, i64 } %t96, ptr %a97 store { ptr, i64, i64 } { ptr @.str.4075, i64 6, i64 0 }, ptr %a98 %t99 = call i32 @finch_str_eq(ptr %a97, ptr %a98) %t100 = icmp ne i32 %t99, 0 br label %logic.rend6155 logic.rend6155: br label %logic.end6154 logic.end6154: %t101 = phi i1 [ true, %logic.from6152 ], [ %t100, %logic.rend6155 ] br label %logic.from6156 logic.from6156: br i1 %t101, label %logic.end6158, label %logic.rhs6157 logic.rhs6157: %t102 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t103 = load { ptr, i64, i64 }, ptr %t102 store { ptr, i64, i64 } %t103, ptr %a104 store { ptr, i64, i64 } { ptr @.str.4076, i64 6, i64 0 }, ptr %a105 %t106 = call i32 @finch_str_eq(ptr %a104, ptr %a105) %t107 = icmp ne i32 %t106, 0 br label %logic.rend6159 logic.rend6159: br label %logic.end6158 logic.end6158: %t108 = phi i1 [ true, %logic.from6156 ], [ %t107, %logic.rend6159 ] br label %logic.rend6160 logic.rend6160: br label %logic.end6151 logic.end6151: %t109 = phi i1 [ false, %logic.from6149 ], [ %t108, %logic.rend6160 ] br i1 %t109, label %then6161, label %endif6163 then6161: store { ptr, i64, i64 } { ptr @.str.4077, i64 1, i64 0 }, ptr %a110 %t111 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t112 = load { ptr, i64, i64 }, ptr %t111 store { ptr, i64, i64 } %t112, ptr %a113 store { ptr, i64, i64 } { ptr @.str.4078, i64 5, i64 0 }, ptr %a114 %t115 = call i32 @finch_str_eq(ptr %a113, ptr %a114) %t116 = icmp ne i32 %t115, 0 br i1 %t116, label %then6164, label %else6165 then6164: store { ptr, i64, i64 } { ptr @.str.4079, i64 1, i64 0 }, ptr %a110 br label %endif6166 else6165: %t117 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t118 = load { ptr, i64, i64 }, ptr %t117 store { ptr, i64, i64 } %t118, ptr %a119 store { ptr, i64, i64 } { ptr @.str.4080, i64 6, i64 0 }, ptr %a120 %t121 = call i32 @finch_str_eq(ptr %a119, ptr %a120) %t122 = icmp ne i32 %t121, 0 br i1 %t122, label %then6167, label %endif6169 then6167: store { ptr, i64, i64 } { ptr @.str.4081, i64 1, i64 0 }, ptr %a110 br label %endif6169 endif6169: br label %endif6166 endif6166: %t123 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 %t124 = load ptr, ptr %a1 %t125 = load { ptr, i64, i64 }, ptr %a110 store { ptr, i64, i64 } { ptr @.str.4082, i64 31, i64 0 }, ptr %a127 store { ptr, i64, i64 } %t125, ptr %a128 call void @finch_str_concat(ptr %a126, ptr %a127, ptr %a128) %t129 = load { ptr, i64, i64 }, ptr %a126 store { ptr, i64, i64 } %t129, ptr %a131 store { ptr, i64, i64 } { ptr @.str.4083, i64 1, i64 0 }, ptr %a132 call void @finch_str_concat(ptr %a130, ptr %a131, ptr %a132) %t133 = load { ptr, i64, i64 }, ptr %a130 %t134 = call { ptr, i64, i64 } @finch.gen.op(ptr %t124, { ptr, i64, i64 } %t133) %t135 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t134, 0 %t136 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4084, i64 3, i64 0 }) %t137 = insertvalue %S.gen.Val %t135, %S.ast.Type %t136, 1 %t138 = insertvalue %S.gen.Ref %t123, %S.gen.Val %t137, 2 ret %S.gen.Ref %t138 endif6163: %t139 = load i64, ptr %a14 %t140 = icmp slt i64 %t139, 0 br label %logic.from6170 logic.from6170: br i1 %t140, label %logic.rhs6171, label %logic.end6172 logic.rhs6171: %t141 = load ptr, ptr %a1 %t142 = icmp eq ptr %t141, null br i1 %t142, label %panic6173, label %ok6174 panic6173: call void @finch_panic(ptr @.str.4085, i64 3328, ptr @.str.4086) unreachable ok6174: %t143 = getelementptr inbounds %S.gen.Gen, ptr %t141, i32 0, i32 24 %t144 = getelementptr inbounds %S.cimport.CImports, ptr %t143, i32 0, i32 2 %t145 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t146 = load { ptr, i64, i64 }, ptr %t145 store { ptr, i64, i64 } %t146, ptr %a147 %t148 = call i64 @finch_map_find(ptr %t144, ptr %a147, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.ast.Type }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t149 = icmp sge i64 %t148, 0 br label %logic.rend6175 logic.rend6175: br label %logic.end6172 logic.end6172: %t150 = phi i1 [ false, %logic.from6170 ], [ %t149, %logic.rend6175 ] br i1 %t150, label %then6176, label %endif6178 then6176: %t151 = load ptr, ptr %a1 %t152 = load ptr, ptr %a1 %t153 = icmp eq ptr %t152, null br i1 %t153, label %panic6179, label %ok6180 panic6179: call void @finch_panic(ptr @.str.4087, i64 3329, ptr @.str.4088) unreachable ok6180: %t154 = getelementptr inbounds %S.gen.Gen, ptr %t152, i32 0, i32 24 %t155 = getelementptr inbounds %S.cimport.CImports, ptr %t154, i32 0, i32 2 %t156 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t157 = load { ptr, i64, i64 }, ptr %t156 store { ptr, i64, i64 } %t157, ptr %a158 %t159 = call i64 @finch_map_find(ptr %t155, ptr %a158, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.ast.Type }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t160 = icmp slt i64 %t159, 0 br i1 %t160, label %map.missing6181, label %map.found6182 map.missing6181: store { ptr, i64, i64 } zeroinitializer, ptr %a161 store { ptr, i64, i64 } %t157, ptr %a162 call void @finch_buf_str(ptr %a161, ptr %a162, i32 1) call void @finch_map_missing(ptr @.str.4089, i64 3329, ptr %a161) unreachable map.found6182: %t163 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t155, i32 0, i32 0 %t164 = load ptr, ptr %t163 %t165 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t164, i64 %t159 %t166 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t165, i32 0, i32 2 %t167 = load %S.ast.Type, ptr %t166 %t168 = load %S.ast.Node, ptr %a2 %t169 = call %S.ast.Type @finch.gen.resolve(ptr %t151, %S.ast.Type %t167, %S.ast.Node %t168) store %S.ast.Type %t169, ptr %a170 %t171 = load ptr, ptr %a1 %t172 = icmp eq ptr %t171, null br i1 %t172, label %panic6183, label %ok6184 panic6183: call void @finch_panic(ptr @.str.4090, i64 3330, ptr @.str.4091) unreachable ok6184: %t173 = getelementptr inbounds %S.gen.Gen, ptr %t171, i32 0, i32 38 %t174 = getelementptr inbounds { ptr, i64, i64 }, ptr %t173, i32 0, i32 1 %t175 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t176 = load { ptr, i64, i64 }, ptr %t175 store { ptr, i64, i64 } { ptr @.str.4092, i64 2, i64 0 }, ptr %a178 store { ptr, i64, i64 } %t176, ptr %a179 call void @finch_str_concat(ptr %a177, ptr %a178, ptr %a179) %t180 = load { ptr, i64, i64 }, ptr %a177 store i64 -1, ptr %a181 %t182 = load i64, ptr %t174 %t183 = load ptr, ptr %t173 store i64 0, ptr %a184 br label %find.cond6185 find.cond6185: %t185 = load i64, ptr %a184 %t186 = icmp slt i64 %t185, %t182 br i1 %t186, label %find.body6186, label %find.end6189 find.body6186: %t187 = getelementptr inbounds { ptr, i64, i64 }, ptr %t183, i64 %t185 %t188 = load { ptr, i64, i64 }, ptr %t187 store { ptr, i64, i64 } %t188, ptr %a189 store { ptr, i64, i64 } %t180, ptr %a190 %t191 = call i32 @finch_str_eq(ptr %a189, ptr %a190) %t192 = icmp ne i32 %t191, 0 br i1 %t192, label %find.hit6187, label %find.next6188 find.hit6187: store i64 %t185, ptr %a181 br label %find.end6189 find.next6188: %t193 = add i64 %t185, 1 store i64 %t193, ptr %a184 br label %find.cond6185 find.end6189: %t194 = load i64, ptr %a181 %t195 = icmp sge i64 %t194, 0 %t196 = xor i1 %t195, true br i1 %t196, label %then6190, label %endif6192 then6190: %t197 = load ptr, ptr %a1 %t198 = icmp eq ptr %t197, null br i1 %t198, label %panic6193, label %ok6194 panic6193: call void @finch_panic(ptr @.str.4093, i64 3331, ptr @.str.4094) unreachable ok6194: %t199 = getelementptr inbounds %S.gen.Gen, ptr %t197, i32 0, i32 38 %t200 = getelementptr inbounds { ptr, i64, i64 }, ptr %t199, i32 0, i32 1 %t201 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t202 = load { ptr, i64, i64 }, ptr %t201 store { ptr, i64, i64 } { ptr @.str.4095, i64 2, i64 0 }, ptr %a204 store { ptr, i64, i64 } %t202, ptr %a205 call void @finch_str_concat(ptr %a203, ptr %a204, ptr %a205) %t206 = load { ptr, i64, i64 }, ptr %a203 %t207 = load i64, ptr %t200 %t208 = add i64 %t207, 1 call void @finch_arr_reserve(ptr %t199, i64 %t208, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t209 = load ptr, ptr %t199 %t210 = getelementptr inbounds { ptr, i64, i64 }, ptr %t209, i64 %t207 store { ptr, i64, i64 } %t206, ptr %t210 store i64 %t208, ptr %t200 %t211 = load ptr, ptr %a1 %t212 = icmp eq ptr %t211, null br i1 %t212, label %panic6195, label %ok6196 panic6195: call void @finch_panic(ptr @.str.4096, i64 3332, ptr @.str.4097) unreachable ok6196: %t213 = getelementptr inbounds %S.gen.Gen, ptr %t211, i32 0, i32 2 %t214 = getelementptr inbounds { ptr, i64, i64 }, ptr %t213, i32 0, i32 1 %t215 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t216 = load { ptr, i64, i64 }, ptr %t215 store { ptr, i64, i64 } { ptr @.str.4098, i64 1, i64 0 }, ptr %a218 store { ptr, i64, i64 } %t216, ptr %a219 call void @finch_str_concat(ptr %a217, ptr %a218, ptr %a219) %t220 = load { ptr, i64, i64 }, ptr %a217 store { ptr, i64, i64 } %t220, ptr %a222 store { ptr, i64, i64 } { ptr @.str.4099, i64 19, i64 0 }, ptr %a223 call void @finch_str_concat(ptr %a221, ptr %a222, ptr %a223) %t224 = load { ptr, i64, i64 }, ptr %a221 %t225 = load ptr, ptr %a1 %t226 = load %S.ast.Type, ptr %a170 %t227 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t225, %S.ast.Type %t226) store { ptr, i64, i64 } %t224, ptr %a229 store { ptr, i64, i64 } %t227, ptr %a230 call void @finch_str_concat(ptr %a228, ptr %a229, ptr %a230) %t231 = load { ptr, i64, i64 }, ptr %a228 %t232 = load i64, ptr %t214 %t233 = add i64 %t232, 1 call void @finch_arr_reserve(ptr %t213, i64 %t233, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t234 = load ptr, ptr %t213 %t235 = getelementptr inbounds { ptr, i64, i64 }, ptr %t234, i64 %t232 store { ptr, i64, i64 } %t231, ptr %t235 store i64 %t233, ptr %t214 br label %endif6192 endif6192: %t236 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0 %t237 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t238 = load { ptr, i64, i64 }, ptr %t237 store { ptr, i64, i64 } { ptr @.str.4100, i64 1, i64 0 }, ptr %a240 store { ptr, i64, i64 } %t238, ptr %a241 call void @finch_str_concat(ptr %a239, ptr %a240, ptr %a241) %t242 = load { ptr, i64, i64 }, ptr %a239 %t243 = insertvalue %S.gen.Place zeroinitializer, { ptr, i64, i64 } %t242, 0 %t244 = load %S.ast.Type, ptr %a170 store %S.ast.Type %t244, ptr %a245 call void @finch.copy.S_ast_Type(ptr %a246, ptr %a245) %t247 = load %S.ast.Type, ptr %a246 %t248 = insertvalue %S.gen.Place %t243, %S.ast.Type %t247, 1 %t249 = insertvalue %S.gen.Ref %t236, %S.gen.Place %t248, 1 ret %S.gen.Ref %t249 endif6178: %t250 = load i64, ptr %a14 %t251 = icmp slt i64 %t250, 0 br i1 %t251, label %then6197, label %endif6199 then6197: %t252 = load ptr, ptr %a1 %t253 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t254 = load { ptr, i64, i64 }, ptr %t253 %t255 = call i1 @finch.gen.imports(ptr %t252, { ptr, i64, i64 } %t254) br i1 %t255, label %then6200, label %endif6202 then6200: %t256 = load ptr, ptr %a1 %t257 = load %S.ast.Node, ptr %a2 %t258 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t259 = load { ptr, i64, i64 }, ptr %t258 store { ptr, i64, i64 } { ptr @.str.4101, i64 1, i64 0 }, ptr %a261 store { ptr, i64, i64 } %t259, ptr %a262 call void @finch_str_concat(ptr %a260, ptr %a261, ptr %a262) %t263 = load { ptr, i64, i64 }, ptr %a260 store { ptr, i64, i64 } %t263, ptr %a265 store { ptr, i64, i64 } { ptr @.str.4102, i64 43, i64 0 }, ptr %a266 call void @finch_str_concat(ptr %a264, ptr %a265, ptr %a266) %t267 = load { ptr, i64, i64 }, ptr %a264 %t268 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t269 = load { ptr, i64, i64 }, ptr %t268 store { ptr, i64, i64 } %t267, ptr %a271 store { ptr, i64, i64 } %t269, ptr %a272 call void @finch_str_concat(ptr %a270, ptr %a271, ptr %a272) %t273 = load { ptr, i64, i64 }, ptr %a270 store { ptr, i64, i64 } %t273, ptr %a275 store { ptr, i64, i64 } { ptr @.str.4103, i64 10, i64 0 }, ptr %a276 call void @finch_str_concat(ptr %a274, ptr %a275, ptr %a276) %t277 = load { ptr, i64, i64 }, ptr %a274 call void @finch.gen.fail(ptr %t256, %S.ast.Node %t257, { ptr, i64, i64 } %t277) br label %endif6202 endif6202: %t278 = load ptr, ptr %a1 %t279 = load %S.ast.Node, ptr %a2 %t280 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t281 = load { ptr, i64, i64 }, ptr %t280 store { ptr, i64, i64 } { ptr @.str.4104, i64 28, i64 0 }, ptr %a283 store { ptr, i64, i64 } %t281, ptr %a284 call void @finch_str_concat(ptr %a282, ptr %a283, ptr %a284) %t285 = load { ptr, i64, i64 }, ptr %a282 store { ptr, i64, i64 } %t285, ptr %a287 store { ptr, i64, i64 } { ptr @.str.4105, i64 1, i64 0 }, ptr %a288 call void @finch_str_concat(ptr %a286, ptr %a287, ptr %a288) %t289 = load { ptr, i64, i64 }, ptr %a286 call void @finch.gen.fail(ptr %t278, %S.ast.Node %t279, { ptr, i64, i64 } %t289) br label %endif6199 endif6199: %t290 = load ptr, ptr %a1 %t291 = load i64, ptr %a14 %t292 = call %S.gen.Var @finch.gen.varAt(ptr %t290, i64 %t291) store %S.gen.Var %t292, ptr %a293 %t294 = load ptr, ptr %a1 %t295 = load %S.ast.Node, ptr %a2 %t296 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 %t297 = load i64, ptr %t296 %t298 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t299 = getelementptr inbounds { ptr, i64, i64 }, ptr %t298, i32 0, i32 1 %t300 = load i64, ptr %t299 %t301 = getelementptr inbounds %S.gen.Var, ptr %a293, i32 0, i32 1 %t302 = load %S.ast.Type, ptr %t301 %t303 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t302) store { ptr, i64, i64 } { ptr @.str.4106, i64 9, i64 0 }, ptr %a305 store { ptr, i64, i64 } %t303, ptr %a306 call void @finch_str_concat(ptr %a304, ptr %a305, ptr %a306) %t307 = load { ptr, i64, i64 }, ptr %a304 store { ptr, i64, i64 } %t307, ptr %a309 store { ptr, i64, i64 } { ptr @.str.4107, i64 1, i64 0 }, ptr %a310 call void @finch_str_concat(ptr %a308, ptr %a309, ptr %a310) %t311 = load { ptr, i64, i64 }, ptr %a308 %t312 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t313 = load { ptr, i64, i64 }, ptr %t312 store { ptr, i64, i64 } %t311, ptr %a315 store { ptr, i64, i64 } %t313, ptr %a316 call void @finch_str_concat(ptr %a314, ptr %a315, ptr %a316) %t317 = load { ptr, i64, i64 }, ptr %a314 store { ptr, i64, i64 } %t317, ptr %a319 store { ptr, i64, i64 } { ptr @.str.4108, i64 4, i64 0 }, ptr %a320 call void @finch_str_concat(ptr %a318, ptr %a319, ptr %a320) %t321 = load { ptr, i64, i64 }, ptr %a318 %t322 = getelementptr inbounds %S.gen.Var, ptr %a293, i32 0, i32 5 %t323 = load { ptr, i64, i64 }, ptr %t322 %t324 = getelementptr inbounds %S.gen.Var, ptr %a293, i32 0, i32 6 %t325 = load i64, ptr %t324 %t326 = getelementptr inbounds %S.gen.Var, ptr %a293, i32 0, i32 7 %t327 = load i64, ptr %t326 call void @finch.gen.noteRef(ptr %t294, %S.ast.Node %t295, i64 %t297, i64 %t300, { ptr, i64, i64 } %t321, { ptr, i64, i64 } %t323, i64 %t325, i64 %t327) %t328 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0 %t329 = getelementptr inbounds %S.gen.Var, ptr %a293, i32 0, i32 2 %t330 = load { ptr, i64, i64 }, ptr %t329 store { ptr, i64, i64 } %t330, ptr %a331 call void @finch_str_copy(ptr %a332, ptr %a331) %t333 = load { ptr, i64, i64 }, ptr %a332 %t334 = insertvalue %S.gen.Place zeroinitializer, { ptr, i64, i64 } %t333, 0 %t335 = getelementptr inbounds %S.gen.Var, ptr %a293, i32 0, i32 1 %t336 = load %S.ast.Type, ptr %t335 store %S.ast.Type %t336, ptr %a337 call void @finch.copy.S_ast_Type(ptr %a338, ptr %a337) %t339 = load %S.ast.Type, ptr %a338 %t340 = insertvalue %S.gen.Place %t334, %S.ast.Type %t339, 1 %t341 = insertvalue %S.gen.Ref %t328, %S.gen.Place %t340, 1 ret %S.gen.Ref %t341 endif6120: %t342 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 %t343 = load { ptr, i64, i64 }, ptr %t342 store { ptr, i64, i64 } %t343, ptr %a344 store { ptr, i64, i64 } { ptr @.str.4109, i64 6, i64 0 }, ptr %a345 %t346 = call i32 @finch_str_eq(ptr %a344, ptr %a345) %t347 = icmp ne i32 %t346, 0 br i1 %t347, label %then6203, label %endif6205 then6203: %t348 = load ptr, ptr %a1 %t349 = load %S.ast.Node, ptr %a2 %t350 = load i1, ptr %a3 %t351 = call %S.gen.Ref @finch.gen.member(ptr %t348, %S.ast.Node %t349, i1 %t350) ret %S.gen.Ref %t351 endif6205: %t352 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 %t353 = load { ptr, i64, i64 }, ptr %t352 store { ptr, i64, i64 } %t353, ptr %a354 store { ptr, i64, i64 } { ptr @.str.4110, i64 5, i64 0 }, ptr %a355 %t356 = call i32 @finch_str_eq(ptr %a354, ptr %a355) %t357 = icmp ne i32 %t356, 0 br i1 %t357, label %then6206, label %endif6208 then6206: %t358 = load ptr, ptr %a1 %t359 = load %S.ast.Node, ptr %a2 %t360 = load i1, ptr %a3 %t361 = call %S.gen.Ref @finch.gen.index(ptr %t358, %S.ast.Node %t359, i1 %t360) ret %S.gen.Ref %t361 endif6208: %t362 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 %t363 = load ptr, ptr %a1 %t364 = load %S.ast.Node, ptr %a2 %t365 = call %S.gen.Val @finch.gen.expr(ptr %t363, %S.ast.Node %t364) %t366 = insertvalue %S.gen.Ref %t362, %S.gen.Val %t365, 2 ret %S.gen.Ref %t366 } define internal { ptr, i64, i64 } @finch.gen.llFloat({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca i64, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t2, ptr %a3 call void @finch_str_copy(ptr %a4, ptr %a3) %t5 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t5, ptr %a6 %t7 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t7, ptr %a8 store { ptr, i64, i64 } { ptr @.str.4112, i64 1, i64 0 }, ptr %a10 %t11 = call i32 @finch_str_starts(ptr %a8, ptr %a10) %t12 = icmp ne i32 %t11, 0 br i1 %t12, label %then6209, label %endif6211 then6209: %t13 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } { ptr @.str.4113, i64 1, i64 0 }, ptr %a15 store { ptr, i64, i64 } %t13, ptr %a16 call void @finch_str_concat(ptr %a14, ptr %a15, ptr %a16) %t17 = load { ptr, i64, i64 }, ptr %a14 store { ptr, i64, i64 } %t17, ptr %a6 br label %endif6211 endif6211: %t18 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t18, ptr %a19 store { ptr, i64, i64 } { ptr @.str.4115, i64 1, i64 0 }, ptr %a21 %t22 = call i64 @finch_str_find(ptr %a19, ptr %a21) %t23 = icmp sge i64 %t22, 0 %t24 = xor i1 %t23, true br i1 %t24, label %then6212, label %endif6214 then6212: %t25 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t25, ptr %a26 store { ptr, i64, i64 } { ptr @.str.4117, i64 1, i64 0 }, ptr %a28 %t29 = call i64 @finch_str_find(ptr %a26, ptr %a28) store i64 %t29, ptr %a30 %t31 = load i64, ptr %a30 %t32 = icmp slt i64 %t31, 0 br i1 %t32, label %then6215, label %endif6217 then6215: %t33 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t33, ptr %a34 store { ptr, i64, i64 } { ptr @.str.4119, i64 1, i64 0 }, ptr %a36 %t37 = call i64 @finch_str_find(ptr %a34, ptr %a36) store i64 %t37, ptr %a30 br label %endif6217 endif6217: %t38 = load i64, ptr %a30 %t39 = icmp slt i64 %t38, 0 br i1 %t39, label %then6218, label %endif6220 then6218: %t40 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t40, ptr %a42 store { ptr, i64, i64 } { ptr @.str.4120, i64 2, i64 0 }, ptr %a43 call void @finch_str_concat(ptr %a41, ptr %a42, ptr %a43) %t44 = load { ptr, i64, i64 }, ptr %a41 ret { ptr, i64, i64 } %t44 endif6220: %t45 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t45, ptr %a46 %t48 = load i64, ptr %a30 call void @finch_str_sub(ptr %a47, ptr %a46, i64 0, i64 %t48, ptr @.str.4121, i64 3369) %t49 = load { ptr, i64, i64 }, ptr %a47 store { ptr, i64, i64 } %t49, ptr %a51 store { ptr, i64, i64 } { ptr @.str.4122, i64 2, i64 0 }, ptr %a52 call void @finch_str_concat(ptr %a50, ptr %a51, ptr %a52) %t53 = load { ptr, i64, i64 }, ptr %a50 %t54 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t54, ptr %a55 %t57 = load i64, ptr %a30 %t58 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 %t59 = load i64, ptr %t58 call void @finch_str_sub(ptr %a56, ptr %a55, i64 %t57, i64 %t59, ptr @.str.4123, i64 3369) %t60 = load { ptr, i64, i64 }, ptr %a56 store { ptr, i64, i64 } %t53, ptr %a62 store { ptr, i64, i64 } %t60, ptr %a63 call void @finch_str_concat(ptr %a61, ptr %a62, ptr %a63) %t64 = load { ptr, i64, i64 }, ptr %a61 ret { ptr, i64, i64 } %t64 endif6214: %t65 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t65, ptr %a66 call void @finch_str_copy(ptr %a67, ptr %a66) %t68 = load { ptr, i64, i64 }, ptr %a67 ret { ptr, i64, i64 } %t68 } define internal i64 @finch.gen.enumNamed(ptr %p0, %S.ast.Node %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 %t3 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 %t4 = load { ptr, i64, i64 }, ptr %t3 store { ptr, i64, i64 } %t4, ptr %a5 store { ptr, i64, i64 } { ptr @.str.4124, i64 3, i64 0 }, ptr %a6 %t7 = call i32 @finch_str_eq(ptr %a5, ptr %a6) %t8 = icmp ne i32 %t7, 0 br label %logic.from6221 logic.from6221: br i1 %t8, label %logic.rhs6222, label %logic.end6223 logic.rhs6222: %t9 = load ptr, ptr %a1 %t10 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t11 = load { ptr, i64, i64 }, ptr %t10 %t12 = call i64 @finch.gen.lookup(ptr %t9, { ptr, i64, i64 } %t11) %t13 = icmp slt i64 %t12, 0 br label %logic.rend6224 logic.rend6224: br label %logic.end6223 logic.end6223: %t14 = phi i1 [ false, %logic.from6221 ], [ %t13, %logic.rend6224 ] br i1 %t14, label %then6225, label %endif6227 then6225: %t15 = load ptr, ptr %a1 %t16 = load ptr, ptr %a1 %t17 = icmp eq ptr %t16, null br i1 %t17, label %panic6228, label %ok6229 panic6228: call void @finch_panic(ptr @.str.4125, i64 3377, ptr @.str.4126) unreachable ok6229: %t18 = getelementptr inbounds %S.gen.Gen, ptr %t16, i32 0, i32 13 %t19 = load { ptr, i64, i64 }, ptr %t18 %t20 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t21 = load { ptr, i64, i64 }, ptr %t20 %t22 = call i64 @finch.gen.findEnum(ptr %t15, { ptr, i64, i64 } %t19, { ptr, i64, i64 } %t21) ret i64 %t22 endif6227: %t23 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 %t24 = load { ptr, i64, i64 }, ptr %t23 store { ptr, i64, i64 } %t24, ptr %a25 store { ptr, i64, i64 } { ptr @.str.4127, i64 6, i64 0 }, ptr %a26 %t27 = call i32 @finch_str_eq(ptr %a25, ptr %a26) %t28 = icmp ne i32 %t27, 0 br label %logic.from6230 logic.from6230: br i1 %t28, label %logic.rhs6231, label %logic.end6232 logic.rhs6231: %t29 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t30 = load { ptr, i64, i64 }, ptr %t29 %t31 = extractvalue { ptr, i64, i64 } %t30, 1 %t32 = icmp uge i64 0, %t31 br i1 %t32, label %range6233, label %inrange6234 range6233: call void @finch_panic_index(ptr @.str.4128, i64 3379, i64 0, i64 %t31) unreachable inrange6234: %t33 = extractvalue { ptr, i64, i64 } %t30, 0 %t34 = getelementptr inbounds %S.ast.Node, ptr %t33, i64 0 %t35 = getelementptr inbounds %S.ast.Node, ptr %t34, i32 0, i32 0 %t36 = load { ptr, i64, i64 }, ptr %t35 store { ptr, i64, i64 } %t36, ptr %a37 store { ptr, i64, i64 } { ptr @.str.4129, i64 3, i64 0 }, ptr %a38 %t39 = call i32 @finch_str_eq(ptr %a37, ptr %a38) %t40 = icmp ne i32 %t39, 0 br label %logic.rend6235 logic.rend6235: br label %logic.end6232 logic.end6232: %t41 = phi i1 [ false, %logic.from6230 ], [ %t40, %logic.rend6235 ] br label %logic.from6236 logic.from6236: br i1 %t41, label %logic.rhs6237, label %logic.end6238 logic.rhs6237: %t42 = load ptr, ptr %a1 %t43 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t44 = load { ptr, i64, i64 }, ptr %t43 %t45 = extractvalue { ptr, i64, i64 } %t44, 1 %t46 = icmp uge i64 0, %t45 br i1 %t46, label %range6239, label %inrange6240 range6239: call void @finch_panic_index(ptr @.str.4130, i64 3379, i64 0, i64 %t45) unreachable inrange6240: %t47 = extractvalue { ptr, i64, i64 } %t44, 0 %t48 = getelementptr inbounds %S.ast.Node, ptr %t47, i64 0 %t49 = getelementptr inbounds %S.ast.Node, ptr %t48, i32 0, i32 1 %t50 = load { ptr, i64, i64 }, ptr %t49 %t51 = call i64 @finch.gen.lookup(ptr %t42, { ptr, i64, i64 } %t50) %t52 = icmp slt i64 %t51, 0 br label %logic.rend6241 logic.rend6241: br label %logic.end6238 logic.end6238: %t53 = phi i1 [ false, %logic.from6236 ], [ %t52, %logic.rend6241 ] br label %logic.from6242 logic.from6242: br i1 %t53, label %logic.rhs6243, label %logic.end6244 logic.rhs6243: %t54 = load ptr, ptr %a1 %t55 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t56 = load { ptr, i64, i64 }, ptr %t55 %t57 = extractvalue { ptr, i64, i64 } %t56, 1 %t58 = icmp uge i64 0, %t57 br i1 %t58, label %range6245, label %inrange6246 range6245: call void @finch_panic_index(ptr @.str.4131, i64 3379, i64 0, i64 %t57) unreachable inrange6246: %t59 = extractvalue { ptr, i64, i64 } %t56, 0 %t60 = getelementptr inbounds %S.ast.Node, ptr %t59, i64 0 %t61 = getelementptr inbounds %S.ast.Node, ptr %t60, i32 0, i32 1 %t62 = load { ptr, i64, i64 }, ptr %t61 %t63 = call i1 @finch.gen.imports(ptr %t54, { ptr, i64, i64 } %t62) br label %logic.rend6247 logic.rend6247: br label %logic.end6244 logic.end6244: %t64 = phi i1 [ false, %logic.from6242 ], [ %t63, %logic.rend6247 ] br i1 %t64, label %then6248, label %endif6250 then6248: %t65 = load ptr, ptr %a1 %t66 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t67 = load { ptr, i64, i64 }, ptr %t66 %t68 = extractvalue { ptr, i64, i64 } %t67, 1 %t69 = icmp uge i64 0, %t68 br i1 %t69, label %range6251, label %inrange6252 range6251: call void @finch_panic_index(ptr @.str.4132, i64 3380, i64 0, i64 %t68) unreachable inrange6252: %t70 = extractvalue { ptr, i64, i64 } %t67, 0 %t71 = getelementptr inbounds %S.ast.Node, ptr %t70, i64 0 %t72 = getelementptr inbounds %S.ast.Node, ptr %t71, i32 0, i32 1 %t73 = load { ptr, i64, i64 }, ptr %t72 %t74 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t75 = load { ptr, i64, i64 }, ptr %t74 %t76 = call i64 @finch.gen.findEnum(ptr %t65, { ptr, i64, i64 } %t73, { ptr, i64, i64 } %t75) ret i64 %t76 endif6250: ret i64 -1 } define internal %S.gen.Val @finch.gen.enumValue(ptr %p0, %S.ast.Node %p1, i64 %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a3 = alloca i64, align 16 %a14 = alloca %S.gen.EnumDef, align 16 %a15 = alloca %S.gen.EnumDef, align 16 %a17 = alloca %S.gen.EnumDef, align 16 %a22 = alloca i64, align 16 %a25 = alloca i64, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca i64, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a85 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca { ptr, i64, i64 }, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca { ptr, i64, i64 }, align 16 %a110 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 %a113 = alloca { ptr, i64, i64 }, align 16 %a114 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca { ptr, i64, i64 }, align 16 %a117 = alloca { ptr, i64, i64 }, align 16 %a118 = alloca { ptr, i64, i64 }, align 16 %a128 = alloca { ptr, i64, i64 }, align 16 %a134 = alloca { ptr, i64, i64 }, align 16 %a135 = alloca { ptr, i64, i64 }, align 16 %a140 = alloca { ptr, i64, i64 }, align 16 %a141 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 store i64 %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = icmp eq ptr %t4, null br i1 %t5, label %panic6253, label %ok6254 panic6253: call void @finch_panic(ptr @.str.4133, i64 3387, ptr @.str.4134) unreachable ok6254: %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 20 %t7 = load i64, ptr %a3 %t8 = load { ptr, i64, i64 }, ptr %t6 %t9 = extractvalue { ptr, i64, i64 } %t8, 1 %t10 = icmp uge i64 %t7, %t9 br i1 %t10, label %range6255, label %inrange6256 range6255: call void @finch_panic_index(ptr @.str.4135, i64 3387, i64 %t7, i64 %t9) unreachable inrange6256: %t11 = extractvalue { ptr, i64, i64 } %t8, 0 %t12 = getelementptr inbounds %S.gen.EnumDef, ptr %t11, i64 %t7 %t13 = load %S.gen.EnumDef, ptr %t12 store %S.gen.EnumDef %t13, ptr %a14 call void @finch.copy.S_gen_EnumDef(ptr %a15, ptr %a14) %t16 = load %S.gen.EnumDef, ptr %a15 store %S.gen.EnumDef %t16, ptr %a17 %t18 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 2 %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t18, i32 0, i32 1 %t20 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t21 = load { ptr, i64, i64 }, ptr %t20 store i64 -1, ptr %a22 %t23 = load i64, ptr %t19 %t24 = load ptr, ptr %t18 store i64 0, ptr %a25 br label %find.cond6257 find.cond6257: %t26 = load i64, ptr %a25 %t27 = icmp slt i64 %t26, %t23 br i1 %t27, label %find.body6258, label %find.end6261 find.body6258: %t28 = getelementptr inbounds { ptr, i64, i64 }, ptr %t24, i64 %t26 %t29 = load { ptr, i64, i64 }, ptr %t28 store { ptr, i64, i64 } %t29, ptr %a30 store { ptr, i64, i64 } %t21, ptr %a31 %t32 = call i32 @finch_str_eq(ptr %a30, ptr %a31) %t33 = icmp ne i32 %t32, 0 br i1 %t33, label %find.hit6259, label %find.next6260 find.hit6259: store i64 %t26, ptr %a22 br label %find.end6261 find.next6260: %t34 = add i64 %t26, 1 store i64 %t34, ptr %a25 br label %find.cond6257 find.end6261: %t35 = load i64, ptr %a22 store i64 %t35, ptr %a36 %t37 = load i64, ptr %a36 %t38 = icmp slt i64 %t37, 0 br i1 %t38, label %then6262, label %endif6264 then6262: %t39 = load ptr, ptr %a1 %t40 = load %S.ast.Node, ptr %a2 %t41 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 1 %t42 = load { ptr, i64, i64 }, ptr %t41 store { ptr, i64, i64 } { ptr @.str.4136, i64 9, i64 0 }, ptr %a44 store { ptr, i64, i64 } %t42, ptr %a45 call void @finch_str_concat(ptr %a43, ptr %a44, ptr %a45) %t46 = load { ptr, i64, i64 }, ptr %a43 store { ptr, i64, i64 } %t46, ptr %a48 store { ptr, i64, i64 } { ptr @.str.4137, i64 17, i64 0 }, ptr %a49 call void @finch_str_concat(ptr %a47, ptr %a48, ptr %a49) %t50 = load { ptr, i64, i64 }, ptr %a47 %t51 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t52 = load { ptr, i64, i64 }, ptr %t51 store { ptr, i64, i64 } %t50, ptr %a54 store { ptr, i64, i64 } %t52, ptr %a55 call void @finch_str_concat(ptr %a53, ptr %a54, ptr %a55) %t56 = load { ptr, i64, i64 }, ptr %a53 store { ptr, i64, i64 } %t56, ptr %a58 store { ptr, i64, i64 } { ptr @.str.4138, i64 11, i64 0 }, ptr %a59 call void @finch_str_concat(ptr %a57, ptr %a58, ptr %a59) %t60 = load { ptr, i64, i64 }, ptr %a57 %t61 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 2 %t62 = getelementptr inbounds { ptr, i64, i64 }, ptr %t61, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.4139, i64 2, i64 0 }, ptr %a63 call void @finch_str_join(ptr %a64, ptr %t61, ptr %a63) %t65 = load { ptr, i64, i64 }, ptr %a64 store { ptr, i64, i64 } %t60, ptr %a67 store { ptr, i64, i64 } %t65, ptr %a68 call void @finch_str_concat(ptr %a66, ptr %a67, ptr %a68) %t69 = load { ptr, i64, i64 }, ptr %a66 store { ptr, i64, i64 } %t69, ptr %a71 store { ptr, i64, i64 } { ptr @.str.4140, i64 1, i64 0 }, ptr %a72 call void @finch_str_concat(ptr %a70, ptr %a71, ptr %a72) %t73 = load { ptr, i64, i64 }, ptr %a70 call void @finch.gen.fail(ptr %t39, %S.ast.Node %t40, { ptr, i64, i64 } %t73) br label %endif6264 endif6264: %t74 = load ptr, ptr %a1 %t75 = load %S.ast.Node, ptr %a2 %t76 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 %t77 = load i64, ptr %t76 %t78 = add i64 %t77, 1 %t79 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t80 = getelementptr inbounds { ptr, i64, i64 }, ptr %t79, i32 0, i32 1 %t81 = load i64, ptr %t80 %t82 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 1 %t83 = load { ptr, i64, i64 }, ptr %t82 store { ptr, i64, i64 } { ptr @.str.4141, i64 9, i64 0 }, ptr %a85 store { ptr, i64, i64 } %t83, ptr %a86 call void @finch_str_concat(ptr %a84, ptr %a85, ptr %a86) %t87 = load { ptr, i64, i64 }, ptr %a84 store { ptr, i64, i64 } %t87, ptr %a89 store { ptr, i64, i64 } { ptr @.str.4142, i64 1, i64 0 }, ptr %a90 call void @finch_str_concat(ptr %a88, ptr %a89, ptr %a90) %t91 = load { ptr, i64, i64 }, ptr %a88 %t92 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t93 = load { ptr, i64, i64 }, ptr %t92 store { ptr, i64, i64 } %t91, ptr %a95 store { ptr, i64, i64 } %t93, ptr %a96 call void @finch_str_concat(ptr %a94, ptr %a95, ptr %a96) %t97 = load { ptr, i64, i64 }, ptr %a94 store { ptr, i64, i64 } %t97, ptr %a99 store { ptr, i64, i64 } { ptr @.str.4143, i64 3, i64 0 }, ptr %a100 call void @finch_str_concat(ptr %a98, ptr %a99, ptr %a100) %t101 = load { ptr, i64, i64 }, ptr %a98 %t102 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 3 %t103 = load i64, ptr %a36 %t104 = load { ptr, i64, i64 }, ptr %t102 %t105 = extractvalue { ptr, i64, i64 } %t104, 1 %t106 = icmp uge i64 %t103, %t105 br i1 %t106, label %range6265, label %inrange6266 range6265: call void @finch_panic_index(ptr @.str.4144, i64 3392, i64 %t103, i64 %t105) unreachable inrange6266: %t107 = extractvalue { ptr, i64, i64 } %t104, 0 %t108 = getelementptr inbounds i64, ptr %t107, i64 %t103 %t109 = load i64, ptr %t108 call void @finch_str_from_int(ptr %a110, i64 %t109) %t111 = load { ptr, i64, i64 }, ptr %a110 store { ptr, i64, i64 } %t101, ptr %a113 store { ptr, i64, i64 } %t111, ptr %a114 call void @finch_str_concat(ptr %a112, ptr %a113, ptr %a114) %t115 = load { ptr, i64, i64 }, ptr %a112 store { ptr, i64, i64 } %t115, ptr %a117 store { ptr, i64, i64 } { ptr @.str.4145, i64 4, i64 0 }, ptr %a118 call void @finch_str_concat(ptr %a116, ptr %a117, ptr %a118) %t119 = load { ptr, i64, i64 }, ptr %a116 call void @finch.gen.noteRef(ptr %t74, %S.ast.Node %t75, i64 %t78, i64 %t81, { ptr, i64, i64 } %t119, { ptr, i64, i64 } { ptr @.str.4146, i64 0, i64 0 }, i64 0, i64 0) %t120 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 3 %t121 = load i64, ptr %a36 %t122 = load { ptr, i64, i64 }, ptr %t120 %t123 = extractvalue { ptr, i64, i64 } %t122, 1 %t124 = icmp uge i64 %t121, %t123 br i1 %t124, label %range6267, label %inrange6268 range6267: call void @finch_panic_index(ptr @.str.4147, i64 3393, i64 %t121, i64 %t123) unreachable inrange6268: %t125 = extractvalue { ptr, i64, i64 } %t122, 0 %t126 = getelementptr inbounds i64, ptr %t125, i64 %t121 %t127 = load i64, ptr %t126 call void @finch_str_from_int(ptr %a128, i64 %t127) %t129 = load { ptr, i64, i64 }, ptr %a128 %t130 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t129, 0 %t131 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.4148, i64 4, i64 0 }, 0 %t132 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 1 %t133 = load { ptr, i64, i64 }, ptr %t132 store { ptr, i64, i64 } %t133, ptr %a134 call void @finch_str_copy(ptr %a135, ptr %a134) %t136 = load { ptr, i64, i64 }, ptr %a135 %t137 = insertvalue %S.ast.Type %t131, { ptr, i64, i64 } %t136, 2 %t138 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 0 %t139 = load { ptr, i64, i64 }, ptr %t138 store { ptr, i64, i64 } %t139, ptr %a140 call void @finch_str_copy(ptr %a141, ptr %a140) %t142 = load { ptr, i64, i64 }, ptr %a141 %t143 = insertvalue %S.ast.Type %t137, { ptr, i64, i64 } %t142, 3 %t144 = insertvalue %S.gen.Val %t130, %S.ast.Type %t143, 1 ret %S.gen.Val %t144 } define internal %S.gen.Ref @finch.gen.member(ptr %p0, %S.ast.Node %p1, i1 %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a3 = alloca i1, align 16 %a13 = alloca i64, align 16 %a35 = alloca %S.gen.Ref, align 16 %a39 = alloca %S.ast.Type, align 16 %a40 = alloca %S.ast.Type, align 16 %a42 = alloca %S.ast.Type, align 16 %a48 = alloca %S.ast.Type, align 16 %a49 = alloca %S.ast.Type, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a85 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a107 = alloca %S.ast.Type, align 16 %a108 = alloca %S.ast.Type, align 16 %a110 = alloca %S.ast.Type, align 16 %a111 = alloca i1, align 16 %a114 = alloca { ptr, i64, i64 }, align 16 %a115 = alloca { ptr, i64, i64 }, align 16 %a134 = alloca i64, align 16 %a137 = alloca i64, align 16 %a142 = alloca { ptr, i64, i64 }, align 16 %a143 = alloca { ptr, i64, i64 }, align 16 %a151 = alloca { ptr, i64, i64 }, align 16 %a152 = alloca { ptr, i64, i64 }, align 16 %a160 = alloca { ptr, i64, i64 }, align 16 %a161 = alloca { ptr, i64, i64 }, align 16 %a165 = alloca %S.ast.Type, align 16 %a166 = alloca %S.ast.Type, align 16 %a172 = alloca { ptr, i64, i64 }, align 16 %a173 = alloca { ptr, i64, i64 }, align 16 %a180 = alloca { ptr, i64, i64 }, align 16 %a181 = alloca { ptr, i64, i64 }, align 16 %a182 = alloca { ptr, i64, i64 }, align 16 %a184 = alloca { ptr, i64, i64 }, align 16 %a185 = alloca { ptr, i64, i64 }, align 16 %a186 = alloca { ptr, i64, i64 }, align 16 %a190 = alloca { ptr, i64, i64 }, align 16 %a191 = alloca { ptr, i64, i64 }, align 16 %a195 = alloca %S.ast.Type, align 16 %a196 = alloca %S.ast.Type, align 16 %a201 = alloca %S.ast.Type, align 16 %a202 = alloca %S.ast.Type, align 16 %a206 = alloca { ptr, i64, i64 }, align 16 %a207 = alloca { ptr, i64, i64 }, align 16 %a215 = alloca { ptr, i64, i64 }, align 16 %a216 = alloca { ptr, i64, i64 }, align 16 %a217 = alloca { ptr, i64, i64 }, align 16 %a219 = alloca { ptr, i64, i64 }, align 16 %a220 = alloca { ptr, i64, i64 }, align 16 %a221 = alloca { ptr, i64, i64 }, align 16 %a225 = alloca { ptr, i64, i64 }, align 16 %a226 = alloca { ptr, i64, i64 }, align 16 %a232 = alloca { ptr, i64, i64 }, align 16 %a241 = alloca { ptr, i64, i64 }, align 16 %a242 = alloca { ptr, i64, i64 }, align 16 %a249 = alloca { ptr, i64, i64 }, align 16 %a250 = alloca { ptr, i64, i64 }, align 16 %a251 = alloca { ptr, i64, i64 }, align 16 %a253 = alloca { ptr, i64, i64 }, align 16 %a254 = alloca { ptr, i64, i64 }, align 16 %a255 = alloca { ptr, i64, i64 }, align 16 %a266 = alloca { ptr, i64, i64 }, align 16 %a267 = alloca { ptr, i64, i64 }, align 16 %a282 = alloca { ptr, i64, i64 }, align 16 %a283 = alloca { ptr, i64, i64 }, align 16 %a288 = alloca { ptr, i64, i64 }, align 16 %a289 = alloca { ptr, i64, i64 }, align 16 %a295 = alloca { ptr, i64, i64 }, align 16 %a296 = alloca { ptr, i64, i64 }, align 16 %a313 = alloca { ptr, i64, i64 }, align 16 %a314 = alloca { ptr, i64, i64 }, align 16 %a315 = alloca { ptr, i64, i64 }, align 16 %a324 = alloca { ptr, i64, i64 }, align 16 %a325 = alloca { ptr, i64, i64 }, align 16 %a327 = alloca { ptr, i64, i64 }, align 16 %a340 = alloca { ptr, i64, i64 }, align 16 %a341 = alloca { ptr, i64, i64 }, align 16 %a356 = alloca { ptr, i64, i64 }, align 16 %a357 = alloca { ptr, i64, i64 }, align 16 %a358 = alloca { ptr, i64, i64 }, align 16 %a360 = alloca { ptr, i64, i64 }, align 16 %a361 = alloca { ptr, i64, i64 }, align 16 %a362 = alloca { ptr, i64, i64 }, align 16 %a378 = alloca { ptr, i64, i64 }, align 16 %a379 = alloca { ptr, i64, i64 }, align 16 %a384 = alloca { ptr, i64, i64 }, align 16 %a385 = alloca { ptr, i64, i64 }, align 16 %a391 = alloca { ptr, i64, i64 }, align 16 %a392 = alloca { ptr, i64, i64 }, align 16 %a398 = alloca { ptr, i64, i64 }, align 16 %a399 = alloca { ptr, i64, i64 }, align 16 %a406 = alloca { ptr, i64, i64 }, align 16 %a407 = alloca { ptr, i64, i64 }, align 16 %a408 = alloca { ptr, i64, i64 }, align 16 %a410 = alloca { ptr, i64, i64 }, align 16 %a411 = alloca { ptr, i64, i64 }, align 16 %a412 = alloca { ptr, i64, i64 }, align 16 %a423 = alloca { ptr, i64, i64 }, align 16 %a424 = alloca { ptr, i64, i64 }, align 16 %a425 = alloca { ptr, i64, i64 }, align 16 %a427 = alloca { ptr, i64, i64 }, align 16 %a428 = alloca { ptr, i64, i64 }, align 16 %a429 = alloca { ptr, i64, i64 }, align 16 %a434 = alloca { ptr, i64, i64 }, align 16 %a435 = alloca { ptr, i64, i64 }, align 16 %a436 = alloca { ptr, i64, i64 }, align 16 %a438 = alloca { ptr, i64, i64 }, align 16 %a439 = alloca { ptr, i64, i64 }, align 16 %a440 = alloca { ptr, i64, i64 }, align 16 %a443 = alloca { ptr, i64, i64 }, align 16 %a457 = alloca { ptr, i64, i64 }, align 16 %a458 = alloca { ptr, i64, i64 }, align 16 %a459 = alloca { ptr, i64, i64 }, align 16 %a461 = alloca { ptr, i64, i64 }, align 16 %a462 = alloca { ptr, i64, i64 }, align 16 %a463 = alloca { ptr, i64, i64 }, align 16 %a468 = alloca { ptr, i64, i64 }, align 16 %a469 = alloca { ptr, i64, i64 }, align 16 %a470 = alloca { ptr, i64, i64 }, align 16 %a472 = alloca { ptr, i64, i64 }, align 16 %a473 = alloca { ptr, i64, i64 }, align 16 %a474 = alloca { ptr, i64, i64 }, align 16 %a483 = alloca { ptr, i64, i64 }, align 16 %a484 = alloca { ptr, i64, i64 }, align 16 %a491 = alloca { ptr, i64, i64 }, align 16 %a492 = alloca { ptr, i64, i64 }, align 16 %a493 = alloca { ptr, i64, i64 }, align 16 %a497 = alloca { ptr, i64, i64 }, align 16 %a498 = alloca { ptr, i64, i64 }, align 16 %a499 = alloca { ptr, i64, i64 }, align 16 %a501 = alloca { ptr, i64, i64 }, align 16 %a502 = alloca { ptr, i64, i64 }, align 16 %a503 = alloca { ptr, i64, i64 }, align 16 %a520 = alloca %S.gen.StructDef, align 16 %a521 = alloca %S.gen.StructDef, align 16 %a523 = alloca %S.gen.StructDef, align 16 %a528 = alloca i64, align 16 %a531 = alloca i64, align 16 %a536 = alloca { ptr, i64, i64 }, align 16 %a537 = alloca { ptr, i64, i64 }, align 16 %a542 = alloca i64, align 16 %a549 = alloca { ptr, i64, i64 }, align 16 %a550 = alloca { ptr, i64, i64 }, align 16 %a551 = alloca { ptr, i64, i64 }, align 16 %a553 = alloca { ptr, i64, i64 }, align 16 %a554 = alloca { ptr, i64, i64 }, align 16 %a555 = alloca { ptr, i64, i64 }, align 16 %a559 = alloca { ptr, i64, i64 }, align 16 %a560 = alloca { ptr, i64, i64 }, align 16 %a561 = alloca { ptr, i64, i64 }, align 16 %a563 = alloca { ptr, i64, i64 }, align 16 %a564 = alloca { ptr, i64, i64 }, align 16 %a565 = alloca { ptr, i64, i64 }, align 16 %a569 = alloca { ptr, i64, i64 }, align 16 %a570 = alloca { ptr, i64, i64 }, align 16 %a572 = alloca { ptr, i64, i64 }, align 16 %a573 = alloca { ptr, i64, i64 }, align 16 %a574 = alloca { ptr, i64, i64 }, align 16 %a576 = alloca { ptr, i64, i64 }, align 16 %a577 = alloca { ptr, i64, i64 }, align 16 %a578 = alloca { ptr, i64, i64 }, align 16 %a588 = alloca %S.ast.Type, align 16 %a589 = alloca %S.ast.Type, align 16 %a591 = alloca %S.ast.Type, align 16 %a602 = alloca { ptr, i64, i64 }, align 16 %a603 = alloca { ptr, i64, i64 }, align 16 %a604 = alloca { ptr, i64, i64 }, align 16 %a606 = alloca { ptr, i64, i64 }, align 16 %a607 = alloca { ptr, i64, i64 }, align 16 %a608 = alloca { ptr, i64, i64 }, align 16 %a612 = alloca { ptr, i64, i64 }, align 16 %a613 = alloca { ptr, i64, i64 }, align 16 %a614 = alloca { ptr, i64, i64 }, align 16 %a616 = alloca { ptr, i64, i64 }, align 16 %a617 = alloca { ptr, i64, i64 }, align 16 %a618 = alloca { ptr, i64, i64 }, align 16 %a626 = alloca { ptr, i64, i64 }, align 16 %a627 = alloca { ptr, i64, i64 }, align 16 %a628 = alloca { ptr, i64, i64 }, align 16 %a630 = alloca { ptr, i64, i64 }, align 16 %a631 = alloca { ptr, i64, i64 }, align 16 %a632 = alloca { ptr, i64, i64 }, align 16 %a637 = alloca { ptr, i64, i64 }, align 16 %a638 = alloca { ptr, i64, i64 }, align 16 %a639 = alloca { ptr, i64, i64 }, align 16 %a641 = alloca { ptr, i64, i64 }, align 16 %a642 = alloca { ptr, i64, i64 }, align 16 %a643 = alloca { ptr, i64, i64 }, align 16 %a653 = alloca { ptr, i64, i64 }, align 16 %a655 = alloca { ptr, i64, i64 }, align 16 %a656 = alloca { ptr, i64, i64 }, align 16 %a657 = alloca { ptr, i64, i64 }, align 16 %a660 = alloca { ptr, i64, i64 }, align 16 %a663 = alloca { ptr, i64, i64 }, align 16 %a664 = alloca { ptr, i64, i64 }, align 16 %a668 = alloca %S.ast.Type, align 16 %a669 = alloca %S.ast.Type, align 16 %a677 = alloca { ptr, i64, i64 }, align 16 %a678 = alloca { ptr, i64, i64 }, align 16 %a679 = alloca { ptr, i64, i64 }, align 16 %a681 = alloca { ptr, i64, i64 }, align 16 %a682 = alloca { ptr, i64, i64 }, align 16 %a683 = alloca { ptr, i64, i64 }, align 16 %a688 = alloca { ptr, i64, i64 }, align 16 %a689 = alloca { ptr, i64, i64 }, align 16 %a690 = alloca { ptr, i64, i64 }, align 16 %a692 = alloca { ptr, i64, i64 }, align 16 %a693 = alloca { ptr, i64, i64 }, align 16 %a694 = alloca { ptr, i64, i64 }, align 16 %a704 = alloca { ptr, i64, i64 }, align 16 %a706 = alloca { ptr, i64, i64 }, align 16 %a707 = alloca { ptr, i64, i64 }, align 16 %a708 = alloca { ptr, i64, i64 }, align 16 %a711 = alloca { ptr, i64, i64 }, align 16 %a713 = alloca { ptr, i64, i64 }, align 16 %a714 = alloca { ptr, i64, i64 }, align 16 %a718 = alloca %S.ast.Type, align 16 %a719 = alloca %S.ast.Type, align 16 %a722 = alloca %S.gen.Val, align 16 %a736 = alloca %S.ast.Type, align 16 %a737 = alloca %S.ast.Type, align 16 %a743 = alloca %S.gen.Val, align 16 %a744 = alloca %S.gen.Val, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 store i1 %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t6 = load { ptr, i64, i64 }, ptr %t5 %t7 = extractvalue { ptr, i64, i64 } %t6, 1 %t8 = icmp uge i64 0, %t7 br i1 %t8, label %range6269, label %inrange6270 range6269: call void @finch_panic_index(ptr @.str.4149, i64 3397, i64 0, i64 %t7) unreachable inrange6270: %t9 = extractvalue { ptr, i64, i64 } %t6, 0 %t10 = getelementptr inbounds %S.ast.Node, ptr %t9, i64 0 %t11 = load %S.ast.Node, ptr %t10 %t12 = call i64 @finch.gen.enumNamed(ptr %t4, %S.ast.Node %t11) store i64 %t12, ptr %a13 %t14 = load i64, ptr %a13 %t15 = icmp sge i64 %t14, 0 br i1 %t15, label %then6271, label %endif6273 then6271: %t16 = load i1, ptr %a3 br i1 %t16, label %then6274, label %endif6276 then6274: %t17 = load ptr, ptr %a1 %t18 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t17, %S.ast.Node %t18, { ptr, i64, i64 } { ptr @.str.4150, i64 37, i64 0 }) br label %endif6276 endif6276: %t19 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 %t20 = load ptr, ptr %a1 %t21 = load %S.ast.Node, ptr %a2 %t22 = load i64, ptr %a13 %t23 = call %S.gen.Val @finch.gen.enumValue(ptr %t20, %S.ast.Node %t21, i64 %t22) %t24 = insertvalue %S.gen.Ref %t19, %S.gen.Val %t23, 2 ret %S.gen.Ref %t24 endif6273: %t25 = load ptr, ptr %a1 %t26 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t27 = load { ptr, i64, i64 }, ptr %t26 %t28 = extractvalue { ptr, i64, i64 } %t27, 1 %t29 = icmp uge i64 0, %t28 br i1 %t29, label %range6277, label %inrange6278 range6277: call void @finch_panic_index(ptr @.str.4151, i64 3404, i64 0, i64 %t28) unreachable inrange6278: %t30 = extractvalue { ptr, i64, i64 } %t27, 0 %t31 = getelementptr inbounds %S.ast.Node, ptr %t30, i64 0 %t32 = load %S.ast.Node, ptr %t31 %t33 = load i1, ptr %a3 %t34 = call %S.gen.Ref @finch.gen.ref(ptr %t25, %S.ast.Node %t32, i1 %t33) store %S.gen.Ref %t34, ptr %a35 %t36 = getelementptr inbounds %S.gen.Ref, ptr %a35, i32 0, i32 2 %t37 = getelementptr inbounds %S.gen.Val, ptr %t36, i32 0, i32 1 %t38 = load %S.ast.Type, ptr %t37 store %S.ast.Type %t38, ptr %a39 call void @finch.copy.S_ast_Type(ptr %a40, ptr %a39) %t41 = load %S.ast.Type, ptr %a40 store %S.ast.Type %t41, ptr %a42 %t43 = getelementptr inbounds %S.gen.Ref, ptr %a35, i32 0, i32 0 %t44 = load i1, ptr %t43 br i1 %t44, label %then6279, label %endif6281 then6279: %t45 = getelementptr inbounds %S.gen.Ref, ptr %a35, i32 0, i32 1 %t46 = getelementptr inbounds %S.gen.Place, ptr %t45, i32 0, i32 1 %t47 = load %S.ast.Type, ptr %t46 store %S.ast.Type %t47, ptr %a48 call void @finch.copy.S_ast_Type(ptr %a49, ptr %a48) %t50 = load %S.ast.Type, ptr %a49 store %S.ast.Type %t50, ptr %a42 br label %endif6281 endif6281: %t51 = getelementptr inbounds %S.ast.Type, ptr %a42, i32 0, i32 0 %t52 = load { ptr, i64, i64 }, ptr %t51 store { ptr, i64, i64 } %t52, ptr %a53 store { ptr, i64, i64 } { ptr @.str.4152, i64 3, i64 0 }, ptr %a54 %t55 = call i32 @finch_str_eq(ptr %a53, ptr %a54) %t56 = icmp ne i32 %t55, 0 br i1 %t56, label %then6282, label %endif6284 then6282: %t57 = getelementptr inbounds %S.gen.Ref, ptr %a35, i32 0, i32 2 %t58 = getelementptr inbounds %S.gen.Val, ptr %t57, i32 0, i32 0 %t59 = load { ptr, i64, i64 }, ptr %t58 store { ptr, i64, i64 } %t59, ptr %a60 call void @finch_str_copy(ptr %a61, ptr %a60) %t62 = load { ptr, i64, i64 }, ptr %a61 store { ptr, i64, i64 } %t62, ptr %a63 %t64 = getelementptr inbounds %S.gen.Ref, ptr %a35, i32 0, i32 0 %t65 = load i1, ptr %t64 br i1 %t65, label %then6285, label %endif6287 then6285: %t66 = load ptr, ptr %a1 %t67 = getelementptr inbounds %S.gen.Ref, ptr %a35, i32 0, i32 1 %t68 = getelementptr inbounds %S.gen.Place, ptr %t67, i32 0, i32 0 %t69 = load { ptr, i64, i64 }, ptr %t68 %t70 = call { ptr, i64, i64 } @finch.gen.load(ptr %t66, { ptr, i64, i64 } { ptr @.str.4153, i64 3, i64 0 }, { ptr, i64, i64 } %t69) store { ptr, i64, i64 } %t70, ptr %a63 br label %endif6287 endif6287: %t71 = getelementptr inbounds %S.ast.Type, ptr %a42, i32 0, i32 1 %t72 = getelementptr inbounds { ptr, i64, i64 }, ptr %t71, i32 0, i32 1 %t73 = load i64, ptr %t72 %t74 = icmp eq i64 %t73, 0 br i1 %t74, label %then6288, label %endif6290 then6288: %t75 = load ptr, ptr %a1 %t76 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t75, %S.ast.Node %t76, { ptr, i64, i64 } { ptr @.str.4154, i64 57, i64 0 }) br label %endif6290 endif6290: %t77 = load ptr, ptr %a1 %t78 = load ptr, ptr %a1 %t79 = load { ptr, i64, i64 }, ptr %a63 store { ptr, i64, i64 } { ptr @.str.4155, i64 12, i64 0 }, ptr %a81 store { ptr, i64, i64 } %t79, ptr %a82 call void @finch_str_concat(ptr %a80, ptr %a81, ptr %a82) %t83 = load { ptr, i64, i64 }, ptr %a80 store { ptr, i64, i64 } %t83, ptr %a85 store { ptr, i64, i64 } { ptr @.str.4156, i64 6, i64 0 }, ptr %a86 call void @finch_str_concat(ptr %a84, ptr %a85, ptr %a86) %t87 = load { ptr, i64, i64 }, ptr %a84 %t88 = call { ptr, i64, i64 } @finch.gen.op(ptr %t78, { ptr, i64, i64 } %t87) %t89 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t90 = load { ptr, i64, i64 }, ptr %t89 store { ptr, i64, i64 } { ptr @.str.4157, i64 6, i64 0 }, ptr %a92 store { ptr, i64, i64 } %t90, ptr %a93 call void @finch_str_concat(ptr %a91, ptr %a92, ptr %a93) %t94 = load { ptr, i64, i64 }, ptr %a91 store { ptr, i64, i64 } %t94, ptr %a96 store { ptr, i64, i64 } { ptr @.str.4158, i64 18, i64 0 }, ptr %a97 call void @finch_str_concat(ptr %a95, ptr %a96, ptr %a97) %t98 = load { ptr, i64, i64 }, ptr %a95 %t99 = load %S.ast.Node, ptr %a2 call void @finch.gen.panicIf(ptr %t77, { ptr, i64, i64 } %t88, { ptr, i64, i64 } %t98, %S.ast.Node %t99) %t100 = getelementptr inbounds %S.ast.Type, ptr %a42, i32 0, i32 1 %t101 = load { ptr, i64, i64 }, ptr %t100 %t102 = extractvalue { ptr, i64, i64 } %t101, 1 %t103 = icmp uge i64 0, %t102 br i1 %t103, label %range6291, label %inrange6292 range6291: call void @finch_panic_index(ptr @.str.4159, i64 3418, i64 0, i64 %t102) unreachable inrange6292: %t104 = extractvalue { ptr, i64, i64 } %t101, 0 %t105 = getelementptr inbounds %S.ast.Type, ptr %t104, i64 0 %t106 = load %S.ast.Type, ptr %t105 store %S.ast.Type %t106, ptr %a107 call void @finch.copy.S_ast_Type(ptr %a108, ptr %a107) %t109 = load %S.ast.Type, ptr %a108 store %S.ast.Type %t109, ptr %a110 store i1 false, ptr %a111 %t112 = getelementptr inbounds %S.ast.Type, ptr %a110, i32 0, i32 0 %t113 = load { ptr, i64, i64 }, ptr %t112 store { ptr, i64, i64 } %t113, ptr %a114 store { ptr, i64, i64 } { ptr @.str.4160, i64 6, i64 0 }, ptr %a115 %t116 = call i32 @finch_str_eq(ptr %a114, ptr %a115) %t117 = icmp ne i32 %t116, 0 br i1 %t117, label %then6293, label %endif6295 then6293: %t118 = load ptr, ptr %a1 %t119 = icmp eq ptr %t118, null br i1 %t119, label %panic6296, label %ok6297 panic6296: call void @finch_panic(ptr @.str.4161, i64 3421, ptr @.str.4162) unreachable ok6297: %t120 = getelementptr inbounds %S.gen.Gen, ptr %t118, i32 0, i32 15 %t121 = load ptr, ptr %a1 %t122 = getelementptr inbounds %S.ast.Type, ptr %a110, i32 0, i32 3 %t123 = load { ptr, i64, i64 }, ptr %t122 %t124 = getelementptr inbounds %S.ast.Type, ptr %a110, i32 0, i32 2 %t125 = load { ptr, i64, i64 }, ptr %t124 %t126 = call i64 @finch.gen.findStruct(ptr %t121, { ptr, i64, i64 } %t123, { ptr, i64, i64 } %t125) %t127 = load { ptr, i64, i64 }, ptr %t120 %t128 = extractvalue { ptr, i64, i64 } %t127, 1 %t129 = icmp uge i64 %t126, %t128 br i1 %t129, label %range6298, label %inrange6299 range6298: call void @finch_panic_index(ptr @.str.4163, i64 3421, i64 %t126, i64 %t128) unreachable inrange6299: %t130 = extractvalue { ptr, i64, i64 } %t127, 0 %t131 = getelementptr inbounds %S.gen.StructDef, ptr %t130, i64 %t126 %t132 = getelementptr inbounds %S.gen.StructDef, ptr %t131, i32 0, i32 11 %t133 = getelementptr inbounds { ptr, i64, i64 }, ptr %t132, i32 0, i32 1 store i64 -1, ptr %a134 %t135 = load i64, ptr %t133 %t136 = load ptr, ptr %t132 store i64 0, ptr %a137 br label %find.cond6300 find.cond6300: %t138 = load i64, ptr %a137 %t139 = icmp slt i64 %t138, %t135 br i1 %t139, label %find.body6301, label %find.end6304 find.body6301: %t140 = getelementptr inbounds { ptr, i64, i64 }, ptr %t136, i64 %t138 %t141 = load { ptr, i64, i64 }, ptr %t140 store { ptr, i64, i64 } %t141, ptr %a142 store { ptr, i64, i64 } { ptr @.str.4164, i64 5, i64 0 }, ptr %a143 %t144 = call i32 @finch_str_eq(ptr %a142, ptr %a143) %t145 = icmp ne i32 %t144, 0 br i1 %t145, label %find.hit6302, label %find.next6303 find.hit6302: store i64 %t138, ptr %a134 br label %find.end6304 find.next6303: %t146 = add i64 %t138, 1 store i64 %t146, ptr %a137 br label %find.cond6300 find.end6304: %t147 = load i64, ptr %a134 %t148 = icmp sge i64 %t147, 0 store i1 %t148, ptr %a111 br label %endif6295 endif6295: %t149 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t150 = load { ptr, i64, i64 }, ptr %t149 store { ptr, i64, i64 } %t150, ptr %a151 store { ptr, i64, i64 } { ptr @.str.4165, i64 5, i64 0 }, ptr %a152 %t153 = call i32 @finch_str_eq(ptr %a151, ptr %a152) %t154 = icmp ne i32 %t153, 0 br label %logic.from6305 logic.from6305: br i1 %t154, label %logic.rhs6306, label %logic.end6307 logic.rhs6306: %t155 = load i1, ptr %a111 %t156 = xor i1 %t155, true br label %logic.rend6308 logic.rend6308: br label %logic.end6307 logic.end6307: %t157 = phi i1 [ false, %logic.from6305 ], [ %t156, %logic.rend6308 ] br i1 %t157, label %then6309, label %endif6311 then6309: %t158 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0 %t159 = load { ptr, i64, i64 }, ptr %a63 store { ptr, i64, i64 } %t159, ptr %a160 call void @finch_str_copy(ptr %a161, ptr %a160) %t162 = load { ptr, i64, i64 }, ptr %a161 %t163 = insertvalue %S.gen.Place zeroinitializer, { ptr, i64, i64 } %t162, 0 %t164 = load %S.ast.Type, ptr %a110 store %S.ast.Type %t164, ptr %a165 call void @finch.copy.S_ast_Type(ptr %a166, ptr %a165) %t167 = load %S.ast.Type, ptr %a166 %t168 = insertvalue %S.gen.Place %t163, %S.ast.Type %t167, 1 %t169 = insertvalue %S.gen.Ref %t158, %S.gen.Place %t168, 1 ret %S.gen.Ref %t169 endif6311: %t170 = getelementptr inbounds %S.ast.Type, ptr %a110, i32 0, i32 0 %t171 = load { ptr, i64, i64 }, ptr %t170 store { ptr, i64, i64 } %t171, ptr %a172 store { ptr, i64, i64 } { ptr @.str.4166, i64 6, i64 0 }, ptr %a173 %t174 = call i32 @finch_str_eq(ptr %a172, ptr %a173) %t175 = icmp eq i32 %t174, 0 br i1 %t175, label %then6312, label %endif6314 then6312: %t176 = load ptr, ptr %a1 %t177 = load %S.ast.Node, ptr %a2 %t178 = load %S.ast.Type, ptr %a42 %t179 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t178) store { ptr, i64, i64 } { ptr @.str.4167, i64 2, i64 0 }, ptr %a181 store { ptr, i64, i64 } %t179, ptr %a182 call void @finch_str_concat(ptr %a180, ptr %a181, ptr %a182) %t183 = load { ptr, i64, i64 }, ptr %a180 store { ptr, i64, i64 } %t183, ptr %a185 store { ptr, i64, i64 } { ptr @.str.4168, i64 43, i64 0 }, ptr %a186 call void @finch_str_concat(ptr %a184, ptr %a185, ptr %a186) %t187 = load { ptr, i64, i64 }, ptr %a184 call void @finch.gen.fail(ptr %t176, %S.ast.Node %t177, { ptr, i64, i64 } %t187) br label %endif6314 endif6314: %t188 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0 %t189 = load { ptr, i64, i64 }, ptr %a63 store { ptr, i64, i64 } %t189, ptr %a190 call void @finch_str_copy(ptr %a191, ptr %a190) %t192 = load { ptr, i64, i64 }, ptr %a191 %t193 = insertvalue %S.gen.Place zeroinitializer, { ptr, i64, i64 } %t192, 0 %t194 = load %S.ast.Type, ptr %a110 store %S.ast.Type %t194, ptr %a195 call void @finch.copy.S_ast_Type(ptr %a196, ptr %a195) %t197 = load %S.ast.Type, ptr %a196 %t198 = insertvalue %S.gen.Place %t193, %S.ast.Type %t197, 1 %t199 = insertvalue %S.gen.Ref %t188, %S.gen.Place %t198, 1 store %S.gen.Ref %t199, ptr %a35 %t200 = load %S.ast.Type, ptr %a110 store %S.ast.Type %t200, ptr %a201 call void @finch.copy.S_ast_Type(ptr %a202, ptr %a201) %t203 = load %S.ast.Type, ptr %a202 store %S.ast.Type %t203, ptr %a42 br label %endif6284 endif6284: %t204 = getelementptr inbounds %S.ast.Type, ptr %a42, i32 0, i32 0 %t205 = load { ptr, i64, i64 }, ptr %t204 store { ptr, i64, i64 } %t205, ptr %a206 store { ptr, i64, i64 } { ptr @.str.4169, i64 5, i64 0 }, ptr %a207 %t208 = call i32 @finch_str_eq(ptr %a206, ptr %a207) %t209 = icmp ne i32 %t208, 0 br i1 %t209, label %then6315, label %endif6317 then6315: %t210 = load i1, ptr %a3 br i1 %t210, label %then6318, label %endif6320 then6318: %t211 = load ptr, ptr %a1 %t212 = load %S.ast.Node, ptr %a2 %t213 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t214 = load { ptr, i64, i64 }, ptr %t213 store { ptr, i64, i64 } { ptr @.str.4170, i64 1, i64 0 }, ptr %a216 store { ptr, i64, i64 } %t214, ptr %a217 call void @finch_str_concat(ptr %a215, ptr %a216, ptr %a217) %t218 = load { ptr, i64, i64 }, ptr %a215 store { ptr, i64, i64 } %t218, ptr %a220 store { ptr, i64, i64 } { ptr @.str.4171, i64 26, i64 0 }, ptr %a221 call void @finch_str_concat(ptr %a219, ptr %a220, ptr %a221) %t222 = load { ptr, i64, i64 }, ptr %a219 call void @finch.gen.fail(ptr %t211, %S.ast.Node %t212, { ptr, i64, i64 } %t222) br label %endif6320 endif6320: %t223 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t224 = load { ptr, i64, i64 }, ptr %t223 store { ptr, i64, i64 } %t224, ptr %a225 store { ptr, i64, i64 } { ptr @.str.4172, i64 3, i64 0 }, ptr %a226 %t227 = call i32 @finch_str_eq(ptr %a225, ptr %a226) %t228 = icmp ne i32 %t227, 0 br i1 %t228, label %then6321, label %endif6323 then6321: %t229 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 %t230 = getelementptr inbounds %S.ast.Type, ptr %a42, i32 0, i32 4 %t231 = load i64, ptr %t230 call void @finch_str_from_int(ptr %a232, i64 %t231) %t233 = load { ptr, i64, i64 }, ptr %a232 %t234 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t233, 0 %t235 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4173, i64 3, i64 0 }) %t236 = insertvalue %S.gen.Val %t234, %S.ast.Type %t235, 1 %t237 = insertvalue %S.gen.Val %t236, i1 true, 3 %t238 = insertvalue %S.gen.Ref %t229, %S.gen.Val %t237, 2 ret %S.gen.Ref %t238 endif6323: %t239 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t240 = load { ptr, i64, i64 }, ptr %t239 store { ptr, i64, i64 } %t240, ptr %a241 store { ptr, i64, i64 } { ptr @.str.4174, i64 3, i64 0 }, ptr %a242 %t243 = call i32 @finch_str_eq(ptr %a241, ptr %a242) %t244 = icmp eq i32 %t243, 0 br i1 %t244, label %then6324, label %endif6326 then6324: %t245 = load ptr, ptr %a1 %t246 = load %S.ast.Node, ptr %a2 %t247 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t248 = load { ptr, i64, i64 }, ptr %t247 store { ptr, i64, i64 } { ptr @.str.4175, i64 34, i64 0 }, ptr %a250 store { ptr, i64, i64 } %t248, ptr %a251 call void @finch_str_concat(ptr %a249, ptr %a250, ptr %a251) %t252 = load { ptr, i64, i64 }, ptr %a249 store { ptr, i64, i64 } %t252, ptr %a254 store { ptr, i64, i64 } { ptr @.str.4176, i64 1, i64 0 }, ptr %a255 call void @finch_str_concat(ptr %a253, ptr %a254, ptr %a255) %t256 = load { ptr, i64, i64 }, ptr %a253 call void @finch.gen.fail(ptr %t245, %S.ast.Node %t246, { ptr, i64, i64 } %t256) br label %endif6326 endif6326: %t257 = getelementptr inbounds %S.gen.Ref, ptr %a35, i32 0, i32 0 %t258 = load i1, ptr %t257 %t259 = xor i1 %t258, true br i1 %t259, label %then6327, label %endif6329 then6327: %t260 = load ptr, ptr %a1 %t261 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t260, %S.ast.Node %t261, { ptr, i64, i64 } { ptr @.str.4177, i64 48, i64 0 }) br label %endif6329 endif6329: %t262 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 %t263 = getelementptr inbounds %S.gen.Ref, ptr %a35, i32 0, i32 1 %t264 = getelementptr inbounds %S.gen.Place, ptr %t263, i32 0, i32 0 %t265 = load { ptr, i64, i64 }, ptr %t264 store { ptr, i64, i64 } %t265, ptr %a266 call void @finch_str_copy(ptr %a267, ptr %a266) %t268 = load { ptr, i64, i64 }, ptr %a267 %t269 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t268, 0 %t270 = getelementptr inbounds %S.ast.Type, ptr %a42, i32 0, i32 1 %t271 = load { ptr, i64, i64 }, ptr %t270 %t272 = extractvalue { ptr, i64, i64 } %t271, 1 %t273 = icmp uge i64 0, %t272 br i1 %t273, label %range6330, label %inrange6331 range6330: call void @finch_panic_index(ptr @.str.4178, i64 3445, i64 0, i64 %t272) unreachable inrange6331: %t274 = extractvalue { ptr, i64, i64 } %t271, 0 %t275 = getelementptr inbounds %S.ast.Type, ptr %t274, i64 0 %t276 = load %S.ast.Type, ptr %t275 %t277 = call %S.ast.Type @finch.ast.ptrTo(%S.ast.Type %t276) %t278 = insertvalue %S.gen.Val %t269, %S.ast.Type %t277, 1 %t279 = insertvalue %S.gen.Ref %t262, %S.gen.Val %t278, 2 ret %S.gen.Ref %t279 endif6317: %t280 = getelementptr inbounds %S.ast.Type, ptr %a42, i32 0, i32 0 %t281 = load { ptr, i64, i64 }, ptr %t280 store { ptr, i64, i64 } %t281, ptr %a282 store { ptr, i64, i64 } { ptr @.str.4179, i64 5, i64 0 }, ptr %a283 %t284 = call i32 @finch_str_eq(ptr %a282, ptr %a283) %t285 = icmp ne i32 %t284, 0 br label %logic.from6332 logic.from6332: br i1 %t285, label %logic.end6334, label %logic.rhs6333 logic.rhs6333: %t286 = getelementptr inbounds %S.ast.Type, ptr %a42, i32 0, i32 0 %t287 = load { ptr, i64, i64 }, ptr %t286 store { ptr, i64, i64 } %t287, ptr %a288 store { ptr, i64, i64 } { ptr @.str.4180, i64 3, i64 0 }, ptr %a289 %t290 = call i32 @finch_str_eq(ptr %a288, ptr %a289) %t291 = icmp ne i32 %t290, 0 br label %logic.rend6335 logic.rend6335: br label %logic.end6334 logic.end6334: %t292 = phi i1 [ true, %logic.from6332 ], [ %t291, %logic.rend6335 ] br label %logic.from6336 logic.from6336: br i1 %t292, label %logic.rhs6337, label %logic.end6338 logic.rhs6337: %t293 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t294 = load { ptr, i64, i64 }, ptr %t293 store { ptr, i64, i64 } %t294, ptr %a295 store { ptr, i64, i64 } { ptr @.str.4181, i64 3, i64 0 }, ptr %a296 %t297 = call i32 @finch_str_eq(ptr %a295, ptr %a296) %t298 = icmp ne i32 %t297, 0 br label %logic.rend6339 logic.rend6339: br label %logic.end6338 logic.end6338: %t299 = phi i1 [ false, %logic.from6336 ], [ %t298, %logic.rend6339 ] br i1 %t299, label %then6340, label %endif6342 then6340: %t300 = load i1, ptr %a3 br i1 %t300, label %then6343, label %endif6345 then6343: %t301 = load ptr, ptr %a1 %t302 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t301, %S.ast.Node %t302, { ptr, i64, i64 } { ptr @.str.4182, i64 30, i64 0 }) br label %endif6345 endif6345: %t303 = getelementptr inbounds %S.gen.Ref, ptr %a35, i32 0, i32 0 %t304 = load i1, ptr %t303 %t305 = xor i1 %t304, true br label %logic.from6346 logic.from6346: br i1 %t305, label %logic.rhs6347, label %logic.end6348 logic.rhs6347: %t306 = getelementptr inbounds %S.gen.Ref, ptr %a35, i32 0, i32 2 %t307 = getelementptr inbounds %S.gen.Val, ptr %t306, i32 0, i32 2 %t308 = load i1, ptr %t307 br label %logic.rend6349 logic.rend6349: br label %logic.end6348 logic.end6348: %t309 = phi i1 [ false, %logic.from6346 ], [ %t308, %logic.rend6349 ] br label %logic.from6350 logic.from6350: br i1 %t309, label %logic.rhs6351, label %logic.end6352 logic.rhs6351: %t310 = getelementptr inbounds %S.gen.Ref, ptr %a35, i32 0, i32 2 %t311 = getelementptr inbounds %S.gen.Val, ptr %t310, i32 0, i32 0 %t312 = load { ptr, i64, i64 }, ptr %t311 store { ptr, i64, i64 } %t312, ptr %a313 store { ptr, i64, i64 } { ptr @.str.4184, i64 1, i64 0 }, ptr %a315 %t316 = call i32 @finch_str_starts(ptr %a313, ptr %a315) %t317 = icmp ne i32 %t316, 0 br label %logic.rend6353 logic.rend6353: br label %logic.end6352 logic.end6352: %t318 = phi i1 [ false, %logic.from6350 ], [ %t317, %logic.rend6353 ] br i1 %t318, label %then6354, label %endif6356 then6354: %t319 = load ptr, ptr %a1 %t320 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t319, %S.ast.Node %t320, { ptr, i64, i64 } { ptr @.str.4185, i64 53, i64 0 }) br label %endif6356 endif6356: %t321 = getelementptr inbounds %S.gen.Ref, ptr %a35, i32 0, i32 2 %t322 = getelementptr inbounds %S.gen.Val, ptr %t321, i32 0, i32 0 %t323 = load { ptr, i64, i64 }, ptr %t322 store { ptr, i64, i64 } %t323, ptr %a324 call void @finch_str_copy(ptr %a325, ptr %a324) %t326 = load { ptr, i64, i64 }, ptr %a325 store { ptr, i64, i64 } %t326, ptr %a327 %t328 = getelementptr inbounds %S.gen.Ref, ptr %a35, i32 0, i32 0 %t329 = load i1, ptr %t328 br i1 %t329, label %then6357, label %endif6359 then6357: %t330 = load ptr, ptr %a1 %t331 = load ptr, ptr %a1 %t332 = load %S.ast.Type, ptr %a42 %t333 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t331, %S.ast.Type %t332) %t334 = getelementptr inbounds %S.gen.Ref, ptr %a35, i32 0, i32 1 %t335 = getelementptr inbounds %S.gen.Place, ptr %t334, i32 0, i32 0 %t336 = load { ptr, i64, i64 }, ptr %t335 %t337 = call { ptr, i64, i64 } @finch.gen.load(ptr %t330, { ptr, i64, i64 } %t333, { ptr, i64, i64 } %t336) store { ptr, i64, i64 } %t337, ptr %a327 br label %endif6359 endif6359: %t338 = getelementptr inbounds %S.ast.Type, ptr %a42, i32 0, i32 0 %t339 = load { ptr, i64, i64 }, ptr %t338 store { ptr, i64, i64 } %t339, ptr %a340 store { ptr, i64, i64 } { ptr @.str.4186, i64 3, i64 0 }, ptr %a341 %t342 = call i32 @finch_str_eq(ptr %a340, ptr %a341) %t343 = icmp ne i32 %t342, 0 br i1 %t343, label %then6360, label %endif6362 then6360: %t344 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 %t345 = load ptr, ptr %a1 %t346 = load { ptr, i64, i64 }, ptr %a327 %t347 = call { ptr, i64, i64 } @finch.gen.cstr(ptr %t345, { ptr, i64, i64 } %t346) %t348 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t347, 0 %t349 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4187, i64 4, i64 0 }) %t350 = call %S.ast.Type @finch.ast.ptrTo(%S.ast.Type %t349) %t351 = insertvalue %S.gen.Val %t348, %S.ast.Type %t350, 1 %t352 = insertvalue %S.gen.Ref %t344, %S.gen.Val %t351, 2 ret %S.gen.Ref %t352 endif6362: %t353 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 %t354 = load ptr, ptr %a1 %t355 = load { ptr, i64, i64 }, ptr %a327 store { ptr, i64, i64 } { ptr @.str.4188, i64 31, i64 0 }, ptr %a357 store { ptr, i64, i64 } %t355, ptr %a358 call void @finch_str_concat(ptr %a356, ptr %a357, ptr %a358) %t359 = load { ptr, i64, i64 }, ptr %a356 store { ptr, i64, i64 } %t359, ptr %a361 store { ptr, i64, i64 } { ptr @.str.4189, i64 3, i64 0 }, ptr %a362 call void @finch_str_concat(ptr %a360, ptr %a361, ptr %a362) %t363 = load { ptr, i64, i64 }, ptr %a360 %t364 = call { ptr, i64, i64 } @finch.gen.op(ptr %t354, { ptr, i64, i64 } %t363) %t365 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t364, 0 %t366 = getelementptr inbounds %S.ast.Type, ptr %a42, i32 0, i32 1 %t367 = load { ptr, i64, i64 }, ptr %t366 %t368 = extractvalue { ptr, i64, i64 } %t367, 1 %t369 = icmp uge i64 0, %t368 br i1 %t369, label %range6363, label %inrange6364 range6363: call void @finch_panic_index(ptr @.str.4190, i64 3463, i64 0, i64 %t368) unreachable inrange6364: %t370 = extractvalue { ptr, i64, i64 } %t367, 0 %t371 = getelementptr inbounds %S.ast.Type, ptr %t370, i64 0 %t372 = load %S.ast.Type, ptr %t371 %t373 = call %S.ast.Type @finch.ast.ptrTo(%S.ast.Type %t372) %t374 = insertvalue %S.gen.Val %t365, %S.ast.Type %t373, 1 %t375 = insertvalue %S.gen.Ref %t353, %S.gen.Val %t374, 2 ret %S.gen.Ref %t375 endif6342: %t376 = getelementptr inbounds %S.ast.Type, ptr %a42, i32 0, i32 0 %t377 = load { ptr, i64, i64 }, ptr %t376 store { ptr, i64, i64 } %t377, ptr %a378 store { ptr, i64, i64 } { ptr @.str.4191, i64 5, i64 0 }, ptr %a379 %t380 = call i32 @finch_str_eq(ptr %a378, ptr %a379) %t381 = icmp ne i32 %t380, 0 br label %logic.from6365 logic.from6365: br i1 %t381, label %logic.end6367, label %logic.rhs6366 logic.rhs6366: %t382 = getelementptr inbounds %S.ast.Type, ptr %a42, i32 0, i32 0 %t383 = load { ptr, i64, i64 }, ptr %t382 store { ptr, i64, i64 } %t383, ptr %a384 store { ptr, i64, i64 } { ptr @.str.4192, i64 3, i64 0 }, ptr %a385 %t386 = call i32 @finch_str_eq(ptr %a384, ptr %a385) %t387 = icmp ne i32 %t386, 0 br label %logic.rend6368 logic.rend6368: br label %logic.end6367 logic.end6367: %t388 = phi i1 [ true, %logic.from6365 ], [ %t387, %logic.rend6368 ] br label %logic.from6369 logic.from6369: br i1 %t388, label %logic.end6371, label %logic.rhs6370 logic.rhs6370: %t389 = getelementptr inbounds %S.ast.Type, ptr %a42, i32 0, i32 0 %t390 = load { ptr, i64, i64 }, ptr %t389 store { ptr, i64, i64 } %t390, ptr %a391 store { ptr, i64, i64 } { ptr @.str.4193, i64 3, i64 0 }, ptr %a392 %t393 = call i32 @finch_str_eq(ptr %a391, ptr %a392) %t394 = icmp ne i32 %t393, 0 br label %logic.rend6372 logic.rend6372: br label %logic.end6371 logic.end6371: %t395 = phi i1 [ true, %logic.from6369 ], [ %t394, %logic.rend6372 ] br i1 %t395, label %then6373, label %endif6375 then6373: %t396 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t397 = load { ptr, i64, i64 }, ptr %t396 store { ptr, i64, i64 } %t397, ptr %a398 store { ptr, i64, i64 } { ptr @.str.4194, i64 3, i64 0 }, ptr %a399 %t400 = call i32 @finch_str_eq(ptr %a398, ptr %a399) %t401 = icmp eq i32 %t400, 0 br i1 %t401, label %then6376, label %endif6378 then6376: %t402 = load ptr, ptr %a1 %t403 = load %S.ast.Node, ptr %a2 %t404 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t405 = load { ptr, i64, i64 }, ptr %t404 store { ptr, i64, i64 } { ptr @.str.4195, i64 37, i64 0 }, ptr %a407 store { ptr, i64, i64 } %t405, ptr %a408 call void @finch_str_concat(ptr %a406, ptr %a407, ptr %a408) %t409 = load { ptr, i64, i64 }, ptr %a406 store { ptr, i64, i64 } %t409, ptr %a411 store { ptr, i64, i64 } { ptr @.str.4196, i64 1, i64 0 }, ptr %a412 call void @finch_str_concat(ptr %a410, ptr %a411, ptr %a412) %t413 = load { ptr, i64, i64 }, ptr %a410 call void @finch.gen.fail(ptr %t402, %S.ast.Node %t403, { ptr, i64, i64 } %t413) br label %endif6378 endif6378: %t414 = load i1, ptr %a3 br i1 %t414, label %then6379, label %endif6381 then6379: %t415 = load ptr, ptr %a1 %t416 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t415, %S.ast.Node %t416, { ptr, i64, i64 } { ptr @.str.4197, i64 48, i64 0 }) br label %endif6381 endif6381: %t417 = getelementptr inbounds %S.gen.Ref, ptr %a35, i32 0, i32 0 %t418 = load i1, ptr %t417 br i1 %t418, label %then6382, label %endif6384 then6382: %t419 = load ptr, ptr %a1 %t420 = load ptr, ptr %a1 %t421 = load %S.ast.Type, ptr %a42 %t422 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t420, %S.ast.Type %t421) store { ptr, i64, i64 } { ptr @.str.4198, i64 23, i64 0 }, ptr %a424 store { ptr, i64, i64 } %t422, ptr %a425 call void @finch_str_concat(ptr %a423, ptr %a424, ptr %a425) %t426 = load { ptr, i64, i64 }, ptr %a423 store { ptr, i64, i64 } %t426, ptr %a428 store { ptr, i64, i64 } { ptr @.str.4199, i64 6, i64 0 }, ptr %a429 call void @finch_str_concat(ptr %a427, ptr %a428, ptr %a429) %t430 = load { ptr, i64, i64 }, ptr %a427 %t431 = getelementptr inbounds %S.gen.Ref, ptr %a35, i32 0, i32 1 %t432 = getelementptr inbounds %S.gen.Place, ptr %t431, i32 0, i32 0 %t433 = load { ptr, i64, i64 }, ptr %t432 store { ptr, i64, i64 } %t430, ptr %a435 store { ptr, i64, i64 } %t433, ptr %a436 call void @finch_str_concat(ptr %a434, ptr %a435, ptr %a436) %t437 = load { ptr, i64, i64 }, ptr %a434 store { ptr, i64, i64 } %t437, ptr %a439 store { ptr, i64, i64 } { ptr @.str.4200, i64 14, i64 0 }, ptr %a440 call void @finch_str_concat(ptr %a438, ptr %a439, ptr %a440) %t441 = load { ptr, i64, i64 }, ptr %a438 %t442 = call { ptr, i64, i64 } @finch.gen.op(ptr %t419, { ptr, i64, i64 } %t441) store { ptr, i64, i64 } %t442, ptr %a443 %t444 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 %t445 = load ptr, ptr %a1 %t446 = load { ptr, i64, i64 }, ptr %a443 %t447 = call { ptr, i64, i64 } @finch.gen.load(ptr %t445, { ptr, i64, i64 } { ptr @.str.4201, i64 3, i64 0 }, { ptr, i64, i64 } %t446) %t448 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t447, 0 %t449 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4202, i64 3, i64 0 }) %t450 = insertvalue %S.gen.Val %t448, %S.ast.Type %t449, 1 %t451 = insertvalue %S.gen.Ref %t444, %S.gen.Val %t450, 2 ret %S.gen.Ref %t451 endif6384: %t452 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 %t453 = load ptr, ptr %a1 %t454 = load ptr, ptr %a1 %t455 = load %S.ast.Type, ptr %a42 %t456 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t454, %S.ast.Type %t455) store { ptr, i64, i64 } { ptr @.str.4203, i64 13, i64 0 }, ptr %a458 store { ptr, i64, i64 } %t456, ptr %a459 call void @finch_str_concat(ptr %a457, ptr %a458, ptr %a459) %t460 = load { ptr, i64, i64 }, ptr %a457 store { ptr, i64, i64 } %t460, ptr %a462 store { ptr, i64, i64 } { ptr @.str.4204, i64 1, i64 0 }, ptr %a463 call void @finch_str_concat(ptr %a461, ptr %a462, ptr %a463) %t464 = load { ptr, i64, i64 }, ptr %a461 %t465 = getelementptr inbounds %S.gen.Ref, ptr %a35, i32 0, i32 2 %t466 = getelementptr inbounds %S.gen.Val, ptr %t465, i32 0, i32 0 %t467 = load { ptr, i64, i64 }, ptr %t466 store { ptr, i64, i64 } %t464, ptr %a469 store { ptr, i64, i64 } %t467, ptr %a470 call void @finch_str_concat(ptr %a468, ptr %a469, ptr %a470) %t471 = load { ptr, i64, i64 }, ptr %a468 store { ptr, i64, i64 } %t471, ptr %a473 store { ptr, i64, i64 } { ptr @.str.4205, i64 3, i64 0 }, ptr %a474 call void @finch_str_concat(ptr %a472, ptr %a473, ptr %a474) %t475 = load { ptr, i64, i64 }, ptr %a472 %t476 = call { ptr, i64, i64 } @finch.gen.op(ptr %t453, { ptr, i64, i64 } %t475) %t477 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t476, 0 %t478 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4206, i64 3, i64 0 }) %t479 = insertvalue %S.gen.Val %t477, %S.ast.Type %t478, 1 %t480 = insertvalue %S.gen.Ref %t452, %S.gen.Val %t479, 2 ret %S.gen.Ref %t480 endif6375: %t481 = getelementptr inbounds %S.ast.Type, ptr %a42, i32 0, i32 0 %t482 = load { ptr, i64, i64 }, ptr %t481 store { ptr, i64, i64 } %t482, ptr %a483 store { ptr, i64, i64 } { ptr @.str.4207, i64 6, i64 0 }, ptr %a484 %t485 = call i32 @finch_str_eq(ptr %a483, ptr %a484) %t486 = icmp eq i32 %t485, 0 br i1 %t486, label %then6385, label %endif6387 then6385: %t487 = load ptr, ptr %a1 %t488 = load %S.ast.Node, ptr %a2 %t489 = load %S.ast.Type, ptr %a42 %t490 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t489) store { ptr, i64, i64 } %t490, ptr %a492 store { ptr, i64, i64 } { ptr @.str.4208, i64 21, i64 0 }, ptr %a493 call void @finch_str_concat(ptr %a491, ptr %a492, ptr %a493) %t494 = load { ptr, i64, i64 }, ptr %a491 %t495 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t496 = load { ptr, i64, i64 }, ptr %t495 store { ptr, i64, i64 } %t494, ptr %a498 store { ptr, i64, i64 } %t496, ptr %a499 call void @finch_str_concat(ptr %a497, ptr %a498, ptr %a499) %t500 = load { ptr, i64, i64 }, ptr %a497 store { ptr, i64, i64 } %t500, ptr %a502 store { ptr, i64, i64 } { ptr @.str.4209, i64 2, i64 0 }, ptr %a503 call void @finch_str_concat(ptr %a501, ptr %a502, ptr %a503) %t504 = load { ptr, i64, i64 }, ptr %a501 call void @finch.gen.fail(ptr %t487, %S.ast.Node %t488, { ptr, i64, i64 } %t504) br label %endif6387 endif6387: %t505 = load ptr, ptr %a1 %t506 = icmp eq ptr %t505, null br i1 %t506, label %panic6388, label %ok6389 panic6388: call void @finch_panic(ptr @.str.4210, i64 3481, ptr @.str.4211) unreachable ok6389: %t507 = getelementptr inbounds %S.gen.Gen, ptr %t505, i32 0, i32 15 %t508 = load ptr, ptr %a1 %t509 = getelementptr inbounds %S.ast.Type, ptr %a42, i32 0, i32 3 %t510 = load { ptr, i64, i64 }, ptr %t509 %t511 = getelementptr inbounds %S.ast.Type, ptr %a42, i32 0, i32 2 %t512 = load { ptr, i64, i64 }, ptr %t511 %t513 = call i64 @finch.gen.findStruct(ptr %t508, { ptr, i64, i64 } %t510, { ptr, i64, i64 } %t512) %t514 = load { ptr, i64, i64 }, ptr %t507 %t515 = extractvalue { ptr, i64, i64 } %t514, 1 %t516 = icmp uge i64 %t513, %t515 br i1 %t516, label %range6390, label %inrange6391 range6390: call void @finch_panic_index(ptr @.str.4212, i64 3481, i64 %t513, i64 %t515) unreachable inrange6391: %t517 = extractvalue { ptr, i64, i64 } %t514, 0 %t518 = getelementptr inbounds %S.gen.StructDef, ptr %t517, i64 %t513 %t519 = load %S.gen.StructDef, ptr %t518 store %S.gen.StructDef %t519, ptr %a520 call void @finch.copy.S_gen_StructDef(ptr %a521, ptr %a520) %t522 = load %S.gen.StructDef, ptr %a521 store %S.gen.StructDef %t522, ptr %a523 %t524 = getelementptr inbounds %S.gen.StructDef, ptr %a523, i32 0, i32 11 %t525 = getelementptr inbounds { ptr, i64, i64 }, ptr %t524, i32 0, i32 1 %t526 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t527 = load { ptr, i64, i64 }, ptr %t526 store i64 -1, ptr %a528 %t529 = load i64, ptr %t525 %t530 = load ptr, ptr %t524 store i64 0, ptr %a531 br label %find.cond6392 find.cond6392: %t532 = load i64, ptr %a531 %t533 = icmp slt i64 %t532, %t529 br i1 %t533, label %find.body6393, label %find.end6396 find.body6393: %t534 = getelementptr inbounds { ptr, i64, i64 }, ptr %t530, i64 %t532 %t535 = load { ptr, i64, i64 }, ptr %t534 store { ptr, i64, i64 } %t535, ptr %a536 store { ptr, i64, i64 } %t527, ptr %a537 %t538 = call i32 @finch_str_eq(ptr %a536, ptr %a537) %t539 = icmp ne i32 %t538, 0 br i1 %t539, label %find.hit6394, label %find.next6395 find.hit6394: store i64 %t532, ptr %a528 br label %find.end6396 find.next6395: %t540 = add i64 %t532, 1 store i64 %t540, ptr %a531 br label %find.cond6392 find.end6396: %t541 = load i64, ptr %a528 store i64 %t541, ptr %a542 %t543 = load i64, ptr %a542 %t544 = icmp slt i64 %t543, 0 br i1 %t544, label %then6397, label %endif6399 then6397: %t545 = load ptr, ptr %a1 %t546 = load %S.ast.Node, ptr %a2 %t547 = load %S.ast.Type, ptr %a42 %t548 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t547) store { ptr, i64, i64 } { ptr @.str.4213, i64 11, i64 0 }, ptr %a550 store { ptr, i64, i64 } %t548, ptr %a551 call void @finch_str_concat(ptr %a549, ptr %a550, ptr %a551) %t552 = load { ptr, i64, i64 }, ptr %a549 store { ptr, i64, i64 } %t552, ptr %a554 store { ptr, i64, i64 } { ptr @.str.4214, i64 15, i64 0 }, ptr %a555 call void @finch_str_concat(ptr %a553, ptr %a554, ptr %a555) %t556 = load { ptr, i64, i64 }, ptr %a553 %t557 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t558 = load { ptr, i64, i64 }, ptr %t557 store { ptr, i64, i64 } %t556, ptr %a560 store { ptr, i64, i64 } %t558, ptr %a561 call void @finch_str_concat(ptr %a559, ptr %a560, ptr %a561) %t562 = load { ptr, i64, i64 }, ptr %a559 store { ptr, i64, i64 } %t562, ptr %a564 store { ptr, i64, i64 } { ptr @.str.4215, i64 11, i64 0 }, ptr %a565 call void @finch_str_concat(ptr %a563, ptr %a564, ptr %a565) %t566 = load { ptr, i64, i64 }, ptr %a563 %t567 = getelementptr inbounds %S.gen.StructDef, ptr %a523, i32 0, i32 11 %t568 = getelementptr inbounds { ptr, i64, i64 }, ptr %t567, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.4216, i64 2, i64 0 }, ptr %a569 call void @finch_str_join(ptr %a570, ptr %t567, ptr %a569) %t571 = load { ptr, i64, i64 }, ptr %a570 store { ptr, i64, i64 } %t566, ptr %a573 store { ptr, i64, i64 } %t571, ptr %a574 call void @finch_str_concat(ptr %a572, ptr %a573, ptr %a574) %t575 = load { ptr, i64, i64 }, ptr %a572 store { ptr, i64, i64 } %t575, ptr %a577 store { ptr, i64, i64 } { ptr @.str.4217, i64 1, i64 0 }, ptr %a578 call void @finch_str_concat(ptr %a576, ptr %a577, ptr %a578) %t579 = load { ptr, i64, i64 }, ptr %a576 call void @finch.gen.fail(ptr %t545, %S.ast.Node %t546, { ptr, i64, i64 } %t579) br label %endif6399 endif6399: %t580 = getelementptr inbounds %S.gen.StructDef, ptr %a523, i32 0, i32 12 %t581 = load i64, ptr %a542 %t582 = load { ptr, i64, i64 }, ptr %t580 %t583 = extractvalue { ptr, i64, i64 } %t582, 1 %t584 = icmp uge i64 %t581, %t583 br i1 %t584, label %range6400, label %inrange6401 range6400: call void @finch_panic_index(ptr @.str.4218, i64 3486, i64 %t581, i64 %t583) unreachable inrange6401: %t585 = extractvalue { ptr, i64, i64 } %t582, 0 %t586 = getelementptr inbounds %S.ast.Type, ptr %t585, i64 %t581 %t587 = load %S.ast.Type, ptr %t586 store %S.ast.Type %t587, ptr %a588 call void @finch.copy.S_ast_Type(ptr %a589, ptr %a588) %t590 = load %S.ast.Type, ptr %a589 store %S.ast.Type %t590, ptr %a591 %t592 = load ptr, ptr %a1 %t593 = load %S.ast.Node, ptr %a2 %t594 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 %t595 = load i64, ptr %t594 %t596 = add i64 %t595, 1 %t597 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t598 = getelementptr inbounds { ptr, i64, i64 }, ptr %t597, i32 0, i32 1 %t599 = load i64, ptr %t598 %t600 = load %S.ast.Type, ptr %a591 %t601 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t600) store { ptr, i64, i64 } { ptr @.str.4219, i64 9, i64 0 }, ptr %a603 store { ptr, i64, i64 } %t601, ptr %a604 call void @finch_str_concat(ptr %a602, ptr %a603, ptr %a604) %t605 = load { ptr, i64, i64 }, ptr %a602 store { ptr, i64, i64 } %t605, ptr %a607 store { ptr, i64, i64 } { ptr @.str.4220, i64 1, i64 0 }, ptr %a608 call void @finch_str_concat(ptr %a606, ptr %a607, ptr %a608) %t609 = load { ptr, i64, i64 }, ptr %a606 %t610 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t611 = load { ptr, i64, i64 }, ptr %t610 store { ptr, i64, i64 } %t609, ptr %a613 store { ptr, i64, i64 } %t611, ptr %a614 call void @finch_str_concat(ptr %a612, ptr %a613, ptr %a614) %t615 = load { ptr, i64, i64 }, ptr %a612 store { ptr, i64, i64 } %t615, ptr %a617 store { ptr, i64, i64 } { ptr @.str.4221, i64 4, i64 0 }, ptr %a618 call void @finch_str_concat(ptr %a616, ptr %a617, ptr %a618) %t619 = load { ptr, i64, i64 }, ptr %a616 call void @finch.gen.noteRef(ptr %t592, %S.ast.Node %t593, i64 %t596, i64 %t599, { ptr, i64, i64 } %t619, { ptr, i64, i64 } { ptr @.str.4222, i64 0, i64 0 }, i64 0, i64 0) %t620 = getelementptr inbounds %S.gen.Ref, ptr %a35, i32 0, i32 0 %t621 = load i1, ptr %t620 br i1 %t621, label %then6402, label %endif6404 then6402: %t622 = load ptr, ptr %a1 %t623 = load ptr, ptr %a1 %t624 = load %S.ast.Type, ptr %a42 %t625 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t623, %S.ast.Type %t624) store { ptr, i64, i64 } { ptr @.str.4223, i64 23, i64 0 }, ptr %a627 store { ptr, i64, i64 } %t625, ptr %a628 call void @finch_str_concat(ptr %a626, ptr %a627, ptr %a628) %t629 = load { ptr, i64, i64 }, ptr %a626 store { ptr, i64, i64 } %t629, ptr %a631 store { ptr, i64, i64 } { ptr @.str.4224, i64 6, i64 0 }, ptr %a632 call void @finch_str_concat(ptr %a630, ptr %a631, ptr %a632) %t633 = load { ptr, i64, i64 }, ptr %a630 %t634 = getelementptr inbounds %S.gen.Ref, ptr %a35, i32 0, i32 1 %t635 = getelementptr inbounds %S.gen.Place, ptr %t634, i32 0, i32 0 %t636 = load { ptr, i64, i64 }, ptr %t635 store { ptr, i64, i64 } %t633, ptr %a638 store { ptr, i64, i64 } %t636, ptr %a639 call void @finch_str_concat(ptr %a637, ptr %a638, ptr %a639) %t640 = load { ptr, i64, i64 }, ptr %a637 store { ptr, i64, i64 } %t640, ptr %a642 store { ptr, i64, i64 } { ptr @.str.4225, i64 13, i64 0 }, ptr %a643 call void @finch_str_concat(ptr %a641, ptr %a642, ptr %a643) %t644 = load { ptr, i64, i64 }, ptr %a641 %t645 = getelementptr inbounds %S.gen.StructDef, ptr %a523, i32 0, i32 3 %t646 = load i64, ptr %a542 %t647 = load { ptr, i64, i64 }, ptr %t645 %t648 = extractvalue { ptr, i64, i64 } %t647, 1 %t649 = icmp uge i64 %t646, %t648 br i1 %t649, label %range6405, label %inrange6406 range6405: call void @finch_panic_index(ptr @.str.4226, i64 3489, i64 %t646, i64 %t648) unreachable inrange6406: %t650 = extractvalue { ptr, i64, i64 } %t647, 0 %t651 = getelementptr inbounds i64, ptr %t650, i64 %t646 %t652 = load i64, ptr %t651 call void @finch_str_from_int(ptr %a653, i64 %t652) %t654 = load { ptr, i64, i64 }, ptr %a653 store { ptr, i64, i64 } %t644, ptr %a656 store { ptr, i64, i64 } %t654, ptr %a657 call void @finch_str_concat(ptr %a655, ptr %a656, ptr %a657) %t658 = load { ptr, i64, i64 }, ptr %a655 %t659 = call { ptr, i64, i64 } @finch.gen.op(ptr %t622, { ptr, i64, i64 } %t658) store { ptr, i64, i64 } %t659, ptr %a660 %t661 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0 %t662 = load { ptr, i64, i64 }, ptr %a660 store { ptr, i64, i64 } %t662, ptr %a663 call void @finch_str_copy(ptr %a664, ptr %a663) %t665 = load { ptr, i64, i64 }, ptr %a664 %t666 = insertvalue %S.gen.Place zeroinitializer, { ptr, i64, i64 } %t665, 0 %t667 = load %S.ast.Type, ptr %a591 store %S.ast.Type %t667, ptr %a668 call void @finch.copy.S_ast_Type(ptr %a669, ptr %a668) %t670 = load %S.ast.Type, ptr %a669 %t671 = insertvalue %S.gen.Place %t666, %S.ast.Type %t670, 1 %t672 = insertvalue %S.gen.Ref %t661, %S.gen.Place %t671, 1 ret %S.gen.Ref %t672 endif6404: %t673 = load ptr, ptr %a1 %t674 = load ptr, ptr %a1 %t675 = load %S.ast.Type, ptr %a42 %t676 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t674, %S.ast.Type %t675) store { ptr, i64, i64 } { ptr @.str.4227, i64 13, i64 0 }, ptr %a678 store { ptr, i64, i64 } %t676, ptr %a679 call void @finch_str_concat(ptr %a677, ptr %a678, ptr %a679) %t680 = load { ptr, i64, i64 }, ptr %a677 store { ptr, i64, i64 } %t680, ptr %a682 store { ptr, i64, i64 } { ptr @.str.4228, i64 1, i64 0 }, ptr %a683 call void @finch_str_concat(ptr %a681, ptr %a682, ptr %a683) %t684 = load { ptr, i64, i64 }, ptr %a681 %t685 = getelementptr inbounds %S.gen.Ref, ptr %a35, i32 0, i32 2 %t686 = getelementptr inbounds %S.gen.Val, ptr %t685, i32 0, i32 0 %t687 = load { ptr, i64, i64 }, ptr %t686 store { ptr, i64, i64 } %t684, ptr %a689 store { ptr, i64, i64 } %t687, ptr %a690 call void @finch_str_concat(ptr %a688, ptr %a689, ptr %a690) %t691 = load { ptr, i64, i64 }, ptr %a688 store { ptr, i64, i64 } %t691, ptr %a693 store { ptr, i64, i64 } { ptr @.str.4229, i64 2, i64 0 }, ptr %a694 call void @finch_str_concat(ptr %a692, ptr %a693, ptr %a694) %t695 = load { ptr, i64, i64 }, ptr %a692 %t696 = getelementptr inbounds %S.gen.StructDef, ptr %a523, i32 0, i32 3 %t697 = load i64, ptr %a542 %t698 = load { ptr, i64, i64 }, ptr %t696 %t699 = extractvalue { ptr, i64, i64 } %t698, 1 %t700 = icmp uge i64 %t697, %t699 br i1 %t700, label %range6407, label %inrange6408 range6407: call void @finch_panic_index(ptr @.str.4230, i64 3492, i64 %t697, i64 %t699) unreachable inrange6408: %t701 = extractvalue { ptr, i64, i64 } %t698, 0 %t702 = getelementptr inbounds i64, ptr %t701, i64 %t697 %t703 = load i64, ptr %t702 call void @finch_str_from_int(ptr %a704, i64 %t703) %t705 = load { ptr, i64, i64 }, ptr %a704 store { ptr, i64, i64 } %t695, ptr %a707 store { ptr, i64, i64 } %t705, ptr %a708 call void @finch_str_concat(ptr %a706, ptr %a707, ptr %a708) %t709 = load { ptr, i64, i64 }, ptr %a706 %t710 = call { ptr, i64, i64 } @finch.gen.op(ptr %t673, { ptr, i64, i64 } %t709) store { ptr, i64, i64 } %t710, ptr %a711 %t712 = load { ptr, i64, i64 }, ptr %a711 store { ptr, i64, i64 } %t712, ptr %a713 call void @finch_str_copy(ptr %a714, ptr %a713) %t715 = load { ptr, i64, i64 }, ptr %a714 %t716 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t715, 0 %t717 = load %S.ast.Type, ptr %a591 store %S.ast.Type %t717, ptr %a718 call void @finch.copy.S_ast_Type(ptr %a719, ptr %a718) %t720 = load %S.ast.Type, ptr %a719 %t721 = insertvalue %S.gen.Val %t716, %S.ast.Type %t720, 1 store %S.gen.Val %t721, ptr %a722 %t723 = load ptr, ptr %a1 %t724 = load %S.ast.Type, ptr %a591 %t725 = call i1 @finch.gen.owning(ptr %t723, %S.ast.Type %t724) br label %logic.from6409 logic.from6409: br i1 %t725, label %logic.rhs6410, label %logic.end6411 logic.rhs6410: %t726 = getelementptr inbounds %S.gen.Ref, ptr %a35, i32 0, i32 2 %t727 = getelementptr inbounds %S.gen.Val, ptr %t726, i32 0, i32 2 %t728 = load i1, ptr %t727 br label %logic.rend6412 logic.rend6412: br label %logic.end6411 logic.end6411: %t729 = phi i1 [ false, %logic.from6409 ], [ %t728, %logic.rend6412 ] br i1 %t729, label %then6413, label %endif6415 then6413: %t730 = load ptr, ptr %a1 %t731 = load { ptr, i64, i64 }, ptr %a711 %t732 = load %S.ast.Type, ptr %a591 %t733 = call { ptr, i64, i64 } @finch.gen.copyValue(ptr %t730, { ptr, i64, i64 } %t731, %S.ast.Type %t732) %t734 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t733, 0 %t735 = load %S.ast.Type, ptr %a591 store %S.ast.Type %t735, ptr %a736 call void @finch.copy.S_ast_Type(ptr %a737, ptr %a736) %t738 = load %S.ast.Type, ptr %a737 %t739 = insertvalue %S.gen.Val %t734, %S.ast.Type %t738, 1 %t740 = insertvalue %S.gen.Val %t739, i1 true, 2 store %S.gen.Val %t740, ptr %a722 br label %endif6415 endif6415: %t741 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 %t742 = load %S.gen.Val, ptr %a722 store %S.gen.Val %t742, ptr %a743 call void @finch.copy.S_gen_Val(ptr %a744, ptr %a743) %t745 = load %S.gen.Val, ptr %a744 %t746 = insertvalue %S.gen.Ref %t741, %S.gen.Val %t745, 2 ret %S.gen.Ref %t746 } define internal %S.gen.Ref @finch.gen.index(ptr %p0, %S.ast.Node %p1, i1 %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a3 = alloca i1, align 16 %a14 = alloca %S.gen.Ref, align 16 %a18 = alloca %S.ast.Type, align 16 %a19 = alloca %S.ast.Type, align 16 %a21 = alloca %S.ast.Type, align 16 %a27 = alloca %S.ast.Type, align 16 %a28 = alloca %S.ast.Type, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca { ptr, i64, i64 }, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 %a106 = alloca { ptr, i64, i64 }, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca { ptr, i64, i64 }, align 16 %a110 = alloca { ptr, i64, i64 }, align 16 %a111 = alloca { ptr, i64, i64 }, align 16 %a114 = alloca { ptr, i64, i64 }, align 16 %a115 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca { ptr, i64, i64 }, align 16 %a119 = alloca { ptr, i64, i64 }, align 16 %a122 = alloca { ptr, i64, i64 }, align 16 %a123 = alloca { ptr, i64, i64 }, align 16 %a133 = alloca %S.ast.Type, align 16 %a134 = alloca %S.ast.Type, align 16 %a140 = alloca { ptr, i64, i64 }, align 16 %a141 = alloca { ptr, i64, i64 }, align 16 %a153 = alloca { ptr, i64, i64 }, align 16 %a154 = alloca { ptr, i64, i64 }, align 16 %a156 = alloca { ptr, i64, i64 }, align 16 %a171 = alloca %S.ast.Type, align 16 %a172 = alloca %S.ast.Type, align 16 %a174 = alloca %S.ast.Type, align 16 %a180 = alloca { ptr, i64, i64 }, align 16 %a181 = alloca { ptr, i64, i64 }, align 16 %a182 = alloca { ptr, i64, i64 }, align 16 %a184 = alloca { ptr, i64, i64 }, align 16 %a185 = alloca { ptr, i64, i64 }, align 16 %a186 = alloca { ptr, i64, i64 }, align 16 %a189 = alloca { ptr, i64, i64 }, align 16 %a190 = alloca { ptr, i64, i64 }, align 16 %a191 = alloca { ptr, i64, i64 }, align 16 %a193 = alloca { ptr, i64, i64 }, align 16 %a194 = alloca { ptr, i64, i64 }, align 16 %a195 = alloca { ptr, i64, i64 }, align 16 %a198 = alloca { ptr, i64, i64 }, align 16 %a199 = alloca { ptr, i64, i64 }, align 16 %a200 = alloca { ptr, i64, i64 }, align 16 %a205 = alloca %S.ast.Type, align 16 %a206 = alloca %S.ast.Type, align 16 %a212 = alloca { ptr, i64, i64 }, align 16 %a213 = alloca { ptr, i64, i64 }, align 16 %a218 = alloca { ptr, i64, i64 }, align 16 %a219 = alloca { ptr, i64, i64 }, align 16 %a227 = alloca { ptr, i64, i64 }, align 16 %a228 = alloca { ptr, i64, i64 }, align 16 %a229 = alloca { ptr, i64, i64 }, align 16 %a232 = alloca %S.ast.Type, align 16 %a235 = alloca { ptr, i64, i64 }, align 16 %a236 = alloca { ptr, i64, i64 }, align 16 %a246 = alloca %S.ast.Type, align 16 %a247 = alloca %S.ast.Type, align 16 %a251 = alloca { ptr, i64, i64 }, align 16 %a252 = alloca { ptr, i64, i64 }, align 16 %a266 = alloca { ptr, i64, i64 }, align 16 %a267 = alloca { ptr, i64, i64 }, align 16 %a268 = alloca { ptr, i64, i64 }, align 16 %a270 = alloca { ptr, i64, i64 }, align 16 %a271 = alloca { ptr, i64, i64 }, align 16 %a272 = alloca { ptr, i64, i64 }, align 16 %a277 = alloca { ptr, i64, i64 }, align 16 %a278 = alloca { ptr, i64, i64 }, align 16 %a280 = alloca { ptr, i64, i64 }, align 16 %a290 = alloca { ptr, i64, i64 }, align 16 %a291 = alloca { ptr, i64, i64 }, align 16 %a292 = alloca { ptr, i64, i64 }, align 16 %a294 = alloca { ptr, i64, i64 }, align 16 %a295 = alloca { ptr, i64, i64 }, align 16 %a296 = alloca { ptr, i64, i64 }, align 16 %a299 = alloca { ptr, i64, i64 }, align 16 %a306 = alloca { ptr, i64, i64 }, align 16 %a307 = alloca { ptr, i64, i64 }, align 16 %a308 = alloca { ptr, i64, i64 }, align 16 %a310 = alloca { ptr, i64, i64 }, align 16 %a311 = alloca { ptr, i64, i64 }, align 16 %a312 = alloca { ptr, i64, i64 }, align 16 %a315 = alloca { ptr, i64, i64 }, align 16 %a320 = alloca { ptr, i64, i64 }, align 16 %a321 = alloca { ptr, i64, i64 }, align 16 %a322 = alloca { ptr, i64, i64 }, align 16 %a324 = alloca { ptr, i64, i64 }, align 16 %a325 = alloca { ptr, i64, i64 }, align 16 %a326 = alloca { ptr, i64, i64 }, align 16 %a329 = alloca { ptr, i64, i64 }, align 16 %a330 = alloca { ptr, i64, i64 }, align 16 %a331 = alloca { ptr, i64, i64 }, align 16 %a333 = alloca { ptr, i64, i64 }, align 16 %a334 = alloca { ptr, i64, i64 }, align 16 %a335 = alloca { ptr, i64, i64 }, align 16 %a338 = alloca { ptr, i64, i64 }, align 16 %a339 = alloca { ptr, i64, i64 }, align 16 %a340 = alloca { ptr, i64, i64 }, align 16 %a343 = alloca { ptr, i64, i64 }, align 16 %a348 = alloca { ptr, i64, i64 }, align 16 %a349 = alloca { ptr, i64, i64 }, align 16 %a353 = alloca %S.ast.Type, align 16 %a354 = alloca %S.ast.Type, align 16 %a364 = alloca { ptr, i64, i64 }, align 16 %a366 = alloca { ptr, i64, i64 }, align 16 %a367 = alloca { ptr, i64, i64 }, align 16 %a371 = alloca %S.ast.Type, align 16 %a372 = alloca %S.ast.Type, align 16 %a375 = alloca %S.gen.Val, align 16 %a389 = alloca %S.ast.Type, align 16 %a390 = alloca %S.ast.Type, align 16 %a396 = alloca %S.gen.Val, align 16 %a397 = alloca %S.gen.Val, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 store i1 %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t6 = load { ptr, i64, i64 }, ptr %t5 %t7 = extractvalue { ptr, i64, i64 } %t6, 1 %t8 = icmp uge i64 0, %t7 br i1 %t8, label %range6416, label %inrange6417 range6416: call void @finch_panic_index(ptr @.str.4231, i64 3501, i64 0, i64 %t7) unreachable inrange6417: %t9 = extractvalue { ptr, i64, i64 } %t6, 0 %t10 = getelementptr inbounds %S.ast.Node, ptr %t9, i64 0 %t11 = load %S.ast.Node, ptr %t10 %t12 = load i1, ptr %a3 %t13 = call %S.gen.Ref @finch.gen.ref(ptr %t4, %S.ast.Node %t11, i1 %t12) store %S.gen.Ref %t13, ptr %a14 %t15 = getelementptr inbounds %S.gen.Ref, ptr %a14, i32 0, i32 2 %t16 = getelementptr inbounds %S.gen.Val, ptr %t15, i32 0, i32 1 %t17 = load %S.ast.Type, ptr %t16 store %S.ast.Type %t17, ptr %a18 call void @finch.copy.S_ast_Type(ptr %a19, ptr %a18) %t20 = load %S.ast.Type, ptr %a19 store %S.ast.Type %t20, ptr %a21 %t22 = getelementptr inbounds %S.gen.Ref, ptr %a14, i32 0, i32 0 %t23 = load i1, ptr %t22 br i1 %t23, label %then6418, label %endif6420 then6418: %t24 = getelementptr inbounds %S.gen.Ref, ptr %a14, i32 0, i32 1 %t25 = getelementptr inbounds %S.gen.Place, ptr %t24, i32 0, i32 1 %t26 = load %S.ast.Type, ptr %t25 store %S.ast.Type %t26, ptr %a27 call void @finch.copy.S_ast_Type(ptr %a28, ptr %a27) %t29 = load %S.ast.Type, ptr %a28 store %S.ast.Type %t29, ptr %a21 br label %endif6420 endif6420: %t30 = getelementptr inbounds %S.ast.Type, ptr %a21, i32 0, i32 0 %t31 = load { ptr, i64, i64 }, ptr %t30 store { ptr, i64, i64 } %t31, ptr %a32 store { ptr, i64, i64 } { ptr @.str.4232, i64 3, i64 0 }, ptr %a33 %t34 = call i32 @finch_str_eq(ptr %a32, ptr %a33) %t35 = icmp ne i32 %t34, 0 br i1 %t35, label %then6421, label %endif6423 then6421: %t36 = load ptr, ptr %a1 %t37 = load %S.ast.Node, ptr %a2 %t38 = load %S.gen.Ref, ptr %a14 %t39 = load %S.ast.Type, ptr %a21 %t40 = load i1, ptr %a3 %t41 = call %S.gen.Ref @finch.gen.mapIndex(ptr %t36, %S.ast.Node %t37, %S.gen.Ref %t38, %S.ast.Type %t39, i1 %t40) ret %S.gen.Ref %t41 endif6423: %t42 = load ptr, ptr %a1 %t43 = load ptr, ptr %a1 %t44 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t45 = load { ptr, i64, i64 }, ptr %t44 %t46 = extractvalue { ptr, i64, i64 } %t45, 1 %t47 = icmp uge i64 1, %t46 br i1 %t47, label %range6424, label %inrange6425 range6424: call void @finch_panic_index(ptr @.str.4233, i64 3509, i64 1, i64 %t46) unreachable inrange6425: %t48 = extractvalue { ptr, i64, i64 } %t45, 0 %t49 = getelementptr inbounds %S.ast.Node, ptr %t48, i64 1 %t50 = load %S.ast.Node, ptr %t49 %t51 = call %S.gen.Val @finch.gen.expr(ptr %t43, %S.ast.Node %t50) %t52 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4234, i64 3, i64 0 }) %t53 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t54 = load { ptr, i64, i64 }, ptr %t53 %t55 = extractvalue { ptr, i64, i64 } %t54, 1 %t56 = icmp uge i64 1, %t55 br i1 %t56, label %range6426, label %inrange6427 range6426: call void @finch_panic_index(ptr @.str.4235, i64 3509, i64 1, i64 %t55) unreachable inrange6427: %t57 = extractvalue { ptr, i64, i64 } %t54, 0 %t58 = getelementptr inbounds %S.ast.Node, ptr %t57, i64 1 %t59 = load %S.ast.Node, ptr %t58 %t60 = call %S.gen.Val @finch.gen.coerce(ptr %t42, %S.gen.Val %t51, %S.ast.Type %t52, %S.ast.Node %t59, { ptr, i64, i64 } { ptr @.str.4236, i64 8, i64 0 }) %t61 = extractvalue %S.gen.Val %t60, 0 store { ptr, i64, i64 } %t61, ptr %a62 call void @finch_str_copy(ptr %a63, ptr %a62) %t64 = load { ptr, i64, i64 }, ptr %a63 store { ptr, i64, i64 } %t64, ptr %a65 %t66 = getelementptr inbounds %S.ast.Type, ptr %a21, i32 0, i32 0 %t67 = load { ptr, i64, i64 }, ptr %t66 store { ptr, i64, i64 } %t67, ptr %a68 store { ptr, i64, i64 } { ptr @.str.4237, i64 5, i64 0 }, ptr %a69 %t70 = call i32 @finch_str_eq(ptr %a68, ptr %a69) %t71 = icmp ne i32 %t70, 0 br i1 %t71, label %then6428, label %endif6430 then6428: store { ptr, i64, i64 } { ptr @.str.4238, i64 0, i64 0 }, ptr %a72 %t73 = getelementptr inbounds %S.gen.Ref, ptr %a14, i32 0, i32 0 %t74 = load i1, ptr %t73 br i1 %t74, label %then6431, label %else6432 then6431: %t75 = getelementptr inbounds %S.gen.Ref, ptr %a14, i32 0, i32 1 %t76 = getelementptr inbounds %S.gen.Place, ptr %t75, i32 0, i32 0 %t77 = load { ptr, i64, i64 }, ptr %t76 store { ptr, i64, i64 } %t77, ptr %a78 call void @finch_str_copy(ptr %a79, ptr %a78) %t80 = load { ptr, i64, i64 }, ptr %a79 store { ptr, i64, i64 } %t80, ptr %a72 br label %endif6433 else6432: %t81 = load ptr, ptr %a1 %t82 = getelementptr inbounds %S.gen.Ref, ptr %a14, i32 0, i32 2 %t83 = load %S.gen.Val, ptr %t82 %t84 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t81, %S.gen.Val %t83) store { ptr, i64, i64 } %t84, ptr %a72 br label %endif6433 endif6433: %t85 = load ptr, ptr %a1 %t86 = load { ptr, i64, i64 }, ptr %a65 %t87 = getelementptr inbounds %S.ast.Type, ptr %a21, i32 0, i32 4 %t88 = load i64, ptr %t87 call void @finch_str_from_int(ptr %a89, i64 %t88) %t90 = load { ptr, i64, i64 }, ptr %a89 %t91 = load %S.ast.Node, ptr %a2 call void @finch.gen.boundsCheck(ptr %t85, { ptr, i64, i64 } %t86, { ptr, i64, i64 } %t90, %S.ast.Node %t91) %t92 = load ptr, ptr %a1 %t93 = load ptr, ptr %a1 %t94 = load %S.ast.Type, ptr %a21 %t95 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t93, %S.ast.Type %t94) store { ptr, i64, i64 } { ptr @.str.4239, i64 23, i64 0 }, ptr %a97 store { ptr, i64, i64 } %t95, ptr %a98 call void @finch_str_concat(ptr %a96, ptr %a97, ptr %a98) %t99 = load { ptr, i64, i64 }, ptr %a96 store { ptr, i64, i64 } %t99, ptr %a101 store { ptr, i64, i64 } { ptr @.str.4240, i64 6, i64 0 }, ptr %a102 call void @finch_str_concat(ptr %a100, ptr %a101, ptr %a102) %t103 = load { ptr, i64, i64 }, ptr %a100 %t104 = load { ptr, i64, i64 }, ptr %a72 store { ptr, i64, i64 } %t103, ptr %a106 store { ptr, i64, i64 } %t104, ptr %a107 call void @finch_str_concat(ptr %a105, ptr %a106, ptr %a107) %t108 = load { ptr, i64, i64 }, ptr %a105 store { ptr, i64, i64 } %t108, ptr %a110 store { ptr, i64, i64 } { ptr @.str.4241, i64 13, i64 0 }, ptr %a111 call void @finch_str_concat(ptr %a109, ptr %a110, ptr %a111) %t112 = load { ptr, i64, i64 }, ptr %a109 %t113 = load { ptr, i64, i64 }, ptr %a65 store { ptr, i64, i64 } %t112, ptr %a115 store { ptr, i64, i64 } %t113, ptr %a116 call void @finch_str_concat(ptr %a114, ptr %a115, ptr %a116) %t117 = load { ptr, i64, i64 }, ptr %a114 %t118 = call { ptr, i64, i64 } @finch.gen.op(ptr %t92, { ptr, i64, i64 } %t117) store { ptr, i64, i64 } %t118, ptr %a119 %t120 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0 %t121 = load { ptr, i64, i64 }, ptr %a119 store { ptr, i64, i64 } %t121, ptr %a122 call void @finch_str_copy(ptr %a123, ptr %a122) %t124 = load { ptr, i64, i64 }, ptr %a123 %t125 = insertvalue %S.gen.Place zeroinitializer, { ptr, i64, i64 } %t124, 0 %t126 = getelementptr inbounds %S.ast.Type, ptr %a21, i32 0, i32 1 %t127 = load { ptr, i64, i64 }, ptr %t126 %t128 = extractvalue { ptr, i64, i64 } %t127, 1 %t129 = icmp uge i64 0, %t128 br i1 %t129, label %range6434, label %inrange6435 range6434: call void @finch_panic_index(ptr @.str.4242, i64 3519, i64 0, i64 %t128) unreachable inrange6435: %t130 = extractvalue { ptr, i64, i64 } %t127, 0 %t131 = getelementptr inbounds %S.ast.Type, ptr %t130, i64 0 %t132 = load %S.ast.Type, ptr %t131 store %S.ast.Type %t132, ptr %a133 call void @finch.copy.S_ast_Type(ptr %a134, ptr %a133) %t135 = load %S.ast.Type, ptr %a134 %t136 = insertvalue %S.gen.Place %t125, %S.ast.Type %t135, 1 %t137 = insertvalue %S.gen.Ref %t120, %S.gen.Place %t136, 1 ret %S.gen.Ref %t137 endif6430: %t138 = getelementptr inbounds %S.ast.Type, ptr %a21, i32 0, i32 0 %t139 = load { ptr, i64, i64 }, ptr %t138 store { ptr, i64, i64 } %t139, ptr %a140 store { ptr, i64, i64 } { ptr @.str.4243, i64 3, i64 0 }, ptr %a141 %t142 = call i32 @finch_str_eq(ptr %a140, ptr %a141) %t143 = icmp ne i32 %t142, 0 br i1 %t143, label %then6436, label %endif6438 then6436: %t144 = getelementptr inbounds %S.ast.Type, ptr %a21, i32 0, i32 1 %t145 = getelementptr inbounds { ptr, i64, i64 }, ptr %t144, i32 0, i32 1 %t146 = load i64, ptr %t145 %t147 = icmp eq i64 %t146, 0 br i1 %t147, label %then6439, label %endif6441 then6439: %t148 = load ptr, ptr %a1 %t149 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t148, %S.ast.Node %t149, { ptr, i64, i64 } { ptr @.str.4244, i64 57, i64 0 }) br label %endif6441 endif6441: %t150 = getelementptr inbounds %S.gen.Ref, ptr %a14, i32 0, i32 2 %t151 = getelementptr inbounds %S.gen.Val, ptr %t150, i32 0, i32 0 %t152 = load { ptr, i64, i64 }, ptr %t151 store { ptr, i64, i64 } %t152, ptr %a153 call void @finch_str_copy(ptr %a154, ptr %a153) %t155 = load { ptr, i64, i64 }, ptr %a154 store { ptr, i64, i64 } %t155, ptr %a156 %t157 = getelementptr inbounds %S.gen.Ref, ptr %a14, i32 0, i32 0 %t158 = load i1, ptr %t157 br i1 %t158, label %then6442, label %endif6444 then6442: %t159 = load ptr, ptr %a1 %t160 = getelementptr inbounds %S.gen.Ref, ptr %a14, i32 0, i32 1 %t161 = getelementptr inbounds %S.gen.Place, ptr %t160, i32 0, i32 0 %t162 = load { ptr, i64, i64 }, ptr %t161 %t163 = call { ptr, i64, i64 } @finch.gen.load(ptr %t159, { ptr, i64, i64 } { ptr @.str.4245, i64 3, i64 0 }, { ptr, i64, i64 } %t162) store { ptr, i64, i64 } %t163, ptr %a156 br label %endif6444 endif6444: %t164 = getelementptr inbounds %S.ast.Type, ptr %a21, i32 0, i32 1 %t165 = load { ptr, i64, i64 }, ptr %t164 %t166 = extractvalue { ptr, i64, i64 } %t165, 1 %t167 = icmp uge i64 0, %t166 br i1 %t167, label %range6445, label %inrange6446 range6445: call void @finch_panic_index(ptr @.str.4246, i64 3529, i64 0, i64 %t166) unreachable inrange6446: %t168 = extractvalue { ptr, i64, i64 } %t165, 0 %t169 = getelementptr inbounds %S.ast.Type, ptr %t168, i64 0 %t170 = load %S.ast.Type, ptr %t169 store %S.ast.Type %t170, ptr %a171 call void @finch.copy.S_ast_Type(ptr %a172, ptr %a171) %t173 = load %S.ast.Type, ptr %a172 store %S.ast.Type %t173, ptr %a174 %t175 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0 %t176 = load ptr, ptr %a1 %t177 = load ptr, ptr %a1 %t178 = load %S.ast.Type, ptr %a174 %t179 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t177, %S.ast.Type %t178) store { ptr, i64, i64 } { ptr @.str.4247, i64 23, i64 0 }, ptr %a181 store { ptr, i64, i64 } %t179, ptr %a182 call void @finch_str_concat(ptr %a180, ptr %a181, ptr %a182) %t183 = load { ptr, i64, i64 }, ptr %a180 store { ptr, i64, i64 } %t183, ptr %a185 store { ptr, i64, i64 } { ptr @.str.4248, i64 6, i64 0 }, ptr %a186 call void @finch_str_concat(ptr %a184, ptr %a185, ptr %a186) %t187 = load { ptr, i64, i64 }, ptr %a184 %t188 = load { ptr, i64, i64 }, ptr %a156 store { ptr, i64, i64 } %t187, ptr %a190 store { ptr, i64, i64 } %t188, ptr %a191 call void @finch_str_concat(ptr %a189, ptr %a190, ptr %a191) %t192 = load { ptr, i64, i64 }, ptr %a189 store { ptr, i64, i64 } %t192, ptr %a194 store { ptr, i64, i64 } { ptr @.str.4249, i64 6, i64 0 }, ptr %a195 call void @finch_str_concat(ptr %a193, ptr %a194, ptr %a195) %t196 = load { ptr, i64, i64 }, ptr %a193 %t197 = load { ptr, i64, i64 }, ptr %a65 store { ptr, i64, i64 } %t196, ptr %a199 store { ptr, i64, i64 } %t197, ptr %a200 call void @finch_str_concat(ptr %a198, ptr %a199, ptr %a200) %t201 = load { ptr, i64, i64 }, ptr %a198 %t202 = call { ptr, i64, i64 } @finch.gen.op(ptr %t176, { ptr, i64, i64 } %t201) %t203 = insertvalue %S.gen.Place zeroinitializer, { ptr, i64, i64 } %t202, 0 %t204 = load %S.ast.Type, ptr %a174 store %S.ast.Type %t204, ptr %a205 call void @finch.copy.S_ast_Type(ptr %a206, ptr %a205) %t207 = load %S.ast.Type, ptr %a206 %t208 = insertvalue %S.gen.Place %t203, %S.ast.Type %t207, 1 %t209 = insertvalue %S.gen.Ref %t175, %S.gen.Place %t208, 1 ret %S.gen.Ref %t209 endif6438: %t210 = getelementptr inbounds %S.ast.Type, ptr %a21, i32 0, i32 0 %t211 = load { ptr, i64, i64 }, ptr %t210 store { ptr, i64, i64 } %t211, ptr %a212 store { ptr, i64, i64 } { ptr @.str.4250, i64 5, i64 0 }, ptr %a213 %t214 = call i32 @finch_str_eq(ptr %a212, ptr %a213) %t215 = icmp eq i32 %t214, 0 br label %logic.from6447 logic.from6447: br i1 %t215, label %logic.rhs6448, label %logic.end6449 logic.rhs6448: %t216 = getelementptr inbounds %S.ast.Type, ptr %a21, i32 0, i32 0 %t217 = load { ptr, i64, i64 }, ptr %t216 store { ptr, i64, i64 } %t217, ptr %a218 store { ptr, i64, i64 } { ptr @.str.4251, i64 3, i64 0 }, ptr %a219 %t220 = call i32 @finch_str_eq(ptr %a218, ptr %a219) %t221 = icmp eq i32 %t220, 0 br label %logic.rend6450 logic.rend6450: br label %logic.end6449 logic.end6449: %t222 = phi i1 [ false, %logic.from6447 ], [ %t221, %logic.rend6450 ] br i1 %t222, label %then6451, label %endif6453 then6451: %t223 = load ptr, ptr %a1 %t224 = load %S.ast.Node, ptr %a2 %t225 = load %S.ast.Type, ptr %a21 %t226 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t225) store { ptr, i64, i64 } { ptr @.str.4252, i64 46, i64 0 }, ptr %a228 store { ptr, i64, i64 } %t226, ptr %a229 call void @finch_str_concat(ptr %a227, ptr %a228, ptr %a229) %t230 = load { ptr, i64, i64 }, ptr %a227 call void @finch.gen.fail(ptr %t223, %S.ast.Node %t224, { ptr, i64, i64 } %t230) br label %endif6453 endif6453: %t231 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4253, i64 4, i64 0 }) store %S.ast.Type %t231, ptr %a232 %t233 = getelementptr inbounds %S.ast.Type, ptr %a21, i32 0, i32 0 %t234 = load { ptr, i64, i64 }, ptr %t233 store { ptr, i64, i64 } %t234, ptr %a235 store { ptr, i64, i64 } { ptr @.str.4254, i64 5, i64 0 }, ptr %a236 %t237 = call i32 @finch_str_eq(ptr %a235, ptr %a236) %t238 = icmp ne i32 %t237, 0 br i1 %t238, label %then6454, label %endif6456 then6454: %t239 = getelementptr inbounds %S.ast.Type, ptr %a21, i32 0, i32 1 %t240 = load { ptr, i64, i64 }, ptr %t239 %t241 = extractvalue { ptr, i64, i64 } %t240, 1 %t242 = icmp uge i64 0, %t241 br i1 %t242, label %range6457, label %inrange6458 range6457: call void @finch_panic_index(ptr @.str.4255, i64 3537, i64 0, i64 %t241) unreachable inrange6458: %t243 = extractvalue { ptr, i64, i64 } %t240, 0 %t244 = getelementptr inbounds %S.ast.Type, ptr %t243, i64 0 %t245 = load %S.ast.Type, ptr %t244 store %S.ast.Type %t245, ptr %a246 call void @finch.copy.S_ast_Type(ptr %a247, ptr %a246) %t248 = load %S.ast.Type, ptr %a247 store %S.ast.Type %t248, ptr %a232 br label %endif6456 endif6456: %t249 = getelementptr inbounds %S.ast.Type, ptr %a21, i32 0, i32 0 %t250 = load { ptr, i64, i64 }, ptr %t249 store { ptr, i64, i64 } %t250, ptr %a251 store { ptr, i64, i64 } { ptr @.str.4256, i64 3, i64 0 }, ptr %a252 %t253 = call i32 @finch_str_eq(ptr %a251, ptr %a252) %t254 = icmp ne i32 %t253, 0 br label %logic.from6459 logic.from6459: br i1 %t254, label %logic.rhs6460, label %logic.end6461 logic.rhs6460: %t255 = load i1, ptr %a3 br label %logic.rend6462 logic.rend6462: br label %logic.end6461 logic.end6461: %t256 = phi i1 [ false, %logic.from6459 ], [ %t255, %logic.rend6462 ] br i1 %t256, label %then6463, label %endif6465 then6463: %t257 = getelementptr inbounds %S.gen.Ref, ptr %a14, i32 0, i32 0 %t258 = load i1, ptr %t257 %t259 = xor i1 %t258, true br i1 %t259, label %then6466, label %endif6468 then6466: %t260 = load ptr, ptr %a1 %t261 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t260, %S.ast.Node %t261, { ptr, i64, i64 } { ptr @.str.4257, i64 44, i64 0 }) br label %endif6468 endif6468: %t262 = load ptr, ptr %a1 %t263 = getelementptr inbounds %S.gen.Ref, ptr %a14, i32 0, i32 1 %t264 = getelementptr inbounds %S.gen.Place, ptr %t263, i32 0, i32 0 %t265 = load { ptr, i64, i64 }, ptr %t264 store { ptr, i64, i64 } { ptr @.str.4258, i64 29, i64 0 }, ptr %a267 store { ptr, i64, i64 } %t265, ptr %a268 call void @finch_str_concat(ptr %a266, ptr %a267, ptr %a268) %t269 = load { ptr, i64, i64 }, ptr %a266 store { ptr, i64, i64 } %t269, ptr %a271 store { ptr, i64, i64 } { ptr @.str.4259, i64 1, i64 0 }, ptr %a272 call void @finch_str_concat(ptr %a270, ptr %a271, ptr %a272) %t273 = load { ptr, i64, i64 }, ptr %a270 call void @finch.gen.emit(ptr %t262, { ptr, i64, i64 } %t273) br label %endif6465 endif6465: %t274 = getelementptr inbounds %S.gen.Ref, ptr %a14, i32 0, i32 2 %t275 = getelementptr inbounds %S.gen.Val, ptr %t274, i32 0, i32 0 %t276 = load { ptr, i64, i64 }, ptr %t275 store { ptr, i64, i64 } %t276, ptr %a277 call void @finch_str_copy(ptr %a278, ptr %a277) %t279 = load { ptr, i64, i64 }, ptr %a278 store { ptr, i64, i64 } %t279, ptr %a280 %t281 = getelementptr inbounds %S.gen.Ref, ptr %a14, i32 0, i32 0 %t282 = load i1, ptr %t281 br i1 %t282, label %then6469, label %endif6471 then6469: %t283 = load ptr, ptr %a1 %t284 = getelementptr inbounds %S.gen.Ref, ptr %a14, i32 0, i32 1 %t285 = getelementptr inbounds %S.gen.Place, ptr %t284, i32 0, i32 0 %t286 = load { ptr, i64, i64 }, ptr %t285 %t287 = call { ptr, i64, i64 } @finch.gen.load(ptr %t283, { ptr, i64, i64 } { ptr @.str.4260, i64 17, i64 0 }, { ptr, i64, i64 } %t286) store { ptr, i64, i64 } %t287, ptr %a280 br label %endif6471 endif6471: %t288 = load ptr, ptr %a1 %t289 = load { ptr, i64, i64 }, ptr %a280 store { ptr, i64, i64 } { ptr @.str.4261, i64 31, i64 0 }, ptr %a291 store { ptr, i64, i64 } %t289, ptr %a292 call void @finch_str_concat(ptr %a290, ptr %a291, ptr %a292) %t293 = load { ptr, i64, i64 }, ptr %a290 store { ptr, i64, i64 } %t293, ptr %a295 store { ptr, i64, i64 } { ptr @.str.4262, i64 3, i64 0 }, ptr %a296 call void @finch_str_concat(ptr %a294, ptr %a295, ptr %a296) %t297 = load { ptr, i64, i64 }, ptr %a294 %t298 = call { ptr, i64, i64 } @finch.gen.op(ptr %t288, { ptr, i64, i64 } %t297) store { ptr, i64, i64 } %t298, ptr %a299 %t300 = load ptr, ptr %a1 %t301 = load { ptr, i64, i64 }, ptr %a65 %t302 = load { ptr, i64, i64 }, ptr %a299 %t303 = load %S.ast.Node, ptr %a2 call void @finch.gen.boundsCheck(ptr %t300, { ptr, i64, i64 } %t301, { ptr, i64, i64 } %t302, %S.ast.Node %t303) %t304 = load ptr, ptr %a1 %t305 = load { ptr, i64, i64 }, ptr %a280 store { ptr, i64, i64 } { ptr @.str.4263, i64 31, i64 0 }, ptr %a307 store { ptr, i64, i64 } %t305, ptr %a308 call void @finch_str_concat(ptr %a306, ptr %a307, ptr %a308) %t309 = load { ptr, i64, i64 }, ptr %a306 store { ptr, i64, i64 } %t309, ptr %a311 store { ptr, i64, i64 } { ptr @.str.4264, i64 3, i64 0 }, ptr %a312 call void @finch_str_concat(ptr %a310, ptr %a311, ptr %a312) %t313 = load { ptr, i64, i64 }, ptr %a310 %t314 = call { ptr, i64, i64 } @finch.gen.op(ptr %t304, { ptr, i64, i64 } %t313) store { ptr, i64, i64 } %t314, ptr %a315 %t316 = load ptr, ptr %a1 %t317 = load ptr, ptr %a1 %t318 = load %S.ast.Type, ptr %a232 %t319 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t317, %S.ast.Type %t318) store { ptr, i64, i64 } { ptr @.str.4265, i64 23, i64 0 }, ptr %a321 store { ptr, i64, i64 } %t319, ptr %a322 call void @finch_str_concat(ptr %a320, ptr %a321, ptr %a322) %t323 = load { ptr, i64, i64 }, ptr %a320 store { ptr, i64, i64 } %t323, ptr %a325 store { ptr, i64, i64 } { ptr @.str.4266, i64 6, i64 0 }, ptr %a326 call void @finch_str_concat(ptr %a324, ptr %a325, ptr %a326) %t327 = load { ptr, i64, i64 }, ptr %a324 %t328 = load { ptr, i64, i64 }, ptr %a315 store { ptr, i64, i64 } %t327, ptr %a330 store { ptr, i64, i64 } %t328, ptr %a331 call void @finch_str_concat(ptr %a329, ptr %a330, ptr %a331) %t332 = load { ptr, i64, i64 }, ptr %a329 store { ptr, i64, i64 } %t332, ptr %a334 store { ptr, i64, i64 } { ptr @.str.4267, i64 6, i64 0 }, ptr %a335 call void @finch_str_concat(ptr %a333, ptr %a334, ptr %a335) %t336 = load { ptr, i64, i64 }, ptr %a333 %t337 = load { ptr, i64, i64 }, ptr %a65 store { ptr, i64, i64 } %t336, ptr %a339 store { ptr, i64, i64 } %t337, ptr %a340 call void @finch_str_concat(ptr %a338, ptr %a339, ptr %a340) %t341 = load { ptr, i64, i64 }, ptr %a338 %t342 = call { ptr, i64, i64 } @finch.gen.op(ptr %t316, { ptr, i64, i64 } %t341) store { ptr, i64, i64 } %t342, ptr %a343 %t344 = getelementptr inbounds %S.gen.Ref, ptr %a14, i32 0, i32 0 %t345 = load i1, ptr %t344 br i1 %t345, label %then6472, label %endif6474 then6472: %t346 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0 %t347 = load { ptr, i64, i64 }, ptr %a343 store { ptr, i64, i64 } %t347, ptr %a348 call void @finch_str_copy(ptr %a349, ptr %a348) %t350 = load { ptr, i64, i64 }, ptr %a349 %t351 = insertvalue %S.gen.Place zeroinitializer, { ptr, i64, i64 } %t350, 0 %t352 = load %S.ast.Type, ptr %a232 store %S.ast.Type %t352, ptr %a353 call void @finch.copy.S_ast_Type(ptr %a354, ptr %a353) %t355 = load %S.ast.Type, ptr %a354 %t356 = insertvalue %S.gen.Place %t351, %S.ast.Type %t355, 1 %t357 = insertvalue %S.gen.Ref %t346, %S.gen.Place %t356, 1 ret %S.gen.Ref %t357 endif6474: %t358 = load ptr, ptr %a1 %t359 = load ptr, ptr %a1 %t360 = load %S.ast.Type, ptr %a232 %t361 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t359, %S.ast.Type %t360) %t362 = load { ptr, i64, i64 }, ptr %a343 %t363 = call { ptr, i64, i64 } @finch.gen.load(ptr %t358, { ptr, i64, i64 } %t361, { ptr, i64, i64 } %t362) store { ptr, i64, i64 } %t363, ptr %a364 %t365 = load { ptr, i64, i64 }, ptr %a364 store { ptr, i64, i64 } %t365, ptr %a366 call void @finch_str_copy(ptr %a367, ptr %a366) %t368 = load { ptr, i64, i64 }, ptr %a367 %t369 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t368, 0 %t370 = load %S.ast.Type, ptr %a232 store %S.ast.Type %t370, ptr %a371 call void @finch.copy.S_ast_Type(ptr %a372, ptr %a371) %t373 = load %S.ast.Type, ptr %a372 %t374 = insertvalue %S.gen.Val %t369, %S.ast.Type %t373, 1 store %S.gen.Val %t374, ptr %a375 %t376 = load ptr, ptr %a1 %t377 = load %S.ast.Type, ptr %a232 %t378 = call i1 @finch.gen.owning(ptr %t376, %S.ast.Type %t377) br label %logic.from6475 logic.from6475: br i1 %t378, label %logic.rhs6476, label %logic.end6477 logic.rhs6476: %t379 = getelementptr inbounds %S.gen.Ref, ptr %a14, i32 0, i32 2 %t380 = getelementptr inbounds %S.gen.Val, ptr %t379, i32 0, i32 2 %t381 = load i1, ptr %t380 br label %logic.rend6478 logic.rend6478: br label %logic.end6477 logic.end6477: %t382 = phi i1 [ false, %logic.from6475 ], [ %t381, %logic.rend6478 ] br i1 %t382, label %then6479, label %endif6481 then6479: %t383 = load ptr, ptr %a1 %t384 = load { ptr, i64, i64 }, ptr %a364 %t385 = load %S.ast.Type, ptr %a232 %t386 = call { ptr, i64, i64 } @finch.gen.copyValue(ptr %t383, { ptr, i64, i64 } %t384, %S.ast.Type %t385) %t387 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t386, 0 %t388 = load %S.ast.Type, ptr %a232 store %S.ast.Type %t388, ptr %a389 call void @finch.copy.S_ast_Type(ptr %a390, ptr %a389) %t391 = load %S.ast.Type, ptr %a390 %t392 = insertvalue %S.gen.Val %t387, %S.ast.Type %t391, 1 %t393 = insertvalue %S.gen.Val %t392, i1 true, 2 store %S.gen.Val %t393, ptr %a375 br label %endif6481 endif6481: %t394 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 %t395 = load %S.gen.Val, ptr %a375 store %S.gen.Val %t395, ptr %a396 call void @finch.copy.S_gen_Val(ptr %a397, ptr %a396) %t398 = load %S.gen.Val, ptr %a397 %t399 = insertvalue %S.gen.Ref %t394, %S.gen.Val %t398, 2 ret %S.gen.Ref %t399 } define internal void @finch.gen.checkArgs(ptr %p0, %S.ast.Node %p1, i64 %p2, i64 %p3, { ptr, i64, i64 } %p4) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a3 = alloca i64, align 16 %a4 = alloca i64, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca i64, align 16 %a13 = alloca i64, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 store i64 %p2, ptr %a3 store i64 %p3, ptr %a4 store { ptr, i64, i64 } %p4, ptr %a5 %t6 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t6, i32 0, i32 1 %t8 = load i64, ptr %t7 %t9 = load i64, ptr %a3 %t10 = sub i64 %t8, %t9 store i64 %t10, ptr %a11 %t12 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 10 store i64 0, ptr %a13 br label %each.cond6482 each.cond6482: %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t12, i32 0, i32 1 %t15 = load i64, ptr %t14 %t16 = load i64, ptr %a13 %t17 = icmp slt i64 %t16, %t15 br i1 %t17, label %each.body6483, label %each.end6485 each.body6483: %t18 = load ptr, ptr %t12 %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t18, i64 %t16 %t20 = load { ptr, i64, i64 }, ptr %t19 store { ptr, i64, i64 } %t20, ptr %a21 %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %a21, i32 0, i32 1 %t23 = load i64, ptr %t22 %t24 = icmp sgt i64 %t23, 0 br i1 %t24, label %then6486, label %endif6488 then6486: %t25 = load ptr, ptr %a1 %t26 = load %S.ast.Node, ptr %a2 %t27 = load { ptr, i64, i64 }, ptr %a21 store { ptr, i64, i64 } { ptr @.str.4268, i64 17, i64 0 }, ptr %a29 store { ptr, i64, i64 } %t27, ptr %a30 call void @finch_str_concat(ptr %a28, ptr %a29, ptr %a30) %t31 = load { ptr, i64, i64 }, ptr %a28 store { ptr, i64, i64 } %t31, ptr %a33 store { ptr, i64, i64 } { ptr @.str.4269, i64 36, i64 0 }, ptr %a34 call void @finch_str_concat(ptr %a32, ptr %a33, ptr %a34) %t35 = load { ptr, i64, i64 }, ptr %a32 call void @finch.gen.fail(ptr %t25, %S.ast.Node %t26, { ptr, i64, i64 } %t35) br label %endif6488 endif6488: br label %each.step6484 each.step6484: %t36 = load i64, ptr %a13 %t37 = add i64 %t36, 1 store i64 %t37, ptr %a13 br label %each.cond6482 each.end6485: %t38 = load i64, ptr %a11 %t39 = load i64, ptr %a4 %t40 = icmp ne i64 %t38, %t39 br i1 %t40, label %then6489, label %endif6491 then6489: %t41 = load ptr, ptr %a1 %t42 = load %S.ast.Node, ptr %a2 %t43 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } { ptr @.str.4270, i64 1, i64 0 }, ptr %a45 store { ptr, i64, i64 } %t43, ptr %a46 call void @finch_str_concat(ptr %a44, ptr %a45, ptr %a46) %t47 = load { ptr, i64, i64 }, ptr %a44 store { ptr, i64, i64 } %t47, ptr %a49 store { ptr, i64, i64 } { ptr @.str.4271, i64 8, i64 0 }, ptr %a50 call void @finch_str_concat(ptr %a48, ptr %a49, ptr %a50) %t51 = load { ptr, i64, i64 }, ptr %a48 %t52 = load i64, ptr %a4 call void @finch_str_from_int(ptr %a53, i64 %t52) %t54 = load { ptr, i64, i64 }, ptr %a53 store { ptr, i64, i64 } %t51, ptr %a56 store { ptr, i64, i64 } %t54, ptr %a57 call void @finch_str_concat(ptr %a55, ptr %a56, ptr %a57) %t58 = load { ptr, i64, i64 }, ptr %a55 store { ptr, i64, i64 } %t58, ptr %a60 store { ptr, i64, i64 } { ptr @.str.4272, i64 22, i64 0 }, ptr %a61 call void @finch_str_concat(ptr %a59, ptr %a60, ptr %a61) %t62 = load { ptr, i64, i64 }, ptr %a59 %t63 = load i64, ptr %a11 call void @finch_str_from_int(ptr %a64, i64 %t63) %t65 = load { ptr, i64, i64 }, ptr %a64 store { ptr, i64, i64 } %t62, ptr %a67 store { ptr, i64, i64 } %t65, ptr %a68 call void @finch_str_concat(ptr %a66, ptr %a67, ptr %a68) %t69 = load { ptr, i64, i64 }, ptr %a66 call void @finch.gen.fail(ptr %t41, %S.ast.Node %t42, { ptr, i64, i64 } %t69) br label %endif6491 endif6491: ret void } define internal %S.gen.Val @finch.gen.strArg(ptr %p0, %S.ast.Node %p1, { ptr, i64, i64 } %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = load ptr, ptr %a1 %t6 = load %S.ast.Node, ptr %a2 %t7 = call %S.gen.Val @finch.gen.expr(ptr %t5, %S.ast.Node %t6) %t8 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4273, i64 3, i64 0 }) %t9 = load %S.ast.Node, ptr %a2 %t10 = load { ptr, i64, i64 }, ptr %a3 %t11 = call %S.gen.Val @finch.gen.coerce(ptr %t4, %S.gen.Val %t7, %S.ast.Type %t8, %S.ast.Node %t9, { ptr, i64, i64 } %t10) ret %S.gen.Val %t11 } define internal { ptr, i64, i64 } @finch.gen.strOut(ptr %p0) { entry: %a1 = alloca ptr, align 16 store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t2, { ptr, i64, i64 } { ptr @.str.4274, i64 17, i64 0 }) ret { ptr, i64, i64 } %t3 } define internal { ptr, i64, i64 } @finch.gen.numType({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca i64, align 16 %a36 = alloca i64, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t2, ptr %a3 store { ptr, i64, i64 } { ptr @.str.4275, i64 3, i64 0 }, ptr %a4 %t5 = call i32 @finch_str_eq(ptr %a3, ptr %a4) %t6 = icmp ne i32 %t5, 0 br i1 %t6, label %then6492, label %endif6494 then6492: ret { ptr, i64, i64 } { ptr @.str.4276, i64 3, i64 0 } endif6494: %t7 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t7, ptr %a8 store { ptr, i64, i64 } { ptr @.str.4277, i64 3, i64 0 }, ptr %a9 %t10 = call i32 @finch_str_eq(ptr %a8, ptr %a9) %t11 = icmp ne i32 %t10, 0 br i1 %t11, label %then6495, label %endif6497 then6495: ret { ptr, i64, i64 } { ptr @.str.4278, i64 5, i64 0 } endif6497: %t12 = mul i64 13, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t13 = call ptr @finch_alloc(i64 %t12) %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 0 store { ptr, i64, i64 } { ptr @.str.4279, i64 3, i64 0 }, ptr %t14 %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 1 store { ptr, i64, i64 } { ptr @.str.4280, i64 5, i64 0 }, ptr %t15 %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 2 store { ptr, i64, i64 } { ptr @.str.4281, i64 4, i64 0 }, ptr %t16 %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 3 store { ptr, i64, i64 } { ptr @.str.4282, i64 4, i64 0 }, ptr %t17 %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 4 store { ptr, i64, i64 } { ptr @.str.4283, i64 2, i64 0 }, ptr %t18 %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 5 store { ptr, i64, i64 } { ptr @.str.4284, i64 3, i64 0 }, ptr %t19 %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 6 store { ptr, i64, i64 } { ptr @.str.4285, i64 3, i64 0 }, ptr %t20 %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 7 store { ptr, i64, i64 } { ptr @.str.4286, i64 2, i64 0 }, ptr %t21 %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 8 store { ptr, i64, i64 } { ptr @.str.4287, i64 3, i64 0 }, ptr %t22 %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 9 store { ptr, i64, i64 } { ptr @.str.4288, i64 3, i64 0 }, ptr %t23 %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 10 store { ptr, i64, i64 } { ptr @.str.4289, i64 3, i64 0 }, ptr %t24 %t25 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 11 store { ptr, i64, i64 } { ptr @.str.4290, i64 3, i64 0 }, ptr %t25 %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 12 store { ptr, i64, i64 } { ptr @.str.4291, i64 3, i64 0 }, ptr %t26 %t27 = insertvalue { ptr, i64, i64 } undef, ptr %t13, 0 %t28 = insertvalue { ptr, i64, i64 } %t27, i64 13, 1 %t29 = insertvalue { ptr, i64, i64 } %t28, i64 13, 2 store { ptr, i64, i64 } %t29, ptr %a30 %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %a30, i32 0, i32 1 %t32 = load { ptr, i64, i64 }, ptr %a1 store i64 -1, ptr %a33 %t34 = load i64, ptr %t31 %t35 = load ptr, ptr %a30 store i64 0, ptr %a36 br label %find.cond6498 find.cond6498: %t37 = load i64, ptr %a36 %t38 = icmp slt i64 %t37, %t34 br i1 %t38, label %find.body6499, label %find.end6502 find.body6499: %t39 = getelementptr inbounds { ptr, i64, i64 }, ptr %t35, i64 %t37 %t40 = load { ptr, i64, i64 }, ptr %t39 store { ptr, i64, i64 } %t40, ptr %a41 store { ptr, i64, i64 } %t32, ptr %a42 %t43 = call i32 @finch_str_eq(ptr %a41, ptr %a42) %t44 = icmp ne i32 %t43, 0 br i1 %t44, label %find.hit6500, label %find.next6501 find.hit6500: store i64 %t37, ptr %a33 br label %find.end6502 find.next6501: %t45 = add i64 %t37, 1 store i64 %t45, ptr %a36 br label %find.cond6498 find.end6502: %t46 = load i64, ptr %a33 %t47 = icmp sge i64 %t46, 0 br i1 %t47, label %then6503, label %endif6505 then6503: %t48 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t48, ptr %a49 call void @finch_str_copy(ptr %a50, ptr %a49) %t51 = load { ptr, i64, i64 }, ptr %a50 ret { ptr, i64, i64 } %t51 endif6505: ret { ptr, i64, i64 } { ptr @.str.4292, i64 0, i64 0 } } define internal %S.gen.Val @finch.gen.convert(ptr %p0, %S.ast.Node %p1, %S.ast.Type %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a3 = alloca %S.ast.Type, align 16 %a17 = alloca %S.gen.Val, align 16 %a20 = alloca %S.ast.Type, align 16 %a21 = alloca %S.ast.Type, align 16 %a23 = alloca %S.ast.Type, align 16 %a28 = alloca %S.gen.Val, align 16 %a29 = alloca %S.gen.Val, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a85 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca { ptr, i64, i64 }, align 16 %a124 = alloca %S.ast.Type, align 16 %a125 = alloca %S.ast.Type, align 16 %a130 = alloca { ptr, i64, i64 }, align 16 %a137 = alloca { ptr, i64, i64 }, align 16 %a138 = alloca { ptr, i64, i64 }, align 16 %a139 = alloca { ptr, i64, i64 }, align 16 %a141 = alloca { ptr, i64, i64 }, align 16 %a142 = alloca { ptr, i64, i64 }, align 16 %a143 = alloca { ptr, i64, i64 }, align 16 %a146 = alloca { ptr, i64, i64 }, align 16 %a147 = alloca { ptr, i64, i64 }, align 16 %a148 = alloca { ptr, i64, i64 }, align 16 %a150 = alloca { ptr, i64, i64 }, align 16 %a151 = alloca { ptr, i64, i64 }, align 16 %a152 = alloca { ptr, i64, i64 }, align 16 %a155 = alloca { ptr, i64, i64 }, align 16 %a156 = alloca { ptr, i64, i64 }, align 16 %a157 = alloca { ptr, i64, i64 }, align 16 %a159 = alloca { ptr, i64, i64 }, align 16 %a160 = alloca { ptr, i64, i64 }, align 16 %a161 = alloca { ptr, i64, i64 }, align 16 %a164 = alloca { ptr, i64, i64 }, align 16 %a167 = alloca { ptr, i64, i64 }, align 16 %a168 = alloca { ptr, i64, i64 }, align 16 %a169 = alloca { ptr, i64, i64 }, align 16 %a171 = alloca { ptr, i64, i64 }, align 16 %a172 = alloca { ptr, i64, i64 }, align 16 %a173 = alloca { ptr, i64, i64 }, align 16 %a194 = alloca %S.ast.Type, align 16 %a195 = alloca %S.ast.Type, align 16 %a200 = alloca { ptr, i64, i64 }, align 16 %a201 = alloca { ptr, i64, i64 }, align 16 %a220 = alloca { ptr, i64, i64 }, align 16 %a227 = alloca { ptr, i64, i64 }, align 16 %a228 = alloca { ptr, i64, i64 }, align 16 %a229 = alloca { ptr, i64, i64 }, align 16 %a231 = alloca { ptr, i64, i64 }, align 16 %a232 = alloca { ptr, i64, i64 }, align 16 %a233 = alloca { ptr, i64, i64 }, align 16 %a236 = alloca { ptr, i64, i64 }, align 16 %a237 = alloca { ptr, i64, i64 }, align 16 %a238 = alloca { ptr, i64, i64 }, align 16 %a240 = alloca { ptr, i64, i64 }, align 16 %a241 = alloca { ptr, i64, i64 }, align 16 %a242 = alloca { ptr, i64, i64 }, align 16 %a246 = alloca { ptr, i64, i64 }, align 16 %a248 = alloca { ptr, i64, i64 }, align 16 %a249 = alloca { ptr, i64, i64 }, align 16 %a250 = alloca { ptr, i64, i64 }, align 16 %a252 = alloca { ptr, i64, i64 }, align 16 %a253 = alloca { ptr, i64, i64 }, align 16 %a254 = alloca { ptr, i64, i64 }, align 16 %a257 = alloca { ptr, i64, i64 }, align 16 %a265 = alloca %S.ast.Type, align 16 %a266 = alloca %S.ast.Type, align 16 %a273 = alloca { ptr, i64, i64 }, align 16 %a274 = alloca { ptr, i64, i64 }, align 16 %a275 = alloca { ptr, i64, i64 }, align 16 %a277 = alloca { ptr, i64, i64 }, align 16 %a278 = alloca { ptr, i64, i64 }, align 16 %a279 = alloca { ptr, i64, i64 }, align 16 %a282 = alloca { ptr, i64, i64 }, align 16 %a283 = alloca { ptr, i64, i64 }, align 16 %a284 = alloca { ptr, i64, i64 }, align 16 %a286 = alloca { ptr, i64, i64 }, align 16 %a287 = alloca { ptr, i64, i64 }, align 16 %a288 = alloca { ptr, i64, i64 }, align 16 %a292 = alloca { ptr, i64, i64 }, align 16 %a294 = alloca { ptr, i64, i64 }, align 16 %a295 = alloca { ptr, i64, i64 }, align 16 %a296 = alloca { ptr, i64, i64 }, align 16 %a298 = alloca { ptr, i64, i64 }, align 16 %a299 = alloca { ptr, i64, i64 }, align 16 %a300 = alloca { ptr, i64, i64 }, align 16 %a303 = alloca { ptr, i64, i64 }, align 16 %a311 = alloca %S.ast.Type, align 16 %a312 = alloca %S.ast.Type, align 16 %a319 = alloca { ptr, i64, i64 }, align 16 %a320 = alloca { ptr, i64, i64 }, align 16 %a332 = alloca %S.ast.Type, align 16 %a333 = alloca %S.ast.Type, align 16 %a340 = alloca { ptr, i64, i64 }, align 16 %a341 = alloca { ptr, i64, i64 }, align 16 %a349 = alloca { ptr, i64, i64 }, align 16 %a350 = alloca { ptr, i64, i64 }, align 16 %a362 = alloca %S.ast.Type, align 16 %a363 = alloca %S.ast.Type, align 16 %a368 = alloca { ptr, i64, i64 }, align 16 %a369 = alloca { ptr, i64, i64 }, align 16 %a375 = alloca { ptr, i64, i64 }, align 16 %a376 = alloca { ptr, i64, i64 }, align 16 %a377 = alloca { ptr, i64, i64 }, align 16 %a379 = alloca { ptr, i64, i64 }, align 16 %a380 = alloca { ptr, i64, i64 }, align 16 %a381 = alloca { ptr, i64, i64 }, align 16 %a386 = alloca { ptr, i64, i64 }, align 16 %a387 = alloca { ptr, i64, i64 }, align 16 %a388 = alloca { ptr, i64, i64 }, align 16 %a393 = alloca %S.ast.Type, align 16 %a394 = alloca %S.ast.Type, align 16 %a402 = alloca { ptr, i64, i64 }, align 16 %a407 = alloca { ptr, i64, i64 }, align 16 %a408 = alloca { ptr, i64, i64 }, align 16 %a409 = alloca { ptr, i64, i64 }, align 16 %a414 = alloca { ptr, i64, i64 }, align 16 %a415 = alloca { ptr, i64, i64 }, align 16 %a416 = alloca { ptr, i64, i64 }, align 16 %a418 = alloca { ptr, i64, i64 }, align 16 %a419 = alloca { ptr, i64, i64 }, align 16 %a420 = alloca { ptr, i64, i64 }, align 16 %a424 = alloca { ptr, i64, i64 }, align 16 %a425 = alloca { ptr, i64, i64 }, align 16 %a426 = alloca { ptr, i64, i64 }, align 16 %a428 = alloca { ptr, i64, i64 }, align 16 %a429 = alloca { ptr, i64, i64 }, align 16 %a430 = alloca { ptr, i64, i64 }, align 16 %a435 = alloca { ptr, i64, i64 }, align 16 %a436 = alloca { ptr, i64, i64 }, align 16 %a437 = alloca { ptr, i64, i64 }, align 16 %a442 = alloca %S.ast.Type, align 16 %a443 = alloca %S.ast.Type, align 16 %a458 = alloca %S.ast.Type, align 16 %a459 = alloca %S.ast.Type, align 16 %a472 = alloca %S.ast.Type, align 16 %a473 = alloca %S.ast.Type, align 16 %a478 = alloca { ptr, i64, i64 }, align 16 %a479 = alloca { ptr, i64, i64 }, align 16 %a489 = alloca { ptr, i64, i64 }, align 16 %a490 = alloca { ptr, i64, i64 }, align 16 %a491 = alloca { ptr, i64, i64 }, align 16 %a493 = alloca { ptr, i64, i64 }, align 16 %a494 = alloca { ptr, i64, i64 }, align 16 %a495 = alloca { ptr, i64, i64 }, align 16 %a499 = alloca { ptr, i64, i64 }, align 16 %a500 = alloca { ptr, i64, i64 }, align 16 %a501 = alloca { ptr, i64, i64 }, align 16 %a503 = alloca { ptr, i64, i64 }, align 16 %a504 = alloca { ptr, i64, i64 }, align 16 %a505 = alloca { ptr, i64, i64 }, align 16 %a510 = alloca %S.ast.Type, align 16 %a511 = alloca %S.ast.Type, align 16 %a516 = alloca { ptr, i64, i64 }, align 16 %a517 = alloca { ptr, i64, i64 }, align 16 %a522 = alloca { ptr, i64, i64 }, align 16 %a523 = alloca { ptr, i64, i64 }, align 16 %a528 = alloca { ptr, i64, i64 }, align 16 %a529 = alloca { ptr, i64, i64 }, align 16 %a536 = alloca { ptr, i64, i64 }, align 16 %a537 = alloca { ptr, i64, i64 }, align 16 %a541 = alloca %S.ast.Type, align 16 %a542 = alloca %S.ast.Type, align 16 %a547 = alloca { ptr, i64, i64 }, align 16 %a548 = alloca { ptr, i64, i64 }, align 16 %a561 = alloca { ptr, i64, i64 }, align 16 %a562 = alloca { ptr, i64, i64 }, align 16 %a563 = alloca { ptr, i64, i64 }, align 16 %a565 = alloca { ptr, i64, i64 }, align 16 %a566 = alloca { ptr, i64, i64 }, align 16 %a567 = alloca { ptr, i64, i64 }, align 16 %a572 = alloca %S.ast.Type, align 16 %a573 = alloca %S.ast.Type, align 16 %a580 = alloca { ptr, i64, i64 }, align 16 %a581 = alloca { ptr, i64, i64 }, align 16 %a588 = alloca { ptr, i64, i64 }, align 16 %a589 = alloca { ptr, i64, i64 }, align 16 %a590 = alloca { ptr, i64, i64 }, align 16 %a592 = alloca { ptr, i64, i64 }, align 16 %a593 = alloca { ptr, i64, i64 }, align 16 %a594 = alloca { ptr, i64, i64 }, align 16 %a599 = alloca { ptr, i64, i64 }, align 16 %a600 = alloca { ptr, i64, i64 }, align 16 %a601 = alloca { ptr, i64, i64 }, align 16 %a606 = alloca %S.ast.Type, align 16 %a607 = alloca %S.ast.Type, align 16 %a612 = alloca { ptr, i64, i64 }, align 16 %a613 = alloca { ptr, i64, i64 }, align 16 %a618 = alloca { ptr, i64, i64 }, align 16 %a619 = alloca { ptr, i64, i64 }, align 16 %a641 = alloca { ptr, i64, i64 }, align 16 %a642 = alloca { ptr, i64, i64 }, align 16 %a643 = alloca { ptr, i64, i64 }, align 16 %a645 = alloca { ptr, i64, i64 }, align 16 %a646 = alloca { ptr, i64, i64 }, align 16 %a647 = alloca { ptr, i64, i64 }, align 16 %a651 = alloca { ptr, i64, i64 }, align 16 %a652 = alloca { ptr, i64, i64 }, align 16 %a653 = alloca { ptr, i64, i64 }, align 16 %a656 = alloca %S.gen.Val, align 16 %a657 = alloca %S.gen.Val, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 store %S.ast.Type %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = load %S.ast.Node, ptr %a2 %t6 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t7 = load { ptr, i64, i64 }, ptr %t6 call void @finch.gen.checkArgs(ptr %t4, %S.ast.Node %t5, i64 0, i64 1, { ptr, i64, i64 } %t7) %t8 = load ptr, ptr %a1 %t9 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t10 = load { ptr, i64, i64 }, ptr %t9 %t11 = extractvalue { ptr, i64, i64 } %t10, 1 %t12 = icmp uge i64 0, %t11 br i1 %t12, label %range6506, label %inrange6507 range6506: call void @finch_panic_index(ptr @.str.4293, i64 3606, i64 0, i64 %t11) unreachable inrange6507: %t13 = extractvalue { ptr, i64, i64 } %t10, 0 %t14 = getelementptr inbounds %S.ast.Node, ptr %t13, i64 0 %t15 = load %S.ast.Node, ptr %t14 %t16 = call %S.gen.Val @finch.gen.expr(ptr %t8, %S.ast.Node %t15) store %S.gen.Val %t16, ptr %a17 %t18 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 1 %t19 = load %S.ast.Type, ptr %t18 store %S.ast.Type %t19, ptr %a20 call void @finch.copy.S_ast_Type(ptr %a21, ptr %a20) %t22 = load %S.ast.Type, ptr %a21 store %S.ast.Type %t22, ptr %a23 %t24 = load %S.ast.Type, ptr %a23 %t25 = load %S.ast.Type, ptr %a3 %t26 = call i1 @finch.ast.same(%S.ast.Type %t24, %S.ast.Type %t25) br i1 %t26, label %then6508, label %endif6510 then6508: %t27 = load %S.gen.Val, ptr %a17 store %S.gen.Val %t27, ptr %a28 call void @finch.copy.S_gen_Val(ptr %a29, ptr %a28) %t30 = load %S.gen.Val, ptr %a29 ret %S.gen.Val %t30 endif6510: %t31 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0 %t32 = load { ptr, i64, i64 }, ptr %t31 store { ptr, i64, i64 } %t32, ptr %a33 store { ptr, i64, i64 } { ptr @.str.4294, i64 3, i64 0 }, ptr %a34 %t35 = call i32 @finch_str_eq(ptr %a33, ptr %a34) %t36 = icmp ne i32 %t35, 0 br label %logic.from6511 logic.from6511: br i1 %t36, label %logic.rhs6512, label %logic.end6513 logic.rhs6512: %t37 = load %S.ast.Type, ptr %a3 %t38 = call i1 @finch.gen.isNumber(%S.ast.Type %t37) br label %logic.rend6514 logic.rend6514: br label %logic.end6513 logic.end6513: %t39 = phi i1 [ false, %logic.from6511 ], [ %t38, %logic.rend6514 ] br label %logic.from6515 logic.from6515: br i1 %t39, label %logic.rhs6516, label %logic.end6517 logic.rhs6516: %t40 = load ptr, ptr %a1 %t41 = icmp eq ptr %t40, null br i1 %t41, label %panic6518, label %ok6519 panic6518: call void @finch_panic(ptr @.str.4295, i64 3611, ptr @.str.4296) unreachable ok6519: %t42 = getelementptr inbounds %S.gen.Gen, ptr %t40, i32 0, i32 39 %t43 = load { ptr, i64, i64 }, ptr %t42 %t44 = load %S.ast.Node, ptr %a2 %t45 = call { ptr, i64, i64 } @finch.gen.nodeKey(%S.ast.Node %t44) store { ptr, i64, i64 } %t43, ptr %a46 store { ptr, i64, i64 } %t45, ptr %a47 %t48 = call i32 @finch_str_eq(ptr %a46, ptr %a47) %t49 = icmp ne i32 %t48, 0 br label %logic.rend6520 logic.rend6520: br label %logic.end6517 logic.end6517: %t50 = phi i1 [ false, %logic.from6515 ], [ %t49, %logic.rend6520 ] br i1 %t50, label %then6521, label %endif6523 then6521: %t51 = load ptr, ptr %a1 %t52 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t51, { ptr, i64, i64 } { ptr @.str.4297, i64 17, i64 0 }) store { ptr, i64, i64 } %t52, ptr %a53 %t54 = load ptr, ptr %a1 %t55 = load { ptr, i64, i64 }, ptr %a53 call void @finch.gen.store(ptr %t54, { ptr, i64, i64 } { ptr @.str.4298, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.4299, i64 15, i64 0 }, { ptr, i64, i64 } %t55) %t56 = load %S.ast.Type, ptr %a3 %t57 = call i1 @finch.gen.isInt(%S.ast.Type %t56) br i1 %t57, label %then6524, label %endif6526 then6524: %t58 = load ptr, ptr %a1 %t59 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t58, { ptr, i64, i64 } { ptr @.str.4300, i64 3, i64 0 }) store { ptr, i64, i64 } %t59, ptr %a60 %t61 = load ptr, ptr %a1 %t62 = load { ptr, i64, i64 }, ptr %a60 call void @finch.gen.store(ptr %t61, { ptr, i64, i64 } { ptr @.str.4301, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.4302, i64 1, i64 0 }, { ptr, i64, i64 } %t62) %t63 = load ptr, ptr %a1 %t64 = load ptr, ptr %a1 %t65 = load %S.gen.Val, ptr %a17 %t66 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t64, %S.gen.Val %t65) store { ptr, i64, i64 } { ptr @.str.4303, i64 32, i64 0 }, ptr %a68 store { ptr, i64, i64 } %t66, ptr %a69 call void @finch_str_concat(ptr %a67, ptr %a68, ptr %a69) %t70 = load { ptr, i64, i64 }, ptr %a67 store { ptr, i64, i64 } %t70, ptr %a72 store { ptr, i64, i64 } { ptr @.str.4304, i64 6, i64 0 }, ptr %a73 call void @finch_str_concat(ptr %a71, ptr %a72, ptr %a73) %t74 = load { ptr, i64, i64 }, ptr %a71 %t75 = load { ptr, i64, i64 }, ptr %a60 store { ptr, i64, i64 } %t74, ptr %a77 store { ptr, i64, i64 } %t75, ptr %a78 call void @finch_str_concat(ptr %a76, ptr %a77, ptr %a78) %t79 = load { ptr, i64, i64 }, ptr %a76 store { ptr, i64, i64 } %t79, ptr %a81 store { ptr, i64, i64 } { ptr @.str.4305, i64 6, i64 0 }, ptr %a82 call void @finch_str_concat(ptr %a80, ptr %a81, ptr %a82) %t83 = load { ptr, i64, i64 }, ptr %a80 %t84 = load { ptr, i64, i64 }, ptr %a53 store { ptr, i64, i64 } %t83, ptr %a86 store { ptr, i64, i64 } %t84, ptr %a87 call void @finch_str_concat(ptr %a85, ptr %a86, ptr %a87) %t88 = load { ptr, i64, i64 }, ptr %a85 store { ptr, i64, i64 } %t88, ptr %a90 store { ptr, i64, i64 } { ptr @.str.4306, i64 1, i64 0 }, ptr %a91 call void @finch_str_concat(ptr %a89, ptr %a90, ptr %a91) %t92 = load { ptr, i64, i64 }, ptr %a89 %t93 = call { ptr, i64, i64 } @finch.gen.op(ptr %t63, { ptr, i64, i64 } %t92) store { ptr, i64, i64 } %t93, ptr %a94 %t95 = load ptr, ptr %a1 %t96 = load { ptr, i64, i64 }, ptr %a94 store { ptr, i64, i64 } { ptr @.str.4307, i64 12, i64 0 }, ptr %a98 store { ptr, i64, i64 } %t96, ptr %a99 call void @finch_str_concat(ptr %a97, ptr %a98, ptr %a99) %t100 = load { ptr, i64, i64 }, ptr %a97 store { ptr, i64, i64 } %t100, ptr %a102 store { ptr, i64, i64 } { ptr @.str.4308, i64 3, i64 0 }, ptr %a103 call void @finch_str_concat(ptr %a101, ptr %a102, ptr %a103) %t104 = load { ptr, i64, i64 }, ptr %a101 %t105 = call { ptr, i64, i64 } @finch.gen.op(ptr %t95, { ptr, i64, i64 } %t104) %t106 = load ptr, ptr %a1 %t107 = icmp eq ptr %t106, null br i1 %t107, label %panic6527, label %ok6528 panic6527: call void @finch_panic(ptr @.str.4309, i64 3619, ptr @.str.4310) unreachable ok6528: %t108 = getelementptr inbounds %S.gen.Gen, ptr %t106, i32 0, i32 40 store { ptr, i64, i64 } %t105, ptr %t108 %t109 = load ptr, ptr %a1 %t110 = load { ptr, i64, i64 }, ptr %a53 %t111 = call { ptr, i64, i64 } @finch.gen.load(ptr %t109, { ptr, i64, i64 } { ptr @.str.4311, i64 17, i64 0 }, { ptr, i64, i64 } %t110) %t112 = load ptr, ptr %a1 %t113 = icmp eq ptr %t112, null br i1 %t113, label %panic6529, label %ok6530 panic6529: call void @finch_panic(ptr @.str.4312, i64 3620, ptr @.str.4313) unreachable ok6530: %t114 = getelementptr inbounds %S.gen.Gen, ptr %t112, i32 0, i32 41 store { ptr, i64, i64 } %t111, ptr %t114 %t115 = load ptr, ptr %a1 %t116 = load ptr, ptr %a1 %t117 = load { ptr, i64, i64 }, ptr %a60 %t118 = call { ptr, i64, i64 } @finch.gen.load(ptr %t116, { ptr, i64, i64 } { ptr @.str.4314, i64 3, i64 0 }, { ptr, i64, i64 } %t117) %t119 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4315, i64 3, i64 0 }) %t120 = load %S.ast.Type, ptr %a3 %t121 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t115, { ptr, i64, i64 } %t118, %S.ast.Type %t119, %S.ast.Type %t120) %t122 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t121, 0 %t123 = load %S.ast.Type, ptr %a3 store %S.ast.Type %t123, ptr %a124 call void @finch.copy.S_ast_Type(ptr %a125, ptr %a124) %t126 = load %S.ast.Type, ptr %a125 %t127 = insertvalue %S.gen.Val %t122, %S.ast.Type %t126, 1 ret %S.gen.Val %t127 endif6526: %t128 = load ptr, ptr %a1 %t129 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t128, { ptr, i64, i64 } { ptr @.str.4316, i64 6, i64 0 }) store { ptr, i64, i64 } %t129, ptr %a130 %t131 = load ptr, ptr %a1 %t132 = load { ptr, i64, i64 }, ptr %a130 call void @finch.gen.store(ptr %t131, { ptr, i64, i64 } { ptr @.str.4317, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.4318, i64 3, i64 0 }, { ptr, i64, i64 } %t132) %t133 = load ptr, ptr %a1 %t134 = load ptr, ptr %a1 %t135 = load %S.gen.Val, ptr %a17 %t136 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t134, %S.gen.Val %t135) store { ptr, i64, i64 } { ptr @.str.4319, i64 34, i64 0 }, ptr %a138 store { ptr, i64, i64 } %t136, ptr %a139 call void @finch_str_concat(ptr %a137, ptr %a138, ptr %a139) %t140 = load { ptr, i64, i64 }, ptr %a137 store { ptr, i64, i64 } %t140, ptr %a142 store { ptr, i64, i64 } { ptr @.str.4320, i64 6, i64 0 }, ptr %a143 call void @finch_str_concat(ptr %a141, ptr %a142, ptr %a143) %t144 = load { ptr, i64, i64 }, ptr %a141 %t145 = load { ptr, i64, i64 }, ptr %a130 store { ptr, i64, i64 } %t144, ptr %a147 store { ptr, i64, i64 } %t145, ptr %a148 call void @finch_str_concat(ptr %a146, ptr %a147, ptr %a148) %t149 = load { ptr, i64, i64 }, ptr %a146 store { ptr, i64, i64 } %t149, ptr %a151 store { ptr, i64, i64 } { ptr @.str.4321, i64 6, i64 0 }, ptr %a152 call void @finch_str_concat(ptr %a150, ptr %a151, ptr %a152) %t153 = load { ptr, i64, i64 }, ptr %a150 %t154 = load { ptr, i64, i64 }, ptr %a53 store { ptr, i64, i64 } %t153, ptr %a156 store { ptr, i64, i64 } %t154, ptr %a157 call void @finch_str_concat(ptr %a155, ptr %a156, ptr %a157) %t158 = load { ptr, i64, i64 }, ptr %a155 store { ptr, i64, i64 } %t158, ptr %a160 store { ptr, i64, i64 } { ptr @.str.4322, i64 1, i64 0 }, ptr %a161 call void @finch_str_concat(ptr %a159, ptr %a160, ptr %a161) %t162 = load { ptr, i64, i64 }, ptr %a159 %t163 = call { ptr, i64, i64 } @finch.gen.op(ptr %t133, { ptr, i64, i64 } %t162) store { ptr, i64, i64 } %t163, ptr %a164 %t165 = load ptr, ptr %a1 %t166 = load { ptr, i64, i64 }, ptr %a164 store { ptr, i64, i64 } { ptr @.str.4323, i64 12, i64 0 }, ptr %a168 store { ptr, i64, i64 } %t166, ptr %a169 call void @finch_str_concat(ptr %a167, ptr %a168, ptr %a169) %t170 = load { ptr, i64, i64 }, ptr %a167 store { ptr, i64, i64 } %t170, ptr %a172 store { ptr, i64, i64 } { ptr @.str.4324, i64 3, i64 0 }, ptr %a173 call void @finch_str_concat(ptr %a171, ptr %a172, ptr %a173) %t174 = load { ptr, i64, i64 }, ptr %a171 %t175 = call { ptr, i64, i64 } @finch.gen.op(ptr %t165, { ptr, i64, i64 } %t174) %t176 = load ptr, ptr %a1 %t177 = icmp eq ptr %t176, null br i1 %t177, label %panic6531, label %ok6532 panic6531: call void @finch_panic(ptr @.str.4325, i64 3626, ptr @.str.4326) unreachable ok6532: %t178 = getelementptr inbounds %S.gen.Gen, ptr %t176, i32 0, i32 40 store { ptr, i64, i64 } %t175, ptr %t178 %t179 = load ptr, ptr %a1 %t180 = load { ptr, i64, i64 }, ptr %a53 %t181 = call { ptr, i64, i64 } @finch.gen.load(ptr %t179, { ptr, i64, i64 } { ptr @.str.4327, i64 17, i64 0 }, { ptr, i64, i64 } %t180) %t182 = load ptr, ptr %a1 %t183 = icmp eq ptr %t182, null br i1 %t183, label %panic6533, label %ok6534 panic6533: call void @finch_panic(ptr @.str.4328, i64 3627, ptr @.str.4329) unreachable ok6534: %t184 = getelementptr inbounds %S.gen.Gen, ptr %t182, i32 0, i32 41 store { ptr, i64, i64 } %t181, ptr %t184 %t185 = load ptr, ptr %a1 %t186 = load ptr, ptr %a1 %t187 = load { ptr, i64, i64 }, ptr %a130 %t188 = call { ptr, i64, i64 } @finch.gen.load(ptr %t186, { ptr, i64, i64 } { ptr @.str.4330, i64 6, i64 0 }, { ptr, i64, i64 } %t187) %t189 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4331, i64 5, i64 0 }) %t190 = load %S.ast.Type, ptr %a3 %t191 = call { ptr, i64, i64 } @finch.gen.floatCast(ptr %t185, { ptr, i64, i64 } %t188, %S.ast.Type %t189, %S.ast.Type %t190) %t192 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t191, 0 %t193 = load %S.ast.Type, ptr %a3 store %S.ast.Type %t193, ptr %a194 call void @finch.copy.S_ast_Type(ptr %a195, ptr %a194) %t196 = load %S.ast.Type, ptr %a195 %t197 = insertvalue %S.gen.Val %t192, %S.ast.Type %t196, 1 ret %S.gen.Val %t197 endif6523: %t198 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0 %t199 = load { ptr, i64, i64 }, ptr %t198 store { ptr, i64, i64 } %t199, ptr %a200 store { ptr, i64, i64 } { ptr @.str.4332, i64 3, i64 0 }, ptr %a201 %t202 = call i32 @finch_str_eq(ptr %a200, ptr %a201) %t203 = icmp ne i32 %t202, 0 br label %logic.from6535 logic.from6535: br i1 %t203, label %logic.rhs6536, label %logic.end6537 logic.rhs6536: %t204 = load %S.ast.Type, ptr %a3 %t205 = call i1 @finch.gen.isNumber(%S.ast.Type %t204) br label %logic.rend6538 logic.rend6538: br label %logic.end6537 logic.end6537: %t206 = phi i1 [ false, %logic.from6535 ], [ %t205, %logic.rend6538 ] br i1 %t206, label %then6539, label %endif6541 then6539: %t207 = load ptr, ptr %a1 %t208 = load ptr, ptr %a1 %t209 = icmp eq ptr %t208, null br i1 %t209, label %panic6542, label %ok6543 panic6542: call void @finch_panic(ptr @.str.4333, i64 3631, ptr @.str.4334) unreachable ok6543: %t210 = getelementptr inbounds %S.gen.Gen, ptr %t208, i32 0, i32 1 %t211 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 %t212 = load i64, ptr %t211 %t213 = load { ptr, i64, i64 }, ptr %t210 %t214 = extractvalue { ptr, i64, i64 } %t213, 1 %t215 = icmp uge i64 %t212, %t214 br i1 %t215, label %range6544, label %inrange6545 range6544: call void @finch_panic_index(ptr @.str.4335, i64 3631, i64 %t212, i64 %t214) unreachable inrange6545: %t216 = extractvalue { ptr, i64, i64 } %t213, 0 %t217 = getelementptr inbounds { ptr, i64, i64 }, ptr %t216, i64 %t212 %t218 = load { ptr, i64, i64 }, ptr %t217 %t219 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t207, { ptr, i64, i64 } %t218) store { ptr, i64, i64 } %t219, ptr %a220 %t221 = load %S.ast.Type, ptr %a3 %t222 = call i1 @finch.gen.isInt(%S.ast.Type %t221) br i1 %t222, label %then6546, label %endif6548 then6546: %t223 = load ptr, ptr %a1 %t224 = load ptr, ptr %a1 %t225 = load %S.gen.Val, ptr %a17 %t226 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t224, %S.gen.Val %t225) store { ptr, i64, i64 } { ptr @.str.4336, i64 31, i64 0 }, ptr %a228 store { ptr, i64, i64 } %t226, ptr %a229 call void @finch_str_concat(ptr %a227, ptr %a228, ptr %a229) %t230 = load { ptr, i64, i64 }, ptr %a227 store { ptr, i64, i64 } %t230, ptr %a232 store { ptr, i64, i64 } { ptr @.str.4337, i64 6, i64 0 }, ptr %a233 call void @finch_str_concat(ptr %a231, ptr %a232, ptr %a233) %t234 = load { ptr, i64, i64 }, ptr %a231 %t235 = load { ptr, i64, i64 }, ptr %a220 store { ptr, i64, i64 } %t234, ptr %a237 store { ptr, i64, i64 } %t235, ptr %a238 call void @finch_str_concat(ptr %a236, ptr %a237, ptr %a238) %t239 = load { ptr, i64, i64 }, ptr %a236 store { ptr, i64, i64 } %t239, ptr %a241 store { ptr, i64, i64 } { ptr @.str.4338, i64 6, i64 0 }, ptr %a242 call void @finch_str_concat(ptr %a240, ptr %a241, ptr %a242) %t243 = load { ptr, i64, i64 }, ptr %a240 %t244 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 %t245 = load i64, ptr %t244 call void @finch_str_from_int(ptr %a246, i64 %t245) %t247 = load { ptr, i64, i64 }, ptr %a246 store { ptr, i64, i64 } %t243, ptr %a249 store { ptr, i64, i64 } %t247, ptr %a250 call void @finch_str_concat(ptr %a248, ptr %a249, ptr %a250) %t251 = load { ptr, i64, i64 }, ptr %a248 store { ptr, i64, i64 } %t251, ptr %a253 store { ptr, i64, i64 } { ptr @.str.4339, i64 1, i64 0 }, ptr %a254 call void @finch_str_concat(ptr %a252, ptr %a253, ptr %a254) %t255 = load { ptr, i64, i64 }, ptr %a252 %t256 = call { ptr, i64, i64 } @finch.gen.op(ptr %t223, { ptr, i64, i64 } %t255) store { ptr, i64, i64 } %t256, ptr %a257 %t258 = load ptr, ptr %a1 %t259 = load { ptr, i64, i64 }, ptr %a257 %t260 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4340, i64 3, i64 0 }) %t261 = load %S.ast.Type, ptr %a3 %t262 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t258, { ptr, i64, i64 } %t259, %S.ast.Type %t260, %S.ast.Type %t261) %t263 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t262, 0 %t264 = load %S.ast.Type, ptr %a3 store %S.ast.Type %t264, ptr %a265 call void @finch.copy.S_ast_Type(ptr %a266, ptr %a265) %t267 = load %S.ast.Type, ptr %a266 %t268 = insertvalue %S.gen.Val %t263, %S.ast.Type %t267, 1 ret %S.gen.Val %t268 endif6548: %t269 = load ptr, ptr %a1 %t270 = load ptr, ptr %a1 %t271 = load %S.gen.Val, ptr %a17 %t272 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t270, %S.gen.Val %t271) store { ptr, i64, i64 } { ptr @.str.4341, i64 36, i64 0 }, ptr %a274 store { ptr, i64, i64 } %t272, ptr %a275 call void @finch_str_concat(ptr %a273, ptr %a274, ptr %a275) %t276 = load { ptr, i64, i64 }, ptr %a273 store { ptr, i64, i64 } %t276, ptr %a278 store { ptr, i64, i64 } { ptr @.str.4342, i64 6, i64 0 }, ptr %a279 call void @finch_str_concat(ptr %a277, ptr %a278, ptr %a279) %t280 = load { ptr, i64, i64 }, ptr %a277 %t281 = load { ptr, i64, i64 }, ptr %a220 store { ptr, i64, i64 } %t280, ptr %a283 store { ptr, i64, i64 } %t281, ptr %a284 call void @finch_str_concat(ptr %a282, ptr %a283, ptr %a284) %t285 = load { ptr, i64, i64 }, ptr %a282 store { ptr, i64, i64 } %t285, ptr %a287 store { ptr, i64, i64 } { ptr @.str.4343, i64 6, i64 0 }, ptr %a288 call void @finch_str_concat(ptr %a286, ptr %a287, ptr %a288) %t289 = load { ptr, i64, i64 }, ptr %a286 %t290 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 %t291 = load i64, ptr %t290 call void @finch_str_from_int(ptr %a292, i64 %t291) %t293 = load { ptr, i64, i64 }, ptr %a292 store { ptr, i64, i64 } %t289, ptr %a295 store { ptr, i64, i64 } %t293, ptr %a296 call void @finch_str_concat(ptr %a294, ptr %a295, ptr %a296) %t297 = load { ptr, i64, i64 }, ptr %a294 store { ptr, i64, i64 } %t297, ptr %a299 store { ptr, i64, i64 } { ptr @.str.4344, i64 1, i64 0 }, ptr %a300 call void @finch_str_concat(ptr %a298, ptr %a299, ptr %a300) %t301 = load { ptr, i64, i64 }, ptr %a298 %t302 = call { ptr, i64, i64 } @finch.gen.op(ptr %t269, { ptr, i64, i64 } %t301) store { ptr, i64, i64 } %t302, ptr %a303 %t304 = load ptr, ptr %a1 %t305 = load { ptr, i64, i64 }, ptr %a303 %t306 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4345, i64 5, i64 0 }) %t307 = load %S.ast.Type, ptr %a3 %t308 = call { ptr, i64, i64 } @finch.gen.floatCast(ptr %t304, { ptr, i64, i64 } %t305, %S.ast.Type %t306, %S.ast.Type %t307) %t309 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t308, 0 %t310 = load %S.ast.Type, ptr %a3 store %S.ast.Type %t310, ptr %a311 call void @finch.copy.S_ast_Type(ptr %a312, ptr %a311) %t313 = load %S.ast.Type, ptr %a312 %t314 = insertvalue %S.gen.Val %t309, %S.ast.Type %t313, 1 ret %S.gen.Val %t314 endif6541: %t315 = load %S.ast.Type, ptr %a3 %t316 = call i1 @finch.gen.isInt(%S.ast.Type %t315) br label %logic.from6549 logic.from6549: br i1 %t316, label %logic.rhs6550, label %logic.end6551 logic.rhs6550: %t317 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0 %t318 = load { ptr, i64, i64 }, ptr %t317 store { ptr, i64, i64 } %t318, ptr %a319 store { ptr, i64, i64 } { ptr @.str.4346, i64 4, i64 0 }, ptr %a320 %t321 = call i32 @finch_str_eq(ptr %a319, ptr %a320) %t322 = icmp ne i32 %t321, 0 br label %logic.rend6552 logic.rend6552: br label %logic.end6551 logic.end6551: %t323 = phi i1 [ false, %logic.from6549 ], [ %t322, %logic.rend6552 ] br i1 %t323, label %then6553, label %endif6555 then6553: %t324 = load ptr, ptr %a1 %t325 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0 %t326 = load { ptr, i64, i64 }, ptr %t325 %t327 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4347, i64 3, i64 0 }) %t328 = load %S.ast.Type, ptr %a3 %t329 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t324, { ptr, i64, i64 } %t326, %S.ast.Type %t327, %S.ast.Type %t328) %t330 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t329, 0 %t331 = load %S.ast.Type, ptr %a3 store %S.ast.Type %t331, ptr %a332 call void @finch.copy.S_ast_Type(ptr %a333, ptr %a332) %t334 = load %S.ast.Type, ptr %a333 %t335 = insertvalue %S.gen.Val %t330, %S.ast.Type %t334, 1 ret %S.gen.Val %t335 endif6555: %t336 = load %S.ast.Type, ptr %a3 %t337 = call i1 @finch.gen.isInt(%S.ast.Type %t336) br label %logic.from6556 logic.from6556: br i1 %t337, label %logic.end6558, label %logic.rhs6557 logic.rhs6557: %t338 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 %t339 = load { ptr, i64, i64 }, ptr %t338 store { ptr, i64, i64 } %t339, ptr %a340 store { ptr, i64, i64 } { ptr @.str.4348, i64 4, i64 0 }, ptr %a341 %t342 = call i32 @finch_str_eq(ptr %a340, ptr %a341) %t343 = icmp ne i32 %t342, 0 br label %logic.rend6559 logic.rend6559: br label %logic.end6558 logic.end6558: %t344 = phi i1 [ true, %logic.from6556 ], [ %t343, %logic.rend6559 ] br i1 %t344, label %then6560, label %endif6562 then6560: %t345 = load %S.ast.Type, ptr %a23 %t346 = call i1 @finch.gen.isInt(%S.ast.Type %t345) br label %logic.from6563 logic.from6563: br i1 %t346, label %logic.end6565, label %logic.rhs6564 logic.rhs6564: %t347 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0 %t348 = load { ptr, i64, i64 }, ptr %t347 store { ptr, i64, i64 } %t348, ptr %a349 store { ptr, i64, i64 } { ptr @.str.4349, i64 4, i64 0 }, ptr %a350 %t351 = call i32 @finch_str_eq(ptr %a349, ptr %a350) %t352 = icmp ne i32 %t351, 0 br label %logic.rend6566 logic.rend6566: br label %logic.end6565 logic.end6565: %t353 = phi i1 [ true, %logic.from6563 ], [ %t352, %logic.rend6566 ] br i1 %t353, label %then6567, label %endif6569 then6567: %t354 = load ptr, ptr %a1 %t355 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0 %t356 = load { ptr, i64, i64 }, ptr %t355 %t357 = load %S.ast.Type, ptr %a23 %t358 = load %S.ast.Type, ptr %a3 %t359 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t354, { ptr, i64, i64 } %t356, %S.ast.Type %t357, %S.ast.Type %t358) %t360 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t359, 0 %t361 = load %S.ast.Type, ptr %a3 store %S.ast.Type %t361, ptr %a362 call void @finch.copy.S_ast_Type(ptr %a363, ptr %a362) %t364 = load %S.ast.Type, ptr %a363 %t365 = insertvalue %S.gen.Val %t360, %S.ast.Type %t364, 1 ret %S.gen.Val %t365 endif6569: %t366 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0 %t367 = load { ptr, i64, i64 }, ptr %t366 store { ptr, i64, i64 } %t367, ptr %a368 store { ptr, i64, i64 } { ptr @.str.4350, i64 4, i64 0 }, ptr %a369 %t370 = call i32 @finch_str_eq(ptr %a368, ptr %a369) %t371 = icmp ne i32 %t370, 0 br i1 %t371, label %then6570, label %endif6572 then6570: %t372 = load ptr, ptr %a1 %t373 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0 %t374 = load { ptr, i64, i64 }, ptr %t373 store { ptr, i64, i64 } { ptr @.str.4351, i64 8, i64 0 }, ptr %a376 store { ptr, i64, i64 } %t374, ptr %a377 call void @finch_str_concat(ptr %a375, ptr %a376, ptr %a377) %t378 = load { ptr, i64, i64 }, ptr %a375 store { ptr, i64, i64 } %t378, ptr %a380 store { ptr, i64, i64 } { ptr @.str.4352, i64 4, i64 0 }, ptr %a381 call void @finch_str_concat(ptr %a379, ptr %a380, ptr %a381) %t382 = load { ptr, i64, i64 }, ptr %a379 %t383 = load ptr, ptr %a1 %t384 = load %S.ast.Type, ptr %a3 %t385 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t383, %S.ast.Type %t384) store { ptr, i64, i64 } %t382, ptr %a387 store { ptr, i64, i64 } %t385, ptr %a388 call void @finch_str_concat(ptr %a386, ptr %a387, ptr %a388) %t389 = load { ptr, i64, i64 }, ptr %a386 %t390 = call { ptr, i64, i64 } @finch.gen.op(ptr %t372, { ptr, i64, i64 } %t389) %t391 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t390, 0 %t392 = load %S.ast.Type, ptr %a3 store %S.ast.Type %t392, ptr %a393 call void @finch.copy.S_ast_Type(ptr %a394, ptr %a393) %t395 = load %S.ast.Type, ptr %a394 %t396 = insertvalue %S.gen.Val %t391, %S.ast.Type %t395, 1 ret %S.gen.Val %t396 endif6572: %t397 = load %S.ast.Type, ptr %a23 %t398 = call i1 @finch.gen.isFloat(%S.ast.Type %t397) br label %logic.from6573 logic.from6573: br i1 %t398, label %logic.rhs6574, label %logic.end6575 logic.rhs6574: %t399 = load %S.ast.Type, ptr %a3 %t400 = call i1 @finch.gen.isInt(%S.ast.Type %t399) br label %logic.rend6576 logic.rend6576: br label %logic.end6575 logic.end6575: %t401 = phi i1 [ false, %logic.from6573 ], [ %t400, %logic.rend6576 ] br i1 %t401, label %then6577, label %endif6579 then6577: store { ptr, i64, i64 } { ptr @.str.4353, i64 6, i64 0 }, ptr %a402 %t403 = load %S.ast.Type, ptr %a3 %t404 = call i1 @finch.gen.isSigned(%S.ast.Type %t403) br i1 %t404, label %then6580, label %endif6582 then6580: store { ptr, i64, i64 } { ptr @.str.4354, i64 6, i64 0 }, ptr %a402 br label %endif6582 endif6582: %t405 = load ptr, ptr %a1 %t406 = load { ptr, i64, i64 }, ptr %a402 store { ptr, i64, i64 } %t406, ptr %a408 store { ptr, i64, i64 } { ptr @.str.4355, i64 1, i64 0 }, ptr %a409 call void @finch_str_concat(ptr %a407, ptr %a408, ptr %a409) %t410 = load { ptr, i64, i64 }, ptr %a407 %t411 = load ptr, ptr %a1 %t412 = load %S.ast.Type, ptr %a23 %t413 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t411, %S.ast.Type %t412) store { ptr, i64, i64 } %t410, ptr %a415 store { ptr, i64, i64 } %t413, ptr %a416 call void @finch_str_concat(ptr %a414, ptr %a415, ptr %a416) %t417 = load { ptr, i64, i64 }, ptr %a414 store { ptr, i64, i64 } %t417, ptr %a419 store { ptr, i64, i64 } { ptr @.str.4356, i64 1, i64 0 }, ptr %a420 call void @finch_str_concat(ptr %a418, ptr %a419, ptr %a420) %t421 = load { ptr, i64, i64 }, ptr %a418 %t422 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0 %t423 = load { ptr, i64, i64 }, ptr %t422 store { ptr, i64, i64 } %t421, ptr %a425 store { ptr, i64, i64 } %t423, ptr %a426 call void @finch_str_concat(ptr %a424, ptr %a425, ptr %a426) %t427 = load { ptr, i64, i64 }, ptr %a424 store { ptr, i64, i64 } %t427, ptr %a429 store { ptr, i64, i64 } { ptr @.str.4357, i64 4, i64 0 }, ptr %a430 call void @finch_str_concat(ptr %a428, ptr %a429, ptr %a430) %t431 = load { ptr, i64, i64 }, ptr %a428 %t432 = load ptr, ptr %a1 %t433 = load %S.ast.Type, ptr %a3 %t434 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t432, %S.ast.Type %t433) store { ptr, i64, i64 } %t431, ptr %a436 store { ptr, i64, i64 } %t434, ptr %a437 call void @finch_str_concat(ptr %a435, ptr %a436, ptr %a437) %t438 = load { ptr, i64, i64 }, ptr %a435 %t439 = call { ptr, i64, i64 } @finch.gen.op(ptr %t405, { ptr, i64, i64 } %t438) %t440 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t439, 0 %t441 = load %S.ast.Type, ptr %a3 store %S.ast.Type %t441, ptr %a442 call void @finch.copy.S_ast_Type(ptr %a443, ptr %a442) %t444 = load %S.ast.Type, ptr %a443 %t445 = insertvalue %S.gen.Val %t440, %S.ast.Type %t444, 1 ret %S.gen.Val %t445 endif6579: br label %endif6562 endif6562: %t446 = load %S.ast.Type, ptr %a3 %t447 = call i1 @finch.gen.isFloat(%S.ast.Type %t446) br i1 %t447, label %then6583, label %endif6585 then6583: %t448 = load %S.ast.Type, ptr %a23 %t449 = call i1 @finch.gen.isInt(%S.ast.Type %t448) br i1 %t449, label %then6586, label %endif6588 then6586: %t450 = load ptr, ptr %a1 %t451 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0 %t452 = load { ptr, i64, i64 }, ptr %t451 %t453 = load %S.ast.Type, ptr %a23 %t454 = load %S.ast.Type, ptr %a3 %t455 = call { ptr, i64, i64 } @finch.gen.intToFloat(ptr %t450, { ptr, i64, i64 } %t452, %S.ast.Type %t453, %S.ast.Type %t454) %t456 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t455, 0 %t457 = load %S.ast.Type, ptr %a3 store %S.ast.Type %t457, ptr %a458 call void @finch.copy.S_ast_Type(ptr %a459, ptr %a458) %t460 = load %S.ast.Type, ptr %a459 %t461 = insertvalue %S.gen.Val %t456, %S.ast.Type %t460, 1 ret %S.gen.Val %t461 endif6588: %t462 = load %S.ast.Type, ptr %a23 %t463 = call i1 @finch.gen.isFloat(%S.ast.Type %t462) br i1 %t463, label %then6589, label %endif6591 then6589: %t464 = load ptr, ptr %a1 %t465 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0 %t466 = load { ptr, i64, i64 }, ptr %t465 %t467 = load %S.ast.Type, ptr %a23 %t468 = load %S.ast.Type, ptr %a3 %t469 = call { ptr, i64, i64 } @finch.gen.floatCast(ptr %t464, { ptr, i64, i64 } %t466, %S.ast.Type %t467, %S.ast.Type %t468) %t470 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t469, 0 %t471 = load %S.ast.Type, ptr %a3 store %S.ast.Type %t471, ptr %a472 call void @finch.copy.S_ast_Type(ptr %a473, ptr %a472) %t474 = load %S.ast.Type, ptr %a473 %t475 = insertvalue %S.gen.Val %t470, %S.ast.Type %t474, 1 ret %S.gen.Val %t475 endif6591: br label %endif6585 endif6585: %t476 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 %t477 = load { ptr, i64, i64 }, ptr %t476 store { ptr, i64, i64 } %t477, ptr %a478 store { ptr, i64, i64 } { ptr @.str.4358, i64 4, i64 0 }, ptr %a479 %t480 = call i32 @finch_str_eq(ptr %a478, ptr %a479) %t481 = icmp ne i32 %t480, 0 br label %logic.from6592 logic.from6592: br i1 %t481, label %logic.rhs6593, label %logic.end6594 logic.rhs6593: %t482 = load %S.ast.Type, ptr %a23 %t483 = call i1 @finch.gen.isInt(%S.ast.Type %t482) br label %logic.rend6595 logic.rend6595: br label %logic.end6594 logic.end6594: %t484 = phi i1 [ false, %logic.from6592 ], [ %t483, %logic.rend6595 ] br i1 %t484, label %then6596, label %endif6598 then6596: %t485 = load ptr, ptr %a1 %t486 = load ptr, ptr %a1 %t487 = load %S.ast.Type, ptr %a23 %t488 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t486, %S.ast.Type %t487) store { ptr, i64, i64 } { ptr @.str.4359, i64 8, i64 0 }, ptr %a490 store { ptr, i64, i64 } %t488, ptr %a491 call void @finch_str_concat(ptr %a489, ptr %a490, ptr %a491) %t492 = load { ptr, i64, i64 }, ptr %a489 store { ptr, i64, i64 } %t492, ptr %a494 store { ptr, i64, i64 } { ptr @.str.4360, i64 1, i64 0 }, ptr %a495 call void @finch_str_concat(ptr %a493, ptr %a494, ptr %a495) %t496 = load { ptr, i64, i64 }, ptr %a493 %t497 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0 %t498 = load { ptr, i64, i64 }, ptr %t497 store { ptr, i64, i64 } %t496, ptr %a500 store { ptr, i64, i64 } %t498, ptr %a501 call void @finch_str_concat(ptr %a499, ptr %a500, ptr %a501) %t502 = load { ptr, i64, i64 }, ptr %a499 store { ptr, i64, i64 } %t502, ptr %a504 store { ptr, i64, i64 } { ptr @.str.4361, i64 3, i64 0 }, ptr %a505 call void @finch_str_concat(ptr %a503, ptr %a504, ptr %a505) %t506 = load { ptr, i64, i64 }, ptr %a503 %t507 = call { ptr, i64, i64 } @finch.gen.op(ptr %t485, { ptr, i64, i64 } %t506) %t508 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t507, 0 %t509 = load %S.ast.Type, ptr %a3 store %S.ast.Type %t509, ptr %a510 call void @finch.copy.S_ast_Type(ptr %a511, ptr %a510) %t512 = load %S.ast.Type, ptr %a511 %t513 = insertvalue %S.gen.Val %t508, %S.ast.Type %t512, 1 ret %S.gen.Val %t513 endif6598: %t514 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 %t515 = load { ptr, i64, i64 }, ptr %t514 store { ptr, i64, i64 } %t515, ptr %a516 store { ptr, i64, i64 } { ptr @.str.4362, i64 3, i64 0 }, ptr %a517 %t518 = call i32 @finch_str_eq(ptr %a516, ptr %a517) %t519 = icmp ne i32 %t518, 0 br label %logic.from6599 logic.from6599: br i1 %t519, label %logic.rhs6600, label %logic.end6601 logic.rhs6600: %t520 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0 %t521 = load { ptr, i64, i64 }, ptr %t520 store { ptr, i64, i64 } %t521, ptr %a522 store { ptr, i64, i64 } { ptr @.str.4363, i64 3, i64 0 }, ptr %a523 %t524 = call i32 @finch_str_eq(ptr %a522, ptr %a523) %t525 = icmp ne i32 %t524, 0 br label %logic.from6602 logic.from6602: br i1 %t525, label %logic.end6604, label %logic.rhs6603 logic.rhs6603: %t526 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0 %t527 = load { ptr, i64, i64 }, ptr %t526 store { ptr, i64, i64 } %t527, ptr %a528 store { ptr, i64, i64 } { ptr @.str.4364, i64 4, i64 0 }, ptr %a529 %t530 = call i32 @finch_str_eq(ptr %a528, ptr %a529) %t531 = icmp ne i32 %t530, 0 br label %logic.rend6605 logic.rend6605: br label %logic.end6604 logic.end6604: %t532 = phi i1 [ true, %logic.from6602 ], [ %t531, %logic.rend6605 ] br label %logic.rend6606 logic.rend6606: br label %logic.end6601 logic.end6601: %t533 = phi i1 [ false, %logic.from6599 ], [ %t532, %logic.rend6606 ] br i1 %t533, label %then6607, label %endif6609 then6607: %t534 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0 %t535 = load { ptr, i64, i64 }, ptr %t534 store { ptr, i64, i64 } %t535, ptr %a536 call void @finch_str_copy(ptr %a537, ptr %a536) %t538 = load { ptr, i64, i64 }, ptr %a537 %t539 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t538, 0 %t540 = load %S.ast.Type, ptr %a3 store %S.ast.Type %t540, ptr %a541 call void @finch.copy.S_ast_Type(ptr %a542, ptr %a541) %t543 = load %S.ast.Type, ptr %a542 %t544 = insertvalue %S.gen.Val %t539, %S.ast.Type %t543, 1 ret %S.gen.Val %t544 endif6609: %t545 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 %t546 = load { ptr, i64, i64 }, ptr %t545 store { ptr, i64, i64 } %t546, ptr %a547 store { ptr, i64, i64 } { ptr @.str.4365, i64 3, i64 0 }, ptr %a548 %t549 = call i32 @finch_str_eq(ptr %a547, ptr %a548) %t550 = icmp ne i32 %t549, 0 br label %logic.from6610 logic.from6610: br i1 %t550, label %logic.rhs6611, label %logic.end6612 logic.rhs6611: %t551 = load %S.ast.Type, ptr %a23 %t552 = call i1 @finch.gen.isInt(%S.ast.Type %t551) br label %logic.rend6613 logic.rend6613: br label %logic.end6612 logic.end6612: %t553 = phi i1 [ false, %logic.from6610 ], [ %t552, %logic.rend6613 ] br i1 %t553, label %then6614, label %endif6616 then6614: %t554 = load ptr, ptr %a1 %t555 = load ptr, ptr %a1 %t556 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0 %t557 = load { ptr, i64, i64 }, ptr %t556 %t558 = load %S.ast.Type, ptr %a23 %t559 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4367, i64 3, i64 0 }) %t560 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t555, { ptr, i64, i64 } %t557, %S.ast.Type %t558, %S.ast.Type %t559) store { ptr, i64, i64 } { ptr @.str.4366, i64 13, i64 0 }, ptr %a562 store { ptr, i64, i64 } %t560, ptr %a563 call void @finch_str_concat(ptr %a561, ptr %a562, ptr %a563) %t564 = load { ptr, i64, i64 }, ptr %a561 store { ptr, i64, i64 } %t564, ptr %a566 store { ptr, i64, i64 } { ptr @.str.4368, i64 7, i64 0 }, ptr %a567 call void @finch_str_concat(ptr %a565, ptr %a566, ptr %a567) %t568 = load { ptr, i64, i64 }, ptr %a565 %t569 = call { ptr, i64, i64 } @finch.gen.op(ptr %t554, { ptr, i64, i64 } %t568) %t570 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t569, 0 %t571 = load %S.ast.Type, ptr %a3 store %S.ast.Type %t571, ptr %a572 call void @finch.copy.S_ast_Type(ptr %a573, ptr %a572) %t574 = load %S.ast.Type, ptr %a573 %t575 = insertvalue %S.gen.Val %t570, %S.ast.Type %t574, 1 ret %S.gen.Val %t575 endif6616: %t576 = load %S.ast.Type, ptr %a3 %t577 = call i1 @finch.gen.isInt(%S.ast.Type %t576) br label %logic.from6617 logic.from6617: br i1 %t577, label %logic.rhs6618, label %logic.end6619 logic.rhs6618: %t578 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0 %t579 = load { ptr, i64, i64 }, ptr %t578 store { ptr, i64, i64 } %t579, ptr %a580 store { ptr, i64, i64 } { ptr @.str.4369, i64 3, i64 0 }, ptr %a581 %t582 = call i32 @finch_str_eq(ptr %a580, ptr %a581) %t583 = icmp ne i32 %t582, 0 br label %logic.rend6620 logic.rend6620: br label %logic.end6619 logic.end6619: %t584 = phi i1 [ false, %logic.from6617 ], [ %t583, %logic.rend6620 ] br i1 %t584, label %then6621, label %endif6623 then6621: %t585 = load ptr, ptr %a1 %t586 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0 %t587 = load { ptr, i64, i64 }, ptr %t586 store { ptr, i64, i64 } { ptr @.str.4370, i64 13, i64 0 }, ptr %a589 store { ptr, i64, i64 } %t587, ptr %a590 call void @finch_str_concat(ptr %a588, ptr %a589, ptr %a590) %t591 = load { ptr, i64, i64 }, ptr %a588 store { ptr, i64, i64 } %t591, ptr %a593 store { ptr, i64, i64 } { ptr @.str.4371, i64 4, i64 0 }, ptr %a594 call void @finch_str_concat(ptr %a592, ptr %a593, ptr %a594) %t595 = load { ptr, i64, i64 }, ptr %a592 %t596 = load ptr, ptr %a1 %t597 = load %S.ast.Type, ptr %a3 %t598 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t596, %S.ast.Type %t597) store { ptr, i64, i64 } %t595, ptr %a600 store { ptr, i64, i64 } %t598, ptr %a601 call void @finch_str_concat(ptr %a599, ptr %a600, ptr %a601) %t602 = load { ptr, i64, i64 }, ptr %a599 %t603 = call { ptr, i64, i64 } @finch.gen.op(ptr %t585, { ptr, i64, i64 } %t602) %t604 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t603, 0 %t605 = load %S.ast.Type, ptr %a3 store %S.ast.Type %t605, ptr %a606 call void @finch.copy.S_ast_Type(ptr %a607, ptr %a606) %t608 = load %S.ast.Type, ptr %a607 %t609 = insertvalue %S.gen.Val %t604, %S.ast.Type %t608, 1 ret %S.gen.Val %t609 endif6623: %t610 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 %t611 = load { ptr, i64, i64 }, ptr %t610 store { ptr, i64, i64 } %t611, ptr %a612 store { ptr, i64, i64 } { ptr @.str.4372, i64 3, i64 0 }, ptr %a613 %t614 = call i32 @finch_str_eq(ptr %a612, ptr %a613) %t615 = icmp ne i32 %t614, 0 br label %logic.from6624 logic.from6624: br i1 %t615, label %logic.rhs6625, label %logic.end6626 logic.rhs6625: %t616 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0 %t617 = load { ptr, i64, i64 }, ptr %t616 store { ptr, i64, i64 } %t617, ptr %a618 store { ptr, i64, i64 } { ptr @.str.4373, i64 3, i64 0 }, ptr %a619 %t620 = call i32 @finch_str_eq(ptr %a618, ptr %a619) %t621 = icmp ne i32 %t620, 0 br label %logic.rend6627 logic.rend6627: br label %logic.end6626 logic.end6626: %t622 = phi i1 [ false, %logic.from6624 ], [ %t621, %logic.rend6627 ] br i1 %t622, label %then6628, label %endif6630 then6628: %t623 = load ptr, ptr %a1 %t624 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t625 = load { ptr, i64, i64 }, ptr %t624 %t626 = extractvalue { ptr, i64, i64 } %t625, 1 %t627 = icmp uge i64 0, %t626 br i1 %t627, label %range6631, label %inrange6632 range6631: call void @finch_panic_index(ptr @.str.4374, i64 3678, i64 0, i64 %t626) unreachable inrange6632: %t628 = extractvalue { ptr, i64, i64 } %t625, 0 %t629 = getelementptr inbounds %S.ast.Node, ptr %t628, i64 0 %t630 = load %S.ast.Node, ptr %t629 call void @finch.gen.fail(ptr %t623, %S.ast.Node %t630, { ptr, i64, i64 } { ptr @.str.4375, i64 70, i64 0 }) br label %endif6630 endif6630: %t631 = load ptr, ptr %a1 %t632 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t633 = load { ptr, i64, i64 }, ptr %t632 %t634 = extractvalue { ptr, i64, i64 } %t633, 1 %t635 = icmp uge i64 0, %t634 br i1 %t635, label %range6633, label %inrange6634 range6633: call void @finch_panic_index(ptr @.str.4376, i64 3680, i64 0, i64 %t634) unreachable inrange6634: %t636 = extractvalue { ptr, i64, i64 } %t633, 0 %t637 = getelementptr inbounds %S.ast.Node, ptr %t636, i64 0 %t638 = load %S.ast.Node, ptr %t637 %t639 = load %S.ast.Type, ptr %a23 %t640 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t639) store { ptr, i64, i64 } { ptr @.str.4377, i64 11, i64 0 }, ptr %a642 store { ptr, i64, i64 } %t640, ptr %a643 call void @finch_str_concat(ptr %a641, ptr %a642, ptr %a643) %t644 = load { ptr, i64, i64 }, ptr %a641 store { ptr, i64, i64 } %t644, ptr %a646 store { ptr, i64, i64 } { ptr @.str.4378, i64 6, i64 0 }, ptr %a647 call void @finch_str_concat(ptr %a645, ptr %a646, ptr %a647) %t648 = load { ptr, i64, i64 }, ptr %a645 %t649 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t650 = load { ptr, i64, i64 }, ptr %t649 store { ptr, i64, i64 } %t648, ptr %a652 store { ptr, i64, i64 } %t650, ptr %a653 call void @finch_str_concat(ptr %a651, ptr %a652, ptr %a653) %t654 = load { ptr, i64, i64 }, ptr %a651 call void @finch.gen.fail(ptr %t631, %S.ast.Node %t638, { ptr, i64, i64 } %t654) %t655 = load %S.gen.Val, ptr %a17 store %S.gen.Val %t655, ptr %a656 call void @finch.copy.S_gen_Val(ptr %a657, ptr %a656) %t658 = load %S.gen.Val, ptr %a657 ret %S.gen.Val %t658 } define internal i64 @finch.gen.sizeBytes(ptr %p0, %S.ast.Type %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Type, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Type %p1, ptr %a2 %t3 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t4 = load { ptr, i64, i64 }, ptr %t3 store { ptr, i64, i64 } %t4, ptr %a5 store { ptr, i64, i64 } { ptr @.str.4379, i64 6, i64 0 }, ptr %a6 %t7 = call i32 @finch_str_eq(ptr %a5, ptr %a6) %t8 = icmp ne i32 %t7, 0 br i1 %t8, label %then6635, label %endif6637 then6635: %t9 = load ptr, ptr %a1 %t10 = icmp eq ptr %t9, null br i1 %t10, label %panic6638, label %ok6639 panic6638: call void @finch_panic(ptr @.str.4380, i64 3713, ptr @.str.4381) unreachable ok6639: %t11 = getelementptr inbounds %S.gen.Gen, ptr %t9, i32 0, i32 15 %t12 = load ptr, ptr %a1 %t13 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t14 = load { ptr, i64, i64 }, ptr %t13 %t15 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t16 = load { ptr, i64, i64 }, ptr %t15 %t17 = call i64 @finch.gen.findStruct(ptr %t12, { ptr, i64, i64 } %t14, { ptr, i64, i64 } %t16) %t18 = load { ptr, i64, i64 }, ptr %t11 %t19 = extractvalue { ptr, i64, i64 } %t18, 1 %t20 = icmp uge i64 %t17, %t19 br i1 %t20, label %range6640, label %inrange6641 range6640: call void @finch_panic_index(ptr @.str.4382, i64 3713, i64 %t17, i64 %t19) unreachable inrange6641: %t21 = extractvalue { ptr, i64, i64 } %t18, 0 %t22 = getelementptr inbounds %S.gen.StructDef, ptr %t21, i64 %t17 %t23 = getelementptr inbounds %S.gen.StructDef, ptr %t22, i32 0, i32 9 %t24 = load i64, ptr %t23 ret i64 %t24 endif6637: %t25 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t26 = load { ptr, i64, i64 }, ptr %t25 store { ptr, i64, i64 } %t26, ptr %a27 store { ptr, i64, i64 } { ptr @.str.4383, i64 5, i64 0 }, ptr %a28 %t29 = call i32 @finch_str_eq(ptr %a27, ptr %a28) %t30 = icmp ne i32 %t29, 0 br i1 %t30, label %then6642, label %endif6644 then6642: %t31 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 4 %t32 = load i64, ptr %t31 %t33 = load ptr, ptr %a1 %t34 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t35 = load { ptr, i64, i64 }, ptr %t34 %t36 = extractvalue { ptr, i64, i64 } %t35, 1 %t37 = icmp uge i64 0, %t36 br i1 %t37, label %range6645, label %inrange6646 range6645: call void @finch_panic_index(ptr @.str.4384, i64 3716, i64 0, i64 %t36) unreachable inrange6646: %t38 = extractvalue { ptr, i64, i64 } %t35, 0 %t39 = getelementptr inbounds %S.ast.Type, ptr %t38, i64 0 %t40 = load %S.ast.Type, ptr %t39 %t41 = call i64 @finch.gen.sizeBytes(ptr %t33, %S.ast.Type %t40) %t42 = mul i64 %t32, %t41 ret i64 %t42 endif6644: %t43 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t44 = load { ptr, i64, i64 }, ptr %t43 store { ptr, i64, i64 } %t44, ptr %a45 store { ptr, i64, i64 } { ptr @.str.4385, i64 3, i64 0 }, ptr %a46 %t47 = call i32 @finch_str_eq(ptr %a45, ptr %a46) %t48 = icmp ne i32 %t47, 0 br label %logic.from6647 logic.from6647: br i1 %t48, label %logic.end6649, label %logic.rhs6648 logic.rhs6648: %t49 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t50 = load { ptr, i64, i64 }, ptr %t49 store { ptr, i64, i64 } %t50, ptr %a51 store { ptr, i64, i64 } { ptr @.str.4386, i64 3, i64 0 }, ptr %a52 %t53 = call i32 @finch_str_eq(ptr %a51, ptr %a52) %t54 = icmp ne i32 %t53, 0 br label %logic.rend6650 logic.rend6650: br label %logic.end6649 logic.end6649: %t55 = phi i1 [ true, %logic.from6647 ], [ %t54, %logic.rend6650 ] br i1 %t55, label %then6651, label %endif6653 then6651: ret i64 8 endif6653: %t56 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t57 = load { ptr, i64, i64 }, ptr %t56 store { ptr, i64, i64 } %t57, ptr %a58 store { ptr, i64, i64 } { ptr @.str.4387, i64 5, i64 0 }, ptr %a59 %t60 = call i32 @finch_str_eq(ptr %a58, ptr %a59) %t61 = icmp ne i32 %t60, 0 br i1 %t61, label %then6654, label %endif6656 then6654: ret i64 8 endif6656: %t62 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t63 = load { ptr, i64, i64 }, ptr %t62 store { ptr, i64, i64 } %t63, ptr %a64 store { ptr, i64, i64 } { ptr @.str.4388, i64 3, i64 0 }, ptr %a65 %t66 = call i32 @finch_str_eq(ptr %a64, ptr %a65) %t67 = icmp ne i32 %t66, 0 br i1 %t67, label %then6657, label %endif6659 then6657: ret i64 4 endif6659: %t68 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t69 = load { ptr, i64, i64 }, ptr %t68 store { ptr, i64, i64 } %t69, ptr %a70 store { ptr, i64, i64 } { ptr @.str.4389, i64 4, i64 0 }, ptr %a71 %t72 = call i32 @finch_str_eq(ptr %a70, ptr %a71) %t73 = icmp ne i32 %t72, 0 br i1 %t73, label %then6660, label %endif6662 then6660: ret i64 1 endif6662: %t74 = load %S.ast.Type, ptr %a2 %t75 = call i64 @finch.gen.bitsOf(%S.ast.Type %t74) %t76 = sdiv i64 %t75, 8 ret i64 %t76 } define internal void @finch.copy.arr_S_gen_Leaf(ptr %dst, ptr %src) { entry: call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.gen.Leaf, ptr null, i32 1) to i64)) ret void } define internal { ptr, i64, i64 } @finch.gen.leavesOf(ptr %p0, %S.ast.Type %p1, i64 %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Type, align 16 %a3 = alloca i64, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca %S.gen.StructDef, align 16 %a27 = alloca %S.gen.StructDef, align 16 %a29 = alloca %S.gen.StructDef, align 16 %a33 = alloca i64, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca i64, align 16 %a65 = alloca %S.gen.Leaf, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca i64, align 16 %a94 = alloca i64, align 16 %a111 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca i64, align 16 %a120 = alloca %S.gen.Leaf, align 16 %a143 = alloca { ptr, i64, i64 }, align 16 %a144 = alloca { ptr, i64, i64 }, align 16 %a153 = alloca { ptr, i64, i64 }, align 16 %a154 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Type %p1, ptr %a2 store i64 %p2, ptr %a3 store { ptr, i64, i64 } zeroinitializer, ptr %a4 %t5 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t6 = load { ptr, i64, i64 }, ptr %t5 store { ptr, i64, i64 } %t6, ptr %a7 store { ptr, i64, i64 } { ptr @.str.4390, i64 6, i64 0 }, ptr %a8 %t9 = call i32 @finch_str_eq(ptr %a7, ptr %a8) %t10 = icmp ne i32 %t9, 0 br i1 %t10, label %then6663, label %else6664 then6663: %t11 = load ptr, ptr %a1 %t12 = icmp eq ptr %t11, null br i1 %t12, label %panic6666, label %ok6667 panic6666: call void @finch_panic(ptr @.str.4391, i64 3737, ptr @.str.4392) unreachable ok6667: %t13 = getelementptr inbounds %S.gen.Gen, ptr %t11, i32 0, i32 15 %t14 = load ptr, ptr %a1 %t15 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t16 = load { ptr, i64, i64 }, ptr %t15 %t17 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t18 = load { ptr, i64, i64 }, ptr %t17 %t19 = call i64 @finch.gen.findStruct(ptr %t14, { ptr, i64, i64 } %t16, { ptr, i64, i64 } %t18) %t20 = load { ptr, i64, i64 }, ptr %t13 %t21 = extractvalue { ptr, i64, i64 } %t20, 1 %t22 = icmp uge i64 %t19, %t21 br i1 %t22, label %range6668, label %inrange6669 range6668: call void @finch_panic_index(ptr @.str.4393, i64 3737, i64 %t19, i64 %t21) unreachable inrange6669: %t23 = extractvalue { ptr, i64, i64 } %t20, 0 %t24 = getelementptr inbounds %S.gen.StructDef, ptr %t23, i64 %t19 %t25 = load %S.gen.StructDef, ptr %t24 store %S.gen.StructDef %t25, ptr %a26 call void @finch.copy.S_gen_StructDef(ptr %a27, ptr %a26) %t28 = load %S.gen.StructDef, ptr %a27 store %S.gen.StructDef %t28, ptr %a29 %t30 = getelementptr inbounds %S.gen.StructDef, ptr %a29, i32 0, i32 12 %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t30, i32 0, i32 1 %t32 = load i64, ptr %t31 store i64 0, ptr %a33 br label %for.cond6670 for.cond6670: %t34 = load i64, ptr %a33 %t35 = icmp slt i64 %t34, %t32 br i1 %t35, label %for.body6671, label %for.end6673 for.body6671: %t36 = load ptr, ptr %a1 %t37 = getelementptr inbounds %S.gen.StructDef, ptr %a29, i32 0, i32 12 %t38 = load i64, ptr %a33 %t39 = load { ptr, i64, i64 }, ptr %t37 %t40 = extractvalue { ptr, i64, i64 } %t39, 1 %t41 = icmp uge i64 %t38, %t40 br i1 %t41, label %range6674, label %inrange6675 range6674: call void @finch_panic_index(ptr @.str.4394, i64 3739, i64 %t38, i64 %t40) unreachable inrange6675: %t42 = extractvalue { ptr, i64, i64 } %t39, 0 %t43 = getelementptr inbounds %S.ast.Type, ptr %t42, i64 %t38 %t44 = load %S.ast.Type, ptr %t43 %t45 = load i64, ptr %a3 %t46 = getelementptr inbounds %S.gen.StructDef, ptr %a29, i32 0, i32 4 %t47 = load i64, ptr %a33 %t48 = load { ptr, i64, i64 }, ptr %t46 %t49 = extractvalue { ptr, i64, i64 } %t48, 1 %t50 = icmp uge i64 %t47, %t49 br i1 %t50, label %range6676, label %inrange6677 range6676: call void @finch_panic_index(ptr @.str.4395, i64 3739, i64 %t47, i64 %t49) unreachable inrange6677: %t51 = extractvalue { ptr, i64, i64 } %t48, 0 %t52 = getelementptr inbounds i64, ptr %t51, i64 %t47 %t53 = load i64, ptr %t52 %t54 = add i64 %t45, %t53 %t55 = call { ptr, i64, i64 } @finch.gen.leavesOf(ptr %t36, %S.ast.Type %t44, i64 %t54) store { ptr, i64, i64 } %t55, ptr %a56 store i64 0, ptr %a57 br label %each.cond6678 each.cond6678: %t58 = getelementptr inbounds { ptr, i64, i64 }, ptr %a56, i32 0, i32 1 %t59 = load i64, ptr %t58 %t60 = load i64, ptr %a57 %t61 = icmp slt i64 %t60, %t59 br i1 %t61, label %each.body6679, label %each.end6681 each.body6679: %t62 = load ptr, ptr %a56 %t63 = getelementptr inbounds %S.gen.Leaf, ptr %t62, i64 %t60 %t64 = load %S.gen.Leaf, ptr %t63 store %S.gen.Leaf %t64, ptr %a65 %t66 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 %t67 = load %S.gen.Leaf, ptr %a65 %t68 = load i64, ptr %t66 %t69 = add i64 %t68, 1 call void @finch_arr_reserve(ptr %a4, i64 %t69, i64 ptrtoint (ptr getelementptr (%S.gen.Leaf, ptr null, i32 1) to i64)) %t70 = load ptr, ptr %a4 %t71 = getelementptr inbounds %S.gen.Leaf, ptr %t70, i64 %t68 store %S.gen.Leaf %t67, ptr %t71 store i64 %t69, ptr %t66 br label %each.step6680 each.step6680: %t72 = load i64, ptr %a57 %t73 = add i64 %t72, 1 store i64 %t73, ptr %a57 br label %each.cond6678 each.end6681: br label %for.step6672 for.step6672: %t74 = load i64, ptr %a33 %t75 = add i64 %t74, 1 store i64 %t75, ptr %a33 br label %for.cond6670 for.end6673: br label %endif6665 else6664: %t76 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t77 = load { ptr, i64, i64 }, ptr %t76 store { ptr, i64, i64 } %t77, ptr %a78 store { ptr, i64, i64 } { ptr @.str.4396, i64 5, i64 0 }, ptr %a79 %t80 = call i32 @finch_str_eq(ptr %a78, ptr %a79) %t81 = icmp ne i32 %t80, 0 br i1 %t81, label %then6682, label %else6683 then6682: %t82 = load ptr, ptr %a1 %t83 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t84 = load { ptr, i64, i64 }, ptr %t83 %t85 = extractvalue { ptr, i64, i64 } %t84, 1 %t86 = icmp uge i64 0, %t85 br i1 %t86, label %range6685, label %inrange6686 range6685: call void @finch_panic_index(ptr @.str.4397, i64 3744, i64 0, i64 %t85) unreachable inrange6686: %t87 = extractvalue { ptr, i64, i64 } %t84, 0 %t88 = getelementptr inbounds %S.ast.Type, ptr %t87, i64 0 %t89 = load %S.ast.Type, ptr %t88 %t90 = call i64 @finch.gen.sizeBytes(ptr %t82, %S.ast.Type %t89) store i64 %t90, ptr %a91 %t92 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 4 %t93 = load i64, ptr %t92 store i64 0, ptr %a94 br label %for.cond6687 for.cond6687: %t95 = load i64, ptr %a94 %t96 = icmp slt i64 %t95, %t93 br i1 %t96, label %for.body6688, label %for.end6690 for.body6688: %t97 = load ptr, ptr %a1 %t98 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t99 = load { ptr, i64, i64 }, ptr %t98 %t100 = extractvalue { ptr, i64, i64 } %t99, 1 %t101 = icmp uge i64 0, %t100 br i1 %t101, label %range6691, label %inrange6692 range6691: call void @finch_panic_index(ptr @.str.4398, i64 3746, i64 0, i64 %t100) unreachable inrange6692: %t102 = extractvalue { ptr, i64, i64 } %t99, 0 %t103 = getelementptr inbounds %S.ast.Type, ptr %t102, i64 0 %t104 = load %S.ast.Type, ptr %t103 %t105 = load i64, ptr %a3 %t106 = load i64, ptr %a94 %t107 = load i64, ptr %a91 %t108 = mul i64 %t106, %t107 %t109 = add i64 %t105, %t108 %t110 = call { ptr, i64, i64 } @finch.gen.leavesOf(ptr %t97, %S.ast.Type %t104, i64 %t109) store { ptr, i64, i64 } %t110, ptr %a111 store i64 0, ptr %a112 br label %each.cond6693 each.cond6693: %t113 = getelementptr inbounds { ptr, i64, i64 }, ptr %a111, i32 0, i32 1 %t114 = load i64, ptr %t113 %t115 = load i64, ptr %a112 %t116 = icmp slt i64 %t115, %t114 br i1 %t116, label %each.body6694, label %each.end6696 each.body6694: %t117 = load ptr, ptr %a111 %t118 = getelementptr inbounds %S.gen.Leaf, ptr %t117, i64 %t115 %t119 = load %S.gen.Leaf, ptr %t118 store %S.gen.Leaf %t119, ptr %a120 %t121 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 %t122 = load %S.gen.Leaf, ptr %a120 %t123 = load i64, ptr %t121 %t124 = add i64 %t123, 1 call void @finch_arr_reserve(ptr %a4, i64 %t124, i64 ptrtoint (ptr getelementptr (%S.gen.Leaf, ptr null, i32 1) to i64)) %t125 = load ptr, ptr %a4 %t126 = getelementptr inbounds %S.gen.Leaf, ptr %t125, i64 %t123 store %S.gen.Leaf %t122, ptr %t126 store i64 %t124, ptr %t121 br label %each.step6695 each.step6695: %t127 = load i64, ptr %a112 %t128 = add i64 %t127, 1 store i64 %t128, ptr %a112 br label %each.cond6693 each.end6696: br label %for.step6689 for.step6689: %t129 = load i64, ptr %a94 %t130 = add i64 %t129, 1 store i64 %t130, ptr %a94 br label %for.cond6687 for.end6690: br label %endif6684 else6683: %t131 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 %t132 = load i64, ptr %a3 %t133 = insertvalue %S.gen.Leaf zeroinitializer, i64 %t132, 0 %t134 = load ptr, ptr %a1 %t135 = load %S.ast.Type, ptr %a2 %t136 = call i64 @finch.gen.sizeBytes(ptr %t134, %S.ast.Type %t135) %t137 = insertvalue %S.gen.Leaf %t133, i64 %t136, 1 %t138 = load %S.ast.Type, ptr %a2 %t139 = call i1 @finch.gen.isFloat(%S.ast.Type %t138) %t140 = insertvalue %S.gen.Leaf %t137, i1 %t139, 2 %t141 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t142 = load { ptr, i64, i64 }, ptr %t141 store { ptr, i64, i64 } %t142, ptr %a143 store { ptr, i64, i64 } { ptr @.str.4399, i64 5, i64 0 }, ptr %a144 %t145 = call i32 @finch_str_eq(ptr %a143, ptr %a144) %t146 = icmp ne i32 %t145, 0 %t147 = insertvalue %S.gen.Leaf %t140, i1 %t146, 3 %t148 = load i64, ptr %t131 %t149 = add i64 %t148, 1 call void @finch_arr_reserve(ptr %a4, i64 %t149, i64 ptrtoint (ptr getelementptr (%S.gen.Leaf, ptr null, i32 1) to i64)) %t150 = load ptr, ptr %a4 %t151 = getelementptr inbounds %S.gen.Leaf, ptr %t150, i64 %t148 store %S.gen.Leaf %t147, ptr %t151 store i64 %t149, ptr %t131 br label %endif6684 endif6684: br label %endif6665 endif6665: %t152 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t152, ptr %a153 call void @finch.copy.arr_S_gen_Leaf(ptr %a154, ptr %a153) %t155 = load { ptr, i64, i64 }, ptr %a154 ret { ptr, i64, i64 } %t155 } define internal void @finch.copy.S_gen_Abi(ptr %dst, ptr %src) { entry: %t1 = load %S.gen.Abi, ptr %src store %S.gen.Abi %t1, ptr %dst %t2 = getelementptr inbounds %S.gen.Abi, ptr %dst, i32 0, i32 0 %t3 = getelementptr inbounds %S.gen.Abi, ptr %src, i32 0, i32 0 call void @finch_str_copy(ptr %t2, ptr %t3) %t4 = getelementptr inbounds %S.gen.Abi, ptr %dst, i32 0, i32 1 %t5 = getelementptr inbounds %S.gen.Abi, ptr %src, i32 0, i32 1 call void @finch.copy.arr_str(ptr %t4, ptr %t5) %t6 = getelementptr inbounds %S.gen.Abi, ptr %dst, i32 0, i32 2 %t7 = getelementptr inbounds %S.gen.Abi, ptr %src, i32 0, i32 2 call void @finch_str_copy(ptr %t6, ptr %t7) ret void } define internal %S.gen.Abi @finch.gen.classifyArm64(ptr %p0, %S.ast.Type %p1, %S.gen.Abi %p2, i64 %p3, i64 %p4) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Type, align 16 %a3 = alloca %S.gen.Abi, align 16 %a4 = alloca i64, align 16 %a5 = alloca i64, align 16 %a7 = alloca %S.gen.Abi, align 16 %a8 = alloca %S.gen.Abi, align 16 %a10 = alloca %S.gen.Abi, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca i1, align 16 %a23 = alloca i64, align 16 %a31 = alloca %S.gen.Leaf, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a85 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca i64, align 16 %a94 = alloca %S.gen.Leaf, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a110 = alloca { ptr, i64, i64 }, align 16 %a111 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 %a114 = alloca { ptr, i64, i64 }, align 16 %a115 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca { ptr, i64, i64 }, align 16 %a120 = alloca %S.gen.Abi, align 16 %a121 = alloca %S.gen.Abi, align 16 %a127 = alloca %S.gen.Abi, align 16 %a128 = alloca %S.gen.Abi, align 16 %a150 = alloca { ptr, i64, i64 }, align 16 %a152 = alloca { ptr, i64, i64 }, align 16 %a153 = alloca { ptr, i64, i64 }, align 16 %a154 = alloca { ptr, i64, i64 }, align 16 %a165 = alloca %S.gen.Abi, align 16 %a166 = alloca %S.gen.Abi, align 16 store ptr %p0, ptr %a1 store %S.ast.Type %p1, ptr %a2 store %S.gen.Abi %p2, ptr %a3 store i64 %p3, ptr %a4 store i64 %p4, ptr %a5 %t6 = load %S.gen.Abi, ptr %a3 store %S.gen.Abi %t6, ptr %a7 call void @finch.copy.S_gen_Abi(ptr %a8, ptr %a7) %t9 = load %S.gen.Abi, ptr %a8 store %S.gen.Abi %t9, ptr %a10 %t11 = load ptr, ptr %a1 %t12 = load %S.ast.Type, ptr %a2 %t13 = call { ptr, i64, i64 } @finch.gen.leavesOf(ptr %t11, %S.ast.Type %t12, i64 0) store { ptr, i64, i64 } %t13, ptr %a14 %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 %t16 = load i64, ptr %t15 %t17 = icmp sgt i64 %t16, 0 br label %logic.from6697 logic.from6697: br i1 %t17, label %logic.rhs6698, label %logic.end6699 logic.rhs6698: %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 %t19 = load i64, ptr %t18 %t20 = icmp sle i64 %t19, 4 br label %logic.rend6700 logic.rend6700: br label %logic.end6699 logic.end6699: %t21 = phi i1 [ false, %logic.from6697 ], [ %t20, %logic.rend6700 ] store i1 %t21, ptr %a22 store i64 0, ptr %a23 br label %each.cond6701 each.cond6701: %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 %t25 = load i64, ptr %t24 %t26 = load i64, ptr %a23 %t27 = icmp slt i64 %t26, %t25 br i1 %t27, label %each.body6702, label %each.end6704 each.body6702: %t28 = load ptr, ptr %a14 %t29 = getelementptr inbounds %S.gen.Leaf, ptr %t28, i64 %t26 %t30 = load %S.gen.Leaf, ptr %t29 store %S.gen.Leaf %t30, ptr %a31 %t32 = getelementptr inbounds %S.gen.Leaf, ptr %a31, i32 0, i32 2 %t33 = load i1, ptr %t32 %t34 = xor i1 %t33, true br label %logic.from6705 logic.from6705: br i1 %t34, label %logic.end6707, label %logic.rhs6706 logic.rhs6706: %t35 = getelementptr inbounds %S.gen.Leaf, ptr %a31, i32 0, i32 3 %t36 = load i1, ptr %t35 %t37 = load { ptr, i64, i64 }, ptr %a14 %t38 = extractvalue { ptr, i64, i64 } %t37, 1 %t39 = icmp uge i64 0, %t38 br i1 %t39, label %range6708, label %inrange6709 range6708: call void @finch_panic_index(ptr @.str.4400, i64 3763, i64 0, i64 %t38) unreachable inrange6709: %t40 = extractvalue { ptr, i64, i64 } %t37, 0 %t41 = getelementptr inbounds %S.gen.Leaf, ptr %t40, i64 0 %t42 = getelementptr inbounds %S.gen.Leaf, ptr %t41, i32 0, i32 3 %t43 = load i1, ptr %t42 %t44 = icmp ne i1 %t36, %t43 br label %logic.rend6710 logic.rend6710: br label %logic.end6707 logic.end6707: %t45 = phi i1 [ true, %logic.from6705 ], [ %t44, %logic.rend6710 ] br i1 %t45, label %then6711, label %endif6713 then6711: store i1 false, ptr %a22 br label %endif6713 endif6713: br label %each.step6703 each.step6703: %t46 = load i64, ptr %a23 %t47 = add i64 %t46, 1 store i64 %t47, ptr %a23 br label %each.cond6701 each.end6704: %t48 = load i1, ptr %a22 br i1 %t48, label %then6714, label %endif6716 then6714: store { ptr, i64, i64 } { ptr @.str.4401, i64 5, i64 0 }, ptr %a49 %t50 = load { ptr, i64, i64 }, ptr %a14 %t51 = extractvalue { ptr, i64, i64 } %t50, 1 %t52 = icmp uge i64 0, %t51 br i1 %t52, label %range6717, label %inrange6718 range6717: call void @finch_panic_index(ptr @.str.4402, i64 3769, i64 0, i64 %t51) unreachable inrange6718: %t53 = extractvalue { ptr, i64, i64 } %t50, 0 %t54 = getelementptr inbounds %S.gen.Leaf, ptr %t53, i64 0 %t55 = getelementptr inbounds %S.gen.Leaf, ptr %t54, i32 0, i32 3 %t56 = load i1, ptr %t55 br i1 %t56, label %then6719, label %endif6721 then6719: store { ptr, i64, i64 } { ptr @.str.4403, i64 6, i64 0 }, ptr %a49 br label %endif6721 endif6721: %t57 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 0 store { ptr, i64, i64 } { ptr @.str.4404, i64 6, i64 0 }, ptr %t57 %t58 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 1 %t59 = getelementptr inbounds { ptr, i64, i64 }, ptr %t58, i32 0, i32 1 %t60 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 %t61 = load i64, ptr %t60 call void @finch_str_from_int(ptr %a62, i64 %t61) %t63 = load { ptr, i64, i64 }, ptr %a62 store { ptr, i64, i64 } { ptr @.str.4405, i64 1, i64 0 }, ptr %a65 store { ptr, i64, i64 } %t63, ptr %a66 call void @finch_str_concat(ptr %a64, ptr %a65, ptr %a66) %t67 = load { ptr, i64, i64 }, ptr %a64 store { ptr, i64, i64 } %t67, ptr %a69 store { ptr, i64, i64 } { ptr @.str.4406, i64 3, i64 0 }, ptr %a70 call void @finch_str_concat(ptr %a68, ptr %a69, ptr %a70) %t71 = load { ptr, i64, i64 }, ptr %a68 %t72 = load { ptr, i64, i64 }, ptr %a49 store { ptr, i64, i64 } %t71, ptr %a74 store { ptr, i64, i64 } %t72, ptr %a75 call void @finch_str_concat(ptr %a73, ptr %a74, ptr %a75) %t76 = load { ptr, i64, i64 }, ptr %a73 store { ptr, i64, i64 } %t76, ptr %a78 store { ptr, i64, i64 } { ptr @.str.4407, i64 1, i64 0 }, ptr %a79 call void @finch_str_concat(ptr %a77, ptr %a78, ptr %a79) %t80 = load { ptr, i64, i64 }, ptr %a77 %t81 = load i64, ptr %t59 %t82 = add i64 %t81, 1 call void @finch_arr_reserve(ptr %t58, i64 %t82, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t83 = load ptr, ptr %t58 %t84 = getelementptr inbounds { ptr, i64, i64 }, ptr %t83, i64 %t81 store { ptr, i64, i64 } %t80, ptr %t84 store i64 %t82, ptr %t59 store { ptr, i64, i64 } zeroinitializer, ptr %a85 store i64 0, ptr %a86 br label %each.cond6722 each.cond6722: %t87 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 %t88 = load i64, ptr %t87 %t89 = load i64, ptr %a86 %t90 = icmp slt i64 %t89, %t88 br i1 %t90, label %each.body6723, label %each.end6725 each.body6723: %t91 = load ptr, ptr %a14 %t92 = getelementptr inbounds %S.gen.Leaf, ptr %t91, i64 %t89 %t93 = load %S.gen.Leaf, ptr %t92 store %S.gen.Leaf %t93, ptr %a94 %t95 = getelementptr inbounds { ptr, i64, i64 }, ptr %a85, i32 0, i32 1 %t96 = load { ptr, i64, i64 }, ptr %a49 store { ptr, i64, i64 } %t96, ptr %a97 call void @finch_str_copy(ptr %a98, ptr %a97) %t99 = load { ptr, i64, i64 }, ptr %a98 %t100 = load i64, ptr %t95 %t101 = add i64 %t100, 1 call void @finch_arr_reserve(ptr %a85, i64 %t101, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t102 = load ptr, ptr %a85 %t103 = getelementptr inbounds { ptr, i64, i64 }, ptr %t102, i64 %t100 store { ptr, i64, i64 } %t99, ptr %t103 store i64 %t101, ptr %t95 br label %each.step6724 each.step6724: %t104 = load i64, ptr %a86 %t105 = add i64 %t104, 1 store i64 %t105, ptr %a86 br label %each.cond6722 each.end6725: %t106 = getelementptr inbounds { ptr, i64, i64 }, ptr %a85, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.4409, i64 2, i64 0 }, ptr %a107 call void @finch_str_join(ptr %a108, ptr %a85, ptr %a107) %t109 = load { ptr, i64, i64 }, ptr %a108 store { ptr, i64, i64 } { ptr @.str.4408, i64 2, i64 0 }, ptr %a111 store { ptr, i64, i64 } %t109, ptr %a112 call void @finch_str_concat(ptr %a110, ptr %a111, ptr %a112) %t113 = load { ptr, i64, i64 }, ptr %a110 store { ptr, i64, i64 } %t113, ptr %a115 store { ptr, i64, i64 } { ptr @.str.4410, i64 2, i64 0 }, ptr %a116 call void @finch_str_concat(ptr %a114, ptr %a115, ptr %a116) %t117 = load { ptr, i64, i64 }, ptr %a114 %t118 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 2 store { ptr, i64, i64 } %t117, ptr %t118 %t119 = load %S.gen.Abi, ptr %a10 store %S.gen.Abi %t119, ptr %a120 call void @finch.copy.S_gen_Abi(ptr %a121, ptr %a120) %t122 = load %S.gen.Abi, ptr %a121 ret %S.gen.Abi %t122 endif6716: %t123 = load i64, ptr %a4 %t124 = icmp sgt i64 %t123, 16 br i1 %t124, label %then6726, label %endif6728 then6726: %t125 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 0 store { ptr, i64, i64 } { ptr @.str.4411, i64 8, i64 0 }, ptr %t125 %t126 = load %S.gen.Abi, ptr %a10 store %S.gen.Abi %t126, ptr %a127 call void @finch.copy.S_gen_Abi(ptr %a128, ptr %a127) %t129 = load %S.gen.Abi, ptr %a128 ret %S.gen.Abi %t129 endif6728: %t130 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 0 store { ptr, i64, i64 } { ptr @.str.4412, i64 6, i64 0 }, ptr %t130 %t131 = load i64, ptr %a5 %t132 = icmp sge i64 %t131, 16 br i1 %t132, label %then6729, label %else6730 then6729: %t133 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 1 %t134 = getelementptr inbounds { ptr, i64, i64 }, ptr %t133, i32 0, i32 1 %t135 = load i64, ptr %t134 %t136 = add i64 %t135, 1 call void @finch_arr_reserve(ptr %t133, i64 %t136, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t137 = load ptr, ptr %t133 %t138 = getelementptr inbounds { ptr, i64, i64 }, ptr %t137, i64 %t135 store { ptr, i64, i64 } { ptr @.str.4413, i64 4, i64 0 }, ptr %t138 store i64 %t136, ptr %t134 %t139 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 2 store { ptr, i64, i64 } { ptr @.str.4414, i64 4, i64 0 }, ptr %t139 br label %endif6731 else6730: %t140 = load i64, ptr %a4 %t141 = icmp sle i64 %t140, 8 br i1 %t141, label %then6732, label %else6733 then6732: %t142 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 1 %t143 = getelementptr inbounds { ptr, i64, i64 }, ptr %t142, i32 0, i32 1 %t144 = load i64, ptr %t143 %t145 = add i64 %t144, 1 call void @finch_arr_reserve(ptr %t142, i64 %t145, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t146 = load ptr, ptr %t142 %t147 = getelementptr inbounds { ptr, i64, i64 }, ptr %t146, i64 %t144 store { ptr, i64, i64 } { ptr @.str.4415, i64 3, i64 0 }, ptr %t147 store i64 %t145, ptr %t143 %t148 = load i64, ptr %a4 %t149 = mul i64 %t148, 8 call void @finch_str_from_int(ptr %a150, i64 %t149) %t151 = load { ptr, i64, i64 }, ptr %a150 store { ptr, i64, i64 } { ptr @.str.4416, i64 1, i64 0 }, ptr %a153 store { ptr, i64, i64 } %t151, ptr %a154 call void @finch_str_concat(ptr %a152, ptr %a153, ptr %a154) %t155 = load { ptr, i64, i64 }, ptr %a152 %t156 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 2 store { ptr, i64, i64 } %t155, ptr %t156 br label %endif6734 else6733: %t157 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 1 %t158 = getelementptr inbounds { ptr, i64, i64 }, ptr %t157, i32 0, i32 1 %t159 = load i64, ptr %t158 %t160 = add i64 %t159, 1 call void @finch_arr_reserve(ptr %t157, i64 %t160, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t161 = load ptr, ptr %t157 %t162 = getelementptr inbounds { ptr, i64, i64 }, ptr %t161, i64 %t159 store { ptr, i64, i64 } { ptr @.str.4417, i64 9, i64 0 }, ptr %t162 store i64 %t160, ptr %t158 %t163 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 2 store { ptr, i64, i64 } { ptr @.str.4418, i64 9, i64 0 }, ptr %t163 br label %endif6734 endif6734: br label %endif6731 endif6731: %t164 = load %S.gen.Abi, ptr %a10 store %S.gen.Abi %t164, ptr %a165 call void @finch.copy.S_gen_Abi(ptr %a166, ptr %a165) %t167 = load %S.gen.Abi, ptr %a166 ret %S.gen.Abi %t167 } define internal %S.gen.Abi @finch.gen.classify(ptr %p0, %S.ast.Type %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Type, align 16 %a4 = alloca %S.gen.Abi, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca %S.gen.Abi, align 16 %a13 = alloca %S.gen.Abi, align 16 %a30 = alloca %S.gen.StructDef, align 16 %a31 = alloca %S.gen.StructDef, align 16 %a33 = alloca %S.gen.StructDef, align 16 %a36 = alloca i64, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca %S.gen.Abi, align 16 %a101 = alloca %S.gen.Abi, align 16 %a110 = alloca %S.gen.Abi, align 16 %a111 = alloca %S.gen.Abi, align 16 %a116 = alloca { ptr, i64, i64 }, align 16 %a120 = alloca i64, align 16 %a128 = alloca { ptr, i64, i64 }, align 16 %a136 = alloca { ptr, i64, i64 }, align 16 %a137 = alloca i64, align 16 %a145 = alloca %S.gen.Leaf, align 16 %a148 = alloca i64, align 16 %a159 = alloca %S.gen.Abi, align 16 %a160 = alloca %S.gen.Abi, align 16 %a165 = alloca i64, align 16 %a202 = alloca i64, align 16 %a209 = alloca i64, align 16 %a251 = alloca { ptr, i64, i64 }, align 16 %a253 = alloca { ptr, i64, i64 }, align 16 %a254 = alloca { ptr, i64, i64 }, align 16 %a255 = alloca { ptr, i64, i64 }, align 16 %a275 = alloca { ptr, i64, i64 }, align 16 %a276 = alloca { ptr, i64, i64 }, align 16 %a280 = alloca { ptr, i64, i64 }, align 16 %a281 = alloca { ptr, i64, i64 }, align 16 %a283 = alloca { ptr, i64, i64 }, align 16 %a284 = alloca { ptr, i64, i64 }, align 16 %a285 = alloca { ptr, i64, i64 }, align 16 %a287 = alloca { ptr, i64, i64 }, align 16 %a288 = alloca { ptr, i64, i64 }, align 16 %a289 = alloca { ptr, i64, i64 }, align 16 %a293 = alloca %S.gen.Abi, align 16 %a294 = alloca %S.gen.Abi, align 16 store ptr %p0, ptr %a1 store %S.ast.Type %p1, ptr %a2 %t3 = insertvalue %S.gen.Abi zeroinitializer, { ptr, i64, i64 } { ptr @.str.4419, i64 6, i64 0 }, 0 store %S.gen.Abi %t3, ptr %a4 %t5 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t6 = load { ptr, i64, i64 }, ptr %t5 store { ptr, i64, i64 } %t6, ptr %a7 store { ptr, i64, i64 } { ptr @.str.4420, i64 6, i64 0 }, ptr %a8 %t9 = call i32 @finch_str_eq(ptr %a7, ptr %a8) %t10 = icmp eq i32 %t9, 0 br i1 %t10, label %then6735, label %endif6737 then6735: %t11 = load %S.gen.Abi, ptr %a4 store %S.gen.Abi %t11, ptr %a12 call void @finch.copy.S_gen_Abi(ptr %a13, ptr %a12) %t14 = load %S.gen.Abi, ptr %a13 ret %S.gen.Abi %t14 endif6737: %t15 = load ptr, ptr %a1 %t16 = icmp eq ptr %t15, null br i1 %t16, label %panic6738, label %ok6739 panic6738: call void @finch_panic(ptr @.str.4421, i64 3804, ptr @.str.4422) unreachable ok6739: %t17 = getelementptr inbounds %S.gen.Gen, ptr %t15, i32 0, i32 15 %t18 = load ptr, ptr %a1 %t19 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t20 = load { ptr, i64, i64 }, ptr %t19 %t21 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t22 = load { ptr, i64, i64 }, ptr %t21 %t23 = call i64 @finch.gen.findStruct(ptr %t18, { ptr, i64, i64 } %t20, { ptr, i64, i64 } %t22) %t24 = load { ptr, i64, i64 }, ptr %t17 %t25 = extractvalue { ptr, i64, i64 } %t24, 1 %t26 = icmp uge i64 %t23, %t25 br i1 %t26, label %range6740, label %inrange6741 range6740: call void @finch_panic_index(ptr @.str.4423, i64 3804, i64 %t23, i64 %t25) unreachable inrange6741: %t27 = extractvalue { ptr, i64, i64 } %t24, 0 %t28 = getelementptr inbounds %S.gen.StructDef, ptr %t27, i64 %t23 %t29 = load %S.gen.StructDef, ptr %t28 store %S.gen.StructDef %t29, ptr %a30 call void @finch.copy.S_gen_StructDef(ptr %a31, ptr %a30) %t32 = load %S.gen.StructDef, ptr %a31 store %S.gen.StructDef %t32, ptr %a33 %t34 = getelementptr inbounds %S.gen.StructDef, ptr %a33, i32 0, i32 9 %t35 = load i64, ptr %t34 store i64 %t35, ptr %a36 %t37 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 3 store i64 8, ptr %t37 %t38 = getelementptr inbounds %S.gen.StructDef, ptr %a33, i32 0, i32 10 %t39 = load i64, ptr %t38 %t40 = icmp sgt i64 %t39, 8 br i1 %t40, label %then6742, label %endif6744 then6742: %t41 = getelementptr inbounds %S.gen.StructDef, ptr %a33, i32 0, i32 10 %t42 = load i64, ptr %t41 %t43 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 3 store i64 %t42, ptr %t43 br label %endif6744 endif6744: %t44 = load ptr, ptr %a1 %t45 = icmp eq ptr %t44, null br i1 %t45, label %panic6745, label %ok6746 panic6745: call void @finch_panic(ptr @.str.4424, i64 3810, ptr @.str.4425) unreachable ok6746: %t46 = getelementptr inbounds %S.gen.Gen, ptr %t44, i32 0, i32 29 %t47 = getelementptr inbounds %S.platform.Target, ptr %t46, i32 0, i32 4 %t48 = load i1, ptr %t47 br i1 %t48, label %then6747, label %endif6749 then6747: %t49 = load ptr, ptr %a1 %t50 = load %S.ast.Type, ptr %a2 %t51 = load %S.gen.Abi, ptr %a4 %t52 = load i64, ptr %a36 %t53 = getelementptr inbounds %S.gen.StructDef, ptr %a33, i32 0, i32 10 %t54 = load i64, ptr %t53 %t55 = call %S.gen.Abi @finch.gen.classifyArm64(ptr %t49, %S.ast.Type %t50, %S.gen.Abi %t51, i64 %t52, i64 %t54) ret %S.gen.Abi %t55 endif6749: %t56 = load ptr, ptr %a1 %t57 = icmp eq ptr %t56, null br i1 %t57, label %panic6750, label %ok6751 panic6750: call void @finch_panic(ptr @.str.4426, i64 3813, ptr @.str.4427) unreachable ok6751: %t58 = getelementptr inbounds %S.gen.Gen, ptr %t56, i32 0, i32 29 %t59 = getelementptr inbounds %S.platform.Target, ptr %t58, i32 0, i32 1 %t60 = load i1, ptr %t59 br i1 %t60, label %then6752, label %endif6754 then6752: %t61 = load i64, ptr %a36 %t62 = icmp eq i64 %t61, 1 br label %logic.from6755 logic.from6755: br i1 %t62, label %logic.end6757, label %logic.rhs6756 logic.rhs6756: %t63 = load i64, ptr %a36 %t64 = icmp eq i64 %t63, 2 br label %logic.rend6758 logic.rend6758: br label %logic.end6757 logic.end6757: %t65 = phi i1 [ true, %logic.from6755 ], [ %t64, %logic.rend6758 ] br label %logic.from6759 logic.from6759: br i1 %t65, label %logic.end6761, label %logic.rhs6760 logic.rhs6760: %t66 = load i64, ptr %a36 %t67 = icmp eq i64 %t66, 4 br label %logic.rend6762 logic.rend6762: br label %logic.end6761 logic.end6761: %t68 = phi i1 [ true, %logic.from6759 ], [ %t67, %logic.rend6762 ] br label %logic.from6763 logic.from6763: br i1 %t68, label %logic.end6765, label %logic.rhs6764 logic.rhs6764: %t69 = load i64, ptr %a36 %t70 = icmp eq i64 %t69, 8 br label %logic.rend6766 logic.rend6766: br label %logic.end6765 logic.end6765: %t71 = phi i1 [ true, %logic.from6763 ], [ %t70, %logic.rend6766 ] br i1 %t71, label %then6767, label %else6768 then6767: %t72 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 0 store { ptr, i64, i64 } { ptr @.str.4428, i64 6, i64 0 }, ptr %t72 %t73 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 1 %t74 = getelementptr inbounds { ptr, i64, i64 }, ptr %t73, i32 0, i32 1 %t75 = load i64, ptr %a36 %t76 = mul i64 %t75, 8 call void @finch_str_from_int(ptr %a77, i64 %t76) %t78 = load { ptr, i64, i64 }, ptr %a77 store { ptr, i64, i64 } { ptr @.str.4429, i64 1, i64 0 }, ptr %a80 store { ptr, i64, i64 } %t78, ptr %a81 call void @finch_str_concat(ptr %a79, ptr %a80, ptr %a81) %t82 = load { ptr, i64, i64 }, ptr %a79 %t83 = load i64, ptr %t74 %t84 = add i64 %t83, 1 call void @finch_arr_reserve(ptr %t73, i64 %t84, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t85 = load ptr, ptr %t73 %t86 = getelementptr inbounds { ptr, i64, i64 }, ptr %t85, i64 %t83 store { ptr, i64, i64 } %t82, ptr %t86 store i64 %t84, ptr %t74 %t87 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 1 %t88 = load { ptr, i64, i64 }, ptr %t87 %t89 = extractvalue { ptr, i64, i64 } %t88, 1 %t90 = icmp uge i64 0, %t89 br i1 %t90, label %range6770, label %inrange6771 range6770: call void @finch_panic_index(ptr @.str.4430, i64 3819, i64 0, i64 %t89) unreachable inrange6771: %t91 = extractvalue { ptr, i64, i64 } %t88, 0 %t92 = getelementptr inbounds { ptr, i64, i64 }, ptr %t91, i64 0 %t93 = load { ptr, i64, i64 }, ptr %t92 %t94 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 2 store { ptr, i64, i64 } %t93, ptr %a95 call void @finch_str_copy(ptr %a96, ptr %a95) %t97 = load { ptr, i64, i64 }, ptr %a96 store { ptr, i64, i64 } %t97, ptr %t94 br label %endif6769 else6768: %t98 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 0 store { ptr, i64, i64 } { ptr @.str.4431, i64 8, i64 0 }, ptr %t98 br label %endif6769 endif6769: %t99 = load %S.gen.Abi, ptr %a4 store %S.gen.Abi %t99, ptr %a100 call void @finch.copy.S_gen_Abi(ptr %a101, ptr %a100) %t102 = load %S.gen.Abi, ptr %a101 ret %S.gen.Abi %t102 endif6754: %t103 = load i64, ptr %a36 %t104 = icmp sgt i64 %t103, 16 br label %logic.from6772 logic.from6772: br i1 %t104, label %logic.end6774, label %logic.rhs6773 logic.rhs6773: %t105 = load i64, ptr %a36 %t106 = icmp eq i64 %t105, 0 br label %logic.rend6775 logic.rend6775: br label %logic.end6774 logic.end6774: %t107 = phi i1 [ true, %logic.from6772 ], [ %t106, %logic.rend6775 ] br i1 %t107, label %then6776, label %endif6778 then6776: %t108 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 0 store { ptr, i64, i64 } { ptr @.str.4432, i64 6, i64 0 }, ptr %t108 %t109 = load %S.gen.Abi, ptr %a4 store %S.gen.Abi %t109, ptr %a110 call void @finch.copy.S_gen_Abi(ptr %a111, ptr %a110) %t112 = load %S.gen.Abi, ptr %a111 ret %S.gen.Abi %t112 endif6778: %t113 = load ptr, ptr %a1 %t114 = load %S.ast.Type, ptr %a2 %t115 = call { ptr, i64, i64 } @finch.gen.leavesOf(ptr %t113, %S.ast.Type %t114, i64 0) store { ptr, i64, i64 } %t115, ptr %a116 %t117 = load i64, ptr %a36 %t118 = add i64 %t117, 7 %t119 = sdiv i64 %t118, 8 store i64 %t119, ptr %a120 %t121 = mul i64 2, ptrtoint (ptr getelementptr (i64, ptr null, i32 1) to i64) %t122 = call ptr @finch_alloc(i64 %t121) %t123 = getelementptr inbounds i64, ptr %t122, i64 0 store i64 0, ptr %t123 %t124 = getelementptr inbounds i64, ptr %t122, i64 1 store i64 0, ptr %t124 %t125 = insertvalue { ptr, i64, i64 } undef, ptr %t122, 0 %t126 = insertvalue { ptr, i64, i64 } %t125, i64 2, 1 %t127 = insertvalue { ptr, i64, i64 } %t126, i64 2, 2 store { ptr, i64, i64 } %t127, ptr %a128 %t129 = mul i64 2, ptrtoint (ptr getelementptr (i1, ptr null, i32 1) to i64) %t130 = call ptr @finch_alloc(i64 %t129) %t131 = getelementptr inbounds i1, ptr %t130, i64 0 store i1 false, ptr %t131 %t132 = getelementptr inbounds i1, ptr %t130, i64 1 store i1 false, ptr %t132 %t133 = insertvalue { ptr, i64, i64 } undef, ptr %t130, 0 %t134 = insertvalue { ptr, i64, i64 } %t133, i64 2, 1 %t135 = insertvalue { ptr, i64, i64 } %t134, i64 2, 2 store { ptr, i64, i64 } %t135, ptr %a136 store i64 0, ptr %a137 br label %each.cond6779 each.cond6779: %t138 = getelementptr inbounds { ptr, i64, i64 }, ptr %a116, i32 0, i32 1 %t139 = load i64, ptr %t138 %t140 = load i64, ptr %a137 %t141 = icmp slt i64 %t140, %t139 br i1 %t141, label %each.body6780, label %each.end6782 each.body6780: %t142 = load ptr, ptr %a116 %t143 = getelementptr inbounds %S.gen.Leaf, ptr %t142, i64 %t140 %t144 = load %S.gen.Leaf, ptr %t143 store %S.gen.Leaf %t144, ptr %a145 %t146 = getelementptr inbounds %S.gen.Leaf, ptr %a145, i32 0, i32 1 %t147 = load i64, ptr %t146 store i64 %t147, ptr %a148 %t149 = load i64, ptr %a148 %t150 = icmp sgt i64 %t149, 8 br i1 %t150, label %then6783, label %endif6785 then6783: store i64 8, ptr %a148 br label %endif6785 endif6785: %t151 = getelementptr inbounds %S.gen.Leaf, ptr %a145, i32 0, i32 0 %t152 = load i64, ptr %t151 %t153 = load i64, ptr %a148 %t154 = icmp eq i64 %t153, 0 br i1 %t154, label %panic6786, label %ok6787 panic6786: call void @finch_panic(ptr @.str.4433, i64 3838, ptr @.str.4434) unreachable ok6787: %t155 = srem i64 %t152, %t153 %t156 = icmp ne i64 %t155, 0 br i1 %t156, label %then6788, label %endif6790 then6788: %t157 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 0 store { ptr, i64, i64 } { ptr @.str.4435, i64 6, i64 0 }, ptr %t157 %t158 = load %S.gen.Abi, ptr %a4 store %S.gen.Abi %t158, ptr %a159 call void @finch.copy.S_gen_Abi(ptr %a160, ptr %a159) %t161 = load %S.gen.Abi, ptr %a160 ret %S.gen.Abi %t161 endif6790: %t162 = getelementptr inbounds %S.gen.Leaf, ptr %a145, i32 0, i32 0 %t163 = load i64, ptr %t162 %t164 = sdiv i64 %t163, 8 store i64 %t164, ptr %a165 %t166 = load i64, ptr %a165 %t167 = load { ptr, i64, i64 }, ptr %a128 %t168 = extractvalue { ptr, i64, i64 } %t167, 1 %t169 = icmp uge i64 %t166, %t168 br i1 %t169, label %range6791, label %inrange6792 range6791: call void @finch_panic_index(ptr @.str.4436, i64 3843, i64 %t166, i64 %t168) unreachable inrange6792: %t170 = extractvalue { ptr, i64, i64 } %t167, 0 %t171 = getelementptr inbounds i64, ptr %t170, i64 %t166 %t172 = load i64, ptr %t171 %t173 = icmp eq i64 %t172, 1 br label %logic.from6793 logic.from6793: br i1 %t173, label %logic.end6795, label %logic.rhs6794 logic.rhs6794: %t174 = getelementptr inbounds %S.gen.Leaf, ptr %a145, i32 0, i32 2 %t175 = load i1, ptr %t174 %t176 = xor i1 %t175, true br label %logic.rend6796 logic.rend6796: br label %logic.end6795 logic.end6795: %t177 = phi i1 [ true, %logic.from6793 ], [ %t176, %logic.rend6796 ] br i1 %t177, label %then6797, label %else6798 then6797: %t178 = load i64, ptr %a165 %t179 = load { ptr, i64, i64 }, ptr %a128 %t180 = extractvalue { ptr, i64, i64 } %t179, 1 %t181 = icmp uge i64 %t178, %t180 br i1 %t181, label %range6800, label %inrange6801 range6800: call void @finch_panic_index(ptr @.str.4437, i64 3844, i64 %t178, i64 %t180) unreachable inrange6801: %t182 = extractvalue { ptr, i64, i64 } %t179, 0 %t183 = getelementptr inbounds i64, ptr %t182, i64 %t178 store i64 1, ptr %t183 br label %endif6799 else6798: %t184 = load i64, ptr %a165 %t185 = load { ptr, i64, i64 }, ptr %a128 %t186 = extractvalue { ptr, i64, i64 } %t185, 1 %t187 = icmp uge i64 %t184, %t186 br i1 %t187, label %range6802, label %inrange6803 range6802: call void @finch_panic_index(ptr @.str.4438, i64 3846, i64 %t184, i64 %t186) unreachable inrange6803: %t188 = extractvalue { ptr, i64, i64 } %t185, 0 %t189 = getelementptr inbounds i64, ptr %t188, i64 %t184 store i64 2, ptr %t189 br label %endif6799 endif6799: %t190 = getelementptr inbounds %S.gen.Leaf, ptr %a145, i32 0, i32 3 %t191 = load i1, ptr %t190 br i1 %t191, label %then6804, label %endif6806 then6804: %t192 = load i64, ptr %a165 %t193 = load { ptr, i64, i64 }, ptr %a136 %t194 = extractvalue { ptr, i64, i64 } %t193, 1 %t195 = icmp uge i64 %t192, %t194 br i1 %t195, label %range6807, label %inrange6808 range6807: call void @finch_panic_index(ptr @.str.4439, i64 3849, i64 %t192, i64 %t194) unreachable inrange6808: %t196 = extractvalue { ptr, i64, i64 } %t193, 0 %t197 = getelementptr inbounds i1, ptr %t196, i64 %t192 store i1 true, ptr %t197 br label %endif6806 endif6806: br label %each.step6781 each.step6781: %t198 = load i64, ptr %a137 %t199 = add i64 %t198, 1 store i64 %t199, ptr %a137 br label %each.cond6779 each.end6782: %t200 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 0 store { ptr, i64, i64 } { ptr @.str.4440, i64 6, i64 0 }, ptr %t200 %t201 = load i64, ptr %a120 store i64 0, ptr %a202 br label %for.cond6809 for.cond6809: %t203 = load i64, ptr %a202 %t204 = icmp slt i64 %t203, %t201 br i1 %t204, label %for.body6810, label %for.end6812 for.body6810: %t205 = load i64, ptr %a36 %t206 = load i64, ptr %a202 %t207 = mul i64 8, %t206 %t208 = sub i64 %t205, %t207 store i64 %t208, ptr %a209 %t210 = load i64, ptr %a209 %t211 = icmp sgt i64 %t210, 8 br i1 %t211, label %then6813, label %endif6815 then6813: store i64 8, ptr %a209 br label %endif6815 endif6815: %t212 = load i64, ptr %a202 %t213 = load { ptr, i64, i64 }, ptr %a128 %t214 = extractvalue { ptr, i64, i64 } %t213, 1 %t215 = icmp uge i64 %t212, %t214 br i1 %t215, label %range6816, label %inrange6817 range6816: call void @finch_panic_index(ptr @.str.4441, i64 3858, i64 %t212, i64 %t214) unreachable inrange6817: %t216 = extractvalue { ptr, i64, i64 } %t213, 0 %t217 = getelementptr inbounds i64, ptr %t216, i64 %t212 %t218 = load i64, ptr %t217 %t219 = icmp eq i64 %t218, 2 br i1 %t219, label %then6818, label %else6819 then6818: %t220 = load i64, ptr %a202 %t221 = load { ptr, i64, i64 }, ptr %a136 %t222 = extractvalue { ptr, i64, i64 } %t221, 1 %t223 = icmp uge i64 %t220, %t222 br i1 %t223, label %range6821, label %inrange6822 range6821: call void @finch_panic_index(ptr @.str.4442, i64 3859, i64 %t220, i64 %t222) unreachable inrange6822: %t224 = extractvalue { ptr, i64, i64 } %t221, 0 %t225 = getelementptr inbounds i1, ptr %t224, i64 %t220 %t226 = load i1, ptr %t225 br i1 %t226, label %then6823, label %else6824 then6823: %t227 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 1 %t228 = getelementptr inbounds { ptr, i64, i64 }, ptr %t227, i32 0, i32 1 %t229 = load i64, ptr %t228 %t230 = add i64 %t229, 1 call void @finch_arr_reserve(ptr %t227, i64 %t230, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t231 = load ptr, ptr %t227 %t232 = getelementptr inbounds { ptr, i64, i64 }, ptr %t231, i64 %t229 store { ptr, i64, i64 } { ptr @.str.4443, i64 6, i64 0 }, ptr %t232 store i64 %t230, ptr %t228 br label %endif6825 else6824: %t233 = load i64, ptr %a209 %t234 = icmp sgt i64 %t233, 4 br i1 %t234, label %then6826, label %else6827 then6826: %t235 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 1 %t236 = getelementptr inbounds { ptr, i64, i64 }, ptr %t235, i32 0, i32 1 %t237 = load i64, ptr %t236 %t238 = add i64 %t237, 1 call void @finch_arr_reserve(ptr %t235, i64 %t238, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t239 = load ptr, ptr %t235 %t240 = getelementptr inbounds { ptr, i64, i64 }, ptr %t239, i64 %t237 store { ptr, i64, i64 } { ptr @.str.4444, i64 11, i64 0 }, ptr %t240 store i64 %t238, ptr %t236 br label %endif6828 else6827: %t241 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 1 %t242 = getelementptr inbounds { ptr, i64, i64 }, ptr %t241, i32 0, i32 1 %t243 = load i64, ptr %t242 %t244 = add i64 %t243, 1 call void @finch_arr_reserve(ptr %t241, i64 %t244, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t245 = load ptr, ptr %t241 %t246 = getelementptr inbounds { ptr, i64, i64 }, ptr %t245, i64 %t243 store { ptr, i64, i64 } { ptr @.str.4445, i64 5, i64 0 }, ptr %t246 store i64 %t244, ptr %t242 br label %endif6828 endif6828: br label %endif6825 endif6825: br label %endif6820 else6819: %t247 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 1 %t248 = getelementptr inbounds { ptr, i64, i64 }, ptr %t247, i32 0, i32 1 %t249 = load i64, ptr %a209 %t250 = mul i64 %t249, 8 call void @finch_str_from_int(ptr %a251, i64 %t250) %t252 = load { ptr, i64, i64 }, ptr %a251 store { ptr, i64, i64 } { ptr @.str.4446, i64 1, i64 0 }, ptr %a254 store { ptr, i64, i64 } %t252, ptr %a255 call void @finch_str_concat(ptr %a253, ptr %a254, ptr %a255) %t256 = load { ptr, i64, i64 }, ptr %a253 %t257 = load i64, ptr %t248 %t258 = add i64 %t257, 1 call void @finch_arr_reserve(ptr %t247, i64 %t258, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t259 = load ptr, ptr %t247 %t260 = getelementptr inbounds { ptr, i64, i64 }, ptr %t259, i64 %t257 store { ptr, i64, i64 } %t256, ptr %t260 store i64 %t258, ptr %t248 br label %endif6820 endif6820: br label %for.step6811 for.step6811: %t261 = load i64, ptr %a202 %t262 = add i64 %t261, 1 store i64 %t262, ptr %a202 br label %for.cond6809 for.end6812: %t263 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 1 %t264 = getelementptr inbounds { ptr, i64, i64 }, ptr %t263, i32 0, i32 1 %t265 = load i64, ptr %t264 %t266 = icmp eq i64 %t265, 1 br i1 %t266, label %then6829, label %else6830 then6829: %t267 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 1 %t268 = load { ptr, i64, i64 }, ptr %t267 %t269 = extractvalue { ptr, i64, i64 } %t268, 1 %t270 = icmp uge i64 0, %t269 br i1 %t270, label %range6832, label %inrange6833 range6832: call void @finch_panic_index(ptr @.str.4447, i64 3871, i64 0, i64 %t269) unreachable inrange6833: %t271 = extractvalue { ptr, i64, i64 } %t268, 0 %t272 = getelementptr inbounds { ptr, i64, i64 }, ptr %t271, i64 0 %t273 = load { ptr, i64, i64 }, ptr %t272 %t274 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 2 store { ptr, i64, i64 } %t273, ptr %a275 call void @finch_str_copy(ptr %a276, ptr %a275) %t277 = load { ptr, i64, i64 }, ptr %a276 store { ptr, i64, i64 } %t277, ptr %t274 br label %endif6831 else6830: %t278 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 1 %t279 = getelementptr inbounds { ptr, i64, i64 }, ptr %t278, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.4449, i64 2, i64 0 }, ptr %a280 call void @finch_str_join(ptr %a281, ptr %t278, ptr %a280) %t282 = load { ptr, i64, i64 }, ptr %a281 store { ptr, i64, i64 } { ptr @.str.4448, i64 2, i64 0 }, ptr %a284 store { ptr, i64, i64 } %t282, ptr %a285 call void @finch_str_concat(ptr %a283, ptr %a284, ptr %a285) %t286 = load { ptr, i64, i64 }, ptr %a283 store { ptr, i64, i64 } %t286, ptr %a288 store { ptr, i64, i64 } { ptr @.str.4450, i64 2, i64 0 }, ptr %a289 call void @finch_str_concat(ptr %a287, ptr %a288, ptr %a289) %t290 = load { ptr, i64, i64 }, ptr %a287 %t291 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 2 store { ptr, i64, i64 } %t290, ptr %t291 br label %endif6831 endif6831: %t292 = load %S.gen.Abi, ptr %a4 store %S.gen.Abi %t292, ptr %a293 call void @finch.copy.S_gen_Abi(ptr %a294, ptr %a293) %t295 = load %S.gen.Abi, ptr %a294 ret %S.gen.Abi %t295 } define internal void @finch.copy.arr_S_gen_Abi(ptr %dst, ptr %src) { entry: %a5 = alloca i64, align 16 call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.gen.Abi, ptr null, i32 1) to i64)) %t1 = load ptr, ptr %dst %t2 = load ptr, ptr %src %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 %t4 = load i64, ptr %t3 store i64 0, ptr %a5 br label %n.cond6885 n.cond6885: %t6 = load i64, ptr %a5 %t7 = icmp slt i64 %t6, %t4 br i1 %t7, label %n.body6886, label %n.end6887 n.body6886: %t8 = getelementptr inbounds %S.gen.Abi, ptr %t1, i64 %t6 %t9 = getelementptr inbounds %S.gen.Abi, ptr %t2, i64 %t6 call void @finch.copy.S_gen_Abi(ptr %t8, ptr %t9) %t10 = load i64, ptr %a5 %t11 = add i64 %t10, 1 store i64 %t11, ptr %a5 br label %n.cond6885 n.end6887: ret void } define internal void @finch.copy.S_gen_Plan(ptr %dst, ptr %src) { entry: %t1 = load %S.gen.Plan, ptr %src store %S.gen.Plan %t1, ptr %dst %t2 = getelementptr inbounds %S.gen.Plan, ptr %dst, i32 0, i32 0 %t3 = getelementptr inbounds %S.gen.Plan, ptr %src, i32 0, i32 0 call void @finch.copy.S_gen_Abi(ptr %t2, ptr %t3) %t4 = getelementptr inbounds %S.gen.Plan, ptr %dst, i32 0, i32 1 %t5 = getelementptr inbounds %S.gen.Plan, ptr %src, i32 0, i32 1 call void @finch.copy.arr_S_gen_Abi(ptr %t4, ptr %t5) %t6 = getelementptr inbounds %S.gen.Plan, ptr %dst, i32 0, i32 2 %t7 = getelementptr inbounds %S.gen.Plan, ptr %src, i32 0, i32 2 call void @finch_str_copy(ptr %t6, ptr %t7) ret void } define internal %S.gen.Plan @finch.gen.makePlan(ptr %p0, %S.ast.Type %p1, { ptr, i64, i64 } %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Type, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca %S.gen.Plan, align 16 %a5 = alloca i64, align 16 %a6 = alloca i64, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca i64, align 16 %a64 = alloca %S.ast.Type, align 16 %a68 = alloca %S.gen.Abi, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca i64, align 16 %a76 = alloca i64, align 16 %a78 = alloca i64, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a127 = alloca { ptr, i64, i64 }, align 16 %a128 = alloca { ptr, i64, i64 }, align 16 %a140 = alloca %S.gen.Abi, align 16 %a141 = alloca %S.gen.Abi, align 16 %a150 = alloca %S.gen.Plan, align 16 %a151 = alloca %S.gen.Plan, align 16 store ptr %p0, ptr %a1 store %S.ast.Type %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 store %S.gen.Plan zeroinitializer, ptr %a4 store i64 6, ptr %a5 store i64 8, ptr %a6 %t7 = load ptr, ptr %a1 %t8 = load %S.ast.Type, ptr %a2 %t9 = call %S.gen.Abi @finch.gen.classify(ptr %t7, %S.ast.Type %t8) %t10 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 0 store %S.gen.Abi %t9, ptr %t10 %t11 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 2 store { ptr, i64, i64 } { ptr @.str.4451, i64 4, i64 0 }, ptr %t11 %t12 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t13 = load { ptr, i64, i64 }, ptr %t12 store { ptr, i64, i64 } %t13, ptr %a14 store { ptr, i64, i64 } { ptr @.str.4452, i64 4, i64 0 }, ptr %a15 %t16 = call i32 @finch_str_eq(ptr %a14, ptr %a15) %t17 = icmp eq i32 %t16, 0 br i1 %t17, label %then6834, label %endif6836 then6834: %t18 = load ptr, ptr %a1 %t19 = load %S.ast.Type, ptr %a2 %t20 = call { ptr, i64, i64 } @finch.gen.cLL(ptr %t18, %S.ast.Type %t19) %t21 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 2 store { ptr, i64, i64 } %t20, ptr %t21 br label %endif6836 endif6836: %t22 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 0 %t23 = getelementptr inbounds %S.gen.Abi, ptr %t22, i32 0, i32 0 %t24 = load { ptr, i64, i64 }, ptr %t23 store { ptr, i64, i64 } %t24, ptr %a25 store { ptr, i64, i64 } { ptr @.str.4453, i64 8, i64 0 }, ptr %a26 %t27 = call i32 @finch_str_eq(ptr %a25, ptr %a26) %t28 = icmp ne i32 %t27, 0 br i1 %t28, label %then6837, label %endif6839 then6837: %t29 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 0 %t30 = getelementptr inbounds %S.gen.Abi, ptr %t29, i32 0, i32 0 store { ptr, i64, i64 } { ptr @.str.4454, i64 6, i64 0 }, ptr %t30 br label %endif6839 endif6839: %t31 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 0 %t32 = getelementptr inbounds %S.gen.Abi, ptr %t31, i32 0, i32 0 %t33 = load { ptr, i64, i64 }, ptr %t32 store { ptr, i64, i64 } %t33, ptr %a34 store { ptr, i64, i64 } { ptr @.str.4455, i64 6, i64 0 }, ptr %a35 %t36 = call i32 @finch_str_eq(ptr %a34, ptr %a35) %t37 = icmp ne i32 %t36, 0 br i1 %t37, label %then6840, label %else6841 then6840: %t38 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 3 store i1 true, ptr %t38 %t39 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 2 store { ptr, i64, i64 } { ptr @.str.4456, i64 4, i64 0 }, ptr %t39 %t40 = load i64, ptr %a5 %t41 = sub i64 %t40, 1 store i64 %t41, ptr %a5 br label %endif6842 else6841: %t42 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 0 %t43 = getelementptr inbounds %S.gen.Abi, ptr %t42, i32 0, i32 0 %t44 = load { ptr, i64, i64 }, ptr %t43 store { ptr, i64, i64 } %t44, ptr %a45 store { ptr, i64, i64 } { ptr @.str.4457, i64 6, i64 0 }, ptr %a46 %t47 = call i32 @finch_str_eq(ptr %a45, ptr %a46) %t48 = icmp ne i32 %t47, 0 br i1 %t48, label %then6843, label %endif6845 then6843: %t49 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 0 %t50 = getelementptr inbounds %S.gen.Abi, ptr %t49, i32 0, i32 2 %t51 = load { ptr, i64, i64 }, ptr %t50 %t52 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 2 store { ptr, i64, i64 } %t51, ptr %a53 call void @finch_str_copy(ptr %a54, ptr %a53) %t55 = load { ptr, i64, i64 }, ptr %a54 store { ptr, i64, i64 } %t55, ptr %t52 br label %endif6845 endif6845: br label %endif6842 endif6842: store i64 0, ptr %a56 br label %each.cond6846 each.cond6846: %t57 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 %t58 = load i64, ptr %t57 %t59 = load i64, ptr %a56 %t60 = icmp slt i64 %t59, %t58 br i1 %t60, label %each.body6847, label %each.end6849 each.body6847: %t61 = load ptr, ptr %a3 %t62 = getelementptr inbounds %S.ast.Type, ptr %t61, i64 %t59 %t63 = load %S.ast.Type, ptr %t62 store %S.ast.Type %t63, ptr %a64 %t65 = load ptr, ptr %a1 %t66 = load %S.ast.Type, ptr %a64 %t67 = call %S.gen.Abi @finch.gen.classify(ptr %t65, %S.ast.Type %t66) store %S.gen.Abi %t67, ptr %a68 %t69 = getelementptr inbounds %S.gen.Abi, ptr %a68, i32 0, i32 0 %t70 = load { ptr, i64, i64 }, ptr %t69 store { ptr, i64, i64 } %t70, ptr %a71 store { ptr, i64, i64 } { ptr @.str.4458, i64 6, i64 0 }, ptr %a72 %t73 = call i32 @finch_str_eq(ptr %a71, ptr %a72) %t74 = icmp ne i32 %t73, 0 br i1 %t74, label %then6850, label %else6851 then6850: store i64 0, ptr %a75 store i64 0, ptr %a76 %t77 = getelementptr inbounds %S.gen.Abi, ptr %a68, i32 0, i32 1 store i64 0, ptr %a78 br label %each.cond6853 each.cond6853: %t79 = getelementptr inbounds { ptr, i64, i64 }, ptr %t77, i32 0, i32 1 %t80 = load i64, ptr %t79 %t81 = load i64, ptr %a78 %t82 = icmp slt i64 %t81, %t80 br i1 %t82, label %each.body6854, label %each.end6856 each.body6854: %t83 = load ptr, ptr %t77 %t84 = getelementptr inbounds { ptr, i64, i64 }, ptr %t83, i64 %t81 %t85 = load { ptr, i64, i64 }, ptr %t84 store { ptr, i64, i64 } %t85, ptr %a86 %t87 = load { ptr, i64, i64 }, ptr %a86 store { ptr, i64, i64 } %t87, ptr %a88 store { ptr, i64, i64 } { ptr @.str.4460, i64 1, i64 0 }, ptr %a90 %t91 = call i32 @finch_str_starts(ptr %a88, ptr %a90) %t92 = icmp ne i32 %t91, 0 br i1 %t92, label %then6857, label %else6858 then6857: %t93 = load i64, ptr %a75 %t94 = add i64 %t93, 1 store i64 %t94, ptr %a75 br label %endif6859 else6858: %t95 = load i64, ptr %a76 %t96 = add i64 %t95, 1 store i64 %t96, ptr %a76 br label %endif6859 endif6859: br label %each.step6855 each.step6855: %t97 = load i64, ptr %a78 %t98 = add i64 %t97, 1 store i64 %t98, ptr %a78 br label %each.cond6853 each.end6856: %t99 = load ptr, ptr %a1 %t100 = icmp eq ptr %t99, null br i1 %t100, label %panic6860, label %ok6861 panic6860: call void @finch_panic(ptr @.str.4461, i64 3911, ptr @.str.4462) unreachable ok6861: %t101 = getelementptr inbounds %S.gen.Gen, ptr %t99, i32 0, i32 29 %t102 = getelementptr inbounds %S.platform.Target, ptr %t101, i32 0, i32 1 %t103 = load i1, ptr %t102 br label %logic.from6862 logic.from6862: br i1 %t103, label %logic.end6864, label %logic.rhs6863 logic.rhs6863: %t104 = load ptr, ptr %a1 %t105 = icmp eq ptr %t104, null br i1 %t105, label %panic6865, label %ok6866 panic6865: call void @finch_panic(ptr @.str.4463, i64 3911, ptr @.str.4464) unreachable ok6866: %t106 = getelementptr inbounds %S.gen.Gen, ptr %t104, i32 0, i32 29 %t107 = getelementptr inbounds %S.platform.Target, ptr %t106, i32 0, i32 4 %t108 = load i1, ptr %t107 br label %logic.rend6867 logic.rend6867: br label %logic.end6864 logic.end6864: %t109 = phi i1 [ true, %logic.from6862 ], [ %t108, %logic.rend6867 ] br label %logic.from6868 logic.from6868: br i1 %t109, label %logic.end6870, label %logic.rhs6869 logic.rhs6869: %t110 = load i64, ptr %a75 %t111 = load i64, ptr %a5 %t112 = icmp sle i64 %t110, %t111 br label %logic.from6871 logic.from6871: br i1 %t112, label %logic.rhs6872, label %logic.end6873 logic.rhs6872: %t113 = load i64, ptr %a76 %t114 = load i64, ptr %a6 %t115 = icmp sle i64 %t113, %t114 br label %logic.rend6874 logic.rend6874: br label %logic.end6873 logic.end6873: %t116 = phi i1 [ false, %logic.from6871 ], [ %t115, %logic.rend6874 ] br label %logic.rend6875 logic.rend6875: br label %logic.end6870 logic.end6870: %t117 = phi i1 [ true, %logic.from6868 ], [ %t116, %logic.rend6875 ] br i1 %t117, label %then6876, label %else6877 then6876: %t118 = load i64, ptr %a75 %t119 = load i64, ptr %a5 %t120 = sub i64 %t119, %t118 store i64 %t120, ptr %a5 %t121 = load i64, ptr %a76 %t122 = load i64, ptr %a6 %t123 = sub i64 %t122, %t121 store i64 %t123, ptr %a6 br label %endif6878 else6877: %t124 = getelementptr inbounds %S.gen.Abi, ptr %a68, i32 0, i32 0 store { ptr, i64, i64 } { ptr @.str.4465, i64 6, i64 0 }, ptr %t124 br label %endif6878 endif6878: br label %endif6852 else6851: %t125 = getelementptr inbounds %S.gen.Abi, ptr %a68, i32 0, i32 0 %t126 = load { ptr, i64, i64 }, ptr %t125 store { ptr, i64, i64 } %t126, ptr %a127 store { ptr, i64, i64 } { ptr @.str.4466, i64 6, i64 0 }, ptr %a128 %t129 = call i32 @finch_str_eq(ptr %a127, ptr %a128) %t130 = icmp ne i32 %t129, 0 br i1 %t130, label %then6879, label %endif6881 then6879: %t131 = load %S.ast.Type, ptr %a64 %t132 = call i1 @finch.gen.isFloat(%S.ast.Type %t131) br i1 %t132, label %then6882, label %else6883 then6882: %t133 = load i64, ptr %a6 %t134 = sub i64 %t133, 1 store i64 %t134, ptr %a6 br label %endif6884 else6883: %t135 = load i64, ptr %a5 %t136 = sub i64 %t135, 1 store i64 %t136, ptr %a5 br label %endif6884 endif6884: br label %endif6881 endif6881: br label %endif6852 endif6852: %t137 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 1 %t138 = getelementptr inbounds { ptr, i64, i64 }, ptr %t137, i32 0, i32 1 %t139 = load %S.gen.Abi, ptr %a68 store %S.gen.Abi %t139, ptr %a140 call void @finch.copy.S_gen_Abi(ptr %a141, ptr %a140) %t142 = load %S.gen.Abi, ptr %a141 %t143 = load i64, ptr %t138 %t144 = add i64 %t143, 1 call void @finch_arr_reserve(ptr %t137, i64 %t144, i64 ptrtoint (ptr getelementptr (%S.gen.Abi, ptr null, i32 1) to i64)) %t145 = load ptr, ptr %t137 %t146 = getelementptr inbounds %S.gen.Abi, ptr %t145, i64 %t143 store %S.gen.Abi %t142, ptr %t146 store i64 %t144, ptr %t138 br label %each.step6848 each.step6848: %t147 = load i64, ptr %a56 %t148 = add i64 %t147, 1 store i64 %t148, ptr %a56 br label %each.cond6846 each.end6849: %t149 = load %S.gen.Plan, ptr %a4 store %S.gen.Plan %t149, ptr %a150 call void @finch.copy.S_gen_Plan(ptr %a151, ptr %a150) %t152 = load %S.gen.Plan, ptr %a151 ret %S.gen.Plan %t152 } define internal void @finch.gen.checkByValue(ptr %p0, %S.ast.Node %p1, { ptr, i64, i64 } %p2, %S.ast.Type %p3, { ptr, i64, i64 } %p4) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca %S.ast.Type, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca %S.gen.StructDef, align 16 %a28 = alloca %S.gen.StructDef, align 16 %a30 = alloca %S.gen.StructDef, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a85 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca { ptr, i64, i64 }, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca { ptr, i64, i64 }, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 store %S.ast.Type %p3, ptr %a4 store { ptr, i64, i64 } %p4, ptr %a5 %t6 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 0 %t7 = load { ptr, i64, i64 }, ptr %t6 store { ptr, i64, i64 } %t7, ptr %a8 store { ptr, i64, i64 } { ptr @.str.4467, i64 6, i64 0 }, ptr %a9 %t10 = call i32 @finch_str_eq(ptr %a8, ptr %a9) %t11 = icmp eq i32 %t10, 0 br i1 %t11, label %then6888, label %endif6890 then6888: ret void endif6890: %t12 = load ptr, ptr %a1 %t13 = icmp eq ptr %t12, null br i1 %t13, label %panic6891, label %ok6892 panic6891: call void @finch_panic(ptr @.str.4468, i64 3933, ptr @.str.4469) unreachable ok6892: %t14 = getelementptr inbounds %S.gen.Gen, ptr %t12, i32 0, i32 15 %t15 = load ptr, ptr %a1 %t16 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 3 %t17 = load { ptr, i64, i64 }, ptr %t16 %t18 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 2 %t19 = load { ptr, i64, i64 }, ptr %t18 %t20 = call i64 @finch.gen.findStruct(ptr %t15, { ptr, i64, i64 } %t17, { ptr, i64, i64 } %t19) %t21 = load { ptr, i64, i64 }, ptr %t14 %t22 = extractvalue { ptr, i64, i64 } %t21, 1 %t23 = icmp uge i64 %t20, %t22 br i1 %t23, label %range6893, label %inrange6894 range6893: call void @finch_panic_index(ptr @.str.4470, i64 3933, i64 %t20, i64 %t22) unreachable inrange6894: %t24 = extractvalue { ptr, i64, i64 } %t21, 0 %t25 = getelementptr inbounds %S.gen.StructDef, ptr %t24, i64 %t20 %t26 = load %S.gen.StructDef, ptr %t25 store %S.gen.StructDef %t26, ptr %a27 call void @finch.copy.S_gen_StructDef(ptr %a28, ptr %a27) %t29 = load %S.gen.StructDef, ptr %a28 store %S.gen.StructDef %t29, ptr %a30 %t31 = getelementptr inbounds %S.gen.StructDef, ptr %a30, i32 0, i32 2 %t32 = load i1, ptr %t31 %t33 = xor i1 %t32, true br i1 %t33, label %then6895, label %endif6897 then6895: %t34 = load ptr, ptr %a1 %t35 = load %S.ast.Node, ptr %a2 %t36 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } { ptr @.str.4471, i64 16, i64 0 }, ptr %a38 store { ptr, i64, i64 } %t36, ptr %a39 call void @finch_str_concat(ptr %a37, ptr %a38, ptr %a39) %t40 = load { ptr, i64, i64 }, ptr %a37 store { ptr, i64, i64 } %t40, ptr %a42 store { ptr, i64, i64 } { ptr @.str.4472, i64 2, i64 0 }, ptr %a43 call void @finch_str_concat(ptr %a41, ptr %a42, ptr %a43) %t44 = load { ptr, i64, i64 }, ptr %a41 %t45 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } %t44, ptr %a47 store { ptr, i64, i64 } %t45, ptr %a48 call void @finch_str_concat(ptr %a46, ptr %a47, ptr %a48) %t49 = load { ptr, i64, i64 }, ptr %a46 store { ptr, i64, i64 } %t49, ptr %a51 store { ptr, i64, i64 } { ptr @.str.4473, i64 18, i64 0 }, ptr %a52 call void @finch_str_concat(ptr %a50, ptr %a51, ptr %a52) %t53 = load { ptr, i64, i64 }, ptr %a50 %t54 = load %S.ast.Type, ptr %a4 %t55 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t54) store { ptr, i64, i64 } %t53, ptr %a57 store { ptr, i64, i64 } %t55, ptr %a58 call void @finch_str_concat(ptr %a56, ptr %a57, ptr %a58) %t59 = load { ptr, i64, i64 }, ptr %a56 store { ptr, i64, i64 } %t59, ptr %a61 store { ptr, i64, i64 } { ptr @.str.4474, i64 20, i64 0 }, ptr %a62 call void @finch_str_concat(ptr %a60, ptr %a61, ptr %a62) %t63 = load { ptr, i64, i64 }, ptr %a60 call void @finch.gen.fail(ptr %t34, %S.ast.Node %t35, { ptr, i64, i64 } %t63) br label %endif6897 endif6897: %t64 = getelementptr inbounds %S.gen.StructDef, ptr %a30, i32 0, i32 8 %t65 = getelementptr inbounds { ptr, i64, i64 }, ptr %t64, i32 0, i32 1 %t66 = load i64, ptr %t65 %t67 = icmp sgt i64 %t66, 0 br i1 %t67, label %then6898, label %endif6900 then6898: %t68 = load ptr, ptr %a1 %t69 = load %S.ast.Node, ptr %a2 %t70 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } { ptr @.str.4475, i64 16, i64 0 }, ptr %a72 store { ptr, i64, i64 } %t70, ptr %a73 call void @finch_str_concat(ptr %a71, ptr %a72, ptr %a73) %t74 = load { ptr, i64, i64 }, ptr %a71 store { ptr, i64, i64 } %t74, ptr %a76 store { ptr, i64, i64 } { ptr @.str.4476, i64 2, i64 0 }, ptr %a77 call void @finch_str_concat(ptr %a75, ptr %a76, ptr %a77) %t78 = load { ptr, i64, i64 }, ptr %a75 %t79 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } %t78, ptr %a81 store { ptr, i64, i64 } %t79, ptr %a82 call void @finch_str_concat(ptr %a80, ptr %a81, ptr %a82) %t83 = load { ptr, i64, i64 }, ptr %a80 store { ptr, i64, i64 } %t83, ptr %a85 store { ptr, i64, i64 } { ptr @.str.4477, i64 12, i64 0 }, ptr %a86 call void @finch_str_concat(ptr %a84, ptr %a85, ptr %a86) %t87 = load { ptr, i64, i64 }, ptr %a84 %t88 = load %S.ast.Type, ptr %a4 %t89 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t88) store { ptr, i64, i64 } %t87, ptr %a91 store { ptr, i64, i64 } %t89, ptr %a92 call void @finch_str_concat(ptr %a90, ptr %a91, ptr %a92) %t93 = load { ptr, i64, i64 }, ptr %a90 store { ptr, i64, i64 } %t93, ptr %a95 store { ptr, i64, i64 } { ptr @.str.4478, i64 40, i64 0 }, ptr %a96 call void @finch_str_concat(ptr %a94, ptr %a95, ptr %a96) %t97 = load { ptr, i64, i64 }, ptr %a94 %t98 = getelementptr inbounds %S.gen.StructDef, ptr %a30, i32 0, i32 8 %t99 = load { ptr, i64, i64 }, ptr %t98 store { ptr, i64, i64 } %t97, ptr %a101 store { ptr, i64, i64 } %t99, ptr %a102 call void @finch_str_concat(ptr %a100, ptr %a101, ptr %a102) %t103 = load { ptr, i64, i64 }, ptr %a100 call void @finch.gen.fail(ptr %t68, %S.ast.Node %t69, { ptr, i64, i64 } %t103) br label %endif6900 endif6900: ret void } define internal i1 @finch.gen.cPlain(%S.ast.Type %p0) { entry: %a1 = alloca %S.ast.Type, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 store %S.ast.Type %p0, ptr %a1 %t2 = load %S.ast.Type, ptr %a1 %t3 = call i1 @finch.gen.isNumber(%S.ast.Type %t2) br label %logic.from6901 logic.from6901: br i1 %t3, label %logic.end6903, label %logic.rhs6902 logic.rhs6902: %t4 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t5 = load { ptr, i64, i64 }, ptr %t4 store { ptr, i64, i64 } %t5, ptr %a6 store { ptr, i64, i64 } { ptr @.str.4479, i64 4, i64 0 }, ptr %a7 %t8 = call i32 @finch_str_eq(ptr %a6, ptr %a7) %t9 = icmp ne i32 %t8, 0 br label %logic.rend6904 logic.rend6904: br label %logic.end6903 logic.end6903: %t10 = phi i1 [ true, %logic.from6901 ], [ %t9, %logic.rend6904 ] br label %logic.from6905 logic.from6905: br i1 %t10, label %logic.end6907, label %logic.rhs6906 logic.rhs6906: %t11 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t12 = load { ptr, i64, i64 }, ptr %t11 store { ptr, i64, i64 } %t12, ptr %a13 store { ptr, i64, i64 } { ptr @.str.4480, i64 4, i64 0 }, ptr %a14 %t15 = call i32 @finch_str_eq(ptr %a13, ptr %a14) %t16 = icmp ne i32 %t15, 0 br label %logic.rend6908 logic.rend6908: br label %logic.end6907 logic.end6907: %t17 = phi i1 [ true, %logic.from6905 ], [ %t16, %logic.rend6908 ] br label %logic.from6909 logic.from6909: br i1 %t17, label %logic.end6911, label %logic.rhs6910 logic.rhs6910: %t18 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t19 = load { ptr, i64, i64 }, ptr %t18 store { ptr, i64, i64 } %t19, ptr %a20 store { ptr, i64, i64 } { ptr @.str.4481, i64 3, i64 0 }, ptr %a21 %t22 = call i32 @finch_str_eq(ptr %a20, ptr %a21) %t23 = icmp ne i32 %t22, 0 br label %logic.rend6912 logic.rend6912: br label %logic.end6911 logic.end6911: %t24 = phi i1 [ true, %logic.from6909 ], [ %t23, %logic.rend6912 ] ret i1 %t24 } define internal void @finch.gen.checkExport(ptr %p0, %S.ast.Node %p1, %S.gen.FnSig %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a3 = alloca %S.gen.FnSig, align 16 %a23 = alloca i64, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a85 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca i64, align 16 %a100 = alloca %S.gen.FnSig, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca { ptr, i64, i64 }, align 16 %a117 = alloca { ptr, i64, i64 }, align 16 %a118 = alloca { ptr, i64, i64 }, align 16 %a120 = alloca { ptr, i64, i64 }, align 16 %a121 = alloca { ptr, i64, i64 }, align 16 %a122 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 store %S.gen.FnSig %p2, ptr %a3 %t4 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 2 %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i32 0, i32 1 %t6 = load i64, ptr %t5 %t7 = icmp sgt i64 %t6, 0 br i1 %t7, label %then6913, label %endif6915 then6913: %t8 = load ptr, ptr %a1 %t9 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t8, %S.ast.Node %t9, { ptr, i64, i64 } { ptr @.str.4482, i64 59, i64 0 }) br label %endif6915 endif6915: %t10 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 7 %t11 = load i1, ptr %t10 br i1 %t11, label %then6916, label %endif6918 then6916: %t12 = load ptr, ptr %a1 %t13 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t12, %S.ast.Node %t13, { ptr, i64, i64 } { ptr @.str.4483, i64 74, i64 0 }) br label %endif6918 endif6918: %t14 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 3 %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t14, i32 0, i32 1 %t16 = load i64, ptr %t15 %t17 = icmp sgt i64 %t16, 0 br i1 %t17, label %then6919, label %endif6921 then6919: %t18 = load ptr, ptr %a1 %t19 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t18, %S.ast.Node %t19, { ptr, i64, i64 } { ptr @.str.4484, i64 29, i64 0 }) br label %endif6921 endif6921: %t20 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 13 %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i32 0, i32 1 %t22 = load i64, ptr %t21 store i64 0, ptr %a23 br label %for.cond6922 for.cond6922: %t24 = load i64, ptr %a23 %t25 = icmp slt i64 %t24, %t22 br i1 %t25, label %for.body6923, label %for.end6925 for.body6923: %t26 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 13 %t27 = load i64, ptr %a23 %t28 = load { ptr, i64, i64 }, ptr %t26 %t29 = extractvalue { ptr, i64, i64 } %t28, 1 %t30 = icmp uge i64 %t27, %t29 br i1 %t30, label %range6926, label %inrange6927 range6926: call void @finch_panic_index(ptr @.str.4485, i64 3958, i64 %t27, i64 %t29) unreachable inrange6927: %t31 = extractvalue { ptr, i64, i64 } %t28, 0 %t32 = getelementptr inbounds %S.ast.Type, ptr %t31, i64 %t27 %t33 = load %S.ast.Type, ptr %t32 %t34 = call i1 @finch.gen.cPlain(%S.ast.Type %t33) %t35 = xor i1 %t34, true br i1 %t35, label %then6928, label %endif6930 then6928: %t36 = load ptr, ptr %a1 %t37 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t38 = load i64, ptr %a23 %t39 = load { ptr, i64, i64 }, ptr %t37 %t40 = extractvalue { ptr, i64, i64 } %t39, 1 %t41 = icmp uge i64 %t38, %t40 br i1 %t41, label %range6931, label %inrange6932 range6931: call void @finch_panic_index(ptr @.str.4486, i64 3959, i64 %t38, i64 %t40) unreachable inrange6932: %t42 = extractvalue { ptr, i64, i64 } %t39, 0 %t43 = getelementptr inbounds %S.ast.Node, ptr %t42, i64 %t38 %t44 = load %S.ast.Node, ptr %t43 %t45 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 13 %t46 = load i64, ptr %a23 %t47 = load { ptr, i64, i64 }, ptr %t45 %t48 = extractvalue { ptr, i64, i64 } %t47, 1 %t49 = icmp uge i64 %t46, %t48 br i1 %t49, label %range6933, label %inrange6934 range6933: call void @finch_panic_index(ptr @.str.4488, i64 3959, i64 %t46, i64 %t48) unreachable inrange6934: %t50 = extractvalue { ptr, i64, i64 } %t47, 0 %t51 = getelementptr inbounds %S.ast.Type, ptr %t50, i64 %t46 %t52 = load %S.ast.Type, ptr %t51 %t53 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t52) store { ptr, i64, i64 } { ptr @.str.4487, i64 66, i64 0 }, ptr %a55 store { ptr, i64, i64 } %t53, ptr %a56 call void @finch_str_concat(ptr %a54, ptr %a55, ptr %a56) %t57 = load { ptr, i64, i64 }, ptr %a54 store { ptr, i64, i64 } %t57, ptr %a59 store { ptr, i64, i64 } { ptr @.str.4489, i64 50, i64 0 }, ptr %a60 call void @finch_str_concat(ptr %a58, ptr %a59, ptr %a60) %t61 = load { ptr, i64, i64 }, ptr %a58 call void @finch.gen.fail(ptr %t36, %S.ast.Node %t44, { ptr, i64, i64 } %t61) br label %endif6930 endif6930: br label %for.step6924 for.step6924: %t62 = load i64, ptr %a23 %t63 = add i64 %t62, 1 store i64 %t63, ptr %a23 br label %for.cond6922 for.end6925: %t64 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 12 %t65 = getelementptr inbounds %S.ast.Type, ptr %t64, i32 0, i32 0 %t66 = load { ptr, i64, i64 }, ptr %t65 store { ptr, i64, i64 } %t66, ptr %a67 store { ptr, i64, i64 } { ptr @.str.4490, i64 4, i64 0 }, ptr %a68 %t69 = call i32 @finch_str_eq(ptr %a67, ptr %a68) %t70 = icmp eq i32 %t69, 0 br label %logic.from6935 logic.from6935: br i1 %t70, label %logic.rhs6936, label %logic.end6937 logic.rhs6936: %t71 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 12 %t72 = load %S.ast.Type, ptr %t71 %t73 = call i1 @finch.gen.cPlain(%S.ast.Type %t72) %t74 = xor i1 %t73, true br label %logic.rend6938 logic.rend6938: br label %logic.end6937 logic.end6937: %t75 = phi i1 [ false, %logic.from6935 ], [ %t74, %logic.rend6938 ] br i1 %t75, label %then6939, label %endif6941 then6939: %t76 = load ptr, ptr %a1 %t77 = load %S.ast.Node, ptr %a2 %t78 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 12 %t79 = load %S.ast.Type, ptr %t78 %t80 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t79) store { ptr, i64, i64 } { ptr @.str.4491, i64 69, i64 0 }, ptr %a82 store { ptr, i64, i64 } %t80, ptr %a83 call void @finch_str_concat(ptr %a81, ptr %a82, ptr %a83) %t84 = load { ptr, i64, i64 }, ptr %a81 store { ptr, i64, i64 } %t84, ptr %a86 store { ptr, i64, i64 } { ptr @.str.4492, i64 1, i64 0 }, ptr %a87 call void @finch_str_concat(ptr %a85, ptr %a86, ptr %a87) %t88 = load { ptr, i64, i64 }, ptr %a85 call void @finch.gen.fail(ptr %t76, %S.ast.Node %t77, { ptr, i64, i64 } %t88) br label %endif6941 endif6941: %t89 = load ptr, ptr %a1 %t90 = icmp eq ptr %t89, null br i1 %t90, label %panic6942, label %ok6943 panic6942: call void @finch_panic(ptr @.str.4493, i64 3965, ptr @.str.4494) unreachable ok6943: %t91 = getelementptr inbounds %S.gen.Gen, ptr %t89, i32 0, i32 14 store i64 0, ptr %a92 br label %each.cond6944 each.cond6944: %t93 = getelementptr inbounds { ptr, i64, i64 }, ptr %t91, i32 0, i32 1 %t94 = load i64, ptr %t93 %t95 = load i64, ptr %a92 %t96 = icmp slt i64 %t95, %t94 br i1 %t96, label %each.body6945, label %each.end6947 each.body6945: %t97 = load ptr, ptr %t91 %t98 = getelementptr inbounds %S.gen.FnSig, ptr %t97, i64 %t95 %t99 = load %S.gen.FnSig, ptr %t98 store %S.gen.FnSig %t99, ptr %a100 %t101 = getelementptr inbounds %S.gen.FnSig, ptr %a100, i32 0, i32 5 %t102 = load i1, ptr %t101 br label %logic.from6948 logic.from6948: br i1 %t102, label %logic.rhs6949, label %logic.end6950 logic.rhs6949: %t103 = getelementptr inbounds %S.gen.FnSig, ptr %a100, i32 0, i32 1 %t104 = load { ptr, i64, i64 }, ptr %t103 %t105 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 1 %t106 = load { ptr, i64, i64 }, ptr %t105 store { ptr, i64, i64 } %t104, ptr %a107 store { ptr, i64, i64 } %t106, ptr %a108 %t109 = call i32 @finch_str_eq(ptr %a107, ptr %a108) %t110 = icmp ne i32 %t109, 0 br label %logic.rend6951 logic.rend6951: br label %logic.end6950 logic.end6950: %t111 = phi i1 [ false, %logic.from6948 ], [ %t110, %logic.rend6951 ] br i1 %t111, label %then6952, label %endif6954 then6952: %t112 = load ptr, ptr %a1 %t113 = load %S.ast.Node, ptr %a2 %t114 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 1 %t115 = load { ptr, i64, i64 }, ptr %t114 store { ptr, i64, i64 } { ptr @.str.4495, i64 1, i64 0 }, ptr %a117 store { ptr, i64, i64 } %t115, ptr %a118 call void @finch_str_concat(ptr %a116, ptr %a117, ptr %a118) %t119 = load { ptr, i64, i64 }, ptr %a116 store { ptr, i64, i64 } %t119, ptr %a121 store { ptr, i64, i64 } { ptr @.str.4496, i64 38, i64 0 }, ptr %a122 call void @finch_str_concat(ptr %a120, ptr %a121, ptr %a122) %t123 = load { ptr, i64, i64 }, ptr %a120 call void @finch.gen.fail(ptr %t112, %S.ast.Node %t113, { ptr, i64, i64 } %t123) br label %endif6954 endif6954: br label %each.step6946 each.step6946: %t124 = load i64, ptr %a92 %t125 = add i64 %t124, 1 store i64 %t125, ptr %a92 br label %each.cond6944 each.end6947: ret void } define internal { ptr, i64, i64 } @finch.gen.exportWrapper(ptr %p0, %S.gen.FnSig %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.gen.FnSig, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca %S.gen.Saved, align 16 %a11 = alloca i64, align 16 %a22 = alloca %S.ast.Type, align 16 %a23 = alloca %S.ast.Type, align 16 %a25 = alloca %S.ast.Type, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a85 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca { ptr, i64, i64 }, align 16 %a104 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 %a117 = alloca { ptr, i64, i64 }, align 16 %a118 = alloca { ptr, i64, i64 }, align 16 %a119 = alloca { ptr, i64, i64 }, align 16 %a121 = alloca { ptr, i64, i64 }, align 16 %a122 = alloca { ptr, i64, i64 }, align 16 %a123 = alloca { ptr, i64, i64 }, align 16 %a127 = alloca { ptr, i64, i64 }, align 16 %a128 = alloca { ptr, i64, i64 }, align 16 %a129 = alloca { ptr, i64, i64 }, align 16 %a131 = alloca { ptr, i64, i64 }, align 16 %a132 = alloca { ptr, i64, i64 }, align 16 %a133 = alloca { ptr, i64, i64 }, align 16 %a136 = alloca { ptr, i64, i64 }, align 16 %a137 = alloca { ptr, i64, i64 }, align 16 %a139 = alloca { ptr, i64, i64 }, align 16 %a140 = alloca { ptr, i64, i64 }, align 16 %a141 = alloca { ptr, i64, i64 }, align 16 %a143 = alloca { ptr, i64, i64 }, align 16 %a144 = alloca { ptr, i64, i64 }, align 16 %a145 = alloca { ptr, i64, i64 }, align 16 %a147 = alloca { ptr, i64, i64 }, align 16 %a148 = alloca { ptr, i64, i64 }, align 16 %a149 = alloca { ptr, i64, i64 }, align 16 %a153 = alloca { ptr, i64, i64 }, align 16 %a154 = alloca { ptr, i64, i64 }, align 16 %a163 = alloca { ptr, i64, i64 }, align 16 %a164 = alloca { ptr, i64, i64 }, align 16 %a172 = alloca { ptr, i64, i64 }, align 16 %a173 = alloca { ptr, i64, i64 }, align 16 %a174 = alloca { ptr, i64, i64 }, align 16 %a176 = alloca { ptr, i64, i64 }, align 16 %a177 = alloca { ptr, i64, i64 }, align 16 %a178 = alloca { ptr, i64, i64 }, align 16 %a181 = alloca { ptr, i64, i64 }, align 16 %a182 = alloca { ptr, i64, i64 }, align 16 %a183 = alloca { ptr, i64, i64 }, align 16 %a195 = alloca { ptr, i64, i64 }, align 16 %a196 = alloca { ptr, i64, i64 }, align 16 %a197 = alloca { ptr, i64, i64 }, align 16 %a199 = alloca { ptr, i64, i64 }, align 16 %a200 = alloca { ptr, i64, i64 }, align 16 %a201 = alloca { ptr, i64, i64 }, align 16 %a206 = alloca { ptr, i64, i64 }, align 16 %a207 = alloca { ptr, i64, i64 }, align 16 %a208 = alloca { ptr, i64, i64 }, align 16 %a210 = alloca { ptr, i64, i64 }, align 16 %a219 = alloca { ptr, i64, i64 }, align 16 %a220 = alloca { ptr, i64, i64 }, align 16 %a221 = alloca { ptr, i64, i64 }, align 16 %a224 = alloca { ptr, i64, i64 }, align 16 %a225 = alloca { ptr, i64, i64 }, align 16 %a226 = alloca { ptr, i64, i64 }, align 16 %a228 = alloca { ptr, i64, i64 }, align 16 %a229 = alloca { ptr, i64, i64 }, align 16 %a230 = alloca { ptr, i64, i64 }, align 16 %a233 = alloca { ptr, i64, i64 }, align 16 %a234 = alloca { ptr, i64, i64 }, align 16 %a235 = alloca { ptr, i64, i64 }, align 16 %a237 = alloca { ptr, i64, i64 }, align 16 %a238 = alloca { ptr, i64, i64 }, align 16 %a239 = alloca { ptr, i64, i64 }, align 16 %a243 = alloca { ptr, i64, i64 }, align 16 %a244 = alloca { ptr, i64, i64 }, align 16 %a245 = alloca { ptr, i64, i64 }, align 16 %a247 = alloca { ptr, i64, i64 }, align 16 %a248 = alloca { ptr, i64, i64 }, align 16 %a249 = alloca { ptr, i64, i64 }, align 16 %a252 = alloca { ptr, i64, i64 }, align 16 %a253 = alloca { ptr, i64, i64 }, align 16 %a255 = alloca { ptr, i64, i64 }, align 16 %a256 = alloca { ptr, i64, i64 }, align 16 %a257 = alloca { ptr, i64, i64 }, align 16 %a259 = alloca { ptr, i64, i64 }, align 16 %a260 = alloca { ptr, i64, i64 }, align 16 %a261 = alloca { ptr, i64, i64 }, align 16 %a265 = alloca { ptr, i64, i64 }, align 16 %a266 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.gen.FnSig %p1, ptr %a2 store { ptr, i64, i64 } zeroinitializer, ptr %a3 store { ptr, i64, i64 } zeroinitializer, ptr %a4 %t5 = load ptr, ptr %a1 %t6 = call %S.gen.Saved @finch.gen.beginHelper(ptr %t5) store %S.gen.Saved %t6, ptr %a7 %t8 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 13 %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t8, i32 0, i32 1 %t10 = load i64, ptr %t9 store i64 0, ptr %a11 br label %for.cond6955 for.cond6955: %t12 = load i64, ptr %a11 %t13 = icmp slt i64 %t12, %t10 br i1 %t13, label %for.body6956, label %for.end6958 for.body6956: %t14 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 13 %t15 = load i64, ptr %a11 %t16 = load { ptr, i64, i64 }, ptr %t14 %t17 = extractvalue { ptr, i64, i64 } %t16, 1 %t18 = icmp uge i64 %t15, %t17 br i1 %t18, label %range6959, label %inrange6960 range6959: call void @finch_panic_index(ptr @.str.4497, i64 3978, i64 %t15, i64 %t17) unreachable inrange6960: %t19 = extractvalue { ptr, i64, i64 } %t16, 0 %t20 = getelementptr inbounds %S.ast.Type, ptr %t19, i64 %t15 %t21 = load %S.ast.Type, ptr %t20 store %S.ast.Type %t21, ptr %a22 call void @finch.copy.S_ast_Type(ptr %a23, ptr %a22) %t24 = load %S.ast.Type, ptr %a23 store %S.ast.Type %t24, ptr %a25 %t26 = getelementptr inbounds %S.ast.Type, ptr %a25, i32 0, i32 0 %t27 = load { ptr, i64, i64 }, ptr %t26 store { ptr, i64, i64 } %t27, ptr %a28 store { ptr, i64, i64 } { ptr @.str.4498, i64 4, i64 0 }, ptr %a29 %t30 = call i32 @finch_str_eq(ptr %a28, ptr %a29) %t31 = icmp ne i32 %t30, 0 br i1 %t31, label %then6961, label %else6962 then6961: %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 %t33 = load i64, ptr %a11 call void @finch_str_from_int(ptr %a34, i64 %t33) %t35 = load { ptr, i64, i64 }, ptr %a34 store { ptr, i64, i64 } { ptr @.str.4499, i64 13, i64 0 }, ptr %a37 store { ptr, i64, i64 } %t35, ptr %a38 call void @finch_str_concat(ptr %a36, ptr %a37, ptr %a38) %t39 = load { ptr, i64, i64 }, ptr %a36 %t40 = load i64, ptr %t32 %t41 = add i64 %t40, 1 call void @finch_arr_reserve(ptr %a3, i64 %t41, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t42 = load ptr, ptr %a3 %t43 = getelementptr inbounds { ptr, i64, i64 }, ptr %t42, i64 %t40 store { ptr, i64, i64 } %t39, ptr %t43 store i64 %t41, ptr %t32 %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 %t45 = load ptr, ptr %a1 %t46 = load i64, ptr %a11 call void @finch_str_from_int(ptr %a47, i64 %t46) %t48 = load { ptr, i64, i64 }, ptr %a47 store { ptr, i64, i64 } { ptr @.str.4501, i64 13, i64 0 }, ptr %a50 store { ptr, i64, i64 } %t48, ptr %a51 call void @finch_str_concat(ptr %a49, ptr %a50, ptr %a51) %t52 = load { ptr, i64, i64 }, ptr %a49 store { ptr, i64, i64 } %t52, ptr %a54 store { ptr, i64, i64 } { ptr @.str.4502, i64 3, i64 0 }, ptr %a55 call void @finch_str_concat(ptr %a53, ptr %a54, ptr %a55) %t56 = load { ptr, i64, i64 }, ptr %a53 %t57 = call { ptr, i64, i64 } @finch.gen.op(ptr %t45, { ptr, i64, i64 } %t56) store { ptr, i64, i64 } { ptr @.str.4500, i64 3, i64 0 }, ptr %a59 store { ptr, i64, i64 } %t57, ptr %a60 call void @finch_str_concat(ptr %a58, ptr %a59, ptr %a60) %t61 = load { ptr, i64, i64 }, ptr %a58 %t62 = load i64, ptr %t44 %t63 = add i64 %t62, 1 call void @finch_arr_reserve(ptr %a4, i64 %t63, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t64 = load ptr, ptr %a4 %t65 = getelementptr inbounds { ptr, i64, i64 }, ptr %t64, i64 %t62 store { ptr, i64, i64 } %t61, ptr %t65 store i64 %t63, ptr %t44 br label %endif6963 else6962: %t66 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 %t67 = load ptr, ptr %a1 %t68 = load %S.ast.Type, ptr %a25 %t69 = call { ptr, i64, i64 } @finch.gen.cLL(ptr %t67, %S.ast.Type %t68) %t70 = load ptr, ptr %a1 %t71 = load %S.ast.Type, ptr %a25 %t72 = call { ptr, i64, i64 } @finch.gen.cExt(ptr %t70, %S.ast.Type %t71) store { ptr, i64, i64 } %t69, ptr %a74 store { ptr, i64, i64 } %t72, ptr %a75 call void @finch_str_concat(ptr %a73, ptr %a74, ptr %a75) %t76 = load { ptr, i64, i64 }, ptr %a73 store { ptr, i64, i64 } %t76, ptr %a78 store { ptr, i64, i64 } { ptr @.str.4503, i64 3, i64 0 }, ptr %a79 call void @finch_str_concat(ptr %a77, ptr %a78, ptr %a79) %t80 = load { ptr, i64, i64 }, ptr %a77 %t81 = load i64, ptr %a11 call void @finch_str_from_int(ptr %a82, i64 %t81) %t83 = load { ptr, i64, i64 }, ptr %a82 store { ptr, i64, i64 } %t80, ptr %a85 store { ptr, i64, i64 } %t83, ptr %a86 call void @finch_str_concat(ptr %a84, ptr %a85, ptr %a86) %t87 = load { ptr, i64, i64 }, ptr %a84 %t88 = load i64, ptr %t66 %t89 = add i64 %t88, 1 call void @finch_arr_reserve(ptr %a3, i64 %t89, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t90 = load ptr, ptr %a3 %t91 = getelementptr inbounds { ptr, i64, i64 }, ptr %t90, i64 %t88 store { ptr, i64, i64 } %t87, ptr %t91 store i64 %t89, ptr %t66 %t92 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 %t93 = load ptr, ptr %a1 %t94 = load %S.ast.Type, ptr %a25 %t95 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t93, %S.ast.Type %t94) store { ptr, i64, i64 } %t95, ptr %a97 store { ptr, i64, i64 } { ptr @.str.4504, i64 3, i64 0 }, ptr %a98 call void @finch_str_concat(ptr %a96, ptr %a97, ptr %a98) %t99 = load { ptr, i64, i64 }, ptr %a96 %t100 = load i64, ptr %a11 call void @finch_str_from_int(ptr %a101, i64 %t100) %t102 = load { ptr, i64, i64 }, ptr %a101 store { ptr, i64, i64 } %t99, ptr %a104 store { ptr, i64, i64 } %t102, ptr %a105 call void @finch_str_concat(ptr %a103, ptr %a104, ptr %a105) %t106 = load { ptr, i64, i64 }, ptr %a103 %t107 = load i64, ptr %t92 %t108 = add i64 %t107, 1 call void @finch_arr_reserve(ptr %a4, i64 %t108, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t109 = load ptr, ptr %a4 %t110 = getelementptr inbounds { ptr, i64, i64 }, ptr %t109, i64 %t107 store { ptr, i64, i64 } %t106, ptr %t110 store i64 %t108, ptr %t92 br label %endif6963 endif6963: br label %for.step6957 for.step6957: %t111 = load i64, ptr %a11 %t112 = add i64 %t111, 1 store i64 %t112, ptr %a11 br label %for.cond6955 for.end6958: %t113 = load ptr, ptr %a1 %t114 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 %t115 = load %S.ast.Type, ptr %t114 %t116 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t113, %S.ast.Type %t115) store { ptr, i64, i64 } { ptr @.str.4505, i64 5, i64 0 }, ptr %a118 store { ptr, i64, i64 } %t116, ptr %a119 call void @finch_str_concat(ptr %a117, ptr %a118, ptr %a119) %t120 = load { ptr, i64, i64 }, ptr %a117 store { ptr, i64, i64 } %t120, ptr %a122 store { ptr, i64, i64 } { ptr @.str.4506, i64 1, i64 0 }, ptr %a123 call void @finch_str_concat(ptr %a121, ptr %a122, ptr %a123) %t124 = load { ptr, i64, i64 }, ptr %a121 %t125 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 11 %t126 = load { ptr, i64, i64 }, ptr %t125 store { ptr, i64, i64 } %t124, ptr %a128 store { ptr, i64, i64 } %t126, ptr %a129 call void @finch_str_concat(ptr %a127, ptr %a128, ptr %a129) %t130 = load { ptr, i64, i64 }, ptr %a127 store { ptr, i64, i64 } %t130, ptr %a132 store { ptr, i64, i64 } { ptr @.str.4507, i64 1, i64 0 }, ptr %a133 call void @finch_str_concat(ptr %a131, ptr %a132, ptr %a133) %t134 = load { ptr, i64, i64 }, ptr %a131 %t135 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.4508, i64 2, i64 0 }, ptr %a136 call void @finch_str_join(ptr %a137, ptr %a4, ptr %a136) %t138 = load { ptr, i64, i64 }, ptr %a137 store { ptr, i64, i64 } %t134, ptr %a140 store { ptr, i64, i64 } %t138, ptr %a141 call void @finch_str_concat(ptr %a139, ptr %a140, ptr %a141) %t142 = load { ptr, i64, i64 }, ptr %a139 store { ptr, i64, i64 } %t142, ptr %a144 store { ptr, i64, i64 } { ptr @.str.4509, i64 1, i64 0 }, ptr %a145 call void @finch_str_concat(ptr %a143, ptr %a144, ptr %a145) %t146 = load { ptr, i64, i64 }, ptr %a143 store { ptr, i64, i64 } %t146, ptr %a147 store { ptr, i64, i64 } { ptr @.str.4510, i64 4, i64 0 }, ptr %a148 store { ptr, i64, i64 } { ptr @.str.4511, i64 0, i64 0 }, ptr %a149 %t150 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 %t151 = getelementptr inbounds %S.ast.Type, ptr %t150, i32 0, i32 0 %t152 = load { ptr, i64, i64 }, ptr %t151 store { ptr, i64, i64 } %t152, ptr %a153 store { ptr, i64, i64 } { ptr @.str.4512, i64 4, i64 0 }, ptr %a154 %t155 = call i32 @finch_str_eq(ptr %a153, ptr %a154) %t156 = icmp ne i32 %t155, 0 br i1 %t156, label %then6964, label %else6965 then6964: %t157 = load ptr, ptr %a1 %t158 = load { ptr, i64, i64 }, ptr %a147 call void @finch.gen.emit(ptr %t157, { ptr, i64, i64 } %t158) %t159 = load ptr, ptr %a1 call void @finch.gen.emit(ptr %t159, { ptr, i64, i64 } { ptr @.str.4513, i64 8, i64 0 }) br label %endif6966 else6965: %t160 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 %t161 = getelementptr inbounds %S.ast.Type, ptr %t160, i32 0, i32 0 %t162 = load { ptr, i64, i64 }, ptr %t161 store { ptr, i64, i64 } %t162, ptr %a163 store { ptr, i64, i64 } { ptr @.str.4514, i64 4, i64 0 }, ptr %a164 %t165 = call i32 @finch_str_eq(ptr %a163, ptr %a164) %t166 = icmp ne i32 %t165, 0 br i1 %t166, label %then6967, label %else6968 then6967: store { ptr, i64, i64 } { ptr @.str.4515, i64 2, i64 0 }, ptr %a148 store { ptr, i64, i64 } { ptr @.str.4516, i64 8, i64 0 }, ptr %a149 %t167 = load ptr, ptr %a1 %t168 = load ptr, ptr %a1 %t169 = load ptr, ptr %a1 %t170 = load { ptr, i64, i64 }, ptr %a147 %t171 = call { ptr, i64, i64 } @finch.gen.op(ptr %t169, { ptr, i64, i64 } %t170) store { ptr, i64, i64 } { ptr @.str.4518, i64 8, i64 0 }, ptr %a173 store { ptr, i64, i64 } %t171, ptr %a174 call void @finch_str_concat(ptr %a172, ptr %a173, ptr %a174) %t175 = load { ptr, i64, i64 }, ptr %a172 store { ptr, i64, i64 } %t175, ptr %a177 store { ptr, i64, i64 } { ptr @.str.4519, i64 6, i64 0 }, ptr %a178 call void @finch_str_concat(ptr %a176, ptr %a177, ptr %a178) %t179 = load { ptr, i64, i64 }, ptr %a176 %t180 = call { ptr, i64, i64 } @finch.gen.op(ptr %t168, { ptr, i64, i64 } %t179) store { ptr, i64, i64 } { ptr @.str.4517, i64 7, i64 0 }, ptr %a182 store { ptr, i64, i64 } %t180, ptr %a183 call void @finch_str_concat(ptr %a181, ptr %a182, ptr %a183) %t184 = load { ptr, i64, i64 }, ptr %a181 call void @finch.gen.emit(ptr %t167, { ptr, i64, i64 } %t184) br label %endif6969 else6968: %t185 = load ptr, ptr %a1 %t186 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 %t187 = load %S.ast.Type, ptr %t186 %t188 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t185, %S.ast.Type %t187) store { ptr, i64, i64 } %t188, ptr %a148 %t189 = load ptr, ptr %a1 %t190 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 %t191 = load %S.ast.Type, ptr %t190 %t192 = call { ptr, i64, i64 } @finch.gen.cExt(ptr %t189, %S.ast.Type %t191) store { ptr, i64, i64 } %t192, ptr %a149 %t193 = load ptr, ptr %a1 %t194 = load { ptr, i64, i64 }, ptr %a148 store { ptr, i64, i64 } { ptr @.str.4520, i64 4, i64 0 }, ptr %a196 store { ptr, i64, i64 } %t194, ptr %a197 call void @finch_str_concat(ptr %a195, ptr %a196, ptr %a197) %t198 = load { ptr, i64, i64 }, ptr %a195 store { ptr, i64, i64 } %t198, ptr %a200 store { ptr, i64, i64 } { ptr @.str.4521, i64 1, i64 0 }, ptr %a201 call void @finch_str_concat(ptr %a199, ptr %a200, ptr %a201) %t202 = load { ptr, i64, i64 }, ptr %a199 %t203 = load ptr, ptr %a1 %t204 = load { ptr, i64, i64 }, ptr %a147 %t205 = call { ptr, i64, i64 } @finch.gen.op(ptr %t203, { ptr, i64, i64 } %t204) store { ptr, i64, i64 } %t202, ptr %a207 store { ptr, i64, i64 } %t205, ptr %a208 call void @finch_str_concat(ptr %a206, ptr %a207, ptr %a208) %t209 = load { ptr, i64, i64 }, ptr %a206 call void @finch.gen.emit(ptr %t193, { ptr, i64, i64 } %t209) br label %endif6969 endif6969: br label %endif6966 endif6966: store { ptr, i64, i64 } { ptr @.str.4522, i64 0, i64 0 }, ptr %a210 %t211 = load ptr, ptr %a1 %t212 = icmp eq ptr %t211, null br i1 %t212, label %panic6970, label %ok6971 panic6970: call void @finch_panic(ptr @.str.4523, i64 4003, ptr @.str.4524) unreachable ok6971: %t213 = getelementptr inbounds %S.gen.Gen, ptr %t211, i32 0, i32 29 %t214 = getelementptr inbounds %S.platform.Target, ptr %t213, i32 0, i32 1 %t215 = load i1, ptr %t214 br i1 %t215, label %then6972, label %endif6974 then6972: store { ptr, i64, i64 } { ptr @.str.4525, i64 10, i64 0 }, ptr %a210 br label %endif6974 endif6974: %t216 = load ptr, ptr %a1 %t217 = load %S.gen.Saved, ptr %a7 %t218 = load { ptr, i64, i64 }, ptr %a210 store { ptr, i64, i64 } { ptr @.str.4526, i64 6, i64 0 }, ptr %a220 store { ptr, i64, i64 } %t218, ptr %a221 call void @finch_str_concat(ptr %a219, ptr %a220, ptr %a221) %t222 = load { ptr, i64, i64 }, ptr %a219 %t223 = load { ptr, i64, i64 }, ptr %a149 store { ptr, i64, i64 } %t222, ptr %a225 store { ptr, i64, i64 } %t223, ptr %a226 call void @finch_str_concat(ptr %a224, ptr %a225, ptr %a226) %t227 = load { ptr, i64, i64 }, ptr %a224 store { ptr, i64, i64 } %t227, ptr %a229 store { ptr, i64, i64 } { ptr @.str.4527, i64 1, i64 0 }, ptr %a230 call void @finch_str_concat(ptr %a228, ptr %a229, ptr %a230) %t231 = load { ptr, i64, i64 }, ptr %a228 %t232 = load { ptr, i64, i64 }, ptr %a148 store { ptr, i64, i64 } %t231, ptr %a234 store { ptr, i64, i64 } %t232, ptr %a235 call void @finch_str_concat(ptr %a233, ptr %a234, ptr %a235) %t236 = load { ptr, i64, i64 }, ptr %a233 store { ptr, i64, i64 } %t236, ptr %a238 store { ptr, i64, i64 } { ptr @.str.4528, i64 2, i64 0 }, ptr %a239 call void @finch_str_concat(ptr %a237, ptr %a238, ptr %a239) %t240 = load { ptr, i64, i64 }, ptr %a237 %t241 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 1 %t242 = load { ptr, i64, i64 }, ptr %t241 store { ptr, i64, i64 } %t240, ptr %a244 store { ptr, i64, i64 } %t242, ptr %a245 call void @finch_str_concat(ptr %a243, ptr %a244, ptr %a245) %t246 = load { ptr, i64, i64 }, ptr %a243 store { ptr, i64, i64 } %t246, ptr %a248 store { ptr, i64, i64 } { ptr @.str.4529, i64 1, i64 0 }, ptr %a249 call void @finch_str_concat(ptr %a247, ptr %a248, ptr %a249) %t250 = load { ptr, i64, i64 }, ptr %a247 %t251 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.4530, i64 2, i64 0 }, ptr %a252 call void @finch_str_join(ptr %a253, ptr %a3, ptr %a252) %t254 = load { ptr, i64, i64 }, ptr %a253 store { ptr, i64, i64 } %t250, ptr %a256 store { ptr, i64, i64 } %t254, ptr %a257 call void @finch_str_concat(ptr %a255, ptr %a256, ptr %a257) %t258 = load { ptr, i64, i64 }, ptr %a255 store { ptr, i64, i64 } %t258, ptr %a260 store { ptr, i64, i64 } { ptr @.str.4531, i64 1, i64 0 }, ptr %a261 call void @finch_str_concat(ptr %a259, ptr %a260, ptr %a261) %t262 = load { ptr, i64, i64 }, ptr %a259 call void @finch.gen.endHelper(ptr %t216, %S.gen.Saved %t217, { ptr, i64, i64 } %t262) %t263 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 1 %t264 = load { ptr, i64, i64 }, ptr %t263 store { ptr, i64, i64 } %t264, ptr %a265 call void @finch_str_copy(ptr %a266, ptr %a265) %t267 = load { ptr, i64, i64 }, ptr %a266 ret { ptr, i64, i64 } %t267 } define internal { ptr, i64, i64 } @finch.gen.cThunk(ptr %p0, i64 %p1, %S.ast.Node %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca i64, align 16 %a3 = alloca %S.ast.Node, align 16 %a14 = alloca %S.gen.FnSig, align 16 %a15 = alloca %S.gen.FnSig, align 16 %a17 = alloca %S.gen.FnSig, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca i64, align 16 %a48 = alloca i64, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca i64, align 16 %a105 = alloca %S.ast.Type, align 16 %a110 = alloca { ptr, i64, i64 }, align 16 %a111 = alloca { ptr, i64, i64 }, align 16 %a117 = alloca { ptr, i64, i64 }, align 16 %a118 = alloca { ptr, i64, i64 }, align 16 %a124 = alloca { ptr, i64, i64 }, align 16 %a125 = alloca { ptr, i64, i64 }, align 16 %a131 = alloca { ptr, i64, i64 }, align 16 %a132 = alloca { ptr, i64, i64 }, align 16 %a158 = alloca { ptr, i64, i64 }, align 16 %a159 = alloca { ptr, i64, i64 }, align 16 %a160 = alloca { ptr, i64, i64 }, align 16 %a162 = alloca { ptr, i64, i64 }, align 16 %a163 = alloca { ptr, i64, i64 }, align 16 %a164 = alloca { ptr, i64, i64 }, align 16 %a168 = alloca { ptr, i64, i64 }, align 16 %a169 = alloca { ptr, i64, i64 }, align 16 %a170 = alloca { ptr, i64, i64 }, align 16 %a180 = alloca { ptr, i64, i64 }, align 16 %a181 = alloca { ptr, i64, i64 }, align 16 %a188 = alloca { ptr, i64, i64 }, align 16 %a189 = alloca { ptr, i64, i64 }, align 16 %a196 = alloca { ptr, i64, i64 }, align 16 %a197 = alloca { ptr, i64, i64 }, align 16 %a204 = alloca { ptr, i64, i64 }, align 16 %a205 = alloca { ptr, i64, i64 }, align 16 %a212 = alloca { ptr, i64, i64 }, align 16 %a213 = alloca { ptr, i64, i64 }, align 16 %a241 = alloca { ptr, i64, i64 }, align 16 %a242 = alloca { ptr, i64, i64 }, align 16 %a243 = alloca { ptr, i64, i64 }, align 16 %a245 = alloca { ptr, i64, i64 }, align 16 %a246 = alloca { ptr, i64, i64 }, align 16 %a247 = alloca { ptr, i64, i64 }, align 16 %a252 = alloca { ptr, i64, i64 }, align 16 %a253 = alloca { ptr, i64, i64 }, align 16 %a254 = alloca { ptr, i64, i64 }, align 16 %a262 = alloca %S.gen.Plan, align 16 %a265 = alloca %S.gen.Saved, align 16 %a266 = alloca { ptr, i64, i64 }, align 16 %a267 = alloca i64, align 16 %a268 = alloca { ptr, i64, i64 }, align 16 %a276 = alloca { ptr, i64, i64 }, align 16 %a277 = alloca { ptr, i64, i64 }, align 16 %a278 = alloca { ptr, i64, i64 }, align 16 %a280 = alloca { ptr, i64, i64 }, align 16 %a281 = alloca { ptr, i64, i64 }, align 16 %a282 = alloca { ptr, i64, i64 }, align 16 %a288 = alloca { ptr, i64, i64 }, align 16 %a292 = alloca i64, align 16 %a303 = alloca %S.ast.Type, align 16 %a304 = alloca %S.ast.Type, align 16 %a306 = alloca %S.ast.Type, align 16 %a315 = alloca %S.gen.Abi, align 16 %a316 = alloca %S.gen.Abi, align 16 %a318 = alloca %S.gen.Abi, align 16 %a321 = alloca { ptr, i64, i64 }, align 16 %a322 = alloca { ptr, i64, i64 }, align 16 %a329 = alloca { ptr, i64, i64 }, align 16 %a330 = alloca { ptr, i64, i64 }, align 16 %a331 = alloca { ptr, i64, i64 }, align 16 %a333 = alloca { ptr, i64, i64 }, align 16 %a334 = alloca { ptr, i64, i64 }, align 16 %a335 = alloca { ptr, i64, i64 }, align 16 %a339 = alloca { ptr, i64, i64 }, align 16 %a341 = alloca { ptr, i64, i64 }, align 16 %a342 = alloca { ptr, i64, i64 }, align 16 %a343 = alloca { ptr, i64, i64 }, align 16 %a345 = alloca { ptr, i64, i64 }, align 16 %a346 = alloca { ptr, i64, i64 }, align 16 %a347 = alloca { ptr, i64, i64 }, align 16 %a350 = alloca { ptr, i64, i64 }, align 16 %a352 = alloca { ptr, i64, i64 }, align 16 %a353 = alloca { ptr, i64, i64 }, align 16 %a354 = alloca { ptr, i64, i64 }, align 16 %a364 = alloca { ptr, i64, i64 }, align 16 %a365 = alloca { ptr, i64, i64 }, align 16 %a366 = alloca { ptr, i64, i64 }, align 16 %a373 = alloca { ptr, i64, i64 }, align 16 %a375 = alloca { ptr, i64, i64 }, align 16 %a376 = alloca { ptr, i64, i64 }, align 16 %a377 = alloca { ptr, i64, i64 }, align 16 %a380 = alloca { ptr, i64, i64 }, align 16 %a381 = alloca { ptr, i64, i64 }, align 16 %a382 = alloca { ptr, i64, i64 }, align 16 %a392 = alloca { ptr, i64, i64 }, align 16 %a393 = alloca { ptr, i64, i64 }, align 16 %a398 = alloca { ptr, i64, i64 }, align 16 %a400 = alloca { ptr, i64, i64 }, align 16 %a401 = alloca { ptr, i64, i64 }, align 16 %a402 = alloca { ptr, i64, i64 }, align 16 %a412 = alloca { ptr, i64, i64 }, align 16 %a413 = alloca { ptr, i64, i64 }, align 16 %a414 = alloca { ptr, i64, i64 }, align 16 %a421 = alloca { ptr, i64, i64 }, align 16 %a423 = alloca { ptr, i64, i64 }, align 16 %a424 = alloca { ptr, i64, i64 }, align 16 %a425 = alloca { ptr, i64, i64 }, align 16 %a428 = alloca { ptr, i64, i64 }, align 16 %a429 = alloca { ptr, i64, i64 }, align 16 %a430 = alloca { ptr, i64, i64 }, align 16 %a440 = alloca { ptr, i64, i64 }, align 16 %a441 = alloca { ptr, i64, i64 }, align 16 %a446 = alloca { ptr, i64, i64 }, align 16 %a450 = alloca i64, align 16 %a462 = alloca { ptr, i64, i64 }, align 16 %a463 = alloca { ptr, i64, i64 }, align 16 %a464 = alloca { ptr, i64, i64 }, align 16 %a467 = alloca { ptr, i64, i64 }, align 16 %a469 = alloca { ptr, i64, i64 }, align 16 %a470 = alloca { ptr, i64, i64 }, align 16 %a471 = alloca { ptr, i64, i64 }, align 16 %a487 = alloca { ptr, i64, i64 }, align 16 %a489 = alloca { ptr, i64, i64 }, align 16 %a490 = alloca { ptr, i64, i64 }, align 16 %a491 = alloca { ptr, i64, i64 }, align 16 %a495 = alloca { ptr, i64, i64 }, align 16 %a496 = alloca { ptr, i64, i64 }, align 16 %a497 = alloca { ptr, i64, i64 }, align 16 %a499 = alloca { ptr, i64, i64 }, align 16 %a500 = alloca { ptr, i64, i64 }, align 16 %a501 = alloca { ptr, i64, i64 }, align 16 %a505 = alloca { ptr, i64, i64 }, align 16 %a507 = alloca { ptr, i64, i64 }, align 16 %a508 = alloca { ptr, i64, i64 }, align 16 %a509 = alloca { ptr, i64, i64 }, align 16 %a520 = alloca { ptr, i64, i64 }, align 16 %a521 = alloca { ptr, i64, i64 }, align 16 %a522 = alloca { ptr, i64, i64 }, align 16 %a530 = alloca { ptr, i64, i64 }, align 16 %a531 = alloca { ptr, i64, i64 }, align 16 %a532 = alloca { ptr, i64, i64 }, align 16 %a545 = alloca { ptr, i64, i64 }, align 16 %a546 = alloca { ptr, i64, i64 }, align 16 %a547 = alloca { ptr, i64, i64 }, align 16 %a549 = alloca { ptr, i64, i64 }, align 16 %a550 = alloca { ptr, i64, i64 }, align 16 %a551 = alloca { ptr, i64, i64 }, align 16 %a554 = alloca { ptr, i64, i64 }, align 16 %a556 = alloca { ptr, i64, i64 }, align 16 %a557 = alloca { ptr, i64, i64 }, align 16 %a558 = alloca { ptr, i64, i64 }, align 16 %a568 = alloca { ptr, i64, i64 }, align 16 %a569 = alloca { ptr, i64, i64 }, align 16 %a570 = alloca { ptr, i64, i64 }, align 16 %a573 = alloca { ptr, i64, i64 }, align 16 %a575 = alloca { ptr, i64, i64 }, align 16 %a576 = alloca { ptr, i64, i64 }, align 16 %a577 = alloca { ptr, i64, i64 }, align 16 %a591 = alloca { ptr, i64, i64 }, align 16 %a592 = alloca { ptr, i64, i64 }, align 16 %a593 = alloca { ptr, i64, i64 }, align 16 %a595 = alloca { ptr, i64, i64 }, align 16 %a596 = alloca { ptr, i64, i64 }, align 16 %a597 = alloca { ptr, i64, i64 }, align 16 %a601 = alloca { ptr, i64, i64 }, align 16 %a602 = alloca { ptr, i64, i64 }, align 16 %a603 = alloca { ptr, i64, i64 }, align 16 %a605 = alloca { ptr, i64, i64 }, align 16 %a606 = alloca { ptr, i64, i64 }, align 16 %a607 = alloca { ptr, i64, i64 }, align 16 %a610 = alloca { ptr, i64, i64 }, align 16 %a611 = alloca { ptr, i64, i64 }, align 16 %a613 = alloca { ptr, i64, i64 }, align 16 %a614 = alloca { ptr, i64, i64 }, align 16 %a615 = alloca { ptr, i64, i64 }, align 16 %a617 = alloca { ptr, i64, i64 }, align 16 %a618 = alloca { ptr, i64, i64 }, align 16 %a619 = alloca { ptr, i64, i64 }, align 16 %a621 = alloca { ptr, i64, i64 }, align 16 %a622 = alloca { ptr, i64, i64 }, align 16 %a626 = alloca { ptr, i64, i64 }, align 16 %a627 = alloca { ptr, i64, i64 }, align 16 %a648 = alloca { ptr, i64, i64 }, align 16 %a649 = alloca { ptr, i64, i64 }, align 16 %a654 = alloca { ptr, i64, i64 }, align 16 %a668 = alloca { ptr, i64, i64 }, align 16 %a669 = alloca { ptr, i64, i64 }, align 16 %a670 = alloca { ptr, i64, i64 }, align 16 %a672 = alloca { ptr, i64, i64 }, align 16 %a673 = alloca { ptr, i64, i64 }, align 16 %a674 = alloca { ptr, i64, i64 }, align 16 %a682 = alloca { ptr, i64, i64 }, align 16 %a683 = alloca { ptr, i64, i64 }, align 16 %a684 = alloca { ptr, i64, i64 }, align 16 %a695 = alloca { ptr, i64, i64 }, align 16 %a696 = alloca { ptr, i64, i64 }, align 16 %a697 = alloca { ptr, i64, i64 }, align 16 %a699 = alloca { ptr, i64, i64 }, align 16 %a700 = alloca { ptr, i64, i64 }, align 16 %a701 = alloca { ptr, i64, i64 }, align 16 %a706 = alloca { ptr, i64, i64 }, align 16 %a707 = alloca { ptr, i64, i64 }, align 16 %a708 = alloca { ptr, i64, i64 }, align 16 %a713 = alloca { ptr, i64, i64 }, align 16 %a714 = alloca { ptr, i64, i64 }, align 16 %a715 = alloca { ptr, i64, i64 }, align 16 %a717 = alloca { ptr, i64, i64 }, align 16 %a718 = alloca { ptr, i64, i64 }, align 16 %a719 = alloca { ptr, i64, i64 }, align 16 %a723 = alloca { ptr, i64, i64 }, align 16 %a724 = alloca { ptr, i64, i64 }, align 16 %a725 = alloca { ptr, i64, i64 }, align 16 %a727 = alloca { ptr, i64, i64 }, align 16 %a728 = alloca { ptr, i64, i64 }, align 16 %a729 = alloca { ptr, i64, i64 }, align 16 %a732 = alloca { ptr, i64, i64 }, align 16 %a733 = alloca { ptr, i64, i64 }, align 16 %a734 = alloca { ptr, i64, i64 }, align 16 %a736 = alloca { ptr, i64, i64 }, align 16 %a737 = alloca { ptr, i64, i64 }, align 16 %a738 = alloca { ptr, i64, i64 }, align 16 %a741 = alloca { ptr, i64, i64 }, align 16 %a742 = alloca { ptr, i64, i64 }, align 16 %a744 = alloca { ptr, i64, i64 }, align 16 %a745 = alloca { ptr, i64, i64 }, align 16 %a746 = alloca { ptr, i64, i64 }, align 16 %a748 = alloca { ptr, i64, i64 }, align 16 %a749 = alloca { ptr, i64, i64 }, align 16 %a750 = alloca { ptr, i64, i64 }, align 16 %a753 = alloca { ptr, i64, i64 }, align 16 %a754 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store i64 %p1, ptr %a2 store %S.ast.Node %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = icmp eq ptr %t4, null br i1 %t5, label %panic6975, label %ok6976 panic6975: call void @finch_panic(ptr @.str.4532, i64 4012, ptr @.str.4533) unreachable ok6976: %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 14 %t7 = load i64, ptr %a2 %t8 = load { ptr, i64, i64 }, ptr %t6 %t9 = extractvalue { ptr, i64, i64 } %t8, 1 %t10 = icmp uge i64 %t7, %t9 br i1 %t10, label %range6977, label %inrange6978 range6977: call void @finch_panic_index(ptr @.str.4534, i64 4012, i64 %t7, i64 %t9) unreachable inrange6978: %t11 = extractvalue { ptr, i64, i64 } %t8, 0 %t12 = getelementptr inbounds %S.gen.FnSig, ptr %t11, i64 %t7 %t13 = load %S.gen.FnSig, ptr %t12 store %S.gen.FnSig %t13, ptr %a14 call void @finch.copy.S_gen_FnSig(ptr %a15, ptr %a14) %t16 = load %S.gen.FnSig, ptr %a15 store %S.gen.FnSig %t16, ptr %a17 %t18 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 0 %t19 = load { ptr, i64, i64 }, ptr %t18 %t20 = call { ptr, i64, i64 } @finch.gen.modName({ ptr, i64, i64 } %t19) store { ptr, i64, i64 } { ptr @.str.4535, i64 9, i64 0 }, ptr %a22 store { ptr, i64, i64 } %t20, ptr %a23 call void @finch_str_concat(ptr %a21, ptr %a22, ptr %a23) %t24 = load { ptr, i64, i64 }, ptr %a21 store { ptr, i64, i64 } %t24, ptr %a26 store { ptr, i64, i64 } { ptr @.str.4536, i64 1, i64 0 }, ptr %a27 call void @finch_str_concat(ptr %a25, ptr %a26, ptr %a27) %t28 = load { ptr, i64, i64 }, ptr %a25 %t29 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 1 %t30 = load { ptr, i64, i64 }, ptr %t29 store { ptr, i64, i64 } %t28, ptr %a32 store { ptr, i64, i64 } %t30, ptr %a33 call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33) %t34 = load { ptr, i64, i64 }, ptr %a31 store { ptr, i64, i64 } %t34, ptr %a35 %t36 = load ptr, ptr %a1 %t37 = icmp eq ptr %t36, null br i1 %t37, label %panic6979, label %ok6980 panic6979: call void @finch_panic(ptr @.str.4537, i64 4014, ptr @.str.4538) unreachable ok6980: %t38 = getelementptr inbounds %S.gen.Gen, ptr %t36, i32 0, i32 38 %t39 = getelementptr inbounds { ptr, i64, i64 }, ptr %t38, i32 0, i32 1 %t40 = load { ptr, i64, i64 }, ptr %a35 store { ptr, i64, i64 } { ptr @.str.4539, i64 2, i64 0 }, ptr %a42 store { ptr, i64, i64 } %t40, ptr %a43 call void @finch_str_concat(ptr %a41, ptr %a42, ptr %a43) %t44 = load { ptr, i64, i64 }, ptr %a41 store i64 -1, ptr %a45 %t46 = load i64, ptr %t39 %t47 = load ptr, ptr %t38 store i64 0, ptr %a48 br label %find.cond6981 find.cond6981: %t49 = load i64, ptr %a48 %t50 = icmp slt i64 %t49, %t46 br i1 %t50, label %find.body6982, label %find.end6985 find.body6982: %t51 = getelementptr inbounds { ptr, i64, i64 }, ptr %t47, i64 %t49 %t52 = load { ptr, i64, i64 }, ptr %t51 store { ptr, i64, i64 } %t52, ptr %a53 store { ptr, i64, i64 } %t44, ptr %a54 %t55 = call i32 @finch_str_eq(ptr %a53, ptr %a54) %t56 = icmp ne i32 %t55, 0 br i1 %t56, label %find.hit6983, label %find.next6984 find.hit6983: store i64 %t49, ptr %a45 br label %find.end6985 find.next6984: %t57 = add i64 %t49, 1 store i64 %t57, ptr %a48 br label %find.cond6981 find.end6985: %t58 = load i64, ptr %a45 %t59 = icmp sge i64 %t58, 0 br i1 %t59, label %then6986, label %endif6988 then6986: %t60 = load { ptr, i64, i64 }, ptr %a35 store { ptr, i64, i64 } %t60, ptr %a61 call void @finch_str_copy(ptr %a62, ptr %a61) %t63 = load { ptr, i64, i64 }, ptr %a62 ret { ptr, i64, i64 } %t63 endif6988: %t64 = load ptr, ptr %a1 %t65 = icmp eq ptr %t64, null br i1 %t65, label %panic6989, label %ok6990 panic6989: call void @finch_panic(ptr @.str.4540, i64 4017, ptr @.str.4541) unreachable ok6990: %t66 = getelementptr inbounds %S.gen.Gen, ptr %t64, i32 0, i32 38 %t67 = getelementptr inbounds { ptr, i64, i64 }, ptr %t66, i32 0, i32 1 %t68 = load { ptr, i64, i64 }, ptr %a35 store { ptr, i64, i64 } { ptr @.str.4542, i64 2, i64 0 }, ptr %a70 store { ptr, i64, i64 } %t68, ptr %a71 call void @finch_str_concat(ptr %a69, ptr %a70, ptr %a71) %t72 = load { ptr, i64, i64 }, ptr %a69 %t73 = load i64, ptr %t67 %t74 = add i64 %t73, 1 call void @finch_arr_reserve(ptr %t66, i64 %t74, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t75 = load ptr, ptr %t66 %t76 = getelementptr inbounds { ptr, i64, i64 }, ptr %t75, i64 %t73 store { ptr, i64, i64 } %t72, ptr %t76 store i64 %t74, ptr %t67 %t77 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 2 %t78 = getelementptr inbounds { ptr, i64, i64 }, ptr %t77, i32 0, i32 1 %t79 = load i64, ptr %t78 %t80 = icmp sgt i64 %t79, 0 br label %logic.from6991 logic.from6991: br i1 %t80, label %logic.end6993, label %logic.rhs6992 logic.rhs6992: %t81 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 9 %t82 = load i1, ptr %t81 br label %logic.rend6994 logic.rend6994: br label %logic.end6993 logic.end6993: %t83 = phi i1 [ true, %logic.from6991 ], [ %t82, %logic.rend6994 ] br i1 %t83, label %then6995, label %endif6997 then6995: %t84 = load ptr, ptr %a1 %t85 = load %S.ast.Node, ptr %a3 %t86 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 1 %t87 = load { ptr, i64, i64 }, ptr %t86 store { ptr, i64, i64 } { ptr @.str.4543, i64 5, i64 0 }, ptr %a89 store { ptr, i64, i64 } %t87, ptr %a90 call void @finch_str_concat(ptr %a88, ptr %a89, ptr %a90) %t91 = load { ptr, i64, i64 }, ptr %a88 store { ptr, i64, i64 } %t91, ptr %a93 store { ptr, i64, i64 } { ptr @.str.4544, i64 81, i64 0 }, ptr %a94 call void @finch_str_concat(ptr %a92, ptr %a93, ptr %a94) %t95 = load { ptr, i64, i64 }, ptr %a92 call void @finch.gen.fail(ptr %t84, %S.ast.Node %t85, { ptr, i64, i64 } %t95) br label %endif6997 endif6997: %t96 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 13 store i64 0, ptr %a97 br label %each.cond6998 each.cond6998: %t98 = getelementptr inbounds { ptr, i64, i64 }, ptr %t96, i32 0, i32 1 %t99 = load i64, ptr %t98 %t100 = load i64, ptr %a97 %t101 = icmp slt i64 %t100, %t99 br i1 %t101, label %each.body6999, label %each.end7001 each.body6999: %t102 = load ptr, ptr %t96 %t103 = getelementptr inbounds %S.ast.Type, ptr %t102, i64 %t100 %t104 = load %S.ast.Type, ptr %t103 store %S.ast.Type %t104, ptr %a105 %t106 = load %S.ast.Type, ptr %a105 %t107 = call i1 @finch.gen.isNumber(%S.ast.Type %t106) br label %logic.from7002 logic.from7002: br i1 %t107, label %logic.end7004, label %logic.rhs7003 logic.rhs7003: %t108 = getelementptr inbounds %S.ast.Type, ptr %a105, i32 0, i32 0 %t109 = load { ptr, i64, i64 }, ptr %t108 store { ptr, i64, i64 } %t109, ptr %a110 store { ptr, i64, i64 } { ptr @.str.4545, i64 4, i64 0 }, ptr %a111 %t112 = call i32 @finch_str_eq(ptr %a110, ptr %a111) %t113 = icmp ne i32 %t112, 0 br label %logic.rend7005 logic.rend7005: br label %logic.end7004 logic.end7004: %t114 = phi i1 [ true, %logic.from7002 ], [ %t113, %logic.rend7005 ] br label %logic.from7006 logic.from7006: br i1 %t114, label %logic.end7008, label %logic.rhs7007 logic.rhs7007: %t115 = getelementptr inbounds %S.ast.Type, ptr %a105, i32 0, i32 0 %t116 = load { ptr, i64, i64 }, ptr %t115 store { ptr, i64, i64 } %t116, ptr %a117 store { ptr, i64, i64 } { ptr @.str.4546, i64 4, i64 0 }, ptr %a118 %t119 = call i32 @finch_str_eq(ptr %a117, ptr %a118) %t120 = icmp ne i32 %t119, 0 br label %logic.rend7009 logic.rend7009: br label %logic.end7008 logic.end7008: %t121 = phi i1 [ true, %logic.from7006 ], [ %t120, %logic.rend7009 ] br label %logic.from7010 logic.from7010: br i1 %t121, label %logic.end7012, label %logic.rhs7011 logic.rhs7011: %t122 = getelementptr inbounds %S.ast.Type, ptr %a105, i32 0, i32 0 %t123 = load { ptr, i64, i64 }, ptr %t122 store { ptr, i64, i64 } %t123, ptr %a124 store { ptr, i64, i64 } { ptr @.str.4547, i64 3, i64 0 }, ptr %a125 %t126 = call i32 @finch_str_eq(ptr %a124, ptr %a125) %t127 = icmp ne i32 %t126, 0 br label %logic.rend7013 logic.rend7013: br label %logic.end7012 logic.end7012: %t128 = phi i1 [ true, %logic.from7010 ], [ %t127, %logic.rend7013 ] br label %logic.from7014 logic.from7014: br i1 %t128, label %logic.end7016, label %logic.rhs7015 logic.rhs7015: %t129 = getelementptr inbounds %S.ast.Type, ptr %a105, i32 0, i32 0 %t130 = load { ptr, i64, i64 }, ptr %t129 store { ptr, i64, i64 } %t130, ptr %a131 store { ptr, i64, i64 } { ptr @.str.4548, i64 6, i64 0 }, ptr %a132 %t133 = call i32 @finch_str_eq(ptr %a131, ptr %a132) %t134 = icmp ne i32 %t133, 0 br label %logic.from7017 logic.from7017: br i1 %t134, label %logic.rhs7018, label %logic.end7019 logic.rhs7018: %t135 = load ptr, ptr %a1 %t136 = icmp eq ptr %t135, null br i1 %t136, label %panic7020, label %ok7021 panic7020: call void @finch_panic(ptr @.str.4549, i64 4022, ptr @.str.4550) unreachable ok7021: %t137 = getelementptr inbounds %S.gen.Gen, ptr %t135, i32 0, i32 15 %t138 = load ptr, ptr %a1 %t139 = getelementptr inbounds %S.ast.Type, ptr %a105, i32 0, i32 3 %t140 = load { ptr, i64, i64 }, ptr %t139 %t141 = getelementptr inbounds %S.ast.Type, ptr %a105, i32 0, i32 2 %t142 = load { ptr, i64, i64 }, ptr %t141 %t143 = call i64 @finch.gen.findStruct(ptr %t138, { ptr, i64, i64 } %t140, { ptr, i64, i64 } %t142) %t144 = load { ptr, i64, i64 }, ptr %t137 %t145 = extractvalue { ptr, i64, i64 } %t144, 1 %t146 = icmp uge i64 %t143, %t145 br i1 %t146, label %range7022, label %inrange7023 range7022: call void @finch_panic_index(ptr @.str.4551, i64 4022, i64 %t143, i64 %t145) unreachable inrange7023: %t147 = extractvalue { ptr, i64, i64 } %t144, 0 %t148 = getelementptr inbounds %S.gen.StructDef, ptr %t147, i64 %t143 %t149 = getelementptr inbounds %S.gen.StructDef, ptr %t148, i32 0, i32 2 %t150 = load i1, ptr %t149 br label %logic.rend7024 logic.rend7024: br label %logic.end7019 logic.end7019: %t151 = phi i1 [ false, %logic.from7017 ], [ %t150, %logic.rend7024 ] br label %logic.rend7025 logic.rend7025: br label %logic.end7016 logic.end7016: %t152 = phi i1 [ true, %logic.from7014 ], [ %t151, %logic.rend7025 ] %t153 = xor i1 %t152, true br i1 %t153, label %then7026, label %endif7028 then7026: %t154 = load ptr, ptr %a1 %t155 = load %S.ast.Node, ptr %a3 %t156 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 1 %t157 = load { ptr, i64, i64 }, ptr %t156 store { ptr, i64, i64 } { ptr @.str.4552, i64 5, i64 0 }, ptr %a159 store { ptr, i64, i64 } %t157, ptr %a160 call void @finch_str_concat(ptr %a158, ptr %a159, ptr %a160) %t161 = load { ptr, i64, i64 }, ptr %a158 store { ptr, i64, i64 } %t161, ptr %a163 store { ptr, i64, i64 } { ptr @.str.4553, i64 95, i64 0 }, ptr %a164 call void @finch_str_concat(ptr %a162, ptr %a163, ptr %a164) %t165 = load { ptr, i64, i64 }, ptr %a162 %t166 = load %S.ast.Type, ptr %a105 %t167 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t166) store { ptr, i64, i64 } %t165, ptr %a169 store { ptr, i64, i64 } %t167, ptr %a170 call void @finch_str_concat(ptr %a168, ptr %a169, ptr %a170) %t171 = load { ptr, i64, i64 }, ptr %a168 call void @finch.gen.fail(ptr %t154, %S.ast.Node %t155, { ptr, i64, i64 } %t171) br label %endif7028 endif7028: br label %each.step7000 each.step7000: %t172 = load i64, ptr %a97 %t173 = add i64 %t172, 1 store i64 %t173, ptr %a97 br label %each.cond6998 each.end7001: %t174 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 %t175 = load %S.ast.Type, ptr %t174 %t176 = call i1 @finch.gen.isNumber(%S.ast.Type %t175) br label %logic.from7029 logic.from7029: br i1 %t176, label %logic.end7031, label %logic.rhs7030 logic.rhs7030: %t177 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 %t178 = getelementptr inbounds %S.ast.Type, ptr %t177, i32 0, i32 0 %t179 = load { ptr, i64, i64 }, ptr %t178 store { ptr, i64, i64 } %t179, ptr %a180 store { ptr, i64, i64 } { ptr @.str.4554, i64 4, i64 0 }, ptr %a181 %t182 = call i32 @finch_str_eq(ptr %a180, ptr %a181) %t183 = icmp ne i32 %t182, 0 br label %logic.rend7032 logic.rend7032: br label %logic.end7031 logic.end7031: %t184 = phi i1 [ true, %logic.from7029 ], [ %t183, %logic.rend7032 ] br label %logic.from7033 logic.from7033: br i1 %t184, label %logic.end7035, label %logic.rhs7034 logic.rhs7034: %t185 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 %t186 = getelementptr inbounds %S.ast.Type, ptr %t185, i32 0, i32 0 %t187 = load { ptr, i64, i64 }, ptr %t186 store { ptr, i64, i64 } %t187, ptr %a188 store { ptr, i64, i64 } { ptr @.str.4555, i64 4, i64 0 }, ptr %a189 %t190 = call i32 @finch_str_eq(ptr %a188, ptr %a189) %t191 = icmp ne i32 %t190, 0 br label %logic.rend7036 logic.rend7036: br label %logic.end7035 logic.end7035: %t192 = phi i1 [ true, %logic.from7033 ], [ %t191, %logic.rend7036 ] br label %logic.from7037 logic.from7037: br i1 %t192, label %logic.end7039, label %logic.rhs7038 logic.rhs7038: %t193 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 %t194 = getelementptr inbounds %S.ast.Type, ptr %t193, i32 0, i32 0 %t195 = load { ptr, i64, i64 }, ptr %t194 store { ptr, i64, i64 } %t195, ptr %a196 store { ptr, i64, i64 } { ptr @.str.4556, i64 3, i64 0 }, ptr %a197 %t198 = call i32 @finch_str_eq(ptr %a196, ptr %a197) %t199 = icmp ne i32 %t198, 0 br label %logic.rend7040 logic.rend7040: br label %logic.end7039 logic.end7039: %t200 = phi i1 [ true, %logic.from7037 ], [ %t199, %logic.rend7040 ] br label %logic.from7041 logic.from7041: br i1 %t200, label %logic.end7043, label %logic.rhs7042 logic.rhs7042: %t201 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 %t202 = getelementptr inbounds %S.ast.Type, ptr %t201, i32 0, i32 0 %t203 = load { ptr, i64, i64 }, ptr %t202 store { ptr, i64, i64 } %t203, ptr %a204 store { ptr, i64, i64 } { ptr @.str.4557, i64 4, i64 0 }, ptr %a205 %t206 = call i32 @finch_str_eq(ptr %a204, ptr %a205) %t207 = icmp ne i32 %t206, 0 br label %logic.rend7044 logic.rend7044: br label %logic.end7043 logic.end7043: %t208 = phi i1 [ true, %logic.from7041 ], [ %t207, %logic.rend7044 ] br label %logic.from7045 logic.from7045: br i1 %t208, label %logic.end7047, label %logic.rhs7046 logic.rhs7046: %t209 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 %t210 = getelementptr inbounds %S.ast.Type, ptr %t209, i32 0, i32 0 %t211 = load { ptr, i64, i64 }, ptr %t210 store { ptr, i64, i64 } %t211, ptr %a212 store { ptr, i64, i64 } { ptr @.str.4558, i64 6, i64 0 }, ptr %a213 %t214 = call i32 @finch_str_eq(ptr %a212, ptr %a213) %t215 = icmp ne i32 %t214, 0 br label %logic.from7048 logic.from7048: br i1 %t215, label %logic.rhs7049, label %logic.end7050 logic.rhs7049: %t216 = load ptr, ptr %a1 %t217 = icmp eq ptr %t216, null br i1 %t217, label %panic7051, label %ok7052 panic7051: call void @finch_panic(ptr @.str.4559, i64 4026, ptr @.str.4560) unreachable ok7052: %t218 = getelementptr inbounds %S.gen.Gen, ptr %t216, i32 0, i32 15 %t219 = load ptr, ptr %a1 %t220 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 %t221 = getelementptr inbounds %S.ast.Type, ptr %t220, i32 0, i32 3 %t222 = load { ptr, i64, i64 }, ptr %t221 %t223 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 %t224 = getelementptr inbounds %S.ast.Type, ptr %t223, i32 0, i32 2 %t225 = load { ptr, i64, i64 }, ptr %t224 %t226 = call i64 @finch.gen.findStruct(ptr %t219, { ptr, i64, i64 } %t222, { ptr, i64, i64 } %t225) %t227 = load { ptr, i64, i64 }, ptr %t218 %t228 = extractvalue { ptr, i64, i64 } %t227, 1 %t229 = icmp uge i64 %t226, %t228 br i1 %t229, label %range7053, label %inrange7054 range7053: call void @finch_panic_index(ptr @.str.4561, i64 4026, i64 %t226, i64 %t228) unreachable inrange7054: %t230 = extractvalue { ptr, i64, i64 } %t227, 0 %t231 = getelementptr inbounds %S.gen.StructDef, ptr %t230, i64 %t226 %t232 = getelementptr inbounds %S.gen.StructDef, ptr %t231, i32 0, i32 2 %t233 = load i1, ptr %t232 br label %logic.rend7055 logic.rend7055: br label %logic.end7050 logic.end7050: %t234 = phi i1 [ false, %logic.from7048 ], [ %t233, %logic.rend7055 ] br label %logic.rend7056 logic.rend7056: br label %logic.end7047 logic.end7047: %t235 = phi i1 [ true, %logic.from7045 ], [ %t234, %logic.rend7056 ] %t236 = xor i1 %t235, true br i1 %t236, label %then7057, label %endif7059 then7057: %t237 = load ptr, ptr %a1 %t238 = load %S.ast.Node, ptr %a3 %t239 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 1 %t240 = load { ptr, i64, i64 }, ptr %t239 store { ptr, i64, i64 } { ptr @.str.4562, i64 5, i64 0 }, ptr %a242 store { ptr, i64, i64 } %t240, ptr %a243 call void @finch_str_concat(ptr %a241, ptr %a242, ptr %a243) %t244 = load { ptr, i64, i64 }, ptr %a241 store { ptr, i64, i64 } %t244, ptr %a246 store { ptr, i64, i64 } { ptr @.str.4563, i64 38, i64 0 }, ptr %a247 call void @finch_str_concat(ptr %a245, ptr %a246, ptr %a247) %t248 = load { ptr, i64, i64 }, ptr %a245 %t249 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 %t250 = load %S.ast.Type, ptr %t249 %t251 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t250) store { ptr, i64, i64 } %t248, ptr %a253 store { ptr, i64, i64 } %t251, ptr %a254 call void @finch_str_concat(ptr %a252, ptr %a253, ptr %a254) %t255 = load { ptr, i64, i64 }, ptr %a252 call void @finch.gen.fail(ptr %t237, %S.ast.Node %t238, { ptr, i64, i64 } %t255) br label %endif7059 endif7059: %t256 = load ptr, ptr %a1 %t257 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 %t258 = load %S.ast.Type, ptr %t257 %t259 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 13 %t260 = load { ptr, i64, i64 }, ptr %t259 %t261 = call %S.gen.Plan @finch.gen.makePlan(ptr %t256, %S.ast.Type %t258, { ptr, i64, i64 } %t260) store %S.gen.Plan %t261, ptr %a262 %t263 = load ptr, ptr %a1 %t264 = call %S.gen.Saved @finch.gen.beginHelper(ptr %t263) store %S.gen.Saved %t264, ptr %a265 store { ptr, i64, i64 } zeroinitializer, ptr %a266 store i64 0, ptr %a267 store { ptr, i64, i64 } { ptr @.str.4564, i64 0, i64 0 }, ptr %a268 %t269 = getelementptr inbounds %S.gen.Plan, ptr %a262, i32 0, i32 3 %t270 = load i1, ptr %t269 br i1 %t270, label %then7060, label %endif7062 then7060: %t271 = getelementptr inbounds { ptr, i64, i64 }, ptr %a266, i32 0, i32 1 %t272 = load ptr, ptr %a1 %t273 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 %t274 = load %S.ast.Type, ptr %t273 %t275 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t272, %S.ast.Type %t274) store { ptr, i64, i64 } { ptr @.str.4565, i64 9, i64 0 }, ptr %a277 store { ptr, i64, i64 } %t275, ptr %a278 call void @finch_str_concat(ptr %a276, ptr %a277, ptr %a278) %t279 = load { ptr, i64, i64 }, ptr %a276 store { ptr, i64, i64 } %t279, ptr %a281 store { ptr, i64, i64 } { ptr @.str.4566, i64 14, i64 0 }, ptr %a282 call void @finch_str_concat(ptr %a280, ptr %a281, ptr %a282) %t283 = load { ptr, i64, i64 }, ptr %a280 %t284 = load i64, ptr %t271 %t285 = add i64 %t284, 1 call void @finch_arr_reserve(ptr %a266, i64 %t285, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t286 = load ptr, ptr %a266 %t287 = getelementptr inbounds { ptr, i64, i64 }, ptr %t286, i64 %t284 store { ptr, i64, i64 } %t283, ptr %t287 store i64 %t285, ptr %t271 store { ptr, i64, i64 } { ptr @.str.4567, i64 3, i64 0 }, ptr %a268 store i64 1, ptr %a267 br label %endif7062 endif7062: store { ptr, i64, i64 } zeroinitializer, ptr %a288 %t289 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 13 %t290 = getelementptr inbounds { ptr, i64, i64 }, ptr %t289, i32 0, i32 1 %t291 = load i64, ptr %t290 store i64 0, ptr %a292 br label %for.cond7063 for.cond7063: %t293 = load i64, ptr %a292 %t294 = icmp slt i64 %t293, %t291 br i1 %t294, label %for.body7064, label %for.end7066 for.body7064: %t295 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 13 %t296 = load i64, ptr %a292 %t297 = load { ptr, i64, i64 }, ptr %t295 %t298 = extractvalue { ptr, i64, i64 } %t297, 1 %t299 = icmp uge i64 %t296, %t298 br i1 %t299, label %range7067, label %inrange7068 range7067: call void @finch_panic_index(ptr @.str.4568, i64 4041, i64 %t296, i64 %t298) unreachable inrange7068: %t300 = extractvalue { ptr, i64, i64 } %t297, 0 %t301 = getelementptr inbounds %S.ast.Type, ptr %t300, i64 %t296 %t302 = load %S.ast.Type, ptr %t301 store %S.ast.Type %t302, ptr %a303 call void @finch.copy.S_ast_Type(ptr %a304, ptr %a303) %t305 = load %S.ast.Type, ptr %a304 store %S.ast.Type %t305, ptr %a306 %t307 = getelementptr inbounds %S.gen.Plan, ptr %a262, i32 0, i32 1 %t308 = load i64, ptr %a292 %t309 = load { ptr, i64, i64 }, ptr %t307 %t310 = extractvalue { ptr, i64, i64 } %t309, 1 %t311 = icmp uge i64 %t308, %t310 br i1 %t311, label %range7069, label %inrange7070 range7069: call void @finch_panic_index(ptr @.str.4569, i64 4042, i64 %t308, i64 %t310) unreachable inrange7070: %t312 = extractvalue { ptr, i64, i64 } %t309, 0 %t313 = getelementptr inbounds %S.gen.Abi, ptr %t312, i64 %t308 %t314 = load %S.gen.Abi, ptr %t313 store %S.gen.Abi %t314, ptr %a315 call void @finch.copy.S_gen_Abi(ptr %a316, ptr %a315) %t317 = load %S.gen.Abi, ptr %a316 store %S.gen.Abi %t317, ptr %a318 %t319 = getelementptr inbounds %S.gen.Abi, ptr %a318, i32 0, i32 0 %t320 = load { ptr, i64, i64 }, ptr %t319 store { ptr, i64, i64 } %t320, ptr %a321 store { ptr, i64, i64 } { ptr @.str.4570, i64 6, i64 0 }, ptr %a322 %t323 = call i32 @finch_str_eq(ptr %a321, ptr %a322) %t324 = icmp ne i32 %t323, 0 br i1 %t324, label %then7071, label %else7072 then7071: %t325 = getelementptr inbounds { ptr, i64, i64 }, ptr %a266, i32 0, i32 1 %t326 = load ptr, ptr %a1 %t327 = load %S.ast.Type, ptr %a306 %t328 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t326, %S.ast.Type %t327) store { ptr, i64, i64 } { ptr @.str.4571, i64 10, i64 0 }, ptr %a330 store { ptr, i64, i64 } %t328, ptr %a331 call void @finch_str_concat(ptr %a329, ptr %a330, ptr %a331) %t332 = load { ptr, i64, i64 }, ptr %a329 store { ptr, i64, i64 } %t332, ptr %a334 store { ptr, i64, i64 } { ptr @.str.4572, i64 8, i64 0 }, ptr %a335 call void @finch_str_concat(ptr %a333, ptr %a334, ptr %a335) %t336 = load { ptr, i64, i64 }, ptr %a333 %t337 = getelementptr inbounds %S.gen.Abi, ptr %a318, i32 0, i32 3 %t338 = load i64, ptr %t337 call void @finch_str_from_int(ptr %a339, i64 %t338) %t340 = load { ptr, i64, i64 }, ptr %a339 store { ptr, i64, i64 } %t336, ptr %a342 store { ptr, i64, i64 } %t340, ptr %a343 call void @finch_str_concat(ptr %a341, ptr %a342, ptr %a343) %t344 = load { ptr, i64, i64 }, ptr %a341 store { ptr, i64, i64 } %t344, ptr %a346 store { ptr, i64, i64 } { ptr @.str.4573, i64 3, i64 0 }, ptr %a347 call void @finch_str_concat(ptr %a345, ptr %a346, ptr %a347) %t348 = load { ptr, i64, i64 }, ptr %a345 %t349 = load i64, ptr %a267 call void @finch_str_from_int(ptr %a350, i64 %t349) %t351 = load { ptr, i64, i64 }, ptr %a350 store { ptr, i64, i64 } %t348, ptr %a353 store { ptr, i64, i64 } %t351, ptr %a354 call void @finch_str_concat(ptr %a352, ptr %a353, ptr %a354) %t355 = load { ptr, i64, i64 }, ptr %a352 %t356 = load i64, ptr %t325 %t357 = add i64 %t356, 1 call void @finch_arr_reserve(ptr %a266, i64 %t357, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t358 = load ptr, ptr %a266 %t359 = getelementptr inbounds { ptr, i64, i64 }, ptr %t358, i64 %t356 store { ptr, i64, i64 } %t355, ptr %t359 store i64 %t357, ptr %t325 %t360 = getelementptr inbounds { ptr, i64, i64 }, ptr %a288, i32 0, i32 1 %t361 = load ptr, ptr %a1 %t362 = load %S.ast.Type, ptr %a306 %t363 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t361, %S.ast.Type %t362) store { ptr, i64, i64 } %t363, ptr %a365 store { ptr, i64, i64 } { ptr @.str.4574, i64 1, i64 0 }, ptr %a366 call void @finch_str_concat(ptr %a364, ptr %a365, ptr %a366) %t367 = load { ptr, i64, i64 }, ptr %a364 %t368 = load ptr, ptr %a1 %t369 = load ptr, ptr %a1 %t370 = load %S.ast.Type, ptr %a306 %t371 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t369, %S.ast.Type %t370) %t372 = load i64, ptr %a267 call void @finch_str_from_int(ptr %a373, i64 %t372) %t374 = load { ptr, i64, i64 }, ptr %a373 store { ptr, i64, i64 } { ptr @.str.4575, i64 2, i64 0 }, ptr %a376 store { ptr, i64, i64 } %t374, ptr %a377 call void @finch_str_concat(ptr %a375, ptr %a376, ptr %a377) %t378 = load { ptr, i64, i64 }, ptr %a375 %t379 = call { ptr, i64, i64 } @finch.gen.load(ptr %t368, { ptr, i64, i64 } %t371, { ptr, i64, i64 } %t378) store { ptr, i64, i64 } %t367, ptr %a381 store { ptr, i64, i64 } %t379, ptr %a382 call void @finch_str_concat(ptr %a380, ptr %a381, ptr %a382) %t383 = load { ptr, i64, i64 }, ptr %a380 %t384 = load i64, ptr %t360 %t385 = add i64 %t384, 1 call void @finch_arr_reserve(ptr %a288, i64 %t385, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t386 = load ptr, ptr %a288 %t387 = getelementptr inbounds { ptr, i64, i64 }, ptr %t386, i64 %t384 store { ptr, i64, i64 } %t383, ptr %t387 store i64 %t385, ptr %t360 %t388 = load i64, ptr %a267 %t389 = add i64 %t388, 1 store i64 %t389, ptr %a267 br label %endif7073 else7072: %t390 = getelementptr inbounds %S.gen.Abi, ptr %a318, i32 0, i32 0 %t391 = load { ptr, i64, i64 }, ptr %t390 store { ptr, i64, i64 } %t391, ptr %a392 store { ptr, i64, i64 } { ptr @.str.4576, i64 8, i64 0 }, ptr %a393 %t394 = call i32 @finch_str_eq(ptr %a392, ptr %a393) %t395 = icmp ne i32 %t394, 0 br i1 %t395, label %then7074, label %else7075 then7074: %t396 = getelementptr inbounds { ptr, i64, i64 }, ptr %a266, i32 0, i32 1 %t397 = load i64, ptr %a267 call void @finch_str_from_int(ptr %a398, i64 %t397) %t399 = load { ptr, i64, i64 }, ptr %a398 store { ptr, i64, i64 } { ptr @.str.4577, i64 6, i64 0 }, ptr %a401 store { ptr, i64, i64 } %t399, ptr %a402 call void @finch_str_concat(ptr %a400, ptr %a401, ptr %a402) %t403 = load { ptr, i64, i64 }, ptr %a400 %t404 = load i64, ptr %t396 %t405 = add i64 %t404, 1 call void @finch_arr_reserve(ptr %a266, i64 %t405, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t406 = load ptr, ptr %a266 %t407 = getelementptr inbounds { ptr, i64, i64 }, ptr %t406, i64 %t404 store { ptr, i64, i64 } %t403, ptr %t407 store i64 %t405, ptr %t396 %t408 = getelementptr inbounds { ptr, i64, i64 }, ptr %a288, i32 0, i32 1 %t409 = load ptr, ptr %a1 %t410 = load %S.ast.Type, ptr %a306 %t411 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t409, %S.ast.Type %t410) store { ptr, i64, i64 } %t411, ptr %a413 store { ptr, i64, i64 } { ptr @.str.4578, i64 1, i64 0 }, ptr %a414 call void @finch_str_concat(ptr %a412, ptr %a413, ptr %a414) %t415 = load { ptr, i64, i64 }, ptr %a412 %t416 = load ptr, ptr %a1 %t417 = load ptr, ptr %a1 %t418 = load %S.ast.Type, ptr %a306 %t419 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t417, %S.ast.Type %t418) %t420 = load i64, ptr %a267 call void @finch_str_from_int(ptr %a421, i64 %t420) %t422 = load { ptr, i64, i64 }, ptr %a421 store { ptr, i64, i64 } { ptr @.str.4579, i64 2, i64 0 }, ptr %a424 store { ptr, i64, i64 } %t422, ptr %a425 call void @finch_str_concat(ptr %a423, ptr %a424, ptr %a425) %t426 = load { ptr, i64, i64 }, ptr %a423 %t427 = call { ptr, i64, i64 } @finch.gen.load(ptr %t416, { ptr, i64, i64 } %t419, { ptr, i64, i64 } %t426) store { ptr, i64, i64 } %t415, ptr %a429 store { ptr, i64, i64 } %t427, ptr %a430 call void @finch_str_concat(ptr %a428, ptr %a429, ptr %a430) %t431 = load { ptr, i64, i64 }, ptr %a428 %t432 = load i64, ptr %t408 %t433 = add i64 %t432, 1 call void @finch_arr_reserve(ptr %a288, i64 %t433, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t434 = load ptr, ptr %a288 %t435 = getelementptr inbounds { ptr, i64, i64 }, ptr %t434, i64 %t432 store { ptr, i64, i64 } %t431, ptr %t435 store i64 %t433, ptr %t408 %t436 = load i64, ptr %a267 %t437 = add i64 %t436, 1 store i64 %t437, ptr %a267 br label %endif7076 else7075: %t438 = getelementptr inbounds %S.gen.Abi, ptr %a318, i32 0, i32 0 %t439 = load { ptr, i64, i64 }, ptr %t438 store { ptr, i64, i64 } %t439, ptr %a440 store { ptr, i64, i64 } { ptr @.str.4580, i64 6, i64 0 }, ptr %a441 %t442 = call i32 @finch_str_eq(ptr %a440, ptr %a441) %t443 = icmp ne i32 %t442, 0 br i1 %t443, label %then7077, label %else7078 then7077: %t444 = load ptr, ptr %a1 %t445 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t444, { ptr, i64, i64 } { ptr @.str.4581, i64 9, i64 0 }) store { ptr, i64, i64 } %t445, ptr %a446 %t447 = getelementptr inbounds %S.gen.Abi, ptr %a318, i32 0, i32 1 %t448 = getelementptr inbounds { ptr, i64, i64 }, ptr %t447, i32 0, i32 1 %t449 = load i64, ptr %t448 store i64 0, ptr %a450 br label %for.cond7080 for.cond7080: %t451 = load i64, ptr %a450 %t452 = icmp slt i64 %t451, %t449 br i1 %t452, label %for.body7081, label %for.end7083 for.body7081: %t453 = getelementptr inbounds { ptr, i64, i64 }, ptr %a266, i32 0, i32 1 %t454 = getelementptr inbounds %S.gen.Abi, ptr %a318, i32 0, i32 1 %t455 = load i64, ptr %a450 %t456 = load { ptr, i64, i64 }, ptr %t454 %t457 = extractvalue { ptr, i64, i64 } %t456, 1 %t458 = icmp uge i64 %t455, %t457 br i1 %t458, label %range7084, label %inrange7085 range7084: call void @finch_panic_index(ptr @.str.4582, i64 4054, i64 %t455, i64 %t457) unreachable inrange7085: %t459 = extractvalue { ptr, i64, i64 } %t456, 0 %t460 = getelementptr inbounds { ptr, i64, i64 }, ptr %t459, i64 %t455 %t461 = load { ptr, i64, i64 }, ptr %t460 store { ptr, i64, i64 } %t461, ptr %a463 store { ptr, i64, i64 } { ptr @.str.4583, i64 3, i64 0 }, ptr %a464 call void @finch_str_concat(ptr %a462, ptr %a463, ptr %a464) %t465 = load { ptr, i64, i64 }, ptr %a462 %t466 = load i64, ptr %a267 call void @finch_str_from_int(ptr %a467, i64 %t466) %t468 = load { ptr, i64, i64 }, ptr %a467 store { ptr, i64, i64 } %t465, ptr %a470 store { ptr, i64, i64 } %t468, ptr %a471 call void @finch_str_concat(ptr %a469, ptr %a470, ptr %a471) %t472 = load { ptr, i64, i64 }, ptr %a469 %t473 = load i64, ptr %t453 %t474 = add i64 %t473, 1 call void @finch_arr_reserve(ptr %a266, i64 %t474, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t475 = load ptr, ptr %a266 %t476 = getelementptr inbounds { ptr, i64, i64 }, ptr %t475, i64 %t473 store { ptr, i64, i64 } %t472, ptr %t476 store i64 %t474, ptr %t453 %t477 = load ptr, ptr %a1 %t478 = getelementptr inbounds %S.gen.Abi, ptr %a318, i32 0, i32 1 %t479 = load i64, ptr %a450 %t480 = load { ptr, i64, i64 }, ptr %t478 %t481 = extractvalue { ptr, i64, i64 } %t480, 1 %t482 = icmp uge i64 %t479, %t481 br i1 %t482, label %range7086, label %inrange7087 range7086: call void @finch_panic_index(ptr @.str.4584, i64 4055, i64 %t479, i64 %t481) unreachable inrange7087: %t483 = extractvalue { ptr, i64, i64 } %t480, 0 %t484 = getelementptr inbounds { ptr, i64, i64 }, ptr %t483, i64 %t479 %t485 = load { ptr, i64, i64 }, ptr %t484 %t486 = load i64, ptr %a267 call void @finch_str_from_int(ptr %a487, i64 %t486) %t488 = load { ptr, i64, i64 }, ptr %a487 store { ptr, i64, i64 } { ptr @.str.4585, i64 2, i64 0 }, ptr %a490 store { ptr, i64, i64 } %t488, ptr %a491 call void @finch_str_concat(ptr %a489, ptr %a490, ptr %a491) %t492 = load { ptr, i64, i64 }, ptr %a489 %t493 = load ptr, ptr %a1 %t494 = load { ptr, i64, i64 }, ptr %a446 store { ptr, i64, i64 } { ptr @.str.4586, i64 31, i64 0 }, ptr %a496 store { ptr, i64, i64 } %t494, ptr %a497 call void @finch_str_concat(ptr %a495, ptr %a496, ptr %a497) %t498 = load { ptr, i64, i64 }, ptr %a495 store { ptr, i64, i64 } %t498, ptr %a500 store { ptr, i64, i64 } { ptr @.str.4587, i64 6, i64 0 }, ptr %a501 call void @finch_str_concat(ptr %a499, ptr %a500, ptr %a501) %t502 = load { ptr, i64, i64 }, ptr %a499 %t503 = load i64, ptr %a450 %t504 = mul i64 8, %t503 call void @finch_str_from_int(ptr %a505, i64 %t504) %t506 = load { ptr, i64, i64 }, ptr %a505 store { ptr, i64, i64 } %t502, ptr %a508 store { ptr, i64, i64 } %t506, ptr %a509 call void @finch_str_concat(ptr %a507, ptr %a508, ptr %a509) %t510 = load { ptr, i64, i64 }, ptr %a507 %t511 = call { ptr, i64, i64 } @finch.gen.op(ptr %t493, { ptr, i64, i64 } %t510) call void @finch.gen.store(ptr %t477, { ptr, i64, i64 } %t485, { ptr, i64, i64 } %t492, { ptr, i64, i64 } %t511) %t512 = load i64, ptr %a267 %t513 = add i64 %t512, 1 store i64 %t513, ptr %a267 br label %for.step7082 for.step7082: %t514 = load i64, ptr %a450 %t515 = add i64 %t514, 1 store i64 %t515, ptr %a450 br label %for.cond7080 for.end7083: %t516 = getelementptr inbounds { ptr, i64, i64 }, ptr %a288, i32 0, i32 1 %t517 = load ptr, ptr %a1 %t518 = load %S.ast.Type, ptr %a306 %t519 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t517, %S.ast.Type %t518) store { ptr, i64, i64 } %t519, ptr %a521 store { ptr, i64, i64 } { ptr @.str.4588, i64 1, i64 0 }, ptr %a522 call void @finch_str_concat(ptr %a520, ptr %a521, ptr %a522) %t523 = load { ptr, i64, i64 }, ptr %a520 %t524 = load ptr, ptr %a1 %t525 = load ptr, ptr %a1 %t526 = load %S.ast.Type, ptr %a306 %t527 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t525, %S.ast.Type %t526) %t528 = load { ptr, i64, i64 }, ptr %a446 %t529 = call { ptr, i64, i64 } @finch.gen.load(ptr %t524, { ptr, i64, i64 } %t527, { ptr, i64, i64 } %t528) store { ptr, i64, i64 } %t523, ptr %a531 store { ptr, i64, i64 } %t529, ptr %a532 call void @finch_str_concat(ptr %a530, ptr %a531, ptr %a532) %t533 = load { ptr, i64, i64 }, ptr %a530 %t534 = load i64, ptr %t516 %t535 = add i64 %t534, 1 call void @finch_arr_reserve(ptr %a288, i64 %t535, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t536 = load ptr, ptr %a288 %t537 = getelementptr inbounds { ptr, i64, i64 }, ptr %t536, i64 %t534 store { ptr, i64, i64 } %t533, ptr %t537 store i64 %t535, ptr %t516 br label %endif7079 else7078: %t538 = getelementptr inbounds { ptr, i64, i64 }, ptr %a266, i32 0, i32 1 %t539 = load ptr, ptr %a1 %t540 = load %S.ast.Type, ptr %a306 %t541 = call { ptr, i64, i64 } @finch.gen.cLL(ptr %t539, %S.ast.Type %t540) %t542 = load ptr, ptr %a1 %t543 = load %S.ast.Type, ptr %a306 %t544 = call { ptr, i64, i64 } @finch.gen.cExt(ptr %t542, %S.ast.Type %t543) store { ptr, i64, i64 } %t541, ptr %a546 store { ptr, i64, i64 } %t544, ptr %a547 call void @finch_str_concat(ptr %a545, ptr %a546, ptr %a547) %t548 = load { ptr, i64, i64 }, ptr %a545 store { ptr, i64, i64 } %t548, ptr %a550 store { ptr, i64, i64 } { ptr @.str.4589, i64 3, i64 0 }, ptr %a551 call void @finch_str_concat(ptr %a549, ptr %a550, ptr %a551) %t552 = load { ptr, i64, i64 }, ptr %a549 %t553 = load i64, ptr %a267 call void @finch_str_from_int(ptr %a554, i64 %t553) %t555 = load { ptr, i64, i64 }, ptr %a554 store { ptr, i64, i64 } %t552, ptr %a557 store { ptr, i64, i64 } %t555, ptr %a558 call void @finch_str_concat(ptr %a556, ptr %a557, ptr %a558) %t559 = load { ptr, i64, i64 }, ptr %a556 %t560 = load i64, ptr %t538 %t561 = add i64 %t560, 1 call void @finch_arr_reserve(ptr %a266, i64 %t561, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t562 = load ptr, ptr %a266 %t563 = getelementptr inbounds { ptr, i64, i64 }, ptr %t562, i64 %t560 store { ptr, i64, i64 } %t559, ptr %t563 store i64 %t561, ptr %t538 %t564 = getelementptr inbounds { ptr, i64, i64 }, ptr %a288, i32 0, i32 1 %t565 = load ptr, ptr %a1 %t566 = load %S.ast.Type, ptr %a306 %t567 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t565, %S.ast.Type %t566) store { ptr, i64, i64 } %t567, ptr %a569 store { ptr, i64, i64 } { ptr @.str.4590, i64 3, i64 0 }, ptr %a570 call void @finch_str_concat(ptr %a568, ptr %a569, ptr %a570) %t571 = load { ptr, i64, i64 }, ptr %a568 %t572 = load i64, ptr %a267 call void @finch_str_from_int(ptr %a573, i64 %t572) %t574 = load { ptr, i64, i64 }, ptr %a573 store { ptr, i64, i64 } %t571, ptr %a576 store { ptr, i64, i64 } %t574, ptr %a577 call void @finch_str_concat(ptr %a575, ptr %a576, ptr %a577) %t578 = load { ptr, i64, i64 }, ptr %a575 %t579 = load i64, ptr %t564 %t580 = add i64 %t579, 1 call void @finch_arr_reserve(ptr %a288, i64 %t580, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t581 = load ptr, ptr %a288 %t582 = getelementptr inbounds { ptr, i64, i64 }, ptr %t581, i64 %t579 store { ptr, i64, i64 } %t578, ptr %t582 store i64 %t580, ptr %t564 %t583 = load i64, ptr %a267 %t584 = add i64 %t583, 1 store i64 %t584, ptr %a267 br label %endif7079 endif7079: br label %endif7076 endif7076: br label %endif7073 endif7073: br label %for.step7065 for.step7065: %t585 = load i64, ptr %a292 %t586 = add i64 %t585, 1 store i64 %t586, ptr %a292 br label %for.cond7063 for.end7066: %t587 = load ptr, ptr %a1 %t588 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 %t589 = load %S.ast.Type, ptr %t588 %t590 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t587, %S.ast.Type %t589) store { ptr, i64, i64 } { ptr @.str.4591, i64 5, i64 0 }, ptr %a592 store { ptr, i64, i64 } %t590, ptr %a593 call void @finch_str_concat(ptr %a591, ptr %a592, ptr %a593) %t594 = load { ptr, i64, i64 }, ptr %a591 store { ptr, i64, i64 } %t594, ptr %a596 store { ptr, i64, i64 } { ptr @.str.4592, i64 1, i64 0 }, ptr %a597 call void @finch_str_concat(ptr %a595, ptr %a596, ptr %a597) %t598 = load { ptr, i64, i64 }, ptr %a595 %t599 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 11 %t600 = load { ptr, i64, i64 }, ptr %t599 store { ptr, i64, i64 } %t598, ptr %a602 store { ptr, i64, i64 } %t600, ptr %a603 call void @finch_str_concat(ptr %a601, ptr %a602, ptr %a603) %t604 = load { ptr, i64, i64 }, ptr %a601 store { ptr, i64, i64 } %t604, ptr %a606 store { ptr, i64, i64 } { ptr @.str.4593, i64 1, i64 0 }, ptr %a607 call void @finch_str_concat(ptr %a605, ptr %a606, ptr %a607) %t608 = load { ptr, i64, i64 }, ptr %a605 %t609 = getelementptr inbounds { ptr, i64, i64 }, ptr %a288, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.4594, i64 2, i64 0 }, ptr %a610 call void @finch_str_join(ptr %a611, ptr %a288, ptr %a610) %t612 = load { ptr, i64, i64 }, ptr %a611 store { ptr, i64, i64 } %t608, ptr %a614 store { ptr, i64, i64 } %t612, ptr %a615 call void @finch_str_concat(ptr %a613, ptr %a614, ptr %a615) %t616 = load { ptr, i64, i64 }, ptr %a613 store { ptr, i64, i64 } %t616, ptr %a618 store { ptr, i64, i64 } { ptr @.str.4595, i64 1, i64 0 }, ptr %a619 call void @finch_str_concat(ptr %a617, ptr %a618, ptr %a619) %t620 = load { ptr, i64, i64 }, ptr %a617 store { ptr, i64, i64 } %t620, ptr %a621 store { ptr, i64, i64 } { ptr @.str.4596, i64 0, i64 0 }, ptr %a622 %t623 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 %t624 = getelementptr inbounds %S.ast.Type, ptr %t623, i32 0, i32 0 %t625 = load { ptr, i64, i64 }, ptr %t624 store { ptr, i64, i64 } %t625, ptr %a626 store { ptr, i64, i64 } { ptr @.str.4597, i64 4, i64 0 }, ptr %a627 %t628 = call i32 @finch_str_eq(ptr %a626, ptr %a627) %t629 = icmp ne i32 %t628, 0 br i1 %t629, label %then7088, label %else7089 then7088: %t630 = load ptr, ptr %a1 %t631 = load { ptr, i64, i64 }, ptr %a621 call void @finch.gen.emit(ptr %t630, { ptr, i64, i64 } %t631) %t632 = load ptr, ptr %a1 call void @finch.gen.emit(ptr %t632, { ptr, i64, i64 } { ptr @.str.4598, i64 8, i64 0 }) br label %endif7090 else7089: %t633 = getelementptr inbounds %S.gen.Plan, ptr %a262, i32 0, i32 3 %t634 = load i1, ptr %t633 br i1 %t634, label %then7091, label %else7092 then7091: %t635 = load ptr, ptr %a1 %t636 = load ptr, ptr %a1 %t637 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 %t638 = load %S.ast.Type, ptr %t637 %t639 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t636, %S.ast.Type %t638) %t640 = load ptr, ptr %a1 %t641 = load { ptr, i64, i64 }, ptr %a621 %t642 = call { ptr, i64, i64 } @finch.gen.op(ptr %t640, { ptr, i64, i64 } %t641) %t643 = load { ptr, i64, i64 }, ptr %a268 call void @finch.gen.store(ptr %t635, { ptr, i64, i64 } %t639, { ptr, i64, i64 } %t642, { ptr, i64, i64 } %t643) %t644 = load ptr, ptr %a1 call void @finch.gen.emit(ptr %t644, { ptr, i64, i64 } { ptr @.str.4599, i64 8, i64 0 }) br label %endif7093 else7092: %t645 = getelementptr inbounds %S.gen.Plan, ptr %a262, i32 0, i32 0 %t646 = getelementptr inbounds %S.gen.Abi, ptr %t645, i32 0, i32 0 %t647 = load { ptr, i64, i64 }, ptr %t646 store { ptr, i64, i64 } %t647, ptr %a648 store { ptr, i64, i64 } { ptr @.str.4600, i64 6, i64 0 }, ptr %a649 %t650 = call i32 @finch_str_eq(ptr %a648, ptr %a649) %t651 = icmp ne i32 %t650, 0 br i1 %t651, label %then7094, label %else7095 then7094: %t652 = load ptr, ptr %a1 %t653 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t652, { ptr, i64, i64 } { ptr @.str.4601, i64 9, i64 0 }) store { ptr, i64, i64 } %t653, ptr %a654 %t655 = load ptr, ptr %a1 %t656 = load ptr, ptr %a1 %t657 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 %t658 = load %S.ast.Type, ptr %t657 %t659 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t656, %S.ast.Type %t658) %t660 = load ptr, ptr %a1 %t661 = load { ptr, i64, i64 }, ptr %a621 %t662 = call { ptr, i64, i64 } @finch.gen.op(ptr %t660, { ptr, i64, i64 } %t661) %t663 = load { ptr, i64, i64 }, ptr %a654 call void @finch.gen.store(ptr %t655, { ptr, i64, i64 } %t659, { ptr, i64, i64 } %t662, { ptr, i64, i64 } %t663) %t664 = load ptr, ptr %a1 %t665 = getelementptr inbounds %S.gen.Plan, ptr %a262, i32 0, i32 0 %t666 = getelementptr inbounds %S.gen.Abi, ptr %t665, i32 0, i32 2 %t667 = load { ptr, i64, i64 }, ptr %t666 store { ptr, i64, i64 } { ptr @.str.4602, i64 4, i64 0 }, ptr %a669 store { ptr, i64, i64 } %t667, ptr %a670 call void @finch_str_concat(ptr %a668, ptr %a669, ptr %a670) %t671 = load { ptr, i64, i64 }, ptr %a668 store { ptr, i64, i64 } %t671, ptr %a673 store { ptr, i64, i64 } { ptr @.str.4603, i64 1, i64 0 }, ptr %a674 call void @finch_str_concat(ptr %a672, ptr %a673, ptr %a674) %t675 = load { ptr, i64, i64 }, ptr %a672 %t676 = load ptr, ptr %a1 %t677 = getelementptr inbounds %S.gen.Plan, ptr %a262, i32 0, i32 0 %t678 = getelementptr inbounds %S.gen.Abi, ptr %t677, i32 0, i32 2 %t679 = load { ptr, i64, i64 }, ptr %t678 %t680 = load { ptr, i64, i64 }, ptr %a654 %t681 = call { ptr, i64, i64 } @finch.gen.load(ptr %t676, { ptr, i64, i64 } %t679, { ptr, i64, i64 } %t680) store { ptr, i64, i64 } %t675, ptr %a683 store { ptr, i64, i64 } %t681, ptr %a684 call void @finch_str_concat(ptr %a682, ptr %a683, ptr %a684) %t685 = load { ptr, i64, i64 }, ptr %a682 call void @finch.gen.emit(ptr %t664, { ptr, i64, i64 } %t685) br label %endif7096 else7095: %t686 = load ptr, ptr %a1 %t687 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 %t688 = load %S.ast.Type, ptr %t687 %t689 = call { ptr, i64, i64 } @finch.gen.cExt(ptr %t686, %S.ast.Type %t688) store { ptr, i64, i64 } %t689, ptr %a622 %t690 = load ptr, ptr %a1 %t691 = load ptr, ptr %a1 %t692 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 %t693 = load %S.ast.Type, ptr %t692 %t694 = call { ptr, i64, i64 } @finch.gen.cLL(ptr %t691, %S.ast.Type %t693) store { ptr, i64, i64 } { ptr @.str.4604, i64 4, i64 0 }, ptr %a696 store { ptr, i64, i64 } %t694, ptr %a697 call void @finch_str_concat(ptr %a695, ptr %a696, ptr %a697) %t698 = load { ptr, i64, i64 }, ptr %a695 store { ptr, i64, i64 } %t698, ptr %a700 store { ptr, i64, i64 } { ptr @.str.4605, i64 1, i64 0 }, ptr %a701 call void @finch_str_concat(ptr %a699, ptr %a700, ptr %a701) %t702 = load { ptr, i64, i64 }, ptr %a699 %t703 = load ptr, ptr %a1 %t704 = load { ptr, i64, i64 }, ptr %a621 %t705 = call { ptr, i64, i64 } @finch.gen.op(ptr %t703, { ptr, i64, i64 } %t704) store { ptr, i64, i64 } %t702, ptr %a707 store { ptr, i64, i64 } %t705, ptr %a708 call void @finch_str_concat(ptr %a706, ptr %a707, ptr %a708) %t709 = load { ptr, i64, i64 }, ptr %a706 call void @finch.gen.emit(ptr %t690, { ptr, i64, i64 } %t709) br label %endif7096 endif7096: br label %endif7093 endif7093: br label %endif7090 endif7090: %t710 = load ptr, ptr %a1 %t711 = load %S.gen.Saved, ptr %a265 %t712 = load { ptr, i64, i64 }, ptr %a622 store { ptr, i64, i64 } { ptr @.str.4606, i64 15, i64 0 }, ptr %a714 store { ptr, i64, i64 } %t712, ptr %a715 call void @finch_str_concat(ptr %a713, ptr %a714, ptr %a715) %t716 = load { ptr, i64, i64 }, ptr %a713 store { ptr, i64, i64 } %t716, ptr %a718 store { ptr, i64, i64 } { ptr @.str.4607, i64 1, i64 0 }, ptr %a719 call void @finch_str_concat(ptr %a717, ptr %a718, ptr %a719) %t720 = load { ptr, i64, i64 }, ptr %a717 %t721 = getelementptr inbounds %S.gen.Plan, ptr %a262, i32 0, i32 2 %t722 = load { ptr, i64, i64 }, ptr %t721 store { ptr, i64, i64 } %t720, ptr %a724 store { ptr, i64, i64 } %t722, ptr %a725 call void @finch_str_concat(ptr %a723, ptr %a724, ptr %a725) %t726 = load { ptr, i64, i64 }, ptr %a723 store { ptr, i64, i64 } %t726, ptr %a728 store { ptr, i64, i64 } { ptr @.str.4608, i64 1, i64 0 }, ptr %a729 call void @finch_str_concat(ptr %a727, ptr %a728, ptr %a729) %t730 = load { ptr, i64, i64 }, ptr %a727 %t731 = load { ptr, i64, i64 }, ptr %a35 store { ptr, i64, i64 } %t730, ptr %a733 store { ptr, i64, i64 } %t731, ptr %a734 call void @finch_str_concat(ptr %a732, ptr %a733, ptr %a734) %t735 = load { ptr, i64, i64 }, ptr %a732 store { ptr, i64, i64 } %t735, ptr %a737 store { ptr, i64, i64 } { ptr @.str.4609, i64 1, i64 0 }, ptr %a738 call void @finch_str_concat(ptr %a736, ptr %a737, ptr %a738) %t739 = load { ptr, i64, i64 }, ptr %a736 %t740 = getelementptr inbounds { ptr, i64, i64 }, ptr %a266, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.4610, i64 2, i64 0 }, ptr %a741 call void @finch_str_join(ptr %a742, ptr %a266, ptr %a741) %t743 = load { ptr, i64, i64 }, ptr %a742 store { ptr, i64, i64 } %t739, ptr %a745 store { ptr, i64, i64 } %t743, ptr %a746 call void @finch_str_concat(ptr %a744, ptr %a745, ptr %a746) %t747 = load { ptr, i64, i64 }, ptr %a744 store { ptr, i64, i64 } %t747, ptr %a749 store { ptr, i64, i64 } { ptr @.str.4611, i64 1, i64 0 }, ptr %a750 call void @finch_str_concat(ptr %a748, ptr %a749, ptr %a750) %t751 = load { ptr, i64, i64 }, ptr %a748 call void @finch.gen.endHelper(ptr %t710, %S.gen.Saved %t711, { ptr, i64, i64 } %t751) %t752 = load { ptr, i64, i64 }, ptr %a35 store { ptr, i64, i64 } %t752, ptr %a753 call void @finch_str_copy(ptr %a754, ptr %a753) %t755 = load { ptr, i64, i64 }, ptr %a754 ret { ptr, i64, i64 } %t755 } define internal %S.gen.Val @finch.gen.enumFrom(ptr %p0, %S.ast.Node %p1, i64 %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a3 = alloca i64, align 16 %a14 = alloca %S.gen.EnumDef, align 16 %a15 = alloca %S.gen.EnumDef, align 16 %a17 = alloca %S.gen.EnumDef, align 16 %a31 = alloca %S.gen.Val, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca %S.ast.Type, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca i64, align 16 %a82 = alloca i64, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca { ptr, i64, i64 }, align 16 %a104 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca { ptr, i64, i64 }, align 16 %a110 = alloca { ptr, i64, i64 }, align 16 %a114 = alloca { ptr, i64, i64 }, align 16 %a115 = alloca { ptr, i64, i64 }, align 16 %a119 = alloca %S.ast.Type, align 16 %a120 = alloca %S.ast.Type, align 16 %a130 = alloca { ptr, i64, i64 }, align 16 %a131 = alloca { ptr, i64, i64 }, align 16 %a135 = alloca i64, align 16 %a140 = alloca { ptr, i64, i64 }, align 16 %a141 = alloca { ptr, i64, i64 }, align 16 %a142 = alloca { ptr, i64, i64 }, align 16 %a144 = alloca { ptr, i64, i64 }, align 16 %a145 = alloca { ptr, i64, i64 }, align 16 %a146 = alloca { ptr, i64, i64 }, align 16 %a156 = alloca { ptr, i64, i64 }, align 16 %a158 = alloca { ptr, i64, i64 }, align 16 %a159 = alloca { ptr, i64, i64 }, align 16 %a160 = alloca { ptr, i64, i64 }, align 16 %a163 = alloca { ptr, i64, i64 }, align 16 %a167 = alloca { ptr, i64, i64 }, align 16 %a168 = alloca { ptr, i64, i64 }, align 16 %a172 = alloca { ptr, i64, i64 }, align 16 %a173 = alloca { ptr, i64, i64 }, align 16 %a174 = alloca { ptr, i64, i64 }, align 16 %a176 = alloca { ptr, i64, i64 }, align 16 %a177 = alloca { ptr, i64, i64 }, align 16 %a178 = alloca { ptr, i64, i64 }, align 16 %a181 = alloca { ptr, i64, i64 }, align 16 %a182 = alloca { ptr, i64, i64 }, align 16 %a183 = alloca { ptr, i64, i64 }, align 16 %a191 = alloca { ptr, i64, i64 }, align 16 %a192 = alloca { ptr, i64, i64 }, align 16 %a193 = alloca { ptr, i64, i64 }, align 16 %a195 = alloca { ptr, i64, i64 }, align 16 %a196 = alloca { ptr, i64, i64 }, align 16 %a197 = alloca { ptr, i64, i64 }, align 16 %a202 = alloca { ptr, i64, i64 }, align 16 %a203 = alloca { ptr, i64, i64 }, align 16 %a204 = alloca { ptr, i64, i64 }, align 16 %a209 = alloca { ptr, i64, i64 }, align 16 %a210 = alloca { ptr, i64, i64 }, align 16 %a211 = alloca { ptr, i64, i64 }, align 16 %a213 = alloca { ptr, i64, i64 }, align 16 %a214 = alloca { ptr, i64, i64 }, align 16 %a215 = alloca { ptr, i64, i64 }, align 16 %a220 = alloca %S.ast.Type, align 16 %a221 = alloca %S.ast.Type, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 store i64 %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = icmp eq ptr %t4, null br i1 %t5, label %panic7097, label %ok7098 panic7097: call void @finch_panic(ptr @.str.4612, i64 4087, ptr @.str.4613) unreachable ok7098: %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 20 %t7 = load i64, ptr %a3 %t8 = load { ptr, i64, i64 }, ptr %t6 %t9 = extractvalue { ptr, i64, i64 } %t8, 1 %t10 = icmp uge i64 %t7, %t9 br i1 %t10, label %range7099, label %inrange7100 range7099: call void @finch_panic_index(ptr @.str.4614, i64 4087, i64 %t7, i64 %t9) unreachable inrange7100: %t11 = extractvalue { ptr, i64, i64 } %t8, 0 %t12 = getelementptr inbounds %S.gen.EnumDef, ptr %t11, i64 %t7 %t13 = load %S.gen.EnumDef, ptr %t12 store %S.gen.EnumDef %t13, ptr %a14 call void @finch.copy.S_gen_EnumDef(ptr %a15, ptr %a14) %t16 = load %S.gen.EnumDef, ptr %a15 store %S.gen.EnumDef %t16, ptr %a17 %t18 = load ptr, ptr %a1 %t19 = load %S.ast.Node, ptr %a2 %t20 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 1 %t21 = load { ptr, i64, i64 }, ptr %t20 call void @finch.gen.checkArgs(ptr %t18, %S.ast.Node %t19, i64 0, i64 1, { ptr, i64, i64 } %t21) %t22 = load ptr, ptr %a1 %t23 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t24 = load { ptr, i64, i64 }, ptr %t23 %t25 = extractvalue { ptr, i64, i64 } %t24, 1 %t26 = icmp uge i64 0, %t25 br i1 %t26, label %range7101, label %inrange7102 range7101: call void @finch_panic_index(ptr @.str.4615, i64 4089, i64 0, i64 %t25) unreachable inrange7102: %t27 = extractvalue { ptr, i64, i64 } %t24, 0 %t28 = getelementptr inbounds %S.ast.Node, ptr %t27, i64 0 %t29 = load %S.ast.Node, ptr %t28 %t30 = call %S.gen.Val @finch.gen.expr(ptr %t22, %S.ast.Node %t29) store %S.gen.Val %t30, ptr %a31 %t32 = getelementptr inbounds %S.gen.Val, ptr %a31, i32 0, i32 1 %t33 = load %S.ast.Type, ptr %t32 %t34 = call i1 @finch.gen.isInt(%S.ast.Type %t33) %t35 = xor i1 %t34, true br i1 %t35, label %then7103, label %endif7105 then7103: %t36 = load ptr, ptr %a1 %t37 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t38 = load { ptr, i64, i64 }, ptr %t37 %t39 = extractvalue { ptr, i64, i64 } %t38, 1 %t40 = icmp uge i64 0, %t39 br i1 %t40, label %range7106, label %inrange7107 range7106: call void @finch_panic_index(ptr @.str.4616, i64 4091, i64 0, i64 %t39) unreachable inrange7107: %t41 = extractvalue { ptr, i64, i64 } %t38, 0 %t42 = getelementptr inbounds %S.ast.Node, ptr %t41, i64 0 %t43 = load %S.ast.Node, ptr %t42 %t44 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 1 %t45 = load { ptr, i64, i64 }, ptr %t44 store { ptr, i64, i64 } %t45, ptr %a47 store { ptr, i64, i64 } { ptr @.str.4617, i64 54, i64 0 }, ptr %a48 call void @finch_str_concat(ptr %a46, ptr %a47, ptr %a48) %t49 = load { ptr, i64, i64 }, ptr %a46 %t50 = getelementptr inbounds %S.gen.Val, ptr %a31, i32 0, i32 1 %t51 = load %S.ast.Type, ptr %t50 %t52 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t51) store { ptr, i64, i64 } %t49, ptr %a54 store { ptr, i64, i64 } %t52, ptr %a55 call void @finch_str_concat(ptr %a53, ptr %a54, ptr %a55) %t56 = load { ptr, i64, i64 }, ptr %a53 call void @finch.gen.fail(ptr %t36, %S.ast.Node %t43, { ptr, i64, i64 } %t56) br label %endif7105 endif7105: %t57 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.4618, i64 4, i64 0 }, 0 %t58 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 1 %t59 = load { ptr, i64, i64 }, ptr %t58 store { ptr, i64, i64 } %t59, ptr %a60 call void @finch_str_copy(ptr %a61, ptr %a60) %t62 = load { ptr, i64, i64 }, ptr %a61 %t63 = insertvalue %S.ast.Type %t57, { ptr, i64, i64 } %t62, 2 %t64 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 0 %t65 = load { ptr, i64, i64 }, ptr %t64 store { ptr, i64, i64 } %t65, ptr %a66 call void @finch_str_copy(ptr %a67, ptr %a66) %t68 = load { ptr, i64, i64 }, ptr %a67 %t69 = insertvalue %S.ast.Type %t63, { ptr, i64, i64 } %t68, 3 store %S.ast.Type %t69, ptr %a70 %t71 = getelementptr inbounds %S.gen.Val, ptr %a31, i32 0, i32 3 %t72 = load i1, ptr %t71 br i1 %t72, label %then7108, label %endif7110 then7108: %t73 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 3 %t74 = getelementptr inbounds { ptr, i64, i64 }, ptr %t73, i32 0, i32 1 %t75 = getelementptr inbounds %S.gen.Val, ptr %a31, i32 0, i32 0 %t76 = load { ptr, i64, i64 }, ptr %t75 store { ptr, i64, i64 } %t76, ptr %a77 %t78 = call i64 @finch_str_to_int(ptr %a77, ptr @.str.4619, i64 4095) store i64 -1, ptr %a79 %t80 = load i64, ptr %t74 %t81 = load ptr, ptr %t73 store i64 0, ptr %a82 br label %find.cond7111 find.cond7111: %t83 = load i64, ptr %a82 %t84 = icmp slt i64 %t83, %t80 br i1 %t84, label %find.body7112, label %find.end7115 find.body7112: %t85 = getelementptr inbounds i64, ptr %t81, i64 %t83 %t86 = load i64, ptr %t85 %t87 = icmp eq i64 %t86, %t78 br i1 %t87, label %find.hit7113, label %find.next7114 find.hit7113: store i64 %t83, ptr %a79 br label %find.end7115 find.next7114: %t88 = add i64 %t83, 1 store i64 %t88, ptr %a82 br label %find.cond7111 find.end7115: %t89 = load i64, ptr %a79 %t90 = icmp sge i64 %t89, 0 %t91 = xor i1 %t90, true br i1 %t91, label %then7116, label %endif7118 then7116: %t92 = load ptr, ptr %a1 %t93 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t94 = load { ptr, i64, i64 }, ptr %t93 %t95 = extractvalue { ptr, i64, i64 } %t94, 1 %t96 = icmp uge i64 0, %t95 br i1 %t96, label %range7119, label %inrange7120 range7119: call void @finch_panic_index(ptr @.str.4620, i64 4096, i64 0, i64 %t95) unreachable inrange7120: %t97 = extractvalue { ptr, i64, i64 } %t94, 0 %t98 = getelementptr inbounds %S.ast.Node, ptr %t97, i64 0 %t99 = load %S.ast.Node, ptr %t98 %t100 = getelementptr inbounds %S.gen.Val, ptr %a31, i32 0, i32 0 %t101 = load { ptr, i64, i64 }, ptr %t100 store { ptr, i64, i64 } %t101, ptr %a103 store { ptr, i64, i64 } { ptr @.str.4621, i64 37, i64 0 }, ptr %a104 call void @finch_str_concat(ptr %a102, ptr %a103, ptr %a104) %t105 = load { ptr, i64, i64 }, ptr %a102 %t106 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 1 %t107 = load { ptr, i64, i64 }, ptr %t106 store { ptr, i64, i64 } %t105, ptr %a109 store { ptr, i64, i64 } %t107, ptr %a110 call void @finch_str_concat(ptr %a108, ptr %a109, ptr %a110) %t111 = load { ptr, i64, i64 }, ptr %a108 call void @finch.gen.fail(ptr %t92, %S.ast.Node %t99, { ptr, i64, i64 } %t111) br label %endif7118 endif7118: %t112 = getelementptr inbounds %S.gen.Val, ptr %a31, i32 0, i32 0 %t113 = load { ptr, i64, i64 }, ptr %t112 store { ptr, i64, i64 } %t113, ptr %a114 call void @finch_str_copy(ptr %a115, ptr %a114) %t116 = load { ptr, i64, i64 }, ptr %a115 %t117 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t116, 0 %t118 = load %S.ast.Type, ptr %a70 store %S.ast.Type %t118, ptr %a119 call void @finch.copy.S_ast_Type(ptr %a120, ptr %a119) %t121 = load %S.ast.Type, ptr %a120 %t122 = insertvalue %S.gen.Val %t117, %S.ast.Type %t121, 1 ret %S.gen.Val %t122 endif7110: %t123 = load ptr, ptr %a1 %t124 = getelementptr inbounds %S.gen.Val, ptr %a31, i32 0, i32 0 %t125 = load { ptr, i64, i64 }, ptr %t124 %t126 = getelementptr inbounds %S.gen.Val, ptr %a31, i32 0, i32 1 %t127 = load %S.ast.Type, ptr %t126 %t128 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4622, i64 3, i64 0 }) %t129 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t123, { ptr, i64, i64 } %t125, %S.ast.Type %t127, %S.ast.Type %t128) store { ptr, i64, i64 } %t129, ptr %a130 store { ptr, i64, i64 } { ptr @.str.4623, i64 0, i64 0 }, ptr %a131 %t132 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 3 %t133 = getelementptr inbounds { ptr, i64, i64 }, ptr %t132, i32 0, i32 1 %t134 = load i64, ptr %t133 store i64 0, ptr %a135 br label %for.cond7121 for.cond7121: %t136 = load i64, ptr %a135 %t137 = icmp slt i64 %t136, %t134 br i1 %t137, label %for.body7122, label %for.end7124 for.body7122: %t138 = load ptr, ptr %a1 %t139 = load { ptr, i64, i64 }, ptr %a130 store { ptr, i64, i64 } { ptr @.str.4624, i64 12, i64 0 }, ptr %a141 store { ptr, i64, i64 } %t139, ptr %a142 call void @finch_str_concat(ptr %a140, ptr %a141, ptr %a142) %t143 = load { ptr, i64, i64 }, ptr %a140 store { ptr, i64, i64 } %t143, ptr %a145 store { ptr, i64, i64 } { ptr @.str.4625, i64 2, i64 0 }, ptr %a146 call void @finch_str_concat(ptr %a144, ptr %a145, ptr %a146) %t147 = load { ptr, i64, i64 }, ptr %a144 %t148 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 3 %t149 = load i64, ptr %a135 %t150 = load { ptr, i64, i64 }, ptr %t148 %t151 = extractvalue { ptr, i64, i64 } %t150, 1 %t152 = icmp uge i64 %t149, %t151 br i1 %t152, label %range7125, label %inrange7126 range7125: call void @finch_panic_index(ptr @.str.4626, i64 4103, i64 %t149, i64 %t151) unreachable inrange7126: %t153 = extractvalue { ptr, i64, i64 } %t150, 0 %t154 = getelementptr inbounds i64, ptr %t153, i64 %t149 %t155 = load i64, ptr %t154 call void @finch_str_from_int(ptr %a156, i64 %t155) %t157 = load { ptr, i64, i64 }, ptr %a156 store { ptr, i64, i64 } %t147, ptr %a159 store { ptr, i64, i64 } %t157, ptr %a160 call void @finch_str_concat(ptr %a158, ptr %a159, ptr %a160) %t161 = load { ptr, i64, i64 }, ptr %a158 %t162 = call { ptr, i64, i64 } @finch.gen.op(ptr %t138, { ptr, i64, i64 } %t161) store { ptr, i64, i64 } %t162, ptr %a163 %t164 = load i64, ptr %a135 %t165 = icmp eq i64 %t164, 0 br i1 %t165, label %then7127, label %else7128 then7127: %t166 = load { ptr, i64, i64 }, ptr %a163 store { ptr, i64, i64 } %t166, ptr %a167 call void @finch_str_copy(ptr %a168, ptr %a167) %t169 = load { ptr, i64, i64 }, ptr %a168 store { ptr, i64, i64 } %t169, ptr %a131 br label %endif7129 else7128: %t170 = load ptr, ptr %a1 %t171 = load { ptr, i64, i64 }, ptr %a131 store { ptr, i64, i64 } { ptr @.str.4627, i64 6, i64 0 }, ptr %a173 store { ptr, i64, i64 } %t171, ptr %a174 call void @finch_str_concat(ptr %a172, ptr %a173, ptr %a174) %t175 = load { ptr, i64, i64 }, ptr %a172 store { ptr, i64, i64 } %t175, ptr %a177 store { ptr, i64, i64 } { ptr @.str.4628, i64 2, i64 0 }, ptr %a178 call void @finch_str_concat(ptr %a176, ptr %a177, ptr %a178) %t179 = load { ptr, i64, i64 }, ptr %a176 %t180 = load { ptr, i64, i64 }, ptr %a163 store { ptr, i64, i64 } %t179, ptr %a182 store { ptr, i64, i64 } %t180, ptr %a183 call void @finch_str_concat(ptr %a181, ptr %a182, ptr %a183) %t184 = load { ptr, i64, i64 }, ptr %a181 %t185 = call { ptr, i64, i64 } @finch.gen.op(ptr %t170, { ptr, i64, i64 } %t184) store { ptr, i64, i64 } %t185, ptr %a131 br label %endif7129 endif7129: br label %for.step7123 for.step7123: %t186 = load i64, ptr %a135 %t187 = add i64 %t186, 1 store i64 %t187, ptr %a135 br label %for.cond7121 for.end7124: %t188 = load ptr, ptr %a1 %t189 = load ptr, ptr %a1 %t190 = load { ptr, i64, i64 }, ptr %a131 store { ptr, i64, i64 } { ptr @.str.4629, i64 7, i64 0 }, ptr %a192 store { ptr, i64, i64 } %t190, ptr %a193 call void @finch_str_concat(ptr %a191, ptr %a192, ptr %a193) %t194 = load { ptr, i64, i64 }, ptr %a191 store { ptr, i64, i64 } %t194, ptr %a196 store { ptr, i64, i64 } { ptr @.str.4630, i64 6, i64 0 }, ptr %a197 call void @finch_str_concat(ptr %a195, ptr %a196, ptr %a197) %t198 = load { ptr, i64, i64 }, ptr %a195 %t199 = call { ptr, i64, i64 } @finch.gen.op(ptr %t189, { ptr, i64, i64 } %t198) %t200 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 1 %t201 = load { ptr, i64, i64 }, ptr %t200 store { ptr, i64, i64 } { ptr @.str.4631, i64 32, i64 0 }, ptr %a203 store { ptr, i64, i64 } %t201, ptr %a204 call void @finch_str_concat(ptr %a202, ptr %a203, ptr %a204) %t205 = load { ptr, i64, i64 }, ptr %a202 %t206 = load %S.ast.Node, ptr %a2 call void @finch.gen.panicIf(ptr %t188, { ptr, i64, i64 } %t199, { ptr, i64, i64 } %t205, %S.ast.Node %t206) %t207 = load ptr, ptr %a1 %t208 = load { ptr, i64, i64 }, ptr %a130 store { ptr, i64, i64 } { ptr @.str.4632, i64 10, i64 0 }, ptr %a210 store { ptr, i64, i64 } %t208, ptr %a211 call void @finch_str_concat(ptr %a209, ptr %a210, ptr %a211) %t212 = load { ptr, i64, i64 }, ptr %a209 store { ptr, i64, i64 } %t212, ptr %a214 store { ptr, i64, i64 } { ptr @.str.4633, i64 7, i64 0 }, ptr %a215 call void @finch_str_concat(ptr %a213, ptr %a214, ptr %a215) %t216 = load { ptr, i64, i64 }, ptr %a213 %t217 = call { ptr, i64, i64 } @finch.gen.op(ptr %t207, { ptr, i64, i64 } %t216) %t218 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t217, 0 %t219 = load %S.ast.Type, ptr %a70 store %S.ast.Type %t219, ptr %a220 call void @finch.copy.S_ast_Type(ptr %a221, ptr %a220) %t222 = load %S.ast.Type, ptr %a221 %t223 = insertvalue %S.gen.Val %t218, %S.ast.Type %t222, 1 ret %S.gen.Val %t223 } define internal { ptr, i64, i64 } @finch.gen.cExt(ptr %p0, %S.ast.Type %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Type, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Type %p1, ptr %a2 %t3 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t4 = load { ptr, i64, i64 }, ptr %t3 store { ptr, i64, i64 } %t4, ptr %a5 store { ptr, i64, i64 } { ptr @.str.4634, i64 4, i64 0 }, ptr %a6 %t7 = call i32 @finch_str_eq(ptr %a5, ptr %a6) %t8 = icmp ne i32 %t7, 0 br label %logic.from7130 logic.from7130: br i1 %t8, label %logic.end7132, label %logic.rhs7131 logic.rhs7131: %t9 = load %S.ast.Type, ptr %a2 %t10 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t9) br label %logic.rend7133 logic.rend7133: br label %logic.end7132 logic.end7132: %t11 = phi i1 [ true, %logic.from7130 ], [ %t10, %logic.rend7133 ] br i1 %t11, label %then7134, label %endif7136 then7134: %t12 = load %S.ast.Type, ptr %a2 %t13 = call i64 @finch.gen.bitsOf(%S.ast.Type %t12) %t14 = icmp slt i64 %t13, 32 br i1 %t14, label %then7137, label %endif7139 then7137: ret { ptr, i64, i64 } { ptr @.str.4635, i64 8, i64 0 } endif7139: br label %endif7136 endif7136: %t15 = load %S.ast.Type, ptr %a2 %t16 = call i1 @finch.gen.isSigned(%S.ast.Type %t15) br label %logic.from7140 logic.from7140: br i1 %t16, label %logic.end7142, label %logic.rhs7141 logic.rhs7141: %t17 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t18 = load { ptr, i64, i64 }, ptr %t17 store { ptr, i64, i64 } %t18, ptr %a19 store { ptr, i64, i64 } { ptr @.str.4636, i64 4, i64 0 }, ptr %a20 %t21 = call i32 @finch_str_eq(ptr %a19, ptr %a20) %t22 = icmp ne i32 %t21, 0 br label %logic.from7143 logic.from7143: br i1 %t22, label %logic.rhs7144, label %logic.end7145 logic.rhs7144: %t23 = load ptr, ptr %a1 %t24 = icmp eq ptr %t23, null br i1 %t24, label %panic7146, label %ok7147 panic7146: call void @finch_panic(ptr @.str.4637, i64 4123, ptr @.str.4638) unreachable ok7147: %t25 = getelementptr inbounds %S.gen.Gen, ptr %t23, i32 0, i32 29 %t26 = load %S.platform.Target, ptr %t25 %t27 = call i1 @finch.platform.charIsSigned(%S.platform.Target %t26) br label %logic.rend7148 logic.rend7148: br label %logic.end7145 logic.end7145: %t28 = phi i1 [ false, %logic.from7143 ], [ %t27, %logic.rend7148 ] br label %logic.rend7149 logic.rend7149: br label %logic.end7142 logic.end7142: %t29 = phi i1 [ true, %logic.from7140 ], [ %t28, %logic.rend7149 ] br label %logic.from7150 logic.from7150: br i1 %t29, label %logic.rhs7151, label %logic.end7152 logic.rhs7151: %t30 = load %S.ast.Type, ptr %a2 %t31 = call i64 @finch.gen.bitsOf(%S.ast.Type %t30) %t32 = icmp slt i64 %t31, 32 br label %logic.rend7153 logic.rend7153: br label %logic.end7152 logic.end7152: %t33 = phi i1 [ false, %logic.from7150 ], [ %t32, %logic.rend7153 ] br i1 %t33, label %then7154, label %endif7156 then7154: ret { ptr, i64, i64 } { ptr @.str.4639, i64 8, i64 0 } endif7156: %t34 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t35 = load { ptr, i64, i64 }, ptr %t34 store { ptr, i64, i64 } %t35, ptr %a36 store { ptr, i64, i64 } { ptr @.str.4640, i64 4, i64 0 }, ptr %a37 %t38 = call i32 @finch_str_eq(ptr %a36, ptr %a37) %t39 = icmp ne i32 %t38, 0 br label %logic.from7157 logic.from7157: br i1 %t39, label %logic.rhs7158, label %logic.end7159 logic.rhs7158: %t40 = load %S.ast.Type, ptr %a2 %t41 = call i64 @finch.gen.bitsOf(%S.ast.Type %t40) %t42 = icmp slt i64 %t41, 32 br label %logic.rend7160 logic.rend7160: br label %logic.end7159 logic.end7159: %t43 = phi i1 [ false, %logic.from7157 ], [ %t42, %logic.rend7160 ] br i1 %t43, label %then7161, label %endif7163 then7161: ret { ptr, i64, i64 } { ptr @.str.4641, i64 8, i64 0 } endif7163: ret { ptr, i64, i64 } { ptr @.str.4642, i64 0, i64 0 } } define internal { ptr, i64, i64 } @finch.gen.cLL(ptr %p0, %S.ast.Type %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Type, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Type %p1, ptr %a2 %t3 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t4 = load { ptr, i64, i64 }, ptr %t3 store { ptr, i64, i64 } %t4, ptr %a5 store { ptr, i64, i64 } { ptr @.str.4643, i64 3, i64 0 }, ptr %a6 %t7 = call i32 @finch_str_eq(ptr %a5, ptr %a6) %t8 = icmp ne i32 %t7, 0 br i1 %t8, label %then7164, label %endif7166 then7164: ret { ptr, i64, i64 } { ptr @.str.4644, i64 3, i64 0 } endif7166: %t9 = load ptr, ptr %a1 %t10 = load %S.ast.Type, ptr %a2 %t11 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t9, %S.ast.Type %t10) ret { ptr, i64, i64 } %t11 } define internal %S.gen.Val @finch.gen.callC(ptr %p0, %S.ast.Node %p1, %S.cimport.CFunc %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a3 = alloca %S.cimport.CFunc, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca i64, align 16 %a18 = alloca %S.ast.Type, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca { ptr, i64, i64 }, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca { ptr, i64, i64 }, align 16 %a104 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 %a110 = alloca i64, align 16 %a122 = alloca { ptr, i64, i64 }, align 16 %a123 = alloca { ptr, i64, i64 }, align 16 %a124 = alloca { ptr, i64, i64 }, align 16 %a126 = alloca { ptr, i64, i64 }, align 16 %a127 = alloca { ptr, i64, i64 }, align 16 %a128 = alloca { ptr, i64, i64 }, align 16 %a133 = alloca { ptr, i64, i64 }, align 16 %a135 = alloca { ptr, i64, i64 }, align 16 %a136 = alloca { ptr, i64, i64 }, align 16 %a137 = alloca { ptr, i64, i64 }, align 16 %a139 = alloca { ptr, i64, i64 }, align 16 %a140 = alloca { ptr, i64, i64 }, align 16 %a141 = alloca { ptr, i64, i64 }, align 16 %a144 = alloca { ptr, i64, i64 }, align 16 %a146 = alloca { ptr, i64, i64 }, align 16 %a147 = alloca { ptr, i64, i64 }, align 16 %a148 = alloca { ptr, i64, i64 }, align 16 %a159 = alloca { ptr, i64, i64 }, align 16 %a160 = alloca { ptr, i64, i64 }, align 16 %a161 = alloca { ptr, i64, i64 }, align 16 %a163 = alloca { ptr, i64, i64 }, align 16 %a164 = alloca { ptr, i64, i64 }, align 16 %a165 = alloca { ptr, i64, i64 }, align 16 %a170 = alloca { ptr, i64, i64 }, align 16 %a172 = alloca { ptr, i64, i64 }, align 16 %a173 = alloca { ptr, i64, i64 }, align 16 %a174 = alloca { ptr, i64, i64 }, align 16 %a176 = alloca { ptr, i64, i64 }, align 16 %a177 = alloca { ptr, i64, i64 }, align 16 %a178 = alloca { ptr, i64, i64 }, align 16 %a181 = alloca { ptr, i64, i64 }, align 16 %a183 = alloca { ptr, i64, i64 }, align 16 %a184 = alloca { ptr, i64, i64 }, align 16 %a185 = alloca { ptr, i64, i64 }, align 16 %a192 = alloca %S.ast.Type, align 16 %a198 = alloca { ptr, i64, i64 }, align 16 %a200 = alloca i64, align 16 %a208 = alloca %S.ast.Type, align 16 %a213 = alloca %S.ast.Type, align 16 %a221 = alloca %S.ast.Type, align 16 %a222 = alloca %S.ast.Type, align 16 %a234 = alloca %S.gen.Plan, align 16 %a235 = alloca { ptr, i64, i64 }, align 16 %a236 = alloca { ptr, i64, i64 }, align 16 %a237 = alloca { ptr, i64, i64 }, align 16 %a249 = alloca { ptr, i64, i64 }, align 16 %a250 = alloca { ptr, i64, i64 }, align 16 %a251 = alloca { ptr, i64, i64 }, align 16 %a253 = alloca { ptr, i64, i64 }, align 16 %a254 = alloca { ptr, i64, i64 }, align 16 %a255 = alloca { ptr, i64, i64 }, align 16 %a265 = alloca { ptr, i64, i64 }, align 16 %a266 = alloca { ptr, i64, i64 }, align 16 %a267 = alloca { ptr, i64, i64 }, align 16 %a269 = alloca { ptr, i64, i64 }, align 16 %a270 = alloca { ptr, i64, i64 }, align 16 %a271 = alloca { ptr, i64, i64 }, align 16 %a274 = alloca { ptr, i64, i64 }, align 16 %a275 = alloca { ptr, i64, i64 }, align 16 %a276 = alloca { ptr, i64, i64 }, align 16 %a285 = alloca i64, align 16 %a300 = alloca %S.ast.Type, align 16 %a301 = alloca %S.ast.Type, align 16 %a303 = alloca %S.ast.Type, align 16 %a312 = alloca %S.gen.Abi, align 16 %a313 = alloca %S.gen.Abi, align 16 %a315 = alloca %S.gen.Abi, align 16 %a339 = alloca { ptr, i64, i64 }, align 16 %a341 = alloca { ptr, i64, i64 }, align 16 %a342 = alloca { ptr, i64, i64 }, align 16 %a343 = alloca { ptr, i64, i64 }, align 16 %a345 = alloca { ptr, i64, i64 }, align 16 %a346 = alloca { ptr, i64, i64 }, align 16 %a347 = alloca { ptr, i64, i64 }, align 16 %a351 = alloca { ptr, i64, i64 }, align 16 %a352 = alloca { ptr, i64, i64 }, align 16 %a353 = alloca { ptr, i64, i64 }, align 16 %a356 = alloca %S.gen.Val, align 16 %a359 = alloca { ptr, i64, i64 }, align 16 %a360 = alloca { ptr, i64, i64 }, align 16 %a368 = alloca { ptr, i64, i64 }, align 16 %a379 = alloca { ptr, i64, i64 }, align 16 %a380 = alloca { ptr, i64, i64 }, align 16 %a381 = alloca { ptr, i64, i64 }, align 16 %a383 = alloca { ptr, i64, i64 }, align 16 %a384 = alloca { ptr, i64, i64 }, align 16 %a385 = alloca { ptr, i64, i64 }, align 16 %a389 = alloca { ptr, i64, i64 }, align 16 %a391 = alloca { ptr, i64, i64 }, align 16 %a392 = alloca { ptr, i64, i64 }, align 16 %a393 = alloca { ptr, i64, i64 }, align 16 %a395 = alloca { ptr, i64, i64 }, align 16 %a398 = alloca { ptr, i64, i64 }, align 16 %a399 = alloca { ptr, i64, i64 }, align 16 %a407 = alloca { ptr, i64, i64 }, align 16 %a408 = alloca { ptr, i64, i64 }, align 16 %a409 = alloca { ptr, i64, i64 }, align 16 %a412 = alloca { ptr, i64, i64 }, align 16 %a413 = alloca { ptr, i64, i64 }, align 16 %a414 = alloca { ptr, i64, i64 }, align 16 %a422 = alloca { ptr, i64, i64 }, align 16 %a423 = alloca { ptr, i64, i64 }, align 16 %a431 = alloca { ptr, i64, i64 }, align 16 %a446 = alloca { ptr, i64, i64 }, align 16 %a447 = alloca { ptr, i64, i64 }, align 16 %a448 = alloca { ptr, i64, i64 }, align 16 %a456 = alloca { ptr, i64, i64 }, align 16 %a457 = alloca { ptr, i64, i64 }, align 16 %a462 = alloca { ptr, i64, i64 }, align 16 %a473 = alloca i64, align 16 %a487 = alloca { ptr, i64, i64 }, align 16 %a488 = alloca { ptr, i64, i64 }, align 16 %a489 = alloca { ptr, i64, i64 }, align 16 %a491 = alloca { ptr, i64, i64 }, align 16 %a492 = alloca { ptr, i64, i64 }, align 16 %a493 = alloca { ptr, i64, i64 }, align 16 %a497 = alloca { ptr, i64, i64 }, align 16 %a499 = alloca { ptr, i64, i64 }, align 16 %a500 = alloca { ptr, i64, i64 }, align 16 %a501 = alloca { ptr, i64, i64 }, align 16 %a505 = alloca { ptr, i64, i64 }, align 16 %a515 = alloca { ptr, i64, i64 }, align 16 %a516 = alloca { ptr, i64, i64 }, align 16 %a531 = alloca { ptr, i64, i64 }, align 16 %a532 = alloca { ptr, i64, i64 }, align 16 %a533 = alloca { ptr, i64, i64 }, align 16 %a536 = alloca { ptr, i64, i64 }, align 16 %a537 = alloca { ptr, i64, i64 }, align 16 %a538 = alloca { ptr, i64, i64 }, align 16 %a553 = alloca { ptr, i64, i64 }, align 16 %a554 = alloca { ptr, i64, i64 }, align 16 %a555 = alloca { ptr, i64, i64 }, align 16 %a563 = alloca { ptr, i64, i64 }, align 16 %a564 = alloca { ptr, i64, i64 }, align 16 %a572 = alloca { ptr, i64, i64 }, align 16 %a573 = alloca { ptr, i64, i64 }, align 16 %a574 = alloca { ptr, i64, i64 }, align 16 %a587 = alloca { ptr, i64, i64 }, align 16 %a588 = alloca { ptr, i64, i64 }, align 16 %a589 = alloca { ptr, i64, i64 }, align 16 %a591 = alloca { ptr, i64, i64 }, align 16 %a592 = alloca { ptr, i64, i64 }, align 16 %a593 = alloca { ptr, i64, i64 }, align 16 %a597 = alloca { ptr, i64, i64 }, align 16 %a598 = alloca { ptr, i64, i64 }, align 16 %a599 = alloca { ptr, i64, i64 }, align 16 %a615 = alloca %S.gen.Val, align 16 %a618 = alloca %S.ast.Type, align 16 %a619 = alloca %S.ast.Type, align 16 %a621 = alloca %S.ast.Type, align 16 %a624 = alloca { ptr, i64, i64 }, align 16 %a625 = alloca { ptr, i64, i64 }, align 16 %a639 = alloca { ptr, i64, i64 }, align 16 %a640 = alloca { ptr, i64, i64 }, align 16 %a645 = alloca { ptr, i64, i64 }, align 16 %a646 = alloca { ptr, i64, i64 }, align 16 %a661 = alloca { ptr, i64, i64 }, align 16 %a662 = alloca { ptr, i64, i64 }, align 16 %a664 = alloca { ptr, i64, i64 }, align 16 %a667 = alloca { ptr, i64, i64 }, align 16 %a668 = alloca { ptr, i64, i64 }, align 16 %a679 = alloca { ptr, i64, i64 }, align 16 %a680 = alloca { ptr, i64, i64 }, align 16 %a689 = alloca { ptr, i64, i64 }, align 16 %a690 = alloca { ptr, i64, i64 }, align 16 %a696 = alloca { ptr, i64, i64 }, align 16 %a697 = alloca { ptr, i64, i64 }, align 16 %a698 = alloca { ptr, i64, i64 }, align 16 %a700 = alloca { ptr, i64, i64 }, align 16 %a701 = alloca { ptr, i64, i64 }, align 16 %a702 = alloca { ptr, i64, i64 }, align 16 %a710 = alloca { ptr, i64, i64 }, align 16 %a711 = alloca { ptr, i64, i64 }, align 16 %a729 = alloca { ptr, i64, i64 }, align 16 %a730 = alloca { ptr, i64, i64 }, align 16 %a731 = alloca { ptr, i64, i64 }, align 16 %a734 = alloca { ptr, i64, i64 }, align 16 %a735 = alloca { ptr, i64, i64 }, align 16 %a736 = alloca { ptr, i64, i64 }, align 16 %a746 = alloca { ptr, i64, i64 }, align 16 %a747 = alloca { ptr, i64, i64 }, align 16 %a749 = alloca { ptr, i64, i64 }, align 16 %a750 = alloca { ptr, i64, i64 }, align 16 %a754 = alloca { ptr, i64, i64 }, align 16 %a755 = alloca { ptr, i64, i64 }, align 16 %a761 = alloca { ptr, i64, i64 }, align 16 %a773 = alloca { ptr, i64, i64 }, align 16 %a774 = alloca { ptr, i64, i64 }, align 16 %a775 = alloca { ptr, i64, i64 }, align 16 %a777 = alloca i64, align 16 %a780 = alloca i64, align 16 %a785 = alloca { ptr, i64, i64 }, align 16 %a786 = alloca { ptr, i64, i64 }, align 16 %a799 = alloca { ptr, i64, i64 }, align 16 %a800 = alloca { ptr, i64, i64 }, align 16 %a801 = alloca { ptr, i64, i64 }, align 16 %a816 = alloca { ptr, i64, i64 }, align 16 %a817 = alloca { ptr, i64, i64 }, align 16 %a818 = alloca { ptr, i64, i64 }, align 16 %a820 = alloca { ptr, i64, i64 }, align 16 %a821 = alloca { ptr, i64, i64 }, align 16 %a822 = alloca { ptr, i64, i64 }, align 16 %a825 = alloca { ptr, i64, i64 }, align 16 %a826 = alloca { ptr, i64, i64 }, align 16 %a827 = alloca { ptr, i64, i64 }, align 16 %a829 = alloca { ptr, i64, i64 }, align 16 %a830 = alloca { ptr, i64, i64 }, align 16 %a831 = alloca { ptr, i64, i64 }, align 16 %a835 = alloca { ptr, i64, i64 }, align 16 %a836 = alloca { ptr, i64, i64 }, align 16 %a837 = alloca { ptr, i64, i64 }, align 16 %a839 = alloca { ptr, i64, i64 }, align 16 %a840 = alloca { ptr, i64, i64 }, align 16 %a841 = alloca { ptr, i64, i64 }, align 16 %a844 = alloca { ptr, i64, i64 }, align 16 %a845 = alloca { ptr, i64, i64 }, align 16 %a847 = alloca { ptr, i64, i64 }, align 16 %a848 = alloca { ptr, i64, i64 }, align 16 %a849 = alloca { ptr, i64, i64 }, align 16 %a852 = alloca { ptr, i64, i64 }, align 16 %a853 = alloca { ptr, i64, i64 }, align 16 %a854 = alloca { ptr, i64, i64 }, align 16 %a856 = alloca { ptr, i64, i64 }, align 16 %a857 = alloca { ptr, i64, i64 }, align 16 %a858 = alloca { ptr, i64, i64 }, align 16 %a864 = alloca { ptr, i64, i64 }, align 16 %a868 = alloca { ptr, i64, i64 }, align 16 %a869 = alloca { ptr, i64, i64 }, align 16 %a871 = alloca { ptr, i64, i64 }, align 16 %a872 = alloca { ptr, i64, i64 }, align 16 %a873 = alloca { ptr, i64, i64 }, align 16 %a876 = alloca { ptr, i64, i64 }, align 16 %a877 = alloca { ptr, i64, i64 }, align 16 %a878 = alloca { ptr, i64, i64 }, align 16 %a880 = alloca { ptr, i64, i64 }, align 16 %a881 = alloca { ptr, i64, i64 }, align 16 %a882 = alloca { ptr, i64, i64 }, align 16 %a885 = alloca { ptr, i64, i64 }, align 16 %a886 = alloca { ptr, i64, i64 }, align 16 %a887 = alloca { ptr, i64, i64 }, align 16 %a889 = alloca { ptr, i64, i64 }, align 16 %a890 = alloca { ptr, i64, i64 }, align 16 %a891 = alloca { ptr, i64, i64 }, align 16 %a894 = alloca { ptr, i64, i64 }, align 16 %a895 = alloca { ptr, i64, i64 }, align 16 %a896 = alloca { ptr, i64, i64 }, align 16 %a899 = alloca { ptr, i64, i64 }, align 16 %a900 = alloca { ptr, i64, i64 }, align 16 %a901 = alloca { ptr, i64, i64 }, align 16 %a903 = alloca { ptr, i64, i64 }, align 16 %a904 = alloca { ptr, i64, i64 }, align 16 %a905 = alloca { ptr, i64, i64 }, align 16 %a909 = alloca { ptr, i64, i64 }, align 16 %a910 = alloca { ptr, i64, i64 }, align 16 %a911 = alloca { ptr, i64, i64 }, align 16 %a913 = alloca { ptr, i64, i64 }, align 16 %a914 = alloca { ptr, i64, i64 }, align 16 %a915 = alloca { ptr, i64, i64 }, align 16 %a918 = alloca { ptr, i64, i64 }, align 16 %a919 = alloca { ptr, i64, i64 }, align 16 %a921 = alloca { ptr, i64, i64 }, align 16 %a922 = alloca { ptr, i64, i64 }, align 16 %a923 = alloca { ptr, i64, i64 }, align 16 %a925 = alloca { ptr, i64, i64 }, align 16 %a926 = alloca { ptr, i64, i64 }, align 16 %a927 = alloca { ptr, i64, i64 }, align 16 %a929 = alloca { ptr, i64, i64 }, align 16 %a932 = alloca { ptr, i64, i64 }, align 16 %a933 = alloca { ptr, i64, i64 }, align 16 %a939 = alloca %S.ast.Type, align 16 %a940 = alloca %S.ast.Type, align 16 %a955 = alloca %S.ast.Type, align 16 %a956 = alloca %S.ast.Type, align 16 %a962 = alloca { ptr, i64, i64 }, align 16 %a966 = alloca { ptr, i64, i64 }, align 16 %a967 = alloca { ptr, i64, i64 }, align 16 %a972 = alloca { ptr, i64, i64 }, align 16 %a987 = alloca %S.ast.Type, align 16 %a988 = alloca %S.ast.Type, align 16 %a993 = alloca { ptr, i64, i64 }, align 16 %a994 = alloca { ptr, i64, i64 }, align 16 %a999 = alloca { ptr, i64, i64 }, align 16 %a1004 = alloca { ptr, i64, i64 }, align 16 %a1005 = alloca { ptr, i64, i64 }, align 16 %a1006 = alloca { ptr, i64, i64 }, align 16 %a1008 = alloca { ptr, i64, i64 }, align 16 %a1009 = alloca { ptr, i64, i64 }, align 16 %a1010 = alloca { ptr, i64, i64 }, align 16 %a1013 = alloca { ptr, i64, i64 }, align 16 %a1014 = alloca { ptr, i64, i64 }, align 16 %a1015 = alloca { ptr, i64, i64 }, align 16 %a1017 = alloca { ptr, i64, i64 }, align 16 %a1018 = alloca { ptr, i64, i64 }, align 16 %a1019 = alloca { ptr, i64, i64 }, align 16 %a1026 = alloca %S.ast.Type, align 16 %a1027 = alloca %S.ast.Type, align 16 %a1031 = alloca { ptr, i64, i64 }, align 16 %a1032 = alloca { ptr, i64, i64 }, align 16 %a1036 = alloca %S.ast.Type, align 16 %a1037 = alloca %S.ast.Type, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 store %S.cimport.CFunc %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = icmp eq ptr %t4, null br i1 %t5, label %panic7167, label %ok7168 panic7167: call void @finch_panic(ptr @.str.4645, i64 4140, ptr @.str.4646) unreachable ok7168: %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 26 %t7 = load i1, ptr %t6 br i1 %t7, label %then7169, label %endif7171 then7169: store { ptr, i64, i64 } zeroinitializer, ptr %a8 %t9 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 3 store i64 0, ptr %a10 br label %each.cond7172 each.cond7172: %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t9, i32 0, i32 1 %t12 = load i64, ptr %t11 %t13 = load i64, ptr %a10 %t14 = icmp slt i64 %t13, %t12 br i1 %t14, label %each.body7173, label %each.end7175 each.body7173: %t15 = load ptr, ptr %t9 %t16 = getelementptr inbounds %S.ast.Type, ptr %t15, i64 %t13 %t17 = load %S.ast.Type, ptr %t16 store %S.ast.Type %t17, ptr %a18 %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 %t20 = load %S.ast.Type, ptr %a18 %t21 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t20) %t22 = load i64, ptr %t19 %t23 = add i64 %t22, 1 call void @finch_arr_reserve(ptr %a8, i64 %t23, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t24 = load ptr, ptr %a8 %t25 = getelementptr inbounds { ptr, i64, i64 }, ptr %t24, i64 %t22 store { ptr, i64, i64 } %t21, ptr %t25 store i64 %t23, ptr %t19 br label %each.step7174 each.step7174: %t26 = load i64, ptr %a10 %t27 = add i64 %t26, 1 store i64 %t27, ptr %a10 br label %each.cond7172 each.end7175: %t28 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 4 %t29 = load i1, ptr %t28 br i1 %t29, label %then7176, label %endif7178 then7176: %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 %t31 = load i64, ptr %t30 %t32 = add i64 %t31, 1 call void @finch_arr_reserve(ptr %a8, i64 %t32, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t33 = load ptr, ptr %a8 %t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %t33, i64 %t31 store { ptr, i64, i64 } { ptr @.str.4647, i64 3, i64 0 }, ptr %t34 store i64 %t32, ptr %t30 br label %endif7178 endif7178: %t35 = load ptr, ptr %a1 %t36 = load %S.ast.Node, ptr %a2 %t37 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 %t38 = load i64, ptr %t37 %t39 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 %t40 = getelementptr inbounds { ptr, i64, i64 }, ptr %t39, i32 0, i32 1 %t41 = load i64, ptr %t40 %t42 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 1 %t43 = load { ptr, i64, i64 }, ptr %t42 store { ptr, i64, i64 } { ptr @.str.4648, i64 17, i64 0 }, ptr %a45 store { ptr, i64, i64 } %t43, ptr %a46 call void @finch_str_concat(ptr %a44, ptr %a45, ptr %a46) %t47 = load { ptr, i64, i64 }, ptr %a44 store { ptr, i64, i64 } %t47, ptr %a49 store { ptr, i64, i64 } { ptr @.str.4649, i64 7, i64 0 }, ptr %a50 call void @finch_str_concat(ptr %a48, ptr %a49, ptr %a50) %t51 = load { ptr, i64, i64 }, ptr %a48 %t52 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 2 %t53 = load %S.ast.Type, ptr %t52 %t54 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t53) store { ptr, i64, i64 } %t51, ptr %a56 store { ptr, i64, i64 } %t54, ptr %a57 call void @finch_str_concat(ptr %a55, ptr %a56, ptr %a57) %t58 = load { ptr, i64, i64 }, ptr %a55 store { ptr, i64, i64 } %t58, ptr %a60 store { ptr, i64, i64 } { ptr @.str.4650, i64 1, i64 0 }, ptr %a61 call void @finch_str_concat(ptr %a59, ptr %a60, ptr %a61) %t62 = load { ptr, i64, i64 }, ptr %a59 %t63 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 %t64 = load { ptr, i64, i64 }, ptr %t63 store { ptr, i64, i64 } %t62, ptr %a66 store { ptr, i64, i64 } %t64, ptr %a67 call void @finch_str_concat(ptr %a65, ptr %a66, ptr %a67) %t68 = load { ptr, i64, i64 }, ptr %a65 store { ptr, i64, i64 } %t68, ptr %a70 store { ptr, i64, i64 } { ptr @.str.4651, i64 1, i64 0 }, ptr %a71 call void @finch_str_concat(ptr %a69, ptr %a70, ptr %a71) %t72 = load { ptr, i64, i64 }, ptr %a69 %t73 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.4652, i64 2, i64 0 }, ptr %a74 call void @finch_str_join(ptr %a75, ptr %a8, ptr %a74) %t76 = load { ptr, i64, i64 }, ptr %a75 store { ptr, i64, i64 } %t72, ptr %a78 store { ptr, i64, i64 } %t76, ptr %a79 call void @finch_str_concat(ptr %a77, ptr %a78, ptr %a79) %t80 = load { ptr, i64, i64 }, ptr %a77 store { ptr, i64, i64 } %t80, ptr %a82 store { ptr, i64, i64 } { ptr @.str.4653, i64 5, i64 0 }, ptr %a83 call void @finch_str_concat(ptr %a81, ptr %a82, ptr %a83) %t84 = load { ptr, i64, i64 }, ptr %a81 call void @finch.gen.noteRef(ptr %t35, %S.ast.Node %t36, i64 %t38, i64 %t41, { ptr, i64, i64 } %t84, { ptr, i64, i64 } { ptr @.str.4654, i64 0, i64 0 }, i64 0, i64 0) br label %endif7171 endif7171: %t85 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 5 %t86 = getelementptr inbounds { ptr, i64, i64 }, ptr %t85, i32 0, i32 1 %t87 = load i64, ptr %t86 %t88 = icmp sgt i64 %t87, 0 br i1 %t88, label %then7179, label %endif7181 then7179: %t89 = load ptr, ptr %a1 %t90 = load %S.ast.Node, ptr %a2 %t91 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 %t92 = load { ptr, i64, i64 }, ptr %t91 store { ptr, i64, i64 } { ptr @.str.4655, i64 16, i64 0 }, ptr %a94 store { ptr, i64, i64 } %t92, ptr %a95 call void @finch_str_concat(ptr %a93, ptr %a94, ptr %a95) %t96 = load { ptr, i64, i64 }, ptr %a93 store { ptr, i64, i64 } %t96, ptr %a98 store { ptr, i64, i64 } { ptr @.str.4656, i64 35, i64 0 }, ptr %a99 call void @finch_str_concat(ptr %a97, ptr %a98, ptr %a99) %t100 = load { ptr, i64, i64 }, ptr %a97 %t101 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 5 %t102 = load { ptr, i64, i64 }, ptr %t101 store { ptr, i64, i64 } %t100, ptr %a104 store { ptr, i64, i64 } %t102, ptr %a105 call void @finch_str_concat(ptr %a103, ptr %a104, ptr %a105) %t106 = load { ptr, i64, i64 }, ptr %a103 call void @finch.gen.fail(ptr %t89, %S.ast.Node %t90, { ptr, i64, i64 } %t106) br label %endif7181 endif7181: %t107 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t108 = getelementptr inbounds { ptr, i64, i64 }, ptr %t107, i32 0, i32 1 %t109 = load i64, ptr %t108 store i64 %t109, ptr %a110 %t111 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 4 %t112 = load i1, ptr %t111 br i1 %t112, label %then7182, label %else7183 then7182: %t113 = load i64, ptr %a110 %t114 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 3 %t115 = getelementptr inbounds { ptr, i64, i64 }, ptr %t114, i32 0, i32 1 %t116 = load i64, ptr %t115 %t117 = icmp slt i64 %t113, %t116 br i1 %t117, label %then7185, label %endif7187 then7185: %t118 = load ptr, ptr %a1 %t119 = load %S.ast.Node, ptr %a2 %t120 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 %t121 = load { ptr, i64, i64 }, ptr %t120 store { ptr, i64, i64 } { ptr @.str.4657, i64 1, i64 0 }, ptr %a123 store { ptr, i64, i64 } %t121, ptr %a124 call void @finch_str_concat(ptr %a122, ptr %a123, ptr %a124) %t125 = load { ptr, i64, i64 }, ptr %a122 store { ptr, i64, i64 } %t125, ptr %a127 store { ptr, i64, i64 } { ptr @.str.4658, i64 17, i64 0 }, ptr %a128 call void @finch_str_concat(ptr %a126, ptr %a127, ptr %a128) %t129 = load { ptr, i64, i64 }, ptr %a126 %t130 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 3 %t131 = getelementptr inbounds { ptr, i64, i64 }, ptr %t130, i32 0, i32 1 %t132 = load i64, ptr %t131 call void @finch_str_from_int(ptr %a133, i64 %t132) %t134 = load { ptr, i64, i64 }, ptr %a133 store { ptr, i64, i64 } %t129, ptr %a136 store { ptr, i64, i64 } %t134, ptr %a137 call void @finch_str_concat(ptr %a135, ptr %a136, ptr %a137) %t138 = load { ptr, i64, i64 }, ptr %a135 store { ptr, i64, i64 } %t138, ptr %a140 store { ptr, i64, i64 } { ptr @.str.4659, i64 22, i64 0 }, ptr %a141 call void @finch_str_concat(ptr %a139, ptr %a140, ptr %a141) %t142 = load { ptr, i64, i64 }, ptr %a139 %t143 = load i64, ptr %a110 call void @finch_str_from_int(ptr %a144, i64 %t143) %t145 = load { ptr, i64, i64 }, ptr %a144 store { ptr, i64, i64 } %t142, ptr %a147 store { ptr, i64, i64 } %t145, ptr %a148 call void @finch_str_concat(ptr %a146, ptr %a147, ptr %a148) %t149 = load { ptr, i64, i64 }, ptr %a146 call void @finch.gen.fail(ptr %t118, %S.ast.Node %t119, { ptr, i64, i64 } %t149) br label %endif7187 endif7187: br label %endif7184 else7183: %t150 = load i64, ptr %a110 %t151 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 3 %t152 = getelementptr inbounds { ptr, i64, i64 }, ptr %t151, i32 0, i32 1 %t153 = load i64, ptr %t152 %t154 = icmp ne i64 %t150, %t153 br i1 %t154, label %then7188, label %endif7190 then7188: %t155 = load ptr, ptr %a1 %t156 = load %S.ast.Node, ptr %a2 %t157 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 %t158 = load { ptr, i64, i64 }, ptr %t157 store { ptr, i64, i64 } { ptr @.str.4660, i64 1, i64 0 }, ptr %a160 store { ptr, i64, i64 } %t158, ptr %a161 call void @finch_str_concat(ptr %a159, ptr %a160, ptr %a161) %t162 = load { ptr, i64, i64 }, ptr %a159 store { ptr, i64, i64 } %t162, ptr %a164 store { ptr, i64, i64 } { ptr @.str.4661, i64 8, i64 0 }, ptr %a165 call void @finch_str_concat(ptr %a163, ptr %a164, ptr %a165) %t166 = load { ptr, i64, i64 }, ptr %a163 %t167 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 3 %t168 = getelementptr inbounds { ptr, i64, i64 }, ptr %t167, i32 0, i32 1 %t169 = load i64, ptr %t168 call void @finch_str_from_int(ptr %a170, i64 %t169) %t171 = load { ptr, i64, i64 }, ptr %a170 store { ptr, i64, i64 } %t166, ptr %a173 store { ptr, i64, i64 } %t171, ptr %a174 call void @finch_str_concat(ptr %a172, ptr %a173, ptr %a174) %t175 = load { ptr, i64, i64 }, ptr %a172 store { ptr, i64, i64 } %t175, ptr %a177 store { ptr, i64, i64 } { ptr @.str.4662, i64 22, i64 0 }, ptr %a178 call void @finch_str_concat(ptr %a176, ptr %a177, ptr %a178) %t179 = load { ptr, i64, i64 }, ptr %a176 %t180 = load i64, ptr %a110 call void @finch_str_from_int(ptr %a181, i64 %t180) %t182 = load { ptr, i64, i64 }, ptr %a181 store { ptr, i64, i64 } %t179, ptr %a184 store { ptr, i64, i64 } %t182, ptr %a185 call void @finch_str_concat(ptr %a183, ptr %a184, ptr %a185) %t186 = load { ptr, i64, i64 }, ptr %a183 call void @finch.gen.fail(ptr %t155, %S.ast.Node %t156, { ptr, i64, i64 } %t186) br label %endif7190 endif7190: br label %endif7184 endif7184: %t187 = load ptr, ptr %a1 %t188 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 2 %t189 = load %S.ast.Type, ptr %t188 %t190 = load %S.ast.Node, ptr %a2 %t191 = call %S.ast.Type @finch.gen.resolve(ptr %t187, %S.ast.Type %t189, %S.ast.Node %t190) store %S.ast.Type %t191, ptr %a192 %t193 = load ptr, ptr %a1 %t194 = load %S.ast.Node, ptr %a2 %t195 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 %t196 = load { ptr, i64, i64 }, ptr %t195 %t197 = load %S.ast.Type, ptr %a192 call void @finch.gen.checkByValue(ptr %t193, %S.ast.Node %t194, { ptr, i64, i64 } %t196, %S.ast.Type %t197, { ptr, i64, i64 } { ptr @.str.4663, i64 7, i64 0 }) store { ptr, i64, i64 } zeroinitializer, ptr %a198 %t199 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 3 store i64 0, ptr %a200 br label %each.cond7191 each.cond7191: %t201 = getelementptr inbounds { ptr, i64, i64 }, ptr %t199, i32 0, i32 1 %t202 = load i64, ptr %t201 %t203 = load i64, ptr %a200 %t204 = icmp slt i64 %t203, %t202 br i1 %t204, label %each.body7192, label %each.end7194 each.body7192: %t205 = load ptr, ptr %t199 %t206 = getelementptr inbounds %S.ast.Type, ptr %t205, i64 %t203 %t207 = load %S.ast.Type, ptr %t206 store %S.ast.Type %t207, ptr %a208 %t209 = load ptr, ptr %a1 %t210 = load %S.ast.Type, ptr %a208 %t211 = load %S.ast.Node, ptr %a2 %t212 = call %S.ast.Type @finch.gen.resolve(ptr %t209, %S.ast.Type %t210, %S.ast.Node %t211) store %S.ast.Type %t212, ptr %a213 %t214 = load ptr, ptr %a1 %t215 = load %S.ast.Node, ptr %a2 %t216 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 %t217 = load { ptr, i64, i64 }, ptr %t216 %t218 = load %S.ast.Type, ptr %a213 call void @finch.gen.checkByValue(ptr %t214, %S.ast.Node %t215, { ptr, i64, i64 } %t217, %S.ast.Type %t218, { ptr, i64, i64 } { ptr @.str.4664, i64 5, i64 0 }) %t219 = getelementptr inbounds { ptr, i64, i64 }, ptr %a198, i32 0, i32 1 %t220 = load %S.ast.Type, ptr %a213 store %S.ast.Type %t220, ptr %a221 call void @finch.copy.S_ast_Type(ptr %a222, ptr %a221) %t223 = load %S.ast.Type, ptr %a222 %t224 = load i64, ptr %t219 %t225 = add i64 %t224, 1 call void @finch_arr_reserve(ptr %a198, i64 %t225, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) %t226 = load ptr, ptr %a198 %t227 = getelementptr inbounds %S.ast.Type, ptr %t226, i64 %t224 store %S.ast.Type %t223, ptr %t227 store i64 %t225, ptr %t219 br label %each.step7193 each.step7193: %t228 = load i64, ptr %a200 %t229 = add i64 %t228, 1 store i64 %t229, ptr %a200 br label %each.cond7191 each.end7194: %t230 = load ptr, ptr %a1 %t231 = load %S.ast.Type, ptr %a192 %t232 = load { ptr, i64, i64 }, ptr %a198 %t233 = call %S.gen.Plan @finch.gen.makePlan(ptr %t230, %S.ast.Type %t231, { ptr, i64, i64 } %t232) store %S.gen.Plan %t233, ptr %a234 store { ptr, i64, i64 } zeroinitializer, ptr %a235 store { ptr, i64, i64 } zeroinitializer, ptr %a236 store { ptr, i64, i64 } { ptr @.str.4665, i64 0, i64 0 }, ptr %a237 %t238 = getelementptr inbounds %S.gen.Plan, ptr %a234, i32 0, i32 3 %t239 = load i1, ptr %t238 br i1 %t239, label %then7195, label %endif7197 then7195: %t240 = load ptr, ptr %a1 %t241 = load ptr, ptr %a1 %t242 = load %S.ast.Type, ptr %a192 %t243 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t241, %S.ast.Type %t242) %t244 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t240, { ptr, i64, i64 } %t243) store { ptr, i64, i64 } %t244, ptr %a237 %t245 = getelementptr inbounds { ptr, i64, i64 }, ptr %a235, i32 0, i32 1 %t246 = load ptr, ptr %a1 %t247 = load %S.ast.Type, ptr %a192 %t248 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t246, %S.ast.Type %t247) store { ptr, i64, i64 } { ptr @.str.4666, i64 9, i64 0 }, ptr %a250 store { ptr, i64, i64 } %t248, ptr %a251 call void @finch_str_concat(ptr %a249, ptr %a250, ptr %a251) %t252 = load { ptr, i64, i64 }, ptr %a249 store { ptr, i64, i64 } %t252, ptr %a254 store { ptr, i64, i64 } { ptr @.str.4667, i64 10, i64 0 }, ptr %a255 call void @finch_str_concat(ptr %a253, ptr %a254, ptr %a255) %t256 = load { ptr, i64, i64 }, ptr %a253 %t257 = load i64, ptr %t245 %t258 = add i64 %t257, 1 call void @finch_arr_reserve(ptr %a235, i64 %t258, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t259 = load ptr, ptr %a235 %t260 = getelementptr inbounds { ptr, i64, i64 }, ptr %t259, i64 %t257 store { ptr, i64, i64 } %t256, ptr %t260 store i64 %t258, ptr %t245 %t261 = getelementptr inbounds { ptr, i64, i64 }, ptr %a236, i32 0, i32 1 %t262 = load ptr, ptr %a1 %t263 = load %S.ast.Type, ptr %a192 %t264 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t262, %S.ast.Type %t263) store { ptr, i64, i64 } { ptr @.str.4668, i64 9, i64 0 }, ptr %a266 store { ptr, i64, i64 } %t264, ptr %a267 call void @finch_str_concat(ptr %a265, ptr %a266, ptr %a267) %t268 = load { ptr, i64, i64 }, ptr %a265 store { ptr, i64, i64 } %t268, ptr %a270 store { ptr, i64, i64 } { ptr @.str.4669, i64 11, i64 0 }, ptr %a271 call void @finch_str_concat(ptr %a269, ptr %a270, ptr %a271) %t272 = load { ptr, i64, i64 }, ptr %a269 %t273 = load { ptr, i64, i64 }, ptr %a237 store { ptr, i64, i64 } %t272, ptr %a275 store { ptr, i64, i64 } %t273, ptr %a276 call void @finch_str_concat(ptr %a274, ptr %a275, ptr %a276) %t277 = load { ptr, i64, i64 }, ptr %a274 %t278 = load i64, ptr %t261 %t279 = add i64 %t278, 1 call void @finch_arr_reserve(ptr %a236, i64 %t279, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t280 = load ptr, ptr %a236 %t281 = getelementptr inbounds { ptr, i64, i64 }, ptr %t280, i64 %t278 store { ptr, i64, i64 } %t277, ptr %t281 store i64 %t279, ptr %t261 br label %endif7197 endif7197: %t282 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t283 = getelementptr inbounds { ptr, i64, i64 }, ptr %t282, i32 0, i32 1 %t284 = load i64, ptr %t283 store i64 0, ptr %a285 br label %for.cond7198 for.cond7198: %t286 = load i64, ptr %a285 %t287 = icmp slt i64 %t286, %t284 br i1 %t287, label %for.body7199, label %for.end7201 for.body7199: %t288 = load i64, ptr %a285 %t289 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 3 %t290 = getelementptr inbounds { ptr, i64, i64 }, ptr %t289, i32 0, i32 1 %t291 = load i64, ptr %t290 %t292 = icmp slt i64 %t288, %t291 br i1 %t292, label %then7202, label %endif7204 then7202: %t293 = load i64, ptr %a285 %t294 = load { ptr, i64, i64 }, ptr %a198 %t295 = extractvalue { ptr, i64, i64 } %t294, 1 %t296 = icmp uge i64 %t293, %t295 br i1 %t296, label %range7205, label %inrange7206 range7205: call void @finch_panic_index(ptr @.str.4670, i64 4180, i64 %t293, i64 %t295) unreachable inrange7206: %t297 = extractvalue { ptr, i64, i64 } %t294, 0 %t298 = getelementptr inbounds %S.ast.Type, ptr %t297, i64 %t293 %t299 = load %S.ast.Type, ptr %t298 store %S.ast.Type %t299, ptr %a300 call void @finch.copy.S_ast_Type(ptr %a301, ptr %a300) %t302 = load %S.ast.Type, ptr %a301 store %S.ast.Type %t302, ptr %a303 %t304 = getelementptr inbounds %S.gen.Plan, ptr %a234, i32 0, i32 1 %t305 = load i64, ptr %a285 %t306 = load { ptr, i64, i64 }, ptr %t304 %t307 = extractvalue { ptr, i64, i64 } %t306, 1 %t308 = icmp uge i64 %t305, %t307 br i1 %t308, label %range7207, label %inrange7208 range7207: call void @finch_panic_index(ptr @.str.4671, i64 4181, i64 %t305, i64 %t307) unreachable inrange7208: %t309 = extractvalue { ptr, i64, i64 } %t306, 0 %t310 = getelementptr inbounds %S.gen.Abi, ptr %t309, i64 %t305 %t311 = load %S.gen.Abi, ptr %t310 store %S.gen.Abi %t311, ptr %a312 call void @finch.copy.S_gen_Abi(ptr %a313, ptr %a312) %t314 = load %S.gen.Abi, ptr %a313 store %S.gen.Abi %t314, ptr %a315 %t316 = load ptr, ptr %a1 %t317 = load ptr, ptr %a1 %t318 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t319 = load i64, ptr %a285 %t320 = load { ptr, i64, i64 }, ptr %t318 %t321 = extractvalue { ptr, i64, i64 } %t320, 1 %t322 = icmp uge i64 %t319, %t321 br i1 %t322, label %range7209, label %inrange7210 range7209: call void @finch_panic_index(ptr @.str.4672, i64 4182, i64 %t319, i64 %t321) unreachable inrange7210: %t323 = extractvalue { ptr, i64, i64 } %t320, 0 %t324 = getelementptr inbounds %S.ast.Node, ptr %t323, i64 %t319 %t325 = load %S.ast.Node, ptr %t324 %t326 = load %S.ast.Type, ptr %a303 %t327 = call %S.gen.Val @finch.gen.exprWant(ptr %t317, %S.ast.Node %t325, %S.ast.Type %t326) %t328 = load %S.ast.Type, ptr %a303 %t329 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t330 = load i64, ptr %a285 %t331 = load { ptr, i64, i64 }, ptr %t329 %t332 = extractvalue { ptr, i64, i64 } %t331, 1 %t333 = icmp uge i64 %t330, %t332 br i1 %t333, label %range7211, label %inrange7212 range7211: call void @finch_panic_index(ptr @.str.4673, i64 4182, i64 %t330, i64 %t332) unreachable inrange7212: %t334 = extractvalue { ptr, i64, i64 } %t331, 0 %t335 = getelementptr inbounds %S.ast.Node, ptr %t334, i64 %t330 %t336 = load %S.ast.Node, ptr %t335 %t337 = load i64, ptr %a285 %t338 = add i64 %t337, 1 call void @finch_str_from_int(ptr %a339, i64 %t338) %t340 = load { ptr, i64, i64 }, ptr %a339 store { ptr, i64, i64 } { ptr @.str.4674, i64 9, i64 0 }, ptr %a342 store { ptr, i64, i64 } %t340, ptr %a343 call void @finch_str_concat(ptr %a341, ptr %a342, ptr %a343) %t344 = load { ptr, i64, i64 }, ptr %a341 store { ptr, i64, i64 } %t344, ptr %a346 store { ptr, i64, i64 } { ptr @.str.4675, i64 4, i64 0 }, ptr %a347 call void @finch_str_concat(ptr %a345, ptr %a346, ptr %a347) %t348 = load { ptr, i64, i64 }, ptr %a345 %t349 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 %t350 = load { ptr, i64, i64 }, ptr %t349 store { ptr, i64, i64 } %t348, ptr %a352 store { ptr, i64, i64 } %t350, ptr %a353 call void @finch_str_concat(ptr %a351, ptr %a352, ptr %a353) %t354 = load { ptr, i64, i64 }, ptr %a351 %t355 = call %S.gen.Val @finch.gen.coerce(ptr %t316, %S.gen.Val %t327, %S.ast.Type %t328, %S.ast.Node %t336, { ptr, i64, i64 } %t354) store %S.gen.Val %t355, ptr %a356 %t357 = getelementptr inbounds %S.gen.Abi, ptr %a315, i32 0, i32 0 %t358 = load { ptr, i64, i64 }, ptr %t357 store { ptr, i64, i64 } %t358, ptr %a359 store { ptr, i64, i64 } { ptr @.str.4676, i64 6, i64 0 }, ptr %a360 %t361 = call i32 @finch_str_eq(ptr %a359, ptr %a360) %t362 = icmp ne i32 %t361, 0 br i1 %t362, label %then7213, label %else7214 then7213: %t363 = load ptr, ptr %a1 %t364 = load ptr, ptr %a1 %t365 = load %S.ast.Type, ptr %a303 %t366 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t364, %S.ast.Type %t365) %t367 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t363, { ptr, i64, i64 } %t366) store { ptr, i64, i64 } %t367, ptr %a368 %t369 = load ptr, ptr %a1 %t370 = load ptr, ptr %a1 %t371 = load %S.ast.Type, ptr %a303 %t372 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t370, %S.ast.Type %t371) %t373 = getelementptr inbounds %S.gen.Val, ptr %a356, i32 0, i32 0 %t374 = load { ptr, i64, i64 }, ptr %t373 %t375 = load { ptr, i64, i64 }, ptr %a368 call void @finch.gen.store(ptr %t369, { ptr, i64, i64 } %t372, { ptr, i64, i64 } %t374, { ptr, i64, i64 } %t375) %t376 = load ptr, ptr %a1 %t377 = load %S.ast.Type, ptr %a303 %t378 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t376, %S.ast.Type %t377) store { ptr, i64, i64 } { ptr @.str.4677, i64 10, i64 0 }, ptr %a380 store { ptr, i64, i64 } %t378, ptr %a381 call void @finch_str_concat(ptr %a379, ptr %a380, ptr %a381) %t382 = load { ptr, i64, i64 }, ptr %a379 store { ptr, i64, i64 } %t382, ptr %a384 store { ptr, i64, i64 } { ptr @.str.4678, i64 8, i64 0 }, ptr %a385 call void @finch_str_concat(ptr %a383, ptr %a384, ptr %a385) %t386 = load { ptr, i64, i64 }, ptr %a383 %t387 = getelementptr inbounds %S.gen.Abi, ptr %a315, i32 0, i32 3 %t388 = load i64, ptr %t387 call void @finch_str_from_int(ptr %a389, i64 %t388) %t390 = load { ptr, i64, i64 }, ptr %a389 store { ptr, i64, i64 } %t386, ptr %a392 store { ptr, i64, i64 } %t390, ptr %a393 call void @finch_str_concat(ptr %a391, ptr %a392, ptr %a393) %t394 = load { ptr, i64, i64 }, ptr %a391 store { ptr, i64, i64 } %t394, ptr %a395 %t396 = getelementptr inbounds { ptr, i64, i64 }, ptr %a235, i32 0, i32 1 %t397 = load { ptr, i64, i64 }, ptr %a395 store { ptr, i64, i64 } %t397, ptr %a398 call void @finch_str_copy(ptr %a399, ptr %a398) %t400 = load { ptr, i64, i64 }, ptr %a399 %t401 = load i64, ptr %t396 %t402 = add i64 %t401, 1 call void @finch_arr_reserve(ptr %a235, i64 %t402, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t403 = load ptr, ptr %a235 %t404 = getelementptr inbounds { ptr, i64, i64 }, ptr %t403, i64 %t401 store { ptr, i64, i64 } %t400, ptr %t404 store i64 %t402, ptr %t396 %t405 = getelementptr inbounds { ptr, i64, i64 }, ptr %a236, i32 0, i32 1 %t406 = load { ptr, i64, i64 }, ptr %a395 store { ptr, i64, i64 } %t406, ptr %a408 store { ptr, i64, i64 } { ptr @.str.4679, i64 1, i64 0 }, ptr %a409 call void @finch_str_concat(ptr %a407, ptr %a408, ptr %a409) %t410 = load { ptr, i64, i64 }, ptr %a407 %t411 = load { ptr, i64, i64 }, ptr %a368 store { ptr, i64, i64 } %t410, ptr %a413 store { ptr, i64, i64 } %t411, ptr %a414 call void @finch_str_concat(ptr %a412, ptr %a413, ptr %a414) %t415 = load { ptr, i64, i64 }, ptr %a412 %t416 = load i64, ptr %t405 %t417 = add i64 %t416, 1 call void @finch_arr_reserve(ptr %a236, i64 %t417, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t418 = load ptr, ptr %a236 %t419 = getelementptr inbounds { ptr, i64, i64 }, ptr %t418, i64 %t416 store { ptr, i64, i64 } %t415, ptr %t419 store i64 %t417, ptr %t405 br label %endif7215 else7214: %t420 = getelementptr inbounds %S.gen.Abi, ptr %a315, i32 0, i32 0 %t421 = load { ptr, i64, i64 }, ptr %t420 store { ptr, i64, i64 } %t421, ptr %a422 store { ptr, i64, i64 } { ptr @.str.4680, i64 8, i64 0 }, ptr %a423 %t424 = call i32 @finch_str_eq(ptr %a422, ptr %a423) %t425 = icmp ne i32 %t424, 0 br i1 %t425, label %then7216, label %else7217 then7216: %t426 = load ptr, ptr %a1 %t427 = load ptr, ptr %a1 %t428 = load %S.ast.Type, ptr %a303 %t429 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t427, %S.ast.Type %t428) %t430 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t426, { ptr, i64, i64 } %t429) store { ptr, i64, i64 } %t430, ptr %a431 %t432 = load ptr, ptr %a1 %t433 = load ptr, ptr %a1 %t434 = load %S.ast.Type, ptr %a303 %t435 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t433, %S.ast.Type %t434) %t436 = getelementptr inbounds %S.gen.Val, ptr %a356, i32 0, i32 0 %t437 = load { ptr, i64, i64 }, ptr %t436 %t438 = load { ptr, i64, i64 }, ptr %a431 call void @finch.gen.store(ptr %t432, { ptr, i64, i64 } %t435, { ptr, i64, i64 } %t437, { ptr, i64, i64 } %t438) %t439 = getelementptr inbounds { ptr, i64, i64 }, ptr %a235, i32 0, i32 1 %t440 = load i64, ptr %t439 %t441 = add i64 %t440, 1 call void @finch_arr_reserve(ptr %a235, i64 %t441, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t442 = load ptr, ptr %a235 %t443 = getelementptr inbounds { ptr, i64, i64 }, ptr %t442, i64 %t440 store { ptr, i64, i64 } { ptr @.str.4681, i64 3, i64 0 }, ptr %t443 store i64 %t441, ptr %t439 %t444 = getelementptr inbounds { ptr, i64, i64 }, ptr %a236, i32 0, i32 1 %t445 = load { ptr, i64, i64 }, ptr %a431 store { ptr, i64, i64 } { ptr @.str.4682, i64 4, i64 0 }, ptr %a447 store { ptr, i64, i64 } %t445, ptr %a448 call void @finch_str_concat(ptr %a446, ptr %a447, ptr %a448) %t449 = load { ptr, i64, i64 }, ptr %a446 %t450 = load i64, ptr %t444 %t451 = add i64 %t450, 1 call void @finch_arr_reserve(ptr %a236, i64 %t451, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t452 = load ptr, ptr %a236 %t453 = getelementptr inbounds { ptr, i64, i64 }, ptr %t452, i64 %t450 store { ptr, i64, i64 } %t449, ptr %t453 store i64 %t451, ptr %t444 br label %endif7218 else7217: %t454 = getelementptr inbounds %S.gen.Abi, ptr %a315, i32 0, i32 0 %t455 = load { ptr, i64, i64 }, ptr %t454 store { ptr, i64, i64 } %t455, ptr %a456 store { ptr, i64, i64 } { ptr @.str.4683, i64 6, i64 0 }, ptr %a457 %t458 = call i32 @finch_str_eq(ptr %a456, ptr %a457) %t459 = icmp ne i32 %t458, 0 br i1 %t459, label %then7219, label %else7220 then7219: %t460 = load ptr, ptr %a1 %t461 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t460, { ptr, i64, i64 } { ptr @.str.4684, i64 9, i64 0 }) store { ptr, i64, i64 } %t461, ptr %a462 %t463 = load ptr, ptr %a1 %t464 = load ptr, ptr %a1 %t465 = load %S.ast.Type, ptr %a303 %t466 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t464, %S.ast.Type %t465) %t467 = getelementptr inbounds %S.gen.Val, ptr %a356, i32 0, i32 0 %t468 = load { ptr, i64, i64 }, ptr %t467 %t469 = load { ptr, i64, i64 }, ptr %a462 call void @finch.gen.store(ptr %t463, { ptr, i64, i64 } %t466, { ptr, i64, i64 } %t468, { ptr, i64, i64 } %t469) %t470 = getelementptr inbounds %S.gen.Abi, ptr %a315, i32 0, i32 1 %t471 = getelementptr inbounds { ptr, i64, i64 }, ptr %t470, i32 0, i32 1 %t472 = load i64, ptr %t471 store i64 0, ptr %a473 br label %for.cond7222 for.cond7222: %t474 = load i64, ptr %a473 %t475 = icmp slt i64 %t474, %t472 br i1 %t475, label %for.body7223, label %for.end7225 for.body7223: %t476 = load ptr, ptr %a1 %t477 = getelementptr inbounds %S.gen.Abi, ptr %a315, i32 0, i32 1 %t478 = load i64, ptr %a473 %t479 = load { ptr, i64, i64 }, ptr %t477 %t480 = extractvalue { ptr, i64, i64 } %t479, 1 %t481 = icmp uge i64 %t478, %t480 br i1 %t481, label %range7226, label %inrange7227 range7226: call void @finch_panic_index(ptr @.str.4685, i64 4198, i64 %t478, i64 %t480) unreachable inrange7227: %t482 = extractvalue { ptr, i64, i64 } %t479, 0 %t483 = getelementptr inbounds { ptr, i64, i64 }, ptr %t482, i64 %t478 %t484 = load { ptr, i64, i64 }, ptr %t483 %t485 = load ptr, ptr %a1 %t486 = load { ptr, i64, i64 }, ptr %a462 store { ptr, i64, i64 } { ptr @.str.4686, i64 31, i64 0 }, ptr %a488 store { ptr, i64, i64 } %t486, ptr %a489 call void @finch_str_concat(ptr %a487, ptr %a488, ptr %a489) %t490 = load { ptr, i64, i64 }, ptr %a487 store { ptr, i64, i64 } %t490, ptr %a492 store { ptr, i64, i64 } { ptr @.str.4687, i64 6, i64 0 }, ptr %a493 call void @finch_str_concat(ptr %a491, ptr %a492, ptr %a493) %t494 = load { ptr, i64, i64 }, ptr %a491 %t495 = load i64, ptr %a473 %t496 = mul i64 8, %t495 call void @finch_str_from_int(ptr %a497, i64 %t496) %t498 = load { ptr, i64, i64 }, ptr %a497 store { ptr, i64, i64 } %t494, ptr %a500 store { ptr, i64, i64 } %t498, ptr %a501 call void @finch_str_concat(ptr %a499, ptr %a500, ptr %a501) %t502 = load { ptr, i64, i64 }, ptr %a499 %t503 = call { ptr, i64, i64 } @finch.gen.op(ptr %t485, { ptr, i64, i64 } %t502) %t504 = call { ptr, i64, i64 } @finch.gen.load(ptr %t476, { ptr, i64, i64 } %t484, { ptr, i64, i64 } %t503) store { ptr, i64, i64 } %t504, ptr %a505 %t506 = getelementptr inbounds { ptr, i64, i64 }, ptr %a235, i32 0, i32 1 %t507 = getelementptr inbounds %S.gen.Abi, ptr %a315, i32 0, i32 1 %t508 = load i64, ptr %a473 %t509 = load { ptr, i64, i64 }, ptr %t507 %t510 = extractvalue { ptr, i64, i64 } %t509, 1 %t511 = icmp uge i64 %t508, %t510 br i1 %t511, label %range7228, label %inrange7229 range7228: call void @finch_panic_index(ptr @.str.4688, i64 4199, i64 %t508, i64 %t510) unreachable inrange7229: %t512 = extractvalue { ptr, i64, i64 } %t509, 0 %t513 = getelementptr inbounds { ptr, i64, i64 }, ptr %t512, i64 %t508 %t514 = load { ptr, i64, i64 }, ptr %t513 store { ptr, i64, i64 } %t514, ptr %a515 call void @finch_str_copy(ptr %a516, ptr %a515) %t517 = load { ptr, i64, i64 }, ptr %a516 %t518 = load i64, ptr %t506 %t519 = add i64 %t518, 1 call void @finch_arr_reserve(ptr %a235, i64 %t519, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t520 = load ptr, ptr %a235 %t521 = getelementptr inbounds { ptr, i64, i64 }, ptr %t520, i64 %t518 store { ptr, i64, i64 } %t517, ptr %t521 store i64 %t519, ptr %t506 %t522 = getelementptr inbounds { ptr, i64, i64 }, ptr %a236, i32 0, i32 1 %t523 = getelementptr inbounds %S.gen.Abi, ptr %a315, i32 0, i32 1 %t524 = load i64, ptr %a473 %t525 = load { ptr, i64, i64 }, ptr %t523 %t526 = extractvalue { ptr, i64, i64 } %t525, 1 %t527 = icmp uge i64 %t524, %t526 br i1 %t527, label %range7230, label %inrange7231 range7230: call void @finch_panic_index(ptr @.str.4689, i64 4200, i64 %t524, i64 %t526) unreachable inrange7231: %t528 = extractvalue { ptr, i64, i64 } %t525, 0 %t529 = getelementptr inbounds { ptr, i64, i64 }, ptr %t528, i64 %t524 %t530 = load { ptr, i64, i64 }, ptr %t529 store { ptr, i64, i64 } %t530, ptr %a532 store { ptr, i64, i64 } { ptr @.str.4690, i64 1, i64 0 }, ptr %a533 call void @finch_str_concat(ptr %a531, ptr %a532, ptr %a533) %t534 = load { ptr, i64, i64 }, ptr %a531 %t535 = load { ptr, i64, i64 }, ptr %a505 store { ptr, i64, i64 } %t534, ptr %a537 store { ptr, i64, i64 } %t535, ptr %a538 call void @finch_str_concat(ptr %a536, ptr %a537, ptr %a538) %t539 = load { ptr, i64, i64 }, ptr %a536 %t540 = load i64, ptr %t522 %t541 = add i64 %t540, 1 call void @finch_arr_reserve(ptr %a236, i64 %t541, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t542 = load ptr, ptr %a236 %t543 = getelementptr inbounds { ptr, i64, i64 }, ptr %t542, i64 %t540 store { ptr, i64, i64 } %t539, ptr %t543 store i64 %t541, ptr %t522 br label %for.step7224 for.step7224: %t544 = load i64, ptr %a473 %t545 = add i64 %t544, 1 store i64 %t545, ptr %a473 br label %for.cond7222 for.end7225: br label %endif7221 else7220: %t546 = getelementptr inbounds { ptr, i64, i64 }, ptr %a235, i32 0, i32 1 %t547 = load ptr, ptr %a1 %t548 = load %S.ast.Type, ptr %a303 %t549 = call { ptr, i64, i64 } @finch.gen.cLL(ptr %t547, %S.ast.Type %t548) %t550 = load ptr, ptr %a1 %t551 = load %S.ast.Type, ptr %a303 %t552 = call { ptr, i64, i64 } @finch.gen.cExt(ptr %t550, %S.ast.Type %t551) store { ptr, i64, i64 } %t549, ptr %a554 store { ptr, i64, i64 } %t552, ptr %a555 call void @finch_str_concat(ptr %a553, ptr %a554, ptr %a555) %t556 = load { ptr, i64, i64 }, ptr %a553 %t557 = load i64, ptr %t546 %t558 = add i64 %t557, 1 call void @finch_arr_reserve(ptr %a235, i64 %t558, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t559 = load ptr, ptr %a235 %t560 = getelementptr inbounds { ptr, i64, i64 }, ptr %t559, i64 %t557 store { ptr, i64, i64 } %t556, ptr %t560 store i64 %t558, ptr %t546 %t561 = getelementptr inbounds %S.ast.Type, ptr %a303, i32 0, i32 0 %t562 = load { ptr, i64, i64 }, ptr %t561 store { ptr, i64, i64 } %t562, ptr %a563 store { ptr, i64, i64 } { ptr @.str.4691, i64 3, i64 0 }, ptr %a564 %t565 = call i32 @finch_str_eq(ptr %a563, ptr %a564) %t566 = icmp ne i32 %t565, 0 br i1 %t566, label %then7232, label %else7233 then7232: %t567 = getelementptr inbounds { ptr, i64, i64 }, ptr %a236, i32 0, i32 1 %t568 = load ptr, ptr %a1 %t569 = getelementptr inbounds %S.gen.Val, ptr %a356, i32 0, i32 0 %t570 = load { ptr, i64, i64 }, ptr %t569 %t571 = call { ptr, i64, i64 } @finch.gen.cstr(ptr %t568, { ptr, i64, i64 } %t570) store { ptr, i64, i64 } { ptr @.str.4692, i64 4, i64 0 }, ptr %a573 store { ptr, i64, i64 } %t571, ptr %a574 call void @finch_str_concat(ptr %a572, ptr %a573, ptr %a574) %t575 = load { ptr, i64, i64 }, ptr %a572 %t576 = load i64, ptr %t567 %t577 = add i64 %t576, 1 call void @finch_arr_reserve(ptr %a236, i64 %t577, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t578 = load ptr, ptr %a236 %t579 = getelementptr inbounds { ptr, i64, i64 }, ptr %t578, i64 %t576 store { ptr, i64, i64 } %t575, ptr %t579 store i64 %t577, ptr %t567 br label %endif7234 else7233: %t580 = getelementptr inbounds { ptr, i64, i64 }, ptr %a236, i32 0, i32 1 %t581 = load ptr, ptr %a1 %t582 = load %S.ast.Type, ptr %a303 %t583 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t581, %S.ast.Type %t582) %t584 = load ptr, ptr %a1 %t585 = load %S.ast.Type, ptr %a303 %t586 = call { ptr, i64, i64 } @finch.gen.cExt(ptr %t584, %S.ast.Type %t585) store { ptr, i64, i64 } %t583, ptr %a588 store { ptr, i64, i64 } %t586, ptr %a589 call void @finch_str_concat(ptr %a587, ptr %a588, ptr %a589) %t590 = load { ptr, i64, i64 }, ptr %a587 store { ptr, i64, i64 } %t590, ptr %a592 store { ptr, i64, i64 } { ptr @.str.4693, i64 1, i64 0 }, ptr %a593 call void @finch_str_concat(ptr %a591, ptr %a592, ptr %a593) %t594 = load { ptr, i64, i64 }, ptr %a591 %t595 = getelementptr inbounds %S.gen.Val, ptr %a356, i32 0, i32 0 %t596 = load { ptr, i64, i64 }, ptr %t595 store { ptr, i64, i64 } %t594, ptr %a598 store { ptr, i64, i64 } %t596, ptr %a599 call void @finch_str_concat(ptr %a597, ptr %a598, ptr %a599) %t600 = load { ptr, i64, i64 }, ptr %a597 %t601 = load i64, ptr %t580 %t602 = add i64 %t601, 1 call void @finch_arr_reserve(ptr %a236, i64 %t602, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t603 = load ptr, ptr %a236 %t604 = getelementptr inbounds { ptr, i64, i64 }, ptr %t603, i64 %t601 store { ptr, i64, i64 } %t600, ptr %t604 store i64 %t602, ptr %t580 br label %endif7234 endif7234: br label %endif7221 endif7221: br label %endif7218 endif7218: br label %endif7215 endif7215: br label %for.step7200 endif7204: %t605 = load ptr, ptr %a1 %t606 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t607 = load i64, ptr %a285 %t608 = load { ptr, i64, i64 }, ptr %t606 %t609 = extractvalue { ptr, i64, i64 } %t608, 1 %t610 = icmp uge i64 %t607, %t609 br i1 %t610, label %range7235, label %inrange7236 range7235: call void @finch_panic_index(ptr @.str.4694, i64 4213, i64 %t607, i64 %t609) unreachable inrange7236: %t611 = extractvalue { ptr, i64, i64 } %t608, 0 %t612 = getelementptr inbounds %S.ast.Node, ptr %t611, i64 %t607 %t613 = load %S.ast.Node, ptr %t612 %t614 = call %S.gen.Val @finch.gen.expr(ptr %t605, %S.ast.Node %t613) store %S.gen.Val %t614, ptr %a615 %t616 = getelementptr inbounds %S.gen.Val, ptr %a615, i32 0, i32 1 %t617 = load %S.ast.Type, ptr %t616 store %S.ast.Type %t617, ptr %a618 call void @finch.copy.S_ast_Type(ptr %a619, ptr %a618) %t620 = load %S.ast.Type, ptr %a619 store %S.ast.Type %t620, ptr %a621 %t622 = getelementptr inbounds %S.ast.Type, ptr %a621, i32 0, i32 0 %t623 = load { ptr, i64, i64 }, ptr %t622 store { ptr, i64, i64 } %t623, ptr %a624 store { ptr, i64, i64 } { ptr @.str.4695, i64 4, i64 0 }, ptr %a625 %t626 = call i32 @finch_str_eq(ptr %a624, ptr %a625) %t627 = icmp ne i32 %t626, 0 br i1 %t627, label %then7237, label %endif7239 then7237: %t628 = load ptr, ptr %a1 %t629 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t630 = load i64, ptr %a285 %t631 = load { ptr, i64, i64 }, ptr %t629 %t632 = extractvalue { ptr, i64, i64 } %t631, 1 %t633 = icmp uge i64 %t630, %t632 br i1 %t633, label %range7240, label %inrange7241 range7240: call void @finch_panic_index(ptr @.str.4696, i64 4216, i64 %t630, i64 %t632) unreachable inrange7241: %t634 = extractvalue { ptr, i64, i64 } %t631, 0 %t635 = getelementptr inbounds %S.ast.Node, ptr %t634, i64 %t630 %t636 = load %S.ast.Node, ptr %t635 call void @finch.gen.fail(ptr %t628, %S.ast.Node %t636, { ptr, i64, i64 } { ptr @.str.4697, i64 23, i64 0 }) br label %endif7239 endif7239: %t637 = getelementptr inbounds %S.ast.Type, ptr %a621, i32 0, i32 0 %t638 = load { ptr, i64, i64 }, ptr %t637 store { ptr, i64, i64 } %t638, ptr %a639 store { ptr, i64, i64 } { ptr @.str.4698, i64 6, i64 0 }, ptr %a640 %t641 = call i32 @finch_str_eq(ptr %a639, ptr %a640) %t642 = icmp ne i32 %t641, 0 br label %logic.from7242 logic.from7242: br i1 %t642, label %logic.end7244, label %logic.rhs7243 logic.rhs7243: %t643 = getelementptr inbounds %S.ast.Type, ptr %a621, i32 0, i32 0 %t644 = load { ptr, i64, i64 }, ptr %t643 store { ptr, i64, i64 } %t644, ptr %a645 store { ptr, i64, i64 } { ptr @.str.4699, i64 5, i64 0 }, ptr %a646 %t647 = call i32 @finch_str_eq(ptr %a645, ptr %a646) %t648 = icmp ne i32 %t647, 0 br label %logic.rend7245 logic.rend7245: br label %logic.end7244 logic.end7244: %t649 = phi i1 [ true, %logic.from7242 ], [ %t648, %logic.rend7245 ] br i1 %t649, label %then7246, label %endif7248 then7246: %t650 = load ptr, ptr %a1 %t651 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t652 = load i64, ptr %a285 %t653 = load { ptr, i64, i64 }, ptr %t651 %t654 = extractvalue { ptr, i64, i64 } %t653, 1 %t655 = icmp uge i64 %t652, %t654 br i1 %t655, label %range7249, label %inrange7250 range7249: call void @finch_panic_index(ptr @.str.4700, i64 4219, i64 %t652, i64 %t654) unreachable inrange7250: %t656 = extractvalue { ptr, i64, i64 } %t653, 0 %t657 = getelementptr inbounds %S.ast.Node, ptr %t656, i64 %t652 %t658 = load %S.ast.Node, ptr %t657 call void @finch.gen.fail(ptr %t650, %S.ast.Node %t658, { ptr, i64, i64 } { ptr @.str.4701, i64 68, i64 0 }) br label %endif7248 endif7248: %t659 = getelementptr inbounds %S.gen.Val, ptr %a615, i32 0, i32 0 %t660 = load { ptr, i64, i64 }, ptr %t659 store { ptr, i64, i64 } %t660, ptr %a661 call void @finch_str_copy(ptr %a662, ptr %a661) %t663 = load { ptr, i64, i64 }, ptr %a662 store { ptr, i64, i64 } %t663, ptr %a664 %t665 = getelementptr inbounds %S.ast.Type, ptr %a621, i32 0, i32 0 %t666 = load { ptr, i64, i64 }, ptr %t665 store { ptr, i64, i64 } %t666, ptr %a667 store { ptr, i64, i64 } { ptr @.str.4702, i64 3, i64 0 }, ptr %a668 %t669 = call i32 @finch_str_eq(ptr %a667, ptr %a668) %t670 = icmp ne i32 %t669, 0 br i1 %t670, label %then7251, label %else7252 then7251: %t671 = load ptr, ptr %a1 %t672 = load { ptr, i64, i64 }, ptr %a664 %t673 = load %S.ast.Type, ptr %a621 %t674 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4703, i64 5, i64 0 }) %t675 = call { ptr, i64, i64 } @finch.gen.floatCast(ptr %t671, { ptr, i64, i64 } %t672, %S.ast.Type %t673, %S.ast.Type %t674) store { ptr, i64, i64 } %t675, ptr %a664 %t676 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4704, i64 5, i64 0 }) store %S.ast.Type %t676, ptr %a621 br label %endif7253 else7252: %t677 = getelementptr inbounds %S.ast.Type, ptr %a621, i32 0, i32 0 %t678 = load { ptr, i64, i64 }, ptr %t677 store { ptr, i64, i64 } %t678, ptr %a679 store { ptr, i64, i64 } { ptr @.str.4705, i64 3, i64 0 }, ptr %a680 %t681 = call i32 @finch_str_eq(ptr %a679, ptr %a680) %t682 = icmp ne i32 %t681, 0 br i1 %t682, label %then7254, label %else7255 then7254: %t683 = load ptr, ptr %a1 %t684 = load { ptr, i64, i64 }, ptr %a664 %t685 = call { ptr, i64, i64 } @finch.gen.cstr(ptr %t683, { ptr, i64, i64 } %t684) store { ptr, i64, i64 } %t685, ptr %a664 %t686 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4706, i64 3, i64 0 }) store %S.ast.Type %t686, ptr %a621 br label %endif7256 else7255: %t687 = getelementptr inbounds %S.ast.Type, ptr %a621, i32 0, i32 0 %t688 = load { ptr, i64, i64 }, ptr %t687 store { ptr, i64, i64 } %t688, ptr %a689 store { ptr, i64, i64 } { ptr @.str.4707, i64 4, i64 0 }, ptr %a690 %t691 = call i32 @finch_str_eq(ptr %a689, ptr %a690) %t692 = icmp ne i32 %t691, 0 br i1 %t692, label %then7257, label %else7258 then7257: %t693 = load ptr, ptr %a1 %t694 = getelementptr inbounds %S.gen.Val, ptr %a615, i32 0, i32 0 %t695 = load { ptr, i64, i64 }, ptr %t694 store { ptr, i64, i64 } { ptr @.str.4708, i64 8, i64 0 }, ptr %a697 store { ptr, i64, i64 } %t695, ptr %a698 call void @finch_str_concat(ptr %a696, ptr %a697, ptr %a698) %t699 = load { ptr, i64, i64 }, ptr %a696 store { ptr, i64, i64 } %t699, ptr %a701 store { ptr, i64, i64 } { ptr @.str.4709, i64 7, i64 0 }, ptr %a702 call void @finch_str_concat(ptr %a700, ptr %a701, ptr %a702) %t703 = load { ptr, i64, i64 }, ptr %a700 %t704 = call { ptr, i64, i64 } @finch.gen.op(ptr %t693, { ptr, i64, i64 } %t703) store { ptr, i64, i64 } %t704, ptr %a664 %t705 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4710, i64 3, i64 0 }) store %S.ast.Type %t705, ptr %a621 br label %endif7259 else7258: %t706 = load %S.ast.Type, ptr %a621 %t707 = call i1 @finch.gen.isInt(%S.ast.Type %t706) br label %logic.from7260 logic.from7260: br i1 %t707, label %logic.end7262, label %logic.rhs7261 logic.rhs7261: %t708 = getelementptr inbounds %S.ast.Type, ptr %a621, i32 0, i32 0 %t709 = load { ptr, i64, i64 }, ptr %t708 store { ptr, i64, i64 } %t709, ptr %a710 store { ptr, i64, i64 } { ptr @.str.4711, i64 4, i64 0 }, ptr %a711 %t712 = call i32 @finch_str_eq(ptr %a710, ptr %a711) %t713 = icmp ne i32 %t712, 0 br label %logic.rend7263 logic.rend7263: br label %logic.end7262 logic.end7262: %t714 = phi i1 [ true, %logic.from7260 ], [ %t713, %logic.rend7263 ] br label %logic.from7264 logic.from7264: br i1 %t714, label %logic.rhs7265, label %logic.end7266 logic.rhs7265: %t715 = load %S.ast.Type, ptr %a621 %t716 = call i64 @finch.gen.bitsOf(%S.ast.Type %t715) %t717 = icmp slt i64 %t716, 32 br label %logic.rend7267 logic.rend7267: br label %logic.end7266 logic.end7266: %t718 = phi i1 [ false, %logic.from7264 ], [ %t717, %logic.rend7267 ] br i1 %t718, label %then7268, label %endif7270 then7268: %t719 = load ptr, ptr %a1 %t720 = load { ptr, i64, i64 }, ptr %a664 %t721 = load %S.ast.Type, ptr %a621 %t722 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4712, i64 3, i64 0 }) %t723 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t719, { ptr, i64, i64 } %t720, %S.ast.Type %t721, %S.ast.Type %t722) store { ptr, i64, i64 } %t723, ptr %a664 %t724 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4713, i64 3, i64 0 }) store %S.ast.Type %t724, ptr %a621 br label %endif7270 endif7270: br label %endif7259 endif7259: br label %endif7256 endif7256: br label %endif7253 endif7253: %t725 = getelementptr inbounds { ptr, i64, i64 }, ptr %a236, i32 0, i32 1 %t726 = load ptr, ptr %a1 %t727 = load %S.ast.Type, ptr %a621 %t728 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t726, %S.ast.Type %t727) store { ptr, i64, i64 } %t728, ptr %a730 store { ptr, i64, i64 } { ptr @.str.4714, i64 1, i64 0 }, ptr %a731 call void @finch_str_concat(ptr %a729, ptr %a730, ptr %a731) %t732 = load { ptr, i64, i64 }, ptr %a729 %t733 = load { ptr, i64, i64 }, ptr %a664 store { ptr, i64, i64 } %t732, ptr %a735 store { ptr, i64, i64 } %t733, ptr %a736 call void @finch_str_concat(ptr %a734, ptr %a735, ptr %a736) %t737 = load { ptr, i64, i64 }, ptr %a734 %t738 = load i64, ptr %t725 %t739 = add i64 %t738, 1 call void @finch_arr_reserve(ptr %a236, i64 %t739, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t740 = load ptr, ptr %a236 %t741 = getelementptr inbounds { ptr, i64, i64 }, ptr %t740, i64 %t738 store { ptr, i64, i64 } %t737, ptr %t741 store i64 %t739, ptr %t725 br label %for.step7200 for.step7200: %t742 = load i64, ptr %a285 %t743 = add i64 %t742, 1 store i64 %t743, ptr %a285 br label %for.cond7198 for.end7201: %t744 = getelementptr inbounds %S.gen.Plan, ptr %a234, i32 0, i32 2 %t745 = load { ptr, i64, i64 }, ptr %t744 store { ptr, i64, i64 } %t745, ptr %a746 call void @finch_str_copy(ptr %a747, ptr %a746) %t748 = load { ptr, i64, i64 }, ptr %a747 store { ptr, i64, i64 } %t748, ptr %a749 store { ptr, i64, i64 } { ptr @.str.4715, i64 0, i64 0 }, ptr %a750 %t751 = getelementptr inbounds %S.gen.Plan, ptr %a234, i32 0, i32 0 %t752 = getelementptr inbounds %S.gen.Abi, ptr %t751, i32 0, i32 0 %t753 = load { ptr, i64, i64 }, ptr %t752 store { ptr, i64, i64 } %t753, ptr %a754 store { ptr, i64, i64 } { ptr @.str.4716, i64 6, i64 0 }, ptr %a755 %t756 = call i32 @finch_str_eq(ptr %a754, ptr %a755) %t757 = icmp ne i32 %t756, 0 br i1 %t757, label %then7271, label %endif7273 then7271: %t758 = load ptr, ptr %a1 %t759 = load %S.ast.Type, ptr %a192 %t760 = call { ptr, i64, i64 } @finch.gen.cExt(ptr %t758, %S.ast.Type %t759) store { ptr, i64, i64 } %t760, ptr %a750 br label %endif7273 endif7273: store { ptr, i64, i64 } { ptr @.str.4717, i64 0, i64 0 }, ptr %a761 %t762 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 4 %t763 = load i1, ptr %t762 br i1 %t763, label %then7274, label %endif7276 then7274: store { ptr, i64, i64 } { ptr @.str.4718, i64 5, i64 0 }, ptr %a761 %t764 = getelementptr inbounds { ptr, i64, i64 }, ptr %a235, i32 0, i32 1 %t765 = load i64, ptr %t764 %t766 = icmp eq i64 %t765, 0 br i1 %t766, label %then7277, label %endif7279 then7277: store { ptr, i64, i64 } { ptr @.str.4719, i64 3, i64 0 }, ptr %a761 br label %endif7279 endif7279: br label %endif7276 endif7276: %t767 = load ptr, ptr %a1 %t768 = icmp eq ptr %t767, null br i1 %t768, label %panic7280, label %ok7281 panic7280: call void @finch_panic(ptr @.str.4720, i64 4250, ptr @.str.4721) unreachable ok7281: %t769 = getelementptr inbounds %S.gen.Gen, ptr %t767, i32 0, i32 38 %t770 = getelementptr inbounds { ptr, i64, i64 }, ptr %t769, i32 0, i32 1 %t771 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 %t772 = load { ptr, i64, i64 }, ptr %t771 store { ptr, i64, i64 } { ptr @.str.4722, i64 2, i64 0 }, ptr %a774 store { ptr, i64, i64 } %t772, ptr %a775 call void @finch_str_concat(ptr %a773, ptr %a774, ptr %a775) %t776 = load { ptr, i64, i64 }, ptr %a773 store i64 -1, ptr %a777 %t778 = load i64, ptr %t770 %t779 = load ptr, ptr %t769 store i64 0, ptr %a780 br label %find.cond7282 find.cond7282: %t781 = load i64, ptr %a780 %t782 = icmp slt i64 %t781, %t778 br i1 %t782, label %find.body7283, label %find.end7286 find.body7283: %t783 = getelementptr inbounds { ptr, i64, i64 }, ptr %t779, i64 %t781 %t784 = load { ptr, i64, i64 }, ptr %t783 store { ptr, i64, i64 } %t784, ptr %a785 store { ptr, i64, i64 } %t776, ptr %a786 %t787 = call i32 @finch_str_eq(ptr %a785, ptr %a786) %t788 = icmp ne i32 %t787, 0 br i1 %t788, label %find.hit7284, label %find.next7285 find.hit7284: store i64 %t781, ptr %a777 br label %find.end7286 find.next7285: %t789 = add i64 %t781, 1 store i64 %t789, ptr %a780 br label %find.cond7282 find.end7286: %t790 = load i64, ptr %a777 %t791 = icmp sge i64 %t790, 0 %t792 = xor i1 %t791, true br i1 %t792, label %then7287, label %endif7289 then7287: %t793 = load ptr, ptr %a1 %t794 = icmp eq ptr %t793, null br i1 %t794, label %panic7290, label %ok7291 panic7290: call void @finch_panic(ptr @.str.4723, i64 4251, ptr @.str.4724) unreachable ok7291: %t795 = getelementptr inbounds %S.gen.Gen, ptr %t793, i32 0, i32 38 %t796 = getelementptr inbounds { ptr, i64, i64 }, ptr %t795, i32 0, i32 1 %t797 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 %t798 = load { ptr, i64, i64 }, ptr %t797 store { ptr, i64, i64 } { ptr @.str.4725, i64 2, i64 0 }, ptr %a800 store { ptr, i64, i64 } %t798, ptr %a801 call void @finch_str_concat(ptr %a799, ptr %a800, ptr %a801) %t802 = load { ptr, i64, i64 }, ptr %a799 %t803 = load i64, ptr %t796 %t804 = add i64 %t803, 1 call void @finch_arr_reserve(ptr %t795, i64 %t804, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t805 = load ptr, ptr %t795 %t806 = getelementptr inbounds { ptr, i64, i64 }, ptr %t805, i64 %t803 store { ptr, i64, i64 } %t802, ptr %t806 store i64 %t804, ptr %t796 %t807 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 %t808 = load { ptr, i64, i64 }, ptr %t807 %t809 = call i1 @finch.gen.runtimeDeclares({ ptr, i64, i64 } %t808) %t810 = xor i1 %t809, true br i1 %t810, label %then7292, label %endif7294 then7292: %t811 = load ptr, ptr %a1 %t812 = icmp eq ptr %t811, null br i1 %t812, label %panic7295, label %ok7296 panic7295: call void @finch_panic(ptr @.str.4726, i64 4253, ptr @.str.4727) unreachable ok7296: %t813 = getelementptr inbounds %S.gen.Gen, ptr %t811, i32 0, i32 2 %t814 = getelementptr inbounds { ptr, i64, i64 }, ptr %t813, i32 0, i32 1 %t815 = load { ptr, i64, i64 }, ptr %a750 store { ptr, i64, i64 } { ptr @.str.4728, i64 7, i64 0 }, ptr %a817 store { ptr, i64, i64 } %t815, ptr %a818 call void @finch_str_concat(ptr %a816, ptr %a817, ptr %a818) %t819 = load { ptr, i64, i64 }, ptr %a816 store { ptr, i64, i64 } %t819, ptr %a821 store { ptr, i64, i64 } { ptr @.str.4729, i64 1, i64 0 }, ptr %a822 call void @finch_str_concat(ptr %a820, ptr %a821, ptr %a822) %t823 = load { ptr, i64, i64 }, ptr %a820 %t824 = load { ptr, i64, i64 }, ptr %a749 store { ptr, i64, i64 } %t823, ptr %a826 store { ptr, i64, i64 } %t824, ptr %a827 call void @finch_str_concat(ptr %a825, ptr %a826, ptr %a827) %t828 = load { ptr, i64, i64 }, ptr %a825 store { ptr, i64, i64 } %t828, ptr %a830 store { ptr, i64, i64 } { ptr @.str.4730, i64 2, i64 0 }, ptr %a831 call void @finch_str_concat(ptr %a829, ptr %a830, ptr %a831) %t832 = load { ptr, i64, i64 }, ptr %a829 %t833 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 %t834 = load { ptr, i64, i64 }, ptr %t833 store { ptr, i64, i64 } %t832, ptr %a836 store { ptr, i64, i64 } %t834, ptr %a837 call void @finch_str_concat(ptr %a835, ptr %a836, ptr %a837) %t838 = load { ptr, i64, i64 }, ptr %a835 store { ptr, i64, i64 } %t838, ptr %a840 store { ptr, i64, i64 } { ptr @.str.4731, i64 1, i64 0 }, ptr %a841 call void @finch_str_concat(ptr %a839, ptr %a840, ptr %a841) %t842 = load { ptr, i64, i64 }, ptr %a839 %t843 = getelementptr inbounds { ptr, i64, i64 }, ptr %a235, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.4732, i64 2, i64 0 }, ptr %a844 call void @finch_str_join(ptr %a845, ptr %a235, ptr %a844) %t846 = load { ptr, i64, i64 }, ptr %a845 store { ptr, i64, i64 } %t842, ptr %a848 store { ptr, i64, i64 } %t846, ptr %a849 call void @finch_str_concat(ptr %a847, ptr %a848, ptr %a849) %t850 = load { ptr, i64, i64 }, ptr %a847 %t851 = load { ptr, i64, i64 }, ptr %a761 store { ptr, i64, i64 } %t850, ptr %a853 store { ptr, i64, i64 } %t851, ptr %a854 call void @finch_str_concat(ptr %a852, ptr %a853, ptr %a854) %t855 = load { ptr, i64, i64 }, ptr %a852 store { ptr, i64, i64 } %t855, ptr %a857 store { ptr, i64, i64 } { ptr @.str.4733, i64 1, i64 0 }, ptr %a858 call void @finch_str_concat(ptr %a856, ptr %a857, ptr %a858) %t859 = load { ptr, i64, i64 }, ptr %a856 %t860 = load i64, ptr %t814 %t861 = add i64 %t860, 1 call void @finch_arr_reserve(ptr %t813, i64 %t861, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t862 = load ptr, ptr %t813 %t863 = getelementptr inbounds { ptr, i64, i64 }, ptr %t862, i64 %t860 store { ptr, i64, i64 } %t859, ptr %t863 store i64 %t861, ptr %t814 br label %endif7294 endif7294: br label %endif7289 endif7289: store { ptr, i64, i64 } { ptr @.str.4734, i64 0, i64 0 }, ptr %a864 %t865 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 4 %t866 = load i1, ptr %t865 br i1 %t866, label %then7297, label %endif7299 then7297: %t867 = getelementptr inbounds { ptr, i64, i64 }, ptr %a235, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.4736, i64 2, i64 0 }, ptr %a868 call void @finch_str_join(ptr %a869, ptr %a235, ptr %a868) %t870 = load { ptr, i64, i64 }, ptr %a869 store { ptr, i64, i64 } { ptr @.str.4735, i64 2, i64 0 }, ptr %a872 store { ptr, i64, i64 } %t870, ptr %a873 call void @finch_str_concat(ptr %a871, ptr %a872, ptr %a873) %t874 = load { ptr, i64, i64 }, ptr %a871 %t875 = load { ptr, i64, i64 }, ptr %a761 store { ptr, i64, i64 } %t874, ptr %a877 store { ptr, i64, i64 } %t875, ptr %a878 call void @finch_str_concat(ptr %a876, ptr %a877, ptr %a878) %t879 = load { ptr, i64, i64 }, ptr %a876 store { ptr, i64, i64 } %t879, ptr %a881 store { ptr, i64, i64 } { ptr @.str.4737, i64 1, i64 0 }, ptr %a882 call void @finch_str_concat(ptr %a880, ptr %a881, ptr %a882) %t883 = load { ptr, i64, i64 }, ptr %a880 store { ptr, i64, i64 } %t883, ptr %a864 br label %endif7299 endif7299: %t884 = load { ptr, i64, i64 }, ptr %a750 store { ptr, i64, i64 } { ptr @.str.4738, i64 4, i64 0 }, ptr %a886 store { ptr, i64, i64 } %t884, ptr %a887 call void @finch_str_concat(ptr %a885, ptr %a886, ptr %a887) %t888 = load { ptr, i64, i64 }, ptr %a885 store { ptr, i64, i64 } %t888, ptr %a890 store { ptr, i64, i64 } { ptr @.str.4739, i64 1, i64 0 }, ptr %a891 call void @finch_str_concat(ptr %a889, ptr %a890, ptr %a891) %t892 = load { ptr, i64, i64 }, ptr %a889 %t893 = load { ptr, i64, i64 }, ptr %a749 store { ptr, i64, i64 } %t892, ptr %a895 store { ptr, i64, i64 } %t893, ptr %a896 call void @finch_str_concat(ptr %a894, ptr %a895, ptr %a896) %t897 = load { ptr, i64, i64 }, ptr %a894 %t898 = load { ptr, i64, i64 }, ptr %a864 store { ptr, i64, i64 } %t897, ptr %a900 store { ptr, i64, i64 } %t898, ptr %a901 call void @finch_str_concat(ptr %a899, ptr %a900, ptr %a901) %t902 = load { ptr, i64, i64 }, ptr %a899 store { ptr, i64, i64 } %t902, ptr %a904 store { ptr, i64, i64 } { ptr @.str.4740, i64 2, i64 0 }, ptr %a905 call void @finch_str_concat(ptr %a903, ptr %a904, ptr %a905) %t906 = load { ptr, i64, i64 }, ptr %a903 %t907 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 %t908 = load { ptr, i64, i64 }, ptr %t907 store { ptr, i64, i64 } %t906, ptr %a910 store { ptr, i64, i64 } %t908, ptr %a911 call void @finch_str_concat(ptr %a909, ptr %a910, ptr %a911) %t912 = load { ptr, i64, i64 }, ptr %a909 store { ptr, i64, i64 } %t912, ptr %a914 store { ptr, i64, i64 } { ptr @.str.4741, i64 1, i64 0 }, ptr %a915 call void @finch_str_concat(ptr %a913, ptr %a914, ptr %a915) %t916 = load { ptr, i64, i64 }, ptr %a913 %t917 = getelementptr inbounds { ptr, i64, i64 }, ptr %a236, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.4742, i64 2, i64 0 }, ptr %a918 call void @finch_str_join(ptr %a919, ptr %a236, ptr %a918) %t920 = load { ptr, i64, i64 }, ptr %a919 store { ptr, i64, i64 } %t916, ptr %a922 store { ptr, i64, i64 } %t920, ptr %a923 call void @finch_str_concat(ptr %a921, ptr %a922, ptr %a923) %t924 = load { ptr, i64, i64 }, ptr %a921 store { ptr, i64, i64 } %t924, ptr %a926 store { ptr, i64, i64 } { ptr @.str.4743, i64 1, i64 0 }, ptr %a927 call void @finch_str_concat(ptr %a925, ptr %a926, ptr %a927) %t928 = load { ptr, i64, i64 }, ptr %a925 store { ptr, i64, i64 } %t928, ptr %a929 %t930 = getelementptr inbounds %S.ast.Type, ptr %a192, i32 0, i32 0 %t931 = load { ptr, i64, i64 }, ptr %t930 store { ptr, i64, i64 } %t931, ptr %a932 store { ptr, i64, i64 } { ptr @.str.4744, i64 4, i64 0 }, ptr %a933 %t934 = call i32 @finch_str_eq(ptr %a932, ptr %a933) %t935 = icmp ne i32 %t934, 0 br i1 %t935, label %then7300, label %endif7302 then7300: %t936 = load ptr, ptr %a1 %t937 = load { ptr, i64, i64 }, ptr %a929 call void @finch.gen.emit(ptr %t936, { ptr, i64, i64 } %t937) %t938 = load %S.ast.Type, ptr %a192 store %S.ast.Type %t938, ptr %a939 call void @finch.copy.S_ast_Type(ptr %a940, ptr %a939) %t941 = load %S.ast.Type, ptr %a940 %t942 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t941, 1 ret %S.gen.Val %t942 endif7302: %t943 = getelementptr inbounds %S.gen.Plan, ptr %a234, i32 0, i32 3 %t944 = load i1, ptr %t943 br i1 %t944, label %then7303, label %endif7305 then7303: %t945 = load ptr, ptr %a1 %t946 = load { ptr, i64, i64 }, ptr %a929 call void @finch.gen.emit(ptr %t945, { ptr, i64, i64 } %t946) %t947 = load ptr, ptr %a1 %t948 = load ptr, ptr %a1 %t949 = load %S.ast.Type, ptr %a192 %t950 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t948, %S.ast.Type %t949) %t951 = load { ptr, i64, i64 }, ptr %a237 %t952 = call { ptr, i64, i64 } @finch.gen.load(ptr %t947, { ptr, i64, i64 } %t950, { ptr, i64, i64 } %t951) %t953 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t952, 0 %t954 = load %S.ast.Type, ptr %a192 store %S.ast.Type %t954, ptr %a955 call void @finch.copy.S_ast_Type(ptr %a956, ptr %a955) %t957 = load %S.ast.Type, ptr %a956 %t958 = insertvalue %S.gen.Val %t953, %S.ast.Type %t957, 1 ret %S.gen.Val %t958 endif7305: %t959 = load ptr, ptr %a1 %t960 = load { ptr, i64, i64 }, ptr %a929 %t961 = call { ptr, i64, i64 } @finch.gen.op(ptr %t959, { ptr, i64, i64 } %t960) store { ptr, i64, i64 } %t961, ptr %a962 %t963 = getelementptr inbounds %S.gen.Plan, ptr %a234, i32 0, i32 0 %t964 = getelementptr inbounds %S.gen.Abi, ptr %t963, i32 0, i32 0 %t965 = load { ptr, i64, i64 }, ptr %t964 store { ptr, i64, i64 } %t965, ptr %a966 store { ptr, i64, i64 } { ptr @.str.4745, i64 6, i64 0 }, ptr %a967 %t968 = call i32 @finch_str_eq(ptr %a966, ptr %a967) %t969 = icmp ne i32 %t968, 0 br i1 %t969, label %then7306, label %endif7308 then7306: %t970 = load ptr, ptr %a1 %t971 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t970, { ptr, i64, i64 } { ptr @.str.4746, i64 9, i64 0 }) store { ptr, i64, i64 } %t971, ptr %a972 %t973 = load ptr, ptr %a1 %t974 = getelementptr inbounds %S.gen.Plan, ptr %a234, i32 0, i32 0 %t975 = getelementptr inbounds %S.gen.Abi, ptr %t974, i32 0, i32 2 %t976 = load { ptr, i64, i64 }, ptr %t975 %t977 = load { ptr, i64, i64 }, ptr %a962 %t978 = load { ptr, i64, i64 }, ptr %a972 call void @finch.gen.store(ptr %t973, { ptr, i64, i64 } %t976, { ptr, i64, i64 } %t977, { ptr, i64, i64 } %t978) %t979 = load ptr, ptr %a1 %t980 = load ptr, ptr %a1 %t981 = load %S.ast.Type, ptr %a192 %t982 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t980, %S.ast.Type %t981) %t983 = load { ptr, i64, i64 }, ptr %a972 %t984 = call { ptr, i64, i64 } @finch.gen.load(ptr %t979, { ptr, i64, i64 } %t982, { ptr, i64, i64 } %t983) %t985 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t984, 0 %t986 = load %S.ast.Type, ptr %a192 store %S.ast.Type %t986, ptr %a987 call void @finch.copy.S_ast_Type(ptr %a988, ptr %a987) %t989 = load %S.ast.Type, ptr %a988 %t990 = insertvalue %S.gen.Val %t985, %S.ast.Type %t989, 1 ret %S.gen.Val %t990 endif7308: %t991 = getelementptr inbounds %S.ast.Type, ptr %a192, i32 0, i32 0 %t992 = load { ptr, i64, i64 }, ptr %t991 store { ptr, i64, i64 } %t992, ptr %a993 store { ptr, i64, i64 } { ptr @.str.4747, i64 3, i64 0 }, ptr %a994 %t995 = call i32 @finch_str_eq(ptr %a993, ptr %a994) %t996 = icmp ne i32 %t995, 0 br i1 %t996, label %then7309, label %endif7311 then7309: %t997 = load ptr, ptr %a1 %t998 = call { ptr, i64, i64 } @finch.gen.strOut(ptr %t997) store { ptr, i64, i64 } %t998, ptr %a999 %t1000 = load ptr, ptr %a1 %t1001 = load { ptr, i64, i64 }, ptr %a999 call void @finch.gen.store(ptr %t1000, { ptr, i64, i64 } { ptr @.str.4748, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.4749, i64 15, i64 0 }, { ptr, i64, i64 } %t1001) %t1002 = load ptr, ptr %a1 %t1003 = load { ptr, i64, i64 }, ptr %a999 store { ptr, i64, i64 } { ptr @.str.4750, i64 32, i64 0 }, ptr %a1005 store { ptr, i64, i64 } %t1003, ptr %a1006 call void @finch_str_concat(ptr %a1004, ptr %a1005, ptr %a1006) %t1007 = load { ptr, i64, i64 }, ptr %a1004 store { ptr, i64, i64 } %t1007, ptr %a1009 store { ptr, i64, i64 } { ptr @.str.4751, i64 6, i64 0 }, ptr %a1010 call void @finch_str_concat(ptr %a1008, ptr %a1009, ptr %a1010) %t1011 = load { ptr, i64, i64 }, ptr %a1008 %t1012 = load { ptr, i64, i64 }, ptr %a962 store { ptr, i64, i64 } %t1011, ptr %a1014 store { ptr, i64, i64 } %t1012, ptr %a1015 call void @finch_str_concat(ptr %a1013, ptr %a1014, ptr %a1015) %t1016 = load { ptr, i64, i64 }, ptr %a1013 store { ptr, i64, i64 } %t1016, ptr %a1018 store { ptr, i64, i64 } { ptr @.str.4752, i64 1, i64 0 }, ptr %a1019 call void @finch_str_concat(ptr %a1017, ptr %a1018, ptr %a1019) %t1020 = load { ptr, i64, i64 }, ptr %a1017 call void @finch.gen.emit(ptr %t1002, { ptr, i64, i64 } %t1020) %t1021 = load ptr, ptr %a1 %t1022 = load { ptr, i64, i64 }, ptr %a999 %t1023 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1021, { ptr, i64, i64 } { ptr @.str.4753, i64 17, i64 0 }, { ptr, i64, i64 } %t1022) %t1024 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t1023, 0 %t1025 = load %S.ast.Type, ptr %a192 store %S.ast.Type %t1025, ptr %a1026 call void @finch.copy.S_ast_Type(ptr %a1027, ptr %a1026) %t1028 = load %S.ast.Type, ptr %a1027 %t1029 = insertvalue %S.gen.Val %t1024, %S.ast.Type %t1028, 1 ret %S.gen.Val %t1029 endif7311: %t1030 = load { ptr, i64, i64 }, ptr %a962 store { ptr, i64, i64 } %t1030, ptr %a1031 call void @finch_str_copy(ptr %a1032, ptr %a1031) %t1033 = load { ptr, i64, i64 }, ptr %a1032 %t1034 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t1033, 0 %t1035 = load %S.ast.Type, ptr %a192 store %S.ast.Type %t1035, ptr %a1036 call void @finch.copy.S_ast_Type(ptr %a1037, ptr %a1036) %t1038 = load %S.ast.Type, ptr %a1037 %t1039 = insertvalue %S.gen.Val %t1034, %S.ast.Type %t1038, 1 ret %S.gen.Val %t1039 } define internal i1 @finch.gen.runtimeDeclares({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca i64, align 16 %a18 = alloca i64, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = mul i64 5, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t3 = call ptr @finch_alloc(i64 %t2) %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 0 store { ptr, i64, i64 } { ptr @.str.4754, i64 6, i64 0 }, ptr %t4 %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 1 store { ptr, i64, i64 } { ptr @.str.4755, i64 6, i64 0 }, ptr %t5 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 2 store { ptr, i64, i64 } { ptr @.str.4756, i64 4, i64 0 }, ptr %t6 %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 3 store { ptr, i64, i64 } { ptr @.str.4757, i64 4, i64 0 }, ptr %t7 %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 4 store { ptr, i64, i64 } { ptr @.str.4758, i64 5, i64 0 }, ptr %t8 %t9 = insertvalue { ptr, i64, i64 } undef, ptr %t3, 0 %t10 = insertvalue { ptr, i64, i64 } %t9, i64 5, 1 %t11 = insertvalue { ptr, i64, i64 } %t10, i64 5, 2 store { ptr, i64, i64 } %t11, ptr %a12 %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %a12, i32 0, i32 1 %t14 = load { ptr, i64, i64 }, ptr %a1 store i64 -1, ptr %a15 %t16 = load i64, ptr %t13 %t17 = load ptr, ptr %a12 store i64 0, ptr %a18 br label %find.cond7312 find.cond7312: %t19 = load i64, ptr %a18 %t20 = icmp slt i64 %t19, %t16 br i1 %t20, label %find.body7313, label %find.end7316 find.body7313: %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t17, i64 %t19 %t22 = load { ptr, i64, i64 }, ptr %t21 store { ptr, i64, i64 } %t22, ptr %a23 store { ptr, i64, i64 } %t14, ptr %a24 %t25 = call i32 @finch_str_eq(ptr %a23, ptr %a24) %t26 = icmp ne i32 %t25, 0 br i1 %t26, label %find.hit7314, label %find.next7315 find.hit7314: store i64 %t19, ptr %a15 br label %find.end7316 find.next7315: %t27 = add i64 %t19, 1 store i64 %t27, ptr %a18 br label %find.cond7312 find.end7316: %t28 = load i64, ptr %a15 %t29 = icmp sge i64 %t28, 0 ret i1 %t29 } define internal { ptr, i64, i64 } @finch.gen.headerHint({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca i64, align 16 %a65 = alloca i64, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca i64, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = mul i64 23, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t3 = call ptr @finch_alloc(i64 %t2) %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 0 store { ptr, i64, i64 } { ptr @.str.4759, i64 6, i64 0 }, ptr %t4 %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 1 store { ptr, i64, i64 } { ptr @.str.4760, i64 4, i64 0 }, ptr %t5 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 2 store { ptr, i64, i64 } { ptr @.str.4761, i64 7, i64 0 }, ptr %t6 %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 3 store { ptr, i64, i64 } { ptr @.str.4762, i64 5, i64 0 }, ptr %t7 %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 4 store { ptr, i64, i64 } { ptr @.str.4763, i64 5, i64 0 }, ptr %t8 %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 5 store { ptr, i64, i64 } { ptr @.str.4764, i64 7, i64 0 }, ptr %t9 %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 6 store { ptr, i64, i64 } { ptr @.str.4765, i64 4, i64 0 }, ptr %t10 %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 7 store { ptr, i64, i64 } { ptr @.str.4766, i64 3, i64 0 }, ptr %t11 %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 8 store { ptr, i64, i64 } { ptr @.str.4767, i64 3, i64 0 }, ptr %t12 %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 9 store { ptr, i64, i64 } { ptr @.str.4768, i64 3, i64 0 }, ptr %t13 %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 10 store { ptr, i64, i64 } { ptr @.str.4769, i64 5, i64 0 }, ptr %t14 %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 11 store { ptr, i64, i64 } { ptr @.str.4770, i64 4, i64 0 }, ptr %t15 %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 12 store { ptr, i64, i64 } { ptr @.str.4771, i64 6, i64 0 }, ptr %t16 %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 13 store { ptr, i64, i64 } { ptr @.str.4772, i64 4, i64 0 }, ptr %t17 %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 14 store { ptr, i64, i64 } { ptr @.str.4773, i64 5, i64 0 }, ptr %t18 %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 15 store { ptr, i64, i64 } { ptr @.str.4774, i64 3, i64 0 }, ptr %t19 %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 16 store { ptr, i64, i64 } { ptr @.str.4775, i64 4, i64 0 }, ptr %t20 %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 17 store { ptr, i64, i64 } { ptr @.str.4776, i64 6, i64 0 }, ptr %t21 %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 18 store { ptr, i64, i64 } { ptr @.str.4777, i64 6, i64 0 }, ptr %t22 %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 19 store { ptr, i64, i64 } { ptr @.str.4778, i64 6, i64 0 }, ptr %t23 %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 20 store { ptr, i64, i64 } { ptr @.str.4779, i64 4, i64 0 }, ptr %t24 %t25 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 21 store { ptr, i64, i64 } { ptr @.str.4780, i64 5, i64 0 }, ptr %t25 %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 22 store { ptr, i64, i64 } { ptr @.str.4781, i64 6, i64 0 }, ptr %t26 %t27 = insertvalue { ptr, i64, i64 } undef, ptr %t3, 0 %t28 = insertvalue { ptr, i64, i64 } %t27, i64 23, 1 %t29 = insertvalue { ptr, i64, i64 } %t28, i64 23, 2 store { ptr, i64, i64 } %t29, ptr %a30 %t31 = mul i64 23, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t32 = call ptr @finch_alloc(i64 %t31) %t33 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 0 store { ptr, i64, i64 } { ptr @.str.4782, i64 7, i64 0 }, ptr %t33 %t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 1 store { ptr, i64, i64 } { ptr @.str.4783, i64 7, i64 0 }, ptr %t34 %t35 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 2 store { ptr, i64, i64 } { ptr @.str.4784, i64 7, i64 0 }, ptr %t35 %t36 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 3 store { ptr, i64, i64 } { ptr @.str.4785, i64 7, i64 0 }, ptr %t36 %t37 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 4 store { ptr, i64, i64 } { ptr @.str.4786, i64 7, i64 0 }, ptr %t37 %t38 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 5 store { ptr, i64, i64 } { ptr @.str.4787, i64 7, i64 0 }, ptr %t38 %t39 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 6 store { ptr, i64, i64 } { ptr @.str.4788, i64 6, i64 0 }, ptr %t39 %t40 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 7 store { ptr, i64, i64 } { ptr @.str.4789, i64 6, i64 0 }, ptr %t40 %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 8 store { ptr, i64, i64 } { ptr @.str.4790, i64 6, i64 0 }, ptr %t41 %t42 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 9 store { ptr, i64, i64 } { ptr @.str.4791, i64 6, i64 0 }, ptr %t42 %t43 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 10 store { ptr, i64, i64 } { ptr @.str.4792, i64 6, i64 0 }, ptr %t43 %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 11 store { ptr, i64, i64 } { ptr @.str.4793, i64 6, i64 0 }, ptr %t44 %t45 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 12 store { ptr, i64, i64 } { ptr @.str.4794, i64 8, i64 0 }, ptr %t45 %t46 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 13 store { ptr, i64, i64 } { ptr @.str.4795, i64 8, i64 0 }, ptr %t46 %t47 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 14 store { ptr, i64, i64 } { ptr @.str.4796, i64 8, i64 0 }, ptr %t47 %t48 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 15 store { ptr, i64, i64 } { ptr @.str.4797, i64 8, i64 0 }, ptr %t48 %t49 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 16 store { ptr, i64, i64 } { ptr @.str.4798, i64 8, i64 0 }, ptr %t49 %t50 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 17 store { ptr, i64, i64 } { ptr @.str.4799, i64 8, i64 0 }, ptr %t50 %t51 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 18 store { ptr, i64, i64 } { ptr @.str.4800, i64 8, i64 0 }, ptr %t51 %t52 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 19 store { ptr, i64, i64 } { ptr @.str.4801, i64 8, i64 0 }, ptr %t52 %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 20 store { ptr, i64, i64 } { ptr @.str.4802, i64 6, i64 0 }, ptr %t53 %t54 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 21 store { ptr, i64, i64 } { ptr @.str.4803, i64 8, i64 0 }, ptr %t54 %t55 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 22 store { ptr, i64, i64 } { ptr @.str.4804, i64 8, i64 0 }, ptr %t55 %t56 = insertvalue { ptr, i64, i64 } undef, ptr %t32, 0 %t57 = insertvalue { ptr, i64, i64 } %t56, i64 23, 1 %t58 = insertvalue { ptr, i64, i64 } %t57, i64 23, 2 store { ptr, i64, i64 } %t58, ptr %a59 %t60 = getelementptr inbounds { ptr, i64, i64 }, ptr %a30, i32 0, i32 1 %t61 = load { ptr, i64, i64 }, ptr %a1 store i64 -1, ptr %a62 %t63 = load i64, ptr %t60 %t64 = load ptr, ptr %a30 store i64 0, ptr %a65 br label %find.cond7317 find.cond7317: %t66 = load i64, ptr %a65 %t67 = icmp slt i64 %t66, %t63 br i1 %t67, label %find.body7318, label %find.end7321 find.body7318: %t68 = getelementptr inbounds { ptr, i64, i64 }, ptr %t64, i64 %t66 %t69 = load { ptr, i64, i64 }, ptr %t68 store { ptr, i64, i64 } %t69, ptr %a70 store { ptr, i64, i64 } %t61, ptr %a71 %t72 = call i32 @finch_str_eq(ptr %a70, ptr %a71) %t73 = icmp ne i32 %t72, 0 br i1 %t73, label %find.hit7319, label %find.next7320 find.hit7319: store i64 %t66, ptr %a62 br label %find.end7321 find.next7320: %t74 = add i64 %t66, 1 store i64 %t74, ptr %a65 br label %find.cond7317 find.end7321: %t75 = load i64, ptr %a62 store i64 %t75, ptr %a76 %t77 = load i64, ptr %a76 %t78 = icmp slt i64 %t77, 0 br i1 %t78, label %then7322, label %endif7324 then7322: ret { ptr, i64, i64 } { ptr @.str.4805, i64 0, i64 0 } endif7324: %t79 = load i64, ptr %a76 %t80 = load { ptr, i64, i64 }, ptr %a59 %t81 = extractvalue { ptr, i64, i64 } %t80, 1 %t82 = icmp uge i64 %t79, %t81 br i1 %t82, label %range7325, label %inrange7326 range7325: call void @finch_panic_index(ptr @.str.4807, i64 4299, i64 %t79, i64 %t81) unreachable inrange7326: %t83 = extractvalue { ptr, i64, i64 } %t80, 0 %t84 = getelementptr inbounds { ptr, i64, i64 }, ptr %t83, i64 %t79 %t85 = load { ptr, i64, i64 }, ptr %t84 store { ptr, i64, i64 } { ptr @.str.4806, i64 28, i64 0 }, ptr %a87 store { ptr, i64, i64 } %t85, ptr %a88 call void @finch_str_concat(ptr %a86, ptr %a87, ptr %a88) %t89 = load { ptr, i64, i64 }, ptr %a86 store { ptr, i64, i64 } %t89, ptr %a91 store { ptr, i64, i64 } { ptr @.str.4808, i64 14, i64 0 }, ptr %a92 call void @finch_str_concat(ptr %a90, ptr %a91, ptr %a92) %t93 = load { ptr, i64, i64 }, ptr %a90 ret { ptr, i64, i64 } %t93 } define internal %S.gen.Val @finch.gen.call(ptr %p0, %S.ast.Node %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca %S.docs.Doc, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca i64, align 16 %a60 = alloca %S.gen.Val, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca %S.ast.Node, align 16 %a106 = alloca %S.ast.Node, align 16 %a108 = alloca %S.ast.Node, align 16 %a111 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 %a129 = alloca i64, align 16 %a141 = alloca { ptr, i64, i64 }, align 16 %a142 = alloca { ptr, i64, i64 }, align 16 %a147 = alloca { ptr, i64, i64 }, align 16 %a148 = alloca { ptr, i64, i64 }, align 16 %a154 = alloca { ptr, i64, i64 }, align 16 %a155 = alloca { ptr, i64, i64 }, align 16 %a164 = alloca %S.gen.Place, align 16 %a167 = alloca { ptr, i64, i64 }, align 16 %a168 = alloca { ptr, i64, i64 }, align 16 %a176 = alloca { ptr, i64, i64 }, align 16 %a177 = alloca { ptr, i64, i64 }, align 16 %a192 = alloca %S.gen.Val, align 16 %a195 = alloca { ptr, i64, i64 }, align 16 %a199 = alloca { ptr, i64, i64 }, align 16 %a200 = alloca { ptr, i64, i64 }, align 16 %a202 = alloca { ptr, i64, i64 }, align 16 %a204 = alloca { ptr, i64, i64 }, align 16 %a205 = alloca { ptr, i64, i64 }, align 16 %a217 = alloca %S.ast.Type, align 16 %a218 = alloca %S.ast.Type, align 16 %a227 = alloca { ptr, i64, i64 }, align 16 %a228 = alloca { ptr, i64, i64 }, align 16 %a229 = alloca { ptr, i64, i64 }, align 16 %a231 = alloca { ptr, i64, i64 }, align 16 %a232 = alloca { ptr, i64, i64 }, align 16 %a233 = alloca { ptr, i64, i64 }, align 16 %a242 = alloca { ptr, i64, i64 }, align 16 %a243 = alloca { ptr, i64, i64 }, align 16 %a244 = alloca { ptr, i64, i64 }, align 16 %a246 = alloca { ptr, i64, i64 }, align 16 %a247 = alloca { ptr, i64, i64 }, align 16 %a248 = alloca { ptr, i64, i64 }, align 16 %a255 = alloca { ptr, i64, i64 }, align 16 %a256 = alloca { ptr, i64, i64 }, align 16 %a257 = alloca { ptr, i64, i64 }, align 16 %a259 = alloca { ptr, i64, i64 }, align 16 %a260 = alloca { ptr, i64, i64 }, align 16 %a261 = alloca { ptr, i64, i64 }, align 16 %a270 = alloca { ptr, i64, i64 }, align 16 %a271 = alloca { ptr, i64, i64 }, align 16 %a272 = alloca { ptr, i64, i64 }, align 16 %a274 = alloca { ptr, i64, i64 }, align 16 %a275 = alloca { ptr, i64, i64 }, align 16 %a276 = alloca { ptr, i64, i64 }, align 16 %a283 = alloca { ptr, i64, i64 }, align 16 %a284 = alloca { ptr, i64, i64 }, align 16 %a285 = alloca { ptr, i64, i64 }, align 16 %a287 = alloca { ptr, i64, i64 }, align 16 %a288 = alloca { ptr, i64, i64 }, align 16 %a289 = alloca { ptr, i64, i64 }, align 16 %a298 = alloca { ptr, i64, i64 }, align 16 %a299 = alloca { ptr, i64, i64 }, align 16 %a300 = alloca { ptr, i64, i64 }, align 16 %a302 = alloca { ptr, i64, i64 }, align 16 %a303 = alloca { ptr, i64, i64 }, align 16 %a304 = alloca { ptr, i64, i64 }, align 16 %a307 = alloca { ptr, i64, i64 }, align 16 %a308 = alloca { ptr, i64, i64 }, align 16 %a313 = alloca { ptr, i64, i64 }, align 16 %a314 = alloca { ptr, i64, i64 }, align 16 %a315 = alloca { ptr, i64, i64 }, align 16 %a317 = alloca { ptr, i64, i64 }, align 16 %a318 = alloca { ptr, i64, i64 }, align 16 %a319 = alloca { ptr, i64, i64 }, align 16 %a323 = alloca { ptr, i64, i64 }, align 16 %a324 = alloca { ptr, i64, i64 }, align 16 %a325 = alloca { ptr, i64, i64 }, align 16 %a327 = alloca { ptr, i64, i64 }, align 16 %a328 = alloca { ptr, i64, i64 }, align 16 %a329 = alloca { ptr, i64, i64 }, align 16 %a332 = alloca { ptr, i64, i64 }, align 16 %a333 = alloca { ptr, i64, i64 }, align 16 %a339 = alloca { ptr, i64, i64 }, align 16 %a340 = alloca { ptr, i64, i64 }, align 16 %a341 = alloca { ptr, i64, i64 }, align 16 %a343 = alloca { ptr, i64, i64 }, align 16 %a344 = alloca { ptr, i64, i64 }, align 16 %a345 = alloca { ptr, i64, i64 }, align 16 %a348 = alloca { ptr, i64, i64 }, align 16 %a351 = alloca { ptr, i64, i64 }, align 16 %a352 = alloca { ptr, i64, i64 }, align 16 %a353 = alloca { ptr, i64, i64 }, align 16 %a355 = alloca { ptr, i64, i64 }, align 16 %a356 = alloca { ptr, i64, i64 }, align 16 %a357 = alloca { ptr, i64, i64 }, align 16 %a360 = alloca { ptr, i64, i64 }, align 16 %a361 = alloca { ptr, i64, i64 }, align 16 %a362 = alloca { ptr, i64, i64 }, align 16 %a364 = alloca { ptr, i64, i64 }, align 16 %a365 = alloca { ptr, i64, i64 }, align 16 %a366 = alloca { ptr, i64, i64 }, align 16 %a369 = alloca { ptr, i64, i64 }, align 16 %a370 = alloca { ptr, i64, i64 }, align 16 %a377 = alloca { ptr, i64, i64 }, align 16 %a378 = alloca { ptr, i64, i64 }, align 16 %a379 = alloca { ptr, i64, i64 }, align 16 %a381 = alloca { ptr, i64, i64 }, align 16 %a382 = alloca { ptr, i64, i64 }, align 16 %a383 = alloca { ptr, i64, i64 }, align 16 %a387 = alloca { ptr, i64, i64 }, align 16 %a388 = alloca { ptr, i64, i64 }, align 16 %a389 = alloca { ptr, i64, i64 }, align 16 %a391 = alloca { ptr, i64, i64 }, align 16 %a392 = alloca { ptr, i64, i64 }, align 16 %a393 = alloca { ptr, i64, i64 }, align 16 %a396 = alloca { ptr, i64, i64 }, align 16 %a397 = alloca { ptr, i64, i64 }, align 16 %a409 = alloca { ptr, i64, i64 }, align 16 %a410 = alloca { ptr, i64, i64 }, align 16 %a422 = alloca { ptr, i64, i64 }, align 16 %a423 = alloca { ptr, i64, i64 }, align 16 %a432 = alloca { ptr, i64, i64 }, align 16 %a433 = alloca { ptr, i64, i64 }, align 16 %a434 = alloca { ptr, i64, i64 }, align 16 %a436 = alloca { ptr, i64, i64 }, align 16 %a437 = alloca { ptr, i64, i64 }, align 16 %a438 = alloca { ptr, i64, i64 }, align 16 %a443 = alloca { ptr, i64, i64 }, align 16 %a444 = alloca { ptr, i64, i64 }, align 16 %a445 = alloca { ptr, i64, i64 }, align 16 %a447 = alloca { ptr, i64, i64 }, align 16 %a448 = alloca { ptr, i64, i64 }, align 16 %a449 = alloca { ptr, i64, i64 }, align 16 %a452 = alloca { ptr, i64, i64 }, align 16 %a453 = alloca { ptr, i64, i64 }, align 16 %a457 = alloca { ptr, i64, i64 }, align 16 %a458 = alloca { ptr, i64, i64 }, align 16 %a463 = alloca { ptr, i64, i64 }, align 16 %a464 = alloca { ptr, i64, i64 }, align 16 %a469 = alloca { ptr, i64, i64 }, align 16 %a470 = alloca { ptr, i64, i64 }, align 16 %a475 = alloca { ptr, i64, i64 }, align 16 %a476 = alloca { ptr, i64, i64 }, align 16 %a481 = alloca { ptr, i64, i64 }, align 16 %a482 = alloca { ptr, i64, i64 }, align 16 %a505 = alloca { ptr, i64, i64 }, align 16 %a506 = alloca { ptr, i64, i64 }, align 16 %a507 = alloca { ptr, i64, i64 }, align 16 %a509 = alloca { ptr, i64, i64 }, align 16 %a510 = alloca { ptr, i64, i64 }, align 16 %a511 = alloca { ptr, i64, i64 }, align 16 %a522 = alloca { ptr, i64, i64 }, align 16 %a532 = alloca { ptr, i64, i64 }, align 16 %a533 = alloca { ptr, i64, i64 }, align 16 %a537 = alloca { ptr, i64, i64 }, align 16 %a538 = alloca { ptr, i64, i64 }, align 16 %a556 = alloca { ptr, i64, i64 }, align 16 %a558 = alloca { ptr, i64, i64 }, align 16 %a559 = alloca { ptr, i64, i64 }, align 16 %a564 = alloca { ptr, i64, i64 }, align 16 %a565 = alloca { ptr, i64, i64 }, align 16 %a566 = alloca { ptr, i64, i64 }, align 16 %a568 = alloca { ptr, i64, i64 }, align 16 %a569 = alloca { ptr, i64, i64 }, align 16 %a570 = alloca { ptr, i64, i64 }, align 16 %a573 = alloca { ptr, i64, i64 }, align 16 %a576 = alloca { ptr, i64, i64 }, align 16 %a577 = alloca { ptr, i64, i64 }, align 16 %a578 = alloca { ptr, i64, i64 }, align 16 %a580 = alloca { ptr, i64, i64 }, align 16 %a581 = alloca { ptr, i64, i64 }, align 16 %a582 = alloca { ptr, i64, i64 }, align 16 %a590 = alloca { ptr, i64, i64 }, align 16 %a597 = alloca { ptr, i64, i64 }, align 16 %a598 = alloca { ptr, i64, i64 }, align 16 %a603 = alloca { ptr, i64, i64 }, align 16 %a610 = alloca { ptr, i64, i64 }, align 16 %a611 = alloca { ptr, i64, i64 }, align 16 %a612 = alloca { ptr, i64, i64 }, align 16 %a614 = alloca { ptr, i64, i64 }, align 16 %a615 = alloca { ptr, i64, i64 }, align 16 %a616 = alloca { ptr, i64, i64 }, align 16 %a619 = alloca { ptr, i64, i64 }, align 16 %a620 = alloca { ptr, i64, i64 }, align 16 %a621 = alloca { ptr, i64, i64 }, align 16 %a623 = alloca { ptr, i64, i64 }, align 16 %a624 = alloca { ptr, i64, i64 }, align 16 %a625 = alloca { ptr, i64, i64 }, align 16 %a628 = alloca { ptr, i64, i64 }, align 16 %a629 = alloca { ptr, i64, i64 }, align 16 %a630 = alloca { ptr, i64, i64 }, align 16 %a632 = alloca { ptr, i64, i64 }, align 16 %a633 = alloca { ptr, i64, i64 }, align 16 %a634 = alloca { ptr, i64, i64 }, align 16 %a637 = alloca { ptr, i64, i64 }, align 16 %a640 = alloca { ptr, i64, i64 }, align 16 %a641 = alloca { ptr, i64, i64 }, align 16 %a642 = alloca { ptr, i64, i64 }, align 16 %a644 = alloca { ptr, i64, i64 }, align 16 %a645 = alloca { ptr, i64, i64 }, align 16 %a646 = alloca { ptr, i64, i64 }, align 16 %a678 = alloca { ptr, i64, i64 }, align 16 %a681 = alloca { ptr, i64, i64 }, align 16 %a682 = alloca { ptr, i64, i64 }, align 16 %a683 = alloca { ptr, i64, i64 }, align 16 %a685 = alloca { ptr, i64, i64 }, align 16 %a686 = alloca { ptr, i64, i64 }, align 16 %a687 = alloca { ptr, i64, i64 }, align 16 %a690 = alloca { ptr, i64, i64 }, align 16 %a691 = alloca { ptr, i64, i64 }, align 16 %a692 = alloca { ptr, i64, i64 }, align 16 %a694 = alloca { ptr, i64, i64 }, align 16 %a695 = alloca { ptr, i64, i64 }, align 16 %a696 = alloca { ptr, i64, i64 }, align 16 %a699 = alloca { ptr, i64, i64 }, align 16 %a700 = alloca { ptr, i64, i64 }, align 16 %a701 = alloca { ptr, i64, i64 }, align 16 %a703 = alloca { ptr, i64, i64 }, align 16 %a704 = alloca { ptr, i64, i64 }, align 16 %a705 = alloca { ptr, i64, i64 }, align 16 %a709 = alloca { ptr, i64, i64 }, align 16 %a711 = alloca { ptr, i64, i64 }, align 16 %a712 = alloca { ptr, i64, i64 }, align 16 %a713 = alloca { ptr, i64, i64 }, align 16 %a715 = alloca { ptr, i64, i64 }, align 16 %a716 = alloca { ptr, i64, i64 }, align 16 %a717 = alloca { ptr, i64, i64 }, align 16 %a727 = alloca { ptr, i64, i64 }, align 16 %a728 = alloca { ptr, i64, i64 }, align 16 %a745 = alloca { ptr, i64, i64 }, align 16 %a757 = alloca { ptr, i64, i64 }, align 16 %a764 = alloca { ptr, i64, i64 }, align 16 %a765 = alloca { ptr, i64, i64 }, align 16 %a770 = alloca { ptr, i64, i64 }, align 16 %a775 = alloca { ptr, i64, i64 }, align 16 %a776 = alloca { ptr, i64, i64 }, align 16 %a777 = alloca { ptr, i64, i64 }, align 16 %a779 = alloca { ptr, i64, i64 }, align 16 %a780 = alloca { ptr, i64, i64 }, align 16 %a781 = alloca { ptr, i64, i64 }, align 16 %a784 = alloca { ptr, i64, i64 }, align 16 %a785 = alloca { ptr, i64, i64 }, align 16 %a786 = alloca { ptr, i64, i64 }, align 16 %a788 = alloca { ptr, i64, i64 }, align 16 %a789 = alloca { ptr, i64, i64 }, align 16 %a790 = alloca { ptr, i64, i64 }, align 16 %a793 = alloca { ptr, i64, i64 }, align 16 %a794 = alloca { ptr, i64, i64 }, align 16 %a795 = alloca { ptr, i64, i64 }, align 16 %a797 = alloca { ptr, i64, i64 }, align 16 %a798 = alloca { ptr, i64, i64 }, align 16 %a799 = alloca { ptr, i64, i64 }, align 16 %a802 = alloca { ptr, i64, i64 }, align 16 %a805 = alloca { ptr, i64, i64 }, align 16 %a806 = alloca { ptr, i64, i64 }, align 16 %a807 = alloca { ptr, i64, i64 }, align 16 %a809 = alloca { ptr, i64, i64 }, align 16 %a810 = alloca { ptr, i64, i64 }, align 16 %a811 = alloca { ptr, i64, i64 }, align 16 %a827 = alloca { ptr, i64, i64 }, align 16 %a828 = alloca { ptr, i64, i64 }, align 16 %a829 = alloca { ptr, i64, i64 }, align 16 %a831 = alloca { ptr, i64, i64 }, align 16 %a832 = alloca { ptr, i64, i64 }, align 16 %a833 = alloca { ptr, i64, i64 }, align 16 %a836 = alloca { ptr, i64, i64 }, align 16 %a837 = alloca { ptr, i64, i64 }, align 16 %a838 = alloca { ptr, i64, i64 }, align 16 %a840 = alloca { ptr, i64, i64 }, align 16 %a841 = alloca { ptr, i64, i64 }, align 16 %a842 = alloca { ptr, i64, i64 }, align 16 %a845 = alloca { ptr, i64, i64 }, align 16 %a848 = alloca { ptr, i64, i64 }, align 16 %a849 = alloca { ptr, i64, i64 }, align 16 %a850 = alloca { ptr, i64, i64 }, align 16 %a852 = alloca { ptr, i64, i64 }, align 16 %a853 = alloca { ptr, i64, i64 }, align 16 %a854 = alloca { ptr, i64, i64 }, align 16 %a861 = alloca { ptr, i64, i64 }, align 16 %a862 = alloca { ptr, i64, i64 }, align 16 %a877 = alloca %S.gen.Val, align 16 %a880 = alloca { ptr, i64, i64 }, align 16 %a883 = alloca { ptr, i64, i64 }, align 16 %a884 = alloca { ptr, i64, i64 }, align 16 %a885 = alloca { ptr, i64, i64 }, align 16 %a887 = alloca { ptr, i64, i64 }, align 16 %a888 = alloca { ptr, i64, i64 }, align 16 %a889 = alloca { ptr, i64, i64 }, align 16 %a894 = alloca { ptr, i64, i64 }, align 16 %a895 = alloca { ptr, i64, i64 }, align 16 %a896 = alloca { ptr, i64, i64 }, align 16 %a898 = alloca { ptr, i64, i64 }, align 16 %a899 = alloca { ptr, i64, i64 }, align 16 %a900 = alloca { ptr, i64, i64 }, align 16 %a908 = alloca { ptr, i64, i64 }, align 16 %a909 = alloca { ptr, i64, i64 }, align 16 %a914 = alloca { ptr, i64, i64 }, align 16 %a919 = alloca { ptr, i64, i64 }, align 16 %a920 = alloca { ptr, i64, i64 }, align 16 %a921 = alloca { ptr, i64, i64 }, align 16 %a923 = alloca { ptr, i64, i64 }, align 16 %a924 = alloca { ptr, i64, i64 }, align 16 %a925 = alloca { ptr, i64, i64 }, align 16 %a928 = alloca { ptr, i64, i64 }, align 16 %a929 = alloca { ptr, i64, i64 }, align 16 %a930 = alloca { ptr, i64, i64 }, align 16 %a932 = alloca { ptr, i64, i64 }, align 16 %a933 = alloca { ptr, i64, i64 }, align 16 %a934 = alloca { ptr, i64, i64 }, align 16 %a937 = alloca { ptr, i64, i64 }, align 16 %a940 = alloca { ptr, i64, i64 }, align 16 %a941 = alloca { ptr, i64, i64 }, align 16 %a942 = alloca { ptr, i64, i64 }, align 16 %a944 = alloca { ptr, i64, i64 }, align 16 %a945 = alloca { ptr, i64, i64 }, align 16 %a946 = alloca { ptr, i64, i64 }, align 16 %a962 = alloca { ptr, i64, i64 }, align 16 %a963 = alloca { ptr, i64, i64 }, align 16 %a964 = alloca { ptr, i64, i64 }, align 16 %a966 = alloca { ptr, i64, i64 }, align 16 %a967 = alloca { ptr, i64, i64 }, align 16 %a968 = alloca { ptr, i64, i64 }, align 16 %a971 = alloca { ptr, i64, i64 }, align 16 %a974 = alloca { ptr, i64, i64 }, align 16 %a975 = alloca { ptr, i64, i64 }, align 16 %a976 = alloca { ptr, i64, i64 }, align 16 %a978 = alloca { ptr, i64, i64 }, align 16 %a979 = alloca { ptr, i64, i64 }, align 16 %a980 = alloca { ptr, i64, i64 }, align 16 %a987 = alloca { ptr, i64, i64 }, align 16 %a988 = alloca { ptr, i64, i64 }, align 16 %a1003 = alloca %S.gen.Val, align 16 %a1006 = alloca { ptr, i64, i64 }, align 16 %a1009 = alloca { ptr, i64, i64 }, align 16 %a1010 = alloca { ptr, i64, i64 }, align 16 %a1011 = alloca { ptr, i64, i64 }, align 16 %a1013 = alloca { ptr, i64, i64 }, align 16 %a1014 = alloca { ptr, i64, i64 }, align 16 %a1015 = alloca { ptr, i64, i64 }, align 16 %a1020 = alloca { ptr, i64, i64 }, align 16 %a1021 = alloca { ptr, i64, i64 }, align 16 %a1022 = alloca { ptr, i64, i64 }, align 16 %a1024 = alloca { ptr, i64, i64 }, align 16 %a1025 = alloca { ptr, i64, i64 }, align 16 %a1026 = alloca { ptr, i64, i64 }, align 16 %a1030 = alloca { ptr, i64, i64 }, align 16 %a1031 = alloca { ptr, i64, i64 }, align 16 %a1032 = alloca { ptr, i64, i64 }, align 16 %a1034 = alloca { ptr, i64, i64 }, align 16 %a1035 = alloca { ptr, i64, i64 }, align 16 %a1036 = alloca { ptr, i64, i64 }, align 16 %a1043 = alloca { ptr, i64, i64 }, align 16 %a1044 = alloca { ptr, i64, i64 }, align 16 %a1069 = alloca %S.gen.Val, align 16 %a1073 = alloca { ptr, i64, i64 }, align 16 %a1074 = alloca { ptr, i64, i64 }, align 16 %a1075 = alloca { ptr, i64, i64 }, align 16 %a1077 = alloca { ptr, i64, i64 }, align 16 %a1078 = alloca { ptr, i64, i64 }, align 16 %a1079 = alloca { ptr, i64, i64 }, align 16 %a1082 = alloca { ptr, i64, i64 }, align 16 %a1085 = alloca { ptr, i64, i64 }, align 16 %a1088 = alloca { ptr, i64, i64 }, align 16 %a1089 = alloca { ptr, i64, i64 }, align 16 %a1090 = alloca { ptr, i64, i64 }, align 16 %a1092 = alloca { ptr, i64, i64 }, align 16 %a1093 = alloca { ptr, i64, i64 }, align 16 %a1094 = alloca { ptr, i64, i64 }, align 16 %a1099 = alloca { ptr, i64, i64 }, align 16 %a1100 = alloca { ptr, i64, i64 }, align 16 %a1105 = alloca %S.gen.Val, align 16 %a1124 = alloca { ptr, i64, i64 }, align 16 %a1127 = alloca { ptr, i64, i64 }, align 16 %a1128 = alloca { ptr, i64, i64 }, align 16 %a1129 = alloca { ptr, i64, i64 }, align 16 %a1131 = alloca { ptr, i64, i64 }, align 16 %a1132 = alloca { ptr, i64, i64 }, align 16 %a1133 = alloca { ptr, i64, i64 }, align 16 %a1138 = alloca { ptr, i64, i64 }, align 16 %a1139 = alloca { ptr, i64, i64 }, align 16 %a1140 = alloca { ptr, i64, i64 }, align 16 %a1142 = alloca { ptr, i64, i64 }, align 16 %a1143 = alloca { ptr, i64, i64 }, align 16 %a1144 = alloca { ptr, i64, i64 }, align 16 %a1154 = alloca { ptr, i64, i64 }, align 16 %a1155 = alloca { ptr, i64, i64 }, align 16 %a1170 = alloca %S.gen.Val, align 16 %a1176 = alloca { ptr, i64, i64 }, align 16 %a1177 = alloca { ptr, i64, i64 }, align 16 %a1178 = alloca { ptr, i64, i64 }, align 16 %a1180 = alloca { ptr, i64, i64 }, align 16 %a1181 = alloca { ptr, i64, i64 }, align 16 %a1182 = alloca { ptr, i64, i64 }, align 16 %a1185 = alloca { ptr, i64, i64 }, align 16 %a1196 = alloca { ptr, i64, i64 }, align 16 %a1197 = alloca { ptr, i64, i64 }, align 16 %a1205 = alloca { ptr, i64, i64 }, align 16 %a1206 = alloca { ptr, i64, i64 }, align 16 %a1221 = alloca %S.gen.Val, align 16 %a1225 = alloca { ptr, i64, i64 }, align 16 %a1226 = alloca { ptr, i64, i64 }, align 16 %a1240 = alloca { ptr, i64, i64 }, align 16 %a1241 = alloca { ptr, i64, i64 }, align 16 %a1242 = alloca { ptr, i64, i64 }, align 16 %a1244 = alloca { ptr, i64, i64 }, align 16 %a1245 = alloca { ptr, i64, i64 }, align 16 %a1246 = alloca { ptr, i64, i64 }, align 16 %a1257 = alloca i64, align 16 %a1268 = alloca { ptr, i64, i64 }, align 16 %a1269 = alloca { ptr, i64, i64 }, align 16 %a1270 = alloca { ptr, i64, i64 }, align 16 %a1272 = alloca { ptr, i64, i64 }, align 16 %a1273 = alloca { ptr, i64, i64 }, align 16 %a1274 = alloca { ptr, i64, i64 }, align 16 %a1288 = alloca i64, align 16 %a1312 = alloca { ptr, i64, i64 }, align 16 %a1313 = alloca { ptr, i64, i64 }, align 16 %a1314 = alloca { ptr, i64, i64 }, align 16 %a1316 = alloca { ptr, i64, i64 }, align 16 %a1317 = alloca { ptr, i64, i64 }, align 16 %a1318 = alloca { ptr, i64, i64 }, align 16 %a1321 = alloca { ptr, i64, i64 }, align 16 %a1322 = alloca { ptr, i64, i64 }, align 16 %a1323 = alloca { ptr, i64, i64 }, align 16 %a1325 = alloca { ptr, i64, i64 }, align 16 %a1326 = alloca { ptr, i64, i64 }, align 16 %a1327 = alloca { ptr, i64, i64 }, align 16 %a1329 = alloca { ptr, i64, i64 }, align 16 %a1332 = alloca i64, align 16 %a1340 = alloca %S.ast.Type, align 16 %a1361 = alloca %S.ast.Type, align 16 %a1382 = alloca i64, align 16 %a1395 = alloca %S.gen.StructDef, align 16 %a1396 = alloca %S.gen.StructDef, align 16 %a1398 = alloca %S.gen.StructDef, align 16 %a1426 = alloca %S.ast.Node, align 16 %a1427 = alloca %S.ast.Node, align 16 %a1429 = alloca %S.ast.Node, align 16 %a1438 = alloca { ptr, i64, i64 }, align 16 %a1439 = alloca { ptr, i64, i64 }, align 16 %a1440 = alloca { ptr, i64, i64 }, align 16 %a1442 = alloca { ptr, i64, i64 }, align 16 %a1443 = alloca { ptr, i64, i64 }, align 16 %a1444 = alloca { ptr, i64, i64 }, align 16 %a1448 = alloca { ptr, i64, i64 }, align 16 %a1449 = alloca { ptr, i64, i64 }, align 16 %a1451 = alloca { ptr, i64, i64 }, align 16 %a1452 = alloca { ptr, i64, i64 }, align 16 %a1453 = alloca { ptr, i64, i64 }, align 16 %a1455 = alloca { ptr, i64, i64 }, align 16 %a1456 = alloca { ptr, i64, i64 }, align 16 %a1457 = alloca { ptr, i64, i64 }, align 16 %a1489 = alloca i64, align 16 %a1501 = alloca { ptr, i64, i64 }, align 16 %a1511 = alloca { ptr, i64, i64 }, align 16 %a1514 = alloca { ptr, i64, i64 }, align 16 %a1515 = alloca { ptr, i64, i64 }, align 16 %a1542 = alloca { ptr, i64, i64 }, align 16 %a1543 = alloca { ptr, i64, i64 }, align 16 %a1544 = alloca { ptr, i64, i64 }, align 16 %a1546 = alloca { ptr, i64, i64 }, align 16 %a1547 = alloca { ptr, i64, i64 }, align 16 %a1548 = alloca { ptr, i64, i64 }, align 16 %a1553 = alloca { ptr, i64, i64 }, align 16 %a1554 = alloca { ptr, i64, i64 }, align 16 %a1555 = alloca { ptr, i64, i64 }, align 16 %a1557 = alloca { ptr, i64, i64 }, align 16 %a1558 = alloca { ptr, i64, i64 }, align 16 %a1559 = alloca { ptr, i64, i64 }, align 16 %a1563 = alloca { ptr, i64, i64 }, align 16 %a1564 = alloca { ptr, i64, i64 }, align 16 %a1565 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 %t3 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t4 = load { ptr, i64, i64 }, ptr %t3 store { ptr, i64, i64 } %t4, ptr %a5 call void @finch_str_copy(ptr %a6, ptr %a5) %t7 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t7, ptr %a8 %t9 = load ptr, ptr %a1 %t10 = icmp eq ptr %t9, null br i1 %t10, label %panic7327, label %ok7328 panic7327: call void @finch_panic(ptr @.str.4809, i64 4304, ptr @.str.4810) unreachable ok7328: %t11 = getelementptr inbounds %S.gen.Gen, ptr %t9, i32 0, i32 26 %t12 = load i1, ptr %t11 br label %logic.from7329 logic.from7329: br i1 %t12, label %logic.rhs7330, label %logic.end7331 logic.rhs7330: %t13 = load { ptr, i64, i64 }, ptr %a8 %t14 = call i1 @finch.gen.isBuiltin({ ptr, i64, i64 } %t13) br label %logic.rend7332 logic.rend7332: br label %logic.end7331 logic.end7331: %t15 = phi i1 [ false, %logic.from7329 ], [ %t14, %logic.rend7332 ] br i1 %t15, label %then7333, label %endif7335 then7333: %t16 = call { ptr, i64, i64 } @finch.docs.builtins() %t17 = load { ptr, i64, i64 }, ptr %a8 %t18 = call %S.docs.Doc @finch.docs.find({ ptr, i64, i64 } %t16, { ptr, i64, i64 } %t17) store %S.docs.Doc %t18, ptr %a19 %t20 = getelementptr inbounds %S.docs.Doc, ptr %a19, i32 0, i32 0 %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i32 0, i32 1 %t22 = load i64, ptr %t21 %t23 = icmp sgt i64 %t22, 0 br i1 %t23, label %then7336, label %endif7338 then7336: %t24 = load ptr, ptr %a1 %t25 = load %S.ast.Node, ptr %a2 %t26 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 %t27 = load i64, ptr %t26 %t28 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 %t29 = load i64, ptr %t28 %t30 = load %S.docs.Doc, ptr %a19 %t31 = call { ptr, i64, i64 } @finch.docs.hover(%S.docs.Doc %t30) call void @finch.gen.noteRef(ptr %t24, %S.ast.Node %t25, i64 %t27, i64 %t29, { ptr, i64, i64 } %t31, { ptr, i64, i64 } { ptr @.str.4811, i64 0, i64 0 }, i64 0, i64 0) br label %endif7338 endif7338: br label %endif7335 endif7335: %t32 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t32, ptr %a33 store { ptr, i64, i64 } { ptr @.str.4812, i64 5, i64 0 }, ptr %a34 %t35 = call i32 @finch_str_eq(ptr %a33, ptr %a34) %t36 = icmp ne i32 %t35, 0 br i1 %t36, label %then7339, label %endif7341 then7339: %t37 = load ptr, ptr %a1 %t38 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t37, %S.ast.Node %t38, { ptr, i64, i64 } { ptr @.str.4813, i64 86, i64 0 }) br label %endif7341 endif7341: %t39 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t39, ptr %a40 store { ptr, i64, i64 } { ptr @.str.4814, i64 5, i64 0 }, ptr %a41 %t42 = call i32 @finch_str_eq(ptr %a40, ptr %a41) %t43 = icmp ne i32 %t42, 0 br i1 %t43, label %then7342, label %endif7344 then7342: %t44 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t45 = getelementptr inbounds { ptr, i64, i64 }, ptr %t44, i32 0, i32 1 %t46 = load i64, ptr %t45 store i64 0, ptr %a47 br label %for.cond7345 for.cond7345: %t48 = load i64, ptr %a47 %t49 = icmp slt i64 %t48, %t46 br i1 %t49, label %for.body7346, label %for.end7348 for.body7346: %t50 = load ptr, ptr %a1 %t51 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t52 = load i64, ptr %a47 %t53 = load { ptr, i64, i64 }, ptr %t51 %t54 = extractvalue { ptr, i64, i64 } %t53, 1 %t55 = icmp uge i64 %t52, %t54 br i1 %t55, label %range7349, label %inrange7350 range7349: call void @finch_panic_index(ptr @.str.4815, i64 4315, i64 %t52, i64 %t54) unreachable inrange7350: %t56 = extractvalue { ptr, i64, i64 } %t53, 0 %t57 = getelementptr inbounds %S.ast.Node, ptr %t56, i64 %t52 %t58 = load %S.ast.Node, ptr %t57 %t59 = call %S.gen.Val @finch.gen.expr(ptr %t50, %S.ast.Node %t58) store %S.gen.Val %t59, ptr %a60 %t61 = getelementptr inbounds %S.gen.Val, ptr %a60, i32 0, i32 1 %t62 = getelementptr inbounds %S.ast.Type, ptr %t61, i32 0, i32 0 %t63 = load { ptr, i64, i64 }, ptr %t62 store { ptr, i64, i64 } %t63, ptr %a64 store { ptr, i64, i64 } { ptr @.str.4816, i64 4, i64 0 }, ptr %a65 %t66 = call i32 @finch_str_eq(ptr %a64, ptr %a65) %t67 = icmp ne i32 %t66, 0 br i1 %t67, label %then7351, label %endif7353 then7351: %t68 = load ptr, ptr %a1 %t69 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t70 = load i64, ptr %a47 %t71 = load { ptr, i64, i64 }, ptr %t69 %t72 = extractvalue { ptr, i64, i64 } %t71, 1 %t73 = icmp uge i64 %t70, %t72 br i1 %t73, label %range7354, label %inrange7355 range7354: call void @finch_panic_index(ptr @.str.4817, i64 4317, i64 %t70, i64 %t72) unreachable inrange7355: %t74 = extractvalue { ptr, i64, i64 } %t71, 0 %t75 = getelementptr inbounds %S.ast.Node, ptr %t74, i64 %t70 %t76 = load %S.ast.Node, ptr %t75 call void @finch.gen.fail(ptr %t68, %S.ast.Node %t76, { ptr, i64, i64 } { ptr @.str.4818, i64 53, i64 0 }) br label %endif7353 endif7353: %t77 = load i64, ptr %a47 %t78 = icmp sgt i64 %t77, 0 br i1 %t78, label %then7356, label %endif7358 then7356: %t79 = load ptr, ptr %a1 call void @finch.gen.printf(ptr %t79, { ptr, i64, i64 } { ptr @.str.4819, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.4820, i64 0, i64 0 }) br label %endif7358 endif7358: %t80 = load ptr, ptr %a1 %t81 = getelementptr inbounds %S.gen.Val, ptr %a60, i32 0, i32 0 %t82 = load { ptr, i64, i64 }, ptr %t81 %t83 = getelementptr inbounds %S.gen.Val, ptr %a60, i32 0, i32 1 %t84 = load %S.ast.Type, ptr %t83 call void @finch.gen.emitPrint(ptr %t80, { ptr, i64, i64 } %t82, %S.ast.Type %t84, i1 false) br label %for.step7347 for.step7347: %t85 = load i64, ptr %a47 %t86 = add i64 %t85, 1 store i64 %t86, ptr %a47 br label %for.cond7345 for.end7348: %t87 = load ptr, ptr %a1 call void @finch.gen.printf(ptr %t87, { ptr, i64, i64 } { ptr @.str.4821, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.4822, i64 0, i64 0 }) %t88 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4823, i64 4, i64 0 }) %t89 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t88, 1 ret %S.gen.Val %t89 endif7344: %t90 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t90, ptr %a91 store { ptr, i64, i64 } { ptr @.str.4824, i64 4, i64 0 }, ptr %a92 %t93 = call i32 @finch_str_eq(ptr %a91, ptr %a92) %t94 = icmp ne i32 %t93, 0 br i1 %t94, label %then7359, label %endif7361 then7359: %t95 = load ptr, ptr %a1 %t96 = load %S.ast.Node, ptr %a2 %t97 = load { ptr, i64, i64 }, ptr %a8 call void @finch.gen.checkArgs(ptr %t95, %S.ast.Node %t96, i64 0, i64 1, { ptr, i64, i64 } %t97) %t98 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t99 = load { ptr, i64, i64 }, ptr %t98 %t100 = extractvalue { ptr, i64, i64 } %t99, 1 %t101 = icmp uge i64 0, %t100 br i1 %t101, label %range7362, label %inrange7363 range7362: call void @finch_panic_index(ptr @.str.4825, i64 4329, i64 0, i64 %t100) unreachable inrange7363: %t102 = extractvalue { ptr, i64, i64 } %t99, 0 %t103 = getelementptr inbounds %S.ast.Node, ptr %t102, i64 0 %t104 = load %S.ast.Node, ptr %t103 store %S.ast.Node %t104, ptr %a105 call void @finch.copy.S_ast_Node(ptr %a106, ptr %a105) %t107 = load %S.ast.Node, ptr %a106 store %S.ast.Node %t107, ptr %a108 %t109 = getelementptr inbounds %S.ast.Node, ptr %a108, i32 0, i32 0 %t110 = load { ptr, i64, i64 }, ptr %t109 store { ptr, i64, i64 } %t110, ptr %a111 store { ptr, i64, i64 } { ptr @.str.4826, i64 3, i64 0 }, ptr %a112 %t113 = call i32 @finch_str_eq(ptr %a111, ptr %a112) %t114 = icmp ne i32 %t113, 0 br label %logic.from7364 logic.from7364: br i1 %t114, label %logic.rhs7365, label %logic.end7366 logic.rhs7365: %t115 = load ptr, ptr %a1 %t116 = getelementptr inbounds %S.ast.Node, ptr %a108, i32 0, i32 1 %t117 = load { ptr, i64, i64 }, ptr %t116 %t118 = call i64 @finch.gen.lookup(ptr %t115, { ptr, i64, i64 } %t117) %t119 = icmp slt i64 %t118, 0 br label %logic.rend7367 logic.rend7367: br label %logic.end7366 logic.end7366: %t120 = phi i1 [ false, %logic.from7364 ], [ %t119, %logic.rend7367 ] br i1 %t120, label %then7368, label %endif7370 then7368: %t121 = load ptr, ptr %a1 %t122 = load ptr, ptr %a1 %t123 = icmp eq ptr %t122, null br i1 %t123, label %panic7371, label %ok7372 panic7371: call void @finch_panic(ptr @.str.4827, i64 4331, ptr @.str.4828) unreachable ok7372: %t124 = getelementptr inbounds %S.gen.Gen, ptr %t122, i32 0, i32 13 %t125 = load { ptr, i64, i64 }, ptr %t124 %t126 = getelementptr inbounds %S.ast.Node, ptr %a108, i32 0, i32 1 %t127 = load { ptr, i64, i64 }, ptr %t126 %t128 = call i64 @finch.gen.findFn(ptr %t121, { ptr, i64, i64 } %t125, { ptr, i64, i64 } %t127) store i64 %t128, ptr %a129 %t130 = load i64, ptr %a129 %t131 = icmp sge i64 %t130, 0 br i1 %t131, label %then7373, label %endif7375 then7373: %t132 = load ptr, ptr %a1 %t133 = load i64, ptr %a129 %t134 = load %S.ast.Node, ptr %a108 %t135 = call { ptr, i64, i64 } @finch.gen.cThunk(ptr %t132, i64 %t133, %S.ast.Node %t134) %t136 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t135, 0 %t137 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4829, i64 3, i64 0 }) %t138 = insertvalue %S.gen.Val %t136, %S.ast.Type %t137, 1 ret %S.gen.Val %t138 endif7375: br label %endif7370 endif7370: %t139 = getelementptr inbounds %S.ast.Node, ptr %a108, i32 0, i32 0 %t140 = load { ptr, i64, i64 }, ptr %t139 store { ptr, i64, i64 } %t140, ptr %a141 store { ptr, i64, i64 } { ptr @.str.4830, i64 3, i64 0 }, ptr %a142 %t143 = call i32 @finch_str_eq(ptr %a141, ptr %a142) %t144 = icmp eq i32 %t143, 0 br label %logic.from7376 logic.from7376: br i1 %t144, label %logic.rhs7377, label %logic.end7378 logic.rhs7377: %t145 = getelementptr inbounds %S.ast.Node, ptr %a108, i32 0, i32 0 %t146 = load { ptr, i64, i64 }, ptr %t145 store { ptr, i64, i64 } %t146, ptr %a147 store { ptr, i64, i64 } { ptr @.str.4831, i64 6, i64 0 }, ptr %a148 %t149 = call i32 @finch_str_eq(ptr %a147, ptr %a148) %t150 = icmp eq i32 %t149, 0 br label %logic.rend7379 logic.rend7379: br label %logic.end7378 logic.end7378: %t151 = phi i1 [ false, %logic.from7376 ], [ %t150, %logic.rend7379 ] br label %logic.from7380 logic.from7380: br i1 %t151, label %logic.rhs7381, label %logic.end7382 logic.rhs7381: %t152 = getelementptr inbounds %S.ast.Node, ptr %a108, i32 0, i32 0 %t153 = load { ptr, i64, i64 }, ptr %t152 store { ptr, i64, i64 } %t153, ptr %a154 store { ptr, i64, i64 } { ptr @.str.4832, i64 5, i64 0 }, ptr %a155 %t156 = call i32 @finch_str_eq(ptr %a154, ptr %a155) %t157 = icmp eq i32 %t156, 0 br label %logic.rend7383 logic.rend7383: br label %logic.end7382 logic.end7382: %t158 = phi i1 [ false, %logic.from7380 ], [ %t157, %logic.rend7383 ] br i1 %t158, label %then7384, label %endif7386 then7384: %t159 = load ptr, ptr %a1 %t160 = load %S.ast.Node, ptr %a108 call void @finch.gen.fail(ptr %t159, %S.ast.Node %t160, { ptr, i64, i64 } { ptr @.str.4833, i64 63, i64 0 }) br label %endif7386 endif7386: %t161 = load ptr, ptr %a1 %t162 = load %S.ast.Node, ptr %a108 %t163 = call %S.gen.Place @finch.gen.place(ptr %t161, %S.ast.Node %t162, i1 true) store %S.gen.Place %t163, ptr %a164 %t165 = getelementptr inbounds %S.gen.Place, ptr %a164, i32 0, i32 0 %t166 = load { ptr, i64, i64 }, ptr %t165 store { ptr, i64, i64 } %t166, ptr %a167 call void @finch_str_copy(ptr %a168, ptr %a167) %t169 = load { ptr, i64, i64 }, ptr %a168 %t170 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t169, 0 %t171 = getelementptr inbounds %S.gen.Place, ptr %a164, i32 0, i32 1 %t172 = load %S.ast.Type, ptr %t171 %t173 = call %S.ast.Type @finch.ast.ptrTo(%S.ast.Type %t172) %t174 = insertvalue %S.gen.Val %t170, %S.ast.Type %t173, 1 ret %S.gen.Val %t174 endif7361: %t175 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t175, ptr %a176 store { ptr, i64, i64 } { ptr @.str.4834, i64 3, i64 0 }, ptr %a177 %t178 = call i32 @finch_str_eq(ptr %a176, ptr %a177) %t179 = icmp ne i32 %t178, 0 br i1 %t179, label %then7387, label %endif7389 then7387: %t180 = load ptr, ptr %a1 %t181 = load %S.ast.Node, ptr %a2 %t182 = load { ptr, i64, i64 }, ptr %a8 call void @finch.gen.checkArgs(ptr %t180, %S.ast.Node %t181, i64 0, i64 1, { ptr, i64, i64 } %t182) %t183 = load ptr, ptr %a1 %t184 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t185 = load { ptr, i64, i64 }, ptr %t184 %t186 = extractvalue { ptr, i64, i64 } %t185, 1 %t187 = icmp uge i64 0, %t186 br i1 %t187, label %range7390, label %inrange7391 range7390: call void @finch_panic_index(ptr @.str.4835, i64 4344, i64 0, i64 %t186) unreachable inrange7391: %t188 = extractvalue { ptr, i64, i64 } %t185, 0 %t189 = getelementptr inbounds %S.ast.Node, ptr %t188, i64 0 %t190 = load %S.ast.Node, ptr %t189 %t191 = call %S.gen.Val @finch.gen.expr(ptr %t183, %S.ast.Node %t190) store %S.gen.Val %t191, ptr %a192 %t193 = load ptr, ptr %a1 %t194 = call { ptr, i64, i64 } @finch.gen.strOut(ptr %t193) store { ptr, i64, i64 } %t194, ptr %a195 %t196 = getelementptr inbounds %S.gen.Val, ptr %a192, i32 0, i32 1 %t197 = getelementptr inbounds %S.ast.Type, ptr %t196, i32 0, i32 0 %t198 = load { ptr, i64, i64 }, ptr %t197 store { ptr, i64, i64 } %t198, ptr %a199 call void @finch_str_copy(ptr %a200, ptr %a199) %t201 = load { ptr, i64, i64 }, ptr %a200 store { ptr, i64, i64 } %t201, ptr %a202 %t203 = load { ptr, i64, i64 }, ptr %a202 store { ptr, i64, i64 } %t203, ptr %a204 store { ptr, i64, i64 } { ptr @.str.4836, i64 3, i64 0 }, ptr %a205 %t206 = call i32 @finch_str_eq(ptr %a204, ptr %a205) %t207 = icmp ne i32 %t206, 0 br i1 %t207, label %then7392, label %else7393 then7392: %t208 = load ptr, ptr %a1 %t209 = getelementptr inbounds %S.gen.Val, ptr %a192, i32 0, i32 0 %t210 = load { ptr, i64, i64 }, ptr %t209 %t211 = getelementptr inbounds %S.gen.Val, ptr %a192, i32 0, i32 1 %t212 = load %S.ast.Type, ptr %t211 %t213 = call { ptr, i64, i64 } @finch.gen.copyValue(ptr %t208, { ptr, i64, i64 } %t210, %S.ast.Type %t212) %t214 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t213, 0 %t215 = getelementptr inbounds %S.gen.Val, ptr %a192, i32 0, i32 1 %t216 = load %S.ast.Type, ptr %t215 store %S.ast.Type %t216, ptr %a217 call void @finch.copy.S_ast_Type(ptr %a218, ptr %a217) %t219 = load %S.ast.Type, ptr %a218 %t220 = insertvalue %S.gen.Val %t214, %S.ast.Type %t219, 1 %t221 = insertvalue %S.gen.Val %t220, i1 true, 2 ret %S.gen.Val %t221 else7393: %t222 = getelementptr inbounds %S.gen.Val, ptr %a192, i32 0, i32 1 %t223 = load %S.ast.Type, ptr %t222 %t224 = call i1 @finch.gen.isSigned(%S.ast.Type %t223) br i1 %t224, label %then7395, label %else7396 then7395: %t225 = load ptr, ptr %a1 %t226 = load { ptr, i64, i64 }, ptr %a195 store { ptr, i64, i64 } { ptr @.str.4837, i64 34, i64 0 }, ptr %a228 store { ptr, i64, i64 } %t226, ptr %a229 call void @finch_str_concat(ptr %a227, ptr %a228, ptr %a229) %t230 = load { ptr, i64, i64 }, ptr %a227 store { ptr, i64, i64 } %t230, ptr %a232 store { ptr, i64, i64 } { ptr @.str.4838, i64 6, i64 0 }, ptr %a233 call void @finch_str_concat(ptr %a231, ptr %a232, ptr %a233) %t234 = load { ptr, i64, i64 }, ptr %a231 %t235 = load ptr, ptr %a1 %t236 = getelementptr inbounds %S.gen.Val, ptr %a192, i32 0, i32 0 %t237 = load { ptr, i64, i64 }, ptr %t236 %t238 = getelementptr inbounds %S.gen.Val, ptr %a192, i32 0, i32 1 %t239 = load %S.ast.Type, ptr %t238 %t240 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4839, i64 3, i64 0 }) %t241 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t235, { ptr, i64, i64 } %t237, %S.ast.Type %t239, %S.ast.Type %t240) store { ptr, i64, i64 } %t234, ptr %a243 store { ptr, i64, i64 } %t241, ptr %a244 call void @finch_str_concat(ptr %a242, ptr %a243, ptr %a244) %t245 = load { ptr, i64, i64 }, ptr %a242 store { ptr, i64, i64 } %t245, ptr %a247 store { ptr, i64, i64 } { ptr @.str.4840, i64 1, i64 0 }, ptr %a248 call void @finch_str_concat(ptr %a246, ptr %a247, ptr %a248) %t249 = load { ptr, i64, i64 }, ptr %a246 call void @finch.gen.emit(ptr %t225, { ptr, i64, i64 } %t249) br label %endif7397 else7396: %t250 = getelementptr inbounds %S.gen.Val, ptr %a192, i32 0, i32 1 %t251 = load %S.ast.Type, ptr %t250 %t252 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t251) br i1 %t252, label %then7398, label %else7399 then7398: %t253 = load ptr, ptr %a1 %t254 = load { ptr, i64, i64 }, ptr %a195 store { ptr, i64, i64 } { ptr @.str.4841, i64 35, i64 0 }, ptr %a256 store { ptr, i64, i64 } %t254, ptr %a257 call void @finch_str_concat(ptr %a255, ptr %a256, ptr %a257) %t258 = load { ptr, i64, i64 }, ptr %a255 store { ptr, i64, i64 } %t258, ptr %a260 store { ptr, i64, i64 } { ptr @.str.4842, i64 6, i64 0 }, ptr %a261 call void @finch_str_concat(ptr %a259, ptr %a260, ptr %a261) %t262 = load { ptr, i64, i64 }, ptr %a259 %t263 = load ptr, ptr %a1 %t264 = getelementptr inbounds %S.gen.Val, ptr %a192, i32 0, i32 0 %t265 = load { ptr, i64, i64 }, ptr %t264 %t266 = getelementptr inbounds %S.gen.Val, ptr %a192, i32 0, i32 1 %t267 = load %S.ast.Type, ptr %t266 %t268 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4843, i64 3, i64 0 }) %t269 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t263, { ptr, i64, i64 } %t265, %S.ast.Type %t267, %S.ast.Type %t268) store { ptr, i64, i64 } %t262, ptr %a271 store { ptr, i64, i64 } %t269, ptr %a272 call void @finch_str_concat(ptr %a270, ptr %a271, ptr %a272) %t273 = load { ptr, i64, i64 }, ptr %a270 store { ptr, i64, i64 } %t273, ptr %a275 store { ptr, i64, i64 } { ptr @.str.4844, i64 1, i64 0 }, ptr %a276 call void @finch_str_concat(ptr %a274, ptr %a275, ptr %a276) %t277 = load { ptr, i64, i64 }, ptr %a274 call void @finch.gen.emit(ptr %t253, { ptr, i64, i64 } %t277) br label %endif7400 else7399: %t278 = getelementptr inbounds %S.gen.Val, ptr %a192, i32 0, i32 1 %t279 = load %S.ast.Type, ptr %t278 %t280 = call i1 @finch.gen.isFloat(%S.ast.Type %t279) br i1 %t280, label %then7401, label %else7402 then7401: %t281 = load ptr, ptr %a1 %t282 = load { ptr, i64, i64 }, ptr %a195 store { ptr, i64, i64 } { ptr @.str.4845, i64 36, i64 0 }, ptr %a284 store { ptr, i64, i64 } %t282, ptr %a285 call void @finch_str_concat(ptr %a283, ptr %a284, ptr %a285) %t286 = load { ptr, i64, i64 }, ptr %a283 store { ptr, i64, i64 } %t286, ptr %a288 store { ptr, i64, i64 } { ptr @.str.4846, i64 9, i64 0 }, ptr %a289 call void @finch_str_concat(ptr %a287, ptr %a288, ptr %a289) %t290 = load { ptr, i64, i64 }, ptr %a287 %t291 = load ptr, ptr %a1 %t292 = getelementptr inbounds %S.gen.Val, ptr %a192, i32 0, i32 0 %t293 = load { ptr, i64, i64 }, ptr %t292 %t294 = getelementptr inbounds %S.gen.Val, ptr %a192, i32 0, i32 1 %t295 = load %S.ast.Type, ptr %t294 %t296 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4847, i64 5, i64 0 }) %t297 = call { ptr, i64, i64 } @finch.gen.floatCast(ptr %t291, { ptr, i64, i64 } %t293, %S.ast.Type %t295, %S.ast.Type %t296) store { ptr, i64, i64 } %t290, ptr %a299 store { ptr, i64, i64 } %t297, ptr %a300 call void @finch_str_concat(ptr %a298, ptr %a299, ptr %a300) %t301 = load { ptr, i64, i64 }, ptr %a298 store { ptr, i64, i64 } %t301, ptr %a303 store { ptr, i64, i64 } { ptr @.str.4848, i64 1, i64 0 }, ptr %a304 call void @finch_str_concat(ptr %a302, ptr %a303, ptr %a304) %t305 = load { ptr, i64, i64 }, ptr %a302 call void @finch.gen.emit(ptr %t281, { ptr, i64, i64 } %t305) br label %endif7403 else7402: %t306 = load { ptr, i64, i64 }, ptr %a202 store { ptr, i64, i64 } %t306, ptr %a307 store { ptr, i64, i64 } { ptr @.str.4849, i64 4, i64 0 }, ptr %a308 %t309 = call i32 @finch_str_eq(ptr %a307, ptr %a308) %t310 = icmp ne i32 %t309, 0 br i1 %t310, label %then7404, label %else7405 then7404: %t311 = load ptr, ptr %a1 %t312 = load { ptr, i64, i64 }, ptr %a195 store { ptr, i64, i64 } { ptr @.str.4850, i64 35, i64 0 }, ptr %a314 store { ptr, i64, i64 } %t312, ptr %a315 call void @finch_str_concat(ptr %a313, ptr %a314, ptr %a315) %t316 = load { ptr, i64, i64 }, ptr %a313 store { ptr, i64, i64 } %t316, ptr %a318 store { ptr, i64, i64 } { ptr @.str.4851, i64 13, i64 0 }, ptr %a319 call void @finch_str_concat(ptr %a317, ptr %a318, ptr %a319) %t320 = load { ptr, i64, i64 }, ptr %a317 %t321 = getelementptr inbounds %S.gen.Val, ptr %a192, i32 0, i32 0 %t322 = load { ptr, i64, i64 }, ptr %t321 store { ptr, i64, i64 } %t320, ptr %a324 store { ptr, i64, i64 } %t322, ptr %a325 call void @finch_str_concat(ptr %a323, ptr %a324, ptr %a325) %t326 = load { ptr, i64, i64 }, ptr %a323 store { ptr, i64, i64 } %t326, ptr %a328 store { ptr, i64, i64 } { ptr @.str.4852, i64 1, i64 0 }, ptr %a329 call void @finch_str_concat(ptr %a327, ptr %a328, ptr %a329) %t330 = load { ptr, i64, i64 }, ptr %a327 call void @finch.gen.emit(ptr %t311, { ptr, i64, i64 } %t330) br label %endif7406 else7405: %t331 = load { ptr, i64, i64 }, ptr %a202 store { ptr, i64, i64 } %t331, ptr %a332 store { ptr, i64, i64 } { ptr @.str.4853, i64 4, i64 0 }, ptr %a333 %t334 = call i32 @finch_str_eq(ptr %a332, ptr %a333) %t335 = icmp ne i32 %t334, 0 br i1 %t335, label %then7407, label %else7408 then7407: %t336 = load ptr, ptr %a1 %t337 = getelementptr inbounds %S.gen.Val, ptr %a192, i32 0, i32 0 %t338 = load { ptr, i64, i64 }, ptr %t337 store { ptr, i64, i64 } { ptr @.str.4854, i64 8, i64 0 }, ptr %a340 store { ptr, i64, i64 } %t338, ptr %a341 call void @finch_str_concat(ptr %a339, ptr %a340, ptr %a341) %t342 = load { ptr, i64, i64 }, ptr %a339 store { ptr, i64, i64 } %t342, ptr %a344 store { ptr, i64, i64 } { ptr @.str.4855, i64 7, i64 0 }, ptr %a345 call void @finch_str_concat(ptr %a343, ptr %a344, ptr %a345) %t346 = load { ptr, i64, i64 }, ptr %a343 %t347 = call { ptr, i64, i64 } @finch.gen.op(ptr %t336, { ptr, i64, i64 } %t346) store { ptr, i64, i64 } %t347, ptr %a348 %t349 = load ptr, ptr %a1 %t350 = load { ptr, i64, i64 }, ptr %a195 store { ptr, i64, i64 } { ptr @.str.4856, i64 35, i64 0 }, ptr %a352 store { ptr, i64, i64 } %t350, ptr %a353 call void @finch_str_concat(ptr %a351, ptr %a352, ptr %a353) %t354 = load { ptr, i64, i64 }, ptr %a351 store { ptr, i64, i64 } %t354, ptr %a356 store { ptr, i64, i64 } { ptr @.str.4857, i64 6, i64 0 }, ptr %a357 call void @finch_str_concat(ptr %a355, ptr %a356, ptr %a357) %t358 = load { ptr, i64, i64 }, ptr %a355 %t359 = load { ptr, i64, i64 }, ptr %a348 store { ptr, i64, i64 } %t358, ptr %a361 store { ptr, i64, i64 } %t359, ptr %a362 call void @finch_str_concat(ptr %a360, ptr %a361, ptr %a362) %t363 = load { ptr, i64, i64 }, ptr %a360 store { ptr, i64, i64 } %t363, ptr %a365 store { ptr, i64, i64 } { ptr @.str.4858, i64 1, i64 0 }, ptr %a366 call void @finch_str_concat(ptr %a364, ptr %a365, ptr %a366) %t367 = load { ptr, i64, i64 }, ptr %a364 call void @finch.gen.emit(ptr %t349, { ptr, i64, i64 } %t367) br label %endif7409 else7408: %t368 = load { ptr, i64, i64 }, ptr %a202 store { ptr, i64, i64 } %t368, ptr %a369 store { ptr, i64, i64 } { ptr @.str.4859, i64 3, i64 0 }, ptr %a370 %t371 = call i32 @finch_str_eq(ptr %a369, ptr %a370) %t372 = icmp ne i32 %t371, 0 br i1 %t372, label %then7410, label %else7411 then7410: %t373 = load ptr, ptr %a1 %t374 = load { ptr, i64, i64 }, ptr %a195 call void @finch.gen.store(ptr %t373, { ptr, i64, i64 } { ptr @.str.4860, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.4861, i64 15, i64 0 }, { ptr, i64, i64 } %t374) %t375 = load ptr, ptr %a1 %t376 = load { ptr, i64, i64 }, ptr %a195 store { ptr, i64, i64 } { ptr @.str.4862, i64 32, i64 0 }, ptr %a378 store { ptr, i64, i64 } %t376, ptr %a379 call void @finch_str_concat(ptr %a377, ptr %a378, ptr %a379) %t380 = load { ptr, i64, i64 }, ptr %a377 store { ptr, i64, i64 } %t380, ptr %a382 store { ptr, i64, i64 } { ptr @.str.4863, i64 6, i64 0 }, ptr %a383 call void @finch_str_concat(ptr %a381, ptr %a382, ptr %a383) %t384 = load { ptr, i64, i64 }, ptr %a381 %t385 = getelementptr inbounds %S.gen.Val, ptr %a192, i32 0, i32 0 %t386 = load { ptr, i64, i64 }, ptr %t385 store { ptr, i64, i64 } %t384, ptr %a388 store { ptr, i64, i64 } %t386, ptr %a389 call void @finch_str_concat(ptr %a387, ptr %a388, ptr %a389) %t390 = load { ptr, i64, i64 }, ptr %a387 store { ptr, i64, i64 } %t390, ptr %a392 store { ptr, i64, i64 } { ptr @.str.4864, i64 1, i64 0 }, ptr %a393 call void @finch_str_concat(ptr %a391, ptr %a392, ptr %a393) %t394 = load { ptr, i64, i64 }, ptr %a391 call void @finch.gen.emit(ptr %t375, { ptr, i64, i64 } %t394) br label %endif7412 else7411: %t395 = load { ptr, i64, i64 }, ptr %a202 store { ptr, i64, i64 } %t395, ptr %a396 store { ptr, i64, i64 } { ptr @.str.4865, i64 5, i64 0 }, ptr %a397 %t398 = call i32 @finch_str_eq(ptr %a396, ptr %a397) %t399 = icmp ne i32 %t398, 0 br label %logic.from7413 logic.from7413: br i1 %t399, label %logic.rhs7414, label %logic.end7415 logic.rhs7414: %t400 = getelementptr inbounds %S.gen.Val, ptr %a192, i32 0, i32 1 %t401 = getelementptr inbounds %S.ast.Type, ptr %t400, i32 0, i32 1 %t402 = load { ptr, i64, i64 }, ptr %t401 %t403 = extractvalue { ptr, i64, i64 } %t402, 1 %t404 = icmp uge i64 0, %t403 br i1 %t404, label %range7416, label %inrange7417 range7416: call void @finch_panic_index(ptr @.str.4866, i64 4364, i64 0, i64 %t403) unreachable inrange7417: %t405 = extractvalue { ptr, i64, i64 } %t402, 0 %t406 = getelementptr inbounds %S.ast.Type, ptr %t405, i64 0 %t407 = getelementptr inbounds %S.ast.Type, ptr %t406, i32 0, i32 0 %t408 = load { ptr, i64, i64 }, ptr %t407 store { ptr, i64, i64 } %t408, ptr %a409 store { ptr, i64, i64 } { ptr @.str.4867, i64 2, i64 0 }, ptr %a410 %t411 = call i32 @finch_str_eq(ptr %a409, ptr %a410) %t412 = icmp ne i32 %t411, 0 br label %logic.from7418 logic.from7418: br i1 %t412, label %logic.end7420, label %logic.rhs7419 logic.rhs7419: %t413 = getelementptr inbounds %S.gen.Val, ptr %a192, i32 0, i32 1 %t414 = getelementptr inbounds %S.ast.Type, ptr %t413, i32 0, i32 1 %t415 = load { ptr, i64, i64 }, ptr %t414 %t416 = extractvalue { ptr, i64, i64 } %t415, 1 %t417 = icmp uge i64 0, %t416 br i1 %t417, label %range7421, label %inrange7422 range7421: call void @finch_panic_index(ptr @.str.4868, i64 4364, i64 0, i64 %t416) unreachable inrange7422: %t418 = extractvalue { ptr, i64, i64 } %t415, 0 %t419 = getelementptr inbounds %S.ast.Type, ptr %t418, i64 0 %t420 = getelementptr inbounds %S.ast.Type, ptr %t419, i32 0, i32 0 %t421 = load { ptr, i64, i64 }, ptr %t420 store { ptr, i64, i64 } %t421, ptr %a422 store { ptr, i64, i64 } { ptr @.str.4869, i64 4, i64 0 }, ptr %a423 %t424 = call i32 @finch_str_eq(ptr %a422, ptr %a423) %t425 = icmp ne i32 %t424, 0 br label %logic.rend7423 logic.rend7423: br label %logic.end7420 logic.end7420: %t426 = phi i1 [ true, %logic.from7418 ], [ %t425, %logic.rend7423 ] br label %logic.rend7424 logic.rend7424: br label %logic.end7415 logic.end7415: %t427 = phi i1 [ false, %logic.from7413 ], [ %t426, %logic.rend7424 ] br i1 %t427, label %then7425, label %else7426 then7425: %t428 = load ptr, ptr %a1 %t429 = load { ptr, i64, i64 }, ptr %a195 call void @finch.gen.store(ptr %t428, { ptr, i64, i64 } { ptr @.str.4870, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.4871, i64 15, i64 0 }, { ptr, i64, i64 } %t429) %t430 = load ptr, ptr %a1 %t431 = load { ptr, i64, i64 }, ptr %a195 store { ptr, i64, i64 } { ptr @.str.4872, i64 36, i64 0 }, ptr %a433 store { ptr, i64, i64 } %t431, ptr %a434 call void @finch_str_concat(ptr %a432, ptr %a433, ptr %a434) %t435 = load { ptr, i64, i64 }, ptr %a432 store { ptr, i64, i64 } %t435, ptr %a437 store { ptr, i64, i64 } { ptr @.str.4873, i64 6, i64 0 }, ptr %a438 call void @finch_str_concat(ptr %a436, ptr %a437, ptr %a438) %t439 = load { ptr, i64, i64 }, ptr %a436 %t440 = load ptr, ptr %a1 %t441 = load %S.gen.Val, ptr %a192 %t442 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t440, %S.gen.Val %t441) store { ptr, i64, i64 } %t439, ptr %a444 store { ptr, i64, i64 } %t442, ptr %a445 call void @finch_str_concat(ptr %a443, ptr %a444, ptr %a445) %t446 = load { ptr, i64, i64 }, ptr %a443 store { ptr, i64, i64 } %t446, ptr %a448 store { ptr, i64, i64 } { ptr @.str.4874, i64 1, i64 0 }, ptr %a449 call void @finch_str_concat(ptr %a447, ptr %a448, ptr %a449) %t450 = load { ptr, i64, i64 }, ptr %a447 call void @finch.gen.emit(ptr %t430, { ptr, i64, i64 } %t450) br label %endif7427 else7426: %t451 = load { ptr, i64, i64 }, ptr %a202 store { ptr, i64, i64 } %t451, ptr %a452 store { ptr, i64, i64 } { ptr @.str.4875, i64 4, i64 0 }, ptr %a453 %t454 = call i32 @finch_str_eq(ptr %a452, ptr %a453) %t455 = icmp ne i32 %t454, 0 br label %logic.from7428 logic.from7428: br i1 %t455, label %logic.end7430, label %logic.rhs7429 logic.rhs7429: %t456 = load { ptr, i64, i64 }, ptr %a202 store { ptr, i64, i64 } %t456, ptr %a457 store { ptr, i64, i64 } { ptr @.str.4876, i64 4, i64 0 }, ptr %a458 %t459 = call i32 @finch_str_eq(ptr %a457, ptr %a458) %t460 = icmp ne i32 %t459, 0 br label %logic.rend7431 logic.rend7431: br label %logic.end7430 logic.end7430: %t461 = phi i1 [ true, %logic.from7428 ], [ %t460, %logic.rend7431 ] br label %logic.from7432 logic.from7432: br i1 %t461, label %logic.end7434, label %logic.rhs7433 logic.rhs7433: %t462 = load { ptr, i64, i64 }, ptr %a202 store { ptr, i64, i64 } %t462, ptr %a463 store { ptr, i64, i64 } { ptr @.str.4877, i64 5, i64 0 }, ptr %a464 %t465 = call i32 @finch_str_eq(ptr %a463, ptr %a464) %t466 = icmp ne i32 %t465, 0 br label %logic.rend7435 logic.rend7435: br label %logic.end7434 logic.end7434: %t467 = phi i1 [ true, %logic.from7432 ], [ %t466, %logic.rend7435 ] br label %logic.from7436 logic.from7436: br i1 %t467, label %logic.end7438, label %logic.rhs7437 logic.rhs7437: %t468 = load { ptr, i64, i64 }, ptr %a202 store { ptr, i64, i64 } %t468, ptr %a469 store { ptr, i64, i64 } { ptr @.str.4878, i64 3, i64 0 }, ptr %a470 %t471 = call i32 @finch_str_eq(ptr %a469, ptr %a470) %t472 = icmp ne i32 %t471, 0 br label %logic.rend7439 logic.rend7439: br label %logic.end7438 logic.end7438: %t473 = phi i1 [ true, %logic.from7436 ], [ %t472, %logic.rend7439 ] br label %logic.from7440 logic.from7440: br i1 %t473, label %logic.end7442, label %logic.rhs7441 logic.rhs7441: %t474 = load { ptr, i64, i64 }, ptr %a202 store { ptr, i64, i64 } %t474, ptr %a475 store { ptr, i64, i64 } { ptr @.str.4879, i64 6, i64 0 }, ptr %a476 %t477 = call i32 @finch_str_eq(ptr %a475, ptr %a476) %t478 = icmp ne i32 %t477, 0 br label %logic.rend7443 logic.rend7443: br label %logic.end7442 logic.end7442: %t479 = phi i1 [ true, %logic.from7440 ], [ %t478, %logic.rend7443 ] br label %logic.from7444 logic.from7444: br i1 %t479, label %logic.end7446, label %logic.rhs7445 logic.rhs7445: %t480 = load { ptr, i64, i64 }, ptr %a202 store { ptr, i64, i64 } %t480, ptr %a481 store { ptr, i64, i64 } { ptr @.str.4880, i64 4, i64 0 }, ptr %a482 %t483 = call i32 @finch_str_eq(ptr %a481, ptr %a482) %t484 = icmp ne i32 %t483, 0 br label %logic.rend7447 logic.rend7447: br label %logic.end7446 logic.end7446: %t485 = phi i1 [ true, %logic.from7444 ], [ %t484, %logic.rend7447 ] br i1 %t485, label %then7448, label %else7449 then7448: %t486 = load ptr, ptr %a1 %t487 = load { ptr, i64, i64 }, ptr %a195 call void @finch.gen.store(ptr %t486, { ptr, i64, i64 } { ptr @.str.4881, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.4882, i64 15, i64 0 }, { ptr, i64, i64 } %t487) %t488 = load ptr, ptr %a1 %t489 = load { ptr, i64, i64 }, ptr %a195 %t490 = getelementptr inbounds %S.gen.Val, ptr %a192, i32 0, i32 0 %t491 = load { ptr, i64, i64 }, ptr %t490 %t492 = getelementptr inbounds %S.gen.Val, ptr %a192, i32 0, i32 1 %t493 = load %S.ast.Type, ptr %t492 call void @finch.gen.emitFormat(ptr %t488, { ptr, i64, i64 } %t489, { ptr, i64, i64 } %t491, %S.ast.Type %t493, i1 false) br label %endif7450 else7449: %t494 = load ptr, ptr %a1 %t495 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t496 = load { ptr, i64, i64 }, ptr %t495 %t497 = extractvalue { ptr, i64, i64 } %t496, 1 %t498 = icmp uge i64 0, %t497 br i1 %t498, label %range7451, label %inrange7452 range7451: call void @finch_panic_index(ptr @.str.4883, i64 4372, i64 0, i64 %t497) unreachable inrange7452: %t499 = extractvalue { ptr, i64, i64 } %t496, 0 %t500 = getelementptr inbounds %S.ast.Node, ptr %t499, i64 0 %t501 = load %S.ast.Node, ptr %t500 %t502 = getelementptr inbounds %S.gen.Val, ptr %a192, i32 0, i32 1 %t503 = load %S.ast.Type, ptr %t502 %t504 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t503) store { ptr, i64, i64 } { ptr @.str.4884, i64 11, i64 0 }, ptr %a506 store { ptr, i64, i64 } %t504, ptr %a507 call void @finch_str_concat(ptr %a505, ptr %a506, ptr %a507) %t508 = load { ptr, i64, i64 }, ptr %a505 store { ptr, i64, i64 } %t508, ptr %a510 store { ptr, i64, i64 } { ptr @.str.4885, i64 9, i64 0 }, ptr %a511 call void @finch_str_concat(ptr %a509, ptr %a510, ptr %a511) %t512 = load { ptr, i64, i64 }, ptr %a509 call void @finch.gen.fail(ptr %t494, %S.ast.Node %t501, { ptr, i64, i64 } %t512) br label %endif7450 endif7450: br label %endif7427 endif7427: br label %endif7412 endif7412: br label %endif7409 endif7409: br label %endif7406 endif7406: br label %endif7403 endif7403: br label %endif7400 endif7400: br label %endif7397 endif7397: br label %endif7394 endif7394: %t513 = load ptr, ptr %a1 %t514 = load { ptr, i64, i64 }, ptr %a195 %t515 = call { ptr, i64, i64 } @finch.gen.load(ptr %t513, { ptr, i64, i64 } { ptr @.str.4886, i64 17, i64 0 }, { ptr, i64, i64 } %t514) %t516 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t515, 0 %t517 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4887, i64 3, i64 0 }) %t518 = insertvalue %S.gen.Val %t516, %S.ast.Type %t517, 1 %t519 = insertvalue %S.gen.Val %t518, i1 true, 2 ret %S.gen.Val %t519 endif7389: %t520 = load { ptr, i64, i64 }, ptr %a8 %t521 = call { ptr, i64, i64 } @finch.gen.numType({ ptr, i64, i64 } %t520) store { ptr, i64, i64 } %t521, ptr %a522 %t523 = getelementptr inbounds { ptr, i64, i64 }, ptr %a522, i32 0, i32 1 %t524 = load i64, ptr %t523 %t525 = icmp sgt i64 %t524, 0 br i1 %t525, label %then7453, label %endif7455 then7453: %t526 = load ptr, ptr %a1 %t527 = load %S.ast.Node, ptr %a2 %t528 = load { ptr, i64, i64 }, ptr %a522 %t529 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } %t528) %t530 = call %S.gen.Val @finch.gen.convert(ptr %t526, %S.ast.Node %t527, %S.ast.Type %t529) ret %S.gen.Val %t530 endif7455: %t531 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t531, ptr %a532 store { ptr, i64, i64 } { ptr @.str.4888, i64 9, i64 0 }, ptr %a533 %t534 = call i32 @finch_str_eq(ptr %a532, ptr %a533) %t535 = icmp ne i32 %t534, 0 br label %logic.from7456 logic.from7456: br i1 %t535, label %logic.end7458, label %logic.rhs7457 logic.rhs7457: %t536 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t536, ptr %a537 store { ptr, i64, i64 } { ptr @.str.4889, i64 11, i64 0 }, ptr %a538 %t539 = call i32 @finch_str_eq(ptr %a537, ptr %a538) %t540 = icmp ne i32 %t539, 0 br label %logic.rend7459 logic.rend7459: br label %logic.end7458 logic.end7458: %t541 = phi i1 [ true, %logic.from7456 ], [ %t540, %logic.rend7459 ] br i1 %t541, label %then7460, label %endif7462 then7460: %t542 = load ptr, ptr %a1 %t543 = load %S.ast.Node, ptr %a2 %t544 = load { ptr, i64, i64 }, ptr %a8 call void @finch.gen.checkArgs(ptr %t542, %S.ast.Node %t543, i64 0, i64 1, { ptr, i64, i64 } %t544) %t545 = load ptr, ptr %a1 %t546 = load ptr, ptr %a1 %t547 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t548 = load { ptr, i64, i64 }, ptr %t547 %t549 = extractvalue { ptr, i64, i64 } %t548, 1 %t550 = icmp uge i64 0, %t549 br i1 %t550, label %range7463, label %inrange7464 range7463: call void @finch_panic_index(ptr @.str.4890, i64 4382, i64 0, i64 %t549) unreachable inrange7464: %t551 = extractvalue { ptr, i64, i64 } %t548, 0 %t552 = getelementptr inbounds %S.ast.Node, ptr %t551, i64 0 %t553 = load %S.ast.Node, ptr %t552 %t554 = call %S.gen.Val @finch.gen.strArg(ptr %t546, %S.ast.Node %t553, { ptr, i64, i64 } { ptr @.str.4891, i64 13, i64 0 }) %t555 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t545, %S.gen.Val %t554) store { ptr, i64, i64 } %t555, ptr %a556 %t557 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t557, ptr %a558 store { ptr, i64, i64 } { ptr @.str.4892, i64 11, i64 0 }, ptr %a559 %t560 = call i32 @finch_str_eq(ptr %a558, ptr %a559) %t561 = icmp ne i32 %t560, 0 br i1 %t561, label %then7465, label %endif7467 then7465: %t562 = load ptr, ptr %a1 %t563 = load { ptr, i64, i64 }, ptr %a556 store { ptr, i64, i64 } { ptr @.str.4893, i64 32, i64 0 }, ptr %a565 store { ptr, i64, i64 } %t563, ptr %a566 call void @finch_str_concat(ptr %a564, ptr %a565, ptr %a566) %t567 = load { ptr, i64, i64 }, ptr %a564 store { ptr, i64, i64 } %t567, ptr %a569 store { ptr, i64, i64 } { ptr @.str.4894, i64 1, i64 0 }, ptr %a570 call void @finch_str_concat(ptr %a568, ptr %a569, ptr %a570) %t571 = load { ptr, i64, i64 }, ptr %a568 %t572 = call { ptr, i64, i64 } @finch.gen.op(ptr %t562, { ptr, i64, i64 } %t571) store { ptr, i64, i64 } %t572, ptr %a573 %t574 = load ptr, ptr %a1 %t575 = load { ptr, i64, i64 }, ptr %a573 store { ptr, i64, i64 } { ptr @.str.4895, i64 12, i64 0 }, ptr %a577 store { ptr, i64, i64 } %t575, ptr %a578 call void @finch_str_concat(ptr %a576, ptr %a577, ptr %a578) %t579 = load { ptr, i64, i64 }, ptr %a576 store { ptr, i64, i64 } %t579, ptr %a581 store { ptr, i64, i64 } { ptr @.str.4896, i64 3, i64 0 }, ptr %a582 call void @finch_str_concat(ptr %a580, ptr %a581, ptr %a582) %t583 = load { ptr, i64, i64 }, ptr %a580 %t584 = call { ptr, i64, i64 } @finch.gen.op(ptr %t574, { ptr, i64, i64 } %t583) %t585 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t584, 0 %t586 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4897, i64 4, i64 0 }) %t587 = insertvalue %S.gen.Val %t585, %S.ast.Type %t586, 1 ret %S.gen.Val %t587 endif7467: %t588 = load ptr, ptr %a1 %t589 = call { ptr, i64, i64 } @finch.gen.strOut(ptr %t588) store { ptr, i64, i64 } %t589, ptr %a590 %t591 = load ptr, ptr %a1 %t592 = icmp eq ptr %t591, null br i1 %t592, label %panic7468, label %ok7469 panic7468: call void @finch_panic(ptr @.str.4898, i64 4388, ptr @.str.4899) unreachable ok7469: %t593 = getelementptr inbounds %S.gen.Gen, ptr %t591, i32 0, i32 39 %t594 = load { ptr, i64, i64 }, ptr %t593 %t595 = load %S.ast.Node, ptr %a2 %t596 = call { ptr, i64, i64 } @finch.gen.nodeKey(%S.ast.Node %t595) store { ptr, i64, i64 } %t594, ptr %a597 store { ptr, i64, i64 } %t596, ptr %a598 %t599 = call i32 @finch_str_eq(ptr %a597, ptr %a598) %t600 = icmp ne i32 %t599, 0 br i1 %t600, label %then7470, label %endif7472 then7470: %t601 = load ptr, ptr %a1 %t602 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t601, { ptr, i64, i64 } { ptr @.str.4900, i64 17, i64 0 }) store { ptr, i64, i64 } %t602, ptr %a603 %t604 = load ptr, ptr %a1 %t605 = load { ptr, i64, i64 }, ptr %a590 call void @finch.gen.store(ptr %t604, { ptr, i64, i64 } { ptr @.str.4901, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.4902, i64 15, i64 0 }, { ptr, i64, i64 } %t605) %t606 = load ptr, ptr %a1 %t607 = load { ptr, i64, i64 }, ptr %a603 call void @finch.gen.store(ptr %t606, { ptr, i64, i64 } { ptr @.str.4903, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.4904, i64 15, i64 0 }, { ptr, i64, i64 } %t607) %t608 = load ptr, ptr %a1 %t609 = load { ptr, i64, i64 }, ptr %a590 store { ptr, i64, i64 } { ptr @.str.4905, i64 34, i64 0 }, ptr %a611 store { ptr, i64, i64 } %t609, ptr %a612 call void @finch_str_concat(ptr %a610, ptr %a611, ptr %a612) %t613 = load { ptr, i64, i64 }, ptr %a610 store { ptr, i64, i64 } %t613, ptr %a615 store { ptr, i64, i64 } { ptr @.str.4906, i64 6, i64 0 }, ptr %a616 call void @finch_str_concat(ptr %a614, ptr %a615, ptr %a616) %t617 = load { ptr, i64, i64 }, ptr %a614 %t618 = load { ptr, i64, i64 }, ptr %a556 store { ptr, i64, i64 } %t617, ptr %a620 store { ptr, i64, i64 } %t618, ptr %a621 call void @finch_str_concat(ptr %a619, ptr %a620, ptr %a621) %t622 = load { ptr, i64, i64 }, ptr %a619 store { ptr, i64, i64 } %t622, ptr %a624 store { ptr, i64, i64 } { ptr @.str.4907, i64 6, i64 0 }, ptr %a625 call void @finch_str_concat(ptr %a623, ptr %a624, ptr %a625) %t626 = load { ptr, i64, i64 }, ptr %a623 %t627 = load { ptr, i64, i64 }, ptr %a603 store { ptr, i64, i64 } %t626, ptr %a629 store { ptr, i64, i64 } %t627, ptr %a630 call void @finch_str_concat(ptr %a628, ptr %a629, ptr %a630) %t631 = load { ptr, i64, i64 }, ptr %a628 store { ptr, i64, i64 } %t631, ptr %a633 store { ptr, i64, i64 } { ptr @.str.4908, i64 1, i64 0 }, ptr %a634 call void @finch_str_concat(ptr %a632, ptr %a633, ptr %a634) %t635 = load { ptr, i64, i64 }, ptr %a632 %t636 = call { ptr, i64, i64 } @finch.gen.op(ptr %t608, { ptr, i64, i64 } %t635) store { ptr, i64, i64 } %t636, ptr %a637 %t638 = load ptr, ptr %a1 %t639 = load { ptr, i64, i64 }, ptr %a637 store { ptr, i64, i64 } { ptr @.str.4909, i64 12, i64 0 }, ptr %a641 store { ptr, i64, i64 } %t639, ptr %a642 call void @finch_str_concat(ptr %a640, ptr %a641, ptr %a642) %t643 = load { ptr, i64, i64 }, ptr %a640 store { ptr, i64, i64 } %t643, ptr %a645 store { ptr, i64, i64 } { ptr @.str.4910, i64 3, i64 0 }, ptr %a646 call void @finch_str_concat(ptr %a644, ptr %a645, ptr %a646) %t647 = load { ptr, i64, i64 }, ptr %a644 %t648 = call { ptr, i64, i64 } @finch.gen.op(ptr %t638, { ptr, i64, i64 } %t647) %t649 = load ptr, ptr %a1 %t650 = icmp eq ptr %t649, null br i1 %t650, label %panic7473, label %ok7474 panic7473: call void @finch_panic(ptr @.str.4911, i64 4393, ptr @.str.4912) unreachable ok7474: %t651 = getelementptr inbounds %S.gen.Gen, ptr %t649, i32 0, i32 40 store { ptr, i64, i64 } %t648, ptr %t651 %t652 = load ptr, ptr %a1 %t653 = load { ptr, i64, i64 }, ptr %a603 %t654 = call { ptr, i64, i64 } @finch.gen.load(ptr %t652, { ptr, i64, i64 } { ptr @.str.4913, i64 17, i64 0 }, { ptr, i64, i64 } %t653) %t655 = load ptr, ptr %a1 %t656 = icmp eq ptr %t655, null br i1 %t656, label %panic7475, label %ok7476 panic7475: call void @finch_panic(ptr @.str.4914, i64 4394, ptr @.str.4915) unreachable ok7476: %t657 = getelementptr inbounds %S.gen.Gen, ptr %t655, i32 0, i32 41 store { ptr, i64, i64 } %t654, ptr %t657 %t658 = load ptr, ptr %a1 %t659 = load { ptr, i64, i64 }, ptr %a590 %t660 = call { ptr, i64, i64 } @finch.gen.load(ptr %t658, { ptr, i64, i64 } { ptr @.str.4916, i64 17, i64 0 }, { ptr, i64, i64 } %t659) %t661 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t660, 0 %t662 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4917, i64 3, i64 0 }) %t663 = insertvalue %S.gen.Val %t661, %S.ast.Type %t662, 1 %t664 = insertvalue %S.gen.Val %t663, i1 true, 2 ret %S.gen.Val %t664 endif7472: %t665 = load ptr, ptr %a1 %t666 = load ptr, ptr %a1 %t667 = icmp eq ptr %t666, null br i1 %t667, label %panic7477, label %ok7478 panic7477: call void @finch_panic(ptr @.str.4918, i64 4397, ptr @.str.4919) unreachable ok7478: %t668 = getelementptr inbounds %S.gen.Gen, ptr %t666, i32 0, i32 1 %t669 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 %t670 = load i64, ptr %t669 %t671 = load { ptr, i64, i64 }, ptr %t668 %t672 = extractvalue { ptr, i64, i64 } %t671, 1 %t673 = icmp uge i64 %t670, %t672 br i1 %t673, label %range7479, label %inrange7480 range7479: call void @finch_panic_index(ptr @.str.4920, i64 4397, i64 %t670, i64 %t672) unreachable inrange7480: %t674 = extractvalue { ptr, i64, i64 } %t671, 0 %t675 = getelementptr inbounds { ptr, i64, i64 }, ptr %t674, i64 %t670 %t676 = load { ptr, i64, i64 }, ptr %t675 %t677 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t665, { ptr, i64, i64 } %t676) store { ptr, i64, i64 } %t677, ptr %a678 %t679 = load ptr, ptr %a1 %t680 = load { ptr, i64, i64 }, ptr %a590 store { ptr, i64, i64 } { ptr @.str.4921, i64 31, i64 0 }, ptr %a682 store { ptr, i64, i64 } %t680, ptr %a683 call void @finch_str_concat(ptr %a681, ptr %a682, ptr %a683) %t684 = load { ptr, i64, i64 }, ptr %a681 store { ptr, i64, i64 } %t684, ptr %a686 store { ptr, i64, i64 } { ptr @.str.4922, i64 6, i64 0 }, ptr %a687 call void @finch_str_concat(ptr %a685, ptr %a686, ptr %a687) %t688 = load { ptr, i64, i64 }, ptr %a685 %t689 = load { ptr, i64, i64 }, ptr %a556 store { ptr, i64, i64 } %t688, ptr %a691 store { ptr, i64, i64 } %t689, ptr %a692 call void @finch_str_concat(ptr %a690, ptr %a691, ptr %a692) %t693 = load { ptr, i64, i64 }, ptr %a690 store { ptr, i64, i64 } %t693, ptr %a695 store { ptr, i64, i64 } { ptr @.str.4923, i64 6, i64 0 }, ptr %a696 call void @finch_str_concat(ptr %a694, ptr %a695, ptr %a696) %t697 = load { ptr, i64, i64 }, ptr %a694 %t698 = load { ptr, i64, i64 }, ptr %a678 store { ptr, i64, i64 } %t697, ptr %a700 store { ptr, i64, i64 } %t698, ptr %a701 call void @finch_str_concat(ptr %a699, ptr %a700, ptr %a701) %t702 = load { ptr, i64, i64 }, ptr %a699 store { ptr, i64, i64 } %t702, ptr %a704 store { ptr, i64, i64 } { ptr @.str.4924, i64 6, i64 0 }, ptr %a705 call void @finch_str_concat(ptr %a703, ptr %a704, ptr %a705) %t706 = load { ptr, i64, i64 }, ptr %a703 %t707 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 %t708 = load i64, ptr %t707 call void @finch_str_from_int(ptr %a709, i64 %t708) %t710 = load { ptr, i64, i64 }, ptr %a709 store { ptr, i64, i64 } %t706, ptr %a712 store { ptr, i64, i64 } %t710, ptr %a713 call void @finch_str_concat(ptr %a711, ptr %a712, ptr %a713) %t714 = load { ptr, i64, i64 }, ptr %a711 store { ptr, i64, i64 } %t714, ptr %a716 store { ptr, i64, i64 } { ptr @.str.4925, i64 1, i64 0 }, ptr %a717 call void @finch_str_concat(ptr %a715, ptr %a716, ptr %a717) %t718 = load { ptr, i64, i64 }, ptr %a715 call void @finch.gen.emit(ptr %t679, { ptr, i64, i64 } %t718) %t719 = load ptr, ptr %a1 %t720 = load { ptr, i64, i64 }, ptr %a590 %t721 = call { ptr, i64, i64 } @finch.gen.load(ptr %t719, { ptr, i64, i64 } { ptr @.str.4926, i64 17, i64 0 }, { ptr, i64, i64 } %t720) %t722 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t721, 0 %t723 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4927, i64 3, i64 0 }) %t724 = insertvalue %S.gen.Val %t722, %S.ast.Type %t723, 1 %t725 = insertvalue %S.gen.Val %t724, i1 true, 2 ret %S.gen.Val %t725 endif7462: %t726 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t726, ptr %a727 store { ptr, i64, i64 } { ptr @.str.4928, i64 10, i64 0 }, ptr %a728 %t729 = call i32 @finch_str_eq(ptr %a727, ptr %a728) %t730 = icmp ne i32 %t729, 0 br i1 %t730, label %then7481, label %endif7483 then7481: %t731 = load ptr, ptr %a1 %t732 = load %S.ast.Node, ptr %a2 %t733 = load { ptr, i64, i64 }, ptr %a8 call void @finch.gen.checkArgs(ptr %t731, %S.ast.Node %t732, i64 0, i64 2, { ptr, i64, i64 } %t733) %t734 = load ptr, ptr %a1 %t735 = load ptr, ptr %a1 %t736 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t737 = load { ptr, i64, i64 }, ptr %t736 %t738 = extractvalue { ptr, i64, i64 } %t737, 1 %t739 = icmp uge i64 0, %t738 br i1 %t739, label %range7484, label %inrange7485 range7484: call void @finch_panic_index(ptr @.str.4929, i64 4403, i64 0, i64 %t738) unreachable inrange7485: %t740 = extractvalue { ptr, i64, i64 } %t737, 0 %t741 = getelementptr inbounds %S.ast.Node, ptr %t740, i64 0 %t742 = load %S.ast.Node, ptr %t741 %t743 = call %S.gen.Val @finch.gen.strArg(ptr %t735, %S.ast.Node %t742, { ptr, i64, i64 } { ptr @.str.4930, i64 13, i64 0 }) %t744 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t734, %S.gen.Val %t743) store { ptr, i64, i64 } %t744, ptr %a745 %t746 = load ptr, ptr %a1 %t747 = load ptr, ptr %a1 %t748 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t749 = load { ptr, i64, i64 }, ptr %t748 %t750 = extractvalue { ptr, i64, i64 } %t749, 1 %t751 = icmp uge i64 1, %t750 br i1 %t751, label %range7486, label %inrange7487 range7486: call void @finch_panic_index(ptr @.str.4931, i64 4404, i64 1, i64 %t750) unreachable inrange7487: %t752 = extractvalue { ptr, i64, i64 } %t749, 0 %t753 = getelementptr inbounds %S.ast.Node, ptr %t752, i64 1 %t754 = load %S.ast.Node, ptr %t753 %t755 = call %S.gen.Val @finch.gen.strArg(ptr %t747, %S.ast.Node %t754, { ptr, i64, i64 } { ptr @.str.4932, i64 8, i64 0 }) %t756 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t746, %S.gen.Val %t755) store { ptr, i64, i64 } %t756, ptr %a757 %t758 = load ptr, ptr %a1 %t759 = icmp eq ptr %t758, null br i1 %t759, label %panic7488, label %ok7489 panic7488: call void @finch_panic(ptr @.str.4933, i64 4405, ptr @.str.4934) unreachable ok7489: %t760 = getelementptr inbounds %S.gen.Gen, ptr %t758, i32 0, i32 39 %t761 = load { ptr, i64, i64 }, ptr %t760 %t762 = load %S.ast.Node, ptr %a2 %t763 = call { ptr, i64, i64 } @finch.gen.nodeKey(%S.ast.Node %t762) store { ptr, i64, i64 } %t761, ptr %a764 store { ptr, i64, i64 } %t763, ptr %a765 %t766 = call i32 @finch_str_eq(ptr %a764, ptr %a765) %t767 = icmp ne i32 %t766, 0 br i1 %t767, label %then7490, label %endif7492 then7490: %t768 = load ptr, ptr %a1 %t769 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t768, { ptr, i64, i64 } { ptr @.str.4935, i64 17, i64 0 }) store { ptr, i64, i64 } %t769, ptr %a770 %t771 = load ptr, ptr %a1 %t772 = load { ptr, i64, i64 }, ptr %a770 call void @finch.gen.store(ptr %t771, { ptr, i64, i64 } { ptr @.str.4936, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.4937, i64 15, i64 0 }, { ptr, i64, i64 } %t772) %t773 = load ptr, ptr %a1 %t774 = load { ptr, i64, i64 }, ptr %a745 store { ptr, i64, i64 } { ptr @.str.4938, i64 35, i64 0 }, ptr %a776 store { ptr, i64, i64 } %t774, ptr %a777 call void @finch_str_concat(ptr %a775, ptr %a776, ptr %a777) %t778 = load { ptr, i64, i64 }, ptr %a775 store { ptr, i64, i64 } %t778, ptr %a780 store { ptr, i64, i64 } { ptr @.str.4939, i64 6, i64 0 }, ptr %a781 call void @finch_str_concat(ptr %a779, ptr %a780, ptr %a781) %t782 = load { ptr, i64, i64 }, ptr %a779 %t783 = load { ptr, i64, i64 }, ptr %a757 store { ptr, i64, i64 } %t782, ptr %a785 store { ptr, i64, i64 } %t783, ptr %a786 call void @finch_str_concat(ptr %a784, ptr %a785, ptr %a786) %t787 = load { ptr, i64, i64 }, ptr %a784 store { ptr, i64, i64 } %t787, ptr %a789 store { ptr, i64, i64 } { ptr @.str.4940, i64 6, i64 0 }, ptr %a790 call void @finch_str_concat(ptr %a788, ptr %a789, ptr %a790) %t791 = load { ptr, i64, i64 }, ptr %a788 %t792 = load { ptr, i64, i64 }, ptr %a770 store { ptr, i64, i64 } %t791, ptr %a794 store { ptr, i64, i64 } %t792, ptr %a795 call void @finch_str_concat(ptr %a793, ptr %a794, ptr %a795) %t796 = load { ptr, i64, i64 }, ptr %a793 store { ptr, i64, i64 } %t796, ptr %a798 store { ptr, i64, i64 } { ptr @.str.4941, i64 1, i64 0 }, ptr %a799 call void @finch_str_concat(ptr %a797, ptr %a798, ptr %a799) %t800 = load { ptr, i64, i64 }, ptr %a797 %t801 = call { ptr, i64, i64 } @finch.gen.op(ptr %t773, { ptr, i64, i64 } %t800) store { ptr, i64, i64 } %t801, ptr %a802 %t803 = load ptr, ptr %a1 %t804 = load { ptr, i64, i64 }, ptr %a802 store { ptr, i64, i64 } { ptr @.str.4942, i64 12, i64 0 }, ptr %a806 store { ptr, i64, i64 } %t804, ptr %a807 call void @finch_str_concat(ptr %a805, ptr %a806, ptr %a807) %t808 = load { ptr, i64, i64 }, ptr %a805 store { ptr, i64, i64 } %t808, ptr %a810 store { ptr, i64, i64 } { ptr @.str.4943, i64 3, i64 0 }, ptr %a811 call void @finch_str_concat(ptr %a809, ptr %a810, ptr %a811) %t812 = load { ptr, i64, i64 }, ptr %a809 %t813 = call { ptr, i64, i64 } @finch.gen.op(ptr %t803, { ptr, i64, i64 } %t812) %t814 = load ptr, ptr %a1 %t815 = icmp eq ptr %t814, null br i1 %t815, label %panic7493, label %ok7494 panic7493: call void @finch_panic(ptr @.str.4944, i64 4409, ptr @.str.4945) unreachable ok7494: %t816 = getelementptr inbounds %S.gen.Gen, ptr %t814, i32 0, i32 40 store { ptr, i64, i64 } %t813, ptr %t816 %t817 = load ptr, ptr %a1 %t818 = load { ptr, i64, i64 }, ptr %a770 %t819 = call { ptr, i64, i64 } @finch.gen.load(ptr %t817, { ptr, i64, i64 } { ptr @.str.4946, i64 17, i64 0 }, { ptr, i64, i64 } %t818) %t820 = load ptr, ptr %a1 %t821 = icmp eq ptr %t820, null br i1 %t821, label %panic7495, label %ok7496 panic7495: call void @finch_panic(ptr @.str.4947, i64 4410, ptr @.str.4948) unreachable ok7496: %t822 = getelementptr inbounds %S.gen.Gen, ptr %t820, i32 0, i32 41 store { ptr, i64, i64 } %t819, ptr %t822 %t823 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4949, i64 4, i64 0 }) %t824 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t823, 1 ret %S.gen.Val %t824 endif7492: %t825 = load ptr, ptr %a1 %t826 = load { ptr, i64, i64 }, ptr %a745 store { ptr, i64, i64 } { ptr @.str.4950, i64 31, i64 0 }, ptr %a828 store { ptr, i64, i64 } %t826, ptr %a829 call void @finch_str_concat(ptr %a827, ptr %a828, ptr %a829) %t830 = load { ptr, i64, i64 }, ptr %a827 store { ptr, i64, i64 } %t830, ptr %a832 store { ptr, i64, i64 } { ptr @.str.4951, i64 6, i64 0 }, ptr %a833 call void @finch_str_concat(ptr %a831, ptr %a832, ptr %a833) %t834 = load { ptr, i64, i64 }, ptr %a831 %t835 = load { ptr, i64, i64 }, ptr %a757 store { ptr, i64, i64 } %t834, ptr %a837 store { ptr, i64, i64 } %t835, ptr %a838 call void @finch_str_concat(ptr %a836, ptr %a837, ptr %a838) %t839 = load { ptr, i64, i64 }, ptr %a836 store { ptr, i64, i64 } %t839, ptr %a841 store { ptr, i64, i64 } { ptr @.str.4952, i64 1, i64 0 }, ptr %a842 call void @finch_str_concat(ptr %a840, ptr %a841, ptr %a842) %t843 = load { ptr, i64, i64 }, ptr %a840 %t844 = call { ptr, i64, i64 } @finch.gen.op(ptr %t825, { ptr, i64, i64 } %t843) store { ptr, i64, i64 } %t844, ptr %a845 %t846 = load ptr, ptr %a1 %t847 = load { ptr, i64, i64 }, ptr %a845 store { ptr, i64, i64 } { ptr @.str.4953, i64 12, i64 0 }, ptr %a849 store { ptr, i64, i64 } %t847, ptr %a850 call void @finch_str_concat(ptr %a848, ptr %a849, ptr %a850) %t851 = load { ptr, i64, i64 }, ptr %a848 store { ptr, i64, i64 } %t851, ptr %a853 store { ptr, i64, i64 } { ptr @.str.4954, i64 3, i64 0 }, ptr %a854 call void @finch_str_concat(ptr %a852, ptr %a853, ptr %a854) %t855 = load { ptr, i64, i64 }, ptr %a852 %t856 = call { ptr, i64, i64 } @finch.gen.op(ptr %t846, { ptr, i64, i64 } %t855) %t857 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t856, 0 %t858 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4955, i64 4, i64 0 }) %t859 = insertvalue %S.gen.Val %t857, %S.ast.Type %t858, 1 ret %S.gen.Val %t859 endif7483: %t860 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t860, ptr %a861 store { ptr, i64, i64 } { ptr @.str.4956, i64 11, i64 0 }, ptr %a862 %t863 = call i32 @finch_str_eq(ptr %a861, ptr %a862) %t864 = icmp ne i32 %t863, 0 br i1 %t864, label %then7497, label %endif7499 then7497: %t865 = load ptr, ptr %a1 %t866 = load %S.ast.Node, ptr %a2 %t867 = load { ptr, i64, i64 }, ptr %a8 call void @finch.gen.checkArgs(ptr %t865, %S.ast.Node %t866, i64 0, i64 1, { ptr, i64, i64 } %t867) %t868 = load ptr, ptr %a1 %t869 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t870 = load { ptr, i64, i64 }, ptr %t869 %t871 = extractvalue { ptr, i64, i64 } %t870, 1 %t872 = icmp uge i64 0, %t871 br i1 %t872, label %range7500, label %inrange7501 range7500: call void @finch_panic_index(ptr @.str.4957, i64 4418, i64 0, i64 %t871) unreachable inrange7501: %t873 = extractvalue { ptr, i64, i64 } %t870, 0 %t874 = getelementptr inbounds %S.ast.Node, ptr %t873, i64 0 %t875 = load %S.ast.Node, ptr %t874 %t876 = call %S.gen.Val @finch.gen.strArg(ptr %t868, %S.ast.Node %t875, { ptr, i64, i64 } { ptr @.str.4958, i64 13, i64 0 }) store %S.gen.Val %t876, ptr %a877 %t878 = load ptr, ptr %a1 %t879 = call { ptr, i64, i64 } @finch.gen.strOut(ptr %t878) store { ptr, i64, i64 } %t879, ptr %a880 %t881 = load ptr, ptr %a1 %t882 = load { ptr, i64, i64 }, ptr %a880 store { ptr, i64, i64 } { ptr @.str.4959, i64 30, i64 0 }, ptr %a884 store { ptr, i64, i64 } %t882, ptr %a885 call void @finch_str_concat(ptr %a883, ptr %a884, ptr %a885) %t886 = load { ptr, i64, i64 }, ptr %a883 store { ptr, i64, i64 } %t886, ptr %a888 store { ptr, i64, i64 } { ptr @.str.4960, i64 6, i64 0 }, ptr %a889 call void @finch_str_concat(ptr %a887, ptr %a888, ptr %a889) %t890 = load { ptr, i64, i64 }, ptr %a887 %t891 = load ptr, ptr %a1 %t892 = load %S.gen.Val, ptr %a877 %t893 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t891, %S.gen.Val %t892) store { ptr, i64, i64 } %t890, ptr %a895 store { ptr, i64, i64 } %t893, ptr %a896 call void @finch_str_concat(ptr %a894, ptr %a895, ptr %a896) %t897 = load { ptr, i64, i64 }, ptr %a894 store { ptr, i64, i64 } %t897, ptr %a899 store { ptr, i64, i64 } { ptr @.str.4961, i64 1, i64 0 }, ptr %a900 call void @finch_str_concat(ptr %a898, ptr %a899, ptr %a900) %t901 = load { ptr, i64, i64 }, ptr %a898 call void @finch.gen.emit(ptr %t881, { ptr, i64, i64 } %t901) %t902 = load ptr, ptr %a1 %t903 = icmp eq ptr %t902, null br i1 %t903, label %panic7502, label %ok7503 panic7502: call void @finch_panic(ptr @.str.4962, i64 4421, ptr @.str.4963) unreachable ok7503: %t904 = getelementptr inbounds %S.gen.Gen, ptr %t902, i32 0, i32 39 %t905 = load { ptr, i64, i64 }, ptr %t904 %t906 = load %S.ast.Node, ptr %a2 %t907 = call { ptr, i64, i64 } @finch.gen.nodeKey(%S.ast.Node %t906) store { ptr, i64, i64 } %t905, ptr %a908 store { ptr, i64, i64 } %t907, ptr %a909 %t910 = call i32 @finch_str_eq(ptr %a908, ptr %a909) %t911 = icmp ne i32 %t910, 0 br i1 %t911, label %then7504, label %endif7506 then7504: %t912 = load ptr, ptr %a1 %t913 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t912, { ptr, i64, i64 } { ptr @.str.4964, i64 17, i64 0 }) store { ptr, i64, i64 } %t913, ptr %a914 %t915 = load ptr, ptr %a1 %t916 = load { ptr, i64, i64 }, ptr %a914 call void @finch.gen.store(ptr %t915, { ptr, i64, i64 } { ptr @.str.4965, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.4966, i64 15, i64 0 }, { ptr, i64, i64 } %t916) %t917 = load ptr, ptr %a1 %t918 = load { ptr, i64, i64 }, ptr %a880 store { ptr, i64, i64 } { ptr @.str.4967, i64 36, i64 0 }, ptr %a920 store { ptr, i64, i64 } %t918, ptr %a921 call void @finch_str_concat(ptr %a919, ptr %a920, ptr %a921) %t922 = load { ptr, i64, i64 }, ptr %a919 store { ptr, i64, i64 } %t922, ptr %a924 store { ptr, i64, i64 } { ptr @.str.4968, i64 6, i64 0 }, ptr %a925 call void @finch_str_concat(ptr %a923, ptr %a924, ptr %a925) %t926 = load { ptr, i64, i64 }, ptr %a923 %t927 = load { ptr, i64, i64 }, ptr %a914 store { ptr, i64, i64 } %t926, ptr %a929 store { ptr, i64, i64 } %t927, ptr %a930 call void @finch_str_concat(ptr %a928, ptr %a929, ptr %a930) %t931 = load { ptr, i64, i64 }, ptr %a928 store { ptr, i64, i64 } %t931, ptr %a933 store { ptr, i64, i64 } { ptr @.str.4969, i64 1, i64 0 }, ptr %a934 call void @finch_str_concat(ptr %a932, ptr %a933, ptr %a934) %t935 = load { ptr, i64, i64 }, ptr %a932 %t936 = call { ptr, i64, i64 } @finch.gen.op(ptr %t917, { ptr, i64, i64 } %t935) store { ptr, i64, i64 } %t936, ptr %a937 %t938 = load ptr, ptr %a1 %t939 = load { ptr, i64, i64 }, ptr %a937 store { ptr, i64, i64 } { ptr @.str.4970, i64 12, i64 0 }, ptr %a941 store { ptr, i64, i64 } %t939, ptr %a942 call void @finch_str_concat(ptr %a940, ptr %a941, ptr %a942) %t943 = load { ptr, i64, i64 }, ptr %a940 store { ptr, i64, i64 } %t943, ptr %a945 store { ptr, i64, i64 } { ptr @.str.4971, i64 3, i64 0 }, ptr %a946 call void @finch_str_concat(ptr %a944, ptr %a945, ptr %a946) %t947 = load { ptr, i64, i64 }, ptr %a944 %t948 = call { ptr, i64, i64 } @finch.gen.op(ptr %t938, { ptr, i64, i64 } %t947) %t949 = load ptr, ptr %a1 %t950 = icmp eq ptr %t949, null br i1 %t950, label %panic7507, label %ok7508 panic7507: call void @finch_panic(ptr @.str.4972, i64 4425, ptr @.str.4973) unreachable ok7508: %t951 = getelementptr inbounds %S.gen.Gen, ptr %t949, i32 0, i32 40 store { ptr, i64, i64 } %t948, ptr %t951 %t952 = load ptr, ptr %a1 %t953 = load { ptr, i64, i64 }, ptr %a914 %t954 = call { ptr, i64, i64 } @finch.gen.load(ptr %t952, { ptr, i64, i64 } { ptr @.str.4974, i64 17, i64 0 }, { ptr, i64, i64 } %t953) %t955 = load ptr, ptr %a1 %t956 = icmp eq ptr %t955, null br i1 %t956, label %panic7509, label %ok7510 panic7509: call void @finch_panic(ptr @.str.4975, i64 4426, ptr @.str.4976) unreachable ok7510: %t957 = getelementptr inbounds %S.gen.Gen, ptr %t955, i32 0, i32 41 store { ptr, i64, i64 } %t954, ptr %t957 %t958 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4977, i64 4, i64 0 }) %t959 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t958, 1 ret %S.gen.Val %t959 endif7506: %t960 = load ptr, ptr %a1 %t961 = load { ptr, i64, i64 }, ptr %a880 store { ptr, i64, i64 } { ptr @.str.4978, i64 32, i64 0 }, ptr %a963 store { ptr, i64, i64 } %t961, ptr %a964 call void @finch_str_concat(ptr %a962, ptr %a963, ptr %a964) %t965 = load { ptr, i64, i64 }, ptr %a962 store { ptr, i64, i64 } %t965, ptr %a967 store { ptr, i64, i64 } { ptr @.str.4979, i64 1, i64 0 }, ptr %a968 call void @finch_str_concat(ptr %a966, ptr %a967, ptr %a968) %t969 = load { ptr, i64, i64 }, ptr %a966 %t970 = call { ptr, i64, i64 } @finch.gen.op(ptr %t960, { ptr, i64, i64 } %t969) store { ptr, i64, i64 } %t970, ptr %a971 %t972 = load ptr, ptr %a1 %t973 = load { ptr, i64, i64 }, ptr %a971 store { ptr, i64, i64 } { ptr @.str.4980, i64 12, i64 0 }, ptr %a975 store { ptr, i64, i64 } %t973, ptr %a976 call void @finch_str_concat(ptr %a974, ptr %a975, ptr %a976) %t977 = load { ptr, i64, i64 }, ptr %a974 store { ptr, i64, i64 } %t977, ptr %a979 store { ptr, i64, i64 } { ptr @.str.4981, i64 3, i64 0 }, ptr %a980 call void @finch_str_concat(ptr %a978, ptr %a979, ptr %a980) %t981 = load { ptr, i64, i64 }, ptr %a978 %t982 = call { ptr, i64, i64 } @finch.gen.op(ptr %t972, { ptr, i64, i64 } %t981) %t983 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t982, 0 %t984 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4982, i64 4, i64 0 }) %t985 = insertvalue %S.gen.Val %t983, %S.ast.Type %t984, 1 ret %S.gen.Val %t985 endif7499: %t986 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t986, ptr %a987 store { ptr, i64, i64 } { ptr @.str.4983, i64 5, i64 0 }, ptr %a988 %t989 = call i32 @finch_str_eq(ptr %a987, ptr %a988) %t990 = icmp ne i32 %t989, 0 br i1 %t990, label %then7511, label %endif7513 then7511: %t991 = load ptr, ptr %a1 %t992 = load %S.ast.Node, ptr %a2 %t993 = load { ptr, i64, i64 }, ptr %a8 call void @finch.gen.checkArgs(ptr %t991, %S.ast.Node %t992, i64 0, i64 1, { ptr, i64, i64 } %t993) %t994 = load ptr, ptr %a1 %t995 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t996 = load { ptr, i64, i64 }, ptr %t995 %t997 = extractvalue { ptr, i64, i64 } %t996, 1 %t998 = icmp uge i64 0, %t997 br i1 %t998, label %range7514, label %inrange7515 range7514: call void @finch_panic_index(ptr @.str.4984, i64 4434, i64 0, i64 %t997) unreachable inrange7515: %t999 = extractvalue { ptr, i64, i64 } %t996, 0 %t1000 = getelementptr inbounds %S.ast.Node, ptr %t999, i64 0 %t1001 = load %S.ast.Node, ptr %t1000 %t1002 = call %S.gen.Val @finch.gen.strArg(ptr %t994, %S.ast.Node %t1001, { ptr, i64, i64 } { ptr @.str.4985, i64 11, i64 0 }) store %S.gen.Val %t1002, ptr %a1003 %t1004 = load ptr, ptr %a1 %t1005 = call { ptr, i64, i64 } @finch.gen.strOut(ptr %t1004) store { ptr, i64, i64 } %t1005, ptr %a1006 %t1007 = load ptr, ptr %a1 %t1008 = load { ptr, i64, i64 }, ptr %a1006 store { ptr, i64, i64 } { ptr @.str.4986, i64 30, i64 0 }, ptr %a1010 store { ptr, i64, i64 } %t1008, ptr %a1011 call void @finch_str_concat(ptr %a1009, ptr %a1010, ptr %a1011) %t1012 = load { ptr, i64, i64 }, ptr %a1009 store { ptr, i64, i64 } %t1012, ptr %a1014 store { ptr, i64, i64 } { ptr @.str.4987, i64 6, i64 0 }, ptr %a1015 call void @finch_str_concat(ptr %a1013, ptr %a1014, ptr %a1015) %t1016 = load { ptr, i64, i64 }, ptr %a1013 %t1017 = load ptr, ptr %a1 %t1018 = load %S.gen.Val, ptr %a1003 %t1019 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t1017, %S.gen.Val %t1018) store { ptr, i64, i64 } %t1016, ptr %a1021 store { ptr, i64, i64 } %t1019, ptr %a1022 call void @finch_str_concat(ptr %a1020, ptr %a1021, ptr %a1022) %t1023 = load { ptr, i64, i64 }, ptr %a1020 store { ptr, i64, i64 } %t1023, ptr %a1025 store { ptr, i64, i64 } { ptr @.str.4988, i64 1, i64 0 }, ptr %a1026 call void @finch_str_concat(ptr %a1024, ptr %a1025, ptr %a1026) %t1027 = load { ptr, i64, i64 }, ptr %a1024 call void @finch.gen.emit(ptr %t1007, { ptr, i64, i64 } %t1027) %t1028 = load ptr, ptr %a1 %t1029 = load { ptr, i64, i64 }, ptr %a1006 store { ptr, i64, i64 } { ptr @.str.4989, i64 26, i64 0 }, ptr %a1031 store { ptr, i64, i64 } %t1029, ptr %a1032 call void @finch_str_concat(ptr %a1030, ptr %a1031, ptr %a1032) %t1033 = load { ptr, i64, i64 }, ptr %a1030 store { ptr, i64, i64 } %t1033, ptr %a1035 store { ptr, i64, i64 } { ptr @.str.4990, i64 1, i64 0 }, ptr %a1036 call void @finch_str_concat(ptr %a1034, ptr %a1035, ptr %a1036) %t1037 = load { ptr, i64, i64 }, ptr %a1034 %t1038 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1028, { ptr, i64, i64 } %t1037) %t1039 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t1038, 0 %t1040 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4991, i64 3, i64 0 }) %t1041 = insertvalue %S.gen.Val %t1039, %S.ast.Type %t1040, 1 ret %S.gen.Val %t1041 endif7513: %t1042 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t1042, ptr %a1043 store { ptr, i64, i64 } { ptr @.str.4992, i64 4, i64 0 }, ptr %a1044 %t1045 = call i32 @finch_str_eq(ptr %a1043, ptr %a1044) %t1046 = icmp ne i32 %t1045, 0 br i1 %t1046, label %then7516, label %endif7518 then7516: %t1047 = load ptr, ptr %a1 %t1048 = load %S.ast.Node, ptr %a2 %t1049 = load { ptr, i64, i64 }, ptr %a8 call void @finch.gen.checkArgs(ptr %t1047, %S.ast.Node %t1048, i64 0, i64 1, { ptr, i64, i64 } %t1049) %t1050 = load ptr, ptr %a1 %t1051 = load ptr, ptr %a1 %t1052 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t1053 = load { ptr, i64, i64 }, ptr %t1052 %t1054 = extractvalue { ptr, i64, i64 } %t1053, 1 %t1055 = icmp uge i64 0, %t1054 br i1 %t1055, label %range7519, label %inrange7520 range7519: call void @finch_panic_index(ptr @.str.4993, i64 4441, i64 0, i64 %t1054) unreachable inrange7520: %t1056 = extractvalue { ptr, i64, i64 } %t1053, 0 %t1057 = getelementptr inbounds %S.ast.Node, ptr %t1056, i64 0 %t1058 = load %S.ast.Node, ptr %t1057 %t1059 = call %S.gen.Val @finch.gen.expr(ptr %t1051, %S.ast.Node %t1058) %t1060 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4994, i64 3, i64 0 }) %t1061 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t1062 = load { ptr, i64, i64 }, ptr %t1061 %t1063 = extractvalue { ptr, i64, i64 } %t1062, 1 %t1064 = icmp uge i64 0, %t1063 br i1 %t1064, label %range7521, label %inrange7522 range7521: call void @finch_panic_index(ptr @.str.4995, i64 4441, i64 0, i64 %t1063) unreachable inrange7522: %t1065 = extractvalue { ptr, i64, i64 } %t1062, 0 %t1066 = getelementptr inbounds %S.ast.Node, ptr %t1065, i64 0 %t1067 = load %S.ast.Node, ptr %t1066 %t1068 = call %S.gen.Val @finch.gen.coerce(ptr %t1050, %S.gen.Val %t1059, %S.ast.Type %t1060, %S.ast.Node %t1067, { ptr, i64, i64 } { ptr @.str.4996, i64 13, i64 0 }) store %S.gen.Val %t1068, ptr %a1069 %t1070 = load ptr, ptr %a1 %t1071 = getelementptr inbounds %S.gen.Val, ptr %a1069, i32 0, i32 0 %t1072 = load { ptr, i64, i64 }, ptr %t1071 store { ptr, i64, i64 } { ptr @.str.4997, i64 10, i64 0 }, ptr %a1074 store { ptr, i64, i64 } %t1072, ptr %a1075 call void @finch_str_concat(ptr %a1073, ptr %a1074, ptr %a1075) %t1076 = load { ptr, i64, i64 }, ptr %a1073 store { ptr, i64, i64 } %t1076, ptr %a1078 store { ptr, i64, i64 } { ptr @.str.4998, i64 7, i64 0 }, ptr %a1079 call void @finch_str_concat(ptr %a1077, ptr %a1078, ptr %a1079) %t1080 = load { ptr, i64, i64 }, ptr %a1077 %t1081 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1070, { ptr, i64, i64 } %t1080) store { ptr, i64, i64 } %t1081, ptr %a1082 %t1083 = load ptr, ptr %a1 %t1084 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1083, { ptr, i64, i64 } { ptr @.str.4999, i64 26, i64 0 }) store { ptr, i64, i64 } %t1084, ptr %a1085 %t1086 = load ptr, ptr %a1 %t1087 = load { ptr, i64, i64 }, ptr %a1082 store { ptr, i64, i64 } { ptr @.str.5000, i64 20, i64 0 }, ptr %a1089 store { ptr, i64, i64 } %t1087, ptr %a1090 call void @finch_str_concat(ptr %a1088, ptr %a1089, ptr %a1090) %t1091 = load { ptr, i64, i64 }, ptr %a1088 store { ptr, i64, i64 } %t1091, ptr %a1093 store { ptr, i64, i64 } { ptr @.str.5001, i64 1, i64 0 }, ptr %a1094 call void @finch_str_concat(ptr %a1092, ptr %a1093, ptr %a1094) %t1095 = load { ptr, i64, i64 }, ptr %a1092 call void @finch.gen.emit(ptr %t1086, { ptr, i64, i64 } %t1095) %t1096 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5002, i64 4, i64 0 }) %t1097 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t1096, 1 ret %S.gen.Val %t1097 endif7518: %t1098 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t1098, ptr %a1099 store { ptr, i64, i64 } { ptr @.str.5003, i64 5, i64 0 }, ptr %a1100 %t1101 = call i32 @finch_str_eq(ptr %a1099, ptr %a1100) %t1102 = icmp ne i32 %t1101, 0 br i1 %t1102, label %then7523, label %endif7525 then7523: %t1103 = load ptr, ptr %a1 %t1104 = call %S.gen.Val @finch.gen.strConst(ptr %t1103, { ptr, i64, i64 } { ptr @.str.5004, i64 0, i64 0 }) store %S.gen.Val %t1104, ptr %a1105 %t1106 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t1107 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1106, i32 0, i32 1 %t1108 = load i64, ptr %t1107 %t1109 = icmp sgt i64 %t1108, 0 br i1 %t1109, label %then7526, label %endif7528 then7526: %t1110 = load ptr, ptr %a1 %t1111 = load %S.ast.Node, ptr %a2 %t1112 = load { ptr, i64, i64 }, ptr %a8 call void @finch.gen.checkArgs(ptr %t1110, %S.ast.Node %t1111, i64 0, i64 1, { ptr, i64, i64 } %t1112) %t1113 = load ptr, ptr %a1 %t1114 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t1115 = load { ptr, i64, i64 }, ptr %t1114 %t1116 = extractvalue { ptr, i64, i64 } %t1115, 1 %t1117 = icmp uge i64 0, %t1116 br i1 %t1117, label %range7529, label %inrange7530 range7529: call void @finch_panic_index(ptr @.str.5005, i64 4451, i64 0, i64 %t1116) unreachable inrange7530: %t1118 = extractvalue { ptr, i64, i64 } %t1115, 0 %t1119 = getelementptr inbounds %S.ast.Node, ptr %t1118, i64 0 %t1120 = load %S.ast.Node, ptr %t1119 %t1121 = call %S.gen.Val @finch.gen.strArg(ptr %t1113, %S.ast.Node %t1120, { ptr, i64, i64 } { ptr @.str.5006, i64 12, i64 0 }) store %S.gen.Val %t1121, ptr %a1105 br label %endif7528 endif7528: %t1122 = load ptr, ptr %a1 %t1123 = call { ptr, i64, i64 } @finch.gen.strOut(ptr %t1122) store { ptr, i64, i64 } %t1123, ptr %a1124 %t1125 = load ptr, ptr %a1 %t1126 = load { ptr, i64, i64 }, ptr %a1124 store { ptr, i64, i64 } { ptr @.str.5007, i64 27, i64 0 }, ptr %a1128 store { ptr, i64, i64 } %t1126, ptr %a1129 call void @finch_str_concat(ptr %a1127, ptr %a1128, ptr %a1129) %t1130 = load { ptr, i64, i64 }, ptr %a1127 store { ptr, i64, i64 } %t1130, ptr %a1132 store { ptr, i64, i64 } { ptr @.str.5008, i64 6, i64 0 }, ptr %a1133 call void @finch_str_concat(ptr %a1131, ptr %a1132, ptr %a1133) %t1134 = load { ptr, i64, i64 }, ptr %a1131 %t1135 = load ptr, ptr %a1 %t1136 = load %S.gen.Val, ptr %a1105 %t1137 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t1135, %S.gen.Val %t1136) store { ptr, i64, i64 } %t1134, ptr %a1139 store { ptr, i64, i64 } %t1137, ptr %a1140 call void @finch_str_concat(ptr %a1138, ptr %a1139, ptr %a1140) %t1141 = load { ptr, i64, i64 }, ptr %a1138 store { ptr, i64, i64 } %t1141, ptr %a1143 store { ptr, i64, i64 } { ptr @.str.5009, i64 1, i64 0 }, ptr %a1144 call void @finch_str_concat(ptr %a1142, ptr %a1143, ptr %a1144) %t1145 = load { ptr, i64, i64 }, ptr %a1142 call void @finch.gen.emit(ptr %t1125, { ptr, i64, i64 } %t1145) %t1146 = load ptr, ptr %a1 %t1147 = load { ptr, i64, i64 }, ptr %a1124 %t1148 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1146, { ptr, i64, i64 } { ptr @.str.5010, i64 17, i64 0 }, { ptr, i64, i64 } %t1147) %t1149 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t1148, 0 %t1150 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5011, i64 3, i64 0 }) %t1151 = insertvalue %S.gen.Val %t1149, %S.ast.Type %t1150, 1 %t1152 = insertvalue %S.gen.Val %t1151, i1 true, 2 ret %S.gen.Val %t1152 endif7525: %t1153 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t1153, ptr %a1154 store { ptr, i64, i64 } { ptr @.str.5012, i64 3, i64 0 }, ptr %a1155 %t1156 = call i32 @finch_str_eq(ptr %a1154, ptr %a1155) %t1157 = icmp ne i32 %t1156, 0 br i1 %t1157, label %then7531, label %endif7533 then7531: %t1158 = load ptr, ptr %a1 %t1159 = load %S.ast.Node, ptr %a2 %t1160 = load { ptr, i64, i64 }, ptr %a8 call void @finch.gen.checkArgs(ptr %t1158, %S.ast.Node %t1159, i64 0, i64 1, { ptr, i64, i64 } %t1160) %t1161 = load ptr, ptr %a1 %t1162 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t1163 = load { ptr, i64, i64 }, ptr %t1162 %t1164 = extractvalue { ptr, i64, i64 } %t1163, 1 %t1165 = icmp uge i64 0, %t1164 br i1 %t1165, label %range7534, label %inrange7535 range7534: call void @finch_panic_index(ptr @.str.5013, i64 4459, i64 0, i64 %t1164) unreachable inrange7535: %t1166 = extractvalue { ptr, i64, i64 } %t1163, 0 %t1167 = getelementptr inbounds %S.ast.Node, ptr %t1166, i64 0 %t1168 = load %S.ast.Node, ptr %t1167 %t1169 = call %S.gen.Val @finch.gen.expr(ptr %t1161, %S.ast.Node %t1168) store %S.gen.Val %t1169, ptr %a1170 %t1171 = load ptr, ptr %a1 %t1172 = load ptr, ptr %a1 %t1173 = getelementptr inbounds %S.gen.Val, ptr %a1170, i32 0, i32 1 %t1174 = load %S.ast.Type, ptr %t1173 %t1175 = call { ptr, i64, i64 } @finch.gen.sizeOf(ptr %t1172, %S.ast.Type %t1174) store { ptr, i64, i64 } { ptr @.str.5014, i64 26, i64 0 }, ptr %a1177 store { ptr, i64, i64 } %t1175, ptr %a1178 call void @finch_str_concat(ptr %a1176, ptr %a1177, ptr %a1178) %t1179 = load { ptr, i64, i64 }, ptr %a1176 store { ptr, i64, i64 } %t1179, ptr %a1181 store { ptr, i64, i64 } { ptr @.str.5015, i64 1, i64 0 }, ptr %a1182 call void @finch_str_concat(ptr %a1180, ptr %a1181, ptr %a1182) %t1183 = load { ptr, i64, i64 }, ptr %a1180 %t1184 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1171, { ptr, i64, i64 } %t1183) store { ptr, i64, i64 } %t1184, ptr %a1185 %t1186 = load ptr, ptr %a1 %t1187 = load ptr, ptr %a1 %t1188 = getelementptr inbounds %S.gen.Val, ptr %a1170, i32 0, i32 1 %t1189 = load %S.ast.Type, ptr %t1188 %t1190 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t1187, %S.ast.Type %t1189) %t1191 = load ptr, ptr %a1 %t1192 = load %S.gen.Val, ptr %a1170 %t1193 = call { ptr, i64, i64 } @finch.gen.own(ptr %t1191, %S.gen.Val %t1192) %t1194 = load { ptr, i64, i64 }, ptr %a1185 call void @finch.gen.store(ptr %t1186, { ptr, i64, i64 } %t1190, { ptr, i64, i64 } %t1193, { ptr, i64, i64 } %t1194) %t1195 = load { ptr, i64, i64 }, ptr %a1185 store { ptr, i64, i64 } %t1195, ptr %a1196 call void @finch_str_copy(ptr %a1197, ptr %a1196) %t1198 = load { ptr, i64, i64 }, ptr %a1197 %t1199 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t1198, 0 %t1200 = getelementptr inbounds %S.gen.Val, ptr %a1170, i32 0, i32 1 %t1201 = load %S.ast.Type, ptr %t1200 %t1202 = call %S.ast.Type @finch.ast.ptrTo(%S.ast.Type %t1201) %t1203 = insertvalue %S.gen.Val %t1199, %S.ast.Type %t1202, 1 ret %S.gen.Val %t1203 endif7533: %t1204 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t1204, ptr %a1205 store { ptr, i64, i64 } { ptr @.str.5016, i64 4, i64 0 }, ptr %a1206 %t1207 = call i32 @finch_str_eq(ptr %a1205, ptr %a1206) %t1208 = icmp ne i32 %t1207, 0 br i1 %t1208, label %then7536, label %endif7538 then7536: %t1209 = load ptr, ptr %a1 %t1210 = load %S.ast.Node, ptr %a2 %t1211 = load { ptr, i64, i64 }, ptr %a8 call void @finch.gen.checkArgs(ptr %t1209, %S.ast.Node %t1210, i64 0, i64 1, { ptr, i64, i64 } %t1211) %t1212 = load ptr, ptr %a1 %t1213 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t1214 = load { ptr, i64, i64 }, ptr %t1213 %t1215 = extractvalue { ptr, i64, i64 } %t1214, 1 %t1216 = icmp uge i64 0, %t1215 br i1 %t1216, label %range7539, label %inrange7540 range7539: call void @finch_panic_index(ptr @.str.5017, i64 4466, i64 0, i64 %t1215) unreachable inrange7540: %t1217 = extractvalue { ptr, i64, i64 } %t1214, 0 %t1218 = getelementptr inbounds %S.ast.Node, ptr %t1217, i64 0 %t1219 = load %S.ast.Node, ptr %t1218 %t1220 = call %S.gen.Val @finch.gen.expr(ptr %t1212, %S.ast.Node %t1219) store %S.gen.Val %t1220, ptr %a1221 %t1222 = getelementptr inbounds %S.gen.Val, ptr %a1221, i32 0, i32 1 %t1223 = getelementptr inbounds %S.ast.Type, ptr %t1222, i32 0, i32 0 %t1224 = load { ptr, i64, i64 }, ptr %t1223 store { ptr, i64, i64 } %t1224, ptr %a1225 store { ptr, i64, i64 } { ptr @.str.5018, i64 3, i64 0 }, ptr %a1226 %t1227 = call i32 @finch_str_eq(ptr %a1225, ptr %a1226) %t1228 = icmp eq i32 %t1227, 0 br i1 %t1228, label %then7541, label %endif7543 then7541: %t1229 = load ptr, ptr %a1 %t1230 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t1231 = load { ptr, i64, i64 }, ptr %t1230 %t1232 = extractvalue { ptr, i64, i64 } %t1231, 1 %t1233 = icmp uge i64 0, %t1232 br i1 %t1233, label %range7544, label %inrange7545 range7544: call void @finch_panic_index(ptr @.str.5019, i64 4468, i64 0, i64 %t1232) unreachable inrange7545: %t1234 = extractvalue { ptr, i64, i64 } %t1231, 0 %t1235 = getelementptr inbounds %S.ast.Node, ptr %t1234, i64 0 %t1236 = load %S.ast.Node, ptr %t1235 call void @finch.gen.fail(ptr %t1229, %S.ast.Node %t1236, { ptr, i64, i64 } { ptr @.str.5020, i64 119, i64 0 }) br label %endif7543 endif7543: %t1237 = load ptr, ptr %a1 %t1238 = getelementptr inbounds %S.gen.Val, ptr %a1221, i32 0, i32 0 %t1239 = load { ptr, i64, i64 }, ptr %t1238 store { ptr, i64, i64 } { ptr @.str.5021, i64 20, i64 0 }, ptr %a1241 store { ptr, i64, i64 } %t1239, ptr %a1242 call void @finch_str_concat(ptr %a1240, ptr %a1241, ptr %a1242) %t1243 = load { ptr, i64, i64 }, ptr %a1240 store { ptr, i64, i64 } %t1243, ptr %a1245 store { ptr, i64, i64 } { ptr @.str.5022, i64 1, i64 0 }, ptr %a1246 call void @finch_str_concat(ptr %a1244, ptr %a1245, ptr %a1246) %t1247 = load { ptr, i64, i64 }, ptr %a1244 call void @finch.gen.emit(ptr %t1237, { ptr, i64, i64 } %t1247) %t1248 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5023, i64 4, i64 0 }) %t1249 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t1248, 1 ret %S.gen.Val %t1249 endif7538: %t1250 = load ptr, ptr %a1 %t1251 = load ptr, ptr %a1 %t1252 = icmp eq ptr %t1251, null br i1 %t1252, label %panic7546, label %ok7547 panic7546: call void @finch_panic(ptr @.str.5024, i64 4473, ptr @.str.5025) unreachable ok7547: %t1253 = getelementptr inbounds %S.gen.Gen, ptr %t1251, i32 0, i32 13 %t1254 = load { ptr, i64, i64 }, ptr %t1253 %t1255 = load { ptr, i64, i64 }, ptr %a8 %t1256 = call i64 @finch.gen.findFn(ptr %t1250, { ptr, i64, i64 } %t1254, { ptr, i64, i64 } %t1255) store i64 %t1256, ptr %a1257 %t1258 = load i64, ptr %a1257 %t1259 = icmp sge i64 %t1258, 0 br i1 %t1259, label %then7548, label %endif7550 then7548: %t1260 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 5 %t1261 = getelementptr inbounds %S.ast.Type, ptr %t1260, i32 0, i32 1 %t1262 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1261, i32 0, i32 1 %t1263 = load i64, ptr %t1262 %t1264 = icmp sgt i64 %t1263, 0 br i1 %t1264, label %then7551, label %endif7553 then7551: %t1265 = load ptr, ptr %a1 %t1266 = load %S.ast.Node, ptr %a2 %t1267 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } { ptr @.str.5026, i64 1, i64 0 }, ptr %a1269 store { ptr, i64, i64 } %t1267, ptr %a1270 call void @finch_str_concat(ptr %a1268, ptr %a1269, ptr %a1270) %t1271 = load { ptr, i64, i64 }, ptr %a1268 store { ptr, i64, i64 } %t1271, ptr %a1273 store { ptr, i64, i64 } { ptr @.str.5027, i64 47, i64 0 }, ptr %a1274 call void @finch_str_concat(ptr %a1272, ptr %a1273, ptr %a1274) %t1275 = load { ptr, i64, i64 }, ptr %a1272 call void @finch.gen.fail(ptr %t1265, %S.ast.Node %t1266, { ptr, i64, i64 } %t1275) br label %endif7553 endif7553: %t1276 = load ptr, ptr %a1 %t1277 = load i64, ptr %a1257 %t1278 = load %S.ast.Node, ptr %a2 %t1279 = load { ptr, i64, i64 }, ptr %a8 %t1280 = call %S.gen.Val @finch.gen.callFn(ptr %t1276, i64 %t1277, %S.ast.Node %t1278, i64 0, { ptr, i64, i64 } %t1279, { ptr, i64, i64 } { ptr @.str.5028, i64 0, i64 0 }, { ptr, i64, i64 } { ptr @.str.5029, i64 0, i64 0 }) ret %S.gen.Val %t1280 endif7550: %t1281 = load ptr, ptr %a1 %t1282 = load ptr, ptr %a1 %t1283 = icmp eq ptr %t1282, null br i1 %t1283, label %panic7554, label %ok7555 panic7554: call void @finch_panic(ptr @.str.5030, i64 4480, ptr @.str.5031) unreachable ok7555: %t1284 = getelementptr inbounds %S.gen.Gen, ptr %t1282, i32 0, i32 13 %t1285 = load { ptr, i64, i64 }, ptr %t1284 %t1286 = load { ptr, i64, i64 }, ptr %a8 %t1287 = call i64 @finch.gen.findTemplate(ptr %t1281, { ptr, i64, i64 } %t1285, { ptr, i64, i64 } %t1286, { ptr, i64, i64 } { ptr @.str.5032, i64 0, i64 0 }, i1 false) store i64 %t1287, ptr %a1288 %t1289 = load i64, ptr %a1288 %t1290 = icmp sge i64 %t1289, 0 br i1 %t1290, label %then7556, label %endif7558 then7556: %t1291 = load ptr, ptr %a1 %t1292 = load %S.ast.Node, ptr %a2 %t1293 = load i64, ptr %a1288 %t1294 = load { ptr, i64, i64 }, ptr %a8 %t1295 = call %S.gen.Val @finch.gen.genericCall(ptr %t1291, %S.ast.Node %t1292, i64 %t1293, i64 0, { ptr, i64, i64 } %t1294) ret %S.gen.Val %t1295 endif7558: %t1296 = load ptr, ptr %a1 %t1297 = load ptr, ptr %a1 %t1298 = icmp eq ptr %t1297, null br i1 %t1298, label %panic7559, label %ok7560 panic7559: call void @finch_panic(ptr @.str.5033, i64 4484, ptr @.str.5034) unreachable ok7560: %t1299 = getelementptr inbounds %S.gen.Gen, ptr %t1297, i32 0, i32 13 %t1300 = load { ptr, i64, i64 }, ptr %t1299 %t1301 = load { ptr, i64, i64 }, ptr %a8 %t1302 = call i64 @finch.gen.findTemplate(ptr %t1296, { ptr, i64, i64 } %t1300, { ptr, i64, i64 } %t1301, { ptr, i64, i64 } { ptr @.str.5035, i64 0, i64 0 }, i1 true) %t1303 = icmp sge i64 %t1302, 0 br i1 %t1303, label %then7561, label %endif7563 then7561: %t1304 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 5 %t1305 = getelementptr inbounds %S.ast.Type, ptr %t1304, i32 0, i32 1 %t1306 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1305, i32 0, i32 1 %t1307 = load i64, ptr %t1306 %t1308 = icmp eq i64 %t1307, 0 br i1 %t1308, label %then7564, label %endif7566 then7564: %t1309 = load ptr, ptr %a1 %t1310 = load %S.ast.Node, ptr %a2 %t1311 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } { ptr @.str.5036, i64 1, i64 0 }, ptr %a1313 store { ptr, i64, i64 } %t1311, ptr %a1314 call void @finch_str_concat(ptr %a1312, ptr %a1313, ptr %a1314) %t1315 = load { ptr, i64, i64 }, ptr %a1312 store { ptr, i64, i64 } %t1315, ptr %a1317 store { ptr, i64, i64 } { ptr @.str.5037, i64 42, i64 0 }, ptr %a1318 call void @finch_str_concat(ptr %a1316, ptr %a1317, ptr %a1318) %t1319 = load { ptr, i64, i64 }, ptr %a1316 %t1320 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t1319, ptr %a1322 store { ptr, i64, i64 } %t1320, ptr %a1323 call void @finch_str_concat(ptr %a1321, ptr %a1322, ptr %a1323) %t1324 = load { ptr, i64, i64 }, ptr %a1321 store { ptr, i64, i64 } %t1324, ptr %a1326 store { ptr, i64, i64 } { ptr @.str.5038, i64 10, i64 0 }, ptr %a1327 call void @finch_str_concat(ptr %a1325, ptr %a1326, ptr %a1327) %t1328 = load { ptr, i64, i64 }, ptr %a1325 call void @finch.gen.fail(ptr %t1309, %S.ast.Node %t1310, { ptr, i64, i64 } %t1328) br label %endif7566 endif7566: store { ptr, i64, i64 } zeroinitializer, ptr %a1329 %t1330 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 5 %t1331 = getelementptr inbounds %S.ast.Type, ptr %t1330, i32 0, i32 1 store i64 0, ptr %a1332 br label %each.cond7567 each.cond7567: %t1333 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1331, i32 0, i32 1 %t1334 = load i64, ptr %t1333 %t1335 = load i64, ptr %a1332 %t1336 = icmp slt i64 %t1335, %t1334 br i1 %t1336, label %each.body7568, label %each.end7570 each.body7568: %t1337 = load ptr, ptr %t1331 %t1338 = getelementptr inbounds %S.ast.Type, ptr %t1337, i64 %t1335 %t1339 = load %S.ast.Type, ptr %t1338 store %S.ast.Type %t1339, ptr %a1340 %t1341 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1329, i32 0, i32 1 %t1342 = load ptr, ptr %a1 %t1343 = load %S.ast.Type, ptr %a1340 %t1344 = load %S.ast.Node, ptr %a2 %t1345 = call %S.ast.Type @finch.gen.resolve(ptr %t1342, %S.ast.Type %t1343, %S.ast.Node %t1344) %t1346 = load i64, ptr %t1341 %t1347 = add i64 %t1346, 1 call void @finch_arr_reserve(ptr %a1329, i64 %t1347, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) %t1348 = load ptr, ptr %a1329 %t1349 = getelementptr inbounds %S.ast.Type, ptr %t1348, i64 %t1346 store %S.ast.Type %t1345, ptr %t1349 store i64 %t1347, ptr %t1341 br label %each.step7569 each.step7569: %t1350 = load i64, ptr %a1332 %t1351 = add i64 %t1350, 1 store i64 %t1351, ptr %a1332 br label %each.cond7567 each.end7570: %t1352 = load ptr, ptr %a1 %t1353 = load ptr, ptr %a1 %t1354 = icmp eq ptr %t1353, null br i1 %t1354, label %panic7571, label %ok7572 panic7571: call void @finch_panic(ptr @.str.5039, i64 4493, ptr @.str.5040) unreachable ok7572: %t1355 = getelementptr inbounds %S.gen.Gen, ptr %t1353, i32 0, i32 13 %t1356 = load { ptr, i64, i64 }, ptr %t1355 %t1357 = load { ptr, i64, i64 }, ptr %a8 %t1358 = load { ptr, i64, i64 }, ptr %a1329 %t1359 = load %S.ast.Node, ptr %a2 %t1360 = call %S.ast.Type @finch.gen.instStruct(ptr %t1352, { ptr, i64, i64 } %t1356, { ptr, i64, i64 } %t1357, { ptr, i64, i64 } %t1358, %S.ast.Node %t1359) store %S.ast.Type %t1360, ptr %a1361 %t1362 = load ptr, ptr %a1 %t1363 = load ptr, ptr %a1 %t1364 = getelementptr inbounds %S.ast.Type, ptr %a1361, i32 0, i32 3 %t1365 = load { ptr, i64, i64 }, ptr %t1364 %t1366 = getelementptr inbounds %S.ast.Type, ptr %a1361, i32 0, i32 2 %t1367 = load { ptr, i64, i64 }, ptr %t1366 %t1368 = call i64 @finch.gen.findStruct(ptr %t1363, { ptr, i64, i64 } %t1365, { ptr, i64, i64 } %t1367) %t1369 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t1370 = load { ptr, i64, i64 }, ptr %t1369 %t1371 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 10 %t1372 = load { ptr, i64, i64 }, ptr %t1371 %t1373 = load %S.ast.Node, ptr %a2 %t1374 = call %S.gen.Val @finch.gen.construct(ptr %t1362, i64 %t1368, { ptr, i64, i64 } %t1370, { ptr, i64, i64 } %t1372, %S.ast.Node %t1373) ret %S.gen.Val %t1374 endif7563: %t1375 = load ptr, ptr %a1 %t1376 = load ptr, ptr %a1 %t1377 = icmp eq ptr %t1376, null br i1 %t1377, label %panic7573, label %ok7574 panic7573: call void @finch_panic(ptr @.str.5041, i64 4496, ptr @.str.5042) unreachable ok7574: %t1378 = getelementptr inbounds %S.gen.Gen, ptr %t1376, i32 0, i32 13 %t1379 = load { ptr, i64, i64 }, ptr %t1378 %t1380 = load { ptr, i64, i64 }, ptr %a8 %t1381 = call i64 @finch.gen.findStruct(ptr %t1375, { ptr, i64, i64 } %t1379, { ptr, i64, i64 } %t1380) store i64 %t1381, ptr %a1382 %t1383 = load i64, ptr %a1382 %t1384 = icmp sge i64 %t1383, 0 br i1 %t1384, label %then7575, label %endif7577 then7575: %t1385 = load ptr, ptr %a1 %t1386 = icmp eq ptr %t1385, null br i1 %t1386, label %panic7578, label %ok7579 panic7578: call void @finch_panic(ptr @.str.5043, i64 4498, ptr @.str.5044) unreachable ok7579: %t1387 = getelementptr inbounds %S.gen.Gen, ptr %t1385, i32 0, i32 15 %t1388 = load i64, ptr %a1382 %t1389 = load { ptr, i64, i64 }, ptr %t1387 %t1390 = extractvalue { ptr, i64, i64 } %t1389, 1 %t1391 = icmp uge i64 %t1388, %t1390 br i1 %t1391, label %range7580, label %inrange7581 range7580: call void @finch_panic_index(ptr @.str.5045, i64 4498, i64 %t1388, i64 %t1390) unreachable inrange7581: %t1392 = extractvalue { ptr, i64, i64 } %t1389, 0 %t1393 = getelementptr inbounds %S.gen.StructDef, ptr %t1392, i64 %t1388 %t1394 = load %S.gen.StructDef, ptr %t1393 store %S.gen.StructDef %t1394, ptr %a1395 call void @finch.copy.S_gen_StructDef(ptr %a1396, ptr %a1395) %t1397 = load %S.gen.StructDef, ptr %a1396 store %S.gen.StructDef %t1397, ptr %a1398 %t1399 = load ptr, ptr %a1 %t1400 = icmp eq ptr %t1399, null br i1 %t1400, label %panic7582, label %ok7583 panic7582: call void @finch_panic(ptr @.str.5046, i64 4499, ptr @.str.5047) unreachable ok7583: %t1401 = getelementptr inbounds %S.gen.Gen, ptr %t1399, i32 0, i32 26 %t1402 = load i1, ptr %t1401 br label %logic.from7584 logic.from7584: br i1 %t1402, label %logic.rhs7585, label %logic.end7586 logic.rhs7585: %t1403 = getelementptr inbounds %S.gen.StructDef, ptr %a1398, i32 0, i32 2 %t1404 = load i1, ptr %t1403 %t1405 = xor i1 %t1404, true br label %logic.rend7587 logic.rend7587: br label %logic.end7586 logic.end7586: %t1406 = phi i1 [ false, %logic.from7584 ], [ %t1405, %logic.rend7587 ] br i1 %t1406, label %then7588, label %endif7590 then7588: %t1407 = load ptr, ptr %a1 %t1408 = icmp eq ptr %t1407, null br i1 %t1408, label %panic7591, label %ok7592 panic7591: call void @finch_panic(ptr @.str.5048, i64 4500, ptr @.str.5049) unreachable ok7592: %t1409 = getelementptr inbounds %S.gen.Gen, ptr %t1407, i32 0, i32 0 %t1410 = getelementptr inbounds %S.gen.StructDef, ptr %a1398, i32 0, i32 13 %t1411 = load i64, ptr %t1410 %t1412 = load { ptr, i64, i64 }, ptr %t1409 %t1413 = extractvalue { ptr, i64, i64 } %t1412, 1 %t1414 = icmp uge i64 %t1411, %t1413 br i1 %t1414, label %range7593, label %inrange7594 range7593: call void @finch_panic_index(ptr @.str.5050, i64 4500, i64 %t1411, i64 %t1413) unreachable inrange7594: %t1415 = extractvalue { ptr, i64, i64 } %t1412, 0 %t1416 = getelementptr inbounds %S.ast.Program, ptr %t1415, i64 %t1411 %t1417 = getelementptr inbounds %S.ast.Program, ptr %t1416, i32 0, i32 6 %t1418 = getelementptr inbounds %S.gen.StructDef, ptr %a1398, i32 0, i32 14 %t1419 = load i64, ptr %t1418 %t1420 = load { ptr, i64, i64 }, ptr %t1417 %t1421 = extractvalue { ptr, i64, i64 } %t1420, 1 %t1422 = icmp uge i64 %t1419, %t1421 br i1 %t1422, label %range7595, label %inrange7596 range7595: call void @finch_panic_index(ptr @.str.5051, i64 4500, i64 %t1419, i64 %t1421) unreachable inrange7596: %t1423 = extractvalue { ptr, i64, i64 } %t1420, 0 %t1424 = getelementptr inbounds %S.ast.Node, ptr %t1423, i64 %t1419 %t1425 = load %S.ast.Node, ptr %t1424 store %S.ast.Node %t1425, ptr %a1426 call void @finch.copy.S_ast_Node(ptr %a1427, ptr %a1426) %t1428 = load %S.ast.Node, ptr %a1427 store %S.ast.Node %t1428, ptr %a1429 %t1430 = load ptr, ptr %a1 %t1431 = load %S.ast.Node, ptr %a2 %t1432 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 %t1433 = load i64, ptr %t1432 %t1434 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 %t1435 = load i64, ptr %t1434 %t1436 = getelementptr inbounds %S.gen.StructDef, ptr %a1398, i32 0, i32 1 %t1437 = load { ptr, i64, i64 }, ptr %t1436 store { ptr, i64, i64 } { ptr @.str.5052, i64 16, i64 0 }, ptr %a1439 store { ptr, i64, i64 } %t1437, ptr %a1440 call void @finch_str_concat(ptr %a1438, ptr %a1439, ptr %a1440) %t1441 = load { ptr, i64, i64 }, ptr %a1438 store { ptr, i64, i64 } %t1441, ptr %a1443 store { ptr, i64, i64 } { ptr @.str.5053, i64 3, i64 0 }, ptr %a1444 call void @finch_str_concat(ptr %a1442, ptr %a1443, ptr %a1444) %t1445 = load { ptr, i64, i64 }, ptr %a1442 %t1446 = getelementptr inbounds %S.gen.StructDef, ptr %a1398, i32 0, i32 11 %t1447 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1446, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.5054, i64 2, i64 0 }, ptr %a1448 call void @finch_str_join(ptr %a1449, ptr %t1446, ptr %a1448) %t1450 = load { ptr, i64, i64 }, ptr %a1449 store { ptr, i64, i64 } %t1445, ptr %a1452 store { ptr, i64, i64 } %t1450, ptr %a1453 call void @finch_str_concat(ptr %a1451, ptr %a1452, ptr %a1453) %t1454 = load { ptr, i64, i64 }, ptr %a1451 store { ptr, i64, i64 } %t1454, ptr %a1456 store { ptr, i64, i64 } { ptr @.str.5055, i64 6, i64 0 }, ptr %a1457 call void @finch_str_concat(ptr %a1455, ptr %a1456, ptr %a1457) %t1458 = load { ptr, i64, i64 }, ptr %a1455 %t1459 = load ptr, ptr %a1 %t1460 = icmp eq ptr %t1459, null br i1 %t1460, label %panic7597, label %ok7598 panic7597: call void @finch_panic(ptr @.str.5056, i64 4501, ptr @.str.5057) unreachable ok7598: %t1461 = getelementptr inbounds %S.gen.Gen, ptr %t1459, i32 0, i32 1 %t1462 = getelementptr inbounds %S.ast.Node, ptr %a1429, i32 0, i32 13 %t1463 = load i64, ptr %t1462 %t1464 = load { ptr, i64, i64 }, ptr %t1461 %t1465 = extractvalue { ptr, i64, i64 } %t1464, 1 %t1466 = icmp uge i64 %t1463, %t1465 br i1 %t1466, label %range7599, label %inrange7600 range7599: call void @finch_panic_index(ptr @.str.5058, i64 4501, i64 %t1463, i64 %t1465) unreachable inrange7600: %t1467 = extractvalue { ptr, i64, i64 } %t1464, 0 %t1468 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1467, i64 %t1463 %t1469 = load { ptr, i64, i64 }, ptr %t1468 %t1470 = getelementptr inbounds %S.ast.Node, ptr %a1429, i32 0, i32 11 %t1471 = load i64, ptr %t1470 %t1472 = getelementptr inbounds %S.ast.Node, ptr %a1429, i32 0, i32 12 %t1473 = load i64, ptr %t1472 call void @finch.gen.noteRef(ptr %t1430, %S.ast.Node %t1431, i64 %t1433, i64 %t1435, { ptr, i64, i64 } %t1458, { ptr, i64, i64 } %t1469, i64 %t1471, i64 %t1473) br label %endif7590 endif7590: %t1474 = load ptr, ptr %a1 %t1475 = load i64, ptr %a1382 %t1476 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t1477 = load { ptr, i64, i64 }, ptr %t1476 %t1478 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 10 %t1479 = load { ptr, i64, i64 }, ptr %t1478 %t1480 = load %S.ast.Node, ptr %a2 %t1481 = call %S.gen.Val @finch.gen.construct(ptr %t1474, i64 %t1475, { ptr, i64, i64 } %t1477, { ptr, i64, i64 } %t1479, %S.ast.Node %t1480) ret %S.gen.Val %t1481 endif7577: %t1482 = load ptr, ptr %a1 %t1483 = load ptr, ptr %a1 %t1484 = icmp eq ptr %t1483, null br i1 %t1484, label %panic7601, label %ok7602 panic7601: call void @finch_panic(ptr @.str.5059, i64 4505, ptr @.str.5060) unreachable ok7602: %t1485 = getelementptr inbounds %S.gen.Gen, ptr %t1483, i32 0, i32 13 %t1486 = load { ptr, i64, i64 }, ptr %t1485 %t1487 = load { ptr, i64, i64 }, ptr %a8 %t1488 = call i64 @finch.gen.findEnum(ptr %t1482, { ptr, i64, i64 } %t1486, { ptr, i64, i64 } %t1487) store i64 %t1488, ptr %a1489 %t1490 = load i64, ptr %a1489 %t1491 = icmp sge i64 %t1490, 0 br i1 %t1491, label %then7603, label %endif7605 then7603: %t1492 = load ptr, ptr %a1 %t1493 = load %S.ast.Node, ptr %a2 %t1494 = load i64, ptr %a1489 %t1495 = call %S.gen.Val @finch.gen.enumFrom(ptr %t1492, %S.ast.Node %t1493, i64 %t1494) ret %S.gen.Val %t1495 endif7605: %t1496 = load ptr, ptr %a1 %t1497 = icmp eq ptr %t1496, null br i1 %t1497, label %panic7606, label %ok7607 panic7606: call void @finch_panic(ptr @.str.5061, i64 4509, ptr @.str.5062) unreachable ok7607: %t1498 = getelementptr inbounds %S.gen.Gen, ptr %t1496, i32 0, i32 24 %t1499 = getelementptr inbounds %S.cimport.CImports, ptr %t1498, i32 0, i32 0 %t1500 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t1500, ptr %a1501 %t1502 = call i64 @finch_map_find(ptr %t1499, ptr %a1501, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t1503 = icmp sge i64 %t1502, 0 br i1 %t1503, label %then7608, label %endif7610 then7608: %t1504 = load ptr, ptr %a1 %t1505 = load %S.ast.Node, ptr %a2 %t1506 = load ptr, ptr %a1 %t1507 = icmp eq ptr %t1506, null br i1 %t1507, label %panic7611, label %ok7612 panic7611: call void @finch_panic(ptr @.str.5063, i64 4510, ptr @.str.5064) unreachable ok7612: %t1508 = getelementptr inbounds %S.gen.Gen, ptr %t1506, i32 0, i32 24 %t1509 = getelementptr inbounds %S.cimport.CImports, ptr %t1508, i32 0, i32 0 %t1510 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t1510, ptr %a1511 %t1512 = call i64 @finch_map_find(ptr %t1509, ptr %a1511, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t1513 = icmp slt i64 %t1512, 0 br i1 %t1513, label %map.missing7613, label %map.found7614 map.missing7613: store { ptr, i64, i64 } zeroinitializer, ptr %a1514 store { ptr, i64, i64 } %t1510, ptr %a1515 call void @finch_buf_str(ptr %a1514, ptr %a1515, i32 1) call void @finch_map_missing(ptr @.str.5065, i64 4510, ptr %a1514) unreachable map.found7614: %t1516 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t1509, i32 0, i32 0 %t1517 = load ptr, ptr %t1516 %t1518 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t1517, i64 %t1512 %t1519 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t1518, i32 0, i32 2 %t1520 = load %S.cimport.CFunc, ptr %t1519 %t1521 = call %S.gen.Val @finch.gen.callC(ptr %t1504, %S.ast.Node %t1505, %S.cimport.CFunc %t1520) ret %S.gen.Val %t1521 endif7610: %t1522 = load ptr, ptr %a1 %t1523 = load { ptr, i64, i64 }, ptr %a8 %t1524 = call i64 @finch.gen.findStruct(ptr %t1522, { ptr, i64, i64 } { ptr @.str.5066, i64 1, i64 0 }, { ptr, i64, i64 } %t1523) store i64 %t1524, ptr %a1382 %t1525 = load i64, ptr %a1382 %t1526 = icmp sge i64 %t1525, 0 br i1 %t1526, label %then7615, label %endif7617 then7615: %t1527 = load ptr, ptr %a1 %t1528 = load i64, ptr %a1382 %t1529 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t1530 = load { ptr, i64, i64 }, ptr %t1529 %t1531 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 10 %t1532 = load { ptr, i64, i64 }, ptr %t1531 %t1533 = load %S.ast.Node, ptr %a2 %t1534 = call %S.gen.Val @finch.gen.construct(ptr %t1527, i64 %t1528, { ptr, i64, i64 } %t1530, { ptr, i64, i64 } %t1532, %S.ast.Node %t1533) ret %S.gen.Val %t1534 endif7617: %t1535 = load ptr, ptr %a1 %t1536 = load { ptr, i64, i64 }, ptr %a8 %t1537 = call i64 @finch.gen.lookup(ptr %t1535, { ptr, i64, i64 } %t1536) %t1538 = icmp sge i64 %t1537, 0 br i1 %t1538, label %then7618, label %endif7620 then7618: %t1539 = load ptr, ptr %a1 %t1540 = load %S.ast.Node, ptr %a2 %t1541 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } { ptr @.str.5067, i64 1, i64 0 }, ptr %a1543 store { ptr, i64, i64 } %t1541, ptr %a1544 call void @finch_str_concat(ptr %a1542, ptr %a1543, ptr %a1544) %t1545 = load { ptr, i64, i64 }, ptr %a1542 store { ptr, i64, i64 } %t1545, ptr %a1547 store { ptr, i64, i64 } { ptr @.str.5068, i64 31, i64 0 }, ptr %a1548 call void @finch_str_concat(ptr %a1546, ptr %a1547, ptr %a1548) %t1549 = load { ptr, i64, i64 }, ptr %a1546 call void @finch.gen.fail(ptr %t1539, %S.ast.Node %t1540, { ptr, i64, i64 } %t1549) br label %endif7620 endif7620: %t1550 = load ptr, ptr %a1 %t1551 = load %S.ast.Node, ptr %a2 %t1552 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } { ptr @.str.5069, i64 28, i64 0 }, ptr %a1554 store { ptr, i64, i64 } %t1552, ptr %a1555 call void @finch_str_concat(ptr %a1553, ptr %a1554, ptr %a1555) %t1556 = load { ptr, i64, i64 }, ptr %a1553 store { ptr, i64, i64 } %t1556, ptr %a1558 store { ptr, i64, i64 } { ptr @.str.5070, i64 1, i64 0 }, ptr %a1559 call void @finch_str_concat(ptr %a1557, ptr %a1558, ptr %a1559) %t1560 = load { ptr, i64, i64 }, ptr %a1557 %t1561 = load { ptr, i64, i64 }, ptr %a8 %t1562 = call { ptr, i64, i64 } @finch.gen.headerHint({ ptr, i64, i64 } %t1561) store { ptr, i64, i64 } %t1560, ptr %a1564 store { ptr, i64, i64 } %t1562, ptr %a1565 call void @finch_str_concat(ptr %a1563, ptr %a1564, ptr %a1565) %t1566 = load { ptr, i64, i64 }, ptr %a1563 call void @finch.gen.fail(ptr %t1550, %S.ast.Node %t1551, { ptr, i64, i64 } %t1566) ret %S.gen.Val zeroinitializer } define internal %S.gen.Val @finch.gen.callFn(ptr %p0, i64 %p1, %S.ast.Node %p2, i64 %p3, { ptr, i64, i64 } %p4, { ptr, i64, i64 } %p5, { ptr, i64, i64 } %p6) { entry: %a1 = alloca ptr, align 16 %a2 = alloca i64, align 16 %a3 = alloca %S.ast.Node, align 16 %a4 = alloca i64, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca %S.gen.FnSig, align 16 %a19 = alloca %S.gen.FnSig, align 16 %a21 = alloca %S.gen.FnSig, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca i64, align 16 %a76 = alloca %S.ast.Node, align 16 %a77 = alloca %S.ast.Node, align 16 %a79 = alloca %S.ast.Node, align 16 %a109 = alloca { ptr, i64, i64 }, align 16 %a110 = alloca { ptr, i64, i64 }, align 16 %a111 = alloca { ptr, i64, i64 }, align 16 %a113 = alloca { ptr, i64, i64 }, align 16 %a114 = alloca { ptr, i64, i64 }, align 16 %a115 = alloca { ptr, i64, i64 }, align 16 %a118 = alloca %S.gen.Val, align 16 %a140 = alloca { ptr, i64, i64 }, align 16 %a141 = alloca { ptr, i64, i64 }, align 16 %a154 = alloca %S.ast.Type, align 16 %a155 = alloca %S.ast.Type, align 16 %a170 = alloca { ptr, i64, i64 }, align 16 %a171 = alloca { ptr, i64, i64 }, align 16 %a172 = alloca { ptr, i64, i64 }, align 16 %a176 = alloca { ptr, i64, i64 }, align 16 %a177 = alloca { ptr, i64, i64 }, align 16 %a178 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store i64 %p1, ptr %a2 store %S.ast.Node %p2, ptr %a3 store i64 %p3, ptr %a4 store { ptr, i64, i64 } %p4, ptr %a5 store { ptr, i64, i64 } %p5, ptr %a6 store { ptr, i64, i64 } %p6, ptr %a7 %t8 = load ptr, ptr %a1 %t9 = icmp eq ptr %t8, null br i1 %t9, label %panic7621, label %ok7622 panic7621: call void @finch_panic(ptr @.str.5071, i64 4524, ptr @.str.5072) unreachable ok7622: %t10 = getelementptr inbounds %S.gen.Gen, ptr %t8, i32 0, i32 14 %t11 = load i64, ptr %a2 %t12 = load { ptr, i64, i64 }, ptr %t10 %t13 = extractvalue { ptr, i64, i64 } %t12, 1 %t14 = icmp uge i64 %t11, %t13 br i1 %t14, label %range7623, label %inrange7624 range7623: call void @finch_panic_index(ptr @.str.5073, i64 4524, i64 %t11, i64 %t13) unreachable inrange7624: %t15 = extractvalue { ptr, i64, i64 } %t12, 0 %t16 = getelementptr inbounds %S.gen.FnSig, ptr %t15, i64 %t11 %t17 = load %S.gen.FnSig, ptr %t16 store %S.gen.FnSig %t17, ptr %a18 call void @finch.copy.S_gen_FnSig(ptr %a19, ptr %a18) %t20 = load %S.gen.FnSig, ptr %a19 store %S.gen.FnSig %t20, ptr %a21 %t22 = getelementptr inbounds %S.gen.FnSig, ptr %a21, i32 0, i32 0 %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t22, i32 0, i32 1 %t24 = load i64, ptr %t23 %t25 = icmp eq i64 %t24, 0 br label %logic.from7625 logic.from7625: br i1 %t25, label %logic.rhs7626, label %logic.end7627 logic.rhs7626: %t26 = getelementptr inbounds %S.gen.FnSig, ptr %a21, i32 0, i32 1 %t27 = load { ptr, i64, i64 }, ptr %t26 store { ptr, i64, i64 } %t27, ptr %a28 store { ptr, i64, i64 } { ptr @.str.5074, i64 4, i64 0 }, ptr %a29 %t30 = call i32 @finch_str_eq(ptr %a28, ptr %a29) %t31 = icmp ne i32 %t30, 0 br label %logic.rend7628 logic.rend7628: br label %logic.end7627 logic.end7627: %t32 = phi i1 [ false, %logic.from7625 ], [ %t31, %logic.rend7628 ] br i1 %t32, label %then7629, label %endif7631 then7629: %t33 = load ptr, ptr %a1 %t34 = load %S.ast.Node, ptr %a3 call void @finch.gen.fail(ptr %t33, %S.ast.Node %t34, { ptr, i64, i64 } { ptr @.str.5075, i64 52, i64 0 }) br label %endif7631 endif7631: %t35 = load ptr, ptr %a1 %t36 = load %S.ast.Node, ptr %a3 %t37 = load %S.gen.FnSig, ptr %a21 call void @finch.gen.noteCall(ptr %t35, %S.ast.Node %t36, %S.gen.FnSig %t37) %t38 = load ptr, ptr %a1 %t39 = load %S.ast.Node, ptr %a3 %t40 = load i64, ptr %a4 %t41 = getelementptr inbounds %S.gen.FnSig, ptr %a21, i32 0, i32 13 %t42 = getelementptr inbounds { ptr, i64, i64 }, ptr %t41, i32 0, i32 1 %t43 = load i64, ptr %t42 %t44 = load { ptr, i64, i64 }, ptr %a5 call void @finch.gen.checkArgs(ptr %t38, %S.ast.Node %t39, i64 %t40, i64 %t43, { ptr, i64, i64 } %t44) store { ptr, i64, i64 } zeroinitializer, ptr %a45 %t46 = getelementptr inbounds %S.gen.FnSig, ptr %a21, i32 0, i32 2 %t47 = getelementptr inbounds { ptr, i64, i64 }, ptr %t46, i32 0, i32 1 %t48 = load i64, ptr %t47 %t49 = icmp sgt i64 %t48, 0 br i1 %t49, label %then7632, label %endif7634 then7632: %t50 = getelementptr inbounds { ptr, i64, i64 }, ptr %a45, i32 0, i32 1 %t51 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } { ptr @.str.5076, i64 4, i64 0 }, ptr %a53 store { ptr, i64, i64 } %t51, ptr %a54 call void @finch_str_concat(ptr %a52, ptr %a53, ptr %a54) %t55 = load { ptr, i64, i64 }, ptr %a52 %t56 = load i64, ptr %t50 %t57 = add i64 %t56, 1 call void @finch_arr_reserve(ptr %a45, i64 %t57, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t58 = load ptr, ptr %a45 %t59 = getelementptr inbounds { ptr, i64, i64 }, ptr %t58, i64 %t56 store { ptr, i64, i64 } %t55, ptr %t59 store i64 %t57, ptr %t50 br label %endif7634 endif7634: %t60 = getelementptr inbounds %S.gen.FnSig, ptr %a21, i32 0, i32 13 %t61 = getelementptr inbounds { ptr, i64, i64 }, ptr %t60, i32 0, i32 1 %t62 = load i64, ptr %t61 store i64 0, ptr %a63 br label %for.cond7635 for.cond7635: %t64 = load i64, ptr %a63 %t65 = icmp slt i64 %t64, %t62 br i1 %t65, label %for.body7636, label %for.end7638 for.body7636: %t66 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 9 %t67 = load i64, ptr %a4 %t68 = load i64, ptr %a63 %t69 = add i64 %t67, %t68 %t70 = load { ptr, i64, i64 }, ptr %t66 %t71 = extractvalue { ptr, i64, i64 } %t70, 1 %t72 = icmp uge i64 %t69, %t71 br i1 %t72, label %range7639, label %inrange7640 range7639: call void @finch_panic_index(ptr @.str.5077, i64 4535, i64 %t69, i64 %t71) unreachable inrange7640: %t73 = extractvalue { ptr, i64, i64 } %t70, 0 %t74 = getelementptr inbounds %S.ast.Node, ptr %t73, i64 %t69 %t75 = load %S.ast.Node, ptr %t74 store %S.ast.Node %t75, ptr %a76 call void @finch.copy.S_ast_Node(ptr %a77, ptr %a76) %t78 = load %S.ast.Node, ptr %a77 store %S.ast.Node %t78, ptr %a79 %t80 = load ptr, ptr %a1 %t81 = load ptr, ptr %a1 %t82 = load %S.ast.Node, ptr %a79 %t83 = getelementptr inbounds %S.gen.FnSig, ptr %a21, i32 0, i32 13 %t84 = load i64, ptr %a63 %t85 = load { ptr, i64, i64 }, ptr %t83 %t86 = extractvalue { ptr, i64, i64 } %t85, 1 %t87 = icmp uge i64 %t84, %t86 br i1 %t87, label %range7641, label %inrange7642 range7641: call void @finch_panic_index(ptr @.str.5078, i64 4536, i64 %t84, i64 %t86) unreachable inrange7642: %t88 = extractvalue { ptr, i64, i64 } %t85, 0 %t89 = getelementptr inbounds %S.ast.Type, ptr %t88, i64 %t84 %t90 = load %S.ast.Type, ptr %t89 %t91 = call %S.gen.Val @finch.gen.exprWant(ptr %t81, %S.ast.Node %t82, %S.ast.Type %t90) %t92 = getelementptr inbounds %S.gen.FnSig, ptr %a21, i32 0, i32 13 %t93 = load i64, ptr %a63 %t94 = load { ptr, i64, i64 }, ptr %t92 %t95 = extractvalue { ptr, i64, i64 } %t94, 1 %t96 = icmp uge i64 %t93, %t95 br i1 %t96, label %range7643, label %inrange7644 range7643: call void @finch_panic_index(ptr @.str.5079, i64 4536, i64 %t93, i64 %t95) unreachable inrange7644: %t97 = extractvalue { ptr, i64, i64 } %t94, 0 %t98 = getelementptr inbounds %S.ast.Type, ptr %t97, i64 %t93 %t99 = load %S.ast.Type, ptr %t98 %t100 = load %S.ast.Node, ptr %a79 %t101 = getelementptr inbounds %S.gen.FnSig, ptr %a21, i32 0, i32 14 %t102 = load i64, ptr %a63 %t103 = load { ptr, i64, i64 }, ptr %t101 %t104 = extractvalue { ptr, i64, i64 } %t103, 1 %t105 = icmp uge i64 %t102, %t104 br i1 %t105, label %range7645, label %inrange7646 range7645: call void @finch_panic_index(ptr @.str.5081, i64 4536, i64 %t102, i64 %t104) unreachable inrange7646: %t106 = extractvalue { ptr, i64, i64 } %t103, 0 %t107 = getelementptr inbounds { ptr, i64, i64 }, ptr %t106, i64 %t102 %t108 = load { ptr, i64, i64 }, ptr %t107 store { ptr, i64, i64 } { ptr @.str.5080, i64 10, i64 0 }, ptr %a110 store { ptr, i64, i64 } %t108, ptr %a111 call void @finch_str_concat(ptr %a109, ptr %a110, ptr %a111) %t112 = load { ptr, i64, i64 }, ptr %a109 store { ptr, i64, i64 } %t112, ptr %a114 store { ptr, i64, i64 } { ptr @.str.5082, i64 1, i64 0 }, ptr %a115 call void @finch_str_concat(ptr %a113, ptr %a114, ptr %a115) %t116 = load { ptr, i64, i64 }, ptr %a113 %t117 = call %S.gen.Val @finch.gen.coerce(ptr %t80, %S.gen.Val %t91, %S.ast.Type %t99, %S.ast.Node %t100, { ptr, i64, i64 } %t116) store %S.gen.Val %t117, ptr %a118 %t119 = load ptr, ptr %a1 %t120 = getelementptr inbounds %S.gen.FnSig, ptr %a21, i32 0, i32 13 %t121 = load i64, ptr %a63 %t122 = load { ptr, i64, i64 }, ptr %t120 %t123 = extractvalue { ptr, i64, i64 } %t122, 1 %t124 = icmp uge i64 %t121, %t123 br i1 %t124, label %range7647, label %inrange7648 range7647: call void @finch_panic_index(ptr @.str.5083, i64 4538, i64 %t121, i64 %t123) unreachable inrange7648: %t125 = extractvalue { ptr, i64, i64 } %t122, 0 %t126 = getelementptr inbounds %S.ast.Type, ptr %t125, i64 %t121 %t127 = load %S.ast.Type, ptr %t126 %t128 = call i1 @finch.gen.owning(ptr %t119, %S.ast.Type %t127) br label %logic.from7649 logic.from7649: br i1 %t128, label %logic.rhs7650, label %logic.end7651 logic.rhs7650: %t129 = getelementptr inbounds %S.gen.Val, ptr %a118, i32 0, i32 2 %t130 = load i1, ptr %t129 %t131 = xor i1 %t130, true br label %logic.rend7652 logic.rend7652: br label %logic.end7651 logic.end7651: %t132 = phi i1 [ false, %logic.from7649 ], [ %t131, %logic.rend7652 ] br label %logic.from7653 logic.from7653: br i1 %t132, label %logic.rhs7654, label %logic.end7655 logic.rhs7654: %t133 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 %t134 = load i64, ptr %t133 %t135 = icmp sgt i64 %t134, 0 br label %logic.rend7656 logic.rend7656: br label %logic.end7655 logic.end7655: %t136 = phi i1 [ false, %logic.from7653 ], [ %t135, %logic.rend7656 ] br label %logic.from7657 logic.from7657: br i1 %t136, label %logic.rhs7658, label %logic.end7659 logic.rhs7658: %t137 = load %S.ast.Node, ptr %a79 %t138 = call { ptr, i64, i64 } @finch.gen.rootVar(%S.ast.Node %t137) %t139 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t138, ptr %a140 store { ptr, i64, i64 } %t139, ptr %a141 %t142 = call i32 @finch_str_eq(ptr %a140, ptr %a141) %t143 = icmp ne i32 %t142, 0 br label %logic.rend7660 logic.rend7660: br label %logic.end7659 logic.end7659: %t144 = phi i1 [ false, %logic.from7657 ], [ %t143, %logic.rend7660 ] br i1 %t144, label %then7661, label %endif7663 then7661: %t145 = load ptr, ptr %a1 %t146 = getelementptr inbounds %S.gen.Val, ptr %a118, i32 0, i32 0 %t147 = load { ptr, i64, i64 }, ptr %t146 %t148 = getelementptr inbounds %S.gen.Val, ptr %a118, i32 0, i32 1 %t149 = load %S.ast.Type, ptr %t148 %t150 = call { ptr, i64, i64 } @finch.gen.copyValue(ptr %t145, { ptr, i64, i64 } %t147, %S.ast.Type %t149) %t151 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t150, 0 %t152 = getelementptr inbounds %S.gen.Val, ptr %a118, i32 0, i32 1 %t153 = load %S.ast.Type, ptr %t152 store %S.ast.Type %t153, ptr %a154 call void @finch.copy.S_ast_Type(ptr %a155, ptr %a154) %t156 = load %S.ast.Type, ptr %a155 %t157 = insertvalue %S.gen.Val %t151, %S.ast.Type %t156, 1 %t158 = insertvalue %S.gen.Val %t157, i1 true, 2 store %S.gen.Val %t158, ptr %a118 br label %endif7663 endif7663: %t159 = getelementptr inbounds { ptr, i64, i64 }, ptr %a45, i32 0, i32 1 %t160 = load ptr, ptr %a1 %t161 = getelementptr inbounds %S.gen.FnSig, ptr %a21, i32 0, i32 13 %t162 = load i64, ptr %a63 %t163 = load { ptr, i64, i64 }, ptr %t161 %t164 = extractvalue { ptr, i64, i64 } %t163, 1 %t165 = icmp uge i64 %t162, %t164 br i1 %t165, label %range7664, label %inrange7665 range7664: call void @finch_panic_index(ptr @.str.5084, i64 4541, i64 %t162, i64 %t164) unreachable inrange7665: %t166 = extractvalue { ptr, i64, i64 } %t163, 0 %t167 = getelementptr inbounds %S.ast.Type, ptr %t166, i64 %t162 %t168 = load %S.ast.Type, ptr %t167 %t169 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t160, %S.ast.Type %t168) store { ptr, i64, i64 } %t169, ptr %a171 store { ptr, i64, i64 } { ptr @.str.5085, i64 1, i64 0 }, ptr %a172 call void @finch_str_concat(ptr %a170, ptr %a171, ptr %a172) %t173 = load { ptr, i64, i64 }, ptr %a170 %t174 = getelementptr inbounds %S.gen.Val, ptr %a118, i32 0, i32 0 %t175 = load { ptr, i64, i64 }, ptr %t174 store { ptr, i64, i64 } %t173, ptr %a177 store { ptr, i64, i64 } %t175, ptr %a178 call void @finch_str_concat(ptr %a176, ptr %a177, ptr %a178) %t179 = load { ptr, i64, i64 }, ptr %a176 %t180 = load i64, ptr %t159 %t181 = add i64 %t180, 1 call void @finch_arr_reserve(ptr %a45, i64 %t181, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t182 = load ptr, ptr %a45 %t183 = getelementptr inbounds { ptr, i64, i64 }, ptr %t182, i64 %t180 store { ptr, i64, i64 } %t179, ptr %t183 store i64 %t181, ptr %t159 br label %for.step7637 for.step7637: %t184 = load i64, ptr %a63 %t185 = add i64 %t184, 1 store i64 %t185, ptr %a63 br label %for.cond7635 for.end7638: %t186 = load ptr, ptr %a1 %t187 = load %S.gen.FnSig, ptr %a21 %t188 = load %S.ast.Node, ptr %a3 %t189 = load { ptr, i64, i64 }, ptr %a45 %t190 = load { ptr, i64, i64 }, ptr %a5 %t191 = call %S.gen.Val @finch.gen.emitCall(ptr %t186, %S.gen.FnSig %t187, %S.ast.Node %t188, { ptr, i64, i64 } %t189, { ptr, i64, i64 } %t190) ret %S.gen.Val %t191 } define internal %S.gen.Val @finch.gen.emitCall(ptr %p0, %S.gen.FnSig %p1, %S.ast.Node %p2, { ptr, i64, i64 } %p3, { ptr, i64, i64 } %p4) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.gen.FnSig, align 16 %a3 = alloca %S.ast.Node, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 %a106 = alloca { ptr, i64, i64 }, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a110 = alloca { ptr, i64, i64 }, align 16 %a111 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 %a114 = alloca { ptr, i64, i64 }, align 16 %a115 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca { ptr, i64, i64 }, align 16 %a119 = alloca { ptr, i64, i64 }, align 16 %a122 = alloca { ptr, i64, i64 }, align 16 %a123 = alloca { ptr, i64, i64 }, align 16 %a124 = alloca { ptr, i64, i64 }, align 16 %a126 = alloca { ptr, i64, i64 }, align 16 %a127 = alloca { ptr, i64, i64 }, align 16 %a128 = alloca { ptr, i64, i64 }, align 16 %a138 = alloca { ptr, i64, i64 }, align 16 %a139 = alloca { ptr, i64, i64 }, align 16 %a140 = alloca { ptr, i64, i64 }, align 16 %a142 = alloca { ptr, i64, i64 }, align 16 %a143 = alloca { ptr, i64, i64 }, align 16 %a144 = alloca { ptr, i64, i64 }, align 16 %a147 = alloca { ptr, i64, i64 }, align 16 %a148 = alloca { ptr, i64, i64 }, align 16 %a149 = alloca { ptr, i64, i64 }, align 16 %a151 = alloca { ptr, i64, i64 }, align 16 %a152 = alloca { ptr, i64, i64 }, align 16 %a153 = alloca { ptr, i64, i64 }, align 16 %a162 = alloca { ptr, i64, i64 }, align 16 %a163 = alloca { ptr, i64, i64 }, align 16 %a168 = alloca %S.ast.Type, align 16 %a169 = alloca %S.ast.Type, align 16 %a176 = alloca { ptr, i64, i64 }, align 16 %a177 = alloca { ptr, i64, i64 }, align 16 %a178 = alloca { ptr, i64, i64 }, align 16 %a180 = alloca { ptr, i64, i64 }, align 16 %a181 = alloca { ptr, i64, i64 }, align 16 %a182 = alloca { ptr, i64, i64 }, align 16 %a185 = alloca { ptr, i64, i64 }, align 16 %a186 = alloca { ptr, i64, i64 }, align 16 %a187 = alloca { ptr, i64, i64 }, align 16 %a189 = alloca { ptr, i64, i64 }, align 16 %a190 = alloca { ptr, i64, i64 }, align 16 %a191 = alloca { ptr, i64, i64 }, align 16 %a197 = alloca %S.ast.Type, align 16 %a198 = alloca %S.ast.Type, align 16 %a209 = alloca { ptr, i64, i64 }, align 16 %a210 = alloca { ptr, i64, i64 }, align 16 %a217 = alloca %S.ast.Type, align 16 %a218 = alloca %S.ast.Type, align 16 %a227 = alloca %S.ast.Type, align 16 %a228 = alloca %S.ast.Type, align 16 store ptr %p0, ptr %a1 store %S.gen.FnSig %p1, ptr %a2 store %S.ast.Node %p2, ptr %a3 store { ptr, i64, i64 } %p3, ptr %a4 store { ptr, i64, i64 } %p4, ptr %a5 %t6 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 9 %t7 = load i1, ptr %t6 br label %logic.from7666 logic.from7666: br i1 %t7, label %logic.rhs7667, label %logic.end7668 logic.rhs7667: %t8 = load ptr, ptr %a1 %t9 = icmp eq ptr %t8, null br i1 %t9, label %panic7669, label %ok7670 panic7669: call void @finch_panic(ptr @.str.5086, i64 4548, ptr @.str.5087) unreachable ok7670: %t10 = getelementptr inbounds %S.gen.Gen, ptr %t8, i32 0, i32 39 %t11 = load { ptr, i64, i64 }, ptr %t10 %t12 = load %S.ast.Node, ptr %a3 %t13 = call { ptr, i64, i64 } @finch.gen.nodeKey(%S.ast.Node %t12) store { ptr, i64, i64 } %t11, ptr %a14 store { ptr, i64, i64 } %t13, ptr %a15 %t16 = call i32 @finch_str_eq(ptr %a14, ptr %a15) %t17 = icmp eq i32 %t16, 0 br label %logic.rend7671 logic.rend7671: br label %logic.end7668 logic.end7668: %t18 = phi i1 [ false, %logic.from7666 ], [ %t17, %logic.rend7671 ] br i1 %t18, label %then7672, label %endif7674 then7672: %t19 = load ptr, ptr %a1 %t20 = load %S.ast.Node, ptr %a3 %t21 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } { ptr @.str.5088, i64 1, i64 0 }, ptr %a23 store { ptr, i64, i64 } %t21, ptr %a24 call void @finch_str_concat(ptr %a22, ptr %a23, ptr %a24) %t25 = load { ptr, i64, i64 }, ptr %a22 store { ptr, i64, i64 } %t25, ptr %a27 store { ptr, i64, i64 } { ptr @.str.5089, i64 39, i64 0 }, ptr %a28 call void @finch_str_concat(ptr %a26, ptr %a27, ptr %a28) %t29 = load { ptr, i64, i64 }, ptr %a26 %t30 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } %t29, ptr %a32 store { ptr, i64, i64 } %t30, ptr %a33 call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33) %t34 = load { ptr, i64, i64 }, ptr %a31 store { ptr, i64, i64 } %t34, ptr %a36 store { ptr, i64, i64 } { ptr @.str.5090, i64 19, i64 0 }, ptr %a37 call void @finch_str_concat(ptr %a35, ptr %a36, ptr %a37) %t38 = load { ptr, i64, i64 }, ptr %a35 %t39 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } %t38, ptr %a41 store { ptr, i64, i64 } %t39, ptr %a42 call void @finch_str_concat(ptr %a40, ptr %a41, ptr %a42) %t43 = load { ptr, i64, i64 }, ptr %a40 store { ptr, i64, i64 } %t43, ptr %a45 store { ptr, i64, i64 } { ptr @.str.5091, i64 27, i64 0 }, ptr %a46 call void @finch_str_concat(ptr %a44, ptr %a45, ptr %a46) %t47 = load { ptr, i64, i64 }, ptr %a44 %t48 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } %t47, ptr %a50 store { ptr, i64, i64 } %t48, ptr %a51 call void @finch_str_concat(ptr %a49, ptr %a50, ptr %a51) %t52 = load { ptr, i64, i64 }, ptr %a49 store { ptr, i64, i64 } %t52, ptr %a54 store { ptr, i64, i64 } { ptr @.str.5092, i64 5, i64 0 }, ptr %a55 call void @finch_str_concat(ptr %a53, ptr %a54, ptr %a55) %t56 = load { ptr, i64, i64 }, ptr %a53 call void @finch.gen.fail(ptr %t19, %S.ast.Node %t20, { ptr, i64, i64 } %t56) br label %endif7674 endif7674: %t57 = load ptr, ptr %a1 %t58 = load %S.gen.FnSig, ptr %a2 %t59 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t57, %S.gen.FnSig %t58) store { ptr, i64, i64 } { ptr @.str.5093, i64 5, i64 0 }, ptr %a61 store { ptr, i64, i64 } %t59, ptr %a62 call void @finch_str_concat(ptr %a60, ptr %a61, ptr %a62) %t63 = load { ptr, i64, i64 }, ptr %a60 store { ptr, i64, i64 } %t63, ptr %a65 store { ptr, i64, i64 } { ptr @.str.5094, i64 1, i64 0 }, ptr %a66 call void @finch_str_concat(ptr %a64, ptr %a65, ptr %a66) %t67 = load { ptr, i64, i64 }, ptr %a64 %t68 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 11 %t69 = load { ptr, i64, i64 }, ptr %t68 store { ptr, i64, i64 } %t67, ptr %a71 store { ptr, i64, i64 } %t69, ptr %a72 call void @finch_str_concat(ptr %a70, ptr %a71, ptr %a72) %t73 = load { ptr, i64, i64 }, ptr %a70 store { ptr, i64, i64 } %t73, ptr %a75 store { ptr, i64, i64 } { ptr @.str.5095, i64 1, i64 0 }, ptr %a76 call void @finch_str_concat(ptr %a74, ptr %a75, ptr %a76) %t77 = load { ptr, i64, i64 }, ptr %a74 %t78 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.5096, i64 2, i64 0 }, ptr %a79 call void @finch_str_join(ptr %a80, ptr %a4, ptr %a79) %t81 = load { ptr, i64, i64 }, ptr %a80 store { ptr, i64, i64 } %t77, ptr %a83 store { ptr, i64, i64 } %t81, ptr %a84 call void @finch_str_concat(ptr %a82, ptr %a83, ptr %a84) %t85 = load { ptr, i64, i64 }, ptr %a82 store { ptr, i64, i64 } %t85, ptr %a87 store { ptr, i64, i64 } { ptr @.str.5097, i64 1, i64 0 }, ptr %a88 call void @finch_str_concat(ptr %a86, ptr %a87, ptr %a88) %t89 = load { ptr, i64, i64 }, ptr %a86 store { ptr, i64, i64 } %t89, ptr %a90 %t91 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 9 %t92 = load i1, ptr %t91 br i1 %t92, label %then7675, label %endif7677 then7675: %t93 = load ptr, ptr %a1 %t94 = load { ptr, i64, i64 }, ptr %a90 %t95 = call { ptr, i64, i64 } @finch.gen.op(ptr %t93, { ptr, i64, i64 } %t94) store { ptr, i64, i64 } %t95, ptr %a96 %t97 = load ptr, ptr %a1 %t98 = load ptr, ptr %a1 %t99 = load %S.gen.FnSig, ptr %a2 %t100 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t98, %S.gen.FnSig %t99) store { ptr, i64, i64 } { ptr @.str.5098, i64 13, i64 0 }, ptr %a102 store { ptr, i64, i64 } %t100, ptr %a103 call void @finch_str_concat(ptr %a101, ptr %a102, ptr %a103) %t104 = load { ptr, i64, i64 }, ptr %a101 store { ptr, i64, i64 } %t104, ptr %a106 store { ptr, i64, i64 } { ptr @.str.5099, i64 1, i64 0 }, ptr %a107 call void @finch_str_concat(ptr %a105, ptr %a106, ptr %a107) %t108 = load { ptr, i64, i64 }, ptr %a105 %t109 = load { ptr, i64, i64 }, ptr %a96 store { ptr, i64, i64 } %t108, ptr %a111 store { ptr, i64, i64 } %t109, ptr %a112 call void @finch_str_concat(ptr %a110, ptr %a111, ptr %a112) %t113 = load { ptr, i64, i64 }, ptr %a110 store { ptr, i64, i64 } %t113, ptr %a115 store { ptr, i64, i64 } { ptr @.str.5100, i64 3, i64 0 }, ptr %a116 call void @finch_str_concat(ptr %a114, ptr %a115, ptr %a116) %t117 = load { ptr, i64, i64 }, ptr %a114 %t118 = call { ptr, i64, i64 } @finch.gen.op(ptr %t97, { ptr, i64, i64 } %t117) store { ptr, i64, i64 } %t118, ptr %a119 %t120 = load ptr, ptr %a1 %t121 = load { ptr, i64, i64 }, ptr %a119 store { ptr, i64, i64 } { ptr @.str.5101, i64 7, i64 0 }, ptr %a123 store { ptr, i64, i64 } %t121, ptr %a124 call void @finch_str_concat(ptr %a122, ptr %a123, ptr %a124) %t125 = load { ptr, i64, i64 }, ptr %a122 store { ptr, i64, i64 } %t125, ptr %a127 store { ptr, i64, i64 } { ptr @.str.5102, i64 6, i64 0 }, ptr %a128 call void @finch_str_concat(ptr %a126, ptr %a127, ptr %a128) %t129 = load { ptr, i64, i64 }, ptr %a126 %t130 = call { ptr, i64, i64 } @finch.gen.op(ptr %t120, { ptr, i64, i64 } %t129) %t131 = load ptr, ptr %a1 %t132 = icmp eq ptr %t131, null br i1 %t132, label %panic7678, label %ok7679 panic7678: call void @finch_panic(ptr @.str.5103, i64 4555, ptr @.str.5104) unreachable ok7679: %t133 = getelementptr inbounds %S.gen.Gen, ptr %t131, i32 0, i32 40 store { ptr, i64, i64 } %t130, ptr %t133 %t134 = load ptr, ptr %a1 %t135 = load ptr, ptr %a1 %t136 = load %S.gen.FnSig, ptr %a2 %t137 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t135, %S.gen.FnSig %t136) store { ptr, i64, i64 } { ptr @.str.5105, i64 13, i64 0 }, ptr %a139 store { ptr, i64, i64 } %t137, ptr %a140 call void @finch_str_concat(ptr %a138, ptr %a139, ptr %a140) %t141 = load { ptr, i64, i64 }, ptr %a138 store { ptr, i64, i64 } %t141, ptr %a143 store { ptr, i64, i64 } { ptr @.str.5106, i64 1, i64 0 }, ptr %a144 call void @finch_str_concat(ptr %a142, ptr %a143, ptr %a144) %t145 = load { ptr, i64, i64 }, ptr %a142 %t146 = load { ptr, i64, i64 }, ptr %a96 store { ptr, i64, i64 } %t145, ptr %a148 store { ptr, i64, i64 } %t146, ptr %a149 call void @finch_str_concat(ptr %a147, ptr %a148, ptr %a149) %t150 = load { ptr, i64, i64 }, ptr %a147 store { ptr, i64, i64 } %t150, ptr %a152 store { ptr, i64, i64 } { ptr @.str.5107, i64 3, i64 0 }, ptr %a153 call void @finch_str_concat(ptr %a151, ptr %a152, ptr %a153) %t154 = load { ptr, i64, i64 }, ptr %a151 %t155 = call { ptr, i64, i64 } @finch.gen.op(ptr %t134, { ptr, i64, i64 } %t154) %t156 = load ptr, ptr %a1 %t157 = icmp eq ptr %t156, null br i1 %t157, label %panic7680, label %ok7681 panic7680: call void @finch_panic(ptr @.str.5108, i64 4556, ptr @.str.5109) unreachable ok7681: %t158 = getelementptr inbounds %S.gen.Gen, ptr %t156, i32 0, i32 41 store { ptr, i64, i64 } %t155, ptr %t158 %t159 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 %t160 = getelementptr inbounds %S.ast.Type, ptr %t159, i32 0, i32 0 %t161 = load { ptr, i64, i64 }, ptr %t160 store { ptr, i64, i64 } %t161, ptr %a162 store { ptr, i64, i64 } { ptr @.str.5110, i64 4, i64 0 }, ptr %a163 %t164 = call i32 @finch_str_eq(ptr %a162, ptr %a163) %t165 = icmp ne i32 %t164, 0 br i1 %t165, label %then7682, label %endif7684 then7682: %t166 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 %t167 = load %S.ast.Type, ptr %t166 store %S.ast.Type %t167, ptr %a168 call void @finch.copy.S_ast_Type(ptr %a169, ptr %a168) %t170 = load %S.ast.Type, ptr %a169 %t171 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t170, 1 ret %S.gen.Val %t171 endif7684: %t172 = load ptr, ptr %a1 %t173 = load ptr, ptr %a1 %t174 = load %S.gen.FnSig, ptr %a2 %t175 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t173, %S.gen.FnSig %t174) store { ptr, i64, i64 } { ptr @.str.5111, i64 13, i64 0 }, ptr %a177 store { ptr, i64, i64 } %t175, ptr %a178 call void @finch_str_concat(ptr %a176, ptr %a177, ptr %a178) %t179 = load { ptr, i64, i64 }, ptr %a176 store { ptr, i64, i64 } %t179, ptr %a181 store { ptr, i64, i64 } { ptr @.str.5112, i64 1, i64 0 }, ptr %a182 call void @finch_str_concat(ptr %a180, ptr %a181, ptr %a182) %t183 = load { ptr, i64, i64 }, ptr %a180 %t184 = load { ptr, i64, i64 }, ptr %a96 store { ptr, i64, i64 } %t183, ptr %a186 store { ptr, i64, i64 } %t184, ptr %a187 call void @finch_str_concat(ptr %a185, ptr %a186, ptr %a187) %t188 = load { ptr, i64, i64 }, ptr %a185 store { ptr, i64, i64 } %t188, ptr %a190 store { ptr, i64, i64 } { ptr @.str.5113, i64 3, i64 0 }, ptr %a191 call void @finch_str_concat(ptr %a189, ptr %a190, ptr %a191) %t192 = load { ptr, i64, i64 }, ptr %a189 %t193 = call { ptr, i64, i64 } @finch.gen.op(ptr %t172, { ptr, i64, i64 } %t192) %t194 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t193, 0 %t195 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 %t196 = load %S.ast.Type, ptr %t195 store %S.ast.Type %t196, ptr %a197 call void @finch.copy.S_ast_Type(ptr %a198, ptr %a197) %t199 = load %S.ast.Type, ptr %a198 %t200 = insertvalue %S.gen.Val %t194, %S.ast.Type %t199, 1 %t201 = load ptr, ptr %a1 %t202 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 %t203 = load %S.ast.Type, ptr %t202 %t204 = call i1 @finch.gen.owning(ptr %t201, %S.ast.Type %t203) %t205 = insertvalue %S.gen.Val %t200, i1 %t204, 2 ret %S.gen.Val %t205 endif7677: %t206 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 %t207 = getelementptr inbounds %S.ast.Type, ptr %t206, i32 0, i32 0 %t208 = load { ptr, i64, i64 }, ptr %t207 store { ptr, i64, i64 } %t208, ptr %a209 store { ptr, i64, i64 } { ptr @.str.5114, i64 4, i64 0 }, ptr %a210 %t211 = call i32 @finch_str_eq(ptr %a209, ptr %a210) %t212 = icmp ne i32 %t211, 0 br i1 %t212, label %then7685, label %endif7687 then7685: %t213 = load ptr, ptr %a1 %t214 = load { ptr, i64, i64 }, ptr %a90 call void @finch.gen.emit(ptr %t213, { ptr, i64, i64 } %t214) %t215 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 %t216 = load %S.ast.Type, ptr %t215 store %S.ast.Type %t216, ptr %a217 call void @finch.copy.S_ast_Type(ptr %a218, ptr %a217) %t219 = load %S.ast.Type, ptr %a218 %t220 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t219, 1 ret %S.gen.Val %t220 endif7687: %t221 = load ptr, ptr %a1 %t222 = load { ptr, i64, i64 }, ptr %a90 %t223 = call { ptr, i64, i64 } @finch.gen.op(ptr %t221, { ptr, i64, i64 } %t222) %t224 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t223, 0 %t225 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 %t226 = load %S.ast.Type, ptr %t225 store %S.ast.Type %t226, ptr %a227 call void @finch.copy.S_ast_Type(ptr %a228, ptr %a227) %t229 = load %S.ast.Type, ptr %a228 %t230 = insertvalue %S.gen.Val %t224, %S.ast.Type %t229, 1 %t231 = load ptr, ptr %a1 %t232 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 %t233 = load %S.ast.Type, ptr %t232 %t234 = call i1 @finch.gen.owning(ptr %t231, %S.ast.Type %t233) %t235 = insertvalue %S.gen.Val %t230, i1 %t234, 2 ret %S.gen.Val %t235 } define internal %S.gen.Val @finch.gen.construct(ptr %p0, i64 %p1, { ptr, i64, i64 } %p2, { ptr, i64, i64 } %p3, %S.ast.Node %p4) { entry: %a1 = alloca ptr, align 16 %a2 = alloca i64, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca %S.ast.Node, align 16 %a16 = alloca %S.gen.StructDef, align 16 %a17 = alloca %S.gen.StructDef, align 16 %a19 = alloca %S.gen.StructDef, align 16 %a20 = alloca %S.ast.Node, align 16 %a43 = alloca %S.ast.Node, align 16 %a44 = alloca %S.ast.Node, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca %S.ast.Type, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca i1, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca i64, align 16 %a93 = alloca i64, align 16 %a127 = alloca { ptr, i64, i64 }, align 16 %a128 = alloca { ptr, i64, i64 }, align 16 %a129 = alloca { ptr, i64, i64 }, align 16 %a134 = alloca { ptr, i64, i64 }, align 16 %a136 = alloca { ptr, i64, i64 }, align 16 %a137 = alloca { ptr, i64, i64 }, align 16 %a138 = alloca { ptr, i64, i64 }, align 16 %a140 = alloca { ptr, i64, i64 }, align 16 %a141 = alloca { ptr, i64, i64 }, align 16 %a142 = alloca { ptr, i64, i64 }, align 16 %a146 = alloca { ptr, i64, i64 }, align 16 %a148 = alloca { ptr, i64, i64 }, align 16 %a149 = alloca { ptr, i64, i64 }, align 16 %a150 = alloca { ptr, i64, i64 }, align 16 %a152 = alloca { ptr, i64, i64 }, align 16 %a153 = alloca { ptr, i64, i64 }, align 16 %a154 = alloca { ptr, i64, i64 }, align 16 %a158 = alloca { ptr, i64, i64 }, align 16 %a159 = alloca { ptr, i64, i64 }, align 16 %a160 = alloca { ptr, i64, i64 }, align 16 %a162 = alloca { ptr, i64, i64 }, align 16 %a163 = alloca { ptr, i64, i64 }, align 16 %a164 = alloca { ptr, i64, i64 }, align 16 %a182 = alloca i64, align 16 %a185 = alloca i64, align 16 %a190 = alloca { ptr, i64, i64 }, align 16 %a191 = alloca { ptr, i64, i64 }, align 16 %a196 = alloca i64, align 16 %a209 = alloca { ptr, i64, i64 }, align 16 %a210 = alloca { ptr, i64, i64 }, align 16 %a211 = alloca { ptr, i64, i64 }, align 16 %a220 = alloca { ptr, i64, i64 }, align 16 %a221 = alloca { ptr, i64, i64 }, align 16 %a222 = alloca { ptr, i64, i64 }, align 16 %a224 = alloca { ptr, i64, i64 }, align 16 %a225 = alloca { ptr, i64, i64 }, align 16 %a226 = alloca { ptr, i64, i64 }, align 16 %a251 = alloca { ptr, i64, i64 }, align 16 %a252 = alloca { ptr, i64, i64 }, align 16 %a253 = alloca { ptr, i64, i64 }, align 16 %a255 = alloca { ptr, i64, i64 }, align 16 %a256 = alloca { ptr, i64, i64 }, align 16 %a257 = alloca { ptr, i64, i64 }, align 16 %a268 = alloca { ptr, i64, i64 }, align 16 %a272 = alloca i64, align 16 %a283 = alloca %S.ast.Type, align 16 %a284 = alloca %S.ast.Type, align 16 %a286 = alloca %S.ast.Type, align 16 %a287 = alloca %S.gen.Val, align 16 %a335 = alloca { ptr, i64, i64 }, align 16 %a336 = alloca { ptr, i64, i64 }, align 16 %a337 = alloca { ptr, i64, i64 }, align 16 %a339 = alloca { ptr, i64, i64 }, align 16 %a340 = alloca { ptr, i64, i64 }, align 16 %a341 = alloca { ptr, i64, i64 }, align 16 %a363 = alloca { ptr, i64, i64 }, align 16 %a364 = alloca { ptr, i64, i64 }, align 16 %a366 = alloca { ptr, i64, i64 }, align 16 %a371 = alloca { ptr, i64, i64 }, align 16 %a372 = alloca { ptr, i64, i64 }, align 16 %a374 = alloca { ptr, i64, i64 }, align 16 %a379 = alloca { ptr, i64, i64 }, align 16 %a380 = alloca { ptr, i64, i64 }, align 16 %a382 = alloca { ptr, i64, i64 }, align 16 %a387 = alloca { ptr, i64, i64 }, align 16 %a388 = alloca { ptr, i64, i64 }, align 16 %a390 = alloca { ptr, i64, i64 }, align 16 %a396 = alloca { ptr, i64, i64 }, align 16 %a397 = alloca { ptr, i64, i64 }, align 16 %a404 = alloca { ptr, i64, i64 }, align 16 %a405 = alloca { ptr, i64, i64 }, align 16 %a407 = alloca { ptr, i64, i64 }, align 16 %a412 = alloca { ptr, i64, i64 }, align 16 %a413 = alloca { ptr, i64, i64 }, align 16 %a421 = alloca { ptr, i64, i64 }, align 16 %a422 = alloca { ptr, i64, i64 }, align 16 %a465 = alloca { ptr, i64, i64 }, align 16 %a466 = alloca { ptr, i64, i64 }, align 16 %a467 = alloca { ptr, i64, i64 }, align 16 %a469 = alloca { ptr, i64, i64 }, align 16 %a470 = alloca { ptr, i64, i64 }, align 16 %a471 = alloca { ptr, i64, i64 }, align 16 %a478 = alloca { ptr, i64, i64 }, align 16 %a479 = alloca { ptr, i64, i64 }, align 16 %a485 = alloca { ptr, i64, i64 }, align 16 %a486 = alloca { ptr, i64, i64 }, align 16 %a492 = alloca { ptr, i64, i64 }, align 16 %a493 = alloca { ptr, i64, i64 }, align 16 %a499 = alloca { ptr, i64, i64 }, align 16 %a500 = alloca { ptr, i64, i64 }, align 16 %a504 = alloca { ptr, i64, i64 }, align 16 %a505 = alloca { ptr, i64, i64 }, align 16 %a506 = alloca { ptr, i64, i64 }, align 16 %a508 = alloca { ptr, i64, i64 }, align 16 %a509 = alloca { ptr, i64, i64 }, align 16 %a510 = alloca { ptr, i64, i64 }, align 16 %a513 = alloca { ptr, i64, i64 }, align 16 %a514 = alloca { ptr, i64, i64 }, align 16 %a515 = alloca { ptr, i64, i64 }, align 16 %a517 = alloca { ptr, i64, i64 }, align 16 %a518 = alloca { ptr, i64, i64 }, align 16 %a519 = alloca { ptr, i64, i64 }, align 16 %a524 = alloca { ptr, i64, i64 }, align 16 %a525 = alloca { ptr, i64, i64 }, align 16 %a526 = alloca { ptr, i64, i64 }, align 16 %a528 = alloca { ptr, i64, i64 }, align 16 %a529 = alloca { ptr, i64, i64 }, align 16 %a530 = alloca { ptr, i64, i64 }, align 16 %a535 = alloca { ptr, i64, i64 }, align 16 %a536 = alloca { ptr, i64, i64 }, align 16 %a537 = alloca { ptr, i64, i64 }, align 16 %a539 = alloca { ptr, i64, i64 }, align 16 %a540 = alloca { ptr, i64, i64 }, align 16 %a541 = alloca { ptr, i64, i64 }, align 16 %a551 = alloca { ptr, i64, i64 }, align 16 %a553 = alloca { ptr, i64, i64 }, align 16 %a554 = alloca { ptr, i64, i64 }, align 16 %a555 = alloca { ptr, i64, i64 }, align 16 %a561 = alloca { ptr, i64, i64 }, align 16 %a562 = alloca { ptr, i64, i64 }, align 16 %a566 = alloca %S.ast.Type, align 16 %a567 = alloca %S.ast.Type, align 16 store ptr %p0, ptr %a1 store i64 %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 store { ptr, i64, i64 } %p3, ptr %a4 store %S.ast.Node %p4, ptr %a5 %t6 = load ptr, ptr %a1 %t7 = icmp eq ptr %t6, null br i1 %t7, label %panic7688, label %ok7689 panic7688: call void @finch_panic(ptr @.str.5115, i64 4570, ptr @.str.5116) unreachable ok7689: %t8 = getelementptr inbounds %S.gen.Gen, ptr %t6, i32 0, i32 15 %t9 = load i64, ptr %a2 %t10 = load { ptr, i64, i64 }, ptr %t8 %t11 = extractvalue { ptr, i64, i64 } %t10, 1 %t12 = icmp uge i64 %t9, %t11 br i1 %t12, label %range7690, label %inrange7691 range7690: call void @finch_panic_index(ptr @.str.5117, i64 4570, i64 %t9, i64 %t11) unreachable inrange7691: %t13 = extractvalue { ptr, i64, i64 } %t10, 0 %t14 = getelementptr inbounds %S.gen.StructDef, ptr %t13, i64 %t9 %t15 = load %S.gen.StructDef, ptr %t14 store %S.gen.StructDef %t15, ptr %a16 call void @finch.copy.S_gen_StructDef(ptr %a17, ptr %a16) %t18 = load %S.gen.StructDef, ptr %a17 store %S.gen.StructDef %t18, ptr %a19 store %S.ast.Node zeroinitializer, ptr %a20 %t21 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 2 %t22 = load i1, ptr %t21 %t23 = xor i1 %t22, true br i1 %t23, label %then7692, label %endif7694 then7692: %t24 = load ptr, ptr %a1 %t25 = icmp eq ptr %t24, null br i1 %t25, label %panic7695, label %ok7696 panic7695: call void @finch_panic(ptr @.str.5118, i64 4573, ptr @.str.5119) unreachable ok7696: %t26 = getelementptr inbounds %S.gen.Gen, ptr %t24, i32 0, i32 0 %t27 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 13 %t28 = load i64, ptr %t27 %t29 = load { ptr, i64, i64 }, ptr %t26 %t30 = extractvalue { ptr, i64, i64 } %t29, 1 %t31 = icmp uge i64 %t28, %t30 br i1 %t31, label %range7697, label %inrange7698 range7697: call void @finch_panic_index(ptr @.str.5120, i64 4573, i64 %t28, i64 %t30) unreachable inrange7698: %t32 = extractvalue { ptr, i64, i64 } %t29, 0 %t33 = getelementptr inbounds %S.ast.Program, ptr %t32, i64 %t28 %t34 = getelementptr inbounds %S.ast.Program, ptr %t33, i32 0, i32 6 %t35 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 14 %t36 = load i64, ptr %t35 %t37 = load { ptr, i64, i64 }, ptr %t34 %t38 = extractvalue { ptr, i64, i64 } %t37, 1 %t39 = icmp uge i64 %t36, %t38 br i1 %t39, label %range7699, label %inrange7700 range7699: call void @finch_panic_index(ptr @.str.5121, i64 4573, i64 %t36, i64 %t38) unreachable inrange7700: %t40 = extractvalue { ptr, i64, i64 } %t37, 0 %t41 = getelementptr inbounds %S.ast.Node, ptr %t40, i64 %t36 %t42 = load %S.ast.Node, ptr %t41 store %S.ast.Node %t42, ptr %a43 call void @finch.copy.S_ast_Node(ptr %a44, ptr %a43) %t45 = load %S.ast.Node, ptr %a44 store %S.ast.Node %t45, ptr %a20 br label %endif7694 endif7694: %t46 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.5122, i64 6, i64 0 }, 0 %t47 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 1 %t48 = load { ptr, i64, i64 }, ptr %t47 store { ptr, i64, i64 } %t48, ptr %a49 call void @finch_str_copy(ptr %a50, ptr %a49) %t51 = load { ptr, i64, i64 }, ptr %a50 %t52 = insertvalue %S.ast.Type %t46, { ptr, i64, i64 } %t51, 2 %t53 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 0 %t54 = load { ptr, i64, i64 }, ptr %t53 store { ptr, i64, i64 } %t54, ptr %a55 call void @finch_str_copy(ptr %a56, ptr %a55) %t57 = load { ptr, i64, i64 }, ptr %a56 %t58 = insertvalue %S.ast.Type %t52, { ptr, i64, i64 } %t57, 3 store %S.ast.Type %t58, ptr %a59 %t60 = load ptr, ptr %a1 %t61 = load %S.ast.Type, ptr %a59 %t62 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t60, %S.ast.Type %t61) store { ptr, i64, i64 } %t62, ptr %a63 %t64 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 %t65 = load i64, ptr %t64 %t66 = icmp sgt i64 %t65, 0 br label %logic.from7701 logic.from7701: br i1 %t66, label %logic.rhs7702, label %logic.end7703 logic.rhs7702: %t67 = load { ptr, i64, i64 }, ptr %a4 %t68 = extractvalue { ptr, i64, i64 } %t67, 1 %t69 = icmp uge i64 0, %t68 br i1 %t69, label %range7704, label %inrange7705 range7704: call void @finch_panic_index(ptr @.str.5123, i64 4577, i64 0, i64 %t68) unreachable inrange7705: %t70 = extractvalue { ptr, i64, i64 } %t67, 0 %t71 = getelementptr inbounds { ptr, i64, i64 }, ptr %t70, i64 0 %t72 = getelementptr inbounds { ptr, i64, i64 }, ptr %t71, i32 0, i32 1 %t73 = load i64, ptr %t72 %t74 = icmp sgt i64 %t73, 0 br label %logic.rend7706 logic.rend7706: br label %logic.end7703 logic.end7703: %t75 = phi i1 [ false, %logic.from7701 ], [ %t74, %logic.rend7706 ] store i1 %t75, ptr %a76 store { ptr, i64, i64 } zeroinitializer, ptr %a77 %t78 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 11 %t79 = getelementptr inbounds { ptr, i64, i64 }, ptr %t78, i32 0, i32 1 %t80 = load i64, ptr %t79 store i64 0, ptr %a81 br label %for.cond7707 for.cond7707: %t82 = load i64, ptr %a81 %t83 = icmp slt i64 %t82, %t80 br i1 %t83, label %for.body7708, label %for.end7710 for.body7708: %t84 = getelementptr inbounds { ptr, i64, i64 }, ptr %a77, i32 0, i32 1 %t85 = load i64, ptr %t84 %t86 = add i64 %t85, 1 call void @finch_arr_reserve(ptr %a77, i64 %t86, i64 ptrtoint (ptr getelementptr (i64, ptr null, i32 1) to i64)) %t87 = load ptr, ptr %a77 %t88 = getelementptr inbounds i64, ptr %t87, i64 %t85 store i64 -1, ptr %t88 store i64 %t86, ptr %t84 br label %for.step7709 for.step7709: %t89 = load i64, ptr %a81 %t90 = add i64 %t89, 1 store i64 %t90, ptr %a81 br label %for.cond7707 for.end7710: %t91 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 %t92 = load i64, ptr %t91 store i64 0, ptr %a93 br label %for.cond7711 for.cond7711: %t94 = load i64, ptr %a93 %t95 = icmp slt i64 %t94, %t92 br i1 %t95, label %for.body7712, label %for.end7714 for.body7712: %t96 = load i64, ptr %a93 %t97 = load { ptr, i64, i64 }, ptr %a4 %t98 = extractvalue { ptr, i64, i64 } %t97, 1 %t99 = icmp uge i64 %t96, %t98 br i1 %t99, label %range7715, label %inrange7716 range7715: call void @finch_panic_index(ptr @.str.5124, i64 4583, i64 %t96, i64 %t98) unreachable inrange7716: %t100 = extractvalue { ptr, i64, i64 } %t97, 0 %t101 = getelementptr inbounds { ptr, i64, i64 }, ptr %t100, i64 %t96 %t102 = getelementptr inbounds { ptr, i64, i64 }, ptr %t101, i32 0, i32 1 %t103 = load i64, ptr %t102 %t104 = icmp sgt i64 %t103, 0 %t105 = load i1, ptr %a76 %t106 = icmp ne i1 %t104, %t105 br i1 %t106, label %then7717, label %endif7719 then7717: %t107 = load ptr, ptr %a1 %t108 = load i64, ptr %a93 %t109 = load { ptr, i64, i64 }, ptr %a3 %t110 = extractvalue { ptr, i64, i64 } %t109, 1 %t111 = icmp uge i64 %t108, %t110 br i1 %t111, label %range7720, label %inrange7721 range7720: call void @finch_panic_index(ptr @.str.5125, i64 4584, i64 %t108, i64 %t110) unreachable inrange7721: %t112 = extractvalue { ptr, i64, i64 } %t109, 0 %t113 = getelementptr inbounds %S.ast.Node, ptr %t112, i64 %t108 %t114 = load %S.ast.Node, ptr %t113 call void @finch.gen.fail(ptr %t107, %S.ast.Node %t114, { ptr, i64, i64 } { ptr @.str.5126, i64 69, i64 0 }) br label %endif7719 endif7719: %t115 = load i1, ptr %a76 %t116 = xor i1 %t115, true br i1 %t116, label %then7722, label %endif7724 then7722: %t117 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 %t118 = load i64, ptr %t117 %t119 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 11 %t120 = getelementptr inbounds { ptr, i64, i64 }, ptr %t119, i32 0, i32 1 %t121 = load i64, ptr %t120 %t122 = icmp ne i64 %t118, %t121 br i1 %t122, label %then7725, label %endif7727 then7725: %t123 = load ptr, ptr %a1 %t124 = load %S.ast.Node, ptr %a5 %t125 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 1 %t126 = load { ptr, i64, i64 }, ptr %t125 store { ptr, i64, i64 } %t126, ptr %a128 store { ptr, i64, i64 } { ptr @.str.5127, i64 5, i64 0 }, ptr %a129 call void @finch_str_concat(ptr %a127, ptr %a128, ptr %a129) %t130 = load { ptr, i64, i64 }, ptr %a127 %t131 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 11 %t132 = getelementptr inbounds { ptr, i64, i64 }, ptr %t131, i32 0, i32 1 %t133 = load i64, ptr %t132 call void @finch_str_from_int(ptr %a134, i64 %t133) %t135 = load { ptr, i64, i64 }, ptr %a134 store { ptr, i64, i64 } %t130, ptr %a137 store { ptr, i64, i64 } %t135, ptr %a138 call void @finch_str_concat(ptr %a136, ptr %a137, ptr %a138) %t139 = load { ptr, i64, i64 }, ptr %a136 store { ptr, i64, i64 } %t139, ptr %a141 store { ptr, i64, i64 } { ptr @.str.5128, i64 17, i64 0 }, ptr %a142 call void @finch_str_concat(ptr %a140, ptr %a141, ptr %a142) %t143 = load { ptr, i64, i64 }, ptr %a140 %t144 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 %t145 = load i64, ptr %t144 call void @finch_str_from_int(ptr %a146, i64 %t145) %t147 = load { ptr, i64, i64 }, ptr %a146 store { ptr, i64, i64 } %t143, ptr %a149 store { ptr, i64, i64 } %t147, ptr %a150 call void @finch_str_concat(ptr %a148, ptr %a149, ptr %a150) %t151 = load { ptr, i64, i64 }, ptr %a148 store { ptr, i64, i64 } %t151, ptr %a153 store { ptr, i64, i64 } { ptr @.str.5129, i64 23, i64 0 }, ptr %a154 call void @finch_str_concat(ptr %a152, ptr %a153, ptr %a154) %t155 = load { ptr, i64, i64 }, ptr %a152 %t156 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 1 %t157 = load { ptr, i64, i64 }, ptr %t156 store { ptr, i64, i64 } %t155, ptr %a159 store { ptr, i64, i64 } %t157, ptr %a160 call void @finch_str_concat(ptr %a158, ptr %a159, ptr %a160) %t161 = load { ptr, i64, i64 }, ptr %a158 store { ptr, i64, i64 } %t161, ptr %a163 store { ptr, i64, i64 } { ptr @.str.5130, i64 15, i64 0 }, ptr %a164 call void @finch_str_concat(ptr %a162, ptr %a163, ptr %a164) %t165 = load { ptr, i64, i64 }, ptr %a162 call void @finch.gen.fail(ptr %t123, %S.ast.Node %t124, { ptr, i64, i64 } %t165) br label %endif7727 endif7727: %t166 = load i64, ptr %a93 %t167 = load i64, ptr %a93 %t168 = load { ptr, i64, i64 }, ptr %a77 %t169 = extractvalue { ptr, i64, i64 } %t168, 1 %t170 = icmp uge i64 %t167, %t169 br i1 %t170, label %range7728, label %inrange7729 range7728: call void @finch_panic_index(ptr @.str.5131, i64 4590, i64 %t167, i64 %t169) unreachable inrange7729: %t171 = extractvalue { ptr, i64, i64 } %t168, 0 %t172 = getelementptr inbounds i64, ptr %t171, i64 %t167 store i64 %t166, ptr %t172 br label %for.step7713 endif7724: %t173 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 11 %t174 = getelementptr inbounds { ptr, i64, i64 }, ptr %t173, i32 0, i32 1 %t175 = load i64, ptr %a93 %t176 = load { ptr, i64, i64 }, ptr %a4 %t177 = extractvalue { ptr, i64, i64 } %t176, 1 %t178 = icmp uge i64 %t175, %t177 br i1 %t178, label %range7730, label %inrange7731 range7730: call void @finch_panic_index(ptr @.str.5132, i64 4593, i64 %t175, i64 %t177) unreachable inrange7731: %t179 = extractvalue { ptr, i64, i64 } %t176, 0 %t180 = getelementptr inbounds { ptr, i64, i64 }, ptr %t179, i64 %t175 %t181 = load { ptr, i64, i64 }, ptr %t180 store i64 -1, ptr %a182 %t183 = load i64, ptr %t174 %t184 = load ptr, ptr %t173 store i64 0, ptr %a185 br label %find.cond7732 find.cond7732: %t186 = load i64, ptr %a185 %t187 = icmp slt i64 %t186, %t183 br i1 %t187, label %find.body7733, label %find.end7736 find.body7733: %t188 = getelementptr inbounds { ptr, i64, i64 }, ptr %t184, i64 %t186 %t189 = load { ptr, i64, i64 }, ptr %t188 store { ptr, i64, i64 } %t189, ptr %a190 store { ptr, i64, i64 } %t181, ptr %a191 %t192 = call i32 @finch_str_eq(ptr %a190, ptr %a191) %t193 = icmp ne i32 %t192, 0 br i1 %t193, label %find.hit7734, label %find.next7735 find.hit7734: store i64 %t186, ptr %a182 br label %find.end7736 find.next7735: %t194 = add i64 %t186, 1 store i64 %t194, ptr %a185 br label %find.cond7732 find.end7736: %t195 = load i64, ptr %a182 store i64 %t195, ptr %a196 %t197 = load i64, ptr %a196 %t198 = icmp slt i64 %t197, 0 br i1 %t198, label %then7737, label %endif7739 then7737: %t199 = load ptr, ptr %a1 %t200 = load i64, ptr %a93 %t201 = load { ptr, i64, i64 }, ptr %a3 %t202 = extractvalue { ptr, i64, i64 } %t201, 1 %t203 = icmp uge i64 %t200, %t202 br i1 %t203, label %range7740, label %inrange7741 range7740: call void @finch_panic_index(ptr @.str.5133, i64 4595, i64 %t200, i64 %t202) unreachable inrange7741: %t204 = extractvalue { ptr, i64, i64 } %t201, 0 %t205 = getelementptr inbounds %S.ast.Node, ptr %t204, i64 %t200 %t206 = load %S.ast.Node, ptr %t205 %t207 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 1 %t208 = load { ptr, i64, i64 }, ptr %t207 store { ptr, i64, i64 } %t208, ptr %a210 store { ptr, i64, i64 } { ptr @.str.5134, i64 15, i64 0 }, ptr %a211 call void @finch_str_concat(ptr %a209, ptr %a210, ptr %a211) %t212 = load { ptr, i64, i64 }, ptr %a209 %t213 = load i64, ptr %a93 %t214 = load { ptr, i64, i64 }, ptr %a4 %t215 = extractvalue { ptr, i64, i64 } %t214, 1 %t216 = icmp uge i64 %t213, %t215 br i1 %t216, label %range7742, label %inrange7743 range7742: call void @finch_panic_index(ptr @.str.5135, i64 4595, i64 %t213, i64 %t215) unreachable inrange7743: %t217 = extractvalue { ptr, i64, i64 } %t214, 0 %t218 = getelementptr inbounds { ptr, i64, i64 }, ptr %t217, i64 %t213 %t219 = load { ptr, i64, i64 }, ptr %t218 store { ptr, i64, i64 } %t212, ptr %a221 store { ptr, i64, i64 } %t219, ptr %a222 call void @finch_str_concat(ptr %a220, ptr %a221, ptr %a222) %t223 = load { ptr, i64, i64 }, ptr %a220 store { ptr, i64, i64 } %t223, ptr %a225 store { ptr, i64, i64 } { ptr @.str.5136, i64 1, i64 0 }, ptr %a226 call void @finch_str_concat(ptr %a224, ptr %a225, ptr %a226) %t227 = load { ptr, i64, i64 }, ptr %a224 call void @finch.gen.fail(ptr %t199, %S.ast.Node %t206, { ptr, i64, i64 } %t227) br label %endif7739 endif7739: %t228 = load i64, ptr %a196 %t229 = load { ptr, i64, i64 }, ptr %a77 %t230 = extractvalue { ptr, i64, i64 } %t229, 1 %t231 = icmp uge i64 %t228, %t230 br i1 %t231, label %range7744, label %inrange7745 range7744: call void @finch_panic_index(ptr @.str.5137, i64 4597, i64 %t228, i64 %t230) unreachable inrange7745: %t232 = extractvalue { ptr, i64, i64 } %t229, 0 %t233 = getelementptr inbounds i64, ptr %t232, i64 %t228 %t234 = load i64, ptr %t233 %t235 = icmp sge i64 %t234, 0 br i1 %t235, label %then7746, label %endif7748 then7746: %t236 = load ptr, ptr %a1 %t237 = load i64, ptr %a93 %t238 = load { ptr, i64, i64 }, ptr %a3 %t239 = extractvalue { ptr, i64, i64 } %t238, 1 %t240 = icmp uge i64 %t237, %t239 br i1 %t240, label %range7749, label %inrange7750 range7749: call void @finch_panic_index(ptr @.str.5138, i64 4598, i64 %t237, i64 %t239) unreachable inrange7750: %t241 = extractvalue { ptr, i64, i64 } %t238, 0 %t242 = getelementptr inbounds %S.ast.Node, ptr %t241, i64 %t237 %t243 = load %S.ast.Node, ptr %t242 %t244 = load i64, ptr %a93 %t245 = load { ptr, i64, i64 }, ptr %a4 %t246 = extractvalue { ptr, i64, i64 } %t245, 1 %t247 = icmp uge i64 %t244, %t246 br i1 %t247, label %range7751, label %inrange7752 range7751: call void @finch_panic_index(ptr @.str.5140, i64 4598, i64 %t244, i64 %t246) unreachable inrange7752: %t248 = extractvalue { ptr, i64, i64 } %t245, 0 %t249 = getelementptr inbounds { ptr, i64, i64 }, ptr %t248, i64 %t244 %t250 = load { ptr, i64, i64 }, ptr %t249 store { ptr, i64, i64 } { ptr @.str.5139, i64 11, i64 0 }, ptr %a252 store { ptr, i64, i64 } %t250, ptr %a253 call void @finch_str_concat(ptr %a251, ptr %a252, ptr %a253) %t254 = load { ptr, i64, i64 }, ptr %a251 store { ptr, i64, i64 } %t254, ptr %a256 store { ptr, i64, i64 } { ptr @.str.5141, i64 16, i64 0 }, ptr %a257 call void @finch_str_concat(ptr %a255, ptr %a256, ptr %a257) %t258 = load { ptr, i64, i64 }, ptr %a255 call void @finch.gen.fail(ptr %t236, %S.ast.Node %t243, { ptr, i64, i64 } %t258) br label %endif7748 endif7748: %t259 = load i64, ptr %a93 %t260 = load i64, ptr %a196 %t261 = load { ptr, i64, i64 }, ptr %a77 %t262 = extractvalue { ptr, i64, i64 } %t261, 1 %t263 = icmp uge i64 %t260, %t262 br i1 %t263, label %range7753, label %inrange7754 range7753: call void @finch_panic_index(ptr @.str.5142, i64 4600, i64 %t260, i64 %t262) unreachable inrange7754: %t264 = extractvalue { ptr, i64, i64 } %t261, 0 %t265 = getelementptr inbounds i64, ptr %t264, i64 %t260 store i64 %t259, ptr %t265 br label %for.step7713 for.step7713: %t266 = load i64, ptr %a93 %t267 = add i64 %t266, 1 store i64 %t267, ptr %a93 br label %for.cond7711 for.end7714: store { ptr, i64, i64 } { ptr @.str.5143, i64 15, i64 0 }, ptr %a268 %t269 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 11 %t270 = getelementptr inbounds { ptr, i64, i64 }, ptr %t269, i32 0, i32 1 %t271 = load i64, ptr %t270 store i64 0, ptr %a272 br label %for.cond7755 for.cond7755: %t273 = load i64, ptr %a272 %t274 = icmp slt i64 %t273, %t271 br i1 %t274, label %for.body7756, label %for.end7758 for.body7756: %t275 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 12 %t276 = load i64, ptr %a272 %t277 = load { ptr, i64, i64 }, ptr %t275 %t278 = extractvalue { ptr, i64, i64 } %t277, 1 %t279 = icmp uge i64 %t276, %t278 br i1 %t279, label %range7759, label %inrange7760 range7759: call void @finch_panic_index(ptr @.str.5144, i64 4604, i64 %t276, i64 %t278) unreachable inrange7760: %t280 = extractvalue { ptr, i64, i64 } %t277, 0 %t281 = getelementptr inbounds %S.ast.Type, ptr %t280, i64 %t276 %t282 = load %S.ast.Type, ptr %t281 store %S.ast.Type %t282, ptr %a283 call void @finch.copy.S_ast_Type(ptr %a284, ptr %a283) %t285 = load %S.ast.Type, ptr %a284 store %S.ast.Type %t285, ptr %a286 store %S.gen.Val zeroinitializer, ptr %a287 %t288 = load i64, ptr %a272 %t289 = load { ptr, i64, i64 }, ptr %a77 %t290 = extractvalue { ptr, i64, i64 } %t289, 1 %t291 = icmp uge i64 %t288, %t290 br i1 %t291, label %range7761, label %inrange7762 range7761: call void @finch_panic_index(ptr @.str.5145, i64 4606, i64 %t288, i64 %t290) unreachable inrange7762: %t292 = extractvalue { ptr, i64, i64 } %t289, 0 %t293 = getelementptr inbounds i64, ptr %t292, i64 %t288 %t294 = load i64, ptr %t293 %t295 = icmp sge i64 %t294, 0 br i1 %t295, label %then7763, label %else7764 then7763: %t296 = load ptr, ptr %a1 %t297 = load ptr, ptr %a1 %t298 = load i64, ptr %a272 %t299 = load { ptr, i64, i64 }, ptr %a77 %t300 = extractvalue { ptr, i64, i64 } %t299, 1 %t301 = icmp uge i64 %t298, %t300 br i1 %t301, label %range7766, label %inrange7767 range7766: call void @finch_panic_index(ptr @.str.5146, i64 4607, i64 %t298, i64 %t300) unreachable inrange7767: %t302 = extractvalue { ptr, i64, i64 } %t299, 0 %t303 = getelementptr inbounds i64, ptr %t302, i64 %t298 %t304 = load i64, ptr %t303 %t305 = load { ptr, i64, i64 }, ptr %a3 %t306 = extractvalue { ptr, i64, i64 } %t305, 1 %t307 = icmp uge i64 %t304, %t306 br i1 %t307, label %range7768, label %inrange7769 range7768: call void @finch_panic_index(ptr @.str.5147, i64 4607, i64 %t304, i64 %t306) unreachable inrange7769: %t308 = extractvalue { ptr, i64, i64 } %t305, 0 %t309 = getelementptr inbounds %S.ast.Node, ptr %t308, i64 %t304 %t310 = load %S.ast.Node, ptr %t309 %t311 = load %S.ast.Type, ptr %a286 %t312 = call %S.gen.Val @finch.gen.exprWant(ptr %t297, %S.ast.Node %t310, %S.ast.Type %t311) %t313 = load %S.ast.Type, ptr %a286 %t314 = load i64, ptr %a272 %t315 = load { ptr, i64, i64 }, ptr %a77 %t316 = extractvalue { ptr, i64, i64 } %t315, 1 %t317 = icmp uge i64 %t314, %t316 br i1 %t317, label %range7770, label %inrange7771 range7770: call void @finch_panic_index(ptr @.str.5148, i64 4607, i64 %t314, i64 %t316) unreachable inrange7771: %t318 = extractvalue { ptr, i64, i64 } %t315, 0 %t319 = getelementptr inbounds i64, ptr %t318, i64 %t314 %t320 = load i64, ptr %t319 %t321 = load { ptr, i64, i64 }, ptr %a3 %t322 = extractvalue { ptr, i64, i64 } %t321, 1 %t323 = icmp uge i64 %t320, %t322 br i1 %t323, label %range7772, label %inrange7773 range7772: call void @finch_panic_index(ptr @.str.5149, i64 4607, i64 %t320, i64 %t322) unreachable inrange7773: %t324 = extractvalue { ptr, i64, i64 } %t321, 0 %t325 = getelementptr inbounds %S.ast.Node, ptr %t324, i64 %t320 %t326 = load %S.ast.Node, ptr %t325 %t327 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 11 %t328 = load i64, ptr %a272 %t329 = load { ptr, i64, i64 }, ptr %t327 %t330 = extractvalue { ptr, i64, i64 } %t329, 1 %t331 = icmp uge i64 %t328, %t330 br i1 %t331, label %range7774, label %inrange7775 range7774: call void @finch_panic_index(ptr @.str.5151, i64 4607, i64 %t328, i64 %t330) unreachable inrange7775: %t332 = extractvalue { ptr, i64, i64 } %t329, 0 %t333 = getelementptr inbounds { ptr, i64, i64 }, ptr %t332, i64 %t328 %t334 = load { ptr, i64, i64 }, ptr %t333 store { ptr, i64, i64 } { ptr @.str.5150, i64 11, i64 0 }, ptr %a336 store { ptr, i64, i64 } %t334, ptr %a337 call void @finch_str_concat(ptr %a335, ptr %a336, ptr %a337) %t338 = load { ptr, i64, i64 }, ptr %a335 store { ptr, i64, i64 } %t338, ptr %a340 store { ptr, i64, i64 } { ptr @.str.5152, i64 1, i64 0 }, ptr %a341 call void @finch_str_concat(ptr %a339, ptr %a340, ptr %a341) %t342 = load { ptr, i64, i64 }, ptr %a339 %t343 = call %S.gen.Val @finch.gen.coerce(ptr %t296, %S.gen.Val %t312, %S.ast.Type %t313, %S.ast.Node %t326, { ptr, i64, i64 } %t342) store %S.gen.Val %t343, ptr %a287 br label %endif7765 else7764: %t344 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 2 %t345 = load i1, ptr %t344 %t346 = xor i1 %t345, true br label %logic.from7776 logic.from7776: br i1 %t346, label %logic.rhs7777, label %logic.end7778 logic.rhs7777: %t347 = getelementptr inbounds %S.ast.Node, ptr %a20, i32 0, i32 9 %t348 = load i64, ptr %a272 %t349 = load { ptr, i64, i64 }, ptr %t347 %t350 = extractvalue { ptr, i64, i64 } %t349, 1 %t351 = icmp uge i64 %t348, %t350 br i1 %t351, label %range7779, label %inrange7780 range7779: call void @finch_panic_index(ptr @.str.5153, i64 4608, i64 %t348, i64 %t350) unreachable inrange7780: %t352 = extractvalue { ptr, i64, i64 } %t349, 0 %t353 = getelementptr inbounds %S.ast.Node, ptr %t352, i64 %t348 %t354 = getelementptr inbounds %S.ast.Node, ptr %t353, i32 0, i32 9 %t355 = getelementptr inbounds { ptr, i64, i64 }, ptr %t354, i32 0, i32 1 %t356 = load i64, ptr %t355 %t357 = icmp sgt i64 %t356, 0 br label %logic.rend7781 logic.rend7781: br label %logic.end7778 logic.end7778: %t358 = phi i1 [ false, %logic.from7776 ], [ %t357, %logic.rend7781 ] br i1 %t358, label %then7782, label %else7783 then7782: %t359 = load ptr, ptr %a1 %t360 = icmp eq ptr %t359, null br i1 %t360, label %panic7785, label %ok7786 panic7785: call void @finch_panic(ptr @.str.5154, i64 4610, ptr @.str.5155) unreachable ok7786: %t361 = getelementptr inbounds %S.gen.Gen, ptr %t359, i32 0, i32 10 %t362 = load { ptr, i64, i64 }, ptr %t361 store { ptr, i64, i64 } %t362, ptr %a363 call void @finch.copy.arr_S_gen_Scope(ptr %a364, ptr %a363) %t365 = load { ptr, i64, i64 }, ptr %a364 store { ptr, i64, i64 } %t365, ptr %a366 %t367 = load ptr, ptr %a1 %t368 = icmp eq ptr %t367, null br i1 %t368, label %panic7787, label %ok7788 panic7787: call void @finch_panic(ptr @.str.5156, i64 4611, ptr @.str.5157) unreachable ok7788: %t369 = getelementptr inbounds %S.gen.Gen, ptr %t367, i32 0, i32 13 %t370 = load { ptr, i64, i64 }, ptr %t369 store { ptr, i64, i64 } %t370, ptr %a371 call void @finch_str_copy(ptr %a372, ptr %a371) %t373 = load { ptr, i64, i64 }, ptr %a372 store { ptr, i64, i64 } %t373, ptr %a374 %t375 = load ptr, ptr %a1 %t376 = icmp eq ptr %t375, null br i1 %t376, label %panic7789, label %ok7790 panic7789: call void @finch_panic(ptr @.str.5158, i64 4612, ptr @.str.5159) unreachable ok7790: %t377 = getelementptr inbounds %S.gen.Gen, ptr %t375, i32 0, i32 17 %t378 = load { ptr, i64, i64 }, ptr %t377 store { ptr, i64, i64 } %t378, ptr %a379 call void @finch.copy.arr_str(ptr %a380, ptr %a379) %t381 = load { ptr, i64, i64 }, ptr %a380 store { ptr, i64, i64 } %t381, ptr %a382 %t383 = load ptr, ptr %a1 %t384 = icmp eq ptr %t383, null br i1 %t384, label %panic7791, label %ok7792 panic7791: call void @finch_panic(ptr @.str.5160, i64 4613, ptr @.str.5161) unreachable ok7792: %t385 = getelementptr inbounds %S.gen.Gen, ptr %t383, i32 0, i32 18 %t386 = load { ptr, i64, i64 }, ptr %t385 store { ptr, i64, i64 } %t386, ptr %a387 call void @finch.copy.arr_S_ast_Type(ptr %a388, ptr %a387) %t389 = load { ptr, i64, i64 }, ptr %a388 store { ptr, i64, i64 } %t389, ptr %a390 %t391 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 6 %t392 = load { ptr, i64, i64 }, ptr %t391 %t393 = load ptr, ptr %a1 %t394 = icmp eq ptr %t393, null br i1 %t394, label %panic7793, label %ok7794 panic7793: call void @finch_panic(ptr @.str.5162, i64 4614, ptr @.str.5163) unreachable ok7794: %t395 = getelementptr inbounds %S.gen.Gen, ptr %t393, i32 0, i32 17 store { ptr, i64, i64 } %t392, ptr %a396 call void @finch.copy.arr_str(ptr %a397, ptr %a396) %t398 = load { ptr, i64, i64 }, ptr %a397 store { ptr, i64, i64 } %t398, ptr %t395 %t399 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 7 %t400 = load { ptr, i64, i64 }, ptr %t399 %t401 = load ptr, ptr %a1 %t402 = icmp eq ptr %t401, null br i1 %t402, label %panic7795, label %ok7796 panic7795: call void @finch_panic(ptr @.str.5164, i64 4615, ptr @.str.5165) unreachable ok7796: %t403 = getelementptr inbounds %S.gen.Gen, ptr %t401, i32 0, i32 18 store { ptr, i64, i64 } %t400, ptr %a404 call void @finch.copy.arr_S_ast_Type(ptr %a405, ptr %a404) %t406 = load { ptr, i64, i64 }, ptr %a405 store { ptr, i64, i64 } %t406, ptr %t403 store { ptr, i64, i64 } zeroinitializer, ptr %a407 %t408 = load { ptr, i64, i64 }, ptr %a407 %t409 = load ptr, ptr %a1 %t410 = icmp eq ptr %t409, null br i1 %t410, label %panic7797, label %ok7798 panic7797: call void @finch_panic(ptr @.str.5166, i64 4617, ptr @.str.5167) unreachable ok7798: %t411 = getelementptr inbounds %S.gen.Gen, ptr %t409, i32 0, i32 10 store { ptr, i64, i64 } %t408, ptr %a412 call void @finch.copy.arr_S_gen_Scope(ptr %a413, ptr %a412) %t414 = load { ptr, i64, i64 }, ptr %a413 store { ptr, i64, i64 } %t414, ptr %t411 %t415 = load ptr, ptr %a1 call void @finch.gen.pushScope(ptr %t415) %t416 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 0 %t417 = load { ptr, i64, i64 }, ptr %t416 %t418 = load ptr, ptr %a1 %t419 = icmp eq ptr %t418, null br i1 %t419, label %panic7799, label %ok7800 panic7799: call void @finch_panic(ptr @.str.5168, i64 4619, ptr @.str.5169) unreachable ok7800: %t420 = getelementptr inbounds %S.gen.Gen, ptr %t418, i32 0, i32 13 store { ptr, i64, i64 } %t417, ptr %a421 call void @finch_str_copy(ptr %a422, ptr %a421) %t423 = load { ptr, i64, i64 }, ptr %a422 store { ptr, i64, i64 } %t423, ptr %t420 %t424 = load ptr, ptr %a1 %t425 = load ptr, ptr %a1 %t426 = getelementptr inbounds %S.ast.Node, ptr %a20, i32 0, i32 9 %t427 = load i64, ptr %a272 %t428 = load { ptr, i64, i64 }, ptr %t426 %t429 = extractvalue { ptr, i64, i64 } %t428, 1 %t430 = icmp uge i64 %t427, %t429 br i1 %t430, label %range7801, label %inrange7802 range7801: call void @finch_panic_index(ptr @.str.5170, i64 4620, i64 %t427, i64 %t429) unreachable inrange7802: %t431 = extractvalue { ptr, i64, i64 } %t428, 0 %t432 = getelementptr inbounds %S.ast.Node, ptr %t431, i64 %t427 %t433 = getelementptr inbounds %S.ast.Node, ptr %t432, i32 0, i32 9 %t434 = load { ptr, i64, i64 }, ptr %t433 %t435 = extractvalue { ptr, i64, i64 } %t434, 1 %t436 = icmp uge i64 0, %t435 br i1 %t436, label %range7803, label %inrange7804 range7803: call void @finch_panic_index(ptr @.str.5171, i64 4620, i64 0, i64 %t435) unreachable inrange7804: %t437 = extractvalue { ptr, i64, i64 } %t434, 0 %t438 = getelementptr inbounds %S.ast.Node, ptr %t437, i64 0 %t439 = load %S.ast.Node, ptr %t438 %t440 = load %S.ast.Type, ptr %a286 %t441 = call %S.gen.Val @finch.gen.exprWant(ptr %t425, %S.ast.Node %t439, %S.ast.Type %t440) %t442 = load %S.ast.Type, ptr %a286 %t443 = getelementptr inbounds %S.ast.Node, ptr %a20, i32 0, i32 9 %t444 = load i64, ptr %a272 %t445 = load { ptr, i64, i64 }, ptr %t443 %t446 = extractvalue { ptr, i64, i64 } %t445, 1 %t447 = icmp uge i64 %t444, %t446 br i1 %t447, label %range7805, label %inrange7806 range7805: call void @finch_panic_index(ptr @.str.5172, i64 4620, i64 %t444, i64 %t446) unreachable inrange7806: %t448 = extractvalue { ptr, i64, i64 } %t445, 0 %t449 = getelementptr inbounds %S.ast.Node, ptr %t448, i64 %t444 %t450 = getelementptr inbounds %S.ast.Node, ptr %t449, i32 0, i32 9 %t451 = load { ptr, i64, i64 }, ptr %t450 %t452 = extractvalue { ptr, i64, i64 } %t451, 1 %t453 = icmp uge i64 0, %t452 br i1 %t453, label %range7807, label %inrange7808 range7807: call void @finch_panic_index(ptr @.str.5173, i64 4620, i64 0, i64 %t452) unreachable inrange7808: %t454 = extractvalue { ptr, i64, i64 } %t451, 0 %t455 = getelementptr inbounds %S.ast.Node, ptr %t454, i64 0 %t456 = load %S.ast.Node, ptr %t455 %t457 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 11 %t458 = load i64, ptr %a272 %t459 = load { ptr, i64, i64 }, ptr %t457 %t460 = extractvalue { ptr, i64, i64 } %t459, 1 %t461 = icmp uge i64 %t458, %t460 br i1 %t461, label %range7809, label %inrange7810 range7809: call void @finch_panic_index(ptr @.str.5175, i64 4620, i64 %t458, i64 %t460) unreachable inrange7810: %t462 = extractvalue { ptr, i64, i64 } %t459, 0 %t463 = getelementptr inbounds { ptr, i64, i64 }, ptr %t462, i64 %t458 %t464 = load { ptr, i64, i64 }, ptr %t463 store { ptr, i64, i64 } { ptr @.str.5174, i64 16, i64 0 }, ptr %a466 store { ptr, i64, i64 } %t464, ptr %a467 call void @finch_str_concat(ptr %a465, ptr %a466, ptr %a467) %t468 = load { ptr, i64, i64 }, ptr %a465 store { ptr, i64, i64 } %t468, ptr %a470 store { ptr, i64, i64 } { ptr @.str.5176, i64 1, i64 0 }, ptr %a471 call void @finch_str_concat(ptr %a469, ptr %a470, ptr %a471) %t472 = load { ptr, i64, i64 }, ptr %a469 %t473 = call %S.gen.Val @finch.gen.coerce(ptr %t424, %S.gen.Val %t441, %S.ast.Type %t442, %S.ast.Node %t456, { ptr, i64, i64 } %t472) store %S.gen.Val %t473, ptr %a287 %t474 = load { ptr, i64, i64 }, ptr %a374 %t475 = load ptr, ptr %a1 %t476 = icmp eq ptr %t475, null br i1 %t476, label %panic7811, label %ok7812 panic7811: call void @finch_panic(ptr @.str.5177, i64 4621, ptr @.str.5178) unreachable ok7812: %t477 = getelementptr inbounds %S.gen.Gen, ptr %t475, i32 0, i32 13 store { ptr, i64, i64 } %t474, ptr %a478 call void @finch_str_copy(ptr %a479, ptr %a478) %t480 = load { ptr, i64, i64 }, ptr %a479 store { ptr, i64, i64 } %t480, ptr %t477 %t481 = load { ptr, i64, i64 }, ptr %a382 %t482 = load ptr, ptr %a1 %t483 = icmp eq ptr %t482, null br i1 %t483, label %panic7813, label %ok7814 panic7813: call void @finch_panic(ptr @.str.5179, i64 4622, ptr @.str.5180) unreachable ok7814: %t484 = getelementptr inbounds %S.gen.Gen, ptr %t482, i32 0, i32 17 store { ptr, i64, i64 } %t481, ptr %a485 call void @finch.copy.arr_str(ptr %a486, ptr %a485) %t487 = load { ptr, i64, i64 }, ptr %a486 store { ptr, i64, i64 } %t487, ptr %t484 %t488 = load { ptr, i64, i64 }, ptr %a390 %t489 = load ptr, ptr %a1 %t490 = icmp eq ptr %t489, null br i1 %t490, label %panic7815, label %ok7816 panic7815: call void @finch_panic(ptr @.str.5181, i64 4623, ptr @.str.5182) unreachable ok7816: %t491 = getelementptr inbounds %S.gen.Gen, ptr %t489, i32 0, i32 18 store { ptr, i64, i64 } %t488, ptr %a492 call void @finch.copy.arr_S_ast_Type(ptr %a493, ptr %a492) %t494 = load { ptr, i64, i64 }, ptr %a493 store { ptr, i64, i64 } %t494, ptr %t491 %t495 = load { ptr, i64, i64 }, ptr %a366 %t496 = load ptr, ptr %a1 %t497 = icmp eq ptr %t496, null br i1 %t497, label %panic7817, label %ok7818 panic7817: call void @finch_panic(ptr @.str.5183, i64 4624, ptr @.str.5184) unreachable ok7818: %t498 = getelementptr inbounds %S.gen.Gen, ptr %t496, i32 0, i32 10 store { ptr, i64, i64 } %t495, ptr %a499 call void @finch.copy.arr_S_gen_Scope(ptr %a500, ptr %a499) %t501 = load { ptr, i64, i64 }, ptr %a500 store { ptr, i64, i64 } %t501, ptr %t498 br label %endif7784 else7783: br label %for.step7757 endif7784: br label %endif7765 endif7765: %t502 = load ptr, ptr %a1 %t503 = load { ptr, i64, i64 }, ptr %a63 store { ptr, i64, i64 } { ptr @.str.5185, i64 12, i64 0 }, ptr %a505 store { ptr, i64, i64 } %t503, ptr %a506 call void @finch_str_concat(ptr %a504, ptr %a505, ptr %a506) %t507 = load { ptr, i64, i64 }, ptr %a504 store { ptr, i64, i64 } %t507, ptr %a509 store { ptr, i64, i64 } { ptr @.str.5186, i64 1, i64 0 }, ptr %a510 call void @finch_str_concat(ptr %a508, ptr %a509, ptr %a510) %t511 = load { ptr, i64, i64 }, ptr %a508 %t512 = load { ptr, i64, i64 }, ptr %a268 store { ptr, i64, i64 } %t511, ptr %a514 store { ptr, i64, i64 } %t512, ptr %a515 call void @finch_str_concat(ptr %a513, ptr %a514, ptr %a515) %t516 = load { ptr, i64, i64 }, ptr %a513 store { ptr, i64, i64 } %t516, ptr %a518 store { ptr, i64, i64 } { ptr @.str.5187, i64 2, i64 0 }, ptr %a519 call void @finch_str_concat(ptr %a517, ptr %a518, ptr %a519) %t520 = load { ptr, i64, i64 }, ptr %a517 %t521 = load ptr, ptr %a1 %t522 = load %S.ast.Type, ptr %a286 %t523 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t521, %S.ast.Type %t522) store { ptr, i64, i64 } %t520, ptr %a525 store { ptr, i64, i64 } %t523, ptr %a526 call void @finch_str_concat(ptr %a524, ptr %a525, ptr %a526) %t527 = load { ptr, i64, i64 }, ptr %a524 store { ptr, i64, i64 } %t527, ptr %a529 store { ptr, i64, i64 } { ptr @.str.5188, i64 1, i64 0 }, ptr %a530 call void @finch_str_concat(ptr %a528, ptr %a529, ptr %a530) %t531 = load { ptr, i64, i64 }, ptr %a528 %t532 = load ptr, ptr %a1 %t533 = load %S.gen.Val, ptr %a287 %t534 = call { ptr, i64, i64 } @finch.gen.own(ptr %t532, %S.gen.Val %t533) store { ptr, i64, i64 } %t531, ptr %a536 store { ptr, i64, i64 } %t534, ptr %a537 call void @finch_str_concat(ptr %a535, ptr %a536, ptr %a537) %t538 = load { ptr, i64, i64 }, ptr %a535 store { ptr, i64, i64 } %t538, ptr %a540 store { ptr, i64, i64 } { ptr @.str.5189, i64 2, i64 0 }, ptr %a541 call void @finch_str_concat(ptr %a539, ptr %a540, ptr %a541) %t542 = load { ptr, i64, i64 }, ptr %a539 %t543 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 3 %t544 = load i64, ptr %a272 %t545 = load { ptr, i64, i64 }, ptr %t543 %t546 = extractvalue { ptr, i64, i64 } %t545, 1 %t547 = icmp uge i64 %t544, %t546 br i1 %t547, label %range7819, label %inrange7820 range7819: call void @finch_panic_index(ptr @.str.5190, i64 4628, i64 %t544, i64 %t546) unreachable inrange7820: %t548 = extractvalue { ptr, i64, i64 } %t545, 0 %t549 = getelementptr inbounds i64, ptr %t548, i64 %t544 %t550 = load i64, ptr %t549 call void @finch_str_from_int(ptr %a551, i64 %t550) %t552 = load { ptr, i64, i64 }, ptr %a551 store { ptr, i64, i64 } %t542, ptr %a554 store { ptr, i64, i64 } %t552, ptr %a555 call void @finch_str_concat(ptr %a553, ptr %a554, ptr %a555) %t556 = load { ptr, i64, i64 }, ptr %a553 %t557 = call { ptr, i64, i64 } @finch.gen.op(ptr %t502, { ptr, i64, i64 } %t556) store { ptr, i64, i64 } %t557, ptr %a268 br label %for.step7757 for.step7757: %t558 = load i64, ptr %a272 %t559 = add i64 %t558, 1 store i64 %t559, ptr %a272 br label %for.cond7755 for.end7758: %t560 = load { ptr, i64, i64 }, ptr %a268 store { ptr, i64, i64 } %t560, ptr %a561 call void @finch_str_copy(ptr %a562, ptr %a561) %t563 = load { ptr, i64, i64 }, ptr %a562 %t564 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t563, 0 %t565 = load %S.ast.Type, ptr %a59 store %S.ast.Type %t565, ptr %a566 call void @finch.copy.S_ast_Type(ptr %a567, ptr %a566) %t568 = load %S.ast.Type, ptr %a567 %t569 = insertvalue %S.gen.Val %t564, %S.ast.Type %t568, 1 %t570 = load ptr, ptr %a1 %t571 = load %S.ast.Type, ptr %a59 %t572 = call i1 @finch.gen.owning(ptr %t570, %S.ast.Type %t571) %t573 = insertvalue %S.gen.Val %t569, i1 %t572, 2 ret %S.gen.Val %t573 } define internal void @finch.gen.noteMethod(ptr %p0, %S.ast.Node %p1, { ptr, i64, i64 } %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca %S.docs.Doc, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = icmp eq ptr %t4, null br i1 %t5, label %panic7821, label %ok7822 panic7821: call void @finch_panic(ptr @.str.5191, i64 4637, ptr @.str.5192) unreachable ok7822: %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 26 %t7 = load i1, ptr %t6 %t8 = xor i1 %t7, true br i1 %t8, label %then7823, label %endif7825 then7823: ret void endif7825: %t9 = load { ptr, i64, i64 }, ptr %a3 %t10 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t11 = load { ptr, i64, i64 }, ptr %t10 %t12 = call %S.docs.Doc @finch.docs.find({ ptr, i64, i64 } %t9, { ptr, i64, i64 } %t11) store %S.docs.Doc %t12, ptr %a13 %t14 = getelementptr inbounds %S.docs.Doc, ptr %a13, i32 0, i32 0 %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t14, i32 0, i32 1 %t16 = load i64, ptr %t15 %t17 = icmp sgt i64 %t16, 0 br i1 %t17, label %then7826, label %endif7828 then7826: %t18 = load ptr, ptr %a1 %t19 = load %S.ast.Node, ptr %a2 %t20 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 %t21 = load i64, ptr %t20 %t22 = add i64 %t21, 1 %t23 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %t23, i32 0, i32 1 %t25 = load i64, ptr %t24 %t26 = load %S.docs.Doc, ptr %a13 %t27 = call { ptr, i64, i64 } @finch.docs.hover(%S.docs.Doc %t26) call void @finch.gen.noteRef(ptr %t18, %S.ast.Node %t19, i64 %t22, i64 %t25, { ptr, i64, i64 } %t27, { ptr, i64, i64 } { ptr @.str.5193, i64 0, i64 0 }, i64 0, i64 0) br label %endif7828 endif7828: ret void } define internal %S.gen.Val @finch.gen.method(ptr %p0, %S.ast.Node %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a10 = alloca %S.ast.Node, align 16 %a11 = alloca %S.ast.Node, align 16 %a13 = alloca %S.ast.Node, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca i64, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca i64, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a107 = alloca i64, align 16 %a119 = alloca i64, align 16 %a122 = alloca { ptr, i64, i64 }, align 16 %a126 = alloca i64, align 16 %a138 = alloca %S.ast.Node, align 16 %a139 = alloca %S.ast.Node, align 16 %a157 = alloca { ptr, i64, i64 }, align 16 %a158 = alloca { ptr, i64, i64 }, align 16 %a159 = alloca { ptr, i64, i64 }, align 16 %a161 = alloca { ptr, i64, i64 }, align 16 %a162 = alloca { ptr, i64, i64 }, align 16 %a163 = alloca { ptr, i64, i64 }, align 16 %a167 = alloca { ptr, i64, i64 }, align 16 %a168 = alloca { ptr, i64, i64 }, align 16 %a169 = alloca { ptr, i64, i64 }, align 16 %a171 = alloca { ptr, i64, i64 }, align 16 %a172 = alloca { ptr, i64, i64 }, align 16 %a173 = alloca { ptr, i64, i64 }, align 16 %a188 = alloca { ptr, i64, i64 }, align 16 %a194 = alloca i64, align 16 %a197 = alloca i64, align 16 %a202 = alloca { ptr, i64, i64 }, align 16 %a203 = alloca { ptr, i64, i64 }, align 16 %a210 = alloca %S.gen.Ref, align 16 %a214 = alloca %S.ast.Type, align 16 %a215 = alloca %S.ast.Type, align 16 %a217 = alloca %S.ast.Type, align 16 %a223 = alloca %S.ast.Type, align 16 %a224 = alloca %S.ast.Type, align 16 %a228 = alloca { ptr, i64, i64 }, align 16 %a229 = alloca { ptr, i64, i64 }, align 16 %a232 = alloca { ptr, i64, i64 }, align 16 %a238 = alloca { ptr, i64, i64 }, align 16 %a239 = alloca { ptr, i64, i64 }, align 16 %a244 = alloca i64, align 16 %a247 = alloca i64, align 16 %a252 = alloca { ptr, i64, i64 }, align 16 %a253 = alloca { ptr, i64, i64 }, align 16 %a263 = alloca { ptr, i64, i64 }, align 16 %a264 = alloca { ptr, i64, i64 }, align 16 %a265 = alloca { ptr, i64, i64 }, align 16 %a281 = alloca { ptr, i64, i64 }, align 16 %a282 = alloca { ptr, i64, i64 }, align 16 %a287 = alloca %S.gen.Val, align 16 %a288 = alloca %S.gen.Val, align 16 %a290 = alloca %S.gen.Val, align 16 %a300 = alloca %S.ast.Type, align 16 %a301 = alloca %S.ast.Type, align 16 %a315 = alloca { ptr, i64, i64 }, align 16 %a316 = alloca { ptr, i64, i64 }, align 16 %a319 = alloca { ptr, i64, i64 }, align 16 %a325 = alloca { ptr, i64, i64 }, align 16 %a326 = alloca { ptr, i64, i64 }, align 16 %a331 = alloca i64, align 16 %a334 = alloca i64, align 16 %a339 = alloca { ptr, i64, i64 }, align 16 %a340 = alloca { ptr, i64, i64 }, align 16 %a350 = alloca { ptr, i64, i64 }, align 16 %a351 = alloca { ptr, i64, i64 }, align 16 %a352 = alloca { ptr, i64, i64 }, align 16 %a367 = alloca %S.ast.Type, align 16 %a368 = alloca %S.ast.Type, align 16 %a370 = alloca %S.ast.Type, align 16 %a371 = alloca { ptr, i64, i64 }, align 16 %a374 = alloca { ptr, i64, i64 }, align 16 %a375 = alloca { ptr, i64, i64 }, align 16 %a391 = alloca { ptr, i64, i64 }, align 16 %a392 = alloca { ptr, i64, i64 }, align 16 %a399 = alloca { ptr, i64, i64 }, align 16 %a400 = alloca { ptr, i64, i64 }, align 16 %a402 = alloca { ptr, i64, i64 }, align 16 %a413 = alloca { ptr, i64, i64 }, align 16 %a414 = alloca { ptr, i64, i64 }, align 16 %a415 = alloca { ptr, i64, i64 }, align 16 %a417 = alloca { ptr, i64, i64 }, align 16 %a418 = alloca { ptr, i64, i64 }, align 16 %a419 = alloca { ptr, i64, i64 }, align 16 %a424 = alloca { ptr, i64, i64 }, align 16 %a425 = alloca { ptr, i64, i64 }, align 16 %a426 = alloca { ptr, i64, i64 }, align 16 %a428 = alloca { ptr, i64, i64 }, align 16 %a429 = alloca { ptr, i64, i64 }, align 16 %a430 = alloca { ptr, i64, i64 }, align 16 %a440 = alloca %S.ast.Type, align 16 %a441 = alloca %S.ast.Type, align 16 %a444 = alloca { ptr, i64, i64 }, align 16 %a445 = alloca { ptr, i64, i64 }, align 16 %a449 = alloca { ptr, i64, i64 }, align 16 %a450 = alloca { ptr, i64, i64 }, align 16 %a455 = alloca { ptr, i64, i64 }, align 16 %a456 = alloca { ptr, i64, i64 }, align 16 %a465 = alloca { ptr, i64, i64 }, align 16 %a466 = alloca { ptr, i64, i64 }, align 16 %a474 = alloca { ptr, i64, i64 }, align 16 %a475 = alloca { ptr, i64, i64 }, align 16 %a480 = alloca { ptr, i64, i64 }, align 16 %a481 = alloca { ptr, i64, i64 }, align 16 %a493 = alloca i64, align 16 %a498 = alloca { ptr, i64, i64 }, align 16 %a499 = alloca { ptr, i64, i64 }, align 16 %a509 = alloca i64, align 16 %a540 = alloca i64, align 16 %a561 = alloca { ptr, i64, i64 }, align 16 %a565 = alloca i64, align 16 %a573 = alloca %S.gen.FnSig, align 16 %a578 = alloca { ptr, i64, i64 }, align 16 %a579 = alloca { ptr, i64, i64 }, align 16 %a586 = alloca { ptr, i64, i64 }, align 16 %a587 = alloca { ptr, i64, i64 }, align 16 %a594 = alloca { ptr, i64, i64 }, align 16 %a595 = alloca { ptr, i64, i64 }, align 16 %a610 = alloca { ptr, i64, i64 }, align 16 %a611 = alloca { ptr, i64, i64 }, align 16 %a612 = alloca { ptr, i64, i64 }, align 16 %a614 = alloca { ptr, i64, i64 }, align 16 %a615 = alloca { ptr, i64, i64 }, align 16 %a616 = alloca { ptr, i64, i64 }, align 16 %a620 = alloca { ptr, i64, i64 }, align 16 %a621 = alloca { ptr, i64, i64 }, align 16 %a622 = alloca { ptr, i64, i64 }, align 16 %a624 = alloca { ptr, i64, i64 }, align 16 %a625 = alloca { ptr, i64, i64 }, align 16 %a626 = alloca { ptr, i64, i64 }, align 16 %a630 = alloca { ptr, i64, i64 }, align 16 %a631 = alloca { ptr, i64, i64 }, align 16 %a632 = alloca { ptr, i64, i64 }, align 16 %a634 = alloca { ptr, i64, i64 }, align 16 %a635 = alloca { ptr, i64, i64 }, align 16 %a636 = alloca { ptr, i64, i64 }, align 16 %a640 = alloca { ptr, i64, i64 }, align 16 %a641 = alloca { ptr, i64, i64 }, align 16 %a642 = alloca { ptr, i64, i64 }, align 16 %a644 = alloca { ptr, i64, i64 }, align 16 %a645 = alloca { ptr, i64, i64 }, align 16 %a646 = alloca { ptr, i64, i64 }, align 16 %a652 = alloca { ptr, i64, i64 }, align 16 %a653 = alloca { ptr, i64, i64 }, align 16 %a654 = alloca { ptr, i64, i64 }, align 16 %a656 = alloca { ptr, i64, i64 }, align 16 %a657 = alloca { ptr, i64, i64 }, align 16 %a658 = alloca { ptr, i64, i64 }, align 16 %a662 = alloca { ptr, i64, i64 }, align 16 %a663 = alloca { ptr, i64, i64 }, align 16 %a664 = alloca { ptr, i64, i64 }, align 16 %a666 = alloca { ptr, i64, i64 }, align 16 %a667 = alloca { ptr, i64, i64 }, align 16 %a668 = alloca { ptr, i64, i64 }, align 16 %a672 = alloca { ptr, i64, i64 }, align 16 %a673 = alloca { ptr, i64, i64 }, align 16 %a674 = alloca { ptr, i64, i64 }, align 16 %a676 = alloca { ptr, i64, i64 }, align 16 %a677 = alloca { ptr, i64, i64 }, align 16 %a678 = alloca { ptr, i64, i64 }, align 16 %a681 = alloca { ptr, i64, i64 }, align 16 %a682 = alloca { ptr, i64, i64 }, align 16 %a684 = alloca { ptr, i64, i64 }, align 16 %a685 = alloca { ptr, i64, i64 }, align 16 %a686 = alloca { ptr, i64, i64 }, align 16 %a688 = alloca { ptr, i64, i64 }, align 16 %a689 = alloca { ptr, i64, i64 }, align 16 %a690 = alloca { ptr, i64, i64 }, align 16 %a705 = alloca { ptr, i64, i64 }, align 16 %a706 = alloca { ptr, i64, i64 }, align 16 %a711 = alloca { ptr, i64, i64 }, align 16 %a712 = alloca { ptr, i64, i64 }, align 16 %a724 = alloca { ptr, i64, i64 }, align 16 %a725 = alloca { ptr, i64, i64 }, align 16 %a726 = alloca { ptr, i64, i64 }, align 16 %a730 = alloca { ptr, i64, i64 }, align 16 %a731 = alloca { ptr, i64, i64 }, align 16 %a732 = alloca { ptr, i64, i64 }, align 16 %a734 = alloca { ptr, i64, i64 }, align 16 %a735 = alloca { ptr, i64, i64 }, align 16 %a736 = alloca { ptr, i64, i64 }, align 16 %a740 = alloca { ptr, i64, i64 }, align 16 %a747 = alloca i64, align 16 %a758 = alloca { ptr, i64, i64 }, align 16 %a759 = alloca { ptr, i64, i64 }, align 16 %a760 = alloca { ptr, i64, i64 }, align 16 %a762 = alloca { ptr, i64, i64 }, align 16 %a763 = alloca { ptr, i64, i64 }, align 16 %a764 = alloca { ptr, i64, i64 }, align 16 %a771 = alloca { ptr, i64, i64 }, align 16 %a772 = alloca { ptr, i64, i64 }, align 16 %a773 = alloca { ptr, i64, i64 }, align 16 %a777 = alloca { ptr, i64, i64 }, align 16 %a778 = alloca { ptr, i64, i64 }, align 16 %a779 = alloca { ptr, i64, i64 }, align 16 %a789 = alloca { ptr, i64, i64 }, align 16 %a790 = alloca { ptr, i64, i64 }, align 16 %a791 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 %t3 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t4 = load { ptr, i64, i64 }, ptr %t3 %t5 = extractvalue { ptr, i64, i64 } %t4, 1 %t6 = icmp uge i64 0, %t5 br i1 %t6, label %range7829, label %inrange7830 range7829: call void @finch_panic_index(ptr @.str.5194, i64 4647, i64 0, i64 %t5) unreachable inrange7830: %t7 = extractvalue { ptr, i64, i64 } %t4, 0 %t8 = getelementptr inbounds %S.ast.Node, ptr %t7, i64 0 %t9 = load %S.ast.Node, ptr %t8 store %S.ast.Node %t9, ptr %a10 call void @finch.copy.S_ast_Node(ptr %a11, ptr %a10) %t12 = load %S.ast.Node, ptr %a11 store %S.ast.Node %t12, ptr %a13 %t14 = getelementptr inbounds %S.ast.Node, ptr %a13, i32 0, i32 0 %t15 = load { ptr, i64, i64 }, ptr %t14 store { ptr, i64, i64 } %t15, ptr %a16 store { ptr, i64, i64 } { ptr @.str.5195, i64 3, i64 0 }, ptr %a17 %t18 = call i32 @finch_str_eq(ptr %a16, ptr %a17) %t19 = icmp ne i32 %t18, 0 br label %logic.from7831 logic.from7831: br i1 %t19, label %logic.rhs7832, label %logic.end7833 logic.rhs7832: %t20 = load ptr, ptr %a1 %t21 = getelementptr inbounds %S.ast.Node, ptr %a13, i32 0, i32 1 %t22 = load { ptr, i64, i64 }, ptr %t21 %t23 = call i64 @finch.gen.lookup(ptr %t20, { ptr, i64, i64 } %t22) %t24 = icmp slt i64 %t23, 0 br label %logic.rend7834 logic.rend7834: br label %logic.end7833 logic.end7833: %t25 = phi i1 [ false, %logic.from7831 ], [ %t24, %logic.rend7834 ] br i1 %t25, label %then7835, label %endif7837 then7835: %t26 = getelementptr inbounds %S.ast.Node, ptr %a13, i32 0, i32 1 %t27 = load { ptr, i64, i64 }, ptr %t26 store { ptr, i64, i64 } %t27, ptr %a28 call void @finch_str_copy(ptr %a29, ptr %a28) %t30 = load { ptr, i64, i64 }, ptr %a29 store { ptr, i64, i64 } %t30, ptr %a31 %t32 = load ptr, ptr %a1 %t33 = load { ptr, i64, i64 }, ptr %a31 %t34 = call i1 @finch.gen.imports(ptr %t32, { ptr, i64, i64 } %t33) %t35 = xor i1 %t34, true br i1 %t35, label %then7838, label %endif7840 then7838: %t36 = load ptr, ptr %a1 %t37 = load %S.ast.Node, ptr %a13 %t38 = load { ptr, i64, i64 }, ptr %a31 store { ptr, i64, i64 } { ptr @.str.5196, i64 38, i64 0 }, ptr %a40 store { ptr, i64, i64 } %t38, ptr %a41 call void @finch_str_concat(ptr %a39, ptr %a40, ptr %a41) %t42 = load { ptr, i64, i64 }, ptr %a39 store { ptr, i64, i64 } %t42, ptr %a44 store { ptr, i64, i64 } { ptr @.str.5197, i64 32, i64 0 }, ptr %a45 call void @finch_str_concat(ptr %a43, ptr %a44, ptr %a45) %t46 = load { ptr, i64, i64 }, ptr %a43 %t47 = load { ptr, i64, i64 }, ptr %a31 store { ptr, i64, i64 } %t46, ptr %a49 store { ptr, i64, i64 } %t47, ptr %a50 call void @finch_str_concat(ptr %a48, ptr %a49, ptr %a50) %t51 = load { ptr, i64, i64 }, ptr %a48 store { ptr, i64, i64 } %t51, ptr %a53 store { ptr, i64, i64 } { ptr @.str.5198, i64 13, i64 0 }, ptr %a54 call void @finch_str_concat(ptr %a52, ptr %a53, ptr %a54) %t55 = load { ptr, i64, i64 }, ptr %a52 call void @finch.gen.fail(ptr %t36, %S.ast.Node %t37, { ptr, i64, i64 } %t55) br label %endif7840 endif7840: %t56 = load ptr, ptr %a1 %t57 = load { ptr, i64, i64 }, ptr %a31 %t58 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t59 = load { ptr, i64, i64 }, ptr %t58 %t60 = call i64 @finch.gen.findFn(ptr %t56, { ptr, i64, i64 } %t57, { ptr, i64, i64 } %t59) store i64 %t60, ptr %a61 %t62 = load i64, ptr %a61 %t63 = icmp sge i64 %t62, 0 br i1 %t63, label %then7841, label %endif7843 then7841: %t64 = load ptr, ptr %a1 %t65 = load i64, ptr %a61 %t66 = load %S.ast.Node, ptr %a2 %t67 = load { ptr, i64, i64 }, ptr %a31 store { ptr, i64, i64 } %t67, ptr %a69 store { ptr, i64, i64 } { ptr @.str.5199, i64 1, i64 0 }, ptr %a70 call void @finch_str_concat(ptr %a68, ptr %a69, ptr %a70) %t71 = load { ptr, i64, i64 }, ptr %a68 %t72 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t73 = load { ptr, i64, i64 }, ptr %t72 store { ptr, i64, i64 } %t71, ptr %a75 store { ptr, i64, i64 } %t73, ptr %a76 call void @finch_str_concat(ptr %a74, ptr %a75, ptr %a76) %t77 = load { ptr, i64, i64 }, ptr %a74 %t78 = call %S.gen.Val @finch.gen.callFn(ptr %t64, i64 %t65, %S.ast.Node %t66, i64 1, { ptr, i64, i64 } %t77, { ptr, i64, i64 } { ptr @.str.5200, i64 0, i64 0 }, { ptr, i64, i64 } { ptr @.str.5201, i64 0, i64 0 }) ret %S.gen.Val %t78 endif7843: %t79 = load ptr, ptr %a1 %t80 = load { ptr, i64, i64 }, ptr %a31 %t81 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t82 = load { ptr, i64, i64 }, ptr %t81 %t83 = call i64 @finch.gen.findTemplate(ptr %t79, { ptr, i64, i64 } %t80, { ptr, i64, i64 } %t82, { ptr, i64, i64 } { ptr @.str.5202, i64 0, i64 0 }, i1 false) store i64 %t83, ptr %a84 %t85 = load i64, ptr %a84 %t86 = icmp sge i64 %t85, 0 br i1 %t86, label %then7844, label %endif7846 then7844: %t87 = load ptr, ptr %a1 %t88 = load %S.ast.Node, ptr %a2 %t89 = load i64, ptr %a84 %t90 = load { ptr, i64, i64 }, ptr %a31 store { ptr, i64, i64 } %t90, ptr %a92 store { ptr, i64, i64 } { ptr @.str.5203, i64 1, i64 0 }, ptr %a93 call void @finch_str_concat(ptr %a91, ptr %a92, ptr %a93) %t94 = load { ptr, i64, i64 }, ptr %a91 %t95 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t96 = load { ptr, i64, i64 }, ptr %t95 store { ptr, i64, i64 } %t94, ptr %a98 store { ptr, i64, i64 } %t96, ptr %a99 call void @finch_str_concat(ptr %a97, ptr %a98, ptr %a99) %t100 = load { ptr, i64, i64 }, ptr %a97 %t101 = call %S.gen.Val @finch.gen.genericCall(ptr %t87, %S.ast.Node %t88, i64 %t89, i64 1, { ptr, i64, i64 } %t100) ret %S.gen.Val %t101 endif7846: %t102 = load ptr, ptr %a1 %t103 = load { ptr, i64, i64 }, ptr %a31 %t104 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t105 = load { ptr, i64, i64 }, ptr %t104 %t106 = call i64 @finch.gen.findEnum(ptr %t102, { ptr, i64, i64 } %t103, { ptr, i64, i64 } %t105) store i64 %t106, ptr %a107 %t108 = load i64, ptr %a107 %t109 = icmp sge i64 %t108, 0 br i1 %t109, label %then7847, label %endif7849 then7847: %t110 = load ptr, ptr %a1 %t111 = load %S.ast.Node, ptr %a2 %t112 = load i64, ptr %a107 %t113 = call %S.gen.Val @finch.gen.enumFrom(ptr %t110, %S.ast.Node %t111, i64 %t112) ret %S.gen.Val %t113 endif7849: %t114 = load ptr, ptr %a1 %t115 = load { ptr, i64, i64 }, ptr %a31 %t116 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t117 = load { ptr, i64, i64 }, ptr %t116 %t118 = call i64 @finch.gen.findStruct(ptr %t114, { ptr, i64, i64 } %t115, { ptr, i64, i64 } %t117) store i64 %t118, ptr %a119 %t120 = load i64, ptr %a119 %t121 = icmp sge i64 %t120, 0 br i1 %t121, label %then7850, label %endif7852 then7850: store { ptr, i64, i64 } zeroinitializer, ptr %a122 %t123 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t124 = getelementptr inbounds { ptr, i64, i64 }, ptr %t123, i32 0, i32 1 %t125 = load i64, ptr %t124 store i64 1, ptr %a126 br label %for.cond7853 for.cond7853: %t127 = load i64, ptr %a126 %t128 = icmp slt i64 %t127, %t125 br i1 %t128, label %for.body7854, label %for.end7856 for.body7854: %t129 = getelementptr inbounds { ptr, i64, i64 }, ptr %a122, i32 0, i32 1 %t130 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t131 = load i64, ptr %a126 %t132 = load { ptr, i64, i64 }, ptr %t130 %t133 = extractvalue { ptr, i64, i64 } %t132, 1 %t134 = icmp uge i64 %t131, %t133 br i1 %t134, label %range7857, label %inrange7858 range7857: call void @finch_panic_index(ptr @.str.5204, i64 4669, i64 %t131, i64 %t133) unreachable inrange7858: %t135 = extractvalue { ptr, i64, i64 } %t132, 0 %t136 = getelementptr inbounds %S.ast.Node, ptr %t135, i64 %t131 %t137 = load %S.ast.Node, ptr %t136 store %S.ast.Node %t137, ptr %a138 call void @finch.copy.S_ast_Node(ptr %a139, ptr %a138) %t140 = load %S.ast.Node, ptr %a139 %t141 = load i64, ptr %t129 %t142 = add i64 %t141, 1 call void @finch_arr_reserve(ptr %a122, i64 %t142, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) %t143 = load ptr, ptr %a122 %t144 = getelementptr inbounds %S.ast.Node, ptr %t143, i64 %t141 store %S.ast.Node %t140, ptr %t144 store i64 %t142, ptr %t129 br label %for.step7855 for.step7855: %t145 = load i64, ptr %a126 %t146 = add i64 %t145, 1 store i64 %t146, ptr %a126 br label %for.cond7853 for.end7856: %t147 = load ptr, ptr %a1 %t148 = load i64, ptr %a119 %t149 = load { ptr, i64, i64 }, ptr %a122 %t150 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 10 %t151 = load { ptr, i64, i64 }, ptr %t150 %t152 = load %S.ast.Node, ptr %a2 %t153 = call %S.gen.Val @finch.gen.construct(ptr %t147, i64 %t148, { ptr, i64, i64 } %t149, { ptr, i64, i64 } %t151, %S.ast.Node %t152) ret %S.gen.Val %t153 endif7852: %t154 = load ptr, ptr %a1 %t155 = load %S.ast.Node, ptr %a2 %t156 = load { ptr, i64, i64 }, ptr %a31 store { ptr, i64, i64 } { ptr @.str.5205, i64 12, i64 0 }, ptr %a158 store { ptr, i64, i64 } %t156, ptr %a159 call void @finch_str_concat(ptr %a157, ptr %a158, ptr %a159) %t160 = load { ptr, i64, i64 }, ptr %a157 store { ptr, i64, i64 } %t160, ptr %a162 store { ptr, i64, i64 } { ptr @.str.5206, i64 35, i64 0 }, ptr %a163 call void @finch_str_concat(ptr %a161, ptr %a162, ptr %a163) %t164 = load { ptr, i64, i64 }, ptr %a161 %t165 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t166 = load { ptr, i64, i64 }, ptr %t165 store { ptr, i64, i64 } %t164, ptr %a168 store { ptr, i64, i64 } %t166, ptr %a169 call void @finch_str_concat(ptr %a167, ptr %a168, ptr %a169) %t170 = load { ptr, i64, i64 }, ptr %a167 store { ptr, i64, i64 } %t170, ptr %a172 store { ptr, i64, i64 } { ptr @.str.5207, i64 1, i64 0 }, ptr %a173 call void @finch_str_concat(ptr %a171, ptr %a172, ptr %a173) %t174 = load { ptr, i64, i64 }, ptr %a171 call void @finch.gen.fail(ptr %t154, %S.ast.Node %t155, { ptr, i64, i64 } %t174) br label %endif7837 endif7837: %t175 = mul i64 8, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t176 = call ptr @finch_alloc(i64 %t175) %t177 = getelementptr inbounds { ptr, i64, i64 }, ptr %t176, i64 0 store { ptr, i64, i64 } { ptr @.str.5208, i64 4, i64 0 }, ptr %t177 %t178 = getelementptr inbounds { ptr, i64, i64 }, ptr %t176, i64 1 store { ptr, i64, i64 } { ptr @.str.5209, i64 3, i64 0 }, ptr %t178 %t179 = getelementptr inbounds { ptr, i64, i64 }, ptr %t176, i64 2 store { ptr, i64, i64 } { ptr @.str.5210, i64 6, i64 0 }, ptr %t179 %t180 = getelementptr inbounds { ptr, i64, i64 }, ptr %t176, i64 3 store { ptr, i64, i64 } { ptr @.str.5211, i64 6, i64 0 }, ptr %t180 %t181 = getelementptr inbounds { ptr, i64, i64 }, ptr %t176, i64 4 store { ptr, i64, i64 } { ptr @.str.5212, i64 5, i64 0 }, ptr %t181 %t182 = getelementptr inbounds { ptr, i64, i64 }, ptr %t176, i64 5 store { ptr, i64, i64 } { ptr @.str.5213, i64 6, i64 0 }, ptr %t182 %t183 = getelementptr inbounds { ptr, i64, i64 }, ptr %t176, i64 6 store { ptr, i64, i64 } { ptr @.str.5214, i64 4, i64 0 }, ptr %t183 %t184 = getelementptr inbounds { ptr, i64, i64 }, ptr %t176, i64 7 store { ptr, i64, i64 } { ptr @.str.5215, i64 7, i64 0 }, ptr %t184 %t185 = insertvalue { ptr, i64, i64 } undef, ptr %t176, 0 %t186 = insertvalue { ptr, i64, i64 } %t185, i64 8, 1 %t187 = insertvalue { ptr, i64, i64 } %t186, i64 8, 2 store { ptr, i64, i64 } %t187, ptr %a188 %t189 = load ptr, ptr %a1 %t190 = load %S.ast.Node, ptr %a13 %t191 = getelementptr inbounds { ptr, i64, i64 }, ptr %a188, i32 0, i32 1 %t192 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t193 = load { ptr, i64, i64 }, ptr %t192 store i64 -1, ptr %a194 %t195 = load i64, ptr %t191 %t196 = load ptr, ptr %a188 store i64 0, ptr %a197 br label %find.cond7859 find.cond7859: %t198 = load i64, ptr %a197 %t199 = icmp slt i64 %t198, %t195 br i1 %t199, label %find.body7860, label %find.end7863 find.body7860: %t200 = getelementptr inbounds { ptr, i64, i64 }, ptr %t196, i64 %t198 %t201 = load { ptr, i64, i64 }, ptr %t200 store { ptr, i64, i64 } %t201, ptr %a202 store { ptr, i64, i64 } %t193, ptr %a203 %t204 = call i32 @finch_str_eq(ptr %a202, ptr %a203) %t205 = icmp ne i32 %t204, 0 br i1 %t205, label %find.hit7861, label %find.next7862 find.hit7861: store i64 %t198, ptr %a194 br label %find.end7863 find.next7862: %t206 = add i64 %t198, 1 store i64 %t206, ptr %a197 br label %find.cond7859 find.end7863: %t207 = load i64, ptr %a194 %t208 = icmp sge i64 %t207, 0 %t209 = call %S.gen.Ref @finch.gen.ref(ptr %t189, %S.ast.Node %t190, i1 %t208) store %S.gen.Ref %t209, ptr %a210 %t211 = getelementptr inbounds %S.gen.Ref, ptr %a210, i32 0, i32 2 %t212 = getelementptr inbounds %S.gen.Val, ptr %t211, i32 0, i32 1 %t213 = load %S.ast.Type, ptr %t212 store %S.ast.Type %t213, ptr %a214 call void @finch.copy.S_ast_Type(ptr %a215, ptr %a214) %t216 = load %S.ast.Type, ptr %a215 store %S.ast.Type %t216, ptr %a217 %t218 = getelementptr inbounds %S.gen.Ref, ptr %a210, i32 0, i32 0 %t219 = load i1, ptr %t218 br i1 %t219, label %then7864, label %endif7866 then7864: %t220 = getelementptr inbounds %S.gen.Ref, ptr %a210, i32 0, i32 1 %t221 = getelementptr inbounds %S.gen.Place, ptr %t220, i32 0, i32 1 %t222 = load %S.ast.Type, ptr %t221 store %S.ast.Type %t222, ptr %a223 call void @finch.copy.S_ast_Type(ptr %a224, ptr %a223) %t225 = load %S.ast.Type, ptr %a224 store %S.ast.Type %t225, ptr %a217 br label %endif7866 endif7866: %t226 = getelementptr inbounds %S.ast.Type, ptr %a217, i32 0, i32 0 %t227 = load { ptr, i64, i64 }, ptr %t226 store { ptr, i64, i64 } %t227, ptr %a228 store { ptr, i64, i64 } { ptr @.str.5216, i64 5, i64 0 }, ptr %a229 %t230 = call i32 @finch_str_eq(ptr %a228, ptr %a229) %t231 = icmp ne i32 %t230, 0 br i1 %t231, label %then7867, label %endif7869 then7867: store { ptr, i64, i64 } { ptr @.str.5217, i64 0, i64 0 }, ptr %a232 %t233 = getelementptr inbounds %S.gen.Ref, ptr %a210, i32 0, i32 0 %t234 = load i1, ptr %t233 br i1 %t234, label %then7870, label %else7871 then7870: %t235 = getelementptr inbounds %S.gen.Ref, ptr %a210, i32 0, i32 1 %t236 = getelementptr inbounds %S.gen.Place, ptr %t235, i32 0, i32 0 %t237 = load { ptr, i64, i64 }, ptr %t236 store { ptr, i64, i64 } %t237, ptr %a238 call void @finch_str_copy(ptr %a239, ptr %a238) %t240 = load { ptr, i64, i64 }, ptr %a239 store { ptr, i64, i64 } %t240, ptr %a232 br label %endif7872 else7871: %t241 = getelementptr inbounds { ptr, i64, i64 }, ptr %a188, i32 0, i32 1 %t242 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t243 = load { ptr, i64, i64 }, ptr %t242 store i64 -1, ptr %a244 %t245 = load i64, ptr %t241 %t246 = load ptr, ptr %a188 store i64 0, ptr %a247 br label %find.cond7873 find.cond7873: %t248 = load i64, ptr %a247 %t249 = icmp slt i64 %t248, %t245 br i1 %t249, label %find.body7874, label %find.end7877 find.body7874: %t250 = getelementptr inbounds { ptr, i64, i64 }, ptr %t246, i64 %t248 %t251 = load { ptr, i64, i64 }, ptr %t250 store { ptr, i64, i64 } %t251, ptr %a252 store { ptr, i64, i64 } %t243, ptr %a253 %t254 = call i32 @finch_str_eq(ptr %a252, ptr %a253) %t255 = icmp ne i32 %t254, 0 br i1 %t255, label %find.hit7875, label %find.next7876 find.hit7875: store i64 %t248, ptr %a244 br label %find.end7877 find.next7876: %t256 = add i64 %t248, 1 store i64 %t256, ptr %a247 br label %find.cond7873 find.end7877: %t257 = load i64, ptr %a244 %t258 = icmp sge i64 %t257, 0 br i1 %t258, label %then7878, label %endif7880 then7878: %t259 = load ptr, ptr %a1 %t260 = load %S.ast.Node, ptr %a2 %t261 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t262 = load { ptr, i64, i64 }, ptr %t261 store { ptr, i64, i64 } %t262, ptr %a264 store { ptr, i64, i64 } { ptr @.str.5218, i64 63, i64 0 }, ptr %a265 call void @finch_str_concat(ptr %a263, ptr %a264, ptr %a265) %t266 = load { ptr, i64, i64 }, ptr %a263 call void @finch.gen.fail(ptr %t259, %S.ast.Node %t260, { ptr, i64, i64 } %t266) br label %endif7880 endif7880: %t267 = load ptr, ptr %a1 %t268 = getelementptr inbounds %S.gen.Ref, ptr %a210, i32 0, i32 2 %t269 = load %S.gen.Val, ptr %t268 %t270 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t267, %S.gen.Val %t269) store { ptr, i64, i64 } %t270, ptr %a232 br label %endif7872 endif7872: %t271 = load ptr, ptr %a1 %t272 = load %S.ast.Node, ptr %a2 %t273 = call { ptr, i64, i64 } @finch.docs.arrayMethods() call void @finch.gen.noteMethod(ptr %t271, %S.ast.Node %t272, { ptr, i64, i64 } %t273) %t274 = load ptr, ptr %a1 %t275 = load %S.ast.Node, ptr %a2 %t276 = load { ptr, i64, i64 }, ptr %a232 %t277 = load %S.ast.Type, ptr %a217 %t278 = call %S.gen.Val @finch.gen.arrayMethod(ptr %t274, %S.ast.Node %t275, { ptr, i64, i64 } %t276, %S.ast.Type %t277) ret %S.gen.Val %t278 endif7869: %t279 = getelementptr inbounds %S.ast.Type, ptr %a217, i32 0, i32 0 %t280 = load { ptr, i64, i64 }, ptr %t279 store { ptr, i64, i64 } %t280, ptr %a281 store { ptr, i64, i64 } { ptr @.str.5219, i64 3, i64 0 }, ptr %a282 %t283 = call i32 @finch_str_eq(ptr %a281, ptr %a282) %t284 = icmp ne i32 %t283, 0 br i1 %t284, label %then7881, label %endif7883 then7881: %t285 = getelementptr inbounds %S.gen.Ref, ptr %a210, i32 0, i32 2 %t286 = load %S.gen.Val, ptr %t285 store %S.gen.Val %t286, ptr %a287 call void @finch.copy.S_gen_Val(ptr %a288, ptr %a287) %t289 = load %S.gen.Val, ptr %a288 store %S.gen.Val %t289, ptr %a290 %t291 = getelementptr inbounds %S.gen.Ref, ptr %a210, i32 0, i32 0 %t292 = load i1, ptr %t291 br i1 %t292, label %then7884, label %endif7886 then7884: %t293 = load ptr, ptr %a1 %t294 = getelementptr inbounds %S.gen.Ref, ptr %a210, i32 0, i32 1 %t295 = getelementptr inbounds %S.gen.Place, ptr %t294, i32 0, i32 0 %t296 = load { ptr, i64, i64 }, ptr %t295 %t297 = call { ptr, i64, i64 } @finch.gen.load(ptr %t293, { ptr, i64, i64 } { ptr @.str.5220, i64 17, i64 0 }, { ptr, i64, i64 } %t296) %t298 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t297, 0 %t299 = load %S.ast.Type, ptr %a217 store %S.ast.Type %t299, ptr %a300 call void @finch.copy.S_ast_Type(ptr %a301, ptr %a300) %t302 = load %S.ast.Type, ptr %a301 %t303 = insertvalue %S.gen.Val %t298, %S.ast.Type %t302, 1 store %S.gen.Val %t303, ptr %a290 br label %endif7886 endif7886: %t304 = load ptr, ptr %a1 %t305 = load %S.ast.Node, ptr %a2 %t306 = call { ptr, i64, i64 } @finch.docs.strMethods() call void @finch.gen.noteMethod(ptr %t304, %S.ast.Node %t305, { ptr, i64, i64 } %t306) %t307 = load ptr, ptr %a1 %t308 = load %S.ast.Node, ptr %a2 %t309 = load ptr, ptr %a1 %t310 = load %S.gen.Val, ptr %a290 %t311 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t309, %S.gen.Val %t310) %t312 = call %S.gen.Val @finch.gen.strMethod(ptr %t307, %S.ast.Node %t308, { ptr, i64, i64 } %t311) ret %S.gen.Val %t312 endif7883: %t313 = getelementptr inbounds %S.ast.Type, ptr %a217, i32 0, i32 0 %t314 = load { ptr, i64, i64 }, ptr %t313 store { ptr, i64, i64 } %t314, ptr %a315 store { ptr, i64, i64 } { ptr @.str.5221, i64 3, i64 0 }, ptr %a316 %t317 = call i32 @finch_str_eq(ptr %a315, ptr %a316) %t318 = icmp ne i32 %t317, 0 br i1 %t318, label %then7887, label %endif7889 then7887: store { ptr, i64, i64 } { ptr @.str.5222, i64 0, i64 0 }, ptr %a319 %t320 = getelementptr inbounds %S.gen.Ref, ptr %a210, i32 0, i32 0 %t321 = load i1, ptr %t320 br i1 %t321, label %then7890, label %else7891 then7890: %t322 = getelementptr inbounds %S.gen.Ref, ptr %a210, i32 0, i32 1 %t323 = getelementptr inbounds %S.gen.Place, ptr %t322, i32 0, i32 0 %t324 = load { ptr, i64, i64 }, ptr %t323 store { ptr, i64, i64 } %t324, ptr %a325 call void @finch_str_copy(ptr %a326, ptr %a325) %t327 = load { ptr, i64, i64 }, ptr %a326 store { ptr, i64, i64 } %t327, ptr %a319 br label %endif7892 else7891: %t328 = getelementptr inbounds { ptr, i64, i64 }, ptr %a188, i32 0, i32 1 %t329 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t330 = load { ptr, i64, i64 }, ptr %t329 store i64 -1, ptr %a331 %t332 = load i64, ptr %t328 %t333 = load ptr, ptr %a188 store i64 0, ptr %a334 br label %find.cond7893 find.cond7893: %t335 = load i64, ptr %a334 %t336 = icmp slt i64 %t335, %t332 br i1 %t336, label %find.body7894, label %find.end7897 find.body7894: %t337 = getelementptr inbounds { ptr, i64, i64 }, ptr %t333, i64 %t335 %t338 = load { ptr, i64, i64 }, ptr %t337 store { ptr, i64, i64 } %t338, ptr %a339 store { ptr, i64, i64 } %t330, ptr %a340 %t341 = call i32 @finch_str_eq(ptr %a339, ptr %a340) %t342 = icmp ne i32 %t341, 0 br i1 %t342, label %find.hit7895, label %find.next7896 find.hit7895: store i64 %t335, ptr %a331 br label %find.end7897 find.next7896: %t343 = add i64 %t335, 1 store i64 %t343, ptr %a334 br label %find.cond7893 find.end7897: %t344 = load i64, ptr %a331 %t345 = icmp sge i64 %t344, 0 br i1 %t345, label %then7898, label %endif7900 then7898: %t346 = load ptr, ptr %a1 %t347 = load %S.ast.Node, ptr %a2 %t348 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t349 = load { ptr, i64, i64 }, ptr %t348 store { ptr, i64, i64 } %t349, ptr %a351 store { ptr, i64, i64 } { ptr @.str.5223, i64 61, i64 0 }, ptr %a352 call void @finch_str_concat(ptr %a350, ptr %a351, ptr %a352) %t353 = load { ptr, i64, i64 }, ptr %a350 call void @finch.gen.fail(ptr %t346, %S.ast.Node %t347, { ptr, i64, i64 } %t353) br label %endif7900 endif7900: %t354 = load ptr, ptr %a1 %t355 = getelementptr inbounds %S.gen.Ref, ptr %a210, i32 0, i32 2 %t356 = load %S.gen.Val, ptr %t355 %t357 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t354, %S.gen.Val %t356) store { ptr, i64, i64 } %t357, ptr %a319 br label %endif7892 endif7892: %t358 = load ptr, ptr %a1 %t359 = load %S.ast.Node, ptr %a2 %t360 = call { ptr, i64, i64 } @finch.docs.mapMethods() call void @finch.gen.noteMethod(ptr %t358, %S.ast.Node %t359, { ptr, i64, i64 } %t360) %t361 = load ptr, ptr %a1 %t362 = load %S.ast.Node, ptr %a2 %t363 = load { ptr, i64, i64 }, ptr %a319 %t364 = load %S.ast.Type, ptr %a217 %t365 = call %S.gen.Val @finch.gen.mapMethod(ptr %t361, %S.ast.Node %t362, { ptr, i64, i64 } %t363, %S.ast.Type %t364) ret %S.gen.Val %t365 endif7889: %t366 = load %S.ast.Type, ptr %a217 store %S.ast.Type %t366, ptr %a367 call void @finch.copy.S_ast_Type(ptr %a368, ptr %a367) %t369 = load %S.ast.Type, ptr %a368 store %S.ast.Type %t369, ptr %a370 store { ptr, i64, i64 } { ptr @.str.5224, i64 0, i64 0 }, ptr %a371 %t372 = getelementptr inbounds %S.ast.Type, ptr %a217, i32 0, i32 0 %t373 = load { ptr, i64, i64 }, ptr %t372 store { ptr, i64, i64 } %t373, ptr %a374 store { ptr, i64, i64 } { ptr @.str.5225, i64 3, i64 0 }, ptr %a375 %t376 = call i32 @finch_str_eq(ptr %a374, ptr %a375) %t377 = icmp ne i32 %t376, 0 br label %logic.from7901 logic.from7901: br i1 %t377, label %logic.rhs7902, label %logic.end7903 logic.rhs7902: %t378 = getelementptr inbounds %S.ast.Type, ptr %a217, i32 0, i32 1 %t379 = getelementptr inbounds { ptr, i64, i64 }, ptr %t378, i32 0, i32 1 %t380 = load i64, ptr %t379 %t381 = icmp sgt i64 %t380, 0 br label %logic.rend7904 logic.rend7904: br label %logic.end7903 logic.end7903: %t382 = phi i1 [ false, %logic.from7901 ], [ %t381, %logic.rend7904 ] br label %logic.from7905 logic.from7905: br i1 %t382, label %logic.rhs7906, label %logic.end7907 logic.rhs7906: %t383 = getelementptr inbounds %S.ast.Type, ptr %a217, i32 0, i32 1 %t384 = load { ptr, i64, i64 }, ptr %t383 %t385 = extractvalue { ptr, i64, i64 } %t384, 1 %t386 = icmp uge i64 0, %t385 br i1 %t386, label %range7908, label %inrange7909 range7908: call void @finch_panic_index(ptr @.str.5226, i64 4717, i64 0, i64 %t385) unreachable inrange7909: %t387 = extractvalue { ptr, i64, i64 } %t384, 0 %t388 = getelementptr inbounds %S.ast.Type, ptr %t387, i64 0 %t389 = getelementptr inbounds %S.ast.Type, ptr %t388, i32 0, i32 0 %t390 = load { ptr, i64, i64 }, ptr %t389 store { ptr, i64, i64 } %t390, ptr %a391 store { ptr, i64, i64 } { ptr @.str.5227, i64 6, i64 0 }, ptr %a392 %t393 = call i32 @finch_str_eq(ptr %a391, ptr %a392) %t394 = icmp ne i32 %t393, 0 br label %logic.rend7910 logic.rend7910: br label %logic.end7907 logic.end7907: %t395 = phi i1 [ false, %logic.from7905 ], [ %t394, %logic.rend7910 ] br i1 %t395, label %then7911, label %else7912 then7911: %t396 = getelementptr inbounds %S.gen.Ref, ptr %a210, i32 0, i32 2 %t397 = getelementptr inbounds %S.gen.Val, ptr %t396, i32 0, i32 0 %t398 = load { ptr, i64, i64 }, ptr %t397 store { ptr, i64, i64 } %t398, ptr %a399 call void @finch_str_copy(ptr %a400, ptr %a399) %t401 = load { ptr, i64, i64 }, ptr %a400 store { ptr, i64, i64 } %t401, ptr %a402 %t403 = getelementptr inbounds %S.gen.Ref, ptr %a210, i32 0, i32 0 %t404 = load i1, ptr %t403 br i1 %t404, label %then7914, label %endif7916 then7914: %t405 = load ptr, ptr %a1 %t406 = getelementptr inbounds %S.gen.Ref, ptr %a210, i32 0, i32 1 %t407 = getelementptr inbounds %S.gen.Place, ptr %t406, i32 0, i32 0 %t408 = load { ptr, i64, i64 }, ptr %t407 %t409 = call { ptr, i64, i64 } @finch.gen.load(ptr %t405, { ptr, i64, i64 } { ptr @.str.5228, i64 3, i64 0 }, { ptr, i64, i64 } %t408) store { ptr, i64, i64 } %t409, ptr %a402 br label %endif7916 endif7916: %t410 = load ptr, ptr %a1 %t411 = load ptr, ptr %a1 %t412 = load { ptr, i64, i64 }, ptr %a402 store { ptr, i64, i64 } { ptr @.str.5229, i64 12, i64 0 }, ptr %a414 store { ptr, i64, i64 } %t412, ptr %a415 call void @finch_str_concat(ptr %a413, ptr %a414, ptr %a415) %t416 = load { ptr, i64, i64 }, ptr %a413 store { ptr, i64, i64 } %t416, ptr %a418 store { ptr, i64, i64 } { ptr @.str.5230, i64 6, i64 0 }, ptr %a419 call void @finch_str_concat(ptr %a417, ptr %a418, ptr %a419) %t420 = load { ptr, i64, i64 }, ptr %a417 %t421 = call { ptr, i64, i64 } @finch.gen.op(ptr %t411, { ptr, i64, i64 } %t420) %t422 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t423 = load { ptr, i64, i64 }, ptr %t422 store { ptr, i64, i64 } { ptr @.str.5231, i64 8, i64 0 }, ptr %a425 store { ptr, i64, i64 } %t423, ptr %a426 call void @finch_str_concat(ptr %a424, ptr %a425, ptr %a426) %t427 = load { ptr, i64, i64 }, ptr %a424 store { ptr, i64, i64 } %t427, ptr %a429 store { ptr, i64, i64 } { ptr @.str.5232, i64 20, i64 0 }, ptr %a430 call void @finch_str_concat(ptr %a428, ptr %a429, ptr %a430) %t431 = load { ptr, i64, i64 }, ptr %a428 %t432 = load %S.ast.Node, ptr %a2 call void @finch.gen.panicIf(ptr %t410, { ptr, i64, i64 } %t421, { ptr, i64, i64 } %t431, %S.ast.Node %t432) %t433 = getelementptr inbounds %S.ast.Type, ptr %a217, i32 0, i32 1 %t434 = load { ptr, i64, i64 }, ptr %t433 %t435 = extractvalue { ptr, i64, i64 } %t434, 1 %t436 = icmp uge i64 0, %t435 br i1 %t436, label %range7917, label %inrange7918 range7917: call void @finch_panic_index(ptr @.str.5233, i64 4723, i64 0, i64 %t435) unreachable inrange7918: %t437 = extractvalue { ptr, i64, i64 } %t434, 0 %t438 = getelementptr inbounds %S.ast.Type, ptr %t437, i64 0 %t439 = load %S.ast.Type, ptr %t438 store %S.ast.Type %t439, ptr %a440 call void @finch.copy.S_ast_Type(ptr %a441, ptr %a440) %t442 = load %S.ast.Type, ptr %a441 store %S.ast.Type %t442, ptr %a370 %t443 = load { ptr, i64, i64 }, ptr %a402 store { ptr, i64, i64 } %t443, ptr %a444 call void @finch_str_copy(ptr %a445, ptr %a444) %t446 = load { ptr, i64, i64 }, ptr %a445 store { ptr, i64, i64 } %t446, ptr %a371 br label %endif7913 else7912: %t447 = getelementptr inbounds %S.ast.Type, ptr %a217, i32 0, i32 0 %t448 = load { ptr, i64, i64 }, ptr %t447 store { ptr, i64, i64 } %t448, ptr %a449 store { ptr, i64, i64 } { ptr @.str.5234, i64 6, i64 0 }, ptr %a450 %t451 = call i32 @finch_str_eq(ptr %a449, ptr %a450) %t452 = icmp ne i32 %t451, 0 br label %logic.from7919 logic.from7919: br i1 %t452, label %logic.end7921, label %logic.rhs7920 logic.rhs7920: %t453 = getelementptr inbounds %S.ast.Type, ptr %a217, i32 0, i32 0 %t454 = load { ptr, i64, i64 }, ptr %t453 store { ptr, i64, i64 } %t454, ptr %a455 store { ptr, i64, i64 } { ptr @.str.5235, i64 4, i64 0 }, ptr %a456 %t457 = call i32 @finch_str_eq(ptr %a455, ptr %a456) %t458 = icmp ne i32 %t457, 0 br label %logic.rend7922 logic.rend7922: br label %logic.end7921 logic.end7921: %t459 = phi i1 [ true, %logic.from7919 ], [ %t458, %logic.rend7922 ] br i1 %t459, label %then7923, label %endif7925 then7923: %t460 = getelementptr inbounds %S.gen.Ref, ptr %a210, i32 0, i32 0 %t461 = load i1, ptr %t460 br i1 %t461, label %then7926, label %else7927 then7926: %t462 = getelementptr inbounds %S.gen.Ref, ptr %a210, i32 0, i32 1 %t463 = getelementptr inbounds %S.gen.Place, ptr %t462, i32 0, i32 0 %t464 = load { ptr, i64, i64 }, ptr %t463 store { ptr, i64, i64 } %t464, ptr %a465 call void @finch_str_copy(ptr %a466, ptr %a465) %t467 = load { ptr, i64, i64 }, ptr %a466 store { ptr, i64, i64 } %t467, ptr %a371 br label %endif7928 else7927: %t468 = load ptr, ptr %a1 %t469 = getelementptr inbounds %S.gen.Ref, ptr %a210, i32 0, i32 2 %t470 = load %S.gen.Val, ptr %t469 %t471 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t468, %S.gen.Val %t470) store { ptr, i64, i64 } %t471, ptr %a371 br label %endif7928 endif7928: br label %endif7925 endif7925: br label %endif7913 endif7913: %t472 = getelementptr inbounds %S.ast.Type, ptr %a370, i32 0, i32 0 %t473 = load { ptr, i64, i64 }, ptr %t472 store { ptr, i64, i64 } %t473, ptr %a474 store { ptr, i64, i64 } { ptr @.str.5236, i64 6, i64 0 }, ptr %a475 %t476 = call i32 @finch_str_eq(ptr %a474, ptr %a475) %t477 = icmp ne i32 %t476, 0 br label %logic.from7929 logic.from7929: br i1 %t477, label %logic.end7931, label %logic.rhs7930 logic.rhs7930: %t478 = getelementptr inbounds %S.ast.Type, ptr %a370, i32 0, i32 0 %t479 = load { ptr, i64, i64 }, ptr %t478 store { ptr, i64, i64 } %t479, ptr %a480 store { ptr, i64, i64 } { ptr @.str.5237, i64 4, i64 0 }, ptr %a481 %t482 = call i32 @finch_str_eq(ptr %a480, ptr %a481) %t483 = icmp ne i32 %t482, 0 br label %logic.rend7932 logic.rend7932: br label %logic.end7931 logic.end7931: %t484 = phi i1 [ true, %logic.from7929 ], [ %t483, %logic.rend7932 ] br i1 %t484, label %then7933, label %endif7935 then7933: %t485 = load ptr, ptr %a1 %t486 = getelementptr inbounds %S.ast.Type, ptr %a370, i32 0, i32 3 %t487 = load { ptr, i64, i64 }, ptr %t486 %t488 = getelementptr inbounds %S.ast.Type, ptr %a370, i32 0, i32 2 %t489 = load { ptr, i64, i64 }, ptr %t488 %t490 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t491 = load { ptr, i64, i64 }, ptr %t490 %t492 = call i64 @finch.gen.findMethod(ptr %t485, { ptr, i64, i64 } %t487, { ptr, i64, i64 } %t489, { ptr, i64, i64 } %t491) store i64 %t492, ptr %a493 %t494 = load i64, ptr %a493 %t495 = icmp slt i64 %t494, 0 br label %logic.from7936 logic.from7936: br i1 %t495, label %logic.rhs7937, label %logic.end7938 logic.rhs7937: %t496 = getelementptr inbounds %S.ast.Type, ptr %a370, i32 0, i32 0 %t497 = load { ptr, i64, i64 }, ptr %t496 store { ptr, i64, i64 } %t497, ptr %a498 store { ptr, i64, i64 } { ptr @.str.5238, i64 6, i64 0 }, ptr %a499 %t500 = call i32 @finch_str_eq(ptr %a498, ptr %a499) %t501 = icmp ne i32 %t500, 0 br label %logic.rend7939 logic.rend7939: br label %logic.end7938 logic.end7938: %t502 = phi i1 [ false, %logic.from7936 ], [ %t501, %logic.rend7939 ] br i1 %t502, label %then7940, label %endif7942 then7940: %t503 = load ptr, ptr %a1 %t504 = getelementptr inbounds %S.ast.Type, ptr %a370, i32 0, i32 3 %t505 = load { ptr, i64, i64 }, ptr %t504 %t506 = getelementptr inbounds %S.ast.Type, ptr %a370, i32 0, i32 2 %t507 = load { ptr, i64, i64 }, ptr %t506 %t508 = call i64 @finch.gen.findStruct(ptr %t503, { ptr, i64, i64 } %t505, { ptr, i64, i64 } %t507) store i64 %t508, ptr %a509 %t510 = load ptr, ptr %a1 %t511 = icmp eq ptr %t510, null br i1 %t511, label %panic7943, label %ok7944 panic7943: call void @finch_panic(ptr @.str.5239, i64 4736, ptr @.str.5240) unreachable ok7944: %t512 = getelementptr inbounds %S.gen.Gen, ptr %t510, i32 0, i32 15 %t513 = load i64, ptr %a509 %t514 = load { ptr, i64, i64 }, ptr %t512 %t515 = extractvalue { ptr, i64, i64 } %t514, 1 %t516 = icmp uge i64 %t513, %t515 br i1 %t516, label %range7945, label %inrange7946 range7945: call void @finch_panic_index(ptr @.str.5241, i64 4736, i64 %t513, i64 %t515) unreachable inrange7946: %t517 = extractvalue { ptr, i64, i64 } %t514, 0 %t518 = getelementptr inbounds %S.gen.StructDef, ptr %t517, i64 %t513 %t519 = getelementptr inbounds %S.gen.StructDef, ptr %t518, i32 0, i32 5 %t520 = getelementptr inbounds { ptr, i64, i64 }, ptr %t519, i32 0, i32 1 %t521 = load i64, ptr %t520 %t522 = icmp sgt i64 %t521, 0 br i1 %t522, label %then7947, label %endif7949 then7947: %t523 = load ptr, ptr %a1 %t524 = getelementptr inbounds %S.ast.Type, ptr %a370, i32 0, i32 3 %t525 = load { ptr, i64, i64 }, ptr %t524 %t526 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t527 = load { ptr, i64, i64 }, ptr %t526 %t528 = load ptr, ptr %a1 %t529 = icmp eq ptr %t528, null br i1 %t529, label %panic7950, label %ok7951 panic7950: call void @finch_panic(ptr @.str.5242, i64 4737, ptr @.str.5243) unreachable ok7951: %t530 = getelementptr inbounds %S.gen.Gen, ptr %t528, i32 0, i32 15 %t531 = load i64, ptr %a509 %t532 = load { ptr, i64, i64 }, ptr %t530 %t533 = extractvalue { ptr, i64, i64 } %t532, 1 %t534 = icmp uge i64 %t531, %t533 br i1 %t534, label %range7952, label %inrange7953 range7952: call void @finch_panic_index(ptr @.str.5244, i64 4737, i64 %t531, i64 %t533) unreachable inrange7953: %t535 = extractvalue { ptr, i64, i64 } %t532, 0 %t536 = getelementptr inbounds %S.gen.StructDef, ptr %t535, i64 %t531 %t537 = getelementptr inbounds %S.gen.StructDef, ptr %t536, i32 0, i32 5 %t538 = load { ptr, i64, i64 }, ptr %t537 %t539 = call i64 @finch.gen.findTemplate(ptr %t523, { ptr, i64, i64 } %t525, { ptr, i64, i64 } %t527, { ptr, i64, i64 } %t538, i1 false) store i64 %t539, ptr %a540 %t541 = load i64, ptr %a540 %t542 = icmp sge i64 %t541, 0 br i1 %t542, label %then7954, label %endif7956 then7954: %t543 = load ptr, ptr %a1 %t544 = load i64, ptr %a540 %t545 = load ptr, ptr %a1 %t546 = icmp eq ptr %t545, null br i1 %t546, label %panic7957, label %ok7958 panic7957: call void @finch_panic(ptr @.str.5245, i64 4739, ptr @.str.5246) unreachable ok7958: %t547 = getelementptr inbounds %S.gen.Gen, ptr %t545, i32 0, i32 15 %t548 = load i64, ptr %a509 %t549 = load { ptr, i64, i64 }, ptr %t547 %t550 = extractvalue { ptr, i64, i64 } %t549, 1 %t551 = icmp uge i64 %t548, %t550 br i1 %t551, label %range7959, label %inrange7960 range7959: call void @finch_panic_index(ptr @.str.5247, i64 4739, i64 %t548, i64 %t550) unreachable inrange7960: %t552 = extractvalue { ptr, i64, i64 } %t549, 0 %t553 = getelementptr inbounds %S.gen.StructDef, ptr %t552, i64 %t548 %t554 = getelementptr inbounds %S.gen.StructDef, ptr %t553, i32 0, i32 7 %t555 = load { ptr, i64, i64 }, ptr %t554 %t556 = load %S.ast.Type, ptr %a370 %t557 = load %S.ast.Node, ptr %a2 %t558 = call i64 @finch.gen.instFn(ptr %t543, i64 %t544, { ptr, i64, i64 } %t555, %S.ast.Type %t556, %S.ast.Node %t557) store i64 %t558, ptr %a493 br label %endif7956 endif7956: br label %endif7949 endif7949: br label %endif7942 endif7942: %t559 = load i64, ptr %a493 %t560 = icmp slt i64 %t559, 0 br i1 %t560, label %then7961, label %endif7963 then7961: store { ptr, i64, i64 } zeroinitializer, ptr %a561 %t562 = load ptr, ptr %a1 %t563 = icmp eq ptr %t562, null br i1 %t563, label %panic7964, label %ok7965 panic7964: call void @finch_panic(ptr @.str.5248, i64 4745, ptr @.str.5249) unreachable ok7965: %t564 = getelementptr inbounds %S.gen.Gen, ptr %t562, i32 0, i32 14 store i64 0, ptr %a565 br label %each.cond7966 each.cond7966: %t566 = getelementptr inbounds { ptr, i64, i64 }, ptr %t564, i32 0, i32 1 %t567 = load i64, ptr %t566 %t568 = load i64, ptr %a565 %t569 = icmp slt i64 %t568, %t567 br i1 %t569, label %each.body7967, label %each.end7969 each.body7967: %t570 = load ptr, ptr %t564 %t571 = getelementptr inbounds %S.gen.FnSig, ptr %t570, i64 %t568 %t572 = load %S.gen.FnSig, ptr %t571 store %S.gen.FnSig %t572, ptr %a573 %t574 = getelementptr inbounds %S.gen.FnSig, ptr %a573, i32 0, i32 2 %t575 = load { ptr, i64, i64 }, ptr %t574 %t576 = getelementptr inbounds %S.ast.Type, ptr %a370, i32 0, i32 2 %t577 = load { ptr, i64, i64 }, ptr %t576 store { ptr, i64, i64 } %t575, ptr %a578 store { ptr, i64, i64 } %t577, ptr %a579 %t580 = call i32 @finch_str_eq(ptr %a578, ptr %a579) %t581 = icmp ne i32 %t580, 0 br label %logic.from7970 logic.from7970: br i1 %t581, label %logic.rhs7971, label %logic.end7972 logic.rhs7971: %t582 = getelementptr inbounds %S.gen.FnSig, ptr %a573, i32 0, i32 3 %t583 = load { ptr, i64, i64 }, ptr %t582 %t584 = getelementptr inbounds %S.ast.Type, ptr %a370, i32 0, i32 3 %t585 = load { ptr, i64, i64 }, ptr %t584 store { ptr, i64, i64 } %t583, ptr %a586 store { ptr, i64, i64 } %t585, ptr %a587 %t588 = call i32 @finch_str_eq(ptr %a586, ptr %a587) %t589 = icmp ne i32 %t588, 0 br label %logic.rend7973 logic.rend7973: br label %logic.end7972 logic.end7972: %t590 = phi i1 [ false, %logic.from7970 ], [ %t589, %logic.rend7973 ] br i1 %t590, label %then7974, label %endif7976 then7974: %t591 = getelementptr inbounds { ptr, i64, i64 }, ptr %a561, i32 0, i32 1 %t592 = getelementptr inbounds %S.gen.FnSig, ptr %a573, i32 0, i32 1 %t593 = load { ptr, i64, i64 }, ptr %t592 store { ptr, i64, i64 } %t593, ptr %a594 call void @finch_str_copy(ptr %a595, ptr %a594) %t596 = load { ptr, i64, i64 }, ptr %a595 %t597 = load i64, ptr %t591 %t598 = add i64 %t597, 1 call void @finch_arr_reserve(ptr %a561, i64 %t598, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t599 = load ptr, ptr %a561 %t600 = getelementptr inbounds { ptr, i64, i64 }, ptr %t599, i64 %t597 store { ptr, i64, i64 } %t596, ptr %t600 store i64 %t598, ptr %t591 br label %endif7976 endif7976: br label %each.step7968 each.step7968: %t601 = load i64, ptr %a565 %t602 = add i64 %t601, 1 store i64 %t602, ptr %a565 br label %each.cond7966 each.end7969: %t603 = getelementptr inbounds { ptr, i64, i64 }, ptr %a561, i32 0, i32 1 %t604 = load i64, ptr %t603 %t605 = icmp eq i64 %t604, 0 br i1 %t605, label %then7977, label %endif7979 then7977: %t606 = load ptr, ptr %a1 %t607 = load %S.ast.Node, ptr %a2 %t608 = getelementptr inbounds %S.ast.Type, ptr %a370, i32 0, i32 0 %t609 = load { ptr, i64, i64 }, ptr %t608 store { ptr, i64, i64 } { ptr @.str.5250, i64 4, i64 0 }, ptr %a611 store { ptr, i64, i64 } %t609, ptr %a612 call void @finch_str_concat(ptr %a610, ptr %a611, ptr %a612) %t613 = load { ptr, i64, i64 }, ptr %a610 store { ptr, i64, i64 } %t613, ptr %a615 store { ptr, i64, i64 } { ptr @.str.5251, i64 1, i64 0 }, ptr %a616 call void @finch_str_concat(ptr %a614, ptr %a615, ptr %a616) %t617 = load { ptr, i64, i64 }, ptr %a614 %t618 = load %S.ast.Type, ptr %a370 %t619 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t618) store { ptr, i64, i64 } %t617, ptr %a621 store { ptr, i64, i64 } %t619, ptr %a622 call void @finch_str_concat(ptr %a620, ptr %a621, ptr %a622) %t623 = load { ptr, i64, i64 }, ptr %a620 store { ptr, i64, i64 } %t623, ptr %a625 store { ptr, i64, i64 } { ptr @.str.5252, i64 34, i64 0 }, ptr %a626 call void @finch_str_concat(ptr %a624, ptr %a625, ptr %a626) %t627 = load { ptr, i64, i64 }, ptr %a624 %t628 = getelementptr inbounds %S.ast.Type, ptr %a370, i32 0, i32 2 %t629 = load { ptr, i64, i64 }, ptr %t628 store { ptr, i64, i64 } %t627, ptr %a631 store { ptr, i64, i64 } %t629, ptr %a632 call void @finch_str_concat(ptr %a630, ptr %a631, ptr %a632) %t633 = load { ptr, i64, i64 }, ptr %a630 store { ptr, i64, i64 } %t633, ptr %a635 store { ptr, i64, i64 } { ptr @.str.5253, i64 1, i64 0 }, ptr %a636 call void @finch_str_concat(ptr %a634, ptr %a635, ptr %a636) %t637 = load { ptr, i64, i64 }, ptr %a634 %t638 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t639 = load { ptr, i64, i64 }, ptr %t638 store { ptr, i64, i64 } %t637, ptr %a641 store { ptr, i64, i64 } %t639, ptr %a642 call void @finch_str_concat(ptr %a640, ptr %a641, ptr %a642) %t643 = load { ptr, i64, i64 }, ptr %a640 store { ptr, i64, i64 } %t643, ptr %a645 store { ptr, i64, i64 } { ptr @.str.5254, i64 13, i64 0 }, ptr %a646 call void @finch_str_concat(ptr %a644, ptr %a645, ptr %a646) %t647 = load { ptr, i64, i64 }, ptr %a644 call void @finch.gen.fail(ptr %t606, %S.ast.Node %t607, { ptr, i64, i64 } %t647) br label %endif7979 endif7979: %t648 = load ptr, ptr %a1 %t649 = load %S.ast.Node, ptr %a2 %t650 = getelementptr inbounds %S.ast.Type, ptr %a370, i32 0, i32 0 %t651 = load { ptr, i64, i64 }, ptr %t650 store { ptr, i64, i64 } { ptr @.str.5255, i64 4, i64 0 }, ptr %a653 store { ptr, i64, i64 } %t651, ptr %a654 call void @finch_str_concat(ptr %a652, ptr %a653, ptr %a654) %t655 = load { ptr, i64, i64 }, ptr %a652 store { ptr, i64, i64 } %t655, ptr %a657 store { ptr, i64, i64 } { ptr @.str.5256, i64 1, i64 0 }, ptr %a658 call void @finch_str_concat(ptr %a656, ptr %a657, ptr %a658) %t659 = load { ptr, i64, i64 }, ptr %a656 %t660 = load %S.ast.Type, ptr %a370 %t661 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t660) store { ptr, i64, i64 } %t659, ptr %a663 store { ptr, i64, i64 } %t661, ptr %a664 call void @finch_str_concat(ptr %a662, ptr %a663, ptr %a664) %t665 = load { ptr, i64, i64 }, ptr %a662 store { ptr, i64, i64 } %t665, ptr %a667 store { ptr, i64, i64 } { ptr @.str.5257, i64 16, i64 0 }, ptr %a668 call void @finch_str_concat(ptr %a666, ptr %a667, ptr %a668) %t669 = load { ptr, i64, i64 }, ptr %a666 %t670 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t671 = load { ptr, i64, i64 }, ptr %t670 store { ptr, i64, i64 } %t669, ptr %a673 store { ptr, i64, i64 } %t671, ptr %a674 call void @finch_str_concat(ptr %a672, ptr %a673, ptr %a674) %t675 = load { ptr, i64, i64 }, ptr %a672 store { ptr, i64, i64 } %t675, ptr %a677 store { ptr, i64, i64 } { ptr @.str.5258, i64 11, i64 0 }, ptr %a678 call void @finch_str_concat(ptr %a676, ptr %a677, ptr %a678) %t679 = load { ptr, i64, i64 }, ptr %a676 %t680 = getelementptr inbounds { ptr, i64, i64 }, ptr %a561, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.5259, i64 2, i64 0 }, ptr %a681 call void @finch_str_join(ptr %a682, ptr %a561, ptr %a681) %t683 = load { ptr, i64, i64 }, ptr %a682 store { ptr, i64, i64 } %t679, ptr %a685 store { ptr, i64, i64 } %t683, ptr %a686 call void @finch_str_concat(ptr %a684, ptr %a685, ptr %a686) %t687 = load { ptr, i64, i64 }, ptr %a684 store { ptr, i64, i64 } %t687, ptr %a689 store { ptr, i64, i64 } { ptr @.str.5260, i64 1, i64 0 }, ptr %a690 call void @finch_str_concat(ptr %a688, ptr %a689, ptr %a690) %t691 = load { ptr, i64, i64 }, ptr %a688 call void @finch.gen.fail(ptr %t648, %S.ast.Node %t649, { ptr, i64, i64 } %t691) br label %endif7963 endif7963: %t692 = load ptr, ptr %a1 %t693 = icmp eq ptr %t692, null br i1 %t693, label %panic7980, label %ok7981 panic7980: call void @finch_panic(ptr @.str.5261, i64 4756, ptr @.str.5262) unreachable ok7981: %t694 = getelementptr inbounds %S.gen.Gen, ptr %t692, i32 0, i32 14 %t695 = load i64, ptr %a493 %t696 = load { ptr, i64, i64 }, ptr %t694 %t697 = extractvalue { ptr, i64, i64 } %t696, 1 %t698 = icmp uge i64 %t695, %t697 br i1 %t698, label %range7982, label %inrange7983 range7982: call void @finch_panic_index(ptr @.str.5263, i64 4756, i64 %t695, i64 %t697) unreachable inrange7983: %t699 = extractvalue { ptr, i64, i64 } %t696, 0 %t700 = getelementptr inbounds %S.gen.FnSig, ptr %t699, i64 %t695 %t701 = getelementptr inbounds %S.gen.FnSig, ptr %t700, i32 0, i32 10 %t702 = load i1, ptr %t701 br label %logic.from7984 logic.from7984: br i1 %t702, label %logic.rhs7985, label %logic.end7986 logic.rhs7985: %t703 = getelementptr inbounds %S.ast.Type, ptr %a217, i32 0, i32 0 %t704 = load { ptr, i64, i64 }, ptr %t703 store { ptr, i64, i64 } %t704, ptr %a705 store { ptr, i64, i64 } { ptr @.str.5264, i64 6, i64 0 }, ptr %a706 %t707 = call i32 @finch_str_eq(ptr %a705, ptr %a706) %t708 = icmp ne i32 %t707, 0 br label %logic.from7987 logic.from7987: br i1 %t708, label %logic.end7989, label %logic.rhs7988 logic.rhs7988: %t709 = getelementptr inbounds %S.ast.Type, ptr %a217, i32 0, i32 0 %t710 = load { ptr, i64, i64 }, ptr %t709 store { ptr, i64, i64 } %t710, ptr %a711 store { ptr, i64, i64 } { ptr @.str.5265, i64 4, i64 0 }, ptr %a712 %t713 = call i32 @finch_str_eq(ptr %a711, ptr %a712) %t714 = icmp ne i32 %t713, 0 br label %logic.rend7990 logic.rend7990: br label %logic.end7989 logic.end7989: %t715 = phi i1 [ true, %logic.from7987 ], [ %t714, %logic.rend7990 ] br label %logic.rend7991 logic.rend7991: br label %logic.end7986 logic.end7986: %t716 = phi i1 [ false, %logic.from7984 ], [ %t715, %logic.rend7991 ] br i1 %t716, label %then7992, label %endif7994 then7992: %t717 = getelementptr inbounds %S.gen.Ref, ptr %a210, i32 0, i32 0 %t718 = load i1, ptr %t717 %t719 = xor i1 %t718, true br i1 %t719, label %then7995, label %endif7997 then7995: %t720 = load ptr, ptr %a1 %t721 = load %S.ast.Node, ptr %a2 %t722 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t723 = load { ptr, i64, i64 }, ptr %t722 store { ptr, i64, i64 } %t723, ptr %a725 store { ptr, i64, i64 } { ptr @.str.5266, i64 28, i64 0 }, ptr %a726 call void @finch_str_concat(ptr %a724, ptr %a725, ptr %a726) %t727 = load { ptr, i64, i64 }, ptr %a724 %t728 = load %S.ast.Type, ptr %a370 %t729 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t728) store { ptr, i64, i64 } %t727, ptr %a731 store { ptr, i64, i64 } %t729, ptr %a732 call void @finch_str_concat(ptr %a730, ptr %a731, ptr %a732) %t733 = load { ptr, i64, i64 }, ptr %a730 store { ptr, i64, i64 } %t733, ptr %a735 store { ptr, i64, i64 } { ptr @.str.5267, i64 30, i64 0 }, ptr %a736 call void @finch_str_concat(ptr %a734, ptr %a735, ptr %a736) %t737 = load { ptr, i64, i64 }, ptr %a734 call void @finch.gen.fail(ptr %t720, %S.ast.Node %t721, { ptr, i64, i64 } %t737) br label %endif7997 endif7997: %t738 = load %S.ast.Node, ptr %a13 %t739 = call { ptr, i64, i64 } @finch.gen.rootVar(%S.ast.Node %t738) store { ptr, i64, i64 } %t739, ptr %a740 %t741 = getelementptr inbounds { ptr, i64, i64 }, ptr %a740, i32 0, i32 1 %t742 = load i64, ptr %t741 %t743 = icmp sgt i64 %t742, 0 br i1 %t743, label %then7998, label %endif8000 then7998: %t744 = load ptr, ptr %a1 %t745 = load { ptr, i64, i64 }, ptr %a740 %t746 = call i64 @finch.gen.lookup(ptr %t744, { ptr, i64, i64 } %t745) store i64 %t746, ptr %a747 %t748 = load i64, ptr %a747 %t749 = icmp sge i64 %t748, 0 br label %logic.from8001 logic.from8001: br i1 %t749, label %logic.rhs8002, label %logic.end8003 logic.rhs8002: %t750 = load ptr, ptr %a1 %t751 = load i64, ptr %a747 %t752 = call %S.gen.Var @finch.gen.varAt(ptr %t750, i64 %t751) %t753 = extractvalue %S.gen.Var %t752, 3 br label %logic.rend8004 logic.rend8004: br label %logic.end8003 logic.end8003: %t754 = phi i1 [ false, %logic.from8001 ], [ %t753, %logic.rend8004 ] br i1 %t754, label %then8005, label %endif8007 then8005: %t755 = load ptr, ptr %a1 %t756 = load %S.ast.Node, ptr %a2 %t757 = load { ptr, i64, i64 }, ptr %a740 store { ptr, i64, i64 } { ptr @.str.5268, i64 19, i64 0 }, ptr %a759 store { ptr, i64, i64 } %t757, ptr %a760 call void @finch_str_concat(ptr %a758, ptr %a759, ptr %a760) %t761 = load { ptr, i64, i64 }, ptr %a758 store { ptr, i64, i64 } %t761, ptr %a763 store { ptr, i64, i64 } { ptr @.str.5269, i64 18, i64 0 }, ptr %a764 call void @finch_str_concat(ptr %a762, ptr %a763, ptr %a764) %t765 = load { ptr, i64, i64 }, ptr %a762 call void @finch.gen.fail(ptr %t755, %S.ast.Node %t756, { ptr, i64, i64 } %t765) br label %endif8007 endif8007: br label %endif8000 endif8000: br label %endif7994 endif7994: %t766 = load ptr, ptr %a1 %t767 = load i64, ptr %a493 %t768 = load %S.ast.Node, ptr %a2 %t769 = load %S.ast.Type, ptr %a370 %t770 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t769) store { ptr, i64, i64 } %t770, ptr %a772 store { ptr, i64, i64 } { ptr @.str.5270, i64 1, i64 0 }, ptr %a773 call void @finch_str_concat(ptr %a771, ptr %a772, ptr %a773) %t774 = load { ptr, i64, i64 }, ptr %a771 %t775 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t776 = load { ptr, i64, i64 }, ptr %t775 store { ptr, i64, i64 } %t774, ptr %a778 store { ptr, i64, i64 } %t776, ptr %a779 call void @finch_str_concat(ptr %a777, ptr %a778, ptr %a779) %t780 = load { ptr, i64, i64 }, ptr %a777 %t781 = load { ptr, i64, i64 }, ptr %a371 %t782 = load %S.ast.Node, ptr %a13 %t783 = call { ptr, i64, i64 } @finch.gen.rootVar(%S.ast.Node %t782) %t784 = call %S.gen.Val @finch.gen.callFn(ptr %t766, i64 %t767, %S.ast.Node %t768, i64 1, { ptr, i64, i64 } %t780, { ptr, i64, i64 } %t781, { ptr, i64, i64 } %t783) ret %S.gen.Val %t784 endif7935: %t785 = load ptr, ptr %a1 %t786 = load %S.ast.Node, ptr %a2 %t787 = load %S.ast.Type, ptr %a217 %t788 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t787) store { ptr, i64, i64 } %t788, ptr %a790 store { ptr, i64, i64 } { ptr @.str.5271, i64 15, i64 0 }, ptr %a791 call void @finch_str_concat(ptr %a789, ptr %a790, ptr %a791) %t792 = load { ptr, i64, i64 }, ptr %a789 call void @finch.gen.fail(ptr %t785, %S.ast.Node %t786, { ptr, i64, i64 } %t792) ret %S.gen.Val zeroinitializer } define internal void @finch.gen.need(ptr %p0, %S.ast.Node %p1, i64 %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a3 = alloca i64, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 store i64 %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = load %S.ast.Node, ptr %a2 %t6 = load i64, ptr %a3 %t7 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t8 = load { ptr, i64, i64 }, ptr %t7 call void @finch.gen.checkArgs(ptr %t4, %S.ast.Node %t5, i64 1, i64 %t6, { ptr, i64, i64 } %t8) ret void } define internal %S.gen.Val @finch.gen.arrayMethod(ptr %p0, %S.ast.Node %p1, { ptr, i64, i64 } %p2, %S.ast.Type %p3) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca %S.ast.Type, align 16 %a12 = alloca %S.ast.Type, align 16 %a13 = alloca %S.ast.Type, align 16 %a15 = alloca %S.ast.Type, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca { ptr, i64, i64 }, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 %a106 = alloca { ptr, i64, i64 }, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a110 = alloca { ptr, i64, i64 }, align 16 %a111 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 %a117 = alloca { ptr, i64, i64 }, align 16 %a123 = alloca { ptr, i64, i64 }, align 16 %a124 = alloca { ptr, i64, i64 }, align 16 %a125 = alloca { ptr, i64, i64 }, align 16 %a127 = alloca { ptr, i64, i64 }, align 16 %a128 = alloca { ptr, i64, i64 }, align 16 %a129 = alloca { ptr, i64, i64 }, align 16 %a132 = alloca { ptr, i64, i64 }, align 16 %a133 = alloca { ptr, i64, i64 }, align 16 %a134 = alloca { ptr, i64, i64 }, align 16 %a136 = alloca { ptr, i64, i64 }, align 16 %a137 = alloca { ptr, i64, i64 }, align 16 %a138 = alloca { ptr, i64, i64 }, align 16 %a141 = alloca { ptr, i64, i64 }, align 16 %a142 = alloca { ptr, i64, i64 }, align 16 %a143 = alloca { ptr, i64, i64 }, align 16 %a152 = alloca { ptr, i64, i64 }, align 16 %a153 = alloca { ptr, i64, i64 }, align 16 %a161 = alloca { ptr, i64, i64 }, align 16 %a165 = alloca { ptr, i64, i64 }, align 16 %a166 = alloca { ptr, i64, i64 }, align 16 %a167 = alloca { ptr, i64, i64 }, align 16 %a169 = alloca { ptr, i64, i64 }, align 16 %a170 = alloca { ptr, i64, i64 }, align 16 %a171 = alloca { ptr, i64, i64 }, align 16 %a177 = alloca { ptr, i64, i64 }, align 16 %a178 = alloca { ptr, i64, i64 }, align 16 %a179 = alloca { ptr, i64, i64 }, align 16 %a181 = alloca { ptr, i64, i64 }, align 16 %a182 = alloca { ptr, i64, i64 }, align 16 %a183 = alloca { ptr, i64, i64 }, align 16 %a186 = alloca { ptr, i64, i64 }, align 16 %a190 = alloca { ptr, i64, i64 }, align 16 %a195 = alloca { ptr, i64, i64 }, align 16 %a196 = alloca { ptr, i64, i64 }, align 16 %a197 = alloca { ptr, i64, i64 }, align 16 %a199 = alloca { ptr, i64, i64 }, align 16 %a200 = alloca { ptr, i64, i64 }, align 16 %a201 = alloca { ptr, i64, i64 }, align 16 %a204 = alloca { ptr, i64, i64 }, align 16 %a205 = alloca { ptr, i64, i64 }, align 16 %a206 = alloca { ptr, i64, i64 }, align 16 %a208 = alloca { ptr, i64, i64 }, align 16 %a209 = alloca { ptr, i64, i64 }, align 16 %a210 = alloca { ptr, i64, i64 }, align 16 %a213 = alloca { ptr, i64, i64 }, align 16 %a214 = alloca { ptr, i64, i64 }, align 16 %a215 = alloca { ptr, i64, i64 }, align 16 %a219 = alloca { ptr, i64, i64 }, align 16 %a224 = alloca { ptr, i64, i64 }, align 16 %a225 = alloca { ptr, i64, i64 }, align 16 %a229 = alloca %S.ast.Type, align 16 %a230 = alloca %S.ast.Type, align 16 %a238 = alloca { ptr, i64, i64 }, align 16 %a239 = alloca { ptr, i64, i64 }, align 16 %a249 = alloca { ptr, i64, i64 }, align 16 %a250 = alloca { ptr, i64, i64 }, align 16 %a254 = alloca { ptr, i64, i64 }, align 16 %a255 = alloca { ptr, i64, i64 }, align 16 %a281 = alloca %S.gen.Val, align 16 %a284 = alloca { ptr, i64, i64 }, align 16 %a290 = alloca { ptr, i64, i64 }, align 16 %a294 = alloca { ptr, i64, i64 }, align 16 %a297 = alloca { ptr, i64, i64 }, align 16 %a302 = alloca { ptr, i64, i64 }, align 16 %a305 = alloca { ptr, i64, i64 }, align 16 %a308 = alloca { ptr, i64, i64 }, align 16 %a311 = alloca { ptr, i64, i64 }, align 16 %a314 = alloca { ptr, i64, i64 }, align 16 %a322 = alloca { ptr, i64, i64 }, align 16 %a325 = alloca { ptr, i64, i64 }, align 16 %a326 = alloca { ptr, i64, i64 }, align 16 %a327 = alloca { ptr, i64, i64 }, align 16 %a329 = alloca { ptr, i64, i64 }, align 16 %a330 = alloca { ptr, i64, i64 }, align 16 %a331 = alloca { ptr, i64, i64 }, align 16 %a334 = alloca { ptr, i64, i64 }, align 16 %a335 = alloca { ptr, i64, i64 }, align 16 %a336 = alloca { ptr, i64, i64 }, align 16 %a339 = alloca { ptr, i64, i64 }, align 16 %a350 = alloca { ptr, i64, i64 }, align 16 %a351 = alloca { ptr, i64, i64 }, align 16 %a352 = alloca { ptr, i64, i64 }, align 16 %a354 = alloca { ptr, i64, i64 }, align 16 %a355 = alloca { ptr, i64, i64 }, align 16 %a356 = alloca { ptr, i64, i64 }, align 16 %a359 = alloca { ptr, i64, i64 }, align 16 %a360 = alloca { ptr, i64, i64 }, align 16 %a361 = alloca { ptr, i64, i64 }, align 16 %a363 = alloca { ptr, i64, i64 }, align 16 %a364 = alloca { ptr, i64, i64 }, align 16 %a365 = alloca { ptr, i64, i64 }, align 16 %a368 = alloca { ptr, i64, i64 }, align 16 %a369 = alloca { ptr, i64, i64 }, align 16 %a370 = alloca { ptr, i64, i64 }, align 16 %a376 = alloca %S.ast.Type, align 16 %a377 = alloca %S.ast.Type, align 16 %a380 = alloca %S.gen.Val, align 16 %a387 = alloca { ptr, i64, i64 }, align 16 %a388 = alloca { ptr, i64, i64 }, align 16 %a390 = alloca { ptr, i64, i64 }, align 16 %a407 = alloca { ptr, i64, i64 }, align 16 %a408 = alloca { ptr, i64, i64 }, align 16 %a409 = alloca { ptr, i64, i64 }, align 16 %a411 = alloca { ptr, i64, i64 }, align 16 %a412 = alloca { ptr, i64, i64 }, align 16 %a413 = alloca { ptr, i64, i64 }, align 16 %a424 = alloca { ptr, i64, i64 }, align 16 %a426 = alloca { ptr, i64, i64 }, align 16 %a427 = alloca { ptr, i64, i64 }, align 16 %a431 = alloca { ptr, i64, i64 }, align 16 %a432 = alloca { ptr, i64, i64 }, align 16 %a439 = alloca { ptr, i64, i64 }, align 16 %a440 = alloca { ptr, i64, i64 }, align 16 %a441 = alloca { ptr, i64, i64 }, align 16 %a443 = alloca { ptr, i64, i64 }, align 16 %a444 = alloca { ptr, i64, i64 }, align 16 %a445 = alloca { ptr, i64, i64 }, align 16 %a452 = alloca { ptr, i64, i64 }, align 16 %a453 = alloca { ptr, i64, i64 }, align 16 %a460 = alloca { ptr, i64, i64 }, align 16 %a461 = alloca { ptr, i64, i64 }, align 16 %a477 = alloca { ptr, i64, i64 }, align 16 %a480 = alloca { ptr, i64, i64 }, align 16 %a483 = alloca { ptr, i64, i64 }, align 16 %a484 = alloca { ptr, i64, i64 }, align 16 %a485 = alloca { ptr, i64, i64 }, align 16 %a487 = alloca { ptr, i64, i64 }, align 16 %a488 = alloca { ptr, i64, i64 }, align 16 %a489 = alloca { ptr, i64, i64 }, align 16 %a492 = alloca { ptr, i64, i64 }, align 16 %a493 = alloca { ptr, i64, i64 }, align 16 %a494 = alloca { ptr, i64, i64 }, align 16 %a496 = alloca { ptr, i64, i64 }, align 16 %a497 = alloca { ptr, i64, i64 }, align 16 %a498 = alloca { ptr, i64, i64 }, align 16 %a501 = alloca { ptr, i64, i64 }, align 16 %a502 = alloca { ptr, i64, i64 }, align 16 %a503 = alloca { ptr, i64, i64 }, align 16 %a505 = alloca { ptr, i64, i64 }, align 16 %a506 = alloca { ptr, i64, i64 }, align 16 %a507 = alloca { ptr, i64, i64 }, align 16 %a517 = alloca { ptr, i64, i64 }, align 16 %a518 = alloca { ptr, i64, i64 }, align 16 %a543 = alloca { ptr, i64, i64 }, align 16 %a544 = alloca { ptr, i64, i64 }, align 16 %a546 = alloca { ptr, i64, i64 }, align 16 %a569 = alloca { ptr, i64, i64 }, align 16 %a583 = alloca { ptr, i64, i64 }, align 16 %a586 = alloca { ptr, i64, i64 }, align 16 %a587 = alloca { ptr, i64, i64 }, align 16 %a588 = alloca { ptr, i64, i64 }, align 16 %a590 = alloca { ptr, i64, i64 }, align 16 %a591 = alloca { ptr, i64, i64 }, align 16 %a592 = alloca { ptr, i64, i64 }, align 16 %a595 = alloca { ptr, i64, i64 }, align 16 %a596 = alloca { ptr, i64, i64 }, align 16 %a597 = alloca { ptr, i64, i64 }, align 16 %a599 = alloca { ptr, i64, i64 }, align 16 %a600 = alloca { ptr, i64, i64 }, align 16 %a601 = alloca { ptr, i64, i64 }, align 16 %a606 = alloca { ptr, i64, i64 }, align 16 %a607 = alloca { ptr, i64, i64 }, align 16 %a608 = alloca { ptr, i64, i64 }, align 16 %a610 = alloca { ptr, i64, i64 }, align 16 %a611 = alloca { ptr, i64, i64 }, align 16 %a612 = alloca { ptr, i64, i64 }, align 16 %a615 = alloca { ptr, i64, i64 }, align 16 %a616 = alloca { ptr, i64, i64 }, align 16 %a617 = alloca { ptr, i64, i64 }, align 16 %a619 = alloca { ptr, i64, i64 }, align 16 %a620 = alloca { ptr, i64, i64 }, align 16 %a621 = alloca { ptr, i64, i64 }, align 16 %a625 = alloca { ptr, i64, i64 }, align 16 %a627 = alloca { ptr, i64, i64 }, align 16 %a628 = alloca { ptr, i64, i64 }, align 16 %a629 = alloca { ptr, i64, i64 }, align 16 %a631 = alloca { ptr, i64, i64 }, align 16 %a632 = alloca { ptr, i64, i64 }, align 16 %a633 = alloca { ptr, i64, i64 }, align 16 %a638 = alloca { ptr, i64, i64 }, align 16 %a644 = alloca { ptr, i64, i64 }, align 16 %a645 = alloca { ptr, i64, i64 }, align 16 %a646 = alloca { ptr, i64, i64 }, align 16 %a648 = alloca { ptr, i64, i64 }, align 16 %a649 = alloca { ptr, i64, i64 }, align 16 %a650 = alloca { ptr, i64, i64 }, align 16 %a653 = alloca { ptr, i64, i64 }, align 16 %a654 = alloca { ptr, i64, i64 }, align 16 %a655 = alloca { ptr, i64, i64 }, align 16 %a657 = alloca { ptr, i64, i64 }, align 16 %a658 = alloca { ptr, i64, i64 }, align 16 %a659 = alloca { ptr, i64, i64 }, align 16 %a662 = alloca { ptr, i64, i64 }, align 16 %a663 = alloca { ptr, i64, i64 }, align 16 %a664 = alloca { ptr, i64, i64 }, align 16 %a670 = alloca { ptr, i64, i64 }, align 16 %a671 = alloca { ptr, i64, i64 }, align 16 %a696 = alloca { ptr, i64, i64 }, align 16 %a697 = alloca { ptr, i64, i64 }, align 16 %a699 = alloca { ptr, i64, i64 }, align 16 %a709 = alloca { ptr, i64, i64 }, align 16 %a714 = alloca { ptr, i64, i64 }, align 16 %a715 = alloca { ptr, i64, i64 }, align 16 %a716 = alloca { ptr, i64, i64 }, align 16 %a718 = alloca { ptr, i64, i64 }, align 16 %a719 = alloca { ptr, i64, i64 }, align 16 %a720 = alloca { ptr, i64, i64 }, align 16 %a723 = alloca { ptr, i64, i64 }, align 16 %a724 = alloca { ptr, i64, i64 }, align 16 %a725 = alloca { ptr, i64, i64 }, align 16 %a727 = alloca { ptr, i64, i64 }, align 16 %a728 = alloca { ptr, i64, i64 }, align 16 %a729 = alloca { ptr, i64, i64 }, align 16 %a732 = alloca { ptr, i64, i64 }, align 16 %a733 = alloca { ptr, i64, i64 }, align 16 %a734 = alloca { ptr, i64, i64 }, align 16 %a738 = alloca { ptr, i64, i64 }, align 16 %a741 = alloca { ptr, i64, i64 }, align 16 %a742 = alloca { ptr, i64, i64 }, align 16 %a743 = alloca { ptr, i64, i64 }, align 16 %a745 = alloca { ptr, i64, i64 }, align 16 %a746 = alloca { ptr, i64, i64 }, align 16 %a747 = alloca { ptr, i64, i64 }, align 16 %a750 = alloca { ptr, i64, i64 }, align 16 %a751 = alloca { ptr, i64, i64 }, align 16 %a752 = alloca { ptr, i64, i64 }, align 16 %a754 = alloca { ptr, i64, i64 }, align 16 %a755 = alloca { ptr, i64, i64 }, align 16 %a756 = alloca { ptr, i64, i64 }, align 16 %a761 = alloca { ptr, i64, i64 }, align 16 %a762 = alloca { ptr, i64, i64 }, align 16 %a763 = alloca { ptr, i64, i64 }, align 16 %a765 = alloca { ptr, i64, i64 }, align 16 %a766 = alloca { ptr, i64, i64 }, align 16 %a767 = alloca { ptr, i64, i64 }, align 16 %a770 = alloca { ptr, i64, i64 }, align 16 %a771 = alloca { ptr, i64, i64 }, align 16 %a775 = alloca %S.ast.Type, align 16 %a776 = alloca %S.ast.Type, align 16 %a784 = alloca { ptr, i64, i64 }, align 16 %a785 = alloca { ptr, i64, i64 }, align 16 %a810 = alloca { ptr, i64, i64 }, align 16 %a811 = alloca { ptr, i64, i64 }, align 16 %a813 = alloca { ptr, i64, i64 }, align 16 %a816 = alloca { ptr, i64, i64 }, align 16 %a817 = alloca { ptr, i64, i64 }, align 16 %a818 = alloca { ptr, i64, i64 }, align 16 %a820 = alloca { ptr, i64, i64 }, align 16 %a821 = alloca { ptr, i64, i64 }, align 16 %a822 = alloca { ptr, i64, i64 }, align 16 %a825 = alloca { ptr, i64, i64 }, align 16 %a826 = alloca { ptr, i64, i64 }, align 16 %a827 = alloca { ptr, i64, i64 }, align 16 %a829 = alloca { ptr, i64, i64 }, align 16 %a830 = alloca { ptr, i64, i64 }, align 16 %a831 = alloca { ptr, i64, i64 }, align 16 %a836 = alloca { ptr, i64, i64 }, align 16 %a837 = alloca { ptr, i64, i64 }, align 16 %a838 = alloca { ptr, i64, i64 }, align 16 %a840 = alloca { ptr, i64, i64 }, align 16 %a841 = alloca { ptr, i64, i64 }, align 16 %a842 = alloca { ptr, i64, i64 }, align 16 %a847 = alloca { ptr, i64, i64 }, align 16 %a848 = alloca { ptr, i64, i64 }, align 16 %a856 = alloca { ptr, i64, i64 }, align 16 %a860 = alloca { ptr, i64, i64 }, align 16 %a863 = alloca { ptr, i64, i64 }, align 16 %a864 = alloca { ptr, i64, i64 }, align 16 %a865 = alloca { ptr, i64, i64 }, align 16 %a867 = alloca { ptr, i64, i64 }, align 16 %a868 = alloca { ptr, i64, i64 }, align 16 %a869 = alloca { ptr, i64, i64 }, align 16 %a872 = alloca { ptr, i64, i64 }, align 16 %a876 = alloca { ptr, i64, i64 }, align 16 %a879 = alloca { ptr, i64, i64 }, align 16 %a880 = alloca { ptr, i64, i64 }, align 16 %a881 = alloca { ptr, i64, i64 }, align 16 %a883 = alloca { ptr, i64, i64 }, align 16 %a884 = alloca { ptr, i64, i64 }, align 16 %a885 = alloca { ptr, i64, i64 }, align 16 %a888 = alloca { ptr, i64, i64 }, align 16 %a889 = alloca { ptr, i64, i64 }, align 16 %a890 = alloca { ptr, i64, i64 }, align 16 %a892 = alloca { ptr, i64, i64 }, align 16 %a893 = alloca { ptr, i64, i64 }, align 16 %a894 = alloca { ptr, i64, i64 }, align 16 %a902 = alloca { ptr, i64, i64 }, align 16 %a903 = alloca { ptr, i64, i64 }, align 16 %a904 = alloca { ptr, i64, i64 }, align 16 %a907 = alloca { ptr, i64, i64 }, align 16 %a911 = alloca { ptr, i64, i64 }, align 16 %a912 = alloca { ptr, i64, i64 }, align 16 %a913 = alloca { ptr, i64, i64 }, align 16 %a915 = alloca { ptr, i64, i64 }, align 16 %a916 = alloca { ptr, i64, i64 }, align 16 %a917 = alloca { ptr, i64, i64 }, align 16 %a920 = alloca { ptr, i64, i64 }, align 16 %a921 = alloca { ptr, i64, i64 }, align 16 %a922 = alloca { ptr, i64, i64 }, align 16 %a924 = alloca { ptr, i64, i64 }, align 16 %a925 = alloca { ptr, i64, i64 }, align 16 %a926 = alloca { ptr, i64, i64 }, align 16 %a934 = alloca { ptr, i64, i64 }, align 16 %a935 = alloca { ptr, i64, i64 }, align 16 %a936 = alloca { ptr, i64, i64 }, align 16 %a939 = alloca { ptr, i64, i64 }, align 16 %a942 = alloca { ptr, i64, i64 }, align 16 %a943 = alloca { ptr, i64, i64 }, align 16 %a944 = alloca { ptr, i64, i64 }, align 16 %a946 = alloca { ptr, i64, i64 }, align 16 %a947 = alloca { ptr, i64, i64 }, align 16 %a948 = alloca { ptr, i64, i64 }, align 16 %a951 = alloca { ptr, i64, i64 }, align 16 %a952 = alloca { ptr, i64, i64 }, align 16 %a953 = alloca { ptr, i64, i64 }, align 16 %a955 = alloca { ptr, i64, i64 }, align 16 %a956 = alloca { ptr, i64, i64 }, align 16 %a957 = alloca { ptr, i64, i64 }, align 16 %a960 = alloca { ptr, i64, i64 }, align 16 %a961 = alloca { ptr, i64, i64 }, align 16 %a962 = alloca { ptr, i64, i64 }, align 16 %a965 = alloca { ptr, i64, i64 }, align 16 %a970 = alloca { ptr, i64, i64 }, align 16 %a975 = alloca { ptr, i64, i64 }, align 16 %a989 = alloca { ptr, i64, i64 }, align 16 %a990 = alloca { ptr, i64, i64 }, align 16 %a1015 = alloca { ptr, i64, i64 }, align 16 %a1016 = alloca { ptr, i64, i64 }, align 16 %a1018 = alloca { ptr, i64, i64 }, align 16 %a1039 = alloca { ptr, i64, i64 }, align 16 %a1040 = alloca { ptr, i64, i64 }, align 16 %a1042 = alloca { ptr, i64, i64 }, align 16 %a1046 = alloca { ptr, i64, i64 }, align 16 %a1049 = alloca { ptr, i64, i64 }, align 16 %a1050 = alloca { ptr, i64, i64 }, align 16 %a1051 = alloca { ptr, i64, i64 }, align 16 %a1053 = alloca { ptr, i64, i64 }, align 16 %a1054 = alloca { ptr, i64, i64 }, align 16 %a1055 = alloca { ptr, i64, i64 }, align 16 %a1058 = alloca { ptr, i64, i64 }, align 16 %a1061 = alloca { ptr, i64, i64 }, align 16 %a1062 = alloca { ptr, i64, i64 }, align 16 %a1063 = alloca { ptr, i64, i64 }, align 16 %a1065 = alloca { ptr, i64, i64 }, align 16 %a1066 = alloca { ptr, i64, i64 }, align 16 %a1067 = alloca { ptr, i64, i64 }, align 16 %a1070 = alloca { ptr, i64, i64 }, align 16 %a1071 = alloca { ptr, i64, i64 }, align 16 %a1072 = alloca { ptr, i64, i64 }, align 16 %a1075 = alloca { ptr, i64, i64 }, align 16 %a1078 = alloca { ptr, i64, i64 }, align 16 %a1079 = alloca { ptr, i64, i64 }, align 16 %a1080 = alloca { ptr, i64, i64 }, align 16 %a1082 = alloca { ptr, i64, i64 }, align 16 %a1083 = alloca { ptr, i64, i64 }, align 16 %a1084 = alloca { ptr, i64, i64 }, align 16 %a1087 = alloca { ptr, i64, i64 }, align 16 %a1088 = alloca { ptr, i64, i64 }, align 16 %a1089 = alloca { ptr, i64, i64 }, align 16 %a1092 = alloca { ptr, i64, i64 }, align 16 %a1097 = alloca { ptr, i64, i64 }, align 16 %a1098 = alloca { ptr, i64, i64 }, align 16 %a1099 = alloca { ptr, i64, i64 }, align 16 %a1101 = alloca { ptr, i64, i64 }, align 16 %a1102 = alloca { ptr, i64, i64 }, align 16 %a1103 = alloca { ptr, i64, i64 }, align 16 %a1106 = alloca { ptr, i64, i64 }, align 16 %a1107 = alloca { ptr, i64, i64 }, align 16 %a1108 = alloca { ptr, i64, i64 }, align 16 %a1111 = alloca { ptr, i64, i64 }, align 16 %a1112 = alloca { ptr, i64, i64 }, align 16 %a1113 = alloca { ptr, i64, i64 }, align 16 %a1115 = alloca { ptr, i64, i64 }, align 16 %a1116 = alloca { ptr, i64, i64 }, align 16 %a1117 = alloca { ptr, i64, i64 }, align 16 %a1120 = alloca { ptr, i64, i64 }, align 16 %a1121 = alloca { ptr, i64, i64 }, align 16 %a1122 = alloca { ptr, i64, i64 }, align 16 %a1128 = alloca { ptr, i64, i64 }, align 16 %a1129 = alloca { ptr, i64, i64 }, align 16 %a1130 = alloca { ptr, i64, i64 }, align 16 %a1132 = alloca { ptr, i64, i64 }, align 16 %a1133 = alloca { ptr, i64, i64 }, align 16 %a1134 = alloca { ptr, i64, i64 }, align 16 %a1137 = alloca { ptr, i64, i64 }, align 16 %a1138 = alloca { ptr, i64, i64 }, align 16 %a1139 = alloca { ptr, i64, i64 }, align 16 %a1142 = alloca { ptr, i64, i64 }, align 16 %a1145 = alloca { ptr, i64, i64 }, align 16 %a1148 = alloca { ptr, i64, i64 }, align 16 %a1149 = alloca { ptr, i64, i64 }, align 16 %a1150 = alloca { ptr, i64, i64 }, align 16 %a1152 = alloca { ptr, i64, i64 }, align 16 %a1153 = alloca { ptr, i64, i64 }, align 16 %a1154 = alloca { ptr, i64, i64 }, align 16 %a1157 = alloca { ptr, i64, i64 }, align 16 %a1158 = alloca { ptr, i64, i64 }, align 16 %a1159 = alloca { ptr, i64, i64 }, align 16 %a1161 = alloca { ptr, i64, i64 }, align 16 %a1162 = alloca { ptr, i64, i64 }, align 16 %a1163 = alloca { ptr, i64, i64 }, align 16 %a1168 = alloca { ptr, i64, i64 }, align 16 %a1169 = alloca { ptr, i64, i64 }, align 16 %a1170 = alloca { ptr, i64, i64 }, align 16 %a1172 = alloca { ptr, i64, i64 }, align 16 %a1173 = alloca { ptr, i64, i64 }, align 16 %a1174 = alloca { ptr, i64, i64 }, align 16 %a1179 = alloca { ptr, i64, i64 }, align 16 %a1183 = alloca { ptr, i64, i64 }, align 16 %a1187 = alloca { ptr, i64, i64 }, align 16 %a1190 = alloca { ptr, i64, i64 }, align 16 %a1191 = alloca { ptr, i64, i64 }, align 16 %a1192 = alloca { ptr, i64, i64 }, align 16 %a1194 = alloca { ptr, i64, i64 }, align 16 %a1195 = alloca { ptr, i64, i64 }, align 16 %a1196 = alloca { ptr, i64, i64 }, align 16 %a1199 = alloca { ptr, i64, i64 }, align 16 %a1200 = alloca { ptr, i64, i64 }, align 16 %a1201 = alloca { ptr, i64, i64 }, align 16 %a1203 = alloca { ptr, i64, i64 }, align 16 %a1204 = alloca { ptr, i64, i64 }, align 16 %a1205 = alloca { ptr, i64, i64 }, align 16 %a1213 = alloca { ptr, i64, i64 }, align 16 %a1214 = alloca { ptr, i64, i64 }, align 16 %a1215 = alloca { ptr, i64, i64 }, align 16 %a1218 = alloca { ptr, i64, i64 }, align 16 %a1221 = alloca { ptr, i64, i64 }, align 16 %a1222 = alloca { ptr, i64, i64 }, align 16 %a1223 = alloca { ptr, i64, i64 }, align 16 %a1225 = alloca { ptr, i64, i64 }, align 16 %a1226 = alloca { ptr, i64, i64 }, align 16 %a1227 = alloca { ptr, i64, i64 }, align 16 %a1230 = alloca { ptr, i64, i64 }, align 16 %a1231 = alloca { ptr, i64, i64 }, align 16 %a1232 = alloca { ptr, i64, i64 }, align 16 %a1234 = alloca { ptr, i64, i64 }, align 16 %a1235 = alloca { ptr, i64, i64 }, align 16 %a1236 = alloca { ptr, i64, i64 }, align 16 %a1240 = alloca { ptr, i64, i64 }, align 16 %a1241 = alloca { ptr, i64, i64 }, align 16 %a1242 = alloca { ptr, i64, i64 }, align 16 %a1244 = alloca { ptr, i64, i64 }, align 16 %a1245 = alloca { ptr, i64, i64 }, align 16 %a1246 = alloca { ptr, i64, i64 }, align 16 %a1254 = alloca { ptr, i64, i64 }, align 16 %a1255 = alloca { ptr, i64, i64 }, align 16 %a1256 = alloca { ptr, i64, i64 }, align 16 %a1259 = alloca { ptr, i64, i64 }, align 16 %a1260 = alloca { ptr, i64, i64 }, align 16 %a1261 = alloca { ptr, i64, i64 }, align 16 %a1264 = alloca { ptr, i64, i64 }, align 16 %a1276 = alloca %S.ast.Type, align 16 %a1277 = alloca %S.ast.Type, align 16 %a1282 = alloca { ptr, i64, i64 }, align 16 %a1283 = alloca { ptr, i64, i64 }, align 16 %a1290 = alloca { ptr, i64, i64 }, align 16 %a1291 = alloca { ptr, i64, i64 }, align 16 %a1293 = alloca { ptr, i64, i64 }, align 16 %a1298 = alloca { ptr, i64, i64 }, align 16 %a1299 = alloca { ptr, i64, i64 }, align 16 %a1304 = alloca { ptr, i64, i64 }, align 16 %a1305 = alloca { ptr, i64, i64 }, align 16 %a1314 = alloca { ptr, i64, i64 }, align 16 %a1318 = alloca { ptr, i64, i64 }, align 16 %a1322 = alloca { ptr, i64, i64 }, align 16 %a1325 = alloca { ptr, i64, i64 }, align 16 %a1326 = alloca { ptr, i64, i64 }, align 16 %a1327 = alloca { ptr, i64, i64 }, align 16 %a1329 = alloca { ptr, i64, i64 }, align 16 %a1330 = alloca { ptr, i64, i64 }, align 16 %a1331 = alloca { ptr, i64, i64 }, align 16 %a1334 = alloca { ptr, i64, i64 }, align 16 %a1335 = alloca { ptr, i64, i64 }, align 16 %a1336 = alloca { ptr, i64, i64 }, align 16 %a1338 = alloca { ptr, i64, i64 }, align 16 %a1339 = alloca { ptr, i64, i64 }, align 16 %a1340 = alloca { ptr, i64, i64 }, align 16 %a1345 = alloca { ptr, i64, i64 }, align 16 %a1346 = alloca { ptr, i64, i64 }, align 16 %a1347 = alloca { ptr, i64, i64 }, align 16 %a1349 = alloca { ptr, i64, i64 }, align 16 %a1350 = alloca { ptr, i64, i64 }, align 16 %a1351 = alloca { ptr, i64, i64 }, align 16 %a1354 = alloca { ptr, i64, i64 }, align 16 %a1355 = alloca { ptr, i64, i64 }, align 16 %a1356 = alloca { ptr, i64, i64 }, align 16 %a1358 = alloca { ptr, i64, i64 }, align 16 %a1359 = alloca { ptr, i64, i64 }, align 16 %a1360 = alloca { ptr, i64, i64 }, align 16 %a1367 = alloca { ptr, i64, i64 }, align 16 %a1368 = alloca { ptr, i64, i64 }, align 16 %a1369 = alloca { ptr, i64, i64 }, align 16 %a1371 = alloca { ptr, i64, i64 }, align 16 %a1372 = alloca { ptr, i64, i64 }, align 16 %a1373 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 store %S.ast.Type %p3, ptr %a4 %t5 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 1 %t6 = load { ptr, i64, i64 }, ptr %t5 %t7 = extractvalue { ptr, i64, i64 } %t6, 1 %t8 = icmp uge i64 0, %t7 br i1 %t8, label %range8008, label %inrange8009 range8008: call void @finch_panic_index(ptr @.str.5272, i64 4779, i64 0, i64 %t7) unreachable inrange8009: %t9 = extractvalue { ptr, i64, i64 } %t6, 0 %t10 = getelementptr inbounds %S.ast.Type, ptr %t9, i64 0 %t11 = load %S.ast.Type, ptr %t10 store %S.ast.Type %t11, ptr %a12 call void @finch.copy.S_ast_Type(ptr %a13, ptr %a12) %t14 = load %S.ast.Type, ptr %a13 store %S.ast.Type %t14, ptr %a15 %t16 = load ptr, ptr %a1 %t17 = load %S.ast.Type, ptr %a15 %t18 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t16, %S.ast.Type %t17) store { ptr, i64, i64 } %t18, ptr %a19 %t20 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t21 = load { ptr, i64, i64 }, ptr %t20 store { ptr, i64, i64 } %t21, ptr %a22 call void @finch_str_copy(ptr %a23, ptr %a22) %t24 = load { ptr, i64, i64 }, ptr %a23 store { ptr, i64, i64 } %t24, ptr %a25 %t26 = load ptr, ptr %a1 %t27 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } { ptr @.str.5273, i64 46, i64 0 }, ptr %a29 store { ptr, i64, i64 } %t27, ptr %a30 call void @finch_str_concat(ptr %a28, ptr %a29, ptr %a30) %t31 = load { ptr, i64, i64 }, ptr %a28 store { ptr, i64, i64 } %t31, ptr %a33 store { ptr, i64, i64 } { ptr @.str.5274, i64 14, i64 0 }, ptr %a34 call void @finch_str_concat(ptr %a32, ptr %a33, ptr %a34) %t35 = load { ptr, i64, i64 }, ptr %a32 %t36 = call { ptr, i64, i64 } @finch.gen.op(ptr %t26, { ptr, i64, i64 } %t35) store { ptr, i64, i64 } %t36, ptr %a37 %t38 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t38, ptr %a39 store { ptr, i64, i64 } { ptr @.str.5275, i64 4, i64 0 }, ptr %a40 %t41 = call i32 @finch_str_eq(ptr %a39, ptr %a40) %t42 = icmp ne i32 %t41, 0 br i1 %t42, label %then8010, label %endif8012 then8010: %t43 = load ptr, ptr %a1 %t44 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t43, %S.ast.Node %t44, i64 1) %t45 = load ptr, ptr %a1 %t46 = load ptr, ptr %a1 %t47 = load ptr, ptr %a1 %t48 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t49 = load { ptr, i64, i64 }, ptr %t48 %t50 = extractvalue { ptr, i64, i64 } %t49, 1 %t51 = icmp uge i64 1, %t50 br i1 %t51, label %range8013, label %inrange8014 range8013: call void @finch_panic_index(ptr @.str.5276, i64 4785, i64 1, i64 %t50) unreachable inrange8014: %t52 = extractvalue { ptr, i64, i64 } %t49, 0 %t53 = getelementptr inbounds %S.ast.Node, ptr %t52, i64 1 %t54 = load %S.ast.Node, ptr %t53 %t55 = load %S.ast.Type, ptr %a15 %t56 = call %S.gen.Val @finch.gen.exprWant(ptr %t47, %S.ast.Node %t54, %S.ast.Type %t55) %t57 = load %S.ast.Type, ptr %a15 %t58 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t59 = load { ptr, i64, i64 }, ptr %t58 %t60 = extractvalue { ptr, i64, i64 } %t59, 1 %t61 = icmp uge i64 1, %t60 br i1 %t61, label %range8015, label %inrange8016 range8015: call void @finch_panic_index(ptr @.str.5277, i64 4785, i64 1, i64 %t60) unreachable inrange8016: %t62 = extractvalue { ptr, i64, i64 } %t59, 0 %t63 = getelementptr inbounds %S.ast.Node, ptr %t62, i64 1 %t64 = load %S.ast.Node, ptr %t63 %t65 = call %S.gen.Val @finch.gen.coerce(ptr %t46, %S.gen.Val %t56, %S.ast.Type %t57, %S.ast.Node %t64, { ptr, i64, i64 } { ptr @.str.5278, i64 11, i64 0 }) %t66 = call { ptr, i64, i64 } @finch.gen.own(ptr %t45, %S.gen.Val %t65) store { ptr, i64, i64 } %t66, ptr %a67 %t68 = load ptr, ptr %a1 %t69 = load { ptr, i64, i64 }, ptr %a37 %t70 = call { ptr, i64, i64 } @finch.gen.load(ptr %t68, { ptr, i64, i64 } { ptr @.str.5279, i64 3, i64 0 }, { ptr, i64, i64 } %t69) store { ptr, i64, i64 } %t70, ptr %a71 %t72 = load ptr, ptr %a1 %t73 = load { ptr, i64, i64 }, ptr %a71 store { ptr, i64, i64 } { ptr @.str.5280, i64 8, i64 0 }, ptr %a75 store { ptr, i64, i64 } %t73, ptr %a76 call void @finch_str_concat(ptr %a74, ptr %a75, ptr %a76) %t77 = load { ptr, i64, i64 }, ptr %a74 store { ptr, i64, i64 } %t77, ptr %a79 store { ptr, i64, i64 } { ptr @.str.5281, i64 3, i64 0 }, ptr %a80 call void @finch_str_concat(ptr %a78, ptr %a79, ptr %a80) %t81 = load { ptr, i64, i64 }, ptr %a78 %t82 = call { ptr, i64, i64 } @finch.gen.op(ptr %t72, { ptr, i64, i64 } %t81) store { ptr, i64, i64 } %t82, ptr %a83 %t84 = load ptr, ptr %a1 %t85 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } { ptr @.str.5282, i64 33, i64 0 }, ptr %a87 store { ptr, i64, i64 } %t85, ptr %a88 call void @finch_str_concat(ptr %a86, ptr %a87, ptr %a88) %t89 = load { ptr, i64, i64 }, ptr %a86 store { ptr, i64, i64 } %t89, ptr %a91 store { ptr, i64, i64 } { ptr @.str.5283, i64 6, i64 0 }, ptr %a92 call void @finch_str_concat(ptr %a90, ptr %a91, ptr %a92) %t93 = load { ptr, i64, i64 }, ptr %a90 %t94 = load { ptr, i64, i64 }, ptr %a83 store { ptr, i64, i64 } %t93, ptr %a96 store { ptr, i64, i64 } %t94, ptr %a97 call void @finch_str_concat(ptr %a95, ptr %a96, ptr %a97) %t98 = load { ptr, i64, i64 }, ptr %a95 store { ptr, i64, i64 } %t98, ptr %a100 store { ptr, i64, i64 } { ptr @.str.5284, i64 6, i64 0 }, ptr %a101 call void @finch_str_concat(ptr %a99, ptr %a100, ptr %a101) %t102 = load { ptr, i64, i64 }, ptr %a99 %t103 = load ptr, ptr %a1 %t104 = load %S.ast.Type, ptr %a15 %t105 = call { ptr, i64, i64 } @finch.gen.sizeOf(ptr %t103, %S.ast.Type %t104) store { ptr, i64, i64 } %t102, ptr %a107 store { ptr, i64, i64 } %t105, ptr %a108 call void @finch_str_concat(ptr %a106, ptr %a107, ptr %a108) %t109 = load { ptr, i64, i64 }, ptr %a106 store { ptr, i64, i64 } %t109, ptr %a111 store { ptr, i64, i64 } { ptr @.str.5285, i64 1, i64 0 }, ptr %a112 call void @finch_str_concat(ptr %a110, ptr %a111, ptr %a112) %t113 = load { ptr, i64, i64 }, ptr %a110 call void @finch.gen.emit(ptr %t84, { ptr, i64, i64 } %t113) %t114 = load ptr, ptr %a1 %t115 = load { ptr, i64, i64 }, ptr %a3 %t116 = call { ptr, i64, i64 } @finch.gen.load(ptr %t114, { ptr, i64, i64 } { ptr @.str.5286, i64 3, i64 0 }, { ptr, i64, i64 } %t115) store { ptr, i64, i64 } %t116, ptr %a117 %t118 = load ptr, ptr %a1 %t119 = load { ptr, i64, i64 }, ptr %a19 %t120 = load { ptr, i64, i64 }, ptr %a67 %t121 = load ptr, ptr %a1 %t122 = load { ptr, i64, i64 }, ptr %a19 store { ptr, i64, i64 } { ptr @.str.5287, i64 23, i64 0 }, ptr %a124 store { ptr, i64, i64 } %t122, ptr %a125 call void @finch_str_concat(ptr %a123, ptr %a124, ptr %a125) %t126 = load { ptr, i64, i64 }, ptr %a123 store { ptr, i64, i64 } %t126, ptr %a128 store { ptr, i64, i64 } { ptr @.str.5288, i64 6, i64 0 }, ptr %a129 call void @finch_str_concat(ptr %a127, ptr %a128, ptr %a129) %t130 = load { ptr, i64, i64 }, ptr %a127 %t131 = load { ptr, i64, i64 }, ptr %a117 store { ptr, i64, i64 } %t130, ptr %a133 store { ptr, i64, i64 } %t131, ptr %a134 call void @finch_str_concat(ptr %a132, ptr %a133, ptr %a134) %t135 = load { ptr, i64, i64 }, ptr %a132 store { ptr, i64, i64 } %t135, ptr %a137 store { ptr, i64, i64 } { ptr @.str.5289, i64 6, i64 0 }, ptr %a138 call void @finch_str_concat(ptr %a136, ptr %a137, ptr %a138) %t139 = load { ptr, i64, i64 }, ptr %a136 %t140 = load { ptr, i64, i64 }, ptr %a71 store { ptr, i64, i64 } %t139, ptr %a142 store { ptr, i64, i64 } %t140, ptr %a143 call void @finch_str_concat(ptr %a141, ptr %a142, ptr %a143) %t144 = load { ptr, i64, i64 }, ptr %a141 %t145 = call { ptr, i64, i64 } @finch.gen.op(ptr %t121, { ptr, i64, i64 } %t144) call void @finch.gen.store(ptr %t118, { ptr, i64, i64 } %t119, { ptr, i64, i64 } %t120, { ptr, i64, i64 } %t145) %t146 = load ptr, ptr %a1 %t147 = load { ptr, i64, i64 }, ptr %a83 %t148 = load { ptr, i64, i64 }, ptr %a37 call void @finch.gen.store(ptr %t146, { ptr, i64, i64 } { ptr @.str.5290, i64 3, i64 0 }, { ptr, i64, i64 } %t147, { ptr, i64, i64 } %t148) %t149 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5291, i64 4, i64 0 }) %t150 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t149, 1 ret %S.gen.Val %t150 endif8012: %t151 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t151, ptr %a152 store { ptr, i64, i64 } { ptr @.str.5292, i64 3, i64 0 }, ptr %a153 %t154 = call i32 @finch_str_eq(ptr %a152, ptr %a153) %t155 = icmp ne i32 %t154, 0 br i1 %t155, label %then8017, label %endif8019 then8017: %t156 = load ptr, ptr %a1 %t157 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t156, %S.ast.Node %t157, i64 0) %t158 = load ptr, ptr %a1 %t159 = load { ptr, i64, i64 }, ptr %a37 %t160 = call { ptr, i64, i64 } @finch.gen.load(ptr %t158, { ptr, i64, i64 } { ptr @.str.5293, i64 3, i64 0 }, { ptr, i64, i64 } %t159) store { ptr, i64, i64 } %t160, ptr %a161 %t162 = load ptr, ptr %a1 %t163 = load ptr, ptr %a1 %t164 = load { ptr, i64, i64 }, ptr %a161 store { ptr, i64, i64 } { ptr @.str.5294, i64 12, i64 0 }, ptr %a166 store { ptr, i64, i64 } %t164, ptr %a167 call void @finch_str_concat(ptr %a165, ptr %a166, ptr %a167) %t168 = load { ptr, i64, i64 }, ptr %a165 store { ptr, i64, i64 } %t168, ptr %a170 store { ptr, i64, i64 } { ptr @.str.5295, i64 3, i64 0 }, ptr %a171 call void @finch_str_concat(ptr %a169, ptr %a170, ptr %a171) %t172 = load { ptr, i64, i64 }, ptr %a169 %t173 = call { ptr, i64, i64 } @finch.gen.op(ptr %t163, { ptr, i64, i64 } %t172) %t174 = load %S.ast.Node, ptr %a2 call void @finch.gen.panicIf(ptr %t162, { ptr, i64, i64 } %t173, { ptr, i64, i64 } { ptr @.str.5296, i64 23, i64 0 }, %S.ast.Node %t174) %t175 = load ptr, ptr %a1 %t176 = load { ptr, i64, i64 }, ptr %a161 store { ptr, i64, i64 } { ptr @.str.5297, i64 8, i64 0 }, ptr %a178 store { ptr, i64, i64 } %t176, ptr %a179 call void @finch_str_concat(ptr %a177, ptr %a178, ptr %a179) %t180 = load { ptr, i64, i64 }, ptr %a177 store { ptr, i64, i64 } %t180, ptr %a182 store { ptr, i64, i64 } { ptr @.str.5298, i64 3, i64 0 }, ptr %a183 call void @finch_str_concat(ptr %a181, ptr %a182, ptr %a183) %t184 = load { ptr, i64, i64 }, ptr %a181 %t185 = call { ptr, i64, i64 } @finch.gen.op(ptr %t175, { ptr, i64, i64 } %t184) store { ptr, i64, i64 } %t185, ptr %a186 %t187 = load ptr, ptr %a1 %t188 = load { ptr, i64, i64 }, ptr %a3 %t189 = call { ptr, i64, i64 } @finch.gen.load(ptr %t187, { ptr, i64, i64 } { ptr @.str.5299, i64 3, i64 0 }, { ptr, i64, i64 } %t188) store { ptr, i64, i64 } %t189, ptr %a190 %t191 = load ptr, ptr %a1 %t192 = load { ptr, i64, i64 }, ptr %a19 %t193 = load ptr, ptr %a1 %t194 = load { ptr, i64, i64 }, ptr %a19 store { ptr, i64, i64 } { ptr @.str.5300, i64 23, i64 0 }, ptr %a196 store { ptr, i64, i64 } %t194, ptr %a197 call void @finch_str_concat(ptr %a195, ptr %a196, ptr %a197) %t198 = load { ptr, i64, i64 }, ptr %a195 store { ptr, i64, i64 } %t198, ptr %a200 store { ptr, i64, i64 } { ptr @.str.5301, i64 6, i64 0 }, ptr %a201 call void @finch_str_concat(ptr %a199, ptr %a200, ptr %a201) %t202 = load { ptr, i64, i64 }, ptr %a199 %t203 = load { ptr, i64, i64 }, ptr %a190 store { ptr, i64, i64 } %t202, ptr %a205 store { ptr, i64, i64 } %t203, ptr %a206 call void @finch_str_concat(ptr %a204, ptr %a205, ptr %a206) %t207 = load { ptr, i64, i64 }, ptr %a204 store { ptr, i64, i64 } %t207, ptr %a209 store { ptr, i64, i64 } { ptr @.str.5302, i64 6, i64 0 }, ptr %a210 call void @finch_str_concat(ptr %a208, ptr %a209, ptr %a210) %t211 = load { ptr, i64, i64 }, ptr %a208 %t212 = load { ptr, i64, i64 }, ptr %a186 store { ptr, i64, i64 } %t211, ptr %a214 store { ptr, i64, i64 } %t212, ptr %a215 call void @finch_str_concat(ptr %a213, ptr %a214, ptr %a215) %t216 = load { ptr, i64, i64 }, ptr %a213 %t217 = call { ptr, i64, i64 } @finch.gen.op(ptr %t193, { ptr, i64, i64 } %t216) %t218 = call { ptr, i64, i64 } @finch.gen.load(ptr %t191, { ptr, i64, i64 } %t192, { ptr, i64, i64 } %t217) store { ptr, i64, i64 } %t218, ptr %a219 %t220 = load ptr, ptr %a1 %t221 = load { ptr, i64, i64 }, ptr %a186 %t222 = load { ptr, i64, i64 }, ptr %a37 call void @finch.gen.store(ptr %t220, { ptr, i64, i64 } { ptr @.str.5303, i64 3, i64 0 }, { ptr, i64, i64 } %t221, { ptr, i64, i64 } %t222) %t223 = load { ptr, i64, i64 }, ptr %a219 store { ptr, i64, i64 } %t223, ptr %a224 call void @finch_str_copy(ptr %a225, ptr %a224) %t226 = load { ptr, i64, i64 }, ptr %a225 %t227 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t226, 0 %t228 = load %S.ast.Type, ptr %a15 store %S.ast.Type %t228, ptr %a229 call void @finch.copy.S_ast_Type(ptr %a230, ptr %a229) %t231 = load %S.ast.Type, ptr %a230 %t232 = insertvalue %S.gen.Val %t227, %S.ast.Type %t231, 1 %t233 = load ptr, ptr %a1 %t234 = load %S.ast.Type, ptr %a15 %t235 = call i1 @finch.gen.owning(ptr %t233, %S.ast.Type %t234) %t236 = insertvalue %S.gen.Val %t232, i1 %t235, 2 ret %S.gen.Val %t236 endif8019: %t237 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t237, ptr %a238 store { ptr, i64, i64 } { ptr @.str.5304, i64 5, i64 0 }, ptr %a239 %t240 = call i32 @finch_str_eq(ptr %a238, ptr %a239) %t241 = icmp ne i32 %t240, 0 br i1 %t241, label %then8020, label %endif8022 then8020: %t242 = load ptr, ptr %a1 %t243 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t242, %S.ast.Node %t243, i64 0) %t244 = load ptr, ptr %a1 %t245 = load { ptr, i64, i64 }, ptr %a37 call void @finch.gen.store(ptr %t244, { ptr, i64, i64 } { ptr @.str.5305, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.5306, i64 1, i64 0 }, { ptr, i64, i64 } %t245) %t246 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5307, i64 4, i64 0 }) %t247 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t246, 1 ret %S.gen.Val %t247 endif8022: %t248 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t248, ptr %a249 store { ptr, i64, i64 } { ptr @.str.5308, i64 4, i64 0 }, ptr %a250 %t251 = call i32 @finch_str_eq(ptr %a249, ptr %a250) %t252 = icmp ne i32 %t251, 0 br label %logic.from8023 logic.from8023: br i1 %t252, label %logic.end8025, label %logic.rhs8024 logic.rhs8024: %t253 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t253, ptr %a254 store { ptr, i64, i64 } { ptr @.str.5309, i64 8, i64 0 }, ptr %a255 %t256 = call i32 @finch_str_eq(ptr %a254, ptr %a255) %t257 = icmp ne i32 %t256, 0 br label %logic.rend8026 logic.rend8026: br label %logic.end8025 logic.end8025: %t258 = phi i1 [ true, %logic.from8023 ], [ %t257, %logic.rend8026 ] br i1 %t258, label %then8027, label %endif8029 then8027: %t259 = load ptr, ptr %a1 %t260 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t259, %S.ast.Node %t260, i64 1) %t261 = load ptr, ptr %a1 %t262 = load ptr, ptr %a1 %t263 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t264 = load { ptr, i64, i64 }, ptr %t263 %t265 = extractvalue { ptr, i64, i64 } %t264, 1 %t266 = icmp uge i64 1, %t265 br i1 %t266, label %range8030, label %inrange8031 range8030: call void @finch_panic_index(ptr @.str.5310, i64 4811, i64 1, i64 %t265) unreachable inrange8031: %t267 = extractvalue { ptr, i64, i64 } %t264, 0 %t268 = getelementptr inbounds %S.ast.Node, ptr %t267, i64 1 %t269 = load %S.ast.Node, ptr %t268 %t270 = load %S.ast.Type, ptr %a15 %t271 = call %S.gen.Val @finch.gen.exprWant(ptr %t262, %S.ast.Node %t269, %S.ast.Type %t270) %t272 = load %S.ast.Type, ptr %a15 %t273 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t274 = load { ptr, i64, i64 }, ptr %t273 %t275 = extractvalue { ptr, i64, i64 } %t274, 1 %t276 = icmp uge i64 1, %t275 br i1 %t276, label %range8032, label %inrange8033 range8032: call void @finch_panic_index(ptr @.str.5311, i64 4811, i64 1, i64 %t275) unreachable inrange8033: %t277 = extractvalue { ptr, i64, i64 } %t274, 0 %t278 = getelementptr inbounds %S.ast.Node, ptr %t277, i64 1 %t279 = load %S.ast.Node, ptr %t278 %t280 = call %S.gen.Val @finch.gen.coerce(ptr %t261, %S.gen.Val %t271, %S.ast.Type %t272, %S.ast.Node %t279, { ptr, i64, i64 } { ptr @.str.5312, i64 21, i64 0 }) store %S.gen.Val %t280, ptr %a281 %t282 = load ptr, ptr %a1 %t283 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t282, { ptr, i64, i64 } { ptr @.str.5313, i64 3, i64 0 }) store { ptr, i64, i64 } %t283, ptr %a284 %t285 = load ptr, ptr %a1 %t286 = load { ptr, i64, i64 }, ptr %a284 call void @finch.gen.store(ptr %t285, { ptr, i64, i64 } { ptr @.str.5314, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.5315, i64 2, i64 0 }, { ptr, i64, i64 } %t286) %t287 = load ptr, ptr %a1 %t288 = load { ptr, i64, i64 }, ptr %a37 %t289 = call { ptr, i64, i64 } @finch.gen.load(ptr %t287, { ptr, i64, i64 } { ptr @.str.5316, i64 3, i64 0 }, { ptr, i64, i64 } %t288) store { ptr, i64, i64 } %t289, ptr %a290 %t291 = load ptr, ptr %a1 %t292 = load { ptr, i64, i64 }, ptr %a3 %t293 = call { ptr, i64, i64 } @finch.gen.load(ptr %t291, { ptr, i64, i64 } { ptr @.str.5317, i64 3, i64 0 }, { ptr, i64, i64 } %t292) store { ptr, i64, i64 } %t293, ptr %a294 %t295 = load ptr, ptr %a1 %t296 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t295, { ptr, i64, i64 } { ptr @.str.5318, i64 3, i64 0 }) store { ptr, i64, i64 } %t296, ptr %a297 %t298 = load ptr, ptr %a1 %t299 = load { ptr, i64, i64 }, ptr %a297 call void @finch.gen.store(ptr %t298, { ptr, i64, i64 } { ptr @.str.5319, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.5320, i64 1, i64 0 }, { ptr, i64, i64 } %t299) %t300 = load ptr, ptr %a1 %t301 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t300, { ptr, i64, i64 } { ptr @.str.5321, i64 9, i64 0 }) store { ptr, i64, i64 } %t301, ptr %a302 %t303 = load ptr, ptr %a1 %t304 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t303, { ptr, i64, i64 } { ptr @.str.5322, i64 9, i64 0 }) store { ptr, i64, i64 } %t304, ptr %a305 %t306 = load ptr, ptr %a1 %t307 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t306, { ptr, i64, i64 } { ptr @.str.5323, i64 8, i64 0 }) store { ptr, i64, i64 } %t307, ptr %a308 %t309 = load ptr, ptr %a1 %t310 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t309, { ptr, i64, i64 } { ptr @.str.5324, i64 9, i64 0 }) store { ptr, i64, i64 } %t310, ptr %a311 %t312 = load ptr, ptr %a1 %t313 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t312, { ptr, i64, i64 } { ptr @.str.5325, i64 8, i64 0 }) store { ptr, i64, i64 } %t313, ptr %a314 %t315 = load ptr, ptr %a1 %t316 = load { ptr, i64, i64 }, ptr %a302 call void @finch.gen.br(ptr %t315, { ptr, i64, i64 } %t316) %t317 = load ptr, ptr %a1 %t318 = load { ptr, i64, i64 }, ptr %a302 call void @finch.gen.label(ptr %t317, { ptr, i64, i64 } %t318) %t319 = load ptr, ptr %a1 %t320 = load { ptr, i64, i64 }, ptr %a297 %t321 = call { ptr, i64, i64 } @finch.gen.load(ptr %t319, { ptr, i64, i64 } { ptr @.str.5326, i64 3, i64 0 }, { ptr, i64, i64 } %t320) store { ptr, i64, i64 } %t321, ptr %a322 %t323 = load ptr, ptr %a1 %t324 = load { ptr, i64, i64 }, ptr %a322 store { ptr, i64, i64 } { ptr @.str.5327, i64 13, i64 0 }, ptr %a326 store { ptr, i64, i64 } %t324, ptr %a327 call void @finch_str_concat(ptr %a325, ptr %a326, ptr %a327) %t328 = load { ptr, i64, i64 }, ptr %a325 store { ptr, i64, i64 } %t328, ptr %a330 store { ptr, i64, i64 } { ptr @.str.5328, i64 2, i64 0 }, ptr %a331 call void @finch_str_concat(ptr %a329, ptr %a330, ptr %a331) %t332 = load { ptr, i64, i64 }, ptr %a329 %t333 = load { ptr, i64, i64 }, ptr %a290 store { ptr, i64, i64 } %t332, ptr %a335 store { ptr, i64, i64 } %t333, ptr %a336 call void @finch_str_concat(ptr %a334, ptr %a335, ptr %a336) %t337 = load { ptr, i64, i64 }, ptr %a334 %t338 = call { ptr, i64, i64 } @finch.gen.op(ptr %t323, { ptr, i64, i64 } %t337) store { ptr, i64, i64 } %t338, ptr %a339 %t340 = load ptr, ptr %a1 %t341 = load { ptr, i64, i64 }, ptr %a339 %t342 = load { ptr, i64, i64 }, ptr %a305 %t343 = load { ptr, i64, i64 }, ptr %a314 call void @finch.gen.condBr(ptr %t340, { ptr, i64, i64 } %t341, { ptr, i64, i64 } %t342, { ptr, i64, i64 } %t343) %t344 = load ptr, ptr %a1 %t345 = load { ptr, i64, i64 }, ptr %a305 call void @finch.gen.label(ptr %t344, { ptr, i64, i64 } %t345) %t346 = load ptr, ptr %a1 %t347 = load { ptr, i64, i64 }, ptr %a19 %t348 = load ptr, ptr %a1 %t349 = load { ptr, i64, i64 }, ptr %a19 store { ptr, i64, i64 } { ptr @.str.5329, i64 23, i64 0 }, ptr %a351 store { ptr, i64, i64 } %t349, ptr %a352 call void @finch_str_concat(ptr %a350, ptr %a351, ptr %a352) %t353 = load { ptr, i64, i64 }, ptr %a350 store { ptr, i64, i64 } %t353, ptr %a355 store { ptr, i64, i64 } { ptr @.str.5330, i64 6, i64 0 }, ptr %a356 call void @finch_str_concat(ptr %a354, ptr %a355, ptr %a356) %t357 = load { ptr, i64, i64 }, ptr %a354 %t358 = load { ptr, i64, i64 }, ptr %a294 store { ptr, i64, i64 } %t357, ptr %a360 store { ptr, i64, i64 } %t358, ptr %a361 call void @finch_str_concat(ptr %a359, ptr %a360, ptr %a361) %t362 = load { ptr, i64, i64 }, ptr %a359 store { ptr, i64, i64 } %t362, ptr %a364 store { ptr, i64, i64 } { ptr @.str.5331, i64 6, i64 0 }, ptr %a365 call void @finch_str_concat(ptr %a363, ptr %a364, ptr %a365) %t366 = load { ptr, i64, i64 }, ptr %a363 %t367 = load { ptr, i64, i64 }, ptr %a322 store { ptr, i64, i64 } %t366, ptr %a369 store { ptr, i64, i64 } %t367, ptr %a370 call void @finch_str_concat(ptr %a368, ptr %a369, ptr %a370) %t371 = load { ptr, i64, i64 }, ptr %a368 %t372 = call { ptr, i64, i64 } @finch.gen.op(ptr %t348, { ptr, i64, i64 } %t371) %t373 = call { ptr, i64, i64 } @finch.gen.load(ptr %t346, { ptr, i64, i64 } %t347, { ptr, i64, i64 } %t372) %t374 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t373, 0 %t375 = load %S.ast.Type, ptr %a15 store %S.ast.Type %t375, ptr %a376 call void @finch.copy.S_ast_Type(ptr %a377, ptr %a376) %t378 = load %S.ast.Type, ptr %a377 %t379 = insertvalue %S.gen.Val %t374, %S.ast.Type %t378, 1 store %S.gen.Val %t379, ptr %a380 %t381 = load ptr, ptr %a1 %t382 = load %S.gen.Val, ptr %a380 %t383 = load %S.gen.Val, ptr %a281 %t384 = load %S.ast.Node, ptr %a2 %t385 = call %S.gen.Val @finch.gen.compare(ptr %t381, { ptr, i64, i64 } { ptr @.str.5332, i64 2, i64 0 }, %S.gen.Val %t382, %S.gen.Val %t383, %S.ast.Node %t384) %t386 = extractvalue %S.gen.Val %t385, 0 store { ptr, i64, i64 } %t386, ptr %a387 call void @finch_str_copy(ptr %a388, ptr %a387) %t389 = load { ptr, i64, i64 }, ptr %a388 store { ptr, i64, i64 } %t389, ptr %a390 %t391 = load ptr, ptr %a1 %t392 = load { ptr, i64, i64 }, ptr %a390 %t393 = load { ptr, i64, i64 }, ptr %a308 %t394 = load { ptr, i64, i64 }, ptr %a311 call void @finch.gen.condBr(ptr %t391, { ptr, i64, i64 } %t392, { ptr, i64, i64 } %t393, { ptr, i64, i64 } %t394) %t395 = load ptr, ptr %a1 %t396 = load { ptr, i64, i64 }, ptr %a308 call void @finch.gen.label(ptr %t395, { ptr, i64, i64 } %t396) %t397 = load ptr, ptr %a1 %t398 = load { ptr, i64, i64 }, ptr %a322 %t399 = load { ptr, i64, i64 }, ptr %a284 call void @finch.gen.store(ptr %t397, { ptr, i64, i64 } { ptr @.str.5333, i64 3, i64 0 }, { ptr, i64, i64 } %t398, { ptr, i64, i64 } %t399) %t400 = load ptr, ptr %a1 %t401 = load { ptr, i64, i64 }, ptr %a314 call void @finch.gen.br(ptr %t400, { ptr, i64, i64 } %t401) %t402 = load ptr, ptr %a1 %t403 = load { ptr, i64, i64 }, ptr %a311 call void @finch.gen.label(ptr %t402, { ptr, i64, i64 } %t403) %t404 = load ptr, ptr %a1 %t405 = load ptr, ptr %a1 %t406 = load { ptr, i64, i64 }, ptr %a322 store { ptr, i64, i64 } { ptr @.str.5335, i64 8, i64 0 }, ptr %a408 store { ptr, i64, i64 } %t406, ptr %a409 call void @finch_str_concat(ptr %a407, ptr %a408, ptr %a409) %t410 = load { ptr, i64, i64 }, ptr %a407 store { ptr, i64, i64 } %t410, ptr %a412 store { ptr, i64, i64 } { ptr @.str.5336, i64 3, i64 0 }, ptr %a413 call void @finch_str_concat(ptr %a411, ptr %a412, ptr %a413) %t414 = load { ptr, i64, i64 }, ptr %a411 %t415 = call { ptr, i64, i64 } @finch.gen.op(ptr %t405, { ptr, i64, i64 } %t414) %t416 = load { ptr, i64, i64 }, ptr %a297 call void @finch.gen.store(ptr %t404, { ptr, i64, i64 } { ptr @.str.5334, i64 3, i64 0 }, { ptr, i64, i64 } %t415, { ptr, i64, i64 } %t416) %t417 = load ptr, ptr %a1 %t418 = load { ptr, i64, i64 }, ptr %a302 call void @finch.gen.br(ptr %t417, { ptr, i64, i64 } %t418) %t419 = load ptr, ptr %a1 %t420 = load { ptr, i64, i64 }, ptr %a314 call void @finch.gen.label(ptr %t419, { ptr, i64, i64 } %t420) %t421 = load ptr, ptr %a1 %t422 = load { ptr, i64, i64 }, ptr %a284 %t423 = call { ptr, i64, i64 } @finch.gen.load(ptr %t421, { ptr, i64, i64 } { ptr @.str.5337, i64 3, i64 0 }, { ptr, i64, i64 } %t422) store { ptr, i64, i64 } %t423, ptr %a424 %t425 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t425, ptr %a426 store { ptr, i64, i64 } { ptr @.str.5338, i64 4, i64 0 }, ptr %a427 %t428 = call i32 @finch_str_eq(ptr %a426, ptr %a427) %t429 = icmp ne i32 %t428, 0 br i1 %t429, label %then8034, label %endif8036 then8034: %t430 = load { ptr, i64, i64 }, ptr %a424 store { ptr, i64, i64 } %t430, ptr %a431 call void @finch_str_copy(ptr %a432, ptr %a431) %t433 = load { ptr, i64, i64 }, ptr %a432 %t434 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t433, 0 %t435 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5339, i64 3, i64 0 }) %t436 = insertvalue %S.gen.Val %t434, %S.ast.Type %t435, 1 ret %S.gen.Val %t436 endif8036: %t437 = load ptr, ptr %a1 %t438 = load { ptr, i64, i64 }, ptr %a424 store { ptr, i64, i64 } { ptr @.str.5340, i64 13, i64 0 }, ptr %a440 store { ptr, i64, i64 } %t438, ptr %a441 call void @finch_str_concat(ptr %a439, ptr %a440, ptr %a441) %t442 = load { ptr, i64, i64 }, ptr %a439 store { ptr, i64, i64 } %t442, ptr %a444 store { ptr, i64, i64 } { ptr @.str.5341, i64 3, i64 0 }, ptr %a445 call void @finch_str_concat(ptr %a443, ptr %a444, ptr %a445) %t446 = load { ptr, i64, i64 }, ptr %a443 %t447 = call { ptr, i64, i64 } @finch.gen.op(ptr %t437, { ptr, i64, i64 } %t446) %t448 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t447, 0 %t449 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5342, i64 4, i64 0 }) %t450 = insertvalue %S.gen.Val %t448, %S.ast.Type %t449, 1 ret %S.gen.Val %t450 endif8029: %t451 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t451, ptr %a452 store { ptr, i64, i64 } { ptr @.str.5343, i64 4, i64 0 }, ptr %a453 %t454 = call i32 @finch_str_eq(ptr %a452, ptr %a453) %t455 = icmp ne i32 %t454, 0 br i1 %t455, label %then8037, label %endif8039 then8037: %t456 = load ptr, ptr %a1 %t457 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t456, %S.ast.Node %t457, i64 1) %t458 = getelementptr inbounds %S.ast.Type, ptr %a15, i32 0, i32 0 %t459 = load { ptr, i64, i64 }, ptr %t458 store { ptr, i64, i64 } %t459, ptr %a460 store { ptr, i64, i64 } { ptr @.str.5344, i64 3, i64 0 }, ptr %a461 %t462 = call i32 @finch_str_eq(ptr %a460, ptr %a461) %t463 = icmp eq i32 %t462, 0 br i1 %t463, label %then8040, label %endif8042 then8040: %t464 = load ptr, ptr %a1 %t465 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t464, %S.ast.Node %t465, { ptr, i64, i64 } { ptr @.str.5345, i64 31, i64 0 }) br label %endif8042 endif8042: %t466 = load ptr, ptr %a1 %t467 = load ptr, ptr %a1 %t468 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t469 = load { ptr, i64, i64 }, ptr %t468 %t470 = extractvalue { ptr, i64, i64 } %t469, 1 %t471 = icmp uge i64 1, %t470 br i1 %t471, label %range8043, label %inrange8044 range8043: call void @finch_panic_index(ptr @.str.5346, i64 4850, i64 1, i64 %t470) unreachable inrange8044: %t472 = extractvalue { ptr, i64, i64 } %t469, 0 %t473 = getelementptr inbounds %S.ast.Node, ptr %t472, i64 1 %t474 = load %S.ast.Node, ptr %t473 %t475 = call %S.gen.Val @finch.gen.strArg(ptr %t467, %S.ast.Node %t474, { ptr, i64, i64 } { ptr @.str.5347, i64 13, i64 0 }) %t476 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t466, %S.gen.Val %t475) store { ptr, i64, i64 } %t476, ptr %a477 %t478 = load ptr, ptr %a1 %t479 = call { ptr, i64, i64 } @finch.gen.strOut(ptr %t478) store { ptr, i64, i64 } %t479, ptr %a480 %t481 = load ptr, ptr %a1 %t482 = load { ptr, i64, i64 }, ptr %a480 store { ptr, i64, i64 } { ptr @.str.5348, i64 30, i64 0 }, ptr %a484 store { ptr, i64, i64 } %t482, ptr %a485 call void @finch_str_concat(ptr %a483, ptr %a484, ptr %a485) %t486 = load { ptr, i64, i64 }, ptr %a483 store { ptr, i64, i64 } %t486, ptr %a488 store { ptr, i64, i64 } { ptr @.str.5349, i64 6, i64 0 }, ptr %a489 call void @finch_str_concat(ptr %a487, ptr %a488, ptr %a489) %t490 = load { ptr, i64, i64 }, ptr %a487 %t491 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t490, ptr %a493 store { ptr, i64, i64 } %t491, ptr %a494 call void @finch_str_concat(ptr %a492, ptr %a493, ptr %a494) %t495 = load { ptr, i64, i64 }, ptr %a492 store { ptr, i64, i64 } %t495, ptr %a497 store { ptr, i64, i64 } { ptr @.str.5350, i64 6, i64 0 }, ptr %a498 call void @finch_str_concat(ptr %a496, ptr %a497, ptr %a498) %t499 = load { ptr, i64, i64 }, ptr %a496 %t500 = load { ptr, i64, i64 }, ptr %a477 store { ptr, i64, i64 } %t499, ptr %a502 store { ptr, i64, i64 } %t500, ptr %a503 call void @finch_str_concat(ptr %a501, ptr %a502, ptr %a503) %t504 = load { ptr, i64, i64 }, ptr %a501 store { ptr, i64, i64 } %t504, ptr %a506 store { ptr, i64, i64 } { ptr @.str.5351, i64 1, i64 0 }, ptr %a507 call void @finch_str_concat(ptr %a505, ptr %a506, ptr %a507) %t508 = load { ptr, i64, i64 }, ptr %a505 call void @finch.gen.emit(ptr %t481, { ptr, i64, i64 } %t508) %t509 = load ptr, ptr %a1 %t510 = load { ptr, i64, i64 }, ptr %a480 %t511 = call { ptr, i64, i64 } @finch.gen.load(ptr %t509, { ptr, i64, i64 } { ptr @.str.5352, i64 17, i64 0 }, { ptr, i64, i64 } %t510) %t512 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t511, 0 %t513 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5353, i64 3, i64 0 }) %t514 = insertvalue %S.gen.Val %t512, %S.ast.Type %t513, 1 %t515 = insertvalue %S.gen.Val %t514, i1 true, 2 ret %S.gen.Val %t515 endif8039: %t516 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t516, ptr %a517 store { ptr, i64, i64 } { ptr @.str.5354, i64 6, i64 0 }, ptr %a518 %t519 = call i32 @finch_str_eq(ptr %a517, ptr %a518) %t520 = icmp ne i32 %t519, 0 br i1 %t520, label %then8045, label %endif8047 then8045: %t521 = load ptr, ptr %a1 %t522 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t521, %S.ast.Node %t522, i64 2) %t523 = load ptr, ptr %a1 %t524 = load ptr, ptr %a1 %t525 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t526 = load { ptr, i64, i64 }, ptr %t525 %t527 = extractvalue { ptr, i64, i64 } %t526, 1 %t528 = icmp uge i64 1, %t527 br i1 %t528, label %range8048, label %inrange8049 range8048: call void @finch_panic_index(ptr @.str.5355, i64 4857, i64 1, i64 %t527) unreachable inrange8049: %t529 = extractvalue { ptr, i64, i64 } %t526, 0 %t530 = getelementptr inbounds %S.ast.Node, ptr %t529, i64 1 %t531 = load %S.ast.Node, ptr %t530 %t532 = call %S.gen.Val @finch.gen.expr(ptr %t524, %S.ast.Node %t531) %t533 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5356, i64 3, i64 0 }) %t534 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t535 = load { ptr, i64, i64 }, ptr %t534 %t536 = extractvalue { ptr, i64, i64 } %t535, 1 %t537 = icmp uge i64 1, %t536 br i1 %t537, label %range8050, label %inrange8051 range8050: call void @finch_panic_index(ptr @.str.5357, i64 4857, i64 1, i64 %t536) unreachable inrange8051: %t538 = extractvalue { ptr, i64, i64 } %t535, 0 %t539 = getelementptr inbounds %S.ast.Node, ptr %t538, i64 1 %t540 = load %S.ast.Node, ptr %t539 %t541 = call %S.gen.Val @finch.gen.coerce(ptr %t523, %S.gen.Val %t532, %S.ast.Type %t533, %S.ast.Node %t540, { ptr, i64, i64 } { ptr @.str.5358, i64 12, i64 0 }) %t542 = extractvalue %S.gen.Val %t541, 0 store { ptr, i64, i64 } %t542, ptr %a543 call void @finch_str_copy(ptr %a544, ptr %a543) %t545 = load { ptr, i64, i64 }, ptr %a544 store { ptr, i64, i64 } %t545, ptr %a546 %t547 = load ptr, ptr %a1 %t548 = load ptr, ptr %a1 %t549 = load ptr, ptr %a1 %t550 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t551 = load { ptr, i64, i64 }, ptr %t550 %t552 = extractvalue { ptr, i64, i64 } %t551, 1 %t553 = icmp uge i64 2, %t552 br i1 %t553, label %range8052, label %inrange8053 range8052: call void @finch_panic_index(ptr @.str.5359, i64 4858, i64 2, i64 %t552) unreachable inrange8053: %t554 = extractvalue { ptr, i64, i64 } %t551, 0 %t555 = getelementptr inbounds %S.ast.Node, ptr %t554, i64 2 %t556 = load %S.ast.Node, ptr %t555 %t557 = load %S.ast.Type, ptr %a15 %t558 = call %S.gen.Val @finch.gen.exprWant(ptr %t549, %S.ast.Node %t556, %S.ast.Type %t557) %t559 = load %S.ast.Type, ptr %a15 %t560 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t561 = load { ptr, i64, i64 }, ptr %t560 %t562 = extractvalue { ptr, i64, i64 } %t561, 1 %t563 = icmp uge i64 2, %t562 br i1 %t563, label %range8054, label %inrange8055 range8054: call void @finch_panic_index(ptr @.str.5360, i64 4858, i64 2, i64 %t562) unreachable inrange8055: %t564 = extractvalue { ptr, i64, i64 } %t561, 0 %t565 = getelementptr inbounds %S.ast.Node, ptr %t564, i64 2 %t566 = load %S.ast.Node, ptr %t565 %t567 = call %S.gen.Val @finch.gen.coerce(ptr %t548, %S.gen.Val %t558, %S.ast.Type %t559, %S.ast.Node %t566, { ptr, i64, i64 } { ptr @.str.5361, i64 11, i64 0 }) %t568 = call { ptr, i64, i64 } @finch.gen.own(ptr %t547, %S.gen.Val %t567) store { ptr, i64, i64 } %t568, ptr %a569 %t570 = load ptr, ptr %a1 %t571 = load ptr, ptr %a1 %t572 = icmp eq ptr %t571, null br i1 %t572, label %panic8056, label %ok8057 panic8056: call void @finch_panic(ptr @.str.5362, i64 4859, ptr @.str.5363) unreachable ok8057: %t573 = getelementptr inbounds %S.gen.Gen, ptr %t571, i32 0, i32 1 %t574 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 %t575 = load i64, ptr %t574 %t576 = load { ptr, i64, i64 }, ptr %t573 %t577 = extractvalue { ptr, i64, i64 } %t576, 1 %t578 = icmp uge i64 %t575, %t577 br i1 %t578, label %range8058, label %inrange8059 range8058: call void @finch_panic_index(ptr @.str.5364, i64 4859, i64 %t575, i64 %t577) unreachable inrange8059: %t579 = extractvalue { ptr, i64, i64 } %t576, 0 %t580 = getelementptr inbounds { ptr, i64, i64 }, ptr %t579, i64 %t575 %t581 = load { ptr, i64, i64 }, ptr %t580 %t582 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t570, { ptr, i64, i64 } %t581) store { ptr, i64, i64 } %t582, ptr %a583 %t584 = load ptr, ptr %a1 %t585 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } { ptr @.str.5365, i64 36, i64 0 }, ptr %a587 store { ptr, i64, i64 } %t585, ptr %a588 call void @finch_str_concat(ptr %a586, ptr %a587, ptr %a588) %t589 = load { ptr, i64, i64 }, ptr %a586 store { ptr, i64, i64 } %t589, ptr %a591 store { ptr, i64, i64 } { ptr @.str.5366, i64 6, i64 0 }, ptr %a592 call void @finch_str_concat(ptr %a590, ptr %a591, ptr %a592) %t593 = load { ptr, i64, i64 }, ptr %a590 %t594 = load { ptr, i64, i64 }, ptr %a546 store { ptr, i64, i64 } %t593, ptr %a596 store { ptr, i64, i64 } %t594, ptr %a597 call void @finch_str_concat(ptr %a595, ptr %a596, ptr %a597) %t598 = load { ptr, i64, i64 }, ptr %a595 store { ptr, i64, i64 } %t598, ptr %a600 store { ptr, i64, i64 } { ptr @.str.5367, i64 6, i64 0 }, ptr %a601 call void @finch_str_concat(ptr %a599, ptr %a600, ptr %a601) %t602 = load { ptr, i64, i64 }, ptr %a599 %t603 = load ptr, ptr %a1 %t604 = load %S.ast.Type, ptr %a15 %t605 = call { ptr, i64, i64 } @finch.gen.sizeOf(ptr %t603, %S.ast.Type %t604) store { ptr, i64, i64 } %t602, ptr %a607 store { ptr, i64, i64 } %t605, ptr %a608 call void @finch_str_concat(ptr %a606, ptr %a607, ptr %a608) %t609 = load { ptr, i64, i64 }, ptr %a606 store { ptr, i64, i64 } %t609, ptr %a611 store { ptr, i64, i64 } { ptr @.str.5368, i64 6, i64 0 }, ptr %a612 call void @finch_str_concat(ptr %a610, ptr %a611, ptr %a612) %t613 = load { ptr, i64, i64 }, ptr %a610 %t614 = load { ptr, i64, i64 }, ptr %a583 store { ptr, i64, i64 } %t613, ptr %a616 store { ptr, i64, i64 } %t614, ptr %a617 call void @finch_str_concat(ptr %a615, ptr %a616, ptr %a617) %t618 = load { ptr, i64, i64 }, ptr %a615 store { ptr, i64, i64 } %t618, ptr %a620 store { ptr, i64, i64 } { ptr @.str.5369, i64 6, i64 0 }, ptr %a621 call void @finch_str_concat(ptr %a619, ptr %a620, ptr %a621) %t622 = load { ptr, i64, i64 }, ptr %a619 %t623 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 %t624 = load i64, ptr %t623 call void @finch_str_from_int(ptr %a625, i64 %t624) %t626 = load { ptr, i64, i64 }, ptr %a625 store { ptr, i64, i64 } %t622, ptr %a628 store { ptr, i64, i64 } %t626, ptr %a629 call void @finch_str_concat(ptr %a627, ptr %a628, ptr %a629) %t630 = load { ptr, i64, i64 }, ptr %a627 store { ptr, i64, i64 } %t630, ptr %a632 store { ptr, i64, i64 } { ptr @.str.5370, i64 1, i64 0 }, ptr %a633 call void @finch_str_concat(ptr %a631, ptr %a632, ptr %a633) %t634 = load { ptr, i64, i64 }, ptr %a631 call void @finch.gen.emit(ptr %t584, { ptr, i64, i64 } %t634) %t635 = load ptr, ptr %a1 %t636 = load { ptr, i64, i64 }, ptr %a3 %t637 = call { ptr, i64, i64 } @finch.gen.load(ptr %t635, { ptr, i64, i64 } { ptr @.str.5371, i64 3, i64 0 }, { ptr, i64, i64 } %t636) store { ptr, i64, i64 } %t637, ptr %a638 %t639 = load ptr, ptr %a1 %t640 = load { ptr, i64, i64 }, ptr %a19 %t641 = load { ptr, i64, i64 }, ptr %a569 %t642 = load ptr, ptr %a1 %t643 = load { ptr, i64, i64 }, ptr %a19 store { ptr, i64, i64 } { ptr @.str.5372, i64 23, i64 0 }, ptr %a645 store { ptr, i64, i64 } %t643, ptr %a646 call void @finch_str_concat(ptr %a644, ptr %a645, ptr %a646) %t647 = load { ptr, i64, i64 }, ptr %a644 store { ptr, i64, i64 } %t647, ptr %a649 store { ptr, i64, i64 } { ptr @.str.5373, i64 6, i64 0 }, ptr %a650 call void @finch_str_concat(ptr %a648, ptr %a649, ptr %a650) %t651 = load { ptr, i64, i64 }, ptr %a648 %t652 = load { ptr, i64, i64 }, ptr %a638 store { ptr, i64, i64 } %t651, ptr %a654 store { ptr, i64, i64 } %t652, ptr %a655 call void @finch_str_concat(ptr %a653, ptr %a654, ptr %a655) %t656 = load { ptr, i64, i64 }, ptr %a653 store { ptr, i64, i64 } %t656, ptr %a658 store { ptr, i64, i64 } { ptr @.str.5374, i64 6, i64 0 }, ptr %a659 call void @finch_str_concat(ptr %a657, ptr %a658, ptr %a659) %t660 = load { ptr, i64, i64 }, ptr %a657 %t661 = load { ptr, i64, i64 }, ptr %a546 store { ptr, i64, i64 } %t660, ptr %a663 store { ptr, i64, i64 } %t661, ptr %a664 call void @finch_str_concat(ptr %a662, ptr %a663, ptr %a664) %t665 = load { ptr, i64, i64 }, ptr %a662 %t666 = call { ptr, i64, i64 } @finch.gen.op(ptr %t642, { ptr, i64, i64 } %t665) call void @finch.gen.store(ptr %t639, { ptr, i64, i64 } %t640, { ptr, i64, i64 } %t641, { ptr, i64, i64 } %t666) %t667 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5375, i64 4, i64 0 }) %t668 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t667, 1 ret %S.gen.Val %t668 endif8047: %t669 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t669, ptr %a670 store { ptr, i64, i64 } { ptr @.str.5376, i64 6, i64 0 }, ptr %a671 %t672 = call i32 @finch_str_eq(ptr %a670, ptr %a671) %t673 = icmp ne i32 %t672, 0 br i1 %t673, label %then8060, label %endif8062 then8060: %t674 = load ptr, ptr %a1 %t675 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t674, %S.ast.Node %t675, i64 1) %t676 = load ptr, ptr %a1 %t677 = load ptr, ptr %a1 %t678 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t679 = load { ptr, i64, i64 }, ptr %t678 %t680 = extractvalue { ptr, i64, i64 } %t679, 1 %t681 = icmp uge i64 1, %t680 br i1 %t681, label %range8063, label %inrange8064 range8063: call void @finch_panic_index(ptr @.str.5377, i64 4867, i64 1, i64 %t680) unreachable inrange8064: %t682 = extractvalue { ptr, i64, i64 } %t679, 0 %t683 = getelementptr inbounds %S.ast.Node, ptr %t682, i64 1 %t684 = load %S.ast.Node, ptr %t683 %t685 = call %S.gen.Val @finch.gen.expr(ptr %t677, %S.ast.Node %t684) %t686 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5378, i64 3, i64 0 }) %t687 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t688 = load { ptr, i64, i64 }, ptr %t687 %t689 = extractvalue { ptr, i64, i64 } %t688, 1 %t690 = icmp uge i64 1, %t689 br i1 %t690, label %range8065, label %inrange8066 range8065: call void @finch_panic_index(ptr @.str.5379, i64 4867, i64 1, i64 %t689) unreachable inrange8066: %t691 = extractvalue { ptr, i64, i64 } %t688, 0 %t692 = getelementptr inbounds %S.ast.Node, ptr %t691, i64 1 %t693 = load %S.ast.Node, ptr %t692 %t694 = call %S.gen.Val @finch.gen.coerce(ptr %t676, %S.gen.Val %t685, %S.ast.Type %t686, %S.ast.Node %t693, { ptr, i64, i64 } { ptr @.str.5380, i64 12, i64 0 }) %t695 = extractvalue %S.gen.Val %t694, 0 store { ptr, i64, i64 } %t695, ptr %a696 call void @finch_str_copy(ptr %a697, ptr %a696) %t698 = load { ptr, i64, i64 }, ptr %a697 store { ptr, i64, i64 } %t698, ptr %a699 %t700 = load ptr, ptr %a1 %t701 = load { ptr, i64, i64 }, ptr %a699 %t702 = load ptr, ptr %a1 %t703 = load { ptr, i64, i64 }, ptr %a37 %t704 = call { ptr, i64, i64 } @finch.gen.load(ptr %t702, { ptr, i64, i64 } { ptr @.str.5381, i64 3, i64 0 }, { ptr, i64, i64 } %t703) %t705 = load %S.ast.Node, ptr %a2 call void @finch.gen.boundsCheck(ptr %t700, { ptr, i64, i64 } %t701, { ptr, i64, i64 } %t704, %S.ast.Node %t705) %t706 = load ptr, ptr %a1 %t707 = load { ptr, i64, i64 }, ptr %a3 %t708 = call { ptr, i64, i64 } @finch.gen.load(ptr %t706, { ptr, i64, i64 } { ptr @.str.5382, i64 3, i64 0 }, { ptr, i64, i64 } %t707) store { ptr, i64, i64 } %t708, ptr %a709 %t710 = load ptr, ptr %a1 %t711 = load { ptr, i64, i64 }, ptr %a19 %t712 = load ptr, ptr %a1 %t713 = load { ptr, i64, i64 }, ptr %a19 store { ptr, i64, i64 } { ptr @.str.5383, i64 23, i64 0 }, ptr %a715 store { ptr, i64, i64 } %t713, ptr %a716 call void @finch_str_concat(ptr %a714, ptr %a715, ptr %a716) %t717 = load { ptr, i64, i64 }, ptr %a714 store { ptr, i64, i64 } %t717, ptr %a719 store { ptr, i64, i64 } { ptr @.str.5384, i64 6, i64 0 }, ptr %a720 call void @finch_str_concat(ptr %a718, ptr %a719, ptr %a720) %t721 = load { ptr, i64, i64 }, ptr %a718 %t722 = load { ptr, i64, i64 }, ptr %a709 store { ptr, i64, i64 } %t721, ptr %a724 store { ptr, i64, i64 } %t722, ptr %a725 call void @finch_str_concat(ptr %a723, ptr %a724, ptr %a725) %t726 = load { ptr, i64, i64 }, ptr %a723 store { ptr, i64, i64 } %t726, ptr %a728 store { ptr, i64, i64 } { ptr @.str.5385, i64 6, i64 0 }, ptr %a729 call void @finch_str_concat(ptr %a727, ptr %a728, ptr %a729) %t730 = load { ptr, i64, i64 }, ptr %a727 %t731 = load { ptr, i64, i64 }, ptr %a699 store { ptr, i64, i64 } %t730, ptr %a733 store { ptr, i64, i64 } %t731, ptr %a734 call void @finch_str_concat(ptr %a732, ptr %a733, ptr %a734) %t735 = load { ptr, i64, i64 }, ptr %a732 %t736 = call { ptr, i64, i64 } @finch.gen.op(ptr %t712, { ptr, i64, i64 } %t735) %t737 = call { ptr, i64, i64 } @finch.gen.load(ptr %t710, { ptr, i64, i64 } %t711, { ptr, i64, i64 } %t736) store { ptr, i64, i64 } %t737, ptr %a738 %t739 = load ptr, ptr %a1 %t740 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } { ptr @.str.5386, i64 36, i64 0 }, ptr %a742 store { ptr, i64, i64 } %t740, ptr %a743 call void @finch_str_concat(ptr %a741, ptr %a742, ptr %a743) %t744 = load { ptr, i64, i64 }, ptr %a741 store { ptr, i64, i64 } %t744, ptr %a746 store { ptr, i64, i64 } { ptr @.str.5387, i64 6, i64 0 }, ptr %a747 call void @finch_str_concat(ptr %a745, ptr %a746, ptr %a747) %t748 = load { ptr, i64, i64 }, ptr %a745 %t749 = load { ptr, i64, i64 }, ptr %a699 store { ptr, i64, i64 } %t748, ptr %a751 store { ptr, i64, i64 } %t749, ptr %a752 call void @finch_str_concat(ptr %a750, ptr %a751, ptr %a752) %t753 = load { ptr, i64, i64 }, ptr %a750 store { ptr, i64, i64 } %t753, ptr %a755 store { ptr, i64, i64 } { ptr @.str.5388, i64 6, i64 0 }, ptr %a756 call void @finch_str_concat(ptr %a754, ptr %a755, ptr %a756) %t757 = load { ptr, i64, i64 }, ptr %a754 %t758 = load ptr, ptr %a1 %t759 = load %S.ast.Type, ptr %a15 %t760 = call { ptr, i64, i64 } @finch.gen.sizeOf(ptr %t758, %S.ast.Type %t759) store { ptr, i64, i64 } %t757, ptr %a762 store { ptr, i64, i64 } %t760, ptr %a763 call void @finch_str_concat(ptr %a761, ptr %a762, ptr %a763) %t764 = load { ptr, i64, i64 }, ptr %a761 store { ptr, i64, i64 } %t764, ptr %a766 store { ptr, i64, i64 } { ptr @.str.5389, i64 1, i64 0 }, ptr %a767 call void @finch_str_concat(ptr %a765, ptr %a766, ptr %a767) %t768 = load { ptr, i64, i64 }, ptr %a765 call void @finch.gen.emit(ptr %t739, { ptr, i64, i64 } %t768) %t769 = load { ptr, i64, i64 }, ptr %a738 store { ptr, i64, i64 } %t769, ptr %a770 call void @finch_str_copy(ptr %a771, ptr %a770) %t772 = load { ptr, i64, i64 }, ptr %a771 %t773 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t772, 0 %t774 = load %S.ast.Type, ptr %a15 store %S.ast.Type %t774, ptr %a775 call void @finch.copy.S_ast_Type(ptr %a776, ptr %a775) %t777 = load %S.ast.Type, ptr %a776 %t778 = insertvalue %S.gen.Val %t773, %S.ast.Type %t777, 1 %t779 = load ptr, ptr %a1 %t780 = load %S.ast.Type, ptr %a15 %t781 = call i1 @finch.gen.owning(ptr %t779, %S.ast.Type %t780) %t782 = insertvalue %S.gen.Val %t778, i1 %t781, 2 ret %S.gen.Val %t782 endif8062: %t783 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t783, ptr %a784 store { ptr, i64, i64 } { ptr @.str.5390, i64 6, i64 0 }, ptr %a785 %t786 = call i32 @finch_str_eq(ptr %a784, ptr %a785) %t787 = icmp ne i32 %t786, 0 br i1 %t787, label %then8067, label %endif8069 then8067: %t788 = load ptr, ptr %a1 %t789 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t788, %S.ast.Node %t789, i64 1) %t790 = load ptr, ptr %a1 %t791 = load ptr, ptr %a1 %t792 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t793 = load { ptr, i64, i64 }, ptr %t792 %t794 = extractvalue { ptr, i64, i64 } %t793, 1 %t795 = icmp uge i64 1, %t794 br i1 %t795, label %range8070, label %inrange8071 range8070: call void @finch_panic_index(ptr @.str.5391, i64 4876, i64 1, i64 %t794) unreachable inrange8071: %t796 = extractvalue { ptr, i64, i64 } %t793, 0 %t797 = getelementptr inbounds %S.ast.Node, ptr %t796, i64 1 %t798 = load %S.ast.Node, ptr %t797 %t799 = call %S.gen.Val @finch.gen.expr(ptr %t791, %S.ast.Node %t798) %t800 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5392, i64 3, i64 0 }) %t801 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t802 = load { ptr, i64, i64 }, ptr %t801 %t803 = extractvalue { ptr, i64, i64 } %t802, 1 %t804 = icmp uge i64 1, %t803 br i1 %t804, label %range8072, label %inrange8073 range8072: call void @finch_panic_index(ptr @.str.5393, i64 4876, i64 1, i64 %t803) unreachable inrange8073: %t805 = extractvalue { ptr, i64, i64 } %t802, 0 %t806 = getelementptr inbounds %S.ast.Node, ptr %t805, i64 1 %t807 = load %S.ast.Node, ptr %t806 %t808 = call %S.gen.Val @finch.gen.coerce(ptr %t790, %S.gen.Val %t799, %S.ast.Type %t800, %S.ast.Node %t807, { ptr, i64, i64 } { ptr @.str.5394, i64 14, i64 0 }) %t809 = extractvalue %S.gen.Val %t808, 0 store { ptr, i64, i64 } %t809, ptr %a810 call void @finch_str_copy(ptr %a811, ptr %a810) %t812 = load { ptr, i64, i64 }, ptr %a811 store { ptr, i64, i64 } %t812, ptr %a813 %t814 = load ptr, ptr %a1 %t815 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } { ptr @.str.5395, i64 32, i64 0 }, ptr %a817 store { ptr, i64, i64 } %t815, ptr %a818 call void @finch_str_concat(ptr %a816, ptr %a817, ptr %a818) %t819 = load { ptr, i64, i64 }, ptr %a816 store { ptr, i64, i64 } %t819, ptr %a821 store { ptr, i64, i64 } { ptr @.str.5396, i64 6, i64 0 }, ptr %a822 call void @finch_str_concat(ptr %a820, ptr %a821, ptr %a822) %t823 = load { ptr, i64, i64 }, ptr %a820 %t824 = load { ptr, i64, i64 }, ptr %a813 store { ptr, i64, i64 } %t823, ptr %a826 store { ptr, i64, i64 } %t824, ptr %a827 call void @finch_str_concat(ptr %a825, ptr %a826, ptr %a827) %t828 = load { ptr, i64, i64 }, ptr %a825 store { ptr, i64, i64 } %t828, ptr %a830 store { ptr, i64, i64 } { ptr @.str.5397, i64 6, i64 0 }, ptr %a831 call void @finch_str_concat(ptr %a829, ptr %a830, ptr %a831) %t832 = load { ptr, i64, i64 }, ptr %a829 %t833 = load ptr, ptr %a1 %t834 = load %S.ast.Type, ptr %a15 %t835 = call { ptr, i64, i64 } @finch.gen.sizeOf(ptr %t833, %S.ast.Type %t834) store { ptr, i64, i64 } %t832, ptr %a837 store { ptr, i64, i64 } %t835, ptr %a838 call void @finch_str_concat(ptr %a836, ptr %a837, ptr %a838) %t839 = load { ptr, i64, i64 }, ptr %a836 store { ptr, i64, i64 } %t839, ptr %a841 store { ptr, i64, i64 } { ptr @.str.5398, i64 1, i64 0 }, ptr %a842 call void @finch_str_concat(ptr %a840, ptr %a841, ptr %a842) %t843 = load { ptr, i64, i64 }, ptr %a840 call void @finch.gen.emit(ptr %t814, { ptr, i64, i64 } %t843) %t844 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5399, i64 4, i64 0 }) %t845 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t844, 1 ret %S.gen.Val %t845 endif8069: %t846 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t846, ptr %a847 store { ptr, i64, i64 } { ptr @.str.5400, i64 7, i64 0 }, ptr %a848 %t849 = call i32 @finch_str_eq(ptr %a847, ptr %a848) %t850 = icmp ne i32 %t849, 0 br i1 %t850, label %then8074, label %endif8076 then8074: %t851 = load ptr, ptr %a1 %t852 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t851, %S.ast.Node %t852, i64 0) %t853 = load ptr, ptr %a1 %t854 = load { ptr, i64, i64 }, ptr %a37 %t855 = call { ptr, i64, i64 } @finch.gen.load(ptr %t853, { ptr, i64, i64 } { ptr @.str.5401, i64 3, i64 0 }, { ptr, i64, i64 } %t854) store { ptr, i64, i64 } %t855, ptr %a856 %t857 = load ptr, ptr %a1 %t858 = load { ptr, i64, i64 }, ptr %a3 %t859 = call { ptr, i64, i64 } @finch.gen.load(ptr %t857, { ptr, i64, i64 } { ptr @.str.5402, i64 3, i64 0 }, { ptr, i64, i64 } %t858) store { ptr, i64, i64 } %t859, ptr %a860 %t861 = load ptr, ptr %a1 %t862 = load { ptr, i64, i64 }, ptr %a856 store { ptr, i64, i64 } { ptr @.str.5403, i64 9, i64 0 }, ptr %a864 store { ptr, i64, i64 } %t862, ptr %a865 call void @finch_str_concat(ptr %a863, ptr %a864, ptr %a865) %t866 = load { ptr, i64, i64 }, ptr %a863 store { ptr, i64, i64 } %t866, ptr %a868 store { ptr, i64, i64 } { ptr @.str.5404, i64 3, i64 0 }, ptr %a869 call void @finch_str_concat(ptr %a867, ptr %a868, ptr %a869) %t870 = load { ptr, i64, i64 }, ptr %a867 %t871 = call { ptr, i64, i64 } @finch.gen.op(ptr %t861, { ptr, i64, i64 } %t870) store { ptr, i64, i64 } %t871, ptr %a872 %t873 = load ptr, ptr %a1 %t874 = load { ptr, i64, i64 }, ptr %a872 %t875 = call { ptr, i64, i64 } @finch.gen.loopStart(ptr %t873, { ptr, i64, i64 } %t874) store { ptr, i64, i64 } %t875, ptr %a876 %t877 = load ptr, ptr %a1 %t878 = load { ptr, i64, i64 }, ptr %a19 store { ptr, i64, i64 } { ptr @.str.5405, i64 23, i64 0 }, ptr %a880 store { ptr, i64, i64 } %t878, ptr %a881 call void @finch_str_concat(ptr %a879, ptr %a880, ptr %a881) %t882 = load { ptr, i64, i64 }, ptr %a879 store { ptr, i64, i64 } %t882, ptr %a884 store { ptr, i64, i64 } { ptr @.str.5406, i64 6, i64 0 }, ptr %a885 call void @finch_str_concat(ptr %a883, ptr %a884, ptr %a885) %t886 = load { ptr, i64, i64 }, ptr %a883 %t887 = load { ptr, i64, i64 }, ptr %a860 store { ptr, i64, i64 } %t886, ptr %a889 store { ptr, i64, i64 } %t887, ptr %a890 call void @finch_str_concat(ptr %a888, ptr %a889, ptr %a890) %t891 = load { ptr, i64, i64 }, ptr %a888 store { ptr, i64, i64 } %t891, ptr %a893 store { ptr, i64, i64 } { ptr @.str.5407, i64 6, i64 0 }, ptr %a894 call void @finch_str_concat(ptr %a892, ptr %a893, ptr %a894) %t895 = load { ptr, i64, i64 }, ptr %a892 %t896 = load { ptr, i64, i64 }, ptr %a876 %t897 = extractvalue { ptr, i64, i64 } %t896, 1 %t898 = icmp uge i64 3, %t897 br i1 %t898, label %range8077, label %inrange8078 range8077: call void @finch_panic_index(ptr @.str.5408, i64 4886, i64 3, i64 %t897) unreachable inrange8078: %t899 = extractvalue { ptr, i64, i64 } %t896, 0 %t900 = getelementptr inbounds { ptr, i64, i64 }, ptr %t899, i64 3 %t901 = load { ptr, i64, i64 }, ptr %t900 store { ptr, i64, i64 } %t895, ptr %a903 store { ptr, i64, i64 } %t901, ptr %a904 call void @finch_str_concat(ptr %a902, ptr %a903, ptr %a904) %t905 = load { ptr, i64, i64 }, ptr %a902 %t906 = call { ptr, i64, i64 } @finch.gen.op(ptr %t877, { ptr, i64, i64 } %t905) store { ptr, i64, i64 } %t906, ptr %a907 %t908 = load ptr, ptr %a1 %t909 = load ptr, ptr %a1 %t910 = load { ptr, i64, i64 }, ptr %a856 store { ptr, i64, i64 } { ptr @.str.5410, i64 8, i64 0 }, ptr %a912 store { ptr, i64, i64 } %t910, ptr %a913 call void @finch_str_concat(ptr %a911, ptr %a912, ptr %a913) %t914 = load { ptr, i64, i64 }, ptr %a911 store { ptr, i64, i64 } %t914, ptr %a916 store { ptr, i64, i64 } { ptr @.str.5411, i64 3, i64 0 }, ptr %a917 call void @finch_str_concat(ptr %a915, ptr %a916, ptr %a917) %t918 = load { ptr, i64, i64 }, ptr %a915 %t919 = call { ptr, i64, i64 } @finch.gen.op(ptr %t909, { ptr, i64, i64 } %t918) store { ptr, i64, i64 } { ptr @.str.5409, i64 8, i64 0 }, ptr %a921 store { ptr, i64, i64 } %t919, ptr %a922 call void @finch_str_concat(ptr %a920, ptr %a921, ptr %a922) %t923 = load { ptr, i64, i64 }, ptr %a920 store { ptr, i64, i64 } %t923, ptr %a925 store { ptr, i64, i64 } { ptr @.str.5412, i64 2, i64 0 }, ptr %a926 call void @finch_str_concat(ptr %a924, ptr %a925, ptr %a926) %t927 = load { ptr, i64, i64 }, ptr %a924 %t928 = load { ptr, i64, i64 }, ptr %a876 %t929 = extractvalue { ptr, i64, i64 } %t928, 1 %t930 = icmp uge i64 3, %t929 br i1 %t930, label %range8079, label %inrange8080 range8079: call void @finch_panic_index(ptr @.str.5413, i64 4887, i64 3, i64 %t929) unreachable inrange8080: %t931 = extractvalue { ptr, i64, i64 } %t928, 0 %t932 = getelementptr inbounds { ptr, i64, i64 }, ptr %t931, i64 3 %t933 = load { ptr, i64, i64 }, ptr %t932 store { ptr, i64, i64 } %t927, ptr %a935 store { ptr, i64, i64 } %t933, ptr %a936 call void @finch_str_concat(ptr %a934, ptr %a935, ptr %a936) %t937 = load { ptr, i64, i64 }, ptr %a934 %t938 = call { ptr, i64, i64 } @finch.gen.op(ptr %t908, { ptr, i64, i64 } %t937) store { ptr, i64, i64 } %t938, ptr %a939 %t940 = load ptr, ptr %a1 %t941 = load { ptr, i64, i64 }, ptr %a19 store { ptr, i64, i64 } { ptr @.str.5414, i64 23, i64 0 }, ptr %a943 store { ptr, i64, i64 } %t941, ptr %a944 call void @finch_str_concat(ptr %a942, ptr %a943, ptr %a944) %t945 = load { ptr, i64, i64 }, ptr %a942 store { ptr, i64, i64 } %t945, ptr %a947 store { ptr, i64, i64 } { ptr @.str.5415, i64 6, i64 0 }, ptr %a948 call void @finch_str_concat(ptr %a946, ptr %a947, ptr %a948) %t949 = load { ptr, i64, i64 }, ptr %a946 %t950 = load { ptr, i64, i64 }, ptr %a860 store { ptr, i64, i64 } %t949, ptr %a952 store { ptr, i64, i64 } %t950, ptr %a953 call void @finch_str_concat(ptr %a951, ptr %a952, ptr %a953) %t954 = load { ptr, i64, i64 }, ptr %a951 store { ptr, i64, i64 } %t954, ptr %a956 store { ptr, i64, i64 } { ptr @.str.5416, i64 6, i64 0 }, ptr %a957 call void @finch_str_concat(ptr %a955, ptr %a956, ptr %a957) %t958 = load { ptr, i64, i64 }, ptr %a955 %t959 = load { ptr, i64, i64 }, ptr %a939 store { ptr, i64, i64 } %t958, ptr %a961 store { ptr, i64, i64 } %t959, ptr %a962 call void @finch_str_concat(ptr %a960, ptr %a961, ptr %a962) %t963 = load { ptr, i64, i64 }, ptr %a960 %t964 = call { ptr, i64, i64 } @finch.gen.op(ptr %t940, { ptr, i64, i64 } %t963) store { ptr, i64, i64 } %t964, ptr %a965 %t966 = load ptr, ptr %a1 %t967 = load { ptr, i64, i64 }, ptr %a19 %t968 = load { ptr, i64, i64 }, ptr %a907 %t969 = call { ptr, i64, i64 } @finch.gen.load(ptr %t966, { ptr, i64, i64 } %t967, { ptr, i64, i64 } %t968) store { ptr, i64, i64 } %t969, ptr %a970 %t971 = load ptr, ptr %a1 %t972 = load { ptr, i64, i64 }, ptr %a19 %t973 = load { ptr, i64, i64 }, ptr %a965 %t974 = call { ptr, i64, i64 } @finch.gen.load(ptr %t971, { ptr, i64, i64 } %t972, { ptr, i64, i64 } %t973) store { ptr, i64, i64 } %t974, ptr %a975 %t976 = load ptr, ptr %a1 %t977 = load { ptr, i64, i64 }, ptr %a19 %t978 = load { ptr, i64, i64 }, ptr %a975 %t979 = load { ptr, i64, i64 }, ptr %a907 call void @finch.gen.store(ptr %t976, { ptr, i64, i64 } %t977, { ptr, i64, i64 } %t978, { ptr, i64, i64 } %t979) %t980 = load ptr, ptr %a1 %t981 = load { ptr, i64, i64 }, ptr %a19 %t982 = load { ptr, i64, i64 }, ptr %a970 %t983 = load { ptr, i64, i64 }, ptr %a965 call void @finch.gen.store(ptr %t980, { ptr, i64, i64 } %t981, { ptr, i64, i64 } %t982, { ptr, i64, i64 } %t983) %t984 = load ptr, ptr %a1 %t985 = load { ptr, i64, i64 }, ptr %a876 call void @finch.gen.loopEnd(ptr %t984, { ptr, i64, i64 } %t985) %t986 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5417, i64 4, i64 0 }) %t987 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t986, 1 ret %S.gen.Val %t987 endif8076: %t988 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t988, ptr %a989 store { ptr, i64, i64 } { ptr @.str.5418, i64 5, i64 0 }, ptr %a990 %t991 = call i32 @finch_str_eq(ptr %a989, ptr %a990) %t992 = icmp ne i32 %t991, 0 br i1 %t992, label %then8081, label %endif8083 then8081: %t993 = load ptr, ptr %a1 %t994 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t993, %S.ast.Node %t994, i64 2) %t995 = load ptr, ptr %a1 %t996 = load ptr, ptr %a1 %t997 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t998 = load { ptr, i64, i64 }, ptr %t997 %t999 = extractvalue { ptr, i64, i64 } %t998, 1 %t1000 = icmp uge i64 1, %t999 br i1 %t1000, label %range8084, label %inrange8085 range8084: call void @finch_panic_index(ptr @.str.5419, i64 4898, i64 1, i64 %t999) unreachable inrange8085: %t1001 = extractvalue { ptr, i64, i64 } %t998, 0 %t1002 = getelementptr inbounds %S.ast.Node, ptr %t1001, i64 1 %t1003 = load %S.ast.Node, ptr %t1002 %t1004 = call %S.gen.Val @finch.gen.expr(ptr %t996, %S.ast.Node %t1003) %t1005 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5420, i64 3, i64 0 }) %t1006 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t1007 = load { ptr, i64, i64 }, ptr %t1006 %t1008 = extractvalue { ptr, i64, i64 } %t1007, 1 %t1009 = icmp uge i64 1, %t1008 br i1 %t1009, label %range8086, label %inrange8087 range8086: call void @finch_panic_index(ptr @.str.5421, i64 4898, i64 1, i64 %t1008) unreachable inrange8087: %t1010 = extractvalue { ptr, i64, i64 } %t1007, 0 %t1011 = getelementptr inbounds %S.ast.Node, ptr %t1010, i64 1 %t1012 = load %S.ast.Node, ptr %t1011 %t1013 = call %S.gen.Val @finch.gen.coerce(ptr %t995, %S.gen.Val %t1004, %S.ast.Type %t1005, %S.ast.Node %t1012, { ptr, i64, i64 } { ptr @.str.5422, i64 9, i64 0 }) %t1014 = extractvalue %S.gen.Val %t1013, 0 store { ptr, i64, i64 } %t1014, ptr %a1015 call void @finch_str_copy(ptr %a1016, ptr %a1015) %t1017 = load { ptr, i64, i64 }, ptr %a1016 store { ptr, i64, i64 } %t1017, ptr %a1018 %t1019 = load ptr, ptr %a1 %t1020 = load ptr, ptr %a1 %t1021 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t1022 = load { ptr, i64, i64 }, ptr %t1021 %t1023 = extractvalue { ptr, i64, i64 } %t1022, 1 %t1024 = icmp uge i64 2, %t1023 br i1 %t1024, label %range8088, label %inrange8089 range8088: call void @finch_panic_index(ptr @.str.5423, i64 4899, i64 2, i64 %t1023) unreachable inrange8089: %t1025 = extractvalue { ptr, i64, i64 } %t1022, 0 %t1026 = getelementptr inbounds %S.ast.Node, ptr %t1025, i64 2 %t1027 = load %S.ast.Node, ptr %t1026 %t1028 = call %S.gen.Val @finch.gen.expr(ptr %t1020, %S.ast.Node %t1027) %t1029 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5424, i64 3, i64 0 }) %t1030 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t1031 = load { ptr, i64, i64 }, ptr %t1030 %t1032 = extractvalue { ptr, i64, i64 } %t1031, 1 %t1033 = icmp uge i64 2, %t1032 br i1 %t1033, label %range8090, label %inrange8091 range8090: call void @finch_panic_index(ptr @.str.5425, i64 4899, i64 2, i64 %t1032) unreachable inrange8091: %t1034 = extractvalue { ptr, i64, i64 } %t1031, 0 %t1035 = getelementptr inbounds %S.ast.Node, ptr %t1034, i64 2 %t1036 = load %S.ast.Node, ptr %t1035 %t1037 = call %S.gen.Val @finch.gen.coerce(ptr %t1019, %S.gen.Val %t1028, %S.ast.Type %t1029, %S.ast.Node %t1036, { ptr, i64, i64 } { ptr @.str.5426, i64 7, i64 0 }) %t1038 = extractvalue %S.gen.Val %t1037, 0 store { ptr, i64, i64 } %t1038, ptr %a1039 call void @finch_str_copy(ptr %a1040, ptr %a1039) %t1041 = load { ptr, i64, i64 }, ptr %a1040 store { ptr, i64, i64 } %t1041, ptr %a1042 %t1043 = load ptr, ptr %a1 %t1044 = load { ptr, i64, i64 }, ptr %a37 %t1045 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1043, { ptr, i64, i64 } { ptr @.str.5427, i64 3, i64 0 }, { ptr, i64, i64 } %t1044) store { ptr, i64, i64 } %t1045, ptr %a1046 %t1047 = load ptr, ptr %a1 %t1048 = load { ptr, i64, i64 }, ptr %a1018 store { ptr, i64, i64 } { ptr @.str.5428, i64 13, i64 0 }, ptr %a1050 store { ptr, i64, i64 } %t1048, ptr %a1051 call void @finch_str_concat(ptr %a1049, ptr %a1050, ptr %a1051) %t1052 = load { ptr, i64, i64 }, ptr %a1049 store { ptr, i64, i64 } %t1052, ptr %a1054 store { ptr, i64, i64 } { ptr @.str.5429, i64 3, i64 0 }, ptr %a1055 call void @finch_str_concat(ptr %a1053, ptr %a1054, ptr %a1055) %t1056 = load { ptr, i64, i64 }, ptr %a1053 %t1057 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1047, { ptr, i64, i64 } %t1056) store { ptr, i64, i64 } %t1057, ptr %a1058 %t1059 = load ptr, ptr %a1 %t1060 = load { ptr, i64, i64 }, ptr %a1042 store { ptr, i64, i64 } { ptr @.str.5430, i64 13, i64 0 }, ptr %a1062 store { ptr, i64, i64 } %t1060, ptr %a1063 call void @finch_str_concat(ptr %a1061, ptr %a1062, ptr %a1063) %t1064 = load { ptr, i64, i64 }, ptr %a1061 store { ptr, i64, i64 } %t1064, ptr %a1066 store { ptr, i64, i64 } { ptr @.str.5431, i64 2, i64 0 }, ptr %a1067 call void @finch_str_concat(ptr %a1065, ptr %a1066, ptr %a1067) %t1068 = load { ptr, i64, i64 }, ptr %a1065 %t1069 = load { ptr, i64, i64 }, ptr %a1046 store { ptr, i64, i64 } %t1068, ptr %a1071 store { ptr, i64, i64 } %t1069, ptr %a1072 call void @finch_str_concat(ptr %a1070, ptr %a1071, ptr %a1072) %t1073 = load { ptr, i64, i64 }, ptr %a1070 %t1074 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1059, { ptr, i64, i64 } %t1073) store { ptr, i64, i64 } %t1074, ptr %a1075 %t1076 = load ptr, ptr %a1 %t1077 = load { ptr, i64, i64 }, ptr %a1018 store { ptr, i64, i64 } { ptr @.str.5432, i64 13, i64 0 }, ptr %a1079 store { ptr, i64, i64 } %t1077, ptr %a1080 call void @finch_str_concat(ptr %a1078, ptr %a1079, ptr %a1080) %t1081 = load { ptr, i64, i64 }, ptr %a1078 store { ptr, i64, i64 } %t1081, ptr %a1083 store { ptr, i64, i64 } { ptr @.str.5433, i64 2, i64 0 }, ptr %a1084 call void @finch_str_concat(ptr %a1082, ptr %a1083, ptr %a1084) %t1085 = load { ptr, i64, i64 }, ptr %a1082 %t1086 = load { ptr, i64, i64 }, ptr %a1042 store { ptr, i64, i64 } %t1085, ptr %a1088 store { ptr, i64, i64 } %t1086, ptr %a1089 call void @finch_str_concat(ptr %a1087, ptr %a1088, ptr %a1089) %t1090 = load { ptr, i64, i64 }, ptr %a1087 %t1091 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1076, { ptr, i64, i64 } %t1090) store { ptr, i64, i64 } %t1091, ptr %a1092 %t1093 = load ptr, ptr %a1 %t1094 = load ptr, ptr %a1 %t1095 = load ptr, ptr %a1 %t1096 = load { ptr, i64, i64 }, ptr %a1058 store { ptr, i64, i64 } { ptr @.str.5435, i64 6, i64 0 }, ptr %a1098 store { ptr, i64, i64 } %t1096, ptr %a1099 call void @finch_str_concat(ptr %a1097, ptr %a1098, ptr %a1099) %t1100 = load { ptr, i64, i64 }, ptr %a1097 store { ptr, i64, i64 } %t1100, ptr %a1102 store { ptr, i64, i64 } { ptr @.str.5436, i64 2, i64 0 }, ptr %a1103 call void @finch_str_concat(ptr %a1101, ptr %a1102, ptr %a1103) %t1104 = load { ptr, i64, i64 }, ptr %a1101 %t1105 = load { ptr, i64, i64 }, ptr %a1075 store { ptr, i64, i64 } %t1104, ptr %a1107 store { ptr, i64, i64 } %t1105, ptr %a1108 call void @finch_str_concat(ptr %a1106, ptr %a1107, ptr %a1108) %t1109 = load { ptr, i64, i64 }, ptr %a1106 %t1110 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1095, { ptr, i64, i64 } %t1109) store { ptr, i64, i64 } { ptr @.str.5434, i64 6, i64 0 }, ptr %a1112 store { ptr, i64, i64 } %t1110, ptr %a1113 call void @finch_str_concat(ptr %a1111, ptr %a1112, ptr %a1113) %t1114 = load { ptr, i64, i64 }, ptr %a1111 store { ptr, i64, i64 } %t1114, ptr %a1116 store { ptr, i64, i64 } { ptr @.str.5437, i64 2, i64 0 }, ptr %a1117 call void @finch_str_concat(ptr %a1115, ptr %a1116, ptr %a1117) %t1118 = load { ptr, i64, i64 }, ptr %a1115 %t1119 = load { ptr, i64, i64 }, ptr %a1092 store { ptr, i64, i64 } %t1118, ptr %a1121 store { ptr, i64, i64 } %t1119, ptr %a1122 call void @finch_str_concat(ptr %a1120, ptr %a1121, ptr %a1122) %t1123 = load { ptr, i64, i64 }, ptr %a1120 %t1124 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1094, { ptr, i64, i64 } %t1123) %t1125 = load %S.ast.Node, ptr %a2 call void @finch.gen.panicIf(ptr %t1093, { ptr, i64, i64 } %t1124, { ptr, i64, i64 } { ptr @.str.5438, i64 33, i64 0 }, %S.ast.Node %t1125) %t1126 = load ptr, ptr %a1 %t1127 = load { ptr, i64, i64 }, ptr %a1042 store { ptr, i64, i64 } { ptr @.str.5439, i64 8, i64 0 }, ptr %a1129 store { ptr, i64, i64 } %t1127, ptr %a1130 call void @finch_str_concat(ptr %a1128, ptr %a1129, ptr %a1130) %t1131 = load { ptr, i64, i64 }, ptr %a1128 store { ptr, i64, i64 } %t1131, ptr %a1133 store { ptr, i64, i64 } { ptr @.str.5440, i64 2, i64 0 }, ptr %a1134 call void @finch_str_concat(ptr %a1132, ptr %a1133, ptr %a1134) %t1135 = load { ptr, i64, i64 }, ptr %a1132 %t1136 = load { ptr, i64, i64 }, ptr %a1018 store { ptr, i64, i64 } %t1135, ptr %a1138 store { ptr, i64, i64 } %t1136, ptr %a1139 call void @finch_str_concat(ptr %a1137, ptr %a1138, ptr %a1139) %t1140 = load { ptr, i64, i64 }, ptr %a1137 %t1141 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1126, { ptr, i64, i64 } %t1140) store { ptr, i64, i64 } %t1141, ptr %a1142 %t1143 = load ptr, ptr %a1 %t1144 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t1143, { ptr, i64, i64 } { ptr @.str.5441, i64 17, i64 0 }) store { ptr, i64, i64 } %t1144, ptr %a1145 %t1146 = load ptr, ptr %a1 %t1147 = load { ptr, i64, i64 }, ptr %a1145 store { ptr, i64, i64 } { ptr @.str.5442, i64 30, i64 0 }, ptr %a1149 store { ptr, i64, i64 } %t1147, ptr %a1150 call void @finch_str_concat(ptr %a1148, ptr %a1149, ptr %a1150) %t1151 = load { ptr, i64, i64 }, ptr %a1148 store { ptr, i64, i64 } %t1151, ptr %a1153 store { ptr, i64, i64 } { ptr @.str.5443, i64 6, i64 0 }, ptr %a1154 call void @finch_str_concat(ptr %a1152, ptr %a1153, ptr %a1154) %t1155 = load { ptr, i64, i64 }, ptr %a1152 %t1156 = load { ptr, i64, i64 }, ptr %a1142 store { ptr, i64, i64 } %t1155, ptr %a1158 store { ptr, i64, i64 } %t1156, ptr %a1159 call void @finch_str_concat(ptr %a1157, ptr %a1158, ptr %a1159) %t1160 = load { ptr, i64, i64 }, ptr %a1157 store { ptr, i64, i64 } %t1160, ptr %a1162 store { ptr, i64, i64 } { ptr @.str.5444, i64 6, i64 0 }, ptr %a1163 call void @finch_str_concat(ptr %a1161, ptr %a1162, ptr %a1163) %t1164 = load { ptr, i64, i64 }, ptr %a1161 %t1165 = load ptr, ptr %a1 %t1166 = load %S.ast.Type, ptr %a15 %t1167 = call { ptr, i64, i64 } @finch.gen.sizeOf(ptr %t1165, %S.ast.Type %t1166) store { ptr, i64, i64 } %t1164, ptr %a1169 store { ptr, i64, i64 } %t1167, ptr %a1170 call void @finch_str_concat(ptr %a1168, ptr %a1169, ptr %a1170) %t1171 = load { ptr, i64, i64 }, ptr %a1168 store { ptr, i64, i64 } %t1171, ptr %a1173 store { ptr, i64, i64 } { ptr @.str.5445, i64 1, i64 0 }, ptr %a1174 call void @finch_str_concat(ptr %a1172, ptr %a1173, ptr %a1174) %t1175 = load { ptr, i64, i64 }, ptr %a1172 call void @finch.gen.emit(ptr %t1146, { ptr, i64, i64 } %t1175) %t1176 = load ptr, ptr %a1 %t1177 = load { ptr, i64, i64 }, ptr %a3 %t1178 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1176, { ptr, i64, i64 } { ptr @.str.5446, i64 3, i64 0 }, { ptr, i64, i64 } %t1177) store { ptr, i64, i64 } %t1178, ptr %a1179 %t1180 = load ptr, ptr %a1 %t1181 = load { ptr, i64, i64 }, ptr %a1145 %t1182 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1180, { ptr, i64, i64 } { ptr @.str.5447, i64 3, i64 0 }, { ptr, i64, i64 } %t1181) store { ptr, i64, i64 } %t1182, ptr %a1183 %t1184 = load ptr, ptr %a1 %t1185 = load { ptr, i64, i64 }, ptr %a1142 %t1186 = call { ptr, i64, i64 } @finch.gen.loopStart(ptr %t1184, { ptr, i64, i64 } %t1185) store { ptr, i64, i64 } %t1186, ptr %a1187 %t1188 = load ptr, ptr %a1 %t1189 = load { ptr, i64, i64 }, ptr %a19 store { ptr, i64, i64 } { ptr @.str.5448, i64 23, i64 0 }, ptr %a1191 store { ptr, i64, i64 } %t1189, ptr %a1192 call void @finch_str_concat(ptr %a1190, ptr %a1191, ptr %a1192) %t1193 = load { ptr, i64, i64 }, ptr %a1190 store { ptr, i64, i64 } %t1193, ptr %a1195 store { ptr, i64, i64 } { ptr @.str.5449, i64 6, i64 0 }, ptr %a1196 call void @finch_str_concat(ptr %a1194, ptr %a1195, ptr %a1196) %t1197 = load { ptr, i64, i64 }, ptr %a1194 %t1198 = load { ptr, i64, i64 }, ptr %a1183 store { ptr, i64, i64 } %t1197, ptr %a1200 store { ptr, i64, i64 } %t1198, ptr %a1201 call void @finch_str_concat(ptr %a1199, ptr %a1200, ptr %a1201) %t1202 = load { ptr, i64, i64 }, ptr %a1199 store { ptr, i64, i64 } %t1202, ptr %a1204 store { ptr, i64, i64 } { ptr @.str.5450, i64 6, i64 0 }, ptr %a1205 call void @finch_str_concat(ptr %a1203, ptr %a1204, ptr %a1205) %t1206 = load { ptr, i64, i64 }, ptr %a1203 %t1207 = load { ptr, i64, i64 }, ptr %a1187 %t1208 = extractvalue { ptr, i64, i64 } %t1207, 1 %t1209 = icmp uge i64 3, %t1208 br i1 %t1209, label %range8092, label %inrange8093 range8092: call void @finch_panic_index(ptr @.str.5451, i64 4911, i64 3, i64 %t1208) unreachable inrange8093: %t1210 = extractvalue { ptr, i64, i64 } %t1207, 0 %t1211 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1210, i64 3 %t1212 = load { ptr, i64, i64 }, ptr %t1211 store { ptr, i64, i64 } %t1206, ptr %a1214 store { ptr, i64, i64 } %t1212, ptr %a1215 call void @finch_str_concat(ptr %a1213, ptr %a1214, ptr %a1215) %t1216 = load { ptr, i64, i64 }, ptr %a1213 %t1217 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1188, { ptr, i64, i64 } %t1216) store { ptr, i64, i64 } %t1217, ptr %a1218 %t1219 = load ptr, ptr %a1 %t1220 = load { ptr, i64, i64 }, ptr %a19 store { ptr, i64, i64 } { ptr @.str.5452, i64 23, i64 0 }, ptr %a1222 store { ptr, i64, i64 } %t1220, ptr %a1223 call void @finch_str_concat(ptr %a1221, ptr %a1222, ptr %a1223) %t1224 = load { ptr, i64, i64 }, ptr %a1221 store { ptr, i64, i64 } %t1224, ptr %a1226 store { ptr, i64, i64 } { ptr @.str.5453, i64 6, i64 0 }, ptr %a1227 call void @finch_str_concat(ptr %a1225, ptr %a1226, ptr %a1227) %t1228 = load { ptr, i64, i64 }, ptr %a1225 %t1229 = load { ptr, i64, i64 }, ptr %a1179 store { ptr, i64, i64 } %t1228, ptr %a1231 store { ptr, i64, i64 } %t1229, ptr %a1232 call void @finch_str_concat(ptr %a1230, ptr %a1231, ptr %a1232) %t1233 = load { ptr, i64, i64 }, ptr %a1230 store { ptr, i64, i64 } %t1233, ptr %a1235 store { ptr, i64, i64 } { ptr @.str.5454, i64 6, i64 0 }, ptr %a1236 call void @finch_str_concat(ptr %a1234, ptr %a1235, ptr %a1236) %t1237 = load { ptr, i64, i64 }, ptr %a1234 %t1238 = load ptr, ptr %a1 %t1239 = load { ptr, i64, i64 }, ptr %a1018 store { ptr, i64, i64 } { ptr @.str.5455, i64 8, i64 0 }, ptr %a1241 store { ptr, i64, i64 } %t1239, ptr %a1242 call void @finch_str_concat(ptr %a1240, ptr %a1241, ptr %a1242) %t1243 = load { ptr, i64, i64 }, ptr %a1240 store { ptr, i64, i64 } %t1243, ptr %a1245 store { ptr, i64, i64 } { ptr @.str.5456, i64 2, i64 0 }, ptr %a1246 call void @finch_str_concat(ptr %a1244, ptr %a1245, ptr %a1246) %t1247 = load { ptr, i64, i64 }, ptr %a1244 %t1248 = load { ptr, i64, i64 }, ptr %a1187 %t1249 = extractvalue { ptr, i64, i64 } %t1248, 1 %t1250 = icmp uge i64 3, %t1249 br i1 %t1250, label %range8094, label %inrange8095 range8094: call void @finch_panic_index(ptr @.str.5457, i64 4912, i64 3, i64 %t1249) unreachable inrange8095: %t1251 = extractvalue { ptr, i64, i64 } %t1248, 0 %t1252 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1251, i64 3 %t1253 = load { ptr, i64, i64 }, ptr %t1252 store { ptr, i64, i64 } %t1247, ptr %a1255 store { ptr, i64, i64 } %t1253, ptr %a1256 call void @finch_str_concat(ptr %a1254, ptr %a1255, ptr %a1256) %t1257 = load { ptr, i64, i64 }, ptr %a1254 %t1258 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1238, { ptr, i64, i64 } %t1257) store { ptr, i64, i64 } %t1237, ptr %a1260 store { ptr, i64, i64 } %t1258, ptr %a1261 call void @finch_str_concat(ptr %a1259, ptr %a1260, ptr %a1261) %t1262 = load { ptr, i64, i64 }, ptr %a1259 %t1263 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1219, { ptr, i64, i64 } %t1262) store { ptr, i64, i64 } %t1263, ptr %a1264 %t1265 = load ptr, ptr %a1 %t1266 = load { ptr, i64, i64 }, ptr %a1218 %t1267 = load { ptr, i64, i64 }, ptr %a1264 %t1268 = load %S.ast.Type, ptr %a15 call void @finch.gen.copyAt(ptr %t1265, { ptr, i64, i64 } %t1266, { ptr, i64, i64 } %t1267, %S.ast.Type %t1268) %t1269 = load ptr, ptr %a1 %t1270 = load { ptr, i64, i64 }, ptr %a1187 call void @finch.gen.loopEnd(ptr %t1269, { ptr, i64, i64 } %t1270) %t1271 = load ptr, ptr %a1 %t1272 = load { ptr, i64, i64 }, ptr %a1145 %t1273 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1271, { ptr, i64, i64 } { ptr @.str.5458, i64 17, i64 0 }, { ptr, i64, i64 } %t1272) %t1274 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t1273, 0 %t1275 = load %S.ast.Type, ptr %a4 store %S.ast.Type %t1275, ptr %a1276 call void @finch.copy.S_ast_Type(ptr %a1277, ptr %a1276) %t1278 = load %S.ast.Type, ptr %a1277 %t1279 = insertvalue %S.gen.Val %t1274, %S.ast.Type %t1278, 1 %t1280 = insertvalue %S.gen.Val %t1279, i1 true, 2 ret %S.gen.Val %t1280 endif8083: %t1281 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t1281, ptr %a1282 store { ptr, i64, i64 } { ptr @.str.5459, i64 4, i64 0 }, ptr %a1283 %t1284 = call i32 @finch_str_eq(ptr %a1282, ptr %a1283) %t1285 = icmp ne i32 %t1284, 0 br i1 %t1285, label %then8096, label %endif8098 then8096: %t1286 = load ptr, ptr %a1 %t1287 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t1286, %S.ast.Node %t1287, i64 0) %t1288 = getelementptr inbounds %S.ast.Type, ptr %a15, i32 0, i32 0 %t1289 = load { ptr, i64, i64 }, ptr %t1288 store { ptr, i64, i64 } %t1289, ptr %a1290 call void @finch_str_copy(ptr %a1291, ptr %a1290) %t1292 = load { ptr, i64, i64 }, ptr %a1291 store { ptr, i64, i64 } %t1292, ptr %a1293 %t1294 = load %S.ast.Type, ptr %a15 %t1295 = call i1 @finch.gen.isNumber(%S.ast.Type %t1294) %t1296 = xor i1 %t1295, true br label %logic.from8099 logic.from8099: br i1 %t1296, label %logic.rhs8100, label %logic.end8101 logic.rhs8100: %t1297 = load { ptr, i64, i64 }, ptr %a1293 store { ptr, i64, i64 } %t1297, ptr %a1298 store { ptr, i64, i64 } { ptr @.str.5460, i64 4, i64 0 }, ptr %a1299 %t1300 = call i32 @finch_str_eq(ptr %a1298, ptr %a1299) %t1301 = icmp eq i32 %t1300, 0 br label %logic.rend8102 logic.rend8102: br label %logic.end8101 logic.end8101: %t1302 = phi i1 [ false, %logic.from8099 ], [ %t1301, %logic.rend8102 ] br label %logic.from8103 logic.from8103: br i1 %t1302, label %logic.rhs8104, label %logic.end8105 logic.rhs8104: %t1303 = load { ptr, i64, i64 }, ptr %a1293 store { ptr, i64, i64 } %t1303, ptr %a1304 store { ptr, i64, i64 } { ptr @.str.5461, i64 3, i64 0 }, ptr %a1305 %t1306 = call i32 @finch_str_eq(ptr %a1304, ptr %a1305) %t1307 = icmp eq i32 %t1306, 0 br label %logic.rend8106 logic.rend8106: br label %logic.end8105 logic.end8105: %t1308 = phi i1 [ false, %logic.from8103 ], [ %t1307, %logic.rend8106 ] br i1 %t1308, label %then8107, label %endif8109 then8107: %t1309 = load ptr, ptr %a1 %t1310 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t1309, %S.ast.Node %t1310, { ptr, i64, i64 } { ptr @.str.5462, i64 47, i64 0 }) br label %endif8109 endif8109: %t1311 = load ptr, ptr %a1 %t1312 = load %S.ast.Type, ptr %a15 %t1313 = call { ptr, i64, i64 } @finch.gen.cmpFn(ptr %t1311, %S.ast.Type %t1312) store { ptr, i64, i64 } %t1313, ptr %a1314 %t1315 = load ptr, ptr %a1 %t1316 = load { ptr, i64, i64 }, ptr %a37 %t1317 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1315, { ptr, i64, i64 } { ptr @.str.5463, i64 3, i64 0 }, { ptr, i64, i64 } %t1316) store { ptr, i64, i64 } %t1317, ptr %a1318 %t1319 = load ptr, ptr %a1 %t1320 = load { ptr, i64, i64 }, ptr %a3 %t1321 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1319, { ptr, i64, i64 } { ptr @.str.5464, i64 3, i64 0 }, { ptr, i64, i64 } %t1320) store { ptr, i64, i64 } %t1321, ptr %a1322 %t1323 = load ptr, ptr %a1 %t1324 = load { ptr, i64, i64 }, ptr %a1322 store { ptr, i64, i64 } { ptr @.str.5465, i64 21, i64 0 }, ptr %a1326 store { ptr, i64, i64 } %t1324, ptr %a1327 call void @finch_str_concat(ptr %a1325, ptr %a1326, ptr %a1327) %t1328 = load { ptr, i64, i64 }, ptr %a1325 store { ptr, i64, i64 } %t1328, ptr %a1330 store { ptr, i64, i64 } { ptr @.str.5466, i64 6, i64 0 }, ptr %a1331 call void @finch_str_concat(ptr %a1329, ptr %a1330, ptr %a1331) %t1332 = load { ptr, i64, i64 }, ptr %a1329 %t1333 = load { ptr, i64, i64 }, ptr %a1318 store { ptr, i64, i64 } %t1332, ptr %a1335 store { ptr, i64, i64 } %t1333, ptr %a1336 call void @finch_str_concat(ptr %a1334, ptr %a1335, ptr %a1336) %t1337 = load { ptr, i64, i64 }, ptr %a1334 store { ptr, i64, i64 } %t1337, ptr %a1339 store { ptr, i64, i64 } { ptr @.str.5467, i64 6, i64 0 }, ptr %a1340 call void @finch_str_concat(ptr %a1338, ptr %a1339, ptr %a1340) %t1341 = load { ptr, i64, i64 }, ptr %a1338 %t1342 = load ptr, ptr %a1 %t1343 = load %S.ast.Type, ptr %a15 %t1344 = call { ptr, i64, i64 } @finch.gen.sizeOf(ptr %t1342, %S.ast.Type %t1343) store { ptr, i64, i64 } %t1341, ptr %a1346 store { ptr, i64, i64 } %t1344, ptr %a1347 call void @finch_str_concat(ptr %a1345, ptr %a1346, ptr %a1347) %t1348 = load { ptr, i64, i64 }, ptr %a1345 store { ptr, i64, i64 } %t1348, ptr %a1350 store { ptr, i64, i64 } { ptr @.str.5468, i64 6, i64 0 }, ptr %a1351 call void @finch_str_concat(ptr %a1349, ptr %a1350, ptr %a1351) %t1352 = load { ptr, i64, i64 }, ptr %a1349 %t1353 = load { ptr, i64, i64 }, ptr %a1314 store { ptr, i64, i64 } %t1352, ptr %a1355 store { ptr, i64, i64 } %t1353, ptr %a1356 call void @finch_str_concat(ptr %a1354, ptr %a1355, ptr %a1356) %t1357 = load { ptr, i64, i64 }, ptr %a1354 store { ptr, i64, i64 } %t1357, ptr %a1359 store { ptr, i64, i64 } { ptr @.str.5469, i64 1, i64 0 }, ptr %a1360 call void @finch_str_concat(ptr %a1358, ptr %a1359, ptr %a1360) %t1361 = load { ptr, i64, i64 }, ptr %a1358 call void @finch.gen.emit(ptr %t1323, { ptr, i64, i64 } %t1361) %t1362 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5470, i64 4, i64 0 }) %t1363 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t1362, 1 ret %S.gen.Val %t1363 endif8098: %t1364 = load ptr, ptr %a1 %t1365 = load %S.ast.Node, ptr %a2 %t1366 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } { ptr @.str.5471, i64 24, i64 0 }, ptr %a1368 store { ptr, i64, i64 } %t1366, ptr %a1369 call void @finch_str_concat(ptr %a1367, ptr %a1368, ptr %a1369) %t1370 = load { ptr, i64, i64 }, ptr %a1367 store { ptr, i64, i64 } %t1370, ptr %a1372 store { ptr, i64, i64 } { ptr @.str.5472, i64 96, i64 0 }, ptr %a1373 call void @finch_str_concat(ptr %a1371, ptr %a1372, ptr %a1373) %t1374 = load { ptr, i64, i64 }, ptr %a1371 call void @finch.gen.fail(ptr %t1364, %S.ast.Node %t1365, { ptr, i64, i64 } %t1374) ret %S.gen.Val zeroinitializer } define internal { ptr, i64, i64 } @finch.gen.cmpFn(ptr %p0, %S.ast.Type %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Type, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca %S.gen.Saved, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a85 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca { ptr, i64, i64 }, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca { ptr, i64, i64 }, align 16 %a104 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca { ptr, i64, i64 }, align 16 %a110 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 %a113 = alloca { ptr, i64, i64 }, align 16 %a114 = alloca { ptr, i64, i64 }, align 16 %a117 = alloca { ptr, i64, i64 }, align 16 %a118 = alloca { ptr, i64, i64 }, align 16 %a119 = alloca { ptr, i64, i64 }, align 16 %a126 = alloca { ptr, i64, i64 }, align 16 %a127 = alloca { ptr, i64, i64 }, align 16 %a128 = alloca { ptr, i64, i64 }, align 16 %a130 = alloca { ptr, i64, i64 }, align 16 %a131 = alloca { ptr, i64, i64 }, align 16 %a132 = alloca { ptr, i64, i64 }, align 16 %a135 = alloca { ptr, i64, i64 }, align 16 %a136 = alloca { ptr, i64, i64 }, align 16 %a137 = alloca { ptr, i64, i64 }, align 16 %a139 = alloca { ptr, i64, i64 }, align 16 %a140 = alloca { ptr, i64, i64 }, align 16 %a141 = alloca { ptr, i64, i64 }, align 16 %a144 = alloca { ptr, i64, i64 }, align 16 %a145 = alloca { ptr, i64, i64 }, align 16 %a146 = alloca { ptr, i64, i64 }, align 16 %a148 = alloca { ptr, i64, i64 }, align 16 %a149 = alloca { ptr, i64, i64 }, align 16 %a150 = alloca { ptr, i64, i64 }, align 16 %a153 = alloca { ptr, i64, i64 }, align 16 %a154 = alloca { ptr, i64, i64 }, align 16 %a155 = alloca { ptr, i64, i64 }, align 16 %a162 = alloca { ptr, i64, i64 }, align 16 %a163 = alloca { ptr, i64, i64 }, align 16 %a164 = alloca { ptr, i64, i64 }, align 16 %a166 = alloca { ptr, i64, i64 }, align 16 %a167 = alloca { ptr, i64, i64 }, align 16 %a168 = alloca { ptr, i64, i64 }, align 16 %a171 = alloca { ptr, i64, i64 }, align 16 %a172 = alloca { ptr, i64, i64 }, align 16 %a173 = alloca { ptr, i64, i64 }, align 16 %a175 = alloca { ptr, i64, i64 }, align 16 %a176 = alloca { ptr, i64, i64 }, align 16 %a177 = alloca { ptr, i64, i64 }, align 16 %a180 = alloca { ptr, i64, i64 }, align 16 %a181 = alloca { ptr, i64, i64 }, align 16 %a182 = alloca { ptr, i64, i64 }, align 16 %a184 = alloca { ptr, i64, i64 }, align 16 %a185 = alloca { ptr, i64, i64 }, align 16 %a186 = alloca { ptr, i64, i64 }, align 16 %a189 = alloca { ptr, i64, i64 }, align 16 %a190 = alloca { ptr, i64, i64 }, align 16 %a191 = alloca { ptr, i64, i64 }, align 16 %a197 = alloca { ptr, i64, i64 }, align 16 %a198 = alloca { ptr, i64, i64 }, align 16 %a199 = alloca { ptr, i64, i64 }, align 16 %a201 = alloca { ptr, i64, i64 }, align 16 %a202 = alloca { ptr, i64, i64 }, align 16 %a203 = alloca { ptr, i64, i64 }, align 16 %a206 = alloca { ptr, i64, i64 }, align 16 %a207 = alloca { ptr, i64, i64 }, align 16 %a208 = alloca { ptr, i64, i64 }, align 16 %a210 = alloca { ptr, i64, i64 }, align 16 %a211 = alloca { ptr, i64, i64 }, align 16 %a212 = alloca { ptr, i64, i64 }, align 16 %a216 = alloca { ptr, i64, i64 }, align 16 %a217 = alloca { ptr, i64, i64 }, align 16 %a218 = alloca { ptr, i64, i64 }, align 16 %a220 = alloca { ptr, i64, i64 }, align 16 %a221 = alloca { ptr, i64, i64 }, align 16 %a222 = alloca { ptr, i64, i64 }, align 16 %a225 = alloca { ptr, i64, i64 }, align 16 %a226 = alloca { ptr, i64, i64 }, align 16 %a227 = alloca { ptr, i64, i64 }, align 16 %a232 = alloca { ptr, i64, i64 }, align 16 %a233 = alloca { ptr, i64, i64 }, align 16 %a234 = alloca { ptr, i64, i64 }, align 16 %a239 = alloca { ptr, i64, i64 }, align 16 %a240 = alloca { ptr, i64, i64 }, align 16 %a241 = alloca { ptr, i64, i64 }, align 16 %a243 = alloca { ptr, i64, i64 }, align 16 %a244 = alloca { ptr, i64, i64 }, align 16 %a245 = alloca { ptr, i64, i64 }, align 16 %a248 = alloca { ptr, i64, i64 }, align 16 %a249 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Type %p1, ptr %a2 %t3 = load %S.ast.Type, ptr %a2 %t4 = call { ptr, i64, i64 } @finch.gen.typeKey(%S.ast.Type %t3) store { ptr, i64, i64 } { ptr @.str.5473, i64 11, i64 0 }, ptr %a6 store { ptr, i64, i64 } %t4, ptr %a7 call void @finch_str_concat(ptr %a5, ptr %a6, ptr %a7) %t8 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } %t8, ptr %a9 %t10 = load ptr, ptr %a1 %t11 = icmp eq ptr %t10, null br i1 %t11, label %panic8110, label %ok8111 panic8110: call void @finch_panic(ptr @.str.5474, i64 4936, ptr @.str.5475) unreachable ok8111: %t12 = getelementptr inbounds %S.gen.Gen, ptr %t10, i32 0, i32 21 %t13 = load { ptr, i64, i64 }, ptr %t12 %t14 = load { ptr, i64, i64 }, ptr %a9 %t15 = call i1 @finch.gen.has({ ptr, i64, i64 } %t13, { ptr, i64, i64 } %t14) br i1 %t15, label %then8112, label %endif8114 then8112: %t16 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t16, ptr %a17 call void @finch_str_copy(ptr %a18, ptr %a17) %t19 = load { ptr, i64, i64 }, ptr %a18 ret { ptr, i64, i64 } %t19 endif8114: %t20 = load ptr, ptr %a1 %t21 = icmp eq ptr %t20, null br i1 %t21, label %panic8115, label %ok8116 panic8115: call void @finch_panic(ptr @.str.5476, i64 4939, ptr @.str.5477) unreachable ok8116: %t22 = getelementptr inbounds %S.gen.Gen, ptr %t20, i32 0, i32 21 %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t22, i32 0, i32 1 %t24 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t24, ptr %a25 call void @finch_str_copy(ptr %a26, ptr %a25) %t27 = load { ptr, i64, i64 }, ptr %a26 %t28 = load i64, ptr %t23 %t29 = add i64 %t28, 1 call void @finch_arr_reserve(ptr %t22, i64 %t29, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t30 = load ptr, ptr %t22 %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t30, i64 %t28 store { ptr, i64, i64 } %t27, ptr %t31 store i64 %t29, ptr %t23 %t32 = load ptr, ptr %a1 %t33 = call %S.gen.Saved @finch.gen.beginHelper(ptr %t32) store %S.gen.Saved %t33, ptr %a34 store { ptr, i64, i64 } { ptr @.str.5478, i64 0, i64 0 }, ptr %a35 %t36 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t37 = load { ptr, i64, i64 }, ptr %t36 store { ptr, i64, i64 } %t37, ptr %a38 store { ptr, i64, i64 } { ptr @.str.5479, i64 3, i64 0 }, ptr %a39 %t40 = call i32 @finch_str_eq(ptr %a38, ptr %a39) %t41 = icmp ne i32 %t40, 0 br i1 %t41, label %then8117, label %else8118 then8117: %t42 = load ptr, ptr %a1 %t43 = call { ptr, i64, i64 } @finch.gen.op(ptr %t42, { ptr, i64, i64 } { ptr @.str.5480, i64 39, i64 0 }) store { ptr, i64, i64 } %t43, ptr %a44 %t45 = load ptr, ptr %a1 %t46 = load { ptr, i64, i64 }, ptr %a44 store { ptr, i64, i64 } { ptr @.str.5481, i64 10, i64 0 }, ptr %a48 store { ptr, i64, i64 } %t46, ptr %a49 call void @finch_str_concat(ptr %a47, ptr %a48, ptr %a49) %t50 = load { ptr, i64, i64 }, ptr %a47 store { ptr, i64, i64 } %t50, ptr %a52 store { ptr, i64, i64 } { ptr @.str.5482, i64 7, i64 0 }, ptr %a53 call void @finch_str_concat(ptr %a51, ptr %a52, ptr %a53) %t54 = load { ptr, i64, i64 }, ptr %a51 %t55 = call { ptr, i64, i64 } @finch.gen.op(ptr %t45, { ptr, i64, i64 } %t54) store { ptr, i64, i64 } %t55, ptr %a35 br label %endif8119 else8118: %t56 = load ptr, ptr %a1 %t57 = load %S.ast.Type, ptr %a2 %t58 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t56, %S.ast.Type %t57) store { ptr, i64, i64 } %t58, ptr %a59 %t60 = load ptr, ptr %a1 %t61 = load { ptr, i64, i64 }, ptr %a59 %t62 = call { ptr, i64, i64 } @finch.gen.load(ptr %t60, { ptr, i64, i64 } %t61, { ptr, i64, i64 } { ptr @.str.5483, i64 2, i64 0 }) store { ptr, i64, i64 } %t62, ptr %a63 %t64 = load ptr, ptr %a1 %t65 = load { ptr, i64, i64 }, ptr %a59 %t66 = call { ptr, i64, i64 } @finch.gen.load(ptr %t64, { ptr, i64, i64 } %t65, { ptr, i64, i64 } { ptr @.str.5484, i64 2, i64 0 }) store { ptr, i64, i64 } %t66, ptr %a67 store { ptr, i64, i64 } { ptr @.str.5485, i64 0, i64 0 }, ptr %a68 store { ptr, i64, i64 } { ptr @.str.5486, i64 0, i64 0 }, ptr %a69 %t70 = load %S.ast.Type, ptr %a2 %t71 = call i1 @finch.gen.isFloat(%S.ast.Type %t70) br i1 %t71, label %then8120, label %else8121 then8120: %t72 = load ptr, ptr %a1 %t73 = load { ptr, i64, i64 }, ptr %a59 store { ptr, i64, i64 } { ptr @.str.5487, i64 9, i64 0 }, ptr %a75 store { ptr, i64, i64 } %t73, ptr %a76 call void @finch_str_concat(ptr %a74, ptr %a75, ptr %a76) %t77 = load { ptr, i64, i64 }, ptr %a74 store { ptr, i64, i64 } %t77, ptr %a79 store { ptr, i64, i64 } { ptr @.str.5488, i64 1, i64 0 }, ptr %a80 call void @finch_str_concat(ptr %a78, ptr %a79, ptr %a80) %t81 = load { ptr, i64, i64 }, ptr %a78 %t82 = load { ptr, i64, i64 }, ptr %a63 store { ptr, i64, i64 } %t81, ptr %a84 store { ptr, i64, i64 } %t82, ptr %a85 call void @finch_str_concat(ptr %a83, ptr %a84, ptr %a85) %t86 = load { ptr, i64, i64 }, ptr %a83 store { ptr, i64, i64 } %t86, ptr %a88 store { ptr, i64, i64 } { ptr @.str.5489, i64 2, i64 0 }, ptr %a89 call void @finch_str_concat(ptr %a87, ptr %a88, ptr %a89) %t90 = load { ptr, i64, i64 }, ptr %a87 %t91 = load { ptr, i64, i64 }, ptr %a67 store { ptr, i64, i64 } %t90, ptr %a93 store { ptr, i64, i64 } %t91, ptr %a94 call void @finch_str_concat(ptr %a92, ptr %a93, ptr %a94) %t95 = load { ptr, i64, i64 }, ptr %a92 %t96 = call { ptr, i64, i64 } @finch.gen.op(ptr %t72, { ptr, i64, i64 } %t95) store { ptr, i64, i64 } %t96, ptr %a68 %t97 = load ptr, ptr %a1 %t98 = load { ptr, i64, i64 }, ptr %a59 store { ptr, i64, i64 } { ptr @.str.5490, i64 9, i64 0 }, ptr %a100 store { ptr, i64, i64 } %t98, ptr %a101 call void @finch_str_concat(ptr %a99, ptr %a100, ptr %a101) %t102 = load { ptr, i64, i64 }, ptr %a99 store { ptr, i64, i64 } %t102, ptr %a104 store { ptr, i64, i64 } { ptr @.str.5491, i64 1, i64 0 }, ptr %a105 call void @finch_str_concat(ptr %a103, ptr %a104, ptr %a105) %t106 = load { ptr, i64, i64 }, ptr %a103 %t107 = load { ptr, i64, i64 }, ptr %a63 store { ptr, i64, i64 } %t106, ptr %a109 store { ptr, i64, i64 } %t107, ptr %a110 call void @finch_str_concat(ptr %a108, ptr %a109, ptr %a110) %t111 = load { ptr, i64, i64 }, ptr %a108 store { ptr, i64, i64 } %t111, ptr %a113 store { ptr, i64, i64 } { ptr @.str.5492, i64 2, i64 0 }, ptr %a114 call void @finch_str_concat(ptr %a112, ptr %a113, ptr %a114) %t115 = load { ptr, i64, i64 }, ptr %a112 %t116 = load { ptr, i64, i64 }, ptr %a67 store { ptr, i64, i64 } %t115, ptr %a118 store { ptr, i64, i64 } %t116, ptr %a119 call void @finch_str_concat(ptr %a117, ptr %a118, ptr %a119) %t120 = load { ptr, i64, i64 }, ptr %a117 %t121 = call { ptr, i64, i64 } @finch.gen.op(ptr %t97, { ptr, i64, i64 } %t120) store { ptr, i64, i64 } %t121, ptr %a69 br label %endif8122 else8121: %t122 = load ptr, ptr %a1 %t123 = load %S.ast.Type, ptr %a2 %t124 = call i1 @finch.gen.isSigned(%S.ast.Type %t123) %t125 = call { ptr, i64, i64 } @finch.gen.intPred({ ptr, i64, i64 } { ptr @.str.5494, i64 1, i64 0 }, i1 %t124) store { ptr, i64, i64 } { ptr @.str.5493, i64 5, i64 0 }, ptr %a127 store { ptr, i64, i64 } %t125, ptr %a128 call void @finch_str_concat(ptr %a126, ptr %a127, ptr %a128) %t129 = load { ptr, i64, i64 }, ptr %a126 store { ptr, i64, i64 } %t129, ptr %a131 store { ptr, i64, i64 } { ptr @.str.5495, i64 1, i64 0 }, ptr %a132 call void @finch_str_concat(ptr %a130, ptr %a131, ptr %a132) %t133 = load { ptr, i64, i64 }, ptr %a130 %t134 = load { ptr, i64, i64 }, ptr %a59 store { ptr, i64, i64 } %t133, ptr %a136 store { ptr, i64, i64 } %t134, ptr %a137 call void @finch_str_concat(ptr %a135, ptr %a136, ptr %a137) %t138 = load { ptr, i64, i64 }, ptr %a135 store { ptr, i64, i64 } %t138, ptr %a140 store { ptr, i64, i64 } { ptr @.str.5496, i64 1, i64 0 }, ptr %a141 call void @finch_str_concat(ptr %a139, ptr %a140, ptr %a141) %t142 = load { ptr, i64, i64 }, ptr %a139 %t143 = load { ptr, i64, i64 }, ptr %a63 store { ptr, i64, i64 } %t142, ptr %a145 store { ptr, i64, i64 } %t143, ptr %a146 call void @finch_str_concat(ptr %a144, ptr %a145, ptr %a146) %t147 = load { ptr, i64, i64 }, ptr %a144 store { ptr, i64, i64 } %t147, ptr %a149 store { ptr, i64, i64 } { ptr @.str.5497, i64 2, i64 0 }, ptr %a150 call void @finch_str_concat(ptr %a148, ptr %a149, ptr %a150) %t151 = load { ptr, i64, i64 }, ptr %a148 %t152 = load { ptr, i64, i64 }, ptr %a67 store { ptr, i64, i64 } %t151, ptr %a154 store { ptr, i64, i64 } %t152, ptr %a155 call void @finch_str_concat(ptr %a153, ptr %a154, ptr %a155) %t156 = load { ptr, i64, i64 }, ptr %a153 %t157 = call { ptr, i64, i64 } @finch.gen.op(ptr %t122, { ptr, i64, i64 } %t156) store { ptr, i64, i64 } %t157, ptr %a68 %t158 = load ptr, ptr %a1 %t159 = load %S.ast.Type, ptr %a2 %t160 = call i1 @finch.gen.isSigned(%S.ast.Type %t159) %t161 = call { ptr, i64, i64 } @finch.gen.intPred({ ptr, i64, i64 } { ptr @.str.5499, i64 1, i64 0 }, i1 %t160) store { ptr, i64, i64 } { ptr @.str.5498, i64 5, i64 0 }, ptr %a163 store { ptr, i64, i64 } %t161, ptr %a164 call void @finch_str_concat(ptr %a162, ptr %a163, ptr %a164) %t165 = load { ptr, i64, i64 }, ptr %a162 store { ptr, i64, i64 } %t165, ptr %a167 store { ptr, i64, i64 } { ptr @.str.5500, i64 1, i64 0 }, ptr %a168 call void @finch_str_concat(ptr %a166, ptr %a167, ptr %a168) %t169 = load { ptr, i64, i64 }, ptr %a166 %t170 = load { ptr, i64, i64 }, ptr %a59 store { ptr, i64, i64 } %t169, ptr %a172 store { ptr, i64, i64 } %t170, ptr %a173 call void @finch_str_concat(ptr %a171, ptr %a172, ptr %a173) %t174 = load { ptr, i64, i64 }, ptr %a171 store { ptr, i64, i64 } %t174, ptr %a176 store { ptr, i64, i64 } { ptr @.str.5501, i64 1, i64 0 }, ptr %a177 call void @finch_str_concat(ptr %a175, ptr %a176, ptr %a177) %t178 = load { ptr, i64, i64 }, ptr %a175 %t179 = load { ptr, i64, i64 }, ptr %a63 store { ptr, i64, i64 } %t178, ptr %a181 store { ptr, i64, i64 } %t179, ptr %a182 call void @finch_str_concat(ptr %a180, ptr %a181, ptr %a182) %t183 = load { ptr, i64, i64 }, ptr %a180 store { ptr, i64, i64 } %t183, ptr %a185 store { ptr, i64, i64 } { ptr @.str.5502, i64 2, i64 0 }, ptr %a186 call void @finch_str_concat(ptr %a184, ptr %a185, ptr %a186) %t187 = load { ptr, i64, i64 }, ptr %a184 %t188 = load { ptr, i64, i64 }, ptr %a67 store { ptr, i64, i64 } %t187, ptr %a190 store { ptr, i64, i64 } %t188, ptr %a191 call void @finch_str_concat(ptr %a189, ptr %a190, ptr %a191) %t192 = load { ptr, i64, i64 }, ptr %a189 %t193 = call { ptr, i64, i64 } @finch.gen.op(ptr %t158, { ptr, i64, i64 } %t192) store { ptr, i64, i64 } %t193, ptr %a69 br label %endif8122 endif8122: %t194 = load ptr, ptr %a1 %t195 = load ptr, ptr %a1 %t196 = load { ptr, i64, i64 }, ptr %a69 store { ptr, i64, i64 } { ptr @.str.5504, i64 8, i64 0 }, ptr %a198 store { ptr, i64, i64 } %t196, ptr %a199 call void @finch_str_concat(ptr %a197, ptr %a198, ptr %a199) %t200 = load { ptr, i64, i64 }, ptr %a197 store { ptr, i64, i64 } %t200, ptr %a202 store { ptr, i64, i64 } { ptr @.str.5505, i64 7, i64 0 }, ptr %a203 call void @finch_str_concat(ptr %a201, ptr %a202, ptr %a203) %t204 = load { ptr, i64, i64 }, ptr %a201 %t205 = call { ptr, i64, i64 } @finch.gen.op(ptr %t195, { ptr, i64, i64 } %t204) store { ptr, i64, i64 } { ptr @.str.5503, i64 8, i64 0 }, ptr %a207 store { ptr, i64, i64 } %t205, ptr %a208 call void @finch_str_concat(ptr %a206, ptr %a207, ptr %a208) %t209 = load { ptr, i64, i64 }, ptr %a206 store { ptr, i64, i64 } %t209, ptr %a211 store { ptr, i64, i64 } { ptr @.str.5506, i64 2, i64 0 }, ptr %a212 call void @finch_str_concat(ptr %a210, ptr %a211, ptr %a212) %t213 = load { ptr, i64, i64 }, ptr %a210 %t214 = load ptr, ptr %a1 %t215 = load { ptr, i64, i64 }, ptr %a68 store { ptr, i64, i64 } { ptr @.str.5507, i64 8, i64 0 }, ptr %a217 store { ptr, i64, i64 } %t215, ptr %a218 call void @finch_str_concat(ptr %a216, ptr %a217, ptr %a218) %t219 = load { ptr, i64, i64 }, ptr %a216 store { ptr, i64, i64 } %t219, ptr %a221 store { ptr, i64, i64 } { ptr @.str.5508, i64 7, i64 0 }, ptr %a222 call void @finch_str_concat(ptr %a220, ptr %a221, ptr %a222) %t223 = load { ptr, i64, i64 }, ptr %a220 %t224 = call { ptr, i64, i64 } @finch.gen.op(ptr %t214, { ptr, i64, i64 } %t223) store { ptr, i64, i64 } %t213, ptr %a226 store { ptr, i64, i64 } %t224, ptr %a227 call void @finch_str_concat(ptr %a225, ptr %a226, ptr %a227) %t228 = load { ptr, i64, i64 }, ptr %a225 %t229 = call { ptr, i64, i64 } @finch.gen.op(ptr %t194, { ptr, i64, i64 } %t228) store { ptr, i64, i64 } %t229, ptr %a35 br label %endif8119 endif8119: %t230 = load ptr, ptr %a1 %t231 = load { ptr, i64, i64 }, ptr %a35 store { ptr, i64, i64 } { ptr @.str.5509, i64 8, i64 0 }, ptr %a233 store { ptr, i64, i64 } %t231, ptr %a234 call void @finch_str_concat(ptr %a232, ptr %a233, ptr %a234) %t235 = load { ptr, i64, i64 }, ptr %a232 call void @finch.gen.emit(ptr %t230, { ptr, i64, i64 } %t235) %t236 = load ptr, ptr %a1 %t237 = load %S.gen.Saved, ptr %a34 %t238 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } { ptr @.str.5510, i64 20, i64 0 }, ptr %a240 store { ptr, i64, i64 } %t238, ptr %a241 call void @finch_str_concat(ptr %a239, ptr %a240, ptr %a241) %t242 = load { ptr, i64, i64 }, ptr %a239 store { ptr, i64, i64 } %t242, ptr %a244 store { ptr, i64, i64 } { ptr @.str.5511, i64 16, i64 0 }, ptr %a245 call void @finch_str_concat(ptr %a243, ptr %a244, ptr %a245) %t246 = load { ptr, i64, i64 }, ptr %a243 call void @finch.gen.endHelper(ptr %t236, %S.gen.Saved %t237, { ptr, i64, i64 } %t246) %t247 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t247, ptr %a248 call void @finch_str_copy(ptr %a249, ptr %a248) %t250 = load { ptr, i64, i64 }, ptr %a249 ret { ptr, i64, i64 } %t250 } define internal %S.gen.Val @finch.gen.strMethod(ptr %p0, %S.ast.Node %p1, { ptr, i64, i64 } %p2) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.ast.Node, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a85 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca { ptr, i64, i64 }, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca { ptr, i64, i64 }, align 16 %a104 = alloca { ptr, i64, i64 }, align 16 %a106 = alloca { ptr, i64, i64 }, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a111 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 %a113 = alloca { ptr, i64, i64 }, align 16 %a115 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca { ptr, i64, i64 }, align 16 %a117 = alloca { ptr, i64, i64 }, align 16 %a120 = alloca { ptr, i64, i64 }, align 16 %a121 = alloca { ptr, i64, i64 }, align 16 %a122 = alloca { ptr, i64, i64 }, align 16 %a124 = alloca { ptr, i64, i64 }, align 16 %a125 = alloca { ptr, i64, i64 }, align 16 %a126 = alloca { ptr, i64, i64 }, align 16 %a130 = alloca { ptr, i64, i64 }, align 16 %a132 = alloca { ptr, i64, i64 }, align 16 %a133 = alloca { ptr, i64, i64 }, align 16 %a134 = alloca { ptr, i64, i64 }, align 16 %a136 = alloca { ptr, i64, i64 }, align 16 %a137 = alloca { ptr, i64, i64 }, align 16 %a138 = alloca { ptr, i64, i64 }, align 16 %a148 = alloca { ptr, i64, i64 }, align 16 %a149 = alloca { ptr, i64, i64 }, align 16 %a153 = alloca { ptr, i64, i64 }, align 16 %a154 = alloca { ptr, i64, i64 }, align 16 %a159 = alloca { ptr, i64, i64 }, align 16 %a160 = alloca { ptr, i64, i64 }, align 16 %a165 = alloca { ptr, i64, i64 }, align 16 %a166 = alloca { ptr, i64, i64 }, align 16 %a183 = alloca { ptr, i64, i64 }, align 16 %a185 = alloca { ptr, i64, i64 }, align 16 %a186 = alloca { ptr, i64, i64 }, align 16 %a191 = alloca { ptr, i64, i64 }, align 16 %a192 = alloca { ptr, i64, i64 }, align 16 %a193 = alloca { ptr, i64, i64 }, align 16 %a195 = alloca { ptr, i64, i64 }, align 16 %a196 = alloca { ptr, i64, i64 }, align 16 %a197 = alloca { ptr, i64, i64 }, align 16 %a200 = alloca { ptr, i64, i64 }, align 16 %a201 = alloca { ptr, i64, i64 }, align 16 %a202 = alloca { ptr, i64, i64 }, align 16 %a204 = alloca { ptr, i64, i64 }, align 16 %a205 = alloca { ptr, i64, i64 }, align 16 %a206 = alloca { ptr, i64, i64 }, align 16 %a213 = alloca { ptr, i64, i64 }, align 16 %a214 = alloca { ptr, i64, i64 }, align 16 %a219 = alloca { ptr, i64, i64 }, align 16 %a220 = alloca { ptr, i64, i64 }, align 16 %a221 = alloca { ptr, i64, i64 }, align 16 %a223 = alloca { ptr, i64, i64 }, align 16 %a224 = alloca { ptr, i64, i64 }, align 16 %a225 = alloca { ptr, i64, i64 }, align 16 %a228 = alloca { ptr, i64, i64 }, align 16 %a229 = alloca { ptr, i64, i64 }, align 16 %a230 = alloca { ptr, i64, i64 }, align 16 %a232 = alloca { ptr, i64, i64 }, align 16 %a233 = alloca { ptr, i64, i64 }, align 16 %a234 = alloca { ptr, i64, i64 }, align 16 %a237 = alloca { ptr, i64, i64 }, align 16 %a240 = alloca { ptr, i64, i64 }, align 16 %a241 = alloca { ptr, i64, i64 }, align 16 %a242 = alloca { ptr, i64, i64 }, align 16 %a244 = alloca { ptr, i64, i64 }, align 16 %a245 = alloca { ptr, i64, i64 }, align 16 %a246 = alloca { ptr, i64, i64 }, align 16 %a252 = alloca { ptr, i64, i64 }, align 16 %a254 = alloca { ptr, i64, i64 }, align 16 %a255 = alloca { ptr, i64, i64 }, align 16 %a260 = alloca { ptr, i64, i64 }, align 16 %a261 = alloca { ptr, i64, i64 }, align 16 %a262 = alloca { ptr, i64, i64 }, align 16 %a264 = alloca { ptr, i64, i64 }, align 16 %a265 = alloca { ptr, i64, i64 }, align 16 %a266 = alloca { ptr, i64, i64 }, align 16 %a269 = alloca { ptr, i64, i64 }, align 16 %a270 = alloca { ptr, i64, i64 }, align 16 %a271 = alloca { ptr, i64, i64 }, align 16 %a273 = alloca { ptr, i64, i64 }, align 16 %a274 = alloca { ptr, i64, i64 }, align 16 %a275 = alloca { ptr, i64, i64 }, align 16 %a278 = alloca { ptr, i64, i64 }, align 16 %a279 = alloca { ptr, i64, i64 }, align 16 %a280 = alloca { ptr, i64, i64 }, align 16 %a282 = alloca { ptr, i64, i64 }, align 16 %a283 = alloca { ptr, i64, i64 }, align 16 %a284 = alloca { ptr, i64, i64 }, align 16 %a287 = alloca { ptr, i64, i64 }, align 16 %a290 = alloca { ptr, i64, i64 }, align 16 %a291 = alloca { ptr, i64, i64 }, align 16 %a292 = alloca { ptr, i64, i64 }, align 16 %a294 = alloca { ptr, i64, i64 }, align 16 %a295 = alloca { ptr, i64, i64 }, align 16 %a296 = alloca { ptr, i64, i64 }, align 16 %a303 = alloca { ptr, i64, i64 }, align 16 %a304 = alloca { ptr, i64, i64 }, align 16 %a308 = alloca { ptr, i64, i64 }, align 16 %a309 = alloca { ptr, i64, i64 }, align 16 %a314 = alloca { ptr, i64, i64 }, align 16 %a315 = alloca { ptr, i64, i64 }, align 16 %a323 = alloca { ptr, i64, i64 }, align 16 %a324 = alloca { ptr, i64, i64 }, align 16 %a325 = alloca { ptr, i64, i64 }, align 16 %a327 = alloca { ptr, i64, i64 }, align 16 %a328 = alloca { ptr, i64, i64 }, align 16 %a329 = alloca { ptr, i64, i64 }, align 16 %a332 = alloca { ptr, i64, i64 }, align 16 %a333 = alloca { ptr, i64, i64 }, align 16 %a334 = alloca { ptr, i64, i64 }, align 16 %a336 = alloca { ptr, i64, i64 }, align 16 %a337 = alloca { ptr, i64, i64 }, align 16 %a338 = alloca { ptr, i64, i64 }, align 16 %a341 = alloca { ptr, i64, i64 }, align 16 %a342 = alloca { ptr, i64, i64 }, align 16 %a343 = alloca { ptr, i64, i64 }, align 16 %a345 = alloca { ptr, i64, i64 }, align 16 %a346 = alloca { ptr, i64, i64 }, align 16 %a347 = alloca { ptr, i64, i64 }, align 16 %a357 = alloca { ptr, i64, i64 }, align 16 %a358 = alloca { ptr, i64, i64 }, align 16 %a374 = alloca { ptr, i64, i64 }, align 16 %a386 = alloca { ptr, i64, i64 }, align 16 %a389 = alloca { ptr, i64, i64 }, align 16 %a390 = alloca { ptr, i64, i64 }, align 16 %a391 = alloca { ptr, i64, i64 }, align 16 %a393 = alloca { ptr, i64, i64 }, align 16 %a394 = alloca { ptr, i64, i64 }, align 16 %a395 = alloca { ptr, i64, i64 }, align 16 %a398 = alloca { ptr, i64, i64 }, align 16 %a399 = alloca { ptr, i64, i64 }, align 16 %a400 = alloca { ptr, i64, i64 }, align 16 %a402 = alloca { ptr, i64, i64 }, align 16 %a403 = alloca { ptr, i64, i64 }, align 16 %a404 = alloca { ptr, i64, i64 }, align 16 %a407 = alloca { ptr, i64, i64 }, align 16 %a408 = alloca { ptr, i64, i64 }, align 16 %a409 = alloca { ptr, i64, i64 }, align 16 %a411 = alloca { ptr, i64, i64 }, align 16 %a412 = alloca { ptr, i64, i64 }, align 16 %a413 = alloca { ptr, i64, i64 }, align 16 %a416 = alloca { ptr, i64, i64 }, align 16 %a417 = alloca { ptr, i64, i64 }, align 16 %a418 = alloca { ptr, i64, i64 }, align 16 %a420 = alloca { ptr, i64, i64 }, align 16 %a421 = alloca { ptr, i64, i64 }, align 16 %a422 = alloca { ptr, i64, i64 }, align 16 %a432 = alloca { ptr, i64, i64 }, align 16 %a433 = alloca { ptr, i64, i64 }, align 16 %a449 = alloca { ptr, i64, i64 }, align 16 %a452 = alloca { ptr, i64, i64 }, align 16 %a455 = alloca { ptr, i64, i64 }, align 16 %a456 = alloca { ptr, i64, i64 }, align 16 %a457 = alloca { ptr, i64, i64 }, align 16 %a459 = alloca { ptr, i64, i64 }, align 16 %a460 = alloca { ptr, i64, i64 }, align 16 %a461 = alloca { ptr, i64, i64 }, align 16 %a464 = alloca { ptr, i64, i64 }, align 16 %a465 = alloca { ptr, i64, i64 }, align 16 %a466 = alloca { ptr, i64, i64 }, align 16 %a468 = alloca { ptr, i64, i64 }, align 16 %a469 = alloca { ptr, i64, i64 }, align 16 %a470 = alloca { ptr, i64, i64 }, align 16 %a473 = alloca { ptr, i64, i64 }, align 16 %a474 = alloca { ptr, i64, i64 }, align 16 %a475 = alloca { ptr, i64, i64 }, align 16 %a477 = alloca { ptr, i64, i64 }, align 16 %a478 = alloca { ptr, i64, i64 }, align 16 %a479 = alloca { ptr, i64, i64 }, align 16 %a490 = alloca { ptr, i64, i64 }, align 16 %a491 = alloca { ptr, i64, i64 }, align 16 %a516 = alloca { ptr, i64, i64 }, align 16 %a517 = alloca { ptr, i64, i64 }, align 16 %a519 = alloca { ptr, i64, i64 }, align 16 %a522 = alloca { ptr, i64, i64 }, align 16 %a523 = alloca { ptr, i64, i64 }, align 16 %a524 = alloca { ptr, i64, i64 }, align 16 %a526 = alloca { ptr, i64, i64 }, align 16 %a527 = alloca { ptr, i64, i64 }, align 16 %a528 = alloca { ptr, i64, i64 }, align 16 %a531 = alloca { ptr, i64, i64 }, align 16 %a532 = alloca { ptr, i64, i64 }, align 16 %a533 = alloca { ptr, i64, i64 }, align 16 %a535 = alloca { ptr, i64, i64 }, align 16 %a536 = alloca { ptr, i64, i64 }, align 16 %a537 = alloca { ptr, i64, i64 }, align 16 %a540 = alloca { ptr, i64, i64 }, align 16 %a541 = alloca { ptr, i64, i64 }, align 16 %a542 = alloca { ptr, i64, i64 }, align 16 %a544 = alloca { ptr, i64, i64 }, align 16 %a545 = alloca { ptr, i64, i64 }, align 16 %a546 = alloca { ptr, i64, i64 }, align 16 %a556 = alloca { ptr, i64, i64 }, align 16 %a557 = alloca { ptr, i64, i64 }, align 16 %a564 = alloca { ptr, i64, i64 }, align 16 %a567 = alloca { ptr, i64, i64 }, align 16 %a568 = alloca { ptr, i64, i64 }, align 16 %a569 = alloca { ptr, i64, i64 }, align 16 %a571 = alloca { ptr, i64, i64 }, align 16 %a572 = alloca { ptr, i64, i64 }, align 16 %a573 = alloca { ptr, i64, i64 }, align 16 %a576 = alloca { ptr, i64, i64 }, align 16 %a577 = alloca { ptr, i64, i64 }, align 16 %a578 = alloca { ptr, i64, i64 }, align 16 %a580 = alloca { ptr, i64, i64 }, align 16 %a581 = alloca { ptr, i64, i64 }, align 16 %a582 = alloca { ptr, i64, i64 }, align 16 %a595 = alloca { ptr, i64, i64 }, align 16 %a596 = alloca { ptr, i64, i64 }, align 16 %a597 = alloca { ptr, i64, i64 }, align 16 %a599 = alloca { ptr, i64, i64 }, align 16 %a600 = alloca { ptr, i64, i64 }, align 16 %a601 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.ast.Node %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 %t4 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t5 = load { ptr, i64, i64 }, ptr %t4 store { ptr, i64, i64 } %t5, ptr %a6 call void @finch_str_copy(ptr %a7, ptr %a6) %t8 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t8, ptr %a9 %t10 = load ptr, ptr %a1 %t11 = call { ptr, i64, i64 } @finch.gen.strOut(ptr %t10) store { ptr, i64, i64 } %t11, ptr %a12 %t13 = load ptr, ptr %a1 %t14 = load ptr, ptr %a1 %t15 = icmp eq ptr %t14, null br i1 %t15, label %panic8123, label %ok8124 panic8123: call void @finch_panic(ptr @.str.5512, i64 4968, ptr @.str.5513) unreachable ok8124: %t16 = getelementptr inbounds %S.gen.Gen, ptr %t14, i32 0, i32 1 %t17 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 %t18 = load i64, ptr %t17 %t19 = load { ptr, i64, i64 }, ptr %t16 %t20 = extractvalue { ptr, i64, i64 } %t19, 1 %t21 = icmp uge i64 %t18, %t20 br i1 %t21, label %range8125, label %inrange8126 range8125: call void @finch_panic_index(ptr @.str.5514, i64 4968, i64 %t18, i64 %t20) unreachable inrange8126: %t22 = extractvalue { ptr, i64, i64 } %t19, 0 %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t22, i64 %t18 %t24 = load { ptr, i64, i64 }, ptr %t23 %t25 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t13, { ptr, i64, i64 } %t24) store { ptr, i64, i64 } %t25, ptr %a26 %t27 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t27, ptr %a28 store { ptr, i64, i64 } { ptr @.str.5515, i64 3, i64 0 }, ptr %a29 %t30 = call i32 @finch_str_eq(ptr %a28, ptr %a29) %t31 = icmp ne i32 %t30, 0 br i1 %t31, label %then8127, label %endif8129 then8127: %t32 = load ptr, ptr %a1 %t33 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t32, %S.ast.Node %t33, i64 2) %t34 = load ptr, ptr %a1 %t35 = load ptr, ptr %a1 %t36 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t37 = load { ptr, i64, i64 }, ptr %t36 %t38 = extractvalue { ptr, i64, i64 } %t37, 1 %t39 = icmp uge i64 1, %t38 br i1 %t39, label %range8130, label %inrange8131 range8130: call void @finch_panic_index(ptr @.str.5516, i64 4971, i64 1, i64 %t38) unreachable inrange8131: %t40 = extractvalue { ptr, i64, i64 } %t37, 0 %t41 = getelementptr inbounds %S.ast.Node, ptr %t40, i64 1 %t42 = load %S.ast.Node, ptr %t41 %t43 = call %S.gen.Val @finch.gen.expr(ptr %t35, %S.ast.Node %t42) %t44 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5517, i64 3, i64 0 }) %t45 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t46 = load { ptr, i64, i64 }, ptr %t45 %t47 = extractvalue { ptr, i64, i64 } %t46, 1 %t48 = icmp uge i64 1, %t47 br i1 %t48, label %range8132, label %inrange8133 range8132: call void @finch_panic_index(ptr @.str.5518, i64 4971, i64 1, i64 %t47) unreachable inrange8133: %t49 = extractvalue { ptr, i64, i64 } %t46, 0 %t50 = getelementptr inbounds %S.ast.Node, ptr %t49, i64 1 %t51 = load %S.ast.Node, ptr %t50 %t52 = call %S.gen.Val @finch.gen.coerce(ptr %t34, %S.gen.Val %t43, %S.ast.Type %t44, %S.ast.Node %t51, { ptr, i64, i64 } { ptr @.str.5519, i64 9, i64 0 }) %t53 = extractvalue %S.gen.Val %t52, 0 store { ptr, i64, i64 } %t53, ptr %a54 call void @finch_str_copy(ptr %a55, ptr %a54) %t56 = load { ptr, i64, i64 }, ptr %a55 store { ptr, i64, i64 } %t56, ptr %a57 %t58 = load ptr, ptr %a1 %t59 = load ptr, ptr %a1 %t60 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t61 = load { ptr, i64, i64 }, ptr %t60 %t62 = extractvalue { ptr, i64, i64 } %t61, 1 %t63 = icmp uge i64 2, %t62 br i1 %t63, label %range8134, label %inrange8135 range8134: call void @finch_panic_index(ptr @.str.5520, i64 4972, i64 2, i64 %t62) unreachable inrange8135: %t64 = extractvalue { ptr, i64, i64 } %t61, 0 %t65 = getelementptr inbounds %S.ast.Node, ptr %t64, i64 2 %t66 = load %S.ast.Node, ptr %t65 %t67 = call %S.gen.Val @finch.gen.expr(ptr %t59, %S.ast.Node %t66) %t68 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5521, i64 3, i64 0 }) %t69 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t70 = load { ptr, i64, i64 }, ptr %t69 %t71 = extractvalue { ptr, i64, i64 } %t70, 1 %t72 = icmp uge i64 2, %t71 br i1 %t72, label %range8136, label %inrange8137 range8136: call void @finch_panic_index(ptr @.str.5522, i64 4972, i64 2, i64 %t71) unreachable inrange8137: %t73 = extractvalue { ptr, i64, i64 } %t70, 0 %t74 = getelementptr inbounds %S.ast.Node, ptr %t73, i64 2 %t75 = load %S.ast.Node, ptr %t74 %t76 = call %S.gen.Val @finch.gen.coerce(ptr %t58, %S.gen.Val %t67, %S.ast.Type %t68, %S.ast.Node %t75, { ptr, i64, i64 } { ptr @.str.5523, i64 7, i64 0 }) %t77 = extractvalue %S.gen.Val %t76, 0 store { ptr, i64, i64 } %t77, ptr %a78 call void @finch_str_copy(ptr %a79, ptr %a78) %t80 = load { ptr, i64, i64 }, ptr %a79 store { ptr, i64, i64 } %t80, ptr %a81 %t82 = load ptr, ptr %a1 %t83 = load { ptr, i64, i64 }, ptr %a12 store { ptr, i64, i64 } { ptr @.str.5524, i64 29, i64 0 }, ptr %a85 store { ptr, i64, i64 } %t83, ptr %a86 call void @finch_str_concat(ptr %a84, ptr %a85, ptr %a86) %t87 = load { ptr, i64, i64 }, ptr %a84 store { ptr, i64, i64 } %t87, ptr %a89 store { ptr, i64, i64 } { ptr @.str.5525, i64 6, i64 0 }, ptr %a90 call void @finch_str_concat(ptr %a88, ptr %a89, ptr %a90) %t91 = load { ptr, i64, i64 }, ptr %a88 %t92 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t91, ptr %a94 store { ptr, i64, i64 } %t92, ptr %a95 call void @finch_str_concat(ptr %a93, ptr %a94, ptr %a95) %t96 = load { ptr, i64, i64 }, ptr %a93 store { ptr, i64, i64 } %t96, ptr %a98 store { ptr, i64, i64 } { ptr @.str.5526, i64 6, i64 0 }, ptr %a99 call void @finch_str_concat(ptr %a97, ptr %a98, ptr %a99) %t100 = load { ptr, i64, i64 }, ptr %a97 %t101 = load { ptr, i64, i64 }, ptr %a57 store { ptr, i64, i64 } %t100, ptr %a103 store { ptr, i64, i64 } %t101, ptr %a104 call void @finch_str_concat(ptr %a102, ptr %a103, ptr %a104) %t105 = load { ptr, i64, i64 }, ptr %a102 store { ptr, i64, i64 } %t105, ptr %a107 store { ptr, i64, i64 } { ptr @.str.5527, i64 6, i64 0 }, ptr %a108 call void @finch_str_concat(ptr %a106, ptr %a107, ptr %a108) %t109 = load { ptr, i64, i64 }, ptr %a106 %t110 = load { ptr, i64, i64 }, ptr %a81 store { ptr, i64, i64 } %t109, ptr %a112 store { ptr, i64, i64 } %t110, ptr %a113 call void @finch_str_concat(ptr %a111, ptr %a112, ptr %a113) %t114 = load { ptr, i64, i64 }, ptr %a111 store { ptr, i64, i64 } %t114, ptr %a116 store { ptr, i64, i64 } { ptr @.str.5528, i64 6, i64 0 }, ptr %a117 call void @finch_str_concat(ptr %a115, ptr %a116, ptr %a117) %t118 = load { ptr, i64, i64 }, ptr %a115 %t119 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } %t118, ptr %a121 store { ptr, i64, i64 } %t119, ptr %a122 call void @finch_str_concat(ptr %a120, ptr %a121, ptr %a122) %t123 = load { ptr, i64, i64 }, ptr %a120 store { ptr, i64, i64 } %t123, ptr %a125 store { ptr, i64, i64 } { ptr @.str.5529, i64 6, i64 0 }, ptr %a126 call void @finch_str_concat(ptr %a124, ptr %a125, ptr %a126) %t127 = load { ptr, i64, i64 }, ptr %a124 %t128 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 %t129 = load i64, ptr %t128 call void @finch_str_from_int(ptr %a130, i64 %t129) %t131 = load { ptr, i64, i64 }, ptr %a130 store { ptr, i64, i64 } %t127, ptr %a133 store { ptr, i64, i64 } %t131, ptr %a134 call void @finch_str_concat(ptr %a132, ptr %a133, ptr %a134) %t135 = load { ptr, i64, i64 }, ptr %a132 store { ptr, i64, i64 } %t135, ptr %a137 store { ptr, i64, i64 } { ptr @.str.5530, i64 1, i64 0 }, ptr %a138 call void @finch_str_concat(ptr %a136, ptr %a137, ptr %a138) %t139 = load { ptr, i64, i64 }, ptr %a136 call void @finch.gen.emit(ptr %t82, { ptr, i64, i64 } %t139) %t140 = load ptr, ptr %a1 %t141 = load { ptr, i64, i64 }, ptr %a12 %t142 = call { ptr, i64, i64 } @finch.gen.load(ptr %t140, { ptr, i64, i64 } { ptr @.str.5531, i64 17, i64 0 }, { ptr, i64, i64 } %t141) %t143 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t142, 0 %t144 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5532, i64 3, i64 0 }) %t145 = insertvalue %S.gen.Val %t143, %S.ast.Type %t144, 1 %t146 = insertvalue %S.gen.Val %t145, i1 true, 2 ret %S.gen.Val %t146 endif8129: %t147 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t147, ptr %a148 store { ptr, i64, i64 } { ptr @.str.5533, i64 4, i64 0 }, ptr %a149 %t150 = call i32 @finch_str_eq(ptr %a148, ptr %a149) %t151 = icmp ne i32 %t150, 0 br label %logic.from8138 logic.from8138: br i1 %t151, label %logic.end8140, label %logic.rhs8139 logic.rhs8139: %t152 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t152, ptr %a153 store { ptr, i64, i64 } { ptr @.str.5534, i64 8, i64 0 }, ptr %a154 %t155 = call i32 @finch_str_eq(ptr %a153, ptr %a154) %t156 = icmp ne i32 %t155, 0 br label %logic.rend8141 logic.rend8141: br label %logic.end8140 logic.end8140: %t157 = phi i1 [ true, %logic.from8138 ], [ %t156, %logic.rend8141 ] br label %logic.from8142 logic.from8142: br i1 %t157, label %logic.end8144, label %logic.rhs8143 logic.rhs8143: %t158 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t158, ptr %a159 store { ptr, i64, i64 } { ptr @.str.5535, i64 11, i64 0 }, ptr %a160 %t161 = call i32 @finch_str_eq(ptr %a159, ptr %a160) %t162 = icmp ne i32 %t161, 0 br label %logic.rend8145 logic.rend8145: br label %logic.end8144 logic.end8144: %t163 = phi i1 [ true, %logic.from8142 ], [ %t162, %logic.rend8145 ] br label %logic.from8146 logic.from8146: br i1 %t163, label %logic.end8148, label %logic.rhs8147 logic.rhs8147: %t164 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t164, ptr %a165 store { ptr, i64, i64 } { ptr @.str.5536, i64 9, i64 0 }, ptr %a166 %t167 = call i32 @finch_str_eq(ptr %a165, ptr %a166) %t168 = icmp ne i32 %t167, 0 br label %logic.rend8149 logic.rend8149: br label %logic.end8148 logic.end8148: %t169 = phi i1 [ true, %logic.from8146 ], [ %t168, %logic.rend8149 ] br i1 %t169, label %then8150, label %endif8152 then8150: %t170 = load ptr, ptr %a1 %t171 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t170, %S.ast.Node %t171, i64 1) %t172 = load ptr, ptr %a1 %t173 = load ptr, ptr %a1 %t174 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t175 = load { ptr, i64, i64 }, ptr %t174 %t176 = extractvalue { ptr, i64, i64 } %t175, 1 %t177 = icmp uge i64 1, %t176 br i1 %t177, label %range8153, label %inrange8154 range8153: call void @finch_panic_index(ptr @.str.5537, i64 4978, i64 1, i64 %t176) unreachable inrange8154: %t178 = extractvalue { ptr, i64, i64 } %t175, 0 %t179 = getelementptr inbounds %S.ast.Node, ptr %t178, i64 1 %t180 = load %S.ast.Node, ptr %t179 %t181 = call %S.gen.Val @finch.gen.strArg(ptr %t173, %S.ast.Node %t180, { ptr, i64, i64 } { ptr @.str.5538, i64 20, i64 0 }) %t182 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t172, %S.gen.Val %t181) store { ptr, i64, i64 } %t182, ptr %a183 %t184 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t184, ptr %a185 store { ptr, i64, i64 } { ptr @.str.5539, i64 4, i64 0 }, ptr %a186 %t187 = call i32 @finch_str_eq(ptr %a185, ptr %a186) %t188 = icmp ne i32 %t187, 0 br i1 %t188, label %then8155, label %endif8157 then8155: %t189 = load ptr, ptr %a1 %t190 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } { ptr @.str.5540, i64 29, i64 0 }, ptr %a192 store { ptr, i64, i64 } %t190, ptr %a193 call void @finch_str_concat(ptr %a191, ptr %a192, ptr %a193) %t194 = load { ptr, i64, i64 }, ptr %a191 store { ptr, i64, i64 } %t194, ptr %a196 store { ptr, i64, i64 } { ptr @.str.5541, i64 6, i64 0 }, ptr %a197 call void @finch_str_concat(ptr %a195, ptr %a196, ptr %a197) %t198 = load { ptr, i64, i64 }, ptr %a195 %t199 = load { ptr, i64, i64 }, ptr %a183 store { ptr, i64, i64 } %t198, ptr %a201 store { ptr, i64, i64 } %t199, ptr %a202 call void @finch_str_concat(ptr %a200, ptr %a201, ptr %a202) %t203 = load { ptr, i64, i64 }, ptr %a200 store { ptr, i64, i64 } %t203, ptr %a205 store { ptr, i64, i64 } { ptr @.str.5542, i64 1, i64 0 }, ptr %a206 call void @finch_str_concat(ptr %a204, ptr %a205, ptr %a206) %t207 = load { ptr, i64, i64 }, ptr %a204 %t208 = call { ptr, i64, i64 } @finch.gen.op(ptr %t189, { ptr, i64, i64 } %t207) %t209 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t208, 0 %t210 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5543, i64 3, i64 0 }) %t211 = insertvalue %S.gen.Val %t209, %S.ast.Type %t210, 1 ret %S.gen.Val %t211 endif8157: %t212 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t212, ptr %a213 store { ptr, i64, i64 } { ptr @.str.5544, i64 8, i64 0 }, ptr %a214 %t215 = call i32 @finch_str_eq(ptr %a213, ptr %a214) %t216 = icmp ne i32 %t215, 0 br i1 %t216, label %then8158, label %endif8160 then8158: %t217 = load ptr, ptr %a1 %t218 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } { ptr @.str.5545, i64 29, i64 0 }, ptr %a220 store { ptr, i64, i64 } %t218, ptr %a221 call void @finch_str_concat(ptr %a219, ptr %a220, ptr %a221) %t222 = load { ptr, i64, i64 }, ptr %a219 store { ptr, i64, i64 } %t222, ptr %a224 store { ptr, i64, i64 } { ptr @.str.5546, i64 6, i64 0 }, ptr %a225 call void @finch_str_concat(ptr %a223, ptr %a224, ptr %a225) %t226 = load { ptr, i64, i64 }, ptr %a223 %t227 = load { ptr, i64, i64 }, ptr %a183 store { ptr, i64, i64 } %t226, ptr %a229 store { ptr, i64, i64 } %t227, ptr %a230 call void @finch_str_concat(ptr %a228, ptr %a229, ptr %a230) %t231 = load { ptr, i64, i64 }, ptr %a228 store { ptr, i64, i64 } %t231, ptr %a233 store { ptr, i64, i64 } { ptr @.str.5547, i64 1, i64 0 }, ptr %a234 call void @finch_str_concat(ptr %a232, ptr %a233, ptr %a234) %t235 = load { ptr, i64, i64 }, ptr %a232 %t236 = call { ptr, i64, i64 } @finch.gen.op(ptr %t217, { ptr, i64, i64 } %t235) store { ptr, i64, i64 } %t236, ptr %a237 %t238 = load ptr, ptr %a1 %t239 = load { ptr, i64, i64 }, ptr %a237 store { ptr, i64, i64 } { ptr @.str.5548, i64 13, i64 0 }, ptr %a241 store { ptr, i64, i64 } %t239, ptr %a242 call void @finch_str_concat(ptr %a240, ptr %a241, ptr %a242) %t243 = load { ptr, i64, i64 }, ptr %a240 store { ptr, i64, i64 } %t243, ptr %a245 store { ptr, i64, i64 } { ptr @.str.5549, i64 3, i64 0 }, ptr %a246 call void @finch_str_concat(ptr %a244, ptr %a245, ptr %a246) %t247 = load { ptr, i64, i64 }, ptr %a244 %t248 = call { ptr, i64, i64 } @finch.gen.op(ptr %t238, { ptr, i64, i64 } %t247) %t249 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t248, 0 %t250 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5550, i64 4, i64 0 }) %t251 = insertvalue %S.gen.Val %t249, %S.ast.Type %t250, 1 ret %S.gen.Val %t251 endif8160: store { ptr, i64, i64 } { ptr @.str.5551, i64 17, i64 0 }, ptr %a252 %t253 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t253, ptr %a254 store { ptr, i64, i64 } { ptr @.str.5552, i64 9, i64 0 }, ptr %a255 %t256 = call i32 @finch_str_eq(ptr %a254, ptr %a255) %t257 = icmp ne i32 %t256, 0 br i1 %t257, label %then8161, label %endif8163 then8161: store { ptr, i64, i64 } { ptr @.str.5553, i64 15, i64 0 }, ptr %a252 br label %endif8163 endif8163: %t258 = load ptr, ptr %a1 %t259 = load { ptr, i64, i64 }, ptr %a252 store { ptr, i64, i64 } { ptr @.str.5554, i64 9, i64 0 }, ptr %a261 store { ptr, i64, i64 } %t259, ptr %a262 call void @finch_str_concat(ptr %a260, ptr %a261, ptr %a262) %t263 = load { ptr, i64, i64 }, ptr %a260 store { ptr, i64, i64 } %t263, ptr %a265 store { ptr, i64, i64 } { ptr @.str.5555, i64 5, i64 0 }, ptr %a266 call void @finch_str_concat(ptr %a264, ptr %a265, ptr %a266) %t267 = load { ptr, i64, i64 }, ptr %a264 %t268 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t267, ptr %a270 store { ptr, i64, i64 } %t268, ptr %a271 call void @finch_str_concat(ptr %a269, ptr %a270, ptr %a271) %t272 = load { ptr, i64, i64 }, ptr %a269 store { ptr, i64, i64 } %t272, ptr %a274 store { ptr, i64, i64 } { ptr @.str.5556, i64 6, i64 0 }, ptr %a275 call void @finch_str_concat(ptr %a273, ptr %a274, ptr %a275) %t276 = load { ptr, i64, i64 }, ptr %a273 %t277 = load { ptr, i64, i64 }, ptr %a183 store { ptr, i64, i64 } %t276, ptr %a279 store { ptr, i64, i64 } %t277, ptr %a280 call void @finch_str_concat(ptr %a278, ptr %a279, ptr %a280) %t281 = load { ptr, i64, i64 }, ptr %a278 store { ptr, i64, i64 } %t281, ptr %a283 store { ptr, i64, i64 } { ptr @.str.5557, i64 1, i64 0 }, ptr %a284 call void @finch_str_concat(ptr %a282, ptr %a283, ptr %a284) %t285 = load { ptr, i64, i64 }, ptr %a282 %t286 = call { ptr, i64, i64 } @finch.gen.op(ptr %t258, { ptr, i64, i64 } %t285) store { ptr, i64, i64 } %t286, ptr %a287 %t288 = load ptr, ptr %a1 %t289 = load { ptr, i64, i64 }, ptr %a287 store { ptr, i64, i64 } { ptr @.str.5558, i64 12, i64 0 }, ptr %a291 store { ptr, i64, i64 } %t289, ptr %a292 call void @finch_str_concat(ptr %a290, ptr %a291, ptr %a292) %t293 = load { ptr, i64, i64 }, ptr %a290 store { ptr, i64, i64 } %t293, ptr %a295 store { ptr, i64, i64 } { ptr @.str.5559, i64 3, i64 0 }, ptr %a296 call void @finch_str_concat(ptr %a294, ptr %a295, ptr %a296) %t297 = load { ptr, i64, i64 }, ptr %a294 %t298 = call { ptr, i64, i64 } @finch.gen.op(ptr %t288, { ptr, i64, i64 } %t297) %t299 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t298, 0 %t300 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5560, i64 4, i64 0 }) %t301 = insertvalue %S.gen.Val %t299, %S.ast.Type %t300, 1 ret %S.gen.Val %t301 endif8152: %t302 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t302, ptr %a303 store { ptr, i64, i64 } { ptr @.str.5561, i64 4, i64 0 }, ptr %a304 %t305 = call i32 @finch_str_eq(ptr %a303, ptr %a304) %t306 = icmp ne i32 %t305, 0 br label %logic.from8164 logic.from8164: br i1 %t306, label %logic.end8166, label %logic.rhs8165 logic.rhs8165: %t307 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t307, ptr %a308 store { ptr, i64, i64 } { ptr @.str.5562, i64 5, i64 0 }, ptr %a309 %t310 = call i32 @finch_str_eq(ptr %a308, ptr %a309) %t311 = icmp ne i32 %t310, 0 br label %logic.rend8167 logic.rend8167: br label %logic.end8166 logic.end8166: %t312 = phi i1 [ true, %logic.from8164 ], [ %t311, %logic.rend8167 ] br label %logic.from8168 logic.from8168: br i1 %t312, label %logic.end8170, label %logic.rhs8169 logic.rhs8169: %t313 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t313, ptr %a314 store { ptr, i64, i64 } { ptr @.str.5563, i64 5, i64 0 }, ptr %a315 %t316 = call i32 @finch_str_eq(ptr %a314, ptr %a315) %t317 = icmp ne i32 %t316, 0 br label %logic.rend8171 logic.rend8171: br label %logic.end8170 logic.end8170: %t318 = phi i1 [ true, %logic.from8168 ], [ %t317, %logic.rend8171 ] br i1 %t318, label %then8172, label %endif8174 then8172: %t319 = load ptr, ptr %a1 %t320 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t319, %S.ast.Node %t320, i64 0) %t321 = load ptr, ptr %a1 %t322 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } { ptr @.str.5564, i64 21, i64 0 }, ptr %a324 store { ptr, i64, i64 } %t322, ptr %a325 call void @finch_str_concat(ptr %a323, ptr %a324, ptr %a325) %t326 = load { ptr, i64, i64 }, ptr %a323 store { ptr, i64, i64 } %t326, ptr %a328 store { ptr, i64, i64 } { ptr @.str.5565, i64 5, i64 0 }, ptr %a329 call void @finch_str_concat(ptr %a327, ptr %a328, ptr %a329) %t330 = load { ptr, i64, i64 }, ptr %a327 %t331 = load { ptr, i64, i64 }, ptr %a12 store { ptr, i64, i64 } %t330, ptr %a333 store { ptr, i64, i64 } %t331, ptr %a334 call void @finch_str_concat(ptr %a332, ptr %a333, ptr %a334) %t335 = load { ptr, i64, i64 }, ptr %a332 store { ptr, i64, i64 } %t335, ptr %a337 store { ptr, i64, i64 } { ptr @.str.5566, i64 6, i64 0 }, ptr %a338 call void @finch_str_concat(ptr %a336, ptr %a337, ptr %a338) %t339 = load { ptr, i64, i64 }, ptr %a336 %t340 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t339, ptr %a342 store { ptr, i64, i64 } %t340, ptr %a343 call void @finch_str_concat(ptr %a341, ptr %a342, ptr %a343) %t344 = load { ptr, i64, i64 }, ptr %a341 store { ptr, i64, i64 } %t344, ptr %a346 store { ptr, i64, i64 } { ptr @.str.5567, i64 1, i64 0 }, ptr %a347 call void @finch_str_concat(ptr %a345, ptr %a346, ptr %a347) %t348 = load { ptr, i64, i64 }, ptr %a345 call void @finch.gen.emit(ptr %t321, { ptr, i64, i64 } %t348) %t349 = load ptr, ptr %a1 %t350 = load { ptr, i64, i64 }, ptr %a12 %t351 = call { ptr, i64, i64 } @finch.gen.load(ptr %t349, { ptr, i64, i64 } { ptr @.str.5568, i64 17, i64 0 }, { ptr, i64, i64 } %t350) %t352 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t351, 0 %t353 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5569, i64 3, i64 0 }) %t354 = insertvalue %S.gen.Val %t352, %S.ast.Type %t353, 1 %t355 = insertvalue %S.gen.Val %t354, i1 true, 2 ret %S.gen.Val %t355 endif8174: %t356 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t356, ptr %a357 store { ptr, i64, i64 } { ptr @.str.5570, i64 7, i64 0 }, ptr %a358 %t359 = call i32 @finch_str_eq(ptr %a357, ptr %a358) %t360 = icmp ne i32 %t359, 0 br i1 %t360, label %then8175, label %endif8177 then8175: %t361 = load ptr, ptr %a1 %t362 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t361, %S.ast.Node %t362, i64 2) %t363 = load ptr, ptr %a1 %t364 = load ptr, ptr %a1 %t365 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t366 = load { ptr, i64, i64 }, ptr %t365 %t367 = extractvalue { ptr, i64, i64 } %t366, 1 %t368 = icmp uge i64 1, %t367 br i1 %t368, label %range8178, label %inrange8179 range8178: call void @finch_panic_index(ptr @.str.5571, i64 5000, i64 1, i64 %t367) unreachable inrange8179: %t369 = extractvalue { ptr, i64, i64 } %t366, 0 %t370 = getelementptr inbounds %S.ast.Node, ptr %t369, i64 1 %t371 = load %S.ast.Node, ptr %t370 %t372 = call %S.gen.Val @finch.gen.strArg(ptr %t364, %S.ast.Node %t371, { ptr, i64, i64 } { ptr @.str.5572, i64 19, i64 0 }) %t373 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t363, %S.gen.Val %t372) store { ptr, i64, i64 } %t373, ptr %a374 %t375 = load ptr, ptr %a1 %t376 = load ptr, ptr %a1 %t377 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t378 = load { ptr, i64, i64 }, ptr %t377 %t379 = extractvalue { ptr, i64, i64 } %t378, 1 %t380 = icmp uge i64 2, %t379 br i1 %t380, label %range8180, label %inrange8181 range8180: call void @finch_panic_index(ptr @.str.5573, i64 5001, i64 2, i64 %t379) unreachable inrange8181: %t381 = extractvalue { ptr, i64, i64 } %t378, 0 %t382 = getelementptr inbounds %S.ast.Node, ptr %t381, i64 2 %t383 = load %S.ast.Node, ptr %t382 %t384 = call %S.gen.Val @finch.gen.strArg(ptr %t376, %S.ast.Node %t383, { ptr, i64, i64 } { ptr @.str.5574, i64 12, i64 0 }) %t385 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t375, %S.gen.Val %t384) store { ptr, i64, i64 } %t385, ptr %a386 %t387 = load ptr, ptr %a1 %t388 = load { ptr, i64, i64 }, ptr %a12 store { ptr, i64, i64 } { ptr @.str.5575, i64 33, i64 0 }, ptr %a390 store { ptr, i64, i64 } %t388, ptr %a391 call void @finch_str_concat(ptr %a389, ptr %a390, ptr %a391) %t392 = load { ptr, i64, i64 }, ptr %a389 store { ptr, i64, i64 } %t392, ptr %a394 store { ptr, i64, i64 } { ptr @.str.5576, i64 6, i64 0 }, ptr %a395 call void @finch_str_concat(ptr %a393, ptr %a394, ptr %a395) %t396 = load { ptr, i64, i64 }, ptr %a393 %t397 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t396, ptr %a399 store { ptr, i64, i64 } %t397, ptr %a400 call void @finch_str_concat(ptr %a398, ptr %a399, ptr %a400) %t401 = load { ptr, i64, i64 }, ptr %a398 store { ptr, i64, i64 } %t401, ptr %a403 store { ptr, i64, i64 } { ptr @.str.5577, i64 6, i64 0 }, ptr %a404 call void @finch_str_concat(ptr %a402, ptr %a403, ptr %a404) %t405 = load { ptr, i64, i64 }, ptr %a402 %t406 = load { ptr, i64, i64 }, ptr %a374 store { ptr, i64, i64 } %t405, ptr %a408 store { ptr, i64, i64 } %t406, ptr %a409 call void @finch_str_concat(ptr %a407, ptr %a408, ptr %a409) %t410 = load { ptr, i64, i64 }, ptr %a407 store { ptr, i64, i64 } %t410, ptr %a412 store { ptr, i64, i64 } { ptr @.str.5578, i64 6, i64 0 }, ptr %a413 call void @finch_str_concat(ptr %a411, ptr %a412, ptr %a413) %t414 = load { ptr, i64, i64 }, ptr %a411 %t415 = load { ptr, i64, i64 }, ptr %a386 store { ptr, i64, i64 } %t414, ptr %a417 store { ptr, i64, i64 } %t415, ptr %a418 call void @finch_str_concat(ptr %a416, ptr %a417, ptr %a418) %t419 = load { ptr, i64, i64 }, ptr %a416 store { ptr, i64, i64 } %t419, ptr %a421 store { ptr, i64, i64 } { ptr @.str.5579, i64 1, i64 0 }, ptr %a422 call void @finch_str_concat(ptr %a420, ptr %a421, ptr %a422) %t423 = load { ptr, i64, i64 }, ptr %a420 call void @finch.gen.emit(ptr %t387, { ptr, i64, i64 } %t423) %t424 = load ptr, ptr %a1 %t425 = load { ptr, i64, i64 }, ptr %a12 %t426 = call { ptr, i64, i64 } @finch.gen.load(ptr %t424, { ptr, i64, i64 } { ptr @.str.5580, i64 17, i64 0 }, { ptr, i64, i64 } %t425) %t427 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t426, 0 %t428 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5581, i64 3, i64 0 }) %t429 = insertvalue %S.gen.Val %t427, %S.ast.Type %t428, 1 %t430 = insertvalue %S.gen.Val %t429, i1 true, 2 ret %S.gen.Val %t430 endif8177: %t431 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t431, ptr %a432 store { ptr, i64, i64 } { ptr @.str.5582, i64 5, i64 0 }, ptr %a433 %t434 = call i32 @finch_str_eq(ptr %a432, ptr %a433) %t435 = icmp ne i32 %t434, 0 br i1 %t435, label %then8182, label %endif8184 then8182: %t436 = load ptr, ptr %a1 %t437 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t436, %S.ast.Node %t437, i64 1) %t438 = load ptr, ptr %a1 %t439 = load ptr, ptr %a1 %t440 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t441 = load { ptr, i64, i64 }, ptr %t440 %t442 = extractvalue { ptr, i64, i64 } %t441, 1 %t443 = icmp uge i64 1, %t442 br i1 %t443, label %range8185, label %inrange8186 range8185: call void @finch_panic_index(ptr @.str.5583, i64 5007, i64 1, i64 %t442) unreachable inrange8186: %t444 = extractvalue { ptr, i64, i64 } %t441, 0 %t445 = getelementptr inbounds %S.ast.Node, ptr %t444, i64 1 %t446 = load %S.ast.Node, ptr %t445 %t447 = call %S.gen.Val @finch.gen.strArg(ptr %t439, %S.ast.Node %t446, { ptr, i64, i64 } { ptr @.str.5584, i64 13, i64 0 }) %t448 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t438, %S.gen.Val %t447) store { ptr, i64, i64 } %t448, ptr %a449 %t450 = load ptr, ptr %a1 %t451 = call { ptr, i64, i64 } @finch.gen.strOut(ptr %t450) store { ptr, i64, i64 } %t451, ptr %a452 %t453 = load ptr, ptr %a1 %t454 = load { ptr, i64, i64 }, ptr %a452 store { ptr, i64, i64 } { ptr @.str.5585, i64 31, i64 0 }, ptr %a456 store { ptr, i64, i64 } %t454, ptr %a457 call void @finch_str_concat(ptr %a455, ptr %a456, ptr %a457) %t458 = load { ptr, i64, i64 }, ptr %a455 store { ptr, i64, i64 } %t458, ptr %a460 store { ptr, i64, i64 } { ptr @.str.5586, i64 6, i64 0 }, ptr %a461 call void @finch_str_concat(ptr %a459, ptr %a460, ptr %a461) %t462 = load { ptr, i64, i64 }, ptr %a459 %t463 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t462, ptr %a465 store { ptr, i64, i64 } %t463, ptr %a466 call void @finch_str_concat(ptr %a464, ptr %a465, ptr %a466) %t467 = load { ptr, i64, i64 }, ptr %a464 store { ptr, i64, i64 } %t467, ptr %a469 store { ptr, i64, i64 } { ptr @.str.5587, i64 6, i64 0 }, ptr %a470 call void @finch_str_concat(ptr %a468, ptr %a469, ptr %a470) %t471 = load { ptr, i64, i64 }, ptr %a468 %t472 = load { ptr, i64, i64 }, ptr %a449 store { ptr, i64, i64 } %t471, ptr %a474 store { ptr, i64, i64 } %t472, ptr %a475 call void @finch_str_concat(ptr %a473, ptr %a474, ptr %a475) %t476 = load { ptr, i64, i64 }, ptr %a473 store { ptr, i64, i64 } %t476, ptr %a478 store { ptr, i64, i64 } { ptr @.str.5588, i64 1, i64 0 }, ptr %a479 call void @finch_str_concat(ptr %a477, ptr %a478, ptr %a479) %t480 = load { ptr, i64, i64 }, ptr %a477 call void @finch.gen.emit(ptr %t453, { ptr, i64, i64 } %t480) %t481 = load ptr, ptr %a1 %t482 = load { ptr, i64, i64 }, ptr %a452 %t483 = call { ptr, i64, i64 } @finch.gen.load(ptr %t481, { ptr, i64, i64 } { ptr @.str.5589, i64 17, i64 0 }, { ptr, i64, i64 } %t482) %t484 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t483, 0 %t485 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5590, i64 3, i64 0 }) %t486 = call %S.ast.Type @finch.ast.arrayOf(%S.ast.Type %t485) %t487 = insertvalue %S.gen.Val %t484, %S.ast.Type %t486, 1 %t488 = insertvalue %S.gen.Val %t487, i1 true, 2 ret %S.gen.Val %t488 endif8184: %t489 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t489, ptr %a490 store { ptr, i64, i64 } { ptr @.str.5591, i64 6, i64 0 }, ptr %a491 %t492 = call i32 @finch_str_eq(ptr %a490, ptr %a491) %t493 = icmp ne i32 %t492, 0 br i1 %t493, label %then8187, label %endif8189 then8187: %t494 = load ptr, ptr %a1 %t495 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t494, %S.ast.Node %t495, i64 1) %t496 = load ptr, ptr %a1 %t497 = load ptr, ptr %a1 %t498 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t499 = load { ptr, i64, i64 }, ptr %t498 %t500 = extractvalue { ptr, i64, i64 } %t499, 1 %t501 = icmp uge i64 1, %t500 br i1 %t501, label %range8190, label %inrange8191 range8190: call void @finch_panic_index(ptr @.str.5592, i64 5014, i64 1, i64 %t500) unreachable inrange8191: %t502 = extractvalue { ptr, i64, i64 } %t499, 0 %t503 = getelementptr inbounds %S.ast.Node, ptr %t502, i64 1 %t504 = load %S.ast.Node, ptr %t503 %t505 = call %S.gen.Val @finch.gen.expr(ptr %t497, %S.ast.Node %t504) %t506 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5593, i64 3, i64 0 }) %t507 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t508 = load { ptr, i64, i64 }, ptr %t507 %t509 = extractvalue { ptr, i64, i64 } %t508, 1 %t510 = icmp uge i64 1, %t509 br i1 %t510, label %range8192, label %inrange8193 range8192: call void @finch_panic_index(ptr @.str.5594, i64 5014, i64 1, i64 %t509) unreachable inrange8193: %t511 = extractvalue { ptr, i64, i64 } %t508, 0 %t512 = getelementptr inbounds %S.ast.Node, ptr %t511, i64 1 %t513 = load %S.ast.Node, ptr %t512 %t514 = call %S.gen.Val @finch.gen.coerce(ptr %t496, %S.gen.Val %t505, %S.ast.Type %t506, %S.ast.Node %t513, { ptr, i64, i64 } { ptr @.str.5595, i64 9, i64 0 }) %t515 = extractvalue %S.gen.Val %t514, 0 store { ptr, i64, i64 } %t515, ptr %a516 call void @finch_str_copy(ptr %a517, ptr %a516) %t518 = load { ptr, i64, i64 }, ptr %a517 store { ptr, i64, i64 } %t518, ptr %a519 %t520 = load ptr, ptr %a1 %t521 = load { ptr, i64, i64 }, ptr %a12 store { ptr, i64, i64 } { ptr @.str.5596, i64 32, i64 0 }, ptr %a523 store { ptr, i64, i64 } %t521, ptr %a524 call void @finch_str_concat(ptr %a522, ptr %a523, ptr %a524) %t525 = load { ptr, i64, i64 }, ptr %a522 store { ptr, i64, i64 } %t525, ptr %a527 store { ptr, i64, i64 } { ptr @.str.5597, i64 6, i64 0 }, ptr %a528 call void @finch_str_concat(ptr %a526, ptr %a527, ptr %a528) %t529 = load { ptr, i64, i64 }, ptr %a526 %t530 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t529, ptr %a532 store { ptr, i64, i64 } %t530, ptr %a533 call void @finch_str_concat(ptr %a531, ptr %a532, ptr %a533) %t534 = load { ptr, i64, i64 }, ptr %a531 store { ptr, i64, i64 } %t534, ptr %a536 store { ptr, i64, i64 } { ptr @.str.5598, i64 6, i64 0 }, ptr %a537 call void @finch_str_concat(ptr %a535, ptr %a536, ptr %a537) %t538 = load { ptr, i64, i64 }, ptr %a535 %t539 = load { ptr, i64, i64 }, ptr %a519 store { ptr, i64, i64 } %t538, ptr %a541 store { ptr, i64, i64 } %t539, ptr %a542 call void @finch_str_concat(ptr %a540, ptr %a541, ptr %a542) %t543 = load { ptr, i64, i64 }, ptr %a540 store { ptr, i64, i64 } %t543, ptr %a545 store { ptr, i64, i64 } { ptr @.str.5599, i64 1, i64 0 }, ptr %a546 call void @finch_str_concat(ptr %a544, ptr %a545, ptr %a546) %t547 = load { ptr, i64, i64 }, ptr %a544 call void @finch.gen.emit(ptr %t520, { ptr, i64, i64 } %t547) %t548 = load ptr, ptr %a1 %t549 = load { ptr, i64, i64 }, ptr %a12 %t550 = call { ptr, i64, i64 } @finch.gen.load(ptr %t548, { ptr, i64, i64 } { ptr @.str.5600, i64 17, i64 0 }, { ptr, i64, i64 } %t549) %t551 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t550, 0 %t552 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5601, i64 3, i64 0 }) %t553 = insertvalue %S.gen.Val %t551, %S.ast.Type %t552, 1 %t554 = insertvalue %S.gen.Val %t553, i1 true, 2 ret %S.gen.Val %t554 endif8189: %t555 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t555, ptr %a556 store { ptr, i64, i64 } { ptr @.str.5602, i64 5, i64 0 }, ptr %a557 %t558 = call i32 @finch_str_eq(ptr %a556, ptr %a557) %t559 = icmp ne i32 %t558, 0 br i1 %t559, label %then8194, label %endif8196 then8194: %t560 = load ptr, ptr %a1 %t561 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t560, %S.ast.Node %t561, i64 0) %t562 = load ptr, ptr %a1 %t563 = call { ptr, i64, i64 } @finch.gen.strOut(ptr %t562) store { ptr, i64, i64 } %t563, ptr %a564 %t565 = load ptr, ptr %a1 %t566 = load { ptr, i64, i64 }, ptr %a564 store { ptr, i64, i64 } { ptr @.str.5603, i64 36, i64 0 }, ptr %a568 store { ptr, i64, i64 } %t566, ptr %a569 call void @finch_str_concat(ptr %a567, ptr %a568, ptr %a569) %t570 = load { ptr, i64, i64 }, ptr %a567 store { ptr, i64, i64 } %t570, ptr %a572 store { ptr, i64, i64 } { ptr @.str.5604, i64 6, i64 0 }, ptr %a573 call void @finch_str_concat(ptr %a571, ptr %a572, ptr %a573) %t574 = load { ptr, i64, i64 }, ptr %a571 %t575 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t574, ptr %a577 store { ptr, i64, i64 } %t575, ptr %a578 call void @finch_str_concat(ptr %a576, ptr %a577, ptr %a578) %t579 = load { ptr, i64, i64 }, ptr %a576 store { ptr, i64, i64 } %t579, ptr %a581 store { ptr, i64, i64 } { ptr @.str.5605, i64 1, i64 0 }, ptr %a582 call void @finch_str_concat(ptr %a580, ptr %a581, ptr %a582) %t583 = load { ptr, i64, i64 }, ptr %a580 call void @finch.gen.emit(ptr %t565, { ptr, i64, i64 } %t583) %t584 = load ptr, ptr %a1 %t585 = load { ptr, i64, i64 }, ptr %a564 %t586 = call { ptr, i64, i64 } @finch.gen.load(ptr %t584, { ptr, i64, i64 } { ptr @.str.5606, i64 17, i64 0 }, { ptr, i64, i64 } %t585) %t587 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t586, 0 %t588 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5607, i64 2, i64 0 }) %t589 = call %S.ast.Type @finch.ast.arrayOf(%S.ast.Type %t588) %t590 = insertvalue %S.gen.Val %t587, %S.ast.Type %t589, 1 %t591 = insertvalue %S.gen.Val %t590, i1 true, 2 ret %S.gen.Val %t591 endif8196: %t592 = load ptr, ptr %a1 %t593 = load %S.ast.Node, ptr %a2 %t594 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } { ptr @.str.5608, i64 21, i64 0 }, ptr %a596 store { ptr, i64, i64 } %t594, ptr %a597 call void @finch_str_concat(ptr %a595, ptr %a596, ptr %a597) %t598 = load { ptr, i64, i64 }, ptr %a595 store { ptr, i64, i64 } %t598, ptr %a600 store { ptr, i64, i64 } { ptr @.str.5609, i64 106, i64 0 }, ptr %a601 call void @finch_str_concat(ptr %a599, ptr %a600, ptr %a601) %t602 = load { ptr, i64, i64 }, ptr %a599 call void @finch.gen.fail(ptr %t592, %S.ast.Node %t593, { ptr, i64, i64 } %t602) ret %S.gen.Val zeroinitializer } define internal { ptr, i64, i64 } @finch.gen.runtimeDecls() { entry: %a77 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %t1 = mul i64 71, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t2 = call ptr @finch_alloc(i64 %t1) %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 0 store { ptr, i64, i64 } { ptr @.str.5610, i64 54, i64 0 }, ptr %t3 %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 1 store { ptr, i64, i64 } { ptr @.str.5611, i64 65, i64 0 }, ptr %t4 %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 2 store { ptr, i64, i64 } { ptr @.str.5612, i64 29, i64 0 }, ptr %t5 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 3 store { ptr, i64, i64 } { ptr @.str.5613, i64 38, i64 0 }, ptr %t6 %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 4 store { ptr, i64, i64 } { ptr @.str.5614, i64 32, i64 0 }, ptr %t7 %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 5 store { ptr, i64, i64 } { ptr @.str.5615, i64 45, i64 0 }, ptr %t8 %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 6 store { ptr, i64, i64 } { ptr @.str.5616, i64 35, i64 0 }, ptr %t9 %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 7 store { ptr, i64, i64 } { ptr @.str.5617, i64 36, i64 0 }, ptr %t10 %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 8 store { ptr, i64, i64 } { ptr @.str.5618, i64 42, i64 0 }, ptr %t11 %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 9 store { ptr, i64, i64 } { ptr @.str.5619, i64 37, i64 0 }, ptr %t12 %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 10 store { ptr, i64, i64 } { ptr @.str.5620, i64 38, i64 0 }, ptr %t13 %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 11 store { ptr, i64, i64 } { ptr @.str.5621, i64 42, i64 0 }, ptr %t14 %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 12 store { ptr, i64, i64 } { ptr @.str.5622, i64 38, i64 0 }, ptr %t15 %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 13 store { ptr, i64, i64 } { ptr @.str.5623, i64 37, i64 0 }, ptr %t16 %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 14 store { ptr, i64, i64 } { ptr @.str.5624, i64 42, i64 0 }, ptr %t17 %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 15 store { ptr, i64, i64 } { ptr @.str.5625, i64 42, i64 0 }, ptr %t18 %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 16 store { ptr, i64, i64 } { ptr @.str.5626, i64 34, i64 0 }, ptr %t19 %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 17 store { ptr, i64, i64 } { ptr @.str.5627, i64 42, i64 0 }, ptr %t20 %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 18 store { ptr, i64, i64 } { ptr @.str.5628, i64 43, i64 0 }, ptr %t21 %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 19 store { ptr, i64, i64 } { ptr @.str.5629, i64 47, i64 0 }, ptr %t22 %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 20 store { ptr, i64, i64 } { ptr @.str.5630, i64 50, i64 0 }, ptr %t23 %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 21 store { ptr, i64, i64 } { ptr @.str.5631, i64 43, i64 0 }, ptr %t24 %t25 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 22 store { ptr, i64, i64 } { ptr @.str.5632, i64 44, i64 0 }, ptr %t25 %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 23 store { ptr, i64, i64 } { ptr @.str.5633, i64 49, i64 0 }, ptr %t26 %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 24 store { ptr, i64, i64 } { ptr @.str.5634, i64 57, i64 0 }, ptr %t27 %t28 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 25 store { ptr, i64, i64 } { ptr @.str.5635, i64 37, i64 0 }, ptr %t28 %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 26 store { ptr, i64, i64 } { ptr @.str.5636, i64 39, i64 0 }, ptr %t29 %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 27 store { ptr, i64, i64 } { ptr @.str.5637, i64 37, i64 0 }, ptr %t30 %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 28 store { ptr, i64, i64 } { ptr @.str.5638, i64 38, i64 0 }, ptr %t31 %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 29 store { ptr, i64, i64 } { ptr @.str.5639, i64 39, i64 0 }, ptr %t32 %t33 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 30 store { ptr, i64, i64 } { ptr @.str.5640, i64 39, i64 0 }, ptr %t33 %t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 31 store { ptr, i64, i64 } { ptr @.str.5641, i64 51, i64 0 }, ptr %t34 %t35 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 32 store { ptr, i64, i64 } { ptr @.str.5642, i64 44, i64 0 }, ptr %t35 %t36 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 33 store { ptr, i64, i64 } { ptr @.str.5643, i64 43, i64 0 }, ptr %t36 %t37 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 34 store { ptr, i64, i64 } { ptr @.str.5644, i64 45, i64 0 }, ptr %t37 %t38 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 35 store { ptr, i64, i64 } { ptr @.str.5645, i64 44, i64 0 }, ptr %t38 %t39 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 36 store { ptr, i64, i64 } { ptr @.str.5646, i64 52, i64 0 }, ptr %t39 %t40 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 37 store { ptr, i64, i64 } { ptr @.str.5647, i64 57, i64 0 }, ptr %t40 %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 38 store { ptr, i64, i64 } { ptr @.str.5648, i64 48, i64 0 }, ptr %t41 %t42 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 39 store { ptr, i64, i64 } { ptr @.str.5649, i64 34, i64 0 }, ptr %t42 %t43 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 40 store { ptr, i64, i64 } { ptr @.str.5650, i64 48, i64 0 }, ptr %t43 %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 41 store { ptr, i64, i64 } { ptr @.str.5651, i64 60, i64 0 }, ptr %t44 %t45 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 42 store { ptr, i64, i64 } { ptr @.str.5652, i64 55, i64 0 }, ptr %t45 %t46 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 43 store { ptr, i64, i64 } { ptr @.str.5653, i64 46, i64 0 }, ptr %t46 %t47 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 44 store { ptr, i64, i64 } { ptr @.str.5654, i64 48, i64 0 }, ptr %t47 %t48 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 45 store { ptr, i64, i64 } { ptr @.str.5655, i64 43, i64 0 }, ptr %t48 %t49 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 46 store { ptr, i64, i64 } { ptr @.str.5656, i64 45, i64 0 }, ptr %t49 %t50 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 47 store { ptr, i64, i64 } { ptr @.str.5657, i64 59, i64 0 }, ptr %t50 %t51 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 48 store { ptr, i64, i64 } { ptr @.str.5658, i64 49, i64 0 }, ptr %t51 %t52 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 49 store { ptr, i64, i64 } { ptr @.str.5659, i64 39, i64 0 }, ptr %t52 %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 50 store { ptr, i64, i64 } { ptr @.str.5660, i64 39, i64 0 }, ptr %t53 %t54 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 51 store { ptr, i64, i64 } { ptr @.str.5661, i64 35, i64 0 }, ptr %t54 %t55 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 52 store { ptr, i64, i64 } { ptr @.str.5662, i64 35, i64 0 }, ptr %t55 %t56 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 53 store { ptr, i64, i64 } { ptr @.str.5663, i64 45, i64 0 }, ptr %t56 %t57 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 54 store { ptr, i64, i64 } { ptr @.str.5664, i64 47, i64 0 }, ptr %t57 %t58 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 55 store { ptr, i64, i64 } { ptr @.str.5665, i64 47, i64 0 }, ptr %t58 %t59 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 56 store { ptr, i64, i64 } { ptr @.str.5666, i64 48, i64 0 }, ptr %t59 %t60 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 57 store { ptr, i64, i64 } { ptr @.str.5667, i64 44, i64 0 }, ptr %t60 %t61 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 58 store { ptr, i64, i64 } { ptr @.str.5668, i64 37, i64 0 }, ptr %t61 %t62 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 59 store { ptr, i64, i64 } { ptr @.str.5669, i64 49, i64 0 }, ptr %t62 %t63 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 60 store { ptr, i64, i64 } { ptr @.str.5670, i64 39, i64 0 }, ptr %t63 %t64 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 61 store { ptr, i64, i64 } { ptr @.str.5671, i64 29, i64 0 }, ptr %t64 %t65 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 62 store { ptr, i64, i64 } { ptr @.str.5672, i64 35, i64 0 }, ptr %t65 %t66 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 63 store { ptr, i64, i64 } { ptr @.str.5673, i64 29, i64 0 }, ptr %t66 %t67 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 64 store { ptr, i64, i64 } { ptr @.str.5674, i64 24, i64 0 }, ptr %t67 %t68 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 65 store { ptr, i64, i64 } { ptr @.str.5675, i64 40, i64 0 }, ptr %t68 %t69 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 66 store { ptr, i64, i64 } { ptr @.str.5676, i64 33, i64 0 }, ptr %t69 %t70 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 67 store { ptr, i64, i64 } { ptr @.str.5677, i64 34, i64 0 }, ptr %t70 %t71 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 68 store { ptr, i64, i64 } { ptr @.str.5678, i64 44, i64 0 }, ptr %t71 %t72 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 69 store { ptr, i64, i64 } { ptr @.str.5679, i64 32, i64 0 }, ptr %t72 %t73 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 70 store { ptr, i64, i64 } { ptr @.str.5680, i64 23, i64 0 }, ptr %t73 %t74 = insertvalue { ptr, i64, i64 } undef, ptr %t2, 0 %t75 = insertvalue { ptr, i64, i64 } %t74, i64 71, 1 %t76 = insertvalue { ptr, i64, i64 } %t75, i64 71, 2 store { ptr, i64, i64 } %t76, ptr %a77 %t78 = getelementptr inbounds { ptr, i64, i64 }, ptr %a77, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.5681, i64 1, i64 0 }, ptr %a79 call void @finch_str_join(ptr %a80, ptr %a77, ptr %a79) %t81 = load { ptr, i64, i64 }, ptr %a80 store { ptr, i64, i64 } %t81, ptr %a83 store { ptr, i64, i64 } { ptr @.str.5682, i64 1, i64 0 }, ptr %a84 call void @finch_str_concat(ptr %a82, ptr %a83, ptr %a84) %t85 = load { ptr, i64, i64 }, ptr %a82 ret { ptr, i64, i64 } %t85 } define internal { ptr, i64, i64 } @finch.gen.assemble(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a85 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } { ptr @.str.5683, i64 52, i64 0 }, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null br i1 %t4, label %panic8197, label %ok8198 panic8197: call void @finch_panic(ptr @.str.5684, i64 5109, ptr @.str.5685) unreachable ok8198: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 29 %t6 = getelementptr inbounds %S.platform.Target, ptr %t5, i32 0, i32 5 %t7 = load i1, ptr %t6 br i1 %t7, label %then8199, label %endif8201 then8199: %t8 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t8, ptr %a10 store { ptr, i64, i64 } { ptr @.str.5686, i64 17, i64 0 }, ptr %a11 call void @finch_str_concat(ptr %a9, ptr %a10, ptr %a11) %t12 = load { ptr, i64, i64 }, ptr %a9 %t13 = load ptr, ptr %a1 %t14 = icmp eq ptr %t13, null br i1 %t14, label %panic8202, label %ok8203 panic8202: call void @finch_panic(ptr @.str.5687, i64 5110, ptr @.str.5688) unreachable ok8203: %t15 = getelementptr inbounds %S.gen.Gen, ptr %t13, i32 0, i32 29 %t16 = getelementptr inbounds %S.platform.Target, ptr %t15, i32 0, i32 0 %t17 = load { ptr, i64, i64 }, ptr %t16 store { ptr, i64, i64 } %t12, ptr %a19 store { ptr, i64, i64 } %t17, ptr %a20 call void @finch_str_concat(ptr %a18, ptr %a19, ptr %a20) %t21 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t21, ptr %a23 store { ptr, i64, i64 } { ptr @.str.5689, i64 3, i64 0 }, ptr %a24 call void @finch_str_concat(ptr %a22, ptr %a23, ptr %a24) %t25 = load { ptr, i64, i64 }, ptr %a22 store { ptr, i64, i64 } %t25, ptr %a2 br label %endif8201 endif8201: %t26 = load { ptr, i64, i64 }, ptr %a2 %t27 = load ptr, ptr %a1 %t28 = icmp eq ptr %t27, null br i1 %t28, label %panic8204, label %ok8205 panic8204: call void @finch_panic(ptr @.str.5690, i64 5112, ptr @.str.5691) unreachable ok8205: %t29 = getelementptr inbounds %S.gen.Gen, ptr %t27, i32 0, i32 2 %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.5692, i64 1, i64 0 }, ptr %a31 call void @finch_str_join(ptr %a32, ptr %t29, ptr %a31) %t33 = load { ptr, i64, i64 }, ptr %a32 store { ptr, i64, i64 } %t26, ptr %a35 store { ptr, i64, i64 } %t33, ptr %a36 call void @finch_str_concat(ptr %a34, ptr %a35, ptr %a36) %t37 = load { ptr, i64, i64 }, ptr %a34 store { ptr, i64, i64 } %t37, ptr %a39 store { ptr, i64, i64 } { ptr @.str.5693, i64 2, i64 0 }, ptr %a40 call void @finch_str_concat(ptr %a38, ptr %a39, ptr %a40) %t41 = load { ptr, i64, i64 }, ptr %a38 %t42 = call { ptr, i64, i64 } @finch.gen.runtimeDecls() store { ptr, i64, i64 } %t41, ptr %a44 store { ptr, i64, i64 } %t42, ptr %a45 call void @finch_str_concat(ptr %a43, ptr %a44, ptr %a45) %t46 = load { ptr, i64, i64 }, ptr %a43 store { ptr, i64, i64 } %t46, ptr %a48 store { ptr, i64, i64 } { ptr @.str.5694, i64 1, i64 0 }, ptr %a49 call void @finch_str_concat(ptr %a47, ptr %a48, ptr %a49) %t50 = load { ptr, i64, i64 }, ptr %a47 store { ptr, i64, i64 } %t50, ptr %a2 %t51 = load ptr, ptr %a1 %t52 = icmp eq ptr %t51, null br i1 %t52, label %panic8206, label %ok8207 panic8206: call void @finch_panic(ptr @.str.5695, i64 5113, ptr @.str.5696) unreachable ok8207: %t53 = getelementptr inbounds %S.gen.Gen, ptr %t51, i32 0, i32 28 %t54 = load i1, ptr %t53 br i1 %t54, label %then8208, label %endif8210 then8208: %t55 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t55, ptr %a57 store { ptr, i64, i64 } { ptr @.str.5697, i64 62, i64 0 }, ptr %a58 call void @finch_str_concat(ptr %a56, ptr %a57, ptr %a58) %t59 = load { ptr, i64, i64 }, ptr %a56 store { ptr, i64, i64 } %t59, ptr %a2 br label %endif8210 endif8210: %t60 = load { ptr, i64, i64 }, ptr %a2 %t61 = load ptr, ptr %a1 %t62 = icmp eq ptr %t61, null br i1 %t62, label %panic8211, label %ok8212 panic8211: call void @finch_panic(ptr @.str.5698, i64 5116, ptr @.str.5699) unreachable ok8212: %t63 = getelementptr inbounds %S.gen.Gen, ptr %t61, i32 0, i32 3 %t64 = getelementptr inbounds { ptr, i64, i64 }, ptr %t63, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.5700, i64 1, i64 0 }, ptr %a65 call void @finch_str_join(ptr %a66, ptr %t63, ptr %a65) %t67 = load { ptr, i64, i64 }, ptr %a66 store { ptr, i64, i64 } %t60, ptr %a69 store { ptr, i64, i64 } %t67, ptr %a70 call void @finch_str_concat(ptr %a68, ptr %a69, ptr %a70) %t71 = load { ptr, i64, i64 }, ptr %a68 store { ptr, i64, i64 } %t71, ptr %a2 %t72 = load ptr, ptr %a1 %t73 = icmp eq ptr %t72, null br i1 %t73, label %panic8213, label %ok8214 panic8213: call void @finch_panic(ptr @.str.5701, i64 5117, ptr @.str.5702) unreachable ok8214: %t74 = getelementptr inbounds %S.gen.Gen, ptr %t72, i32 0, i32 28 %t75 = load i1, ptr %t74 br i1 %t75, label %then8215, label %endif8217 then8215: %t76 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t76, ptr %a78 store { ptr, i64, i64 } { ptr @.str.5703, i64 1, i64 0 }, ptr %a79 call void @finch_str_concat(ptr %a77, ptr %a78, ptr %a79) %t80 = load { ptr, i64, i64 }, ptr %a77 %t81 = load ptr, ptr %a1 %t82 = call { ptr, i64, i64 } @finch.gen.dbgModule(ptr %t81) store { ptr, i64, i64 } %t80, ptr %a84 store { ptr, i64, i64 } %t82, ptr %a85 call void @finch_str_concat(ptr %a83, ptr %a84, ptr %a85) %t86 = load { ptr, i64, i64 }, ptr %a83 store { ptr, i64, i64 } %t86, ptr %a2 br label %endif8217 endif8217: %t87 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t87, ptr %a88 call void @finch_str_copy(ptr %a89, ptr %a88) %t90 = load { ptr, i64, i64 }, ptr %a89 ret { ptr, i64, i64 } %t90 } define internal void @finch.copy.arr_S_ast_Program(ptr %dst, ptr %src) { entry: %a5 = alloca i64, align 16 call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.ast.Program, ptr null, i32 1) to i64)) %t1 = load ptr, ptr %dst %t2 = load ptr, ptr %src %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 %t4 = load i64, ptr %t3 store i64 0, ptr %a5 br label %n.cond8218 n.cond8218: %t6 = load i64, ptr %a5 %t7 = icmp slt i64 %t6, %t4 br i1 %t7, label %n.body8219, label %n.end8220 n.body8219: %t8 = getelementptr inbounds %S.ast.Program, ptr %t1, i64 %t6 %t9 = getelementptr inbounds %S.ast.Program, ptr %t2, i64 %t6 call void @finch.copy.S_ast_Program(ptr %t8, ptr %t9) %t10 = load i64, ptr %a5 %t11 = add i64 %t10, 1 store i64 %t11, ptr %a5 br label %n.cond8218 n.end8220: ret void } define internal void @finch.copy.S_cimport_CFunc(ptr %dst, ptr %src) { entry: %t1 = load %S.cimport.CFunc, ptr %src store %S.cimport.CFunc %t1, ptr %dst %t2 = getelementptr inbounds %S.cimport.CFunc, ptr %dst, i32 0, i32 0 %t3 = getelementptr inbounds %S.cimport.CFunc, ptr %src, i32 0, i32 0 call void @finch_str_copy(ptr %t2, ptr %t3) %t4 = getelementptr inbounds %S.cimport.CFunc, ptr %dst, i32 0, i32 1 %t5 = getelementptr inbounds %S.cimport.CFunc, ptr %src, i32 0, i32 1 call void @finch_str_copy(ptr %t4, ptr %t5) %t6 = getelementptr inbounds %S.cimport.CFunc, ptr %dst, i32 0, i32 2 %t7 = getelementptr inbounds %S.cimport.CFunc, ptr %src, i32 0, i32 2 call void @finch.copy.S_ast_Type(ptr %t6, ptr %t7) %t8 = getelementptr inbounds %S.cimport.CFunc, ptr %dst, i32 0, i32 3 %t9 = getelementptr inbounds %S.cimport.CFunc, ptr %src, i32 0, i32 3 call void @finch.copy.arr_S_ast_Type(ptr %t8, ptr %t9) %t10 = getelementptr inbounds %S.cimport.CFunc, ptr %dst, i32 0, i32 5 %t11 = getelementptr inbounds %S.cimport.CFunc, ptr %src, i32 0, i32 5 call void @finch_str_copy(ptr %t10, ptr %t11) ret void } define internal void @finch.copy.map_str_S_cimport_CFunc(ptr %dst, ptr %src) { entry: %a3 = alloca i64, align 16 call void @finch_map_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr null, i32 1) to i64)) %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %src, i32 0, i32 2 %t2 = load i64, ptr %t1 store i64 0, ptr %a3 br label %n.cond8221 n.cond8221: %t4 = load i64, ptr %a3 %t5 = icmp slt i64 %t4, %t2 br i1 %t5, label %n.body8222, label %n.end8223 n.body8222: %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %src, i32 0, i32 0 %t7 = load ptr, ptr %t6 %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t7, i64 %t4 %t9 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %dst, i32 0, i32 0 %t10 = load ptr, ptr %t9 %t11 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t10, i64 %t4 %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t8, i32 0, i32 0 %t13 = load i64, ptr %t12 %t14 = icmp ne i64 %t13, 0 br i1 %t14, label %entry.live8224, label %entry.next8225 entry.live8224: %t15 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t11, i32 0, i32 1 %t16 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t8, i32 0, i32 1 call void @finch_str_copy(ptr %t15, ptr %t16) %t17 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t11, i32 0, i32 2 %t18 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t8, i32 0, i32 2 call void @finch.copy.S_cimport_CFunc(ptr %t17, ptr %t18) br label %entry.next8225 entry.next8225: %t19 = load i64, ptr %a3 %t20 = add i64 %t19, 1 store i64 %t20, ptr %a3 br label %n.cond8221 n.end8223: ret void } define internal void @finch.copy.map_str_S_cimport_CConst(ptr %dst, ptr %src) { entry: %a3 = alloca i64, align 16 call void @finch_map_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr null, i32 1) to i64)) %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %src, i32 0, i32 2 %t2 = load i64, ptr %t1 store i64 0, ptr %a3 br label %n.cond8226 n.cond8226: %t4 = load i64, ptr %a3 %t5 = icmp slt i64 %t4, %t2 br i1 %t5, label %n.body8227, label %n.end8228 n.body8227: %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %src, i32 0, i32 0 %t7 = load ptr, ptr %t6 %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t7, i64 %t4 %t9 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %dst, i32 0, i32 0 %t10 = load ptr, ptr %t9 %t11 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t10, i64 %t4 %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t8, i32 0, i32 0 %t13 = load i64, ptr %t12 %t14 = icmp ne i64 %t13, 0 br i1 %t14, label %entry.live8229, label %entry.next8230 entry.live8229: %t15 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t11, i32 0, i32 1 %t16 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t8, i32 0, i32 1 call void @finch_str_copy(ptr %t15, ptr %t16) %t17 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t11, i32 0, i32 2 %t18 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t8, i32 0, i32 2 call void @finch.copy.S_cimport_CConst(ptr %t17, ptr %t18) br label %entry.next8230 entry.next8230: %t19 = load i64, ptr %a3 %t20 = add i64 %t19, 1 store i64 %t20, ptr %a3 br label %n.cond8226 n.end8228: ret void } define internal void @finch.copy.map_str_S_ast_Type(ptr %dst, ptr %src) { entry: %a3 = alloca i64, align 16 call void @finch_map_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.ast.Type }, ptr null, i32 1) to i64)) %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %src, i32 0, i32 2 %t2 = load i64, ptr %t1 store i64 0, ptr %a3 br label %n.cond8231 n.cond8231: %t4 = load i64, ptr %a3 %t5 = icmp slt i64 %t4, %t2 br i1 %t5, label %n.body8232, label %n.end8233 n.body8232: %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %src, i32 0, i32 0 %t7 = load ptr, ptr %t6 %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t7, i64 %t4 %t9 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %dst, i32 0, i32 0 %t10 = load ptr, ptr %t9 %t11 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t10, i64 %t4 %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t8, i32 0, i32 0 %t13 = load i64, ptr %t12 %t14 = icmp ne i64 %t13, 0 br i1 %t14, label %entry.live8234, label %entry.next8235 entry.live8234: %t15 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t11, i32 0, i32 1 %t16 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t8, i32 0, i32 1 call void @finch_str_copy(ptr %t15, ptr %t16) %t17 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t11, i32 0, i32 2 %t18 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t8, i32 0, i32 2 call void @finch.copy.S_ast_Type(ptr %t17, ptr %t18) br label %entry.next8235 entry.next8235: %t19 = load i64, ptr %a3 %t20 = add i64 %t19, 1 store i64 %t20, ptr %a3 br label %n.cond8231 n.end8233: ret void } define internal void @finch.copy.map_str_S_cimport_CStruct(ptr %dst, ptr %src) { entry: %a3 = alloca i64, align 16 call void @finch_map_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr null, i32 1) to i64)) %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %src, i32 0, i32 2 %t2 = load i64, ptr %t1 store i64 0, ptr %a3 br label %n.cond8236 n.cond8236: %t4 = load i64, ptr %a3 %t5 = icmp slt i64 %t4, %t2 br i1 %t5, label %n.body8237, label %n.end8238 n.body8237: %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %src, i32 0, i32 0 %t7 = load ptr, ptr %t6 %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t7, i64 %t4 %t9 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %dst, i32 0, i32 0 %t10 = load ptr, ptr %t9 %t11 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t10, i64 %t4 %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t8, i32 0, i32 0 %t13 = load i64, ptr %t12 %t14 = icmp ne i64 %t13, 0 br i1 %t14, label %entry.live8239, label %entry.next8240 entry.live8239: %t15 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t11, i32 0, i32 1 %t16 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t8, i32 0, i32 1 call void @finch_str_copy(ptr %t15, ptr %t16) %t17 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t11, i32 0, i32 2 %t18 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t8, i32 0, i32 2 call void @finch.copy.S_cimport_CStruct(ptr %t17, ptr %t18) br label %entry.next8240 entry.next8240: %t19 = load i64, ptr %a3 %t20 = add i64 %t19, 1 store i64 %t20, ptr %a3 br label %n.cond8236 n.end8238: ret void } define internal void @finch.copy.S_cimport_CImports(ptr %dst, ptr %src) { entry: %t1 = load %S.cimport.CImports, ptr %src store %S.cimport.CImports %t1, ptr %dst %t2 = getelementptr inbounds %S.cimport.CImports, ptr %dst, i32 0, i32 0 %t3 = getelementptr inbounds %S.cimport.CImports, ptr %src, i32 0, i32 0 call void @finch.copy.map_str_S_cimport_CFunc(ptr %t2, ptr %t3) %t4 = getelementptr inbounds %S.cimport.CImports, ptr %dst, i32 0, i32 1 %t5 = getelementptr inbounds %S.cimport.CImports, ptr %src, i32 0, i32 1 call void @finch.copy.map_str_S_cimport_CConst(ptr %t4, ptr %t5) %t6 = getelementptr inbounds %S.cimport.CImports, ptr %dst, i32 0, i32 2 %t7 = getelementptr inbounds %S.cimport.CImports, ptr %src, i32 0, i32 2 call void @finch.copy.map_str_S_ast_Type(ptr %t6, ptr %t7) %t8 = getelementptr inbounds %S.cimport.CImports, ptr %dst, i32 0, i32 3 %t9 = getelementptr inbounds %S.cimport.CImports, ptr %src, i32 0, i32 3 call void @finch.copy.map_str_S_cimport_CStruct(ptr %t8, ptr %t9) %t10 = getelementptr inbounds %S.cimport.CImports, ptr %dst, i32 0, i32 4 %t11 = getelementptr inbounds %S.cimport.CImports, ptr %src, i32 0, i32 4 call void @finch.copy.arr_str(ptr %t10, ptr %t11) ret void } define internal { ptr, i64, i64 } @finch.gen.generate({ ptr, i64, i64 } %p0, { ptr, i64, i64 } %p1, %S.cimport.CImports %p2, %S.gen.Options %p3) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca %S.cimport.CImports, align 16 %a4 = alloca %S.gen.Options, align 16 %a7 = alloca i1, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca %S.cimport.CImports, align 16 %a20 = alloca %S.cimport.CImports, align 16 %a34 = alloca %S.platform.Target, align 16 %a35 = alloca %S.platform.Target, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca %S.gen.Gen, align 16 %a46 = alloca ptr, align 16 %a75 = alloca i64, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca { ptr, i64, i64 }, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca { ptr, i64, i64 }, align 16 %a104 = alloca { ptr, i64, i64 }, align 16 %a106 = alloca { ptr, i64, i64 }, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a126 = alloca { ptr, i64, i64 }, align 16 %a128 = alloca { ptr, i64, i64 }, align 16 %a129 = alloca { ptr, i64, i64 }, align 16 %a130 = alloca { ptr, i64, i64 }, align 16 %a132 = alloca { ptr, i64, i64 }, align 16 %a133 = alloca { ptr, i64, i64 }, align 16 %a134 = alloca { ptr, i64, i64 }, align 16 %a147 = alloca i64, align 16 %a197 = alloca { ptr, i64, i64 }, align 16 %a198 = alloca { ptr, i64, i64 }, align 16 %a199 = alloca { ptr, i64, i64 }, align 16 %a210 = alloca i64, align 16 %a236 = alloca { ptr, i64, i64 }, align 16 %a237 = alloca { ptr, i64, i64 }, align 16 %a239 = alloca { ptr, i64, i64 }, align 16 %a246 = alloca { ptr, i64, i64 }, align 16 %a247 = alloca { ptr, i64, i64 }, align 16 %a252 = alloca i64, align 16 %a260 = alloca %S.gen.FnSig, align 16 %a269 = alloca { ptr, i64, i64 }, align 16 %a280 = alloca { ptr, i64, i64 }, align 16 %a281 = alloca { ptr, i64, i64 }, align 16 %a282 = alloca { ptr, i64, i64 }, align 16 %a284 = alloca { ptr, i64, i64 }, align 16 %a285 = alloca { ptr, i64, i64 }, align 16 %a286 = alloca { ptr, i64, i64 }, align 16 %a304 = alloca %S.gen.FnSig, align 16 %a305 = alloca %S.gen.FnSig, align 16 %a307 = alloca %S.gen.FnSig, align 16 %a311 = alloca { ptr, i64, i64 }, align 16 %a312 = alloca { ptr, i64, i64 }, align 16 %a313 = alloca { ptr, i64, i64 }, align 16 %a315 = alloca { ptr, i64, i64 }, align 16 %a316 = alloca { ptr, i64, i64 }, align 16 %a317 = alloca { ptr, i64, i64 }, align 16 %a321 = alloca { ptr, i64, i64 }, align 16 %a322 = alloca { ptr, i64, i64 }, align 16 %a323 = alloca { ptr, i64, i64 }, align 16 %a325 = alloca { ptr, i64, i64 }, align 16 %a326 = alloca { ptr, i64, i64 }, align 16 %a327 = alloca { ptr, i64, i64 }, align 16 %a329 = alloca { ptr, i64, i64 }, align 16 %a330 = alloca { ptr, i64, i64 }, align 16 %a336 = alloca { ptr, i64, i64 }, align 16 %a337 = alloca { ptr, i64, i64 }, align 16 %a338 = alloca { ptr, i64, i64 }, align 16 %a341 = alloca { ptr, i64, i64 }, align 16 %a342 = alloca { ptr, i64, i64 }, align 16 %a343 = alloca { ptr, i64, i64 }, align 16 %a345 = alloca { ptr, i64, i64 }, align 16 %a349 = alloca { ptr, i64, i64 }, align 16 %a350 = alloca { ptr, i64, i64 }, align 16 %a351 = alloca { ptr, i64, i64 }, align 16 %a354 = alloca { ptr, i64, i64 }, align 16 %a355 = alloca { ptr, i64, i64 }, align 16 %a356 = alloca { ptr, i64, i64 }, align 16 %a359 = alloca { ptr, i64, i64 }, align 16 %a360 = alloca { ptr, i64, i64 }, align 16 %a361 = alloca { ptr, i64, i64 }, align 16 %a363 = alloca { ptr, i64, i64 }, align 16 %a364 = alloca { ptr, i64, i64 }, align 16 %a365 = alloca { ptr, i64, i64 }, align 16 %a370 = alloca { ptr, i64, i64 }, align 16 %a372 = alloca { ptr, i64, i64 }, align 16 %a373 = alloca { ptr, i64, i64 }, align 16 %a374 = alloca { ptr, i64, i64 }, align 16 %a377 = alloca { ptr, i64, i64 }, align 16 %a378 = alloca { ptr, i64, i64 }, align 16 %a379 = alloca { ptr, i64, i64 }, align 16 %a381 = alloca { ptr, i64, i64 }, align 16 %a382 = alloca { ptr, i64, i64 }, align 16 %a383 = alloca { ptr, i64, i64 }, align 16 %a386 = alloca { ptr, i64, i64 }, align 16 %a387 = alloca { ptr, i64, i64 }, align 16 %a388 = alloca { ptr, i64, i64 }, align 16 %a391 = alloca { ptr, i64, i64 }, align 16 %a392 = alloca { ptr, i64, i64 }, align 16 %a393 = alloca { ptr, i64, i64 }, align 16 %a395 = alloca { ptr, i64, i64 }, align 16 %a396 = alloca { ptr, i64, i64 }, align 16 %a397 = alloca { ptr, i64, i64 }, align 16 %a400 = alloca { ptr, i64, i64 }, align 16 %a401 = alloca { ptr, i64, i64 }, align 16 %a402 = alloca { ptr, i64, i64 }, align 16 %a407 = alloca { ptr, i64, i64 }, align 16 %a408 = alloca { ptr, i64, i64 }, align 16 %a412 = alloca { ptr, i64, i64 }, align 16 %a413 = alloca { ptr, i64, i64 }, align 16 %a414 = alloca { ptr, i64, i64 }, align 16 %a416 = alloca { ptr, i64, i64 }, align 16 %a417 = alloca { ptr, i64, i64 }, align 16 %a418 = alloca { ptr, i64, i64 }, align 16 %a423 = alloca { ptr, i64, i64 }, align 16 %a424 = alloca { ptr, i64, i64 }, align 16 %a428 = alloca { ptr, i64, i64 }, align 16 %a429 = alloca { ptr, i64, i64 }, align 16 %a430 = alloca { ptr, i64, i64 }, align 16 %a437 = alloca { ptr, i64, i64 }, align 16 %a438 = alloca { ptr, i64, i64 }, align 16 %a439 = alloca { ptr, i64, i64 }, align 16 %a441 = alloca { ptr, i64, i64 }, align 16 %a442 = alloca { ptr, i64, i64 }, align 16 %a443 = alloca { ptr, i64, i64 }, align 16 %a446 = alloca { ptr, i64, i64 }, align 16 %a447 = alloca { ptr, i64, i64 }, align 16 %a448 = alloca { ptr, i64, i64 }, align 16 %a450 = alloca { ptr, i64, i64 }, align 16 %a451 = alloca { ptr, i64, i64 }, align 16 %a452 = alloca { ptr, i64, i64 }, align 16 %a455 = alloca { ptr, i64, i64 }, align 16 %a456 = alloca { ptr, i64, i64 }, align 16 %a457 = alloca { ptr, i64, i64 }, align 16 %a459 = alloca { ptr, i64, i64 }, align 16 %a460 = alloca { ptr, i64, i64 }, align 16 %a461 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store %S.cimport.CImports %p2, ptr %a3 store %S.gen.Options %p3, ptr %a4 %t5 = getelementptr inbounds %S.gen.Options, ptr %a4, i32 0, i32 0 %t6 = load i1, ptr %t5 store i1 %t6, ptr %a7 %t8 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t8, ptr %a9 call void @finch.copy.arr_S_ast_Program(ptr %a10, ptr %a9) %t11 = load { ptr, i64, i64 }, ptr %a10 %t12 = insertvalue %S.gen.Gen zeroinitializer, { ptr, i64, i64 } %t11, 0 %t13 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t13, ptr %a14 call void @finch.copy.arr_str(ptr %a15, ptr %a14) %t16 = load { ptr, i64, i64 }, ptr %a15 %t17 = insertvalue %S.gen.Gen %t12, { ptr, i64, i64 } %t16, 1 %t18 = load %S.cimport.CImports, ptr %a3 store %S.cimport.CImports %t18, ptr %a19 call void @finch.copy.S_cimport_CImports(ptr %a20, ptr %a19) %t21 = load %S.cimport.CImports, ptr %a20 %t22 = insertvalue %S.gen.Gen %t17, %S.cimport.CImports %t21, 24 %t23 = getelementptr inbounds %S.gen.Options, ptr %a4, i32 0, i32 0 %t24 = load i1, ptr %t23 %t25 = insertvalue %S.gen.Gen %t22, i1 %t24, 25 %t26 = getelementptr inbounds %S.gen.Options, ptr %a4, i32 0, i32 1 %t27 = load i1, ptr %t26 %t28 = insertvalue %S.gen.Gen %t25, i1 %t27, 26 %t29 = getelementptr inbounds %S.gen.Options, ptr %a4, i32 0, i32 2 %t30 = load i1, ptr %t29 %t31 = insertvalue %S.gen.Gen %t28, i1 %t30, 28 %t32 = getelementptr inbounds %S.gen.Options, ptr %a4, i32 0, i32 4 %t33 = load %S.platform.Target, ptr %t32 store %S.platform.Target %t33, ptr %a34 call void @finch.copy.S_platform_Target(ptr %a35, ptr %a34) %t36 = load %S.platform.Target, ptr %a35 %t37 = insertvalue %S.gen.Gen %t31, %S.platform.Target %t36, 29 %t38 = getelementptr inbounds %S.gen.Options, ptr %a4, i32 0, i32 3 %t39 = load { ptr, i64, i64 }, ptr %t38 store { ptr, i64, i64 } %t39, ptr %a40 call void @finch_str_copy(ptr %a41, ptr %a40) %t42 = load { ptr, i64, i64 }, ptr %a41 %t43 = insertvalue %S.gen.Gen %t37, { ptr, i64, i64 } %t42, 30 %t44 = insertvalue %S.gen.Gen %t43, i64 -1, 34 store %S.gen.Gen %t44, ptr %a45 store ptr %a45, ptr %a46 %t47 = load ptr, ptr %a46 %t48 = icmp eq ptr %t47, null br i1 %t48, label %panic8241, label %ok8242 panic8241: call void @finch_panic(ptr @.str.5704, i64 5127, ptr @.str.5705) unreachable ok8242: %t49 = getelementptr inbounds %S.gen.Gen, ptr %t47, i32 0, i32 28 %t50 = load i1, ptr %t49 br i1 %t50, label %then8243, label %endif8245 then8243: %t51 = load ptr, ptr %a46 %t52 = icmp eq ptr %t51, null br i1 %t52, label %panic8246, label %ok8247 panic8246: call void @finch_panic(ptr @.str.5706, i64 5129, ptr @.str.5707) unreachable ok8247: %t53 = getelementptr inbounds %S.gen.Gen, ptr %t51, i32 0, i32 31 %t54 = getelementptr inbounds { ptr, i64, i64 }, ptr %t53, i32 0, i32 1 %t55 = load i64, ptr %t54 %t56 = add i64 %t55, 1 call void @finch_arr_reserve(ptr %t53, i64 %t56, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t57 = load ptr, ptr %t53 %t58 = getelementptr inbounds { ptr, i64, i64 }, ptr %t57, i64 %t55 store { ptr, i64, i64 } { ptr @.str.5708, i64 0, i64 0 }, ptr %t58 store i64 %t56, ptr %t54 %t59 = load ptr, ptr %a46 %t60 = icmp eq ptr %t59, null br i1 %t60, label %panic8248, label %ok8249 panic8248: call void @finch_panic(ptr @.str.5709, i64 5130, ptr @.str.5710) unreachable ok8249: %t61 = getelementptr inbounds %S.gen.Gen, ptr %t59, i32 0, i32 31 %t62 = getelementptr inbounds { ptr, i64, i64 }, ptr %t61, i32 0, i32 1 %t63 = load i64, ptr %t62 %t64 = add i64 %t63, 1 call void @finch_arr_reserve(ptr %t61, i64 %t64, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t65 = load ptr, ptr %t61 %t66 = getelementptr inbounds { ptr, i64, i64 }, ptr %t65, i64 %t63 store { ptr, i64, i64 } { ptr @.str.5711, i64 33, i64 0 }, ptr %t66 store i64 %t64, ptr %t62 %t67 = load ptr, ptr %a46 %t68 = icmp eq ptr %t67, null br i1 %t68, label %panic8250, label %ok8251 panic8250: call void @finch_panic(ptr @.str.5712, i64 5131, ptr @.str.5713) unreachable ok8251: %t69 = getelementptr inbounds %S.gen.Gen, ptr %t67, i32 0, i32 31 %t70 = getelementptr inbounds { ptr, i64, i64 }, ptr %t69, i32 0, i32 1 %t71 = load i64, ptr %t70 %t72 = add i64 %t71, 1 call void @finch_arr_reserve(ptr %t69, i64 %t72, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t73 = load ptr, ptr %t69 %t74 = getelementptr inbounds { ptr, i64, i64 }, ptr %t73, i64 %t71 store { ptr, i64, i64 } { ptr @.str.5714, i64 38, i64 0 }, ptr %t74 store i64 %t72, ptr %t70 store i64 0, ptr %a75 br label %each.cond8252 each.cond8252: %t76 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t77 = load i64, ptr %t76 %t78 = load i64, ptr %a75 %t79 = icmp slt i64 %t78, %t77 br i1 %t79, label %each.body8253, label %each.end8255 each.body8253: %t80 = load ptr, ptr %a2 %t81 = getelementptr inbounds { ptr, i64, i64 }, ptr %t80, i64 %t78 %t82 = load { ptr, i64, i64 }, ptr %t81 store { ptr, i64, i64 } %t82, ptr %a83 %t84 = load ptr, ptr %a46 %t85 = icmp eq ptr %t84, null br i1 %t85, label %panic8256, label %ok8257 panic8256: call void @finch_panic(ptr @.str.5715, i64 5133, ptr @.str.5716) unreachable ok8257: %t86 = getelementptr inbounds %S.gen.Gen, ptr %t84, i32 0, i32 33 %t87 = getelementptr inbounds { ptr, i64, i64 }, ptr %t86, i32 0, i32 1 %t88 = load ptr, ptr %a46 %t89 = load { ptr, i64, i64 }, ptr %a83 store { ptr, i64, i64 } { ptr @.str.5717, i64 19, i64 0 }, ptr %a91 store { ptr, i64, i64 } %t89, ptr %a92 call void @finch_str_concat(ptr %a90, ptr %a91, ptr %a92) %t93 = load { ptr, i64, i64 }, ptr %a90 store { ptr, i64, i64 } %t93, ptr %a95 store { ptr, i64, i64 } { ptr @.str.5718, i64 15, i64 0 }, ptr %a96 call void @finch_str_concat(ptr %a94, ptr %a95, ptr %a96) %t97 = load { ptr, i64, i64 }, ptr %a94 %t98 = load ptr, ptr %a46 %t99 = icmp eq ptr %t98, null br i1 %t99, label %panic8258, label %ok8259 panic8258: call void @finch_panic(ptr @.str.5719, i64 5133, ptr @.str.5720) unreachable ok8259: %t100 = getelementptr inbounds %S.gen.Gen, ptr %t98, i32 0, i32 30 %t101 = load { ptr, i64, i64 }, ptr %t100 store { ptr, i64, i64 } %t97, ptr %a103 store { ptr, i64, i64 } %t101, ptr %a104 call void @finch_str_concat(ptr %a102, ptr %a103, ptr %a104) %t105 = load { ptr, i64, i64 }, ptr %a102 store { ptr, i64, i64 } %t105, ptr %a107 store { ptr, i64, i64 } { ptr @.str.5721, i64 2, i64 0 }, ptr %a108 call void @finch_str_concat(ptr %a106, ptr %a107, ptr %a108) %t109 = load { ptr, i64, i64 }, ptr %a106 %t110 = call i64 @finch.gen.md(ptr %t88, { ptr, i64, i64 } %t109) %t111 = load i64, ptr %t87 %t112 = add i64 %t111, 1 call void @finch_arr_reserve(ptr %t86, i64 %t112, i64 ptrtoint (ptr getelementptr (i64, ptr null, i32 1) to i64)) %t113 = load ptr, ptr %t86 %t114 = getelementptr inbounds i64, ptr %t113, i64 %t111 store i64 %t110, ptr %t114 store i64 %t112, ptr %t87 br label %each.step8254 each.step8254: %t115 = load i64, ptr %a75 %t116 = add i64 %t115, 1 store i64 %t116, ptr %a75 br label %each.cond8252 each.end8255: %t117 = load ptr, ptr %a46 %t118 = icmp eq ptr %t117, null br i1 %t118, label %panic8260, label %ok8261 panic8260: call void @finch_panic(ptr @.str.5723, i64 5135, ptr @.str.5724) unreachable ok8261: %t119 = getelementptr inbounds %S.gen.Gen, ptr %t117, i32 0, i32 33 %t120 = load { ptr, i64, i64 }, ptr %t119 %t121 = extractvalue { ptr, i64, i64 } %t120, 1 %t122 = icmp uge i64 0, %t121 br i1 %t122, label %range8262, label %inrange8263 range8262: call void @finch_panic_index(ptr @.str.5725, i64 5135, i64 0, i64 %t121) unreachable inrange8263: %t123 = extractvalue { ptr, i64, i64 } %t120, 0 %t124 = getelementptr inbounds i64, ptr %t123, i64 0 %t125 = load i64, ptr %t124 call void @finch_str_from_int(ptr %a126, i64 %t125) %t127 = load { ptr, i64, i64 }, ptr %a126 store { ptr, i64, i64 } { ptr @.str.5722, i64 52, i64 0 }, ptr %a129 store { ptr, i64, i64 } %t127, ptr %a130 call void @finch_str_concat(ptr %a128, ptr %a129, ptr %a130) %t131 = load { ptr, i64, i64 }, ptr %a128 store { ptr, i64, i64 } %t131, ptr %a133 store { ptr, i64, i64 } { ptr @.str.5726, i64 84, i64 0 }, ptr %a134 call void @finch_str_concat(ptr %a132, ptr %a133, ptr %a134) %t135 = load { ptr, i64, i64 }, ptr %a132 %t136 = load ptr, ptr %a46 %t137 = icmp eq ptr %t136, null br i1 %t137, label %panic8264, label %ok8265 panic8264: call void @finch_panic(ptr @.str.5727, i64 5135, ptr @.str.5728) unreachable ok8265: %t138 = getelementptr inbounds %S.gen.Gen, ptr %t136, i32 0, i32 31 %t139 = load { ptr, i64, i64 }, ptr %t138 %t140 = extractvalue { ptr, i64, i64 } %t139, 1 %t141 = icmp uge i64 0, %t140 br i1 %t141, label %range8266, label %inrange8267 range8266: call void @finch_panic_index(ptr @.str.5729, i64 5135, i64 0, i64 %t140) unreachable inrange8267: %t142 = extractvalue { ptr, i64, i64 } %t139, 0 %t143 = getelementptr inbounds { ptr, i64, i64 }, ptr %t142, i64 0 store { ptr, i64, i64 } %t135, ptr %t143 br label %endif8245 endif8245: %t144 = load ptr, ptr %a46 call void @finch.gen.declare(ptr %t144) %t145 = load ptr, ptr %a46 %t146 = call i64 @finch.gen.findFn(ptr %t145, { ptr, i64, i64 } { ptr @.str.5730, i64 0, i64 0 }, { ptr, i64, i64 } { ptr @.str.5731, i64 4, i64 0 }) store i64 %t146, ptr %a147 %t148 = load i1, ptr %a7 br i1 %t148, label %then8268, label %else8269 then8268: %t149 = load i64, ptr %a147 %t150 = icmp sge i64 %t149, 0 br i1 %t150, label %then8271, label %endif8273 then8271: %t151 = load ptr, ptr %a46 %t152 = load ptr, ptr %a46 %t153 = icmp eq ptr %t152, null br i1 %t153, label %panic8274, label %ok8275 panic8274: call void @finch_panic(ptr @.str.5732, i64 5141, ptr @.str.5733) unreachable ok8275: %t154 = getelementptr inbounds %S.gen.Gen, ptr %t152, i32 0, i32 0 %t155 = load ptr, ptr %a46 %t156 = icmp eq ptr %t155, null br i1 %t156, label %panic8276, label %ok8277 panic8276: call void @finch_panic(ptr @.str.5734, i64 5141, ptr @.str.5735) unreachable ok8277: %t157 = getelementptr inbounds %S.gen.Gen, ptr %t155, i32 0, i32 14 %t158 = load i64, ptr %a147 %t159 = load { ptr, i64, i64 }, ptr %t157 %t160 = extractvalue { ptr, i64, i64 } %t159, 1 %t161 = icmp uge i64 %t158, %t160 br i1 %t161, label %range8278, label %inrange8279 range8278: call void @finch_panic_index(ptr @.str.5736, i64 5141, i64 %t158, i64 %t160) unreachable inrange8279: %t162 = extractvalue { ptr, i64, i64 } %t159, 0 %t163 = getelementptr inbounds %S.gen.FnSig, ptr %t162, i64 %t158 %t164 = getelementptr inbounds %S.gen.FnSig, ptr %t163, i32 0, i32 16 %t165 = load i64, ptr %t164 %t166 = load { ptr, i64, i64 }, ptr %t154 %t167 = extractvalue { ptr, i64, i64 } %t166, 1 %t168 = icmp uge i64 %t165, %t167 br i1 %t168, label %range8280, label %inrange8281 range8280: call void @finch_panic_index(ptr @.str.5737, i64 5141, i64 %t165, i64 %t167) unreachable inrange8281: %t169 = extractvalue { ptr, i64, i64 } %t166, 0 %t170 = getelementptr inbounds %S.ast.Program, ptr %t169, i64 %t165 %t171 = getelementptr inbounds %S.ast.Program, ptr %t170, i32 0, i32 8 %t172 = load ptr, ptr %a46 %t173 = icmp eq ptr %t172, null br i1 %t173, label %panic8282, label %ok8283 panic8282: call void @finch_panic(ptr @.str.5738, i64 5141, ptr @.str.5739) unreachable ok8283: %t174 = getelementptr inbounds %S.gen.Gen, ptr %t172, i32 0, i32 14 %t175 = load i64, ptr %a147 %t176 = load { ptr, i64, i64 }, ptr %t174 %t177 = extractvalue { ptr, i64, i64 } %t176, 1 %t178 = icmp uge i64 %t175, %t177 br i1 %t178, label %range8284, label %inrange8285 range8284: call void @finch_panic_index(ptr @.str.5740, i64 5141, i64 %t175, i64 %t177) unreachable inrange8285: %t179 = extractvalue { ptr, i64, i64 } %t176, 0 %t180 = getelementptr inbounds %S.gen.FnSig, ptr %t179, i64 %t175 %t181 = getelementptr inbounds %S.gen.FnSig, ptr %t180, i32 0, i32 17 %t182 = load i64, ptr %t181 %t183 = load { ptr, i64, i64 }, ptr %t171 %t184 = extractvalue { ptr, i64, i64 } %t183, 1 %t185 = icmp uge i64 %t182, %t184 br i1 %t185, label %range8286, label %inrange8287 range8286: call void @finch_panic_index(ptr @.str.5741, i64 5141, i64 %t182, i64 %t184) unreachable inrange8287: %t186 = extractvalue { ptr, i64, i64 } %t183, 0 %t187 = getelementptr inbounds %S.ast.Node, ptr %t186, i64 %t182 %t188 = load %S.ast.Node, ptr %t187 call void @finch.gen.fail(ptr %t151, %S.ast.Node %t188, { ptr, i64, i64 } { ptr @.str.5742, i64 82, i64 0 }) br label %endif8273 endif8273: br label %endif8270 else8269: %t189 = load i64, ptr %a147 %t190 = icmp slt i64 %t189, 0 br i1 %t190, label %then8288, label %endif8290 then8288: %t191 = load { ptr, i64, i64 }, ptr %a2 %t192 = extractvalue { ptr, i64, i64 } %t191, 1 %t193 = icmp uge i64 0, %t192 br i1 %t193, label %range8291, label %inrange8292 range8291: call void @finch_panic_index(ptr @.str.5743, i64 5144, i64 0, i64 %t192) unreachable inrange8292: %t194 = extractvalue { ptr, i64, i64 } %t191, 0 %t195 = getelementptr inbounds { ptr, i64, i64 }, ptr %t194, i64 0 %t196 = load { ptr, i64, i64 }, ptr %t195 store { ptr, i64, i64 } %t196, ptr %a198 store { ptr, i64, i64 } { ptr @.str.5744, i64 64, i64 0 }, ptr %a199 call void @finch_str_concat(ptr %a197, ptr %a198, ptr %a199) %t200 = load { ptr, i64, i64 }, ptr %a197 %t201 = extractvalue { ptr, i64, i64 } %t200, 1 %t202 = trunc i64 %t201 to i32 %t203 = extractvalue { ptr, i64, i64 } %t200, 0 %t204 = icmp eq ptr %t203, null %t205 = select i1 %t204, ptr @.str.5745, ptr %t203 %t206 = call i32 (ptr, ...) @printf(ptr @.str.5746, i32 %t202, ptr %t205) %t207 = call i32 (ptr, ...) @printf(ptr @.str.5747) %t208 = trunc i64 1 to i32 %t209 = call i32 @fflush(ptr null) call void @exit(i32 %t208) br label %endif8290 endif8290: br label %endif8270 endif8270: store i64 0, ptr %a210 br label %while.cond8293 while.cond8293: %t211 = load i64, ptr %a210 %t212 = load ptr, ptr %a46 %t213 = icmp eq ptr %t212, null br i1 %t213, label %panic8296, label %ok8297 panic8296: call void @finch_panic(ptr @.str.5748, i64 5149, ptr @.str.5749) unreachable ok8297: %t214 = getelementptr inbounds %S.gen.Gen, ptr %t212, i32 0, i32 14 %t215 = getelementptr inbounds { ptr, i64, i64 }, ptr %t214, i32 0, i32 1 %t216 = load i64, ptr %t215 %t217 = icmp slt i64 %t211, %t216 br i1 %t217, label %while.body8294, label %while.end8295 while.body8294: %t218 = load ptr, ptr %a46 %t219 = load i64, ptr %a210 call void @finch.gen.define(ptr %t218, i64 %t219) %t220 = load i64, ptr %a210 %t221 = add i64 %t220, 1 store i64 %t221, ptr %a210 br label %while.cond8293 while.end8295: %t222 = load ptr, ptr %a46 %t223 = icmp eq ptr %t222, null br i1 %t223, label %panic8298, label %ok8299 panic8298: call void @finch_panic(ptr @.str.5750, i64 5153, ptr @.str.5751) unreachable ok8299: %t224 = getelementptr inbounds %S.gen.Gen, ptr %t222, i32 0, i32 26 %t225 = load i1, ptr %t224 br i1 %t225, label %then8300, label %endif8302 then8300: %t226 = load ptr, ptr %a46 %t227 = icmp eq ptr %t226, null br i1 %t227, label %panic8303, label %ok8304 panic8303: call void @finch_panic(ptr @.str.5752, i64 5154, ptr @.str.5753) unreachable ok8304: %t228 = getelementptr inbounds %S.gen.Gen, ptr %t226, i32 0, i32 0 %t229 = load { ptr, i64, i64 }, ptr %t228 %t230 = extractvalue { ptr, i64, i64 } %t229, 1 %t231 = icmp uge i64 0, %t230 br i1 %t231, label %range8305, label %inrange8306 range8305: call void @finch_panic_index(ptr @.str.5754, i64 5154, i64 0, i64 %t230) unreachable inrange8306: %t232 = extractvalue { ptr, i64, i64 } %t229, 0 %t233 = getelementptr inbounds %S.ast.Program, ptr %t232, i64 0 %t234 = getelementptr inbounds %S.ast.Program, ptr %t233, i32 0, i32 2 %t235 = load { ptr, i64, i64 }, ptr %t234 store { ptr, i64, i64 } %t235, ptr %a236 call void @finch.copy.arr_str(ptr %a237, ptr %a236) %t238 = load { ptr, i64, i64 }, ptr %a237 store { ptr, i64, i64 } %t238, ptr %a239 %t240 = load ptr, ptr %a46 %t241 = load { ptr, i64, i64 }, ptr %a239 call void @finch.gen.indexAll(ptr %t240, { ptr, i64, i64 } %t241) %t242 = load ptr, ptr %a46 %t243 = icmp eq ptr %t242, null br i1 %t243, label %panic8307, label %ok8308 panic8307: call void @finch_panic(ptr @.str.5755, i64 5156, ptr @.str.5756) unreachable ok8308: %t244 = getelementptr inbounds %S.gen.Gen, ptr %t242, i32 0, i32 27 %t245 = getelementptr inbounds { ptr, i64, i64 }, ptr %t244, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.5757, i64 1, i64 0 }, ptr %a246 call void @finch_str_join(ptr %a247, ptr %t244, ptr %a246) %t248 = load { ptr, i64, i64 }, ptr %a247 ret { ptr, i64, i64 } %t248 endif8302: %t249 = load ptr, ptr %a46 %t250 = icmp eq ptr %t249, null br i1 %t250, label %panic8309, label %ok8310 panic8309: call void @finch_panic(ptr @.str.5758, i64 5158, ptr @.str.5759) unreachable ok8310: %t251 = getelementptr inbounds %S.gen.Gen, ptr %t249, i32 0, i32 14 store i64 0, ptr %a252 br label %each.cond8311 each.cond8311: %t253 = getelementptr inbounds { ptr, i64, i64 }, ptr %t251, i32 0, i32 1 %t254 = load i64, ptr %t253 %t255 = load i64, ptr %a252 %t256 = icmp slt i64 %t255, %t254 br i1 %t256, label %each.body8312, label %each.end8314 each.body8312: %t257 = load ptr, ptr %t251 %t258 = getelementptr inbounds %S.gen.FnSig, ptr %t257, i64 %t255 %t259 = load %S.gen.FnSig, ptr %t258 store %S.gen.FnSig %t259, ptr %a260 %t261 = getelementptr inbounds %S.gen.FnSig, ptr %a260, i32 0, i32 5 %t262 = load i1, ptr %t261 br i1 %t262, label %then8315, label %endif8317 then8315: %t263 = load ptr, ptr %a46 %t264 = load %S.gen.FnSig, ptr %a260 %t265 = call { ptr, i64, i64 } @finch.gen.exportWrapper(ptr %t263, %S.gen.FnSig %t264) br label %endif8317 endif8317: br label %each.step8313 each.step8313: %t266 = load i64, ptr %a252 %t267 = add i64 %t266, 1 store i64 %t267, ptr %a252 br label %each.cond8311 each.end8314: %t268 = load i1, ptr %a7 br i1 %t268, label %then8318, label %endif8320 then8318: store { ptr, i64, i64 } { ptr @.str.5760, i64 0, i64 0 }, ptr %a269 %t270 = load ptr, ptr %a46 %t271 = icmp eq ptr %t270, null br i1 %t271, label %panic8321, label %ok8322 panic8321: call void @finch_panic(ptr @.str.5761, i64 5166, ptr @.str.5762) unreachable ok8322: %t272 = getelementptr inbounds %S.gen.Gen, ptr %t270, i32 0, i32 29 %t273 = getelementptr inbounds %S.platform.Target, ptr %t272, i32 0, i32 1 %t274 = load i1, ptr %t273 br i1 %t274, label %then8323, label %endif8325 then8323: store { ptr, i64, i64 } { ptr @.str.5763, i64 10, i64 0 }, ptr %a269 br label %endif8325 endif8325: %t275 = load ptr, ptr %a46 %t276 = icmp eq ptr %t275, null br i1 %t276, label %panic8326, label %ok8327 panic8326: call void @finch_panic(ptr @.str.5764, i64 5169, ptr @.str.5765) unreachable ok8327: %t277 = getelementptr inbounds %S.gen.Gen, ptr %t275, i32 0, i32 3 %t278 = getelementptr inbounds { ptr, i64, i64 }, ptr %t277, i32 0, i32 1 %t279 = load { ptr, i64, i64 }, ptr %a269 store { ptr, i64, i64 } { ptr @.str.5766, i64 6, i64 0 }, ptr %a281 store { ptr, i64, i64 } %t279, ptr %a282 call void @finch_str_concat(ptr %a280, ptr %a281, ptr %a282) %t283 = load { ptr, i64, i64 }, ptr %a280 store { ptr, i64, i64 } %t283, ptr %a285 store { ptr, i64, i64 } { ptr @.str.5767, i64 107, i64 0 }, ptr %a286 call void @finch_str_concat(ptr %a284, ptr %a285, ptr %a286) %t287 = load { ptr, i64, i64 }, ptr %a284 %t288 = load i64, ptr %t278 %t289 = add i64 %t288, 1 call void @finch_arr_reserve(ptr %t277, i64 %t289, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t290 = load ptr, ptr %t277 %t291 = getelementptr inbounds { ptr, i64, i64 }, ptr %t290, i64 %t288 store { ptr, i64, i64 } %t287, ptr %t291 store i64 %t289, ptr %t278 %t292 = load ptr, ptr %a46 %t293 = call { ptr, i64, i64 } @finch.gen.assemble(ptr %t292) ret { ptr, i64, i64 } %t293 endif8320: %t294 = load ptr, ptr %a46 %t295 = icmp eq ptr %t294, null br i1 %t295, label %panic8328, label %ok8329 panic8328: call void @finch_panic(ptr @.str.5768, i64 5173, ptr @.str.5769) unreachable ok8329: %t296 = getelementptr inbounds %S.gen.Gen, ptr %t294, i32 0, i32 14 %t297 = load i64, ptr %a147 %t298 = load { ptr, i64, i64 }, ptr %t296 %t299 = extractvalue { ptr, i64, i64 } %t298, 1 %t300 = icmp uge i64 %t297, %t299 br i1 %t300, label %range8330, label %inrange8331 range8330: call void @finch_panic_index(ptr @.str.5770, i64 5173, i64 %t297, i64 %t299) unreachable inrange8331: %t301 = extractvalue { ptr, i64, i64 } %t298, 0 %t302 = getelementptr inbounds %S.gen.FnSig, ptr %t301, i64 %t297 %t303 = load %S.gen.FnSig, ptr %t302 store %S.gen.FnSig %t303, ptr %a304 call void @finch.copy.S_gen_FnSig(ptr %a305, ptr %a304) %t306 = load %S.gen.FnSig, ptr %a305 store %S.gen.FnSig %t306, ptr %a307 %t308 = load ptr, ptr %a46 %t309 = load %S.gen.FnSig, ptr %a307 %t310 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t308, %S.gen.FnSig %t309) store { ptr, i64, i64 } { ptr @.str.5771, i64 5, i64 0 }, ptr %a312 store { ptr, i64, i64 } %t310, ptr %a313 call void @finch_str_concat(ptr %a311, ptr %a312, ptr %a313) %t314 = load { ptr, i64, i64 }, ptr %a311 store { ptr, i64, i64 } %t314, ptr %a316 store { ptr, i64, i64 } { ptr @.str.5772, i64 1, i64 0 }, ptr %a317 call void @finch_str_concat(ptr %a315, ptr %a316, ptr %a317) %t318 = load { ptr, i64, i64 }, ptr %a315 %t319 = getelementptr inbounds %S.gen.FnSig, ptr %a307, i32 0, i32 11 %t320 = load { ptr, i64, i64 }, ptr %t319 store { ptr, i64, i64 } %t318, ptr %a322 store { ptr, i64, i64 } %t320, ptr %a323 call void @finch_str_concat(ptr %a321, ptr %a322, ptr %a323) %t324 = load { ptr, i64, i64 }, ptr %a321 store { ptr, i64, i64 } %t324, ptr %a326 store { ptr, i64, i64 } { ptr @.str.5773, i64 1, i64 0 }, ptr %a327 call void @finch_str_concat(ptr %a325, ptr %a326, ptr %a327) %t328 = load { ptr, i64, i64 }, ptr %a325 store { ptr, i64, i64 } %t328, ptr %a329 store { ptr, i64, i64 } { ptr @.str.5774, i64 0, i64 0 }, ptr %a330 %t331 = getelementptr inbounds %S.gen.FnSig, ptr %a307, i32 0, i32 13 %t332 = getelementptr inbounds { ptr, i64, i64 }, ptr %t331, i32 0, i32 1 %t333 = load i64, ptr %t332 %t334 = icmp eq i64 %t333, 1 br i1 %t334, label %then8332, label %endif8334 then8332: store { ptr, i64, i64 } { ptr @.str.5775, i64 133, i64 0 }, ptr %a330 %t335 = load { ptr, i64, i64 }, ptr %a329 store { ptr, i64, i64 } %t335, ptr %a337 store { ptr, i64, i64 } { ptr @.str.5776, i64 20, i64 0 }, ptr %a338 call void @finch_str_concat(ptr %a336, ptr %a337, ptr %a338) %t339 = load { ptr, i64, i64 }, ptr %a336 store { ptr, i64, i64 } %t339, ptr %a329 br label %endif8334 endif8334: %t340 = load { ptr, i64, i64 }, ptr %a329 store { ptr, i64, i64 } %t340, ptr %a342 store { ptr, i64, i64 } { ptr @.str.5777, i64 1, i64 0 }, ptr %a343 call void @finch_str_concat(ptr %a341, ptr %a342, ptr %a343) %t344 = load { ptr, i64, i64 }, ptr %a341 store { ptr, i64, i64 } %t344, ptr %a329 store { ptr, i64, i64 } { ptr @.str.5778, i64 12, i64 0 }, ptr %a345 %t346 = getelementptr inbounds %S.gen.FnSig, ptr %a307, i32 0, i32 9 %t347 = load i1, ptr %t346 br i1 %t347, label %then8335, label %else8336 then8335: %t348 = load { ptr, i64, i64 }, ptr %a329 store { ptr, i64, i64 } { ptr @.str.5779, i64 5, i64 0 }, ptr %a350 store { ptr, i64, i64 } %t348, ptr %a351 call void @finch_str_concat(ptr %a349, ptr %a350, ptr %a351) %t352 = load { ptr, i64, i64 }, ptr %a349 store { ptr, i64, i64 } %t352, ptr %a329 %t353 = load { ptr, i64, i64 }, ptr %a330 store { ptr, i64, i64 } %t353, ptr %a355 store { ptr, i64, i64 } { ptr @.str.5780, i64 2, i64 0 }, ptr %a356 call void @finch_str_concat(ptr %a354, ptr %a355, ptr %a356) %t357 = load { ptr, i64, i64 }, ptr %a354 %t358 = load { ptr, i64, i64 }, ptr %a329 store { ptr, i64, i64 } %t357, ptr %a360 store { ptr, i64, i64 } %t358, ptr %a361 call void @finch_str_concat(ptr %a359, ptr %a360, ptr %a361) %t362 = load { ptr, i64, i64 }, ptr %a359 store { ptr, i64, i64 } %t362, ptr %a364 store { ptr, i64, i64 } { ptr @.str.5781, i64 1, i64 0 }, ptr %a365 call void @finch_str_concat(ptr %a363, ptr %a364, ptr %a365) %t366 = load { ptr, i64, i64 }, ptr %a363 store { ptr, i64, i64 } %t366, ptr %a330 store { ptr, i64, i64 } { ptr @.str.5782, i64 0, i64 0 }, ptr %a329 %t367 = load ptr, ptr %a46 %t368 = load %S.gen.FnSig, ptr %a307 %t369 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t367, %S.gen.FnSig %t368) store { ptr, i64, i64 } %t369, ptr %a370 %t371 = load { ptr, i64, i64 }, ptr %a330 store { ptr, i64, i64 } %t371, ptr %a373 store { ptr, i64, i64 } { ptr @.str.5783, i64 21, i64 0 }, ptr %a374 call void @finch_str_concat(ptr %a372, ptr %a373, ptr %a374) %t375 = load { ptr, i64, i64 }, ptr %a372 %t376 = load { ptr, i64, i64 }, ptr %a370 store { ptr, i64, i64 } %t375, ptr %a378 store { ptr, i64, i64 } %t376, ptr %a379 call void @finch_str_concat(ptr %a377, ptr %a378, ptr %a379) %t380 = load { ptr, i64, i64 }, ptr %a377 store { ptr, i64, i64 } %t380, ptr %a382 store { ptr, i64, i64 } { ptr @.str.5784, i64 62, i64 0 }, ptr %a383 call void @finch_str_concat(ptr %a381, ptr %a382, ptr %a383) %t384 = load { ptr, i64, i64 }, ptr %a381 store { ptr, i64, i64 } %t384, ptr %a330 %t385 = load { ptr, i64, i64 }, ptr %a330 store { ptr, i64, i64 } %t385, ptr %a387 store { ptr, i64, i64 } { ptr @.str.5785, i64 20, i64 0 }, ptr %a388 call void @finch_str_concat(ptr %a386, ptr %a387, ptr %a388) %t389 = load { ptr, i64, i64 }, ptr %a386 %t390 = load { ptr, i64, i64 }, ptr %a370 store { ptr, i64, i64 } %t389, ptr %a392 store { ptr, i64, i64 } %t390, ptr %a393 call void @finch_str_concat(ptr %a391, ptr %a392, ptr %a393) %t394 = load { ptr, i64, i64 }, ptr %a391 store { ptr, i64, i64 } %t394, ptr %a396 store { ptr, i64, i64 } { ptr @.str.5786, i64 78, i64 0 }, ptr %a397 call void @finch_str_concat(ptr %a395, ptr %a396, ptr %a397) %t398 = load { ptr, i64, i64 }, ptr %a395 store { ptr, i64, i64 } %t398, ptr %a330 %t399 = load { ptr, i64, i64 }, ptr %a330 store { ptr, i64, i64 } %t399, ptr %a401 store { ptr, i64, i64 } { ptr @.str.5787, i64 62, i64 0 }, ptr %a402 call void @finch_str_concat(ptr %a400, ptr %a401, ptr %a402) %t403 = load { ptr, i64, i64 }, ptr %a400 store { ptr, i64, i64 } %t403, ptr %a330 %t404 = getelementptr inbounds %S.gen.FnSig, ptr %a307, i32 0, i32 12 %t405 = getelementptr inbounds %S.ast.Type, ptr %t404, i32 0, i32 0 %t406 = load { ptr, i64, i64 }, ptr %t405 store { ptr, i64, i64 } %t406, ptr %a407 store { ptr, i64, i64 } { ptr @.str.5788, i64 3, i64 0 }, ptr %a408 %t409 = call i32 @finch_str_eq(ptr %a407, ptr %a408) %t410 = icmp ne i32 %t409, 0 br i1 %t410, label %then8338, label %endif8340 then8338: %t411 = load { ptr, i64, i64 }, ptr %a370 store { ptr, i64, i64 } { ptr @.str.5789, i64 20, i64 0 }, ptr %a413 store { ptr, i64, i64 } %t411, ptr %a414 call void @finch_str_concat(ptr %a412, ptr %a413, ptr %a414) %t415 = load { ptr, i64, i64 }, ptr %a412 store { ptr, i64, i64 } %t415, ptr %a417 store { ptr, i64, i64 } { ptr @.str.5790, i64 53, i64 0 }, ptr %a418 call void @finch_str_concat(ptr %a416, ptr %a417, ptr %a418) %t419 = load { ptr, i64, i64 }, ptr %a416 store { ptr, i64, i64 } %t419, ptr %a345 br label %endif8340 endif8340: br label %endif8337 else8336: %t420 = getelementptr inbounds %S.gen.FnSig, ptr %a307, i32 0, i32 12 %t421 = getelementptr inbounds %S.ast.Type, ptr %t420, i32 0, i32 0 %t422 = load { ptr, i64, i64 }, ptr %t421 store { ptr, i64, i64 } %t422, ptr %a423 store { ptr, i64, i64 } { ptr @.str.5791, i64 3, i64 0 }, ptr %a424 %t425 = call i32 @finch_str_eq(ptr %a423, ptr %a424) %t426 = icmp ne i32 %t425, 0 br i1 %t426, label %then8341, label %endif8343 then8341: %t427 = load { ptr, i64, i64 }, ptr %a329 store { ptr, i64, i64 } { ptr @.str.5792, i64 5, i64 0 }, ptr %a429 store { ptr, i64, i64 } %t427, ptr %a430 call void @finch_str_concat(ptr %a428, ptr %a429, ptr %a430) %t431 = load { ptr, i64, i64 }, ptr %a428 store { ptr, i64, i64 } %t431, ptr %a329 store { ptr, i64, i64 } { ptr @.str.5793, i64 46, i64 0 }, ptr %a345 br label %endif8343 endif8343: br label %endif8337 endif8337: %t432 = load ptr, ptr %a46 %t433 = icmp eq ptr %t432, null br i1 %t433, label %panic8344, label %ok8345 panic8344: call void @finch_panic(ptr @.str.5794, i64 5198, ptr @.str.5795) unreachable ok8345: %t434 = getelementptr inbounds %S.gen.Gen, ptr %t432, i32 0, i32 3 %t435 = getelementptr inbounds { ptr, i64, i64 }, ptr %t434, i32 0, i32 1 %t436 = load { ptr, i64, i64 }, ptr %a330 store { ptr, i64, i64 } { ptr @.str.5796, i64 48, i64 0 }, ptr %a438 store { ptr, i64, i64 } %t436, ptr %a439 call void @finch_str_concat(ptr %a437, ptr %a438, ptr %a439) %t440 = load { ptr, i64, i64 }, ptr %a437 store { ptr, i64, i64 } %t440, ptr %a442 store { ptr, i64, i64 } { ptr @.str.5797, i64 2, i64 0 }, ptr %a443 call void @finch_str_concat(ptr %a441, ptr %a442, ptr %a443) %t444 = load { ptr, i64, i64 }, ptr %a441 %t445 = load { ptr, i64, i64 }, ptr %a329 store { ptr, i64, i64 } %t444, ptr %a447 store { ptr, i64, i64 } %t445, ptr %a448 call void @finch_str_concat(ptr %a446, ptr %a447, ptr %a448) %t449 = load { ptr, i64, i64 }, ptr %a446 store { ptr, i64, i64 } %t449, ptr %a451 store { ptr, i64, i64 } { ptr @.str.5798, i64 1, i64 0 }, ptr %a452 call void @finch_str_concat(ptr %a450, ptr %a451, ptr %a452) %t453 = load { ptr, i64, i64 }, ptr %a450 %t454 = load { ptr, i64, i64 }, ptr %a345 store { ptr, i64, i64 } %t453, ptr %a456 store { ptr, i64, i64 } %t454, ptr %a457 call void @finch_str_concat(ptr %a455, ptr %a456, ptr %a457) %t458 = load { ptr, i64, i64 }, ptr %a455 store { ptr, i64, i64 } %t458, ptr %a460 store { ptr, i64, i64 } { ptr @.str.5799, i64 2, i64 0 }, ptr %a461 call void @finch_str_concat(ptr %a459, ptr %a460, ptr %a461) %t462 = load { ptr, i64, i64 }, ptr %a459 %t463 = load i64, ptr %t435 %t464 = add i64 %t463, 1 call void @finch_arr_reserve(ptr %t434, i64 %t464, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t465 = load ptr, ptr %t434 %t466 = getelementptr inbounds { ptr, i64, i64 }, ptr %t465, i64 %t463 store { ptr, i64, i64 } %t462, ptr %t466 store i64 %t464, ptr %t435 %t467 = load ptr, ptr %a46 %t468 = call { ptr, i64, i64 } @finch.gen.assemble(ptr %t467) ret { ptr, i64, i64 } %t468 } define internal %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 %t4 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t4, ptr %a5 call void @finch_str_copy(ptr %a6, ptr %a5) %t7 = load { ptr, i64, i64 }, ptr %a6 %t8 = insertvalue %S.docs.Doc zeroinitializer, { ptr, i64, i64 } %t7, 0 %t9 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t9, ptr %a10 call void @finch_str_copy(ptr %a11, ptr %a10) %t12 = load { ptr, i64, i64 }, ptr %a11 %t13 = insertvalue %S.docs.Doc %t8, { ptr, i64, i64 } %t12, 1 %t14 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t14, ptr %a15 call void @finch_str_copy(ptr %a16, ptr %a15) %t17 = load { ptr, i64, i64 }, ptr %a16 %t18 = insertvalue %S.docs.Doc %t13, { ptr, i64, i64 } %t17, 2 ret %S.docs.Doc %t18 } define internal { ptr, i64, i64 } @finch.docs.builtins() { entry: %t1 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5800, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.5801, i64 16, i64 0 }, { ptr, i64, i64 } { ptr @.str.5802, i64 78, i64 0 }) %t2 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5803, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.5804, i64 31, i64 0 }, { ptr, i64, i64 } { ptr @.str.5805, i64 77, i64 0 }) %t3 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5806, i64 9, i64 0 }, { ptr, i64, i64 } { ptr @.str.5807, i64 26, i64 0 }, { ptr, i64, i64 } { ptr @.str.5808, i64 121, i64 0 }) %t4 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5809, i64 10, i64 0 }, { ptr, i64, i64 } { ptr @.str.5810, i64 38, i64 0 }, { ptr, i64, i64 } { ptr @.str.5811, i64 83, i64 0 }) %t5 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5812, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.5813, i64 29, i64 0 }, { ptr, i64, i64 } { ptr @.str.5814, i64 29, i64 0 }) %t6 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5815, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.5816, i64 29, i64 0 }, { ptr, i64, i64 } { ptr @.str.5817, i64 73, i64 0 }) %t7 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5818, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.5819, i64 18, i64 0 }, { ptr, i64, i64 } { ptr @.str.5820, i64 98, i64 0 }) %t8 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5821, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.5822, i64 25, i64 0 }, { ptr, i64, i64 } { ptr @.str.5823, i64 66, i64 0 }) %t9 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5824, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.5825, i64 14, i64 0 }, { ptr, i64, i64 } { ptr @.str.5826, i64 48, i64 0 }) %t10 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5827, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.5828, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.5829, i64 77, i64 0 }) %t11 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5830, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.5831, i64 20, i64 0 }, { ptr, i64, i64 } { ptr @.str.5832, i64 66, i64 0 }) %t12 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5833, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.5834, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.5835, i64 73, i64 0 }) %t13 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5836, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.5837, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.5838, i64 61, i64 0 }) %t14 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5839, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.5840, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.5841, i64 130, i64 0 }) %t15 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5842, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.5843, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.5844, i64 75, i64 0 }) %t16 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5845, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.5846, i64 19, i64 0 }, { ptr, i64, i64 } { ptr @.str.5847, i64 29, i64 0 }) %t17 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5848, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.5849, i64 19, i64 0 }, { ptr, i64, i64 } { ptr @.str.5850, i64 26, i64 0 }) %t18 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5851, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.5852, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.5853, i64 88, i64 0 }) %t19 = mul i64 18, ptrtoint (ptr getelementptr (%S.docs.Doc, ptr null, i32 1) to i64) %t20 = call ptr @finch_alloc(i64 %t19) %t21 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 0 store %S.docs.Doc %t1, ptr %t21 %t22 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 1 store %S.docs.Doc %t2, ptr %t22 %t23 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 2 store %S.docs.Doc %t3, ptr %t23 %t24 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 3 store %S.docs.Doc %t4, ptr %t24 %t25 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 4 store %S.docs.Doc %t5, ptr %t25 %t26 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 5 store %S.docs.Doc %t6, ptr %t26 %t27 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 6 store %S.docs.Doc %t7, ptr %t27 %t28 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 7 store %S.docs.Doc %t8, ptr %t28 %t29 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 8 store %S.docs.Doc %t9, ptr %t29 %t30 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 9 store %S.docs.Doc %t10, ptr %t30 %t31 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 10 store %S.docs.Doc %t11, ptr %t31 %t32 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 11 store %S.docs.Doc %t12, ptr %t32 %t33 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 12 store %S.docs.Doc %t13, ptr %t33 %t34 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 13 store %S.docs.Doc %t14, ptr %t34 %t35 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 14 store %S.docs.Doc %t15, ptr %t35 %t36 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 15 store %S.docs.Doc %t16, ptr %t36 %t37 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 16 store %S.docs.Doc %t17, ptr %t37 %t38 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 17 store %S.docs.Doc %t18, ptr %t38 %t39 = insertvalue { ptr, i64, i64 } undef, ptr %t20, 0 %t40 = insertvalue { ptr, i64, i64 } %t39, i64 18, 1 %t41 = insertvalue { ptr, i64, i64 } %t40, i64 18, 2 ret { ptr, i64, i64 } %t41 } define internal { ptr, i64, i64 } @finch.docs.arrayMethods() { entry: %t1 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5854, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.5855, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.5856, i64 23, i64 0 }) %t2 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5857, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.5858, i64 14, i64 0 }, { ptr, i64, i64 } { ptr @.str.5859, i64 40, i64 0 }) %t3 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5860, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.5861, i64 9, i64 0 }, { ptr, i64, i64 } { ptr @.str.5862, i64 18, i64 0 }) %t4 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5863, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.5864, i64 10, i64 0 }, { ptr, i64, i64 } { ptr @.str.5865, i64 43, i64 0 }) %t5 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5866, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.5867, i64 18, i64 0 }, { ptr, i64, i64 } { ptr @.str.5868, i64 38, i64 0 }) %t6 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5869, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.5870, i64 18, i64 0 }, { ptr, i64, i64 } { ptr @.str.5871, i64 37, i64 0 }) %t7 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5872, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.5873, i64 7, i64 0 }, { ptr, i64, i64 } { ptr @.str.5874, i64 19, i64 0 }) %t8 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5875, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.5876, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.5877, i64 46, i64 0 }) %t9 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5878, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.5879, i64 16, i64 0 }, { ptr, i64, i64 } { ptr @.str.5880, i64 22, i64 0 }) %t10 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5881, i64 8, i64 0 }, { ptr, i64, i64 } { ptr @.str.5882, i64 21, i64 0 }, { ptr, i64, i64 } { ptr @.str.5883, i64 18, i64 0 }) %t11 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5884, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.5885, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.5886, i64 37, i64 0 }) %t12 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5887, i64 7, i64 0 }, { ptr, i64, i64 } { ptr @.str.5888, i64 9, i64 0 }, { ptr, i64, i64 } { ptr @.str.5889, i64 18, i64 0 }) %t13 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5890, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.5891, i64 32, i64 0 }, { ptr, i64, i64 } { ptr @.str.5892, i64 45, i64 0 }) %t14 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5893, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.5894, i64 20, i64 0 }, { ptr, i64, i64 } { ptr @.str.5895, i64 47, i64 0 }) %t15 = mul i64 14, ptrtoint (ptr getelementptr (%S.docs.Doc, ptr null, i32 1) to i64) %t16 = call ptr @finch_alloc(i64 %t15) %t17 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 0 store %S.docs.Doc %t1, ptr %t17 %t18 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 1 store %S.docs.Doc %t2, ptr %t18 %t19 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 2 store %S.docs.Doc %t3, ptr %t19 %t20 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 3 store %S.docs.Doc %t4, ptr %t20 %t21 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 4 store %S.docs.Doc %t5, ptr %t21 %t22 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 5 store %S.docs.Doc %t6, ptr %t22 %t23 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 6 store %S.docs.Doc %t7, ptr %t23 %t24 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 7 store %S.docs.Doc %t8, ptr %t24 %t25 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 8 store %S.docs.Doc %t9, ptr %t25 %t26 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 9 store %S.docs.Doc %t10, ptr %t26 %t27 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 10 store %S.docs.Doc %t11, ptr %t27 %t28 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 11 store %S.docs.Doc %t12, ptr %t28 %t29 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 12 store %S.docs.Doc %t13, ptr %t29 %t30 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 13 store %S.docs.Doc %t14, ptr %t30 %t31 = insertvalue { ptr, i64, i64 } undef, ptr %t16, 0 %t32 = insertvalue { ptr, i64, i64 } %t31, i64 14, 1 %t33 = insertvalue { ptr, i64, i64 } %t32, i64 14, 2 ret { ptr, i64, i64 } %t33 } define internal { ptr, i64, i64 } @finch.docs.strMethods() { entry: %t1 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5896, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.5897, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.5898, i64 20, i64 0 }) %t2 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5899, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.5900, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.5901, i64 59, i64 0 }) %t3 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5902, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.5903, i64 30, i64 0 }, { ptr, i64, i64 } { ptr @.str.5904, i64 29, i64 0 }) %t4 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5905, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.5906, i64 18, i64 0 }, { ptr, i64, i64 } { ptr @.str.5907, i64 22, i64 0 }) %t5 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5908, i64 8, i64 0 }, { ptr, i64, i64 } { ptr @.str.5909, i64 23, i64 0 }, { ptr, i64, i64 } { ptr @.str.5910, i64 24, i64 0 }) %t6 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5911, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.5912, i64 26, i64 0 }, { ptr, i64, i64 } { ptr @.str.5913, i64 27, i64 0 }) %t7 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5914, i64 9, i64 0 }, { ptr, i64, i64 } { ptr @.str.5915, i64 24, i64 0 }, { ptr, i64, i64 } { ptr @.str.5916, i64 25, i64 0 }) %t8 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5917, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.5918, i64 23, i64 0 }, { ptr, i64, i64 } { ptr @.str.5919, i64 62, i64 0 }) %t9 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5920, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.5921, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.5922, i64 41, i64 0 }) %t10 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5923, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.5924, i64 14, i64 0 }, { ptr, i64, i64 } { ptr @.str.5925, i64 24, i64 0 }) %t11 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5926, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.5927, i64 14, i64 0 }, { ptr, i64, i64 } { ptr @.str.5928, i64 24, i64 0 }) %t12 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5929, i64 7, i64 0 }, { ptr, i64, i64 } { ptr @.str.5930, i64 32, i64 0 }, { ptr, i64, i64 } { ptr @.str.5931, i64 26, i64 0 }) %t13 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5932, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.5933, i64 20, i64 0 }, { ptr, i64, i64 } { ptr @.str.5934, i64 17, i64 0 }) %t14 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5935, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.5936, i64 15, i64 0 }, { ptr, i64, i64 } { ptr @.str.5937, i64 22, i64 0 }) %t15 = mul i64 14, ptrtoint (ptr getelementptr (%S.docs.Doc, ptr null, i32 1) to i64) %t16 = call ptr @finch_alloc(i64 %t15) %t17 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 0 store %S.docs.Doc %t1, ptr %t17 %t18 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 1 store %S.docs.Doc %t2, ptr %t18 %t19 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 2 store %S.docs.Doc %t3, ptr %t19 %t20 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 3 store %S.docs.Doc %t4, ptr %t20 %t21 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 4 store %S.docs.Doc %t5, ptr %t21 %t22 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 5 store %S.docs.Doc %t6, ptr %t22 %t23 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 6 store %S.docs.Doc %t7, ptr %t23 %t24 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 7 store %S.docs.Doc %t8, ptr %t24 %t25 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 8 store %S.docs.Doc %t9, ptr %t25 %t26 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 9 store %S.docs.Doc %t10, ptr %t26 %t27 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 10 store %S.docs.Doc %t11, ptr %t27 %t28 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 11 store %S.docs.Doc %t12, ptr %t28 %t29 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 12 store %S.docs.Doc %t13, ptr %t29 %t30 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 13 store %S.docs.Doc %t14, ptr %t30 %t31 = insertvalue { ptr, i64, i64 } undef, ptr %t16, 0 %t32 = insertvalue { ptr, i64, i64 } %t31, i64 14, 1 %t33 = insertvalue { ptr, i64, i64 } %t32, i64 14, 2 ret { ptr, i64, i64 } %t33 } define internal { ptr, i64, i64 } @finch.docs.mapMethods() { entry: %t1 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5938, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.5939, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.5940, i64 19, i64 0 }) %t2 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5941, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.5942, i64 18, i64 0 }, { ptr, i64, i64 } { ptr @.str.5943, i64 22, i64 0 }) %t3 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5944, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.5945, i64 26, i64 0 }, { ptr, i64, i64 } { ptr @.str.5946, i64 53, i64 0 }) %t4 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5947, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.5948, i64 21, i64 0 }, { ptr, i64, i64 } { ptr @.str.5949, i64 52, i64 0 }) %t5 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5950, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.5951, i64 7, i64 0 }, { ptr, i64, i64 } { ptr @.str.5952, i64 19, i64 0 }) %t6 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5953, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.5954, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.5955, i64 39, i64 0 }) %t7 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.5956, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.5957, i64 15, i64 0 }, { ptr, i64, i64 } { ptr @.str.5958, i64 47, i64 0 }) %t8 = mul i64 7, ptrtoint (ptr getelementptr (%S.docs.Doc, ptr null, i32 1) to i64) %t9 = call ptr @finch_alloc(i64 %t8) %t10 = getelementptr inbounds %S.docs.Doc, ptr %t9, i64 0 store %S.docs.Doc %t1, ptr %t10 %t11 = getelementptr inbounds %S.docs.Doc, ptr %t9, i64 1 store %S.docs.Doc %t2, ptr %t11 %t12 = getelementptr inbounds %S.docs.Doc, ptr %t9, i64 2 store %S.docs.Doc %t3, ptr %t12 %t13 = getelementptr inbounds %S.docs.Doc, ptr %t9, i64 3 store %S.docs.Doc %t4, ptr %t13 %t14 = getelementptr inbounds %S.docs.Doc, ptr %t9, i64 4 store %S.docs.Doc %t5, ptr %t14 %t15 = getelementptr inbounds %S.docs.Doc, ptr %t9, i64 5 store %S.docs.Doc %t6, ptr %t15 %t16 = getelementptr inbounds %S.docs.Doc, ptr %t9, i64 6 store %S.docs.Doc %t7, ptr %t16 %t17 = insertvalue { ptr, i64, i64 } undef, ptr %t9, 0 %t18 = insertvalue { ptr, i64, i64 } %t17, i64 7, 1 %t19 = insertvalue { ptr, i64, i64 } %t18, i64 7, 2 ret { ptr, i64, i64 } %t19 } define internal { ptr, i64, i64 } @finch.docs.keywords() { entry: %t1 = mul i64 22, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t2 = call ptr @finch_alloc(i64 %t1) %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 0 store { ptr, i64, i64 } { ptr @.str.5959, i64 2, i64 0 }, ptr %t3 %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 1 store { ptr, i64, i64 } { ptr @.str.5960, i64 6, i64 0 }, ptr %t4 %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 2 store { ptr, i64, i64 } { ptr @.str.5961, i64 2, i64 0 }, ptr %t5 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 3 store { ptr, i64, i64 } { ptr @.str.5962, i64 4, i64 0 }, ptr %t6 %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 4 store { ptr, i64, i64 } { ptr @.str.5963, i64 5, i64 0 }, ptr %t7 %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 5 store { ptr, i64, i64 } { ptr @.str.5964, i64 3, i64 0 }, ptr %t8 %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 6 store { ptr, i64, i64 } { ptr @.str.5965, i64 2, i64 0 }, ptr %t9 %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 7 store { ptr, i64, i64 } { ptr @.str.5966, i64 5, i64 0 }, ptr %t10 %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 8 store { ptr, i64, i64 } { ptr @.str.5967, i64 8, i64 0 }, ptr %t11 %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 9 store { ptr, i64, i64 } { ptr @.str.5968, i64 4, i64 0 }, ptr %t12 %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 10 store { ptr, i64, i64 } { ptr @.str.5969, i64 5, i64 0 }, ptr %t13 %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 11 store { ptr, i64, i64 } { ptr @.str.5970, i64 4, i64 0 }, ptr %t14 %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 12 store { ptr, i64, i64 } { ptr @.str.5971, i64 6, i64 0 }, ptr %t15 %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 13 store { ptr, i64, i64 } { ptr @.str.5972, i64 4, i64 0 }, ptr %t16 %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 14 store { ptr, i64, i64 } { ptr @.str.5973, i64 6, i64 0 }, ptr %t17 %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 15 store { ptr, i64, i64 } { ptr @.str.5974, i64 4, i64 0 }, ptr %t18 %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 16 store { ptr, i64, i64 } { ptr @.str.5975, i64 5, i64 0 }, ptr %t19 %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 17 store { ptr, i64, i64 } { ptr @.str.5976, i64 6, i64 0 }, ptr %t20 %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 18 store { ptr, i64, i64 } { ptr @.str.5977, i64 5, i64 0 }, ptr %t21 %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 19 store { ptr, i64, i64 } { ptr @.str.5978, i64 2, i64 0 }, ptr %t22 %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 20 store { ptr, i64, i64 } { ptr @.str.5979, i64 3, i64 0 }, ptr %t23 %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 21 store { ptr, i64, i64 } { ptr @.str.5980, i64 4, i64 0 }, ptr %t24 %t25 = insertvalue { ptr, i64, i64 } undef, ptr %t2, 0 %t26 = insertvalue { ptr, i64, i64 } %t25, i64 22, 1 %t27 = insertvalue { ptr, i64, i64 } %t26, i64 22, 2 ret { ptr, i64, i64 } %t27 } define internal { ptr, i64, i64 } @finch.docs.typeNames() { entry: %t1 = mul i64 17, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t2 = call ptr @finch_alloc(i64 %t1) %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 0 store { ptr, i64, i64 } { ptr @.str.5981, i64 3, i64 0 }, ptr %t3 %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 1 store { ptr, i64, i64 } { ptr @.str.5982, i64 5, i64 0 }, ptr %t4 %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 2 store { ptr, i64, i64 } { ptr @.str.5983, i64 4, i64 0 }, ptr %t5 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 3 store { ptr, i64, i64 } { ptr @.str.5984, i64 4, i64 0 }, ptr %t6 %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 4 store { ptr, i64, i64 } { ptr @.str.5985, i64 3, i64 0 }, ptr %t7 %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 5 store { ptr, i64, i64 } { ptr @.str.5986, i64 3, i64 0 }, ptr %t8 %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 6 store { ptr, i64, i64 } { ptr @.str.5987, i64 3, i64 0 }, ptr %t9 %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 7 store { ptr, i64, i64 } { ptr @.str.5988, i64 2, i64 0 }, ptr %t10 %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 8 store { ptr, i64, i64 } { ptr @.str.5989, i64 3, i64 0 }, ptr %t11 %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 9 store { ptr, i64, i64 } { ptr @.str.5990, i64 3, i64 0 }, ptr %t12 %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 10 store { ptr, i64, i64 } { ptr @.str.5991, i64 3, i64 0 }, ptr %t13 %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 11 store { ptr, i64, i64 } { ptr @.str.5992, i64 2, i64 0 }, ptr %t14 %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 12 store { ptr, i64, i64 } { ptr @.str.5993, i64 3, i64 0 }, ptr %t15 %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 13 store { ptr, i64, i64 } { ptr @.str.5994, i64 3, i64 0 }, ptr %t16 %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 14 store { ptr, i64, i64 } { ptr @.str.5995, i64 3, i64 0 }, ptr %t17 %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 15 store { ptr, i64, i64 } { ptr @.str.5996, i64 3, i64 0 }, ptr %t18 %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 16 store { ptr, i64, i64 } { ptr @.str.5997, i64 3, i64 0 }, ptr %t19 %t20 = insertvalue { ptr, i64, i64 } undef, ptr %t2, 0 %t21 = insertvalue { ptr, i64, i64 } %t20, i64 17, 1 %t22 = insertvalue { ptr, i64, i64 } %t21, i64 17, 2 ret { ptr, i64, i64 } %t22 } define internal %S.docs.Doc @finch.docs.find({ ptr, i64, i64 } %p0, { ptr, i64, i64 } %p1) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca i64, align 16 %a11 = alloca %S.docs.Doc, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store i64 0, ptr %a3 br label %each.cond8346 each.cond8346: %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t5 = load i64, ptr %t4 %t6 = load i64, ptr %a3 %t7 = icmp slt i64 %t6, %t5 br i1 %t7, label %each.body8347, label %each.end8349 each.body8347: %t8 = load ptr, ptr %a1 %t9 = getelementptr inbounds %S.docs.Doc, ptr %t8, i64 %t6 %t10 = load %S.docs.Doc, ptr %t9 store %S.docs.Doc %t10, ptr %a11 %t12 = getelementptr inbounds %S.docs.Doc, ptr %a11, i32 0, i32 0 %t13 = load { ptr, i64, i64 }, ptr %t12 %t14 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t13, ptr %a15 store { ptr, i64, i64 } %t14, ptr %a16 %t17 = call i32 @finch_str_eq(ptr %a15, ptr %a16) %t18 = icmp ne i32 %t17, 0 br i1 %t18, label %then8350, label %endif8352 then8350: %t19 = load %S.docs.Doc, ptr %a11 ret %S.docs.Doc %t19 endif8352: br label %each.step8348 each.step8348: %t20 = load i64, ptr %a3 %t21 = add i64 %t20, 1 store i64 %t21, ptr %a3 br label %each.cond8346 each.end8349: ret %S.docs.Doc zeroinitializer } define internal { ptr, i64, i64 } @finch.docs.hover(%S.docs.Doc %p0) { entry: %a1 = alloca %S.docs.Doc, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 store %S.docs.Doc %p0, ptr %a1 %t2 = getelementptr inbounds %S.docs.Doc, ptr %a1, i32 0, i32 1 %t3 = load { ptr, i64, i64 }, ptr %t2 store { ptr, i64, i64 } { ptr @.str.5998, i64 9, i64 0 }, ptr %a5 store { ptr, i64, i64 } %t3, ptr %a6 call void @finch_str_concat(ptr %a4, ptr %a5, ptr %a6) %t7 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t7, ptr %a9 store { ptr, i64, i64 } { ptr @.str.5999, i64 5, i64 0 }, ptr %a10 call void @finch_str_concat(ptr %a8, ptr %a9, ptr %a10) %t11 = load { ptr, i64, i64 }, ptr %a8 %t12 = getelementptr inbounds %S.docs.Doc, ptr %a1, i32 0, i32 2 %t13 = load { ptr, i64, i64 }, ptr %t12 store { ptr, i64, i64 } %t11, ptr %a15 store { ptr, i64, i64 } %t13, ptr %a16 call void @finch_str_concat(ptr %a14, ptr %a15, ptr %a16) %t17 = load { ptr, i64, i64 }, ptr %a14 ret { ptr, i64, i64 } %t17 } define internal { ptr, i64, i64 } @finch.cimport.text(%S.C.CXString %p0) { entry: %a1 = alloca %S.C.CXString, align 16 %a3 = alloca [32 x i8], align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca [32 x i8], align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 store %S.C.CXString %p0, ptr %a1 %t2 = load %S.C.CXString, ptr %a1 store %S.C.CXString %t2, ptr %a3 %t4 = getelementptr inbounds i8, ptr %a3, i64 0 %t5 = load i64, ptr %t4 %t6 = getelementptr inbounds i8, ptr %a3, i64 8 %t7 = load i64, ptr %t6 %t8 = call ptr @clang_getCString(i64 %t5, i64 %t7) store { ptr, i64, i64 } zeroinitializer, ptr %a9 call void @finch_str_from_c(ptr %a9, ptr %t8) %t10 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t10, ptr %a11 call void @finch_str_copy(ptr %a12, ptr %a11) %t13 = load { ptr, i64, i64 }, ptr %a12 store { ptr, i64, i64 } %t13, ptr %a14 %t15 = load %S.C.CXString, ptr %a1 store %S.C.CXString %t15, ptr %a16 %t17 = getelementptr inbounds i8, ptr %a16, i64 0 %t18 = load i64, ptr %t17 %t19 = getelementptr inbounds i8, ptr %a16, i64 8 %t20 = load i64, ptr %t19 call void @clang_disposeString(i64 %t18, i64 %t20) %t21 = load { ptr, i64, i64 }, ptr %a14 store { ptr, i64, i64 } %t21, ptr %a22 call void @finch_str_copy(ptr %a23, ptr %a22) %t24 = load { ptr, i64, i64 }, ptr %a23 ret { ptr, i64, i64 } %t24 } define internal %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %p0) { entry: %a1 = alloca %S.ast.Type, align 16 %a3 = alloca %S.ast.Type, align 16 %a4 = alloca %S.ast.Type, align 16 store %S.ast.Type %p0, ptr %a1 %t2 = load %S.ast.Type, ptr %a1 store %S.ast.Type %t2, ptr %a3 call void @finch.copy.S_ast_Type(ptr %a4, ptr %a3) %t5 = load %S.ast.Type, ptr %a4 %t6 = insertvalue %S.cimport.Mapped zeroinitializer, %S.ast.Type %t5, 0 %t7 = insertvalue %S.cimport.Mapped %t6, i1 true, 2 ret %S.cimport.Mapped %t7 } define internal %S.cimport.Mapped @finch.cimport.no({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t2, ptr %a3 call void @finch_str_copy(ptr %a4, ptr %a3) %t5 = load { ptr, i64, i64 }, ptr %a4 %t6 = insertvalue %S.cimport.Mapped zeroinitializer, { ptr, i64, i64 } %t5, 1 %t7 = insertvalue %S.cimport.Mapped %t6, i1 false, 2 ret %S.cimport.Mapped %t7 } define internal %S.ast.Type @finch.cimport.fixed(%S.ast.Type %p0, i64 %p1) { entry: %a1 = alloca %S.ast.Type, align 16 %a2 = alloca i64, align 16 %a6 = alloca %S.ast.Type, align 16 %a10 = alloca %S.ast.Type, align 16 %a11 = alloca %S.ast.Type, align 16 %a18 = alloca %S.ast.Type, align 16 %a19 = alloca %S.ast.Type, align 16 store %S.ast.Type %p0, ptr %a1 store i64 %p1, ptr %a2 %t3 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.6000, i64 5, i64 0 }, 0 %t4 = load i64, ptr %a2 %t5 = insertvalue %S.ast.Type %t3, i64 %t4, 4 store %S.ast.Type %t5, ptr %a6 %t7 = getelementptr inbounds %S.ast.Type, ptr %a6, i32 0, i32 1 %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t7, i32 0, i32 1 %t9 = load %S.ast.Type, ptr %a1 store %S.ast.Type %t9, ptr %a10 call void @finch.copy.S_ast_Type(ptr %a11, ptr %a10) %t12 = load %S.ast.Type, ptr %a11 %t13 = load i64, ptr %t8 %t14 = add i64 %t13, 1 call void @finch_arr_reserve(ptr %t7, i64 %t14, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) %t15 = load ptr, ptr %t7 %t16 = getelementptr inbounds %S.ast.Type, ptr %t15, i64 %t13 store %S.ast.Type %t12, ptr %t16 store i64 %t14, ptr %t8 %t17 = load %S.ast.Type, ptr %a6 store %S.ast.Type %t17, ptr %a18 call void @finch.copy.S_ast_Type(ptr %a19, ptr %a18) %t20 = load %S.ast.Type, ptr %a19 ret %S.ast.Type %t20 } define internal { ptr, i64, i64 } @finch.cimport.systemIncludeArgs({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca i1, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca i64, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca { ptr, i64, i64 }, align 16 %a110 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 %a113 = alloca { ptr, i64, i64 }, align 16 %a114 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca { ptr, i64, i64 }, align 16 %a117 = alloca { ptr, i64, i64 }, align 16 %a120 = alloca { ptr, i64, i64 }, align 16 %a121 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 store { ptr, i64, i64 } zeroinitializer, ptr %a2 store { ptr, i64, i64 } { ptr @.str.6001, i64 22, i64 0 }, ptr %a3 %t4 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t4, ptr %a6 store { ptr, i64, i64 } { ptr @.str.6002, i64 26, i64 0 }, ptr %a7 call void @finch_str_concat(ptr %a5, ptr %a6, ptr %a7) %t8 = load { ptr, i64, i64 }, ptr %a5 %t9 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t8, ptr %a11 store { ptr, i64, i64 } %t9, ptr %a12 call void @finch_str_concat(ptr %a10, ptr %a11, ptr %a12) %t13 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t13, ptr %a15 store { ptr, i64, i64 } { ptr @.str.6003, i64 13, i64 0 }, ptr %a16 call void @finch_str_concat(ptr %a14, ptr %a15, ptr %a16) %t17 = load { ptr, i64, i64 }, ptr %a14 store { ptr, i64, i64 } %t17, ptr %a19 call void @finch_str_copy(ptr %a18, ptr %a19) %t20 = call i64 @finch_shell(ptr %a18) %t21 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t21, ptr %a22 %t23 = call i32 @finch_file_exists(ptr %a22) %t24 = icmp ne i32 %t23, 0 %t25 = xor i1 %t24, true br i1 %t25, label %then8353, label %endif8355 then8353: %t26 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t26, ptr %a27 call void @finch.copy.arr_str(ptr %a28, ptr %a27) %t29 = load { ptr, i64, i64 }, ptr %a28 ret { ptr, i64, i64 } %t29 endif8355: store i1 false, ptr %a30 %t31 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t31, ptr %a32 call void @finch_read_file(ptr %a33, ptr %a32, ptr @.str.6004, i64 110) %t34 = load { ptr, i64, i64 }, ptr %a33 store { ptr, i64, i64 } %t34, ptr %a35 store { ptr, i64, i64 } { ptr @.str.6006, i64 1, i64 0 }, ptr %a37 call void @finch_str_split(ptr %a38, ptr %a35, ptr %a37) %t39 = load { ptr, i64, i64 }, ptr %a38 store { ptr, i64, i64 } %t39, ptr %a40 store i64 0, ptr %a41 br label %each.cond8356 each.cond8356: %t42 = getelementptr inbounds { ptr, i64, i64 }, ptr %a40, i32 0, i32 1 %t43 = load i64, ptr %t42 %t44 = load i64, ptr %a41 %t45 = icmp slt i64 %t44, %t43 br i1 %t45, label %each.body8357, label %each.end8359 each.body8357: %t46 = load ptr, ptr %a40 %t47 = getelementptr inbounds { ptr, i64, i64 }, ptr %t46, i64 %t44 %t48 = load { ptr, i64, i64 }, ptr %t47 store { ptr, i64, i64 } %t48, ptr %a49 %t50 = load { ptr, i64, i64 }, ptr %a49 store { ptr, i64, i64 } %t50, ptr %a51 call void @finch_str_trim(ptr %a52, ptr %a51) %t53 = load { ptr, i64, i64 }, ptr %a52 store { ptr, i64, i64 } %t53, ptr %a54 %t55 = load { ptr, i64, i64 }, ptr %a54 store { ptr, i64, i64 } %t55, ptr %a56 store { ptr, i64, i64 } { ptr @.str.6009, i64 34, i64 0 }, ptr %a58 %t59 = call i32 @finch_str_starts(ptr %a56, ptr %a58) %t60 = icmp ne i32 %t59, 0 br i1 %t60, label %then8360, label %endif8362 then8360: store i1 true, ptr %a30 br label %each.step8358 endif8362: %t61 = load { ptr, i64, i64 }, ptr %a54 store { ptr, i64, i64 } %t61, ptr %a62 store { ptr, i64, i64 } { ptr @.str.6011, i64 19, i64 0 }, ptr %a64 %t65 = call i32 @finch_str_starts(ptr %a62, ptr %a64) %t66 = icmp ne i32 %t65, 0 br i1 %t66, label %then8363, label %endif8365 then8363: br label %each.end8359 endif8365: %t67 = load i1, ptr %a30 %t68 = xor i1 %t67, true br label %logic.from8366 logic.from8366: br i1 %t68, label %logic.end8368, label %logic.rhs8367 logic.rhs8367: %t69 = getelementptr inbounds { ptr, i64, i64 }, ptr %a54, i32 0, i32 1 %t70 = load i64, ptr %t69 %t71 = icmp eq i64 %t70, 0 br label %logic.rend8369 logic.rend8369: br label %logic.end8368 logic.end8368: %t72 = phi i1 [ true, %logic.from8366 ], [ %t71, %logic.rend8369 ] br i1 %t72, label %then8370, label %endif8372 then8370: br label %each.step8358 endif8372: %t73 = load { ptr, i64, i64 }, ptr %a54 store { ptr, i64, i64 } %t73, ptr %a74 store { ptr, i64, i64 } { ptr @.str.6013, i64 22, i64 0 }, ptr %a76 %t77 = call i32 @finch_str_ends(ptr %a74, ptr %a76) %t78 = icmp ne i32 %t77, 0 br i1 %t78, label %then8373, label %else8374 then8373: %t79 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t80 = load { ptr, i64, i64 }, ptr %a54 store { ptr, i64, i64 } %t80, ptr %a81 %t83 = getelementptr inbounds { ptr, i64, i64 }, ptr %a54, i32 0, i32 1 %t84 = load i64, ptr %t83 %t85 = sub i64 %t84, 22 call void @finch_str_sub(ptr %a82, ptr %a81, i64 0, i64 %t85, ptr @.str.6015, i64 124) %t86 = load { ptr, i64, i64 }, ptr %a82 store { ptr, i64, i64 } { ptr @.str.6014, i64 11, i64 0 }, ptr %a88 store { ptr, i64, i64 } %t86, ptr %a89 call void @finch_str_concat(ptr %a87, ptr %a88, ptr %a89) %t90 = load { ptr, i64, i64 }, ptr %a87 %t91 = load i64, ptr %t79 %t92 = add i64 %t91, 1 call void @finch_arr_reserve(ptr %a2, i64 %t92, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t93 = load ptr, ptr %a2 %t94 = getelementptr inbounds { ptr, i64, i64 }, ptr %t93, i64 %t91 store { ptr, i64, i64 } %t90, ptr %t94 store i64 %t92, ptr %t79 br label %endif8375 else8374: %t95 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t96 = load { ptr, i64, i64 }, ptr %a54 store { ptr, i64, i64 } { ptr @.str.6016, i64 8, i64 0 }, ptr %a98 store { ptr, i64, i64 } %t96, ptr %a99 call void @finch_str_concat(ptr %a97, ptr %a98, ptr %a99) %t100 = load { ptr, i64, i64 }, ptr %a97 %t101 = load i64, ptr %t95 %t102 = add i64 %t101, 1 call void @finch_arr_reserve(ptr %a2, i64 %t102, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t103 = load ptr, ptr %a2 %t104 = getelementptr inbounds { ptr, i64, i64 }, ptr %t103, i64 %t101 store { ptr, i64, i64 } %t100, ptr %t104 store i64 %t102, ptr %t95 br label %endif8375 endif8375: br label %each.step8358 each.step8358: %t105 = load i64, ptr %a41 %t106 = add i64 %t105, 1 store i64 %t106, ptr %a41 br label %each.cond8356 each.end8359: %t107 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } { ptr @.str.6017, i64 7, i64 0 }, ptr %a109 store { ptr, i64, i64 } %t107, ptr %a110 call void @finch_str_concat(ptr %a108, ptr %a109, ptr %a110) %t111 = load { ptr, i64, i64 }, ptr %a108 store { ptr, i64, i64 } %t111, ptr %a113 store { ptr, i64, i64 } { ptr @.str.6018, i64 1, i64 0 }, ptr %a114 call void @finch_str_concat(ptr %a112, ptr %a113, ptr %a114) %t115 = load { ptr, i64, i64 }, ptr %a112 store { ptr, i64, i64 } %t115, ptr %a117 call void @finch_str_copy(ptr %a116, ptr %a117) %t118 = call i64 @finch_shell(ptr %a116) %t119 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t119, ptr %a120 call void @finch.copy.arr_str(ptr %a121, ptr %a120) %t122 = load { ptr, i64, i64 }, ptr %a121 ret { ptr, i64, i64 } %t122 } define internal { ptr, i64, i64 } @finch.cimport.recordName(ptr %p0, %S.C.CXType %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.C.CXType, align 16 %a3 = alloca %S.C.CXCursor, align 16 %a5 = alloca %S.C.CXType, align 16 %a7 = alloca %S.C.CXCursor, align 16 %a9 = alloca %S.C.CXCursor, align 16 %a11 = alloca [32 x i8], align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca %S.C.CXCursor, align 16 %a42 = alloca [32 x i8], align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca i32, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.C.CXType %p1, ptr %a2 %t4 = load %S.C.CXType, ptr %a2 store %S.C.CXType %t4, ptr %a5 call void @clang_getTypeDeclaration(ptr sret(%S.C.CXCursor) align 16 %a3, ptr byval(%S.C.CXType) align 8 %a5) %t6 = load %S.C.CXCursor, ptr %a3 store %S.C.CXCursor %t6, ptr %a7 %t8 = load %S.C.CXCursor, ptr %a7 store %S.C.CXCursor %t8, ptr %a9 %t10 = call { i64, i64 } @clang_getCursorUSR(ptr byval(%S.C.CXCursor) align 8 %a9) store { i64, i64 } %t10, ptr %a11 %t12 = load %S.C.CXString, ptr %a11 %t13 = call { ptr, i64, i64 } @finch.cimport.text(%S.C.CXString %t12) store { ptr, i64, i64 } %t13, ptr %a14 %t15 = load ptr, ptr %a1 %t16 = icmp eq ptr %t15, null br i1 %t16, label %panic8376, label %ok8377 panic8376: call void @finch_panic(ptr @.str.6019, i64 139, ptr @.str.6020) unreachable ok8377: %t17 = getelementptr inbounds %S.cimport.Importer, ptr %t15, i32 0, i32 3 %t18 = load { ptr, i64, i64 }, ptr %a14 store { ptr, i64, i64 } %t18, ptr %a19 %t20 = call i64 @finch_map_find(ptr %t17, ptr %a19, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t21 = icmp sge i64 %t20, 0 br i1 %t21, label %then8378, label %endif8380 then8378: %t22 = load ptr, ptr %a1 %t23 = icmp eq ptr %t22, null br i1 %t23, label %panic8381, label %ok8382 panic8381: call void @finch_panic(ptr @.str.6021, i64 140, ptr @.str.6022) unreachable ok8382: %t24 = getelementptr inbounds %S.cimport.Importer, ptr %t22, i32 0, i32 3 %t25 = load { ptr, i64, i64 }, ptr %a14 store { ptr, i64, i64 } %t25, ptr %a26 %t27 = call i64 @finch_map_find(ptr %t24, ptr %a26, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t28 = icmp slt i64 %t27, 0 br i1 %t28, label %map.missing8383, label %map.found8384 map.missing8383: store { ptr, i64, i64 } zeroinitializer, ptr %a29 store { ptr, i64, i64 } %t25, ptr %a30 call void @finch_buf_str(ptr %a29, ptr %a30, i32 1) call void @finch_map_missing(ptr @.str.6023, i64 140, ptr %a29) unreachable map.found8384: %t31 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t24, i32 0, i32 0 %t32 = load ptr, ptr %t31 %t33 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t32, i64 %t27 %t34 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t33, i32 0, i32 2 %t35 = load { ptr, i64, i64 }, ptr %t34 store { ptr, i64, i64 } %t35, ptr %a36 call void @finch_str_copy(ptr %a37, ptr %a36) %t38 = load { ptr, i64, i64 }, ptr %a37 ret { ptr, i64, i64 } %t38 endif8380: %t39 = load %S.C.CXCursor, ptr %a7 store %S.C.CXCursor %t39, ptr %a40 %t41 = call { i64, i64 } @clang_getCursorSpelling(ptr byval(%S.C.CXCursor) align 8 %a40) store { i64, i64 } %t41, ptr %a42 %t43 = load %S.C.CXString, ptr %a42 %t44 = call { ptr, i64, i64 } @finch.cimport.text(%S.C.CXString %t43) store { ptr, i64, i64 } %t44, ptr %a45 %t46 = getelementptr inbounds { ptr, i64, i64 }, ptr %a45, i32 0, i32 1 %t47 = load i64, ptr %t46 %t48 = icmp eq i64 %t47, 0 br label %logic.from8385 logic.from8385: br i1 %t48, label %logic.end8387, label %logic.rhs8386 logic.rhs8386: %t49 = load { ptr, i64, i64 }, ptr %a45 store { ptr, i64, i64 } %t49, ptr %a50 store { ptr, i64, i64 } { ptr @.str.6025, i64 1, i64 0 }, ptr %a52 %t53 = call i64 @finch_str_find(ptr %a50, ptr %a52) %t54 = icmp sge i64 %t53, 0 br label %logic.rend8388 logic.rend8388: br label %logic.end8387 logic.end8387: %t55 = phi i1 [ true, %logic.from8385 ], [ %t54, %logic.rend8388 ] br i1 %t55, label %then8389, label %endif8391 then8389: %t56 = load ptr, ptr %a1 %t57 = icmp eq ptr %t56, null br i1 %t57, label %panic8392, label %ok8393 panic8392: call void @finch_panic(ptr @.str.6026, i64 144, ptr @.str.6027) unreachable ok8393: %t58 = getelementptr inbounds %S.cimport.Importer, ptr %t56, i32 0, i32 5 %t59 = load i64, ptr %t58 %t60 = add i64 %t59, 1 store i64 %t60, ptr %t58 %t61 = load ptr, ptr %a1 %t62 = icmp eq ptr %t61, null br i1 %t62, label %panic8394, label %ok8395 panic8394: call void @finch_panic(ptr @.str.6029, i64 145, ptr @.str.6030) unreachable ok8395: %t63 = getelementptr inbounds %S.cimport.Importer, ptr %t61, i32 0, i32 5 %t64 = load i64, ptr %t63 call void @finch_str_from_int(ptr %a65, i64 %t64) %t66 = load { ptr, i64, i64 }, ptr %a65 store { ptr, i64, i64 } { ptr @.str.6028, i64 12, i64 0 }, ptr %a68 store { ptr, i64, i64 } %t66, ptr %a69 call void @finch_str_concat(ptr %a67, ptr %a68, ptr %a69) %t70 = load { ptr, i64, i64 }, ptr %a67 store { ptr, i64, i64 } %t70, ptr %a45 br label %endif8391 endif8391: %t71 = load { ptr, i64, i64 }, ptr %a45 %t72 = load ptr, ptr %a1 %t73 = icmp eq ptr %t72, null br i1 %t73, label %panic8396, label %ok8397 panic8396: call void @finch_panic(ptr @.str.6031, i64 147, ptr @.str.6032) unreachable ok8397: %t74 = getelementptr inbounds %S.cimport.Importer, ptr %t72, i32 0, i32 3 %t75 = load { ptr, i64, i64 }, ptr %a14 store { ptr, i64, i64 } %t75, ptr %a76 store i32 0, ptr %a77 %t78 = call i64 @finch_map_slot(ptr %t74, ptr %a76, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a77) %t79 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t74, i32 0, i32 0 %t80 = load ptr, ptr %t79 %t81 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t80, i64 %t78 %t82 = load i32, ptr %a77 %t83 = icmp ne i32 %t82, 0 br i1 %t83, label %map.new8398, label %map.have8399 map.new8398: %t84 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t81, i32 0, i32 1 call void @finch_str_copy(ptr %t84, ptr %a76) %t85 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t81, i32 0, i32 2 store { ptr, i64, i64 } zeroinitializer, ptr %t85 br label %map.have8399 map.have8399: %t86 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t81, i32 0, i32 2 store { ptr, i64, i64 } %t71, ptr %a87 call void @finch_str_copy(ptr %a88, ptr %a87) %t89 = load { ptr, i64, i64 }, ptr %a88 store { ptr, i64, i64 } %t89, ptr %t86 %t90 = load { ptr, i64, i64 }, ptr %a45 store { ptr, i64, i64 } %t90, ptr %a91 call void @finch_str_copy(ptr %a92, ptr %a91) %t93 = load { ptr, i64, i64 }, ptr %a92 ret { ptr, i64, i64 } %t93 } define internal i32 @finch.c.cimport.visitField(ptr byval(%S.C.CXCursor) align 8 %c0, ptr %c1) { entry: %t1 = load %S.C.CXCursor, ptr %c0 %t2 = call i32 @finch.cimport.visitField(%S.C.CXCursor %t1, ptr %c1) ret i32 %t2 } define internal { ptr, i64, i64 } @finch.cimport.defineRecord(ptr %p0, %S.C.CXType %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.C.CXType, align 16 %a3 = alloca %S.C.CXType, align 16 %a5 = alloca %S.C.CXType, align 16 %a7 = alloca %S.C.CXType, align 16 %a8 = alloca %S.C.CXCursor, align 16 %a10 = alloca %S.C.CXType, align 16 %a12 = alloca %S.C.CXCursor, align 16 %a14 = alloca %S.C.CXCursor, align 16 %a16 = alloca [32 x i8], align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca %S.C.CXType, align 16 %a47 = alloca i64, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca i32, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca %S.C.CXType, align 16 %a76 = alloca %S.cimport.CStruct, align 16 %a78 = alloca %S.C.CXCursor, align 16 %a85 = alloca %S.cimport.FieldCtx, align 16 %a87 = alloca %S.C.CXType, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca i32, align 16 %a113 = alloca %S.cimport.CStruct, align 16 %a114 = alloca %S.cimport.CStruct, align 16 %a122 = alloca { ptr, i64, i64 }, align 16 %a123 = alloca { ptr, i64, i64 }, align 16 %a130 = alloca { ptr, i64, i64 }, align 16 %a131 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.C.CXType %p1, ptr %a2 %t4 = load %S.C.CXType, ptr %a2 store %S.C.CXType %t4, ptr %a5 call void @clang_getCanonicalType(ptr sret(%S.C.CXType) align 16 %a3, ptr byval(%S.C.CXType) align 8 %a5) %t6 = load %S.C.CXType, ptr %a3 store %S.C.CXType %t6, ptr %a7 %t9 = load %S.C.CXType, ptr %a7 store %S.C.CXType %t9, ptr %a10 call void @clang_getTypeDeclaration(ptr sret(%S.C.CXCursor) align 16 %a8, ptr byval(%S.C.CXType) align 8 %a10) %t11 = load %S.C.CXCursor, ptr %a8 store %S.C.CXCursor %t11, ptr %a12 %t13 = load %S.C.CXCursor, ptr %a12 store %S.C.CXCursor %t13, ptr %a14 %t15 = call { i64, i64 } @clang_getCursorUSR(ptr byval(%S.C.CXCursor) align 8 %a14) store { i64, i64 } %t15, ptr %a16 %t17 = load %S.C.CXString, ptr %a16 %t18 = call { ptr, i64, i64 } @finch.cimport.text(%S.C.CXString %t17) store { ptr, i64, i64 } %t18, ptr %a19 %t20 = load ptr, ptr %a1 %t21 = load %S.C.CXType, ptr %a7 %t22 = call { ptr, i64, i64 } @finch.cimport.recordName(ptr %t20, %S.C.CXType %t21) store { ptr, i64, i64 } %t22, ptr %a23 %t24 = load ptr, ptr %a1 %t25 = icmp eq ptr %t24, null br i1 %t25, label %panic8400, label %ok8401 panic8400: call void @finch_panic(ptr @.str.6033, i64 157, ptr @.str.6034) unreachable ok8401: %t26 = getelementptr inbounds %S.cimport.Importer, ptr %t24, i32 0, i32 0 %t27 = getelementptr inbounds %S.cimport.CImports, ptr %t26, i32 0, i32 3 %t28 = load { ptr, i64, i64 }, ptr %a23 store { ptr, i64, i64 } %t28, ptr %a29 %t30 = call i64 @finch_map_find(ptr %t27, ptr %a29, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t31 = icmp sge i64 %t30, 0 br label %logic.from8402 logic.from8402: br i1 %t31, label %logic.end8404, label %logic.rhs8403 logic.rhs8403: %t32 = load ptr, ptr %a1 %t33 = icmp eq ptr %t32, null br i1 %t33, label %panic8405, label %ok8406 panic8405: call void @finch_panic(ptr @.str.6035, i64 157, ptr @.str.6036) unreachable ok8406: %t34 = getelementptr inbounds %S.cimport.Importer, ptr %t32, i32 0, i32 4 %t35 = load { ptr, i64, i64 }, ptr %a19 store { ptr, i64, i64 } %t35, ptr %a36 %t37 = call i64 @finch_map_find(ptr %t34, ptr %a36, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i1 }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t38 = icmp sge i64 %t37, 0 br label %logic.rend8407 logic.rend8407: br label %logic.end8404 logic.end8404: %t39 = phi i1 [ true, %logic.from8402 ], [ %t38, %logic.rend8407 ] br i1 %t39, label %then8408, label %endif8410 then8408: %t40 = load { ptr, i64, i64 }, ptr %a23 store { ptr, i64, i64 } %t40, ptr %a41 call void @finch_str_copy(ptr %a42, ptr %a41) %t43 = load { ptr, i64, i64 }, ptr %a42 ret { ptr, i64, i64 } %t43 endif8410: %t44 = load %S.C.CXType, ptr %a7 store %S.C.CXType %t44, ptr %a45 %t46 = call i64 @clang_Type_getSizeOf(ptr byval(%S.C.CXType) align 8 %a45) store i64 %t46, ptr %a47 %t48 = load i64, ptr %a47 %t49 = icmp slt i64 %t48, 0 br i1 %t49, label %then8411, label %endif8413 then8411: ret { ptr, i64, i64 } { ptr @.str.6037, i64 0, i64 0 } endif8413: %t50 = load ptr, ptr %a1 %t51 = icmp eq ptr %t50, null br i1 %t51, label %panic8414, label %ok8415 panic8414: call void @finch_panic(ptr @.str.6038, i64 164, ptr @.str.6039) unreachable ok8415: %t52 = getelementptr inbounds %S.cimport.Importer, ptr %t50, i32 0, i32 4 %t53 = load { ptr, i64, i64 }, ptr %a19 store { ptr, i64, i64 } %t53, ptr %a54 store i32 0, ptr %a55 %t56 = call i64 @finch_map_slot(ptr %t52, ptr %a54, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i1 }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a55) %t57 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t52, i32 0, i32 0 %t58 = load ptr, ptr %t57 %t59 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t58, i64 %t56 %t60 = load i32, ptr %a55 %t61 = icmp ne i32 %t60, 0 br i1 %t61, label %map.new8416, label %map.have8417 map.new8416: %t62 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t59, i32 0, i32 1 call void @finch_str_copy(ptr %t62, ptr %a54) %t63 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t59, i32 0, i32 2 store i1 false, ptr %t63 br label %map.have8417 map.have8417: %t64 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t59, i32 0, i32 2 store i1 true, ptr %t64 %t65 = load { ptr, i64, i64 }, ptr %a23 store { ptr, i64, i64 } %t65, ptr %a66 call void @finch_str_copy(ptr %a67, ptr %a66) %t68 = load { ptr, i64, i64 }, ptr %a67 %t69 = insertvalue %S.cimport.CStruct zeroinitializer, { ptr, i64, i64 } %t68, 0 %t70 = load i64, ptr %a47 %t71 = insertvalue %S.cimport.CStruct %t69, i64 %t70, 2 %t72 = load %S.C.CXType, ptr %a7 store %S.C.CXType %t72, ptr %a73 %t74 = call i64 @clang_Type_getAlignOf(ptr byval(%S.C.CXType) align 8 %a73) %t75 = insertvalue %S.cimport.CStruct %t71, i64 %t74, 3 store %S.cimport.CStruct %t75, ptr %a76 %t77 = load %S.C.CXCursor, ptr %a12 store %S.C.CXCursor %t77, ptr %a78 %t79 = call i32 @clang_getCursorKind(ptr byval(%S.C.CXCursor) align 8 %a78) %t80 = icmp eq i32 %t79, 3 br i1 %t80, label %then8418, label %endif8420 then8418: %t81 = getelementptr inbounds %S.cimport.CStruct, ptr %a76, i32 0, i32 4 store { ptr, i64, i64 } { ptr @.str.6040, i64 12, i64 0 }, ptr %t81 br label %endif8420 endif8420: %t82 = load ptr, ptr %a1 %t83 = insertvalue %S.cimport.FieldCtx zeroinitializer, ptr %t82, 0 %t84 = insertvalue %S.cimport.FieldCtx %t83, ptr %a76, 1 store %S.cimport.FieldCtx %t84, ptr %a85 %t86 = load %S.C.CXType, ptr %a7 store %S.C.CXType %t86, ptr %a87 %t88 = call i32 @clang_Type_visitFields(ptr byval(%S.C.CXType) align 8 %a87, ptr @finch.c.cimport.visitField, ptr %a85) %t89 = load ptr, ptr %a1 %t90 = icmp eq ptr %t89, null br i1 %t90, label %panic8421, label %ok8422 panic8421: call void @finch_panic(ptr @.str.6041, i64 172, ptr @.str.6042) unreachable ok8422: %t91 = getelementptr inbounds %S.cimport.Importer, ptr %t89, i32 0, i32 4 %t92 = load { ptr, i64, i64 }, ptr %a19 store { ptr, i64, i64 } %t92, ptr %a93 %t94 = call i64 @finch_map_find(ptr %t91, ptr %a93, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i1 }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t95 = icmp sge i64 %t94, 0 br i1 %t95, label %remove.hit8423, label %remove.end8424 remove.hit8423: call void @finch_map_remove_at(ptr %t91, i64 %t94, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i1 }, ptr null, i32 1) to i64)) br label %remove.end8424 remove.end8424: %t96 = load %S.cimport.CStruct, ptr %a76 %t97 = load ptr, ptr %a1 %t98 = icmp eq ptr %t97, null br i1 %t98, label %panic8425, label %ok8426 panic8425: call void @finch_panic(ptr @.str.6043, i64 173, ptr @.str.6044) unreachable ok8426: %t99 = getelementptr inbounds %S.cimport.Importer, ptr %t97, i32 0, i32 0 %t100 = getelementptr inbounds %S.cimport.CImports, ptr %t99, i32 0, i32 3 %t101 = load { ptr, i64, i64 }, ptr %a23 store { ptr, i64, i64 } %t101, ptr %a102 store i32 0, ptr %a103 %t104 = call i64 @finch_map_slot(ptr %t100, ptr %a102, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a103) %t105 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t100, i32 0, i32 0 %t106 = load ptr, ptr %t105 %t107 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t106, i64 %t104 %t108 = load i32, ptr %a103 %t109 = icmp ne i32 %t108, 0 br i1 %t109, label %map.new8427, label %map.have8428 map.new8427: %t110 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t107, i32 0, i32 1 call void @finch_str_copy(ptr %t110, ptr %a102) %t111 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t107, i32 0, i32 2 store %S.cimport.CStruct zeroinitializer, ptr %t111 br label %map.have8428 map.have8428: %t112 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t107, i32 0, i32 2 store %S.cimport.CStruct %t96, ptr %a113 call void @finch.copy.S_cimport_CStruct(ptr %a114, ptr %a113) %t115 = load %S.cimport.CStruct, ptr %a114 store %S.cimport.CStruct %t115, ptr %t112 %t116 = load ptr, ptr %a1 %t117 = icmp eq ptr %t116, null br i1 %t117, label %panic8429, label %ok8430 panic8429: call void @finch_panic(ptr @.str.6045, i64 174, ptr @.str.6046) unreachable ok8430: %t118 = getelementptr inbounds %S.cimport.Importer, ptr %t116, i32 0, i32 0 %t119 = getelementptr inbounds %S.cimport.CImports, ptr %t118, i32 0, i32 4 %t120 = getelementptr inbounds { ptr, i64, i64 }, ptr %t119, i32 0, i32 1 %t121 = load { ptr, i64, i64 }, ptr %a23 store { ptr, i64, i64 } %t121, ptr %a122 call void @finch_str_copy(ptr %a123, ptr %a122) %t124 = load { ptr, i64, i64 }, ptr %a123 %t125 = load i64, ptr %t120 %t126 = add i64 %t125, 1 call void @finch_arr_reserve(ptr %t119, i64 %t126, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t127 = load ptr, ptr %t119 %t128 = getelementptr inbounds { ptr, i64, i64 }, ptr %t127, i64 %t125 store { ptr, i64, i64 } %t124, ptr %t128 store i64 %t126, ptr %t120 %t129 = load { ptr, i64, i64 }, ptr %a23 store { ptr, i64, i64 } %t129, ptr %a130 call void @finch_str_copy(ptr %a131, ptr %a130) %t132 = load { ptr, i64, i64 }, ptr %a131 ret { ptr, i64, i64 } %t132 } define internal i32 @finch.cimport.visitField(%S.C.CXCursor %p0, ptr %p1) { entry: %a1 = alloca %S.C.CXCursor, align 16 %a2 = alloca ptr, align 16 %a4 = alloca ptr, align 16 %a6 = alloca %S.C.CXCursor, align 16 %a8 = alloca [32 x i8], align 16 %a12 = alloca %S.cimport.CField, align 16 %a13 = alloca %S.C.CXType, align 16 %a14 = alloca %S.C.CXType, align 16 %a16 = alloca %S.C.CXCursor, align 16 %a18 = alloca %S.C.CXType, align 16 %a20 = alloca %S.C.CXType, align 16 %a22 = alloca %S.C.CXCursor, align 16 %a27 = alloca %S.C.CXType, align 16 %a31 = alloca %S.C.CXType, align 16 %a35 = alloca %S.C.CXCursor, align 16 %a48 = alloca %S.C.CXCursor, align 16 %a50 = alloca %S.C.CXType, align 16 %a52 = alloca %S.C.CXCursor, align 16 %a63 = alloca %S.cimport.Mapped, align 16 %a69 = alloca %S.ast.Type, align 16 %a70 = alloca %S.ast.Type, align 16 %a94 = alloca %S.cimport.CField, align 16 %a95 = alloca %S.cimport.CField, align 16 store %S.C.CXCursor %p0, ptr %a1 store ptr %p1, ptr %a2 %t3 = load ptr, ptr %a2 store ptr %t3, ptr %a4 %t5 = load %S.C.CXCursor, ptr %a1 store %S.C.CXCursor %t5, ptr %a6 %t7 = call { i64, i64 } @clang_getCursorSpelling(ptr byval(%S.C.CXCursor) align 8 %a6) store { i64, i64 } %t7, ptr %a8 %t9 = load %S.C.CXString, ptr %a8 %t10 = call { ptr, i64, i64 } @finch.cimport.text(%S.C.CXString %t9) %t11 = insertvalue %S.cimport.CField zeroinitializer, { ptr, i64, i64 } %t10, 0 store %S.cimport.CField %t11, ptr %a12 %t15 = load %S.C.CXCursor, ptr %a1 store %S.C.CXCursor %t15, ptr %a16 call void @clang_getCursorType(ptr sret(%S.C.CXType) align 16 %a14, ptr byval(%S.C.CXCursor) align 8 %a16) %t17 = load %S.C.CXType, ptr %a14 store %S.C.CXType %t17, ptr %a18 call void @clang_getCanonicalType(ptr sret(%S.C.CXType) align 16 %a13, ptr byval(%S.C.CXType) align 8 %a18) %t19 = load %S.C.CXType, ptr %a13 store %S.C.CXType %t19, ptr %a20 %t21 = load %S.C.CXCursor, ptr %a1 store %S.C.CXCursor %t21, ptr %a22 %t23 = call i64 @clang_Cursor_getOffsetOfField(ptr byval(%S.C.CXCursor) align 8 %a22) %t24 = sdiv i64 %t23, 8 %t25 = getelementptr inbounds %S.cimport.CField, ptr %a12, i32 0, i32 2 store i64 %t24, ptr %t25 %t26 = load %S.C.CXType, ptr %a20 store %S.C.CXType %t26, ptr %a27 %t28 = call i64 @clang_Type_getSizeOf(ptr byval(%S.C.CXType) align 8 %a27) %t29 = getelementptr inbounds %S.cimport.CField, ptr %a12, i32 0, i32 3 store i64 %t28, ptr %t29 %t30 = load %S.C.CXType, ptr %a20 store %S.C.CXType %t30, ptr %a31 %t32 = call i64 @clang_Type_getAlignOf(ptr byval(%S.C.CXType) align 8 %a31) %t33 = getelementptr inbounds %S.cimport.CField, ptr %a12, i32 0, i32 4 store i64 %t32, ptr %t33 %t34 = load %S.C.CXCursor, ptr %a1 store %S.C.CXCursor %t34, ptr %a35 %t36 = call i32 @clang_Cursor_isBitField(ptr byval(%S.C.CXCursor) align 8 %a35) %t37 = icmp ne i32 %t36, 0 br i1 %t37, label %then8431, label %else8432 then8431: %t38 = load ptr, ptr %a4 %t39 = icmp eq ptr %t38, null br i1 %t39, label %panic8434, label %ok8435 panic8434: call void @finch_panic(ptr @.str.6048, i64 191, ptr @.str.6049) unreachable ok8435: %t40 = getelementptr inbounds %S.cimport.FieldCtx, ptr %t38, i32 0, i32 1 %t41 = load ptr, ptr %t40 %t42 = icmp eq ptr %t41, null br i1 %t42, label %panic8436, label %ok8437 panic8436: call void @finch_panic(ptr @.str.6050, i64 191, ptr @.str.6051) unreachable ok8437: %t43 = getelementptr inbounds %S.cimport.CStruct, ptr %t41, i32 0, i32 4 store { ptr, i64, i64 } { ptr @.str.6047, i64 14, i64 0 }, ptr %t43 %t44 = getelementptr inbounds %S.cimport.CField, ptr %a12, i32 0, i32 5 store i1 true, ptr %t44 br label %endif8433 else8432: %t45 = getelementptr inbounds %S.C.CXType, ptr %a20, i32 0, i32 0 %t46 = load i32, ptr %t45 %t47 = icmp eq i32 %t46, 105 br label %logic.from8438 logic.from8438: br i1 %t47, label %logic.rhs8439, label %logic.end8440 logic.rhs8439: %t49 = load %S.C.CXType, ptr %a20 store %S.C.CXType %t49, ptr %a50 call void @clang_getTypeDeclaration(ptr sret(%S.C.CXCursor) align 16 %a48, ptr byval(%S.C.CXType) align 8 %a50) %t51 = load %S.C.CXCursor, ptr %a48 store %S.C.CXCursor %t51, ptr %a52 %t53 = call i32 @clang_getCursorKind(ptr byval(%S.C.CXCursor) align 8 %a52) %t54 = icmp eq i32 %t53, 3 br label %logic.rend8441 logic.rend8441: br label %logic.end8440 logic.end8440: %t55 = phi i1 [ false, %logic.from8438 ], [ %t54, %logic.rend8441 ] br i1 %t55, label %then8442, label %else8443 then8442: %t56 = getelementptr inbounds %S.cimport.CField, ptr %a12, i32 0, i32 5 store i1 true, ptr %t56 br label %endif8444 else8443: %t57 = load ptr, ptr %a4 %t58 = icmp eq ptr %t57, null br i1 %t58, label %panic8445, label %ok8446 panic8445: call void @finch_panic(ptr @.str.6052, i64 196, ptr @.str.6053) unreachable ok8446: %t59 = getelementptr inbounds %S.cimport.FieldCtx, ptr %t57, i32 0, i32 0 %t60 = load ptr, ptr %t59 %t61 = load %S.C.CXType, ptr %a20 %t62 = call %S.cimport.Mapped @finch.cimport.mapType(ptr %t60, %S.C.CXType %t61, i1 false, i1 false) store %S.cimport.Mapped %t62, ptr %a63 %t64 = getelementptr inbounds %S.cimport.Mapped, ptr %a63, i32 0, i32 2 %t65 = load i1, ptr %t64 br i1 %t65, label %then8447, label %else8448 then8447: %t66 = getelementptr inbounds %S.cimport.Mapped, ptr %a63, i32 0, i32 0 %t67 = load %S.ast.Type, ptr %t66 %t68 = getelementptr inbounds %S.cimport.CField, ptr %a12, i32 0, i32 1 store %S.ast.Type %t67, ptr %a69 call void @finch.copy.S_ast_Type(ptr %a70, ptr %a69) %t71 = load %S.ast.Type, ptr %a70 store %S.ast.Type %t71, ptr %t68 br label %endif8449 else8448: %t72 = getelementptr inbounds %S.cimport.CField, ptr %a12, i32 0, i32 5 store i1 true, ptr %t72 br label %endif8449 endif8449: br label %endif8444 endif8444: br label %endif8433 endif8433: %t73 = getelementptr inbounds %S.cimport.CField, ptr %a12, i32 0, i32 5 %t74 = load i1, ptr %t73 br i1 %t74, label %then8450, label %endif8452 then8450: %t75 = load ptr, ptr %a4 %t76 = icmp eq ptr %t75, null br i1 %t76, label %panic8453, label %ok8454 panic8453: call void @finch_panic(ptr @.str.6054, i64 204, ptr @.str.6055) unreachable ok8454: %t77 = getelementptr inbounds %S.cimport.FieldCtx, ptr %t75, i32 0, i32 1 %t78 = load ptr, ptr %t77 %t79 = icmp eq ptr %t78, null br i1 %t79, label %panic8455, label %ok8456 panic8455: call void @finch_panic(ptr @.str.6056, i64 204, ptr @.str.6057) unreachable ok8456: %t80 = getelementptr inbounds %S.cimport.CStruct, ptr %t78, i32 0, i32 5 store i1 true, ptr %t80 br label %endif8452 endif8452: %t81 = getelementptr inbounds %S.cimport.CField, ptr %a12, i32 0, i32 0 %t82 = getelementptr inbounds { ptr, i64, i64 }, ptr %t81, i32 0, i32 1 %t83 = load i64, ptr %t82 %t84 = icmp eq i64 %t83, 0 br i1 %t84, label %then8457, label %endif8459 then8457: %t85 = getelementptr inbounds %S.cimport.CField, ptr %a12, i32 0, i32 5 store i1 true, ptr %t85 br label %endif8459 endif8459: %t86 = load ptr, ptr %a4 %t87 = icmp eq ptr %t86, null br i1 %t87, label %panic8460, label %ok8461 panic8460: call void @finch_panic(ptr @.str.6058, i64 209, ptr @.str.6059) unreachable ok8461: %t88 = getelementptr inbounds %S.cimport.FieldCtx, ptr %t86, i32 0, i32 1 %t89 = load ptr, ptr %t88 %t90 = icmp eq ptr %t89, null br i1 %t90, label %panic8462, label %ok8463 panic8462: call void @finch_panic(ptr @.str.6060, i64 209, ptr @.str.6061) unreachable ok8463: %t91 = getelementptr inbounds %S.cimport.CStruct, ptr %t89, i32 0, i32 1 %t92 = getelementptr inbounds { ptr, i64, i64 }, ptr %t91, i32 0, i32 1 %t93 = load %S.cimport.CField, ptr %a12 store %S.cimport.CField %t93, ptr %a94 call void @finch.copy.S_cimport_CField(ptr %a95, ptr %a94) %t96 = load %S.cimport.CField, ptr %a95 %t97 = load i64, ptr %t92 %t98 = add i64 %t97, 1 call void @finch_arr_reserve(ptr %t91, i64 %t98, i64 ptrtoint (ptr getelementptr (%S.cimport.CField, ptr null, i32 1) to i64)) %t99 = load ptr, ptr %t91 %t100 = getelementptr inbounds %S.cimport.CField, ptr %t99, i64 %t97 store %S.cimport.CField %t96, ptr %t100 store i64 %t98, ptr %t92 ret i32 1 } define internal %S.cimport.Mapped @finch.cimport.sized(i64 %p0, i1 %p1) { entry: %a1 = alloca i64, align 16 %a2 = alloca i1, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 store i64 %p0, ptr %a1 store i1 %p1, ptr %a2 %t3 = load i64, ptr %a1 %t4 = icmp eq i64 %t3, 1 br i1 %t4, label %then8464, label %endif8466 then8464: %t5 = load i1, ptr %a2 br i1 %t5, label %then8467, label %endif8469 then8467: %t6 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6062, i64 2, i64 0 }) %t7 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t6) ret %S.cimport.Mapped %t7 endif8469: %t8 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6063, i64 2, i64 0 }) %t9 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t8) ret %S.cimport.Mapped %t9 endif8466: %t10 = load i64, ptr %a1 %t11 = icmp eq i64 %t10, 2 br i1 %t11, label %then8470, label %endif8472 then8470: %t12 = load i1, ptr %a2 br i1 %t12, label %then8473, label %endif8475 then8473: %t13 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6064, i64 3, i64 0 }) %t14 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t13) ret %S.cimport.Mapped %t14 endif8475: %t15 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6065, i64 3, i64 0 }) %t16 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t15) ret %S.cimport.Mapped %t16 endif8472: %t17 = load i64, ptr %a1 %t18 = icmp eq i64 %t17, 4 br i1 %t18, label %then8476, label %endif8478 then8476: %t19 = load i1, ptr %a2 br i1 %t19, label %then8479, label %endif8481 then8479: %t20 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6066, i64 3, i64 0 }) %t21 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t20) ret %S.cimport.Mapped %t21 endif8481: %t22 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6067, i64 3, i64 0 }) %t23 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t22) ret %S.cimport.Mapped %t23 endif8478: %t24 = load i64, ptr %a1 %t25 = icmp eq i64 %t24, 8 br i1 %t25, label %then8482, label %endif8484 then8482: %t26 = load i1, ptr %a2 br i1 %t26, label %then8485, label %endif8487 then8485: %t27 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6068, i64 3, i64 0 }) %t28 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t27) ret %S.cimport.Mapped %t28 endif8487: %t29 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6069, i64 3, i64 0 }) %t30 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t29) ret %S.cimport.Mapped %t30 endif8484: %t31 = load i64, ptr %a1 %t32 = mul i64 %t31, 8 call void @finch_str_from_int(ptr %a33, i64 %t32) %t34 = load { ptr, i64, i64 }, ptr %a33 store { ptr, i64, i64 } { ptr @.str.6070, i64 7, i64 0 }, ptr %a36 store { ptr, i64, i64 } %t34, ptr %a37 call void @finch_str_concat(ptr %a35, ptr %a36, ptr %a37) %t38 = load { ptr, i64, i64 }, ptr %a35 store { ptr, i64, i64 } %t38, ptr %a40 store { ptr, i64, i64 } { ptr @.str.6071, i64 11, i64 0 }, ptr %a41 call void @finch_str_concat(ptr %a39, ptr %a40, ptr %a41) %t42 = load { ptr, i64, i64 }, ptr %a39 %t43 = call %S.cimport.Mapped @finch.cimport.no({ ptr, i64, i64 } %t42) ret %S.cimport.Mapped %t43 } define internal %S.cimport.Mapped @finch.cimport.mapType(ptr %p0, %S.C.CXType %p1, i1 %p2, i1 %p3) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.C.CXType, align 16 %a3 = alloca i1, align 16 %a4 = alloca i1, align 16 %a5 = alloca %S.C.CXType, align 16 %a7 = alloca %S.C.CXType, align 16 %a9 = alloca %S.C.CXType, align 16 %a11 = alloca %S.C.CXType, align 16 %a13 = alloca i64, align 16 %a16 = alloca i32, align 16 %a78 = alloca %S.C.CXType, align 16 %a79 = alloca %S.C.CXType, align 16 %a81 = alloca %S.C.CXType, align 16 %a83 = alloca %S.C.CXType, align 16 %a85 = alloca %S.C.CXType, align 16 %a98 = alloca %S.C.CXType, align 16 %a120 = alloca %S.cimport.Mapped, align 16 %a127 = alloca { ptr, i64, i64 }, align 16 %a128 = alloca { ptr, i64, i64 }, align 16 %a135 = alloca { ptr, i64, i64 }, align 16 %a136 = alloca { ptr, i64, i64 }, align 16 %a148 = alloca %S.C.CXCursor, align 16 %a150 = alloca %S.C.CXType, align 16 %a152 = alloca %S.C.CXCursor, align 16 %a159 = alloca { ptr, i64, i64 }, align 16 %a166 = alloca { ptr, i64, i64 }, align 16 %a167 = alloca { ptr, i64, i64 }, align 16 %a175 = alloca %S.C.CXType, align 16 %a177 = alloca %S.C.CXType, align 16 %a180 = alloca %S.cimport.Mapped, align 16 %a188 = alloca %S.C.CXType, align 16 %a196 = alloca %S.C.CXType, align 16 %a198 = alloca [32 x i8], align 16 %a201 = alloca { ptr, i64, i64 }, align 16 %a202 = alloca { ptr, i64, i64 }, align 16 %a203 = alloca { ptr, i64, i64 }, align 16 %a205 = alloca { ptr, i64, i64 }, align 16 %a206 = alloca { ptr, i64, i64 }, align 16 %a207 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store %S.C.CXType %p1, ptr %a2 store i1 %p2, ptr %a3 store i1 %p3, ptr %a4 %t6 = load %S.C.CXType, ptr %a2 store %S.C.CXType %t6, ptr %a7 call void @clang_getCanonicalType(ptr sret(%S.C.CXType) align 16 %a5, ptr byval(%S.C.CXType) align 8 %a7) %t8 = load %S.C.CXType, ptr %a5 store %S.C.CXType %t8, ptr %a9 %t10 = load %S.C.CXType, ptr %a9 store %S.C.CXType %t10, ptr %a11 %t12 = call i64 @clang_Type_getSizeOf(ptr byval(%S.C.CXType) align 8 %a11) store i64 %t12, ptr %a13 %t14 = getelementptr inbounds %S.C.CXType, ptr %a9, i32 0, i32 0 %t15 = load i32, ptr %t14 store i32 %t15, ptr %a16 %t17 = load i32, ptr %a16 %t18 = icmp eq i32 %t17, 2 br i1 %t18, label %then8488, label %endif8490 then8488: %t19 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6072, i64 4, i64 0 }) %t20 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t19) ret %S.cimport.Mapped %t20 endif8490: %t21 = load i32, ptr %a16 %t22 = icmp eq i32 %t21, 3 br i1 %t22, label %then8491, label %endif8493 then8491: %t23 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6073, i64 4, i64 0 }) %t24 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t23) ret %S.cimport.Mapped %t24 endif8493: %t25 = load i32, ptr %a16 %t26 = icmp eq i32 %t25, 13 br label %logic.from8494 logic.from8494: br i1 %t26, label %logic.end8496, label %logic.rhs8495 logic.rhs8495: %t27 = load i32, ptr %a16 %t28 = icmp eq i32 %t27, 4 br label %logic.rend8497 logic.rend8497: br label %logic.end8496 logic.end8496: %t29 = phi i1 [ true, %logic.from8494 ], [ %t28, %logic.rend8497 ] br i1 %t29, label %then8498, label %endif8500 then8498: %t30 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6074, i64 4, i64 0 }) %t31 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t30) ret %S.cimport.Mapped %t31 endif8500: %t32 = load i32, ptr %a16 %t33 = icmp eq i32 %t32, 14 br label %logic.from8501 logic.from8501: br i1 %t33, label %logic.end8503, label %logic.rhs8502 logic.rhs8502: %t34 = load i32, ptr %a16 %t35 = icmp eq i32 %t34, 16 br label %logic.rend8504 logic.rend8504: br label %logic.end8503 logic.end8503: %t36 = phi i1 [ true, %logic.from8501 ], [ %t35, %logic.rend8504 ] br label %logic.from8505 logic.from8505: br i1 %t36, label %logic.end8507, label %logic.rhs8506 logic.rhs8506: %t37 = load i32, ptr %a16 %t38 = icmp eq i32 %t37, 17 br label %logic.rend8508 logic.rend8508: br label %logic.end8507 logic.end8507: %t39 = phi i1 [ true, %logic.from8505 ], [ %t38, %logic.rend8508 ] br label %logic.from8509 logic.from8509: br i1 %t39, label %logic.end8511, label %logic.rhs8510 logic.rhs8510: %t40 = load i32, ptr %a16 %t41 = icmp eq i32 %t40, 18 br label %logic.rend8512 logic.rend8512: br label %logic.end8511 logic.end8511: %t42 = phi i1 [ true, %logic.from8509 ], [ %t41, %logic.rend8512 ] br label %logic.from8513 logic.from8513: br i1 %t42, label %logic.end8515, label %logic.rhs8514 logic.rhs8514: %t43 = load i32, ptr %a16 %t44 = icmp eq i32 %t43, 19 br label %logic.rend8516 logic.rend8516: br label %logic.end8515 logic.end8515: %t45 = phi i1 [ true, %logic.from8513 ], [ %t44, %logic.rend8516 ] br i1 %t45, label %then8517, label %endif8519 then8517: %t46 = load i64, ptr %a13 %t47 = call %S.cimport.Mapped @finch.cimport.sized(i64 %t46, i1 true) ret %S.cimport.Mapped %t47 endif8519: %t48 = load i32, ptr %a16 %t49 = icmp eq i32 %t48, 5 br label %logic.from8520 logic.from8520: br i1 %t49, label %logic.end8522, label %logic.rhs8521 logic.rhs8521: %t50 = load i32, ptr %a16 %t51 = icmp eq i32 %t50, 8 br label %logic.rend8523 logic.rend8523: br label %logic.end8522 logic.end8522: %t52 = phi i1 [ true, %logic.from8520 ], [ %t51, %logic.rend8523 ] br label %logic.from8524 logic.from8524: br i1 %t52, label %logic.end8526, label %logic.rhs8525 logic.rhs8525: %t53 = load i32, ptr %a16 %t54 = icmp eq i32 %t53, 9 br label %logic.rend8527 logic.rend8527: br label %logic.end8526 logic.end8526: %t55 = phi i1 [ true, %logic.from8524 ], [ %t54, %logic.rend8527 ] br label %logic.from8528 logic.from8528: br i1 %t55, label %logic.end8530, label %logic.rhs8529 logic.rhs8529: %t56 = load i32, ptr %a16 %t57 = icmp eq i32 %t56, 10 br label %logic.rend8531 logic.rend8531: br label %logic.end8530 logic.end8530: %t58 = phi i1 [ true, %logic.from8528 ], [ %t57, %logic.rend8531 ] br label %logic.from8532 logic.from8532: br i1 %t58, label %logic.end8534, label %logic.rhs8533 logic.rhs8533: %t59 = load i32, ptr %a16 %t60 = icmp eq i32 %t59, 11 br label %logic.rend8535 logic.rend8535: br label %logic.end8534 logic.end8534: %t61 = phi i1 [ true, %logic.from8532 ], [ %t60, %logic.rend8535 ] br i1 %t61, label %then8536, label %endif8538 then8536: %t62 = load i64, ptr %a13 %t63 = call %S.cimport.Mapped @finch.cimport.sized(i64 %t62, i1 false) ret %S.cimport.Mapped %t63 endif8538: %t64 = load i32, ptr %a16 %t65 = icmp eq i32 %t64, 106 br i1 %t65, label %then8539, label %endif8541 then8539: %t66 = load i64, ptr %a13 %t67 = call %S.cimport.Mapped @finch.cimport.sized(i64 %t66, i1 true) ret %S.cimport.Mapped %t67 endif8541: %t68 = load i32, ptr %a16 %t69 = icmp eq i32 %t68, 21 br i1 %t69, label %then8542, label %endif8544 then8542: %t70 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6075, i64 3, i64 0 }) %t71 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t70) ret %S.cimport.Mapped %t71 endif8544: %t72 = load i32, ptr %a16 %t73 = icmp eq i32 %t72, 22 br i1 %t73, label %then8545, label %endif8547 then8545: %t74 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6076, i64 5, i64 0 }) %t75 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t74) ret %S.cimport.Mapped %t75 endif8547: %t76 = load i32, ptr %a16 %t77 = icmp eq i32 %t76, 101 br i1 %t77, label %then8548, label %endif8550 then8548: %t80 = load %S.C.CXType, ptr %a9 store %S.C.CXType %t80, ptr %a81 call void @clang_getPointeeType(ptr sret(%S.C.CXType) align 16 %a79, ptr byval(%S.C.CXType) align 8 %a81) %t82 = load %S.C.CXType, ptr %a79 store %S.C.CXType %t82, ptr %a83 call void @clang_getCanonicalType(ptr sret(%S.C.CXType) align 16 %a78, ptr byval(%S.C.CXType) align 8 %a83) %t84 = load %S.C.CXType, ptr %a78 store %S.C.CXType %t84, ptr %a85 %t86 = getelementptr inbounds %S.C.CXType, ptr %a85, i32 0, i32 0 %t87 = load i32, ptr %t86 %t88 = icmp eq i32 %t87, 13 br label %logic.from8551 logic.from8551: br i1 %t88, label %logic.end8553, label %logic.rhs8552 logic.rhs8552: %t89 = getelementptr inbounds %S.C.CXType, ptr %a85, i32 0, i32 0 %t90 = load i32, ptr %t89 %t91 = icmp eq i32 %t90, 4 br label %logic.rend8554 logic.rend8554: br label %logic.end8553 logic.end8553: %t92 = phi i1 [ true, %logic.from8551 ], [ %t91, %logic.rend8554 ] br label %logic.from8555 logic.from8555: br i1 %t92, label %logic.rhs8556, label %logic.end8557 logic.rhs8556: %t93 = load i1, ptr %a3 br label %logic.rend8558 logic.rend8558: br label %logic.end8557 logic.end8557: %t94 = phi i1 [ false, %logic.from8555 ], [ %t93, %logic.rend8558 ] br i1 %t94, label %then8559, label %endif8561 then8559: %t95 = load i1, ptr %a4 %t96 = xor i1 %t95, true br label %logic.from8562 logic.from8562: br i1 %t96, label %logic.end8564, label %logic.rhs8563 logic.rhs8563: %t97 = load %S.C.CXType, ptr %a85 store %S.C.CXType %t97, ptr %a98 %t99 = call i32 @clang_isConstQualifiedType(ptr byval(%S.C.CXType) align 8 %a98) %t100 = icmp ne i32 %t99, 0 br label %logic.rend8565 logic.rend8565: br label %logic.end8564 logic.end8564: %t101 = phi i1 [ true, %logic.from8562 ], [ %t100, %logic.rend8565 ] br i1 %t101, label %then8566, label %endif8568 then8566: %t102 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6077, i64 3, i64 0 }) %t103 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t102) ret %S.cimport.Mapped %t103 endif8568: br label %endif8561 endif8561: %t104 = getelementptr inbounds %S.C.CXType, ptr %a85, i32 0, i32 0 %t105 = load i32, ptr %t104 %t106 = icmp eq i32 %t105, 2 br label %logic.from8569 logic.from8569: br i1 %t106, label %logic.end8571, label %logic.rhs8570 logic.rhs8570: %t107 = getelementptr inbounds %S.C.CXType, ptr %a85, i32 0, i32 0 %t108 = load i32, ptr %t107 %t109 = icmp eq i32 %t108, 111 br label %logic.rend8572 logic.rend8572: br label %logic.end8571 logic.end8571: %t110 = phi i1 [ true, %logic.from8569 ], [ %t109, %logic.rend8572 ] br label %logic.from8573 logic.from8573: br i1 %t110, label %logic.end8575, label %logic.rhs8574 logic.rhs8574: %t111 = getelementptr inbounds %S.C.CXType, ptr %a85, i32 0, i32 0 %t112 = load i32, ptr %t111 %t113 = icmp eq i32 %t112, 110 br label %logic.rend8576 logic.rend8576: br label %logic.end8575 logic.end8575: %t114 = phi i1 [ true, %logic.from8573 ], [ %t113, %logic.rend8576 ] br i1 %t114, label %then8577, label %endif8579 then8577: %t115 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6078, i64 3, i64 0 }) %t116 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t115) ret %S.cimport.Mapped %t116 endif8579: %t117 = load ptr, ptr %a1 %t118 = load %S.C.CXType, ptr %a85 %t119 = call %S.cimport.Mapped @finch.cimport.mapType(ptr %t117, %S.C.CXType %t118, i1 false, i1 false) store %S.cimport.Mapped %t119, ptr %a120 %t121 = getelementptr inbounds %S.cimport.Mapped, ptr %a120, i32 0, i32 2 %t122 = load i1, ptr %t121 %t123 = xor i1 %t122, true br label %logic.from8580 logic.from8580: br i1 %t123, label %logic.end8582, label %logic.rhs8581 logic.rhs8581: %t124 = getelementptr inbounds %S.cimport.Mapped, ptr %a120, i32 0, i32 0 %t125 = getelementptr inbounds %S.ast.Type, ptr %t124, i32 0, i32 0 %t126 = load { ptr, i64, i64 }, ptr %t125 store { ptr, i64, i64 } %t126, ptr %a127 store { ptr, i64, i64 } { ptr @.str.6079, i64 4, i64 0 }, ptr %a128 %t129 = call i32 @finch_str_eq(ptr %a127, ptr %a128) %t130 = icmp ne i32 %t129, 0 br label %logic.rend8583 logic.rend8583: br label %logic.end8582 logic.end8582: %t131 = phi i1 [ true, %logic.from8580 ], [ %t130, %logic.rend8583 ] br label %logic.from8584 logic.from8584: br i1 %t131, label %logic.end8586, label %logic.rhs8585 logic.rhs8585: %t132 = getelementptr inbounds %S.cimport.Mapped, ptr %a120, i32 0, i32 0 %t133 = getelementptr inbounds %S.ast.Type, ptr %t132, i32 0, i32 0 %t134 = load { ptr, i64, i64 }, ptr %t133 store { ptr, i64, i64 } %t134, ptr %a135 store { ptr, i64, i64 } { ptr @.str.6080, i64 5, i64 0 }, ptr %a136 %t137 = call i32 @finch_str_eq(ptr %a135, ptr %a136) %t138 = icmp ne i32 %t137, 0 br label %logic.rend8587 logic.rend8587: br label %logic.end8586 logic.end8586: %t139 = phi i1 [ true, %logic.from8584 ], [ %t138, %logic.rend8587 ] br i1 %t139, label %then8588, label %endif8590 then8588: %t140 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6081, i64 3, i64 0 }) %t141 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t140) ret %S.cimport.Mapped %t141 endif8590: %t142 = getelementptr inbounds %S.cimport.Mapped, ptr %a120, i32 0, i32 0 %t143 = load %S.ast.Type, ptr %t142 %t144 = call %S.ast.Type @finch.ast.ptrTo(%S.ast.Type %t143) %t145 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t144) ret %S.cimport.Mapped %t145 endif8550: %t146 = load i32, ptr %a16 %t147 = icmp eq i32 %t146, 105 br i1 %t147, label %then8591, label %endif8593 then8591: %t149 = load %S.C.CXType, ptr %a9 store %S.C.CXType %t149, ptr %a150 call void @clang_getTypeDeclaration(ptr sret(%S.C.CXCursor) align 16 %a148, ptr byval(%S.C.CXType) align 8 %a150) %t151 = load %S.C.CXCursor, ptr %a148 store %S.C.CXCursor %t151, ptr %a152 %t153 = call i32 @clang_getCursorKind(ptr byval(%S.C.CXCursor) align 8 %a152) %t154 = icmp eq i32 %t153, 3 br i1 %t154, label %then8594, label %endif8596 then8594: %t155 = call %S.cimport.Mapped @finch.cimport.no({ ptr, i64, i64 } { ptr @.str.6082, i64 23, i64 0 }) ret %S.cimport.Mapped %t155 endif8596: %t156 = load ptr, ptr %a1 %t157 = load %S.C.CXType, ptr %a9 %t158 = call { ptr, i64, i64 } @finch.cimport.defineRecord(ptr %t156, %S.C.CXType %t157) store { ptr, i64, i64 } %t158, ptr %a159 %t160 = getelementptr inbounds { ptr, i64, i64 }, ptr %a159, i32 0, i32 1 %t161 = load i64, ptr %t160 %t162 = icmp eq i64 %t161, 0 br i1 %t162, label %then8597, label %endif8599 then8597: %t163 = call %S.cimport.Mapped @finch.cimport.no({ ptr, i64, i64 } { ptr @.str.6083, i64 36, i64 0 }) ret %S.cimport.Mapped %t163 endif8599: %t164 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.6084, i64 5, i64 0 }, 0 %t165 = load { ptr, i64, i64 }, ptr %a159 store { ptr, i64, i64 } %t165, ptr %a166 call void @finch_str_copy(ptr %a167, ptr %a166) %t168 = load { ptr, i64, i64 }, ptr %a167 %t169 = insertvalue %S.ast.Type %t164, { ptr, i64, i64 } %t168, 2 %t170 = insertvalue %S.ast.Type %t169, { ptr, i64, i64 } { ptr @.str.6085, i64 1, i64 0 }, 3 %t171 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t170) ret %S.cimport.Mapped %t171 endif8593: %t172 = load i32, ptr %a16 %t173 = icmp eq i32 %t172, 112 br i1 %t173, label %then8600, label %endif8602 then8600: %t174 = load ptr, ptr %a1 %t176 = load %S.C.CXType, ptr %a9 store %S.C.CXType %t176, ptr %a177 call void @clang_getArrayElementType(ptr sret(%S.C.CXType) align 16 %a175, ptr byval(%S.C.CXType) align 8 %a177) %t178 = load %S.C.CXType, ptr %a175 %t179 = call %S.cimport.Mapped @finch.cimport.mapType(ptr %t174, %S.C.CXType %t178, i1 false, i1 false) store %S.cimport.Mapped %t179, ptr %a180 %t181 = getelementptr inbounds %S.cimport.Mapped, ptr %a180, i32 0, i32 2 %t182 = load i1, ptr %t181 %t183 = xor i1 %t182, true br i1 %t183, label %then8603, label %endif8605 then8603: %t184 = load %S.cimport.Mapped, ptr %a180 ret %S.cimport.Mapped %t184 endif8605: %t185 = getelementptr inbounds %S.cimport.Mapped, ptr %a180, i32 0, i32 0 %t186 = load %S.ast.Type, ptr %t185 %t187 = load %S.C.CXType, ptr %a9 store %S.C.CXType %t187, ptr %a188 %t189 = call i64 @clang_getArraySize(ptr byval(%S.C.CXType) align 8 %a188) %t190 = call %S.ast.Type @finch.cimport.fixed(%S.ast.Type %t186, i64 %t189) %t191 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t190) ret %S.cimport.Mapped %t191 endif8602: %t192 = load i32, ptr %a16 %t193 = icmp eq i32 %t192, 23 br i1 %t193, label %then8606, label %endif8608 then8606: %t194 = call %S.cimport.Mapped @finch.cimport.no({ ptr, i64, i64 } { ptr @.str.6086, i64 16, i64 0 }) ret %S.cimport.Mapped %t194 endif8608: %t195 = load %S.C.CXType, ptr %a9 store %S.C.CXType %t195, ptr %a196 %t197 = call { i64, i64 } @clang_getTypeSpelling(ptr byval(%S.C.CXType) align 8 %a196) store { i64, i64 } %t197, ptr %a198 %t199 = load %S.C.CXString, ptr %a198 %t200 = call { ptr, i64, i64 } @finch.cimport.text(%S.C.CXString %t199) store { ptr, i64, i64 } { ptr @.str.6087, i64 17, i64 0 }, ptr %a202 store { ptr, i64, i64 } %t200, ptr %a203 call void @finch_str_concat(ptr %a201, ptr %a202, ptr %a203) %t204 = load { ptr, i64, i64 }, ptr %a201 store { ptr, i64, i64 } %t204, ptr %a206 store { ptr, i64, i64 } { ptr @.str.6088, i64 1, i64 0 }, ptr %a207 call void @finch_str_concat(ptr %a205, ptr %a206, ptr %a207) %t208 = load { ptr, i64, i64 }, ptr %a205 %t209 = call %S.cimport.Mapped @finch.cimport.no({ ptr, i64, i64 } %t208) ret %S.cimport.Mapped %t209 } define internal %S.cimport.Number @finch.cimport.parseInt({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca i64, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca i64, align 16 %a45 = alloca i1, align 16 %a46 = alloca i64, align 16 %a58 = alloca i8, align 16 %a59 = alloca i64, align 16 %a103 = alloca { ptr, i64, i64 }, align 16 %a104 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 %a114 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t2, ptr %a3 call void @finch_str_copy(ptr %a4, ptr %a3) %t5 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t5, ptr %a6 store i64 10, ptr %a7 %t8 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t8, ptr %a9 store { ptr, i64, i64 } { ptr @.str.6090, i64 2, i64 0 }, ptr %a11 %t12 = call i32 @finch_str_starts(ptr %a9, ptr %a11) %t13 = icmp ne i32 %t12, 0 br label %logic.from8609 logic.from8609: br i1 %t13, label %logic.end8611, label %logic.rhs8610 logic.rhs8610: %t14 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t14, ptr %a15 store { ptr, i64, i64 } { ptr @.str.6092, i64 2, i64 0 }, ptr %a17 %t18 = call i32 @finch_str_starts(ptr %a15, ptr %a17) %t19 = icmp ne i32 %t18, 0 br label %logic.rend8612 logic.rend8612: br label %logic.end8611 logic.end8611: %t20 = phi i1 [ true, %logic.from8609 ], [ %t19, %logic.rend8612 ] br i1 %t20, label %then8613, label %else8614 then8613: store i64 16, ptr %a7 %t21 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t21, ptr %a22 %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 %t25 = load i64, ptr %t24 call void @finch_str_sub(ptr %a23, ptr %a22, i64 2, i64 %t25, ptr @.str.6093, i64 327) %t26 = load { ptr, i64, i64 }, ptr %a23 store { ptr, i64, i64 } %t26, ptr %a6 br label %endif8615 else8614: %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 %t28 = load i64, ptr %t27 %t29 = icmp sgt i64 %t28, 1 br label %logic.from8616 logic.from8616: br i1 %t29, label %logic.rhs8617, label %logic.end8618 logic.rhs8617: %t30 = load { ptr, i64, i64 }, ptr %a6 %t31 = extractvalue { ptr, i64, i64 } %t30, 1 %t32 = icmp uge i64 0, %t31 br i1 %t32, label %range8619, label %inrange8620 range8619: call void @finch_panic_index(ptr @.str.6094, i64 328, i64 0, i64 %t31) unreachable inrange8620: %t33 = extractvalue { ptr, i64, i64 } %t30, 0 %t34 = getelementptr inbounds i8, ptr %t33, i64 0 %t35 = load i8, ptr %t34 %t36 = icmp eq i8 %t35, 48 br label %logic.rend8621 logic.rend8621: br label %logic.end8618 logic.end8618: %t37 = phi i1 [ false, %logic.from8616 ], [ %t36, %logic.rend8621 ] br i1 %t37, label %then8622, label %endif8624 then8622: store i64 8, ptr %a7 %t38 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t38, ptr %a39 %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 %t42 = load i64, ptr %t41 call void @finch_str_sub(ptr %a40, ptr %a39, i64 1, i64 %t42, ptr @.str.6095, i64 330) %t43 = load { ptr, i64, i64 }, ptr %a40 store { ptr, i64, i64 } %t43, ptr %a6 br label %endif8624 endif8624: br label %endif8615 endif8615: store i64 0, ptr %a44 store i1 false, ptr %a45 store i64 0, ptr %a46 br label %while.cond8625 while.cond8625: %t47 = load i64, ptr %a46 %t48 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 %t49 = load i64, ptr %t48 %t50 = icmp slt i64 %t47, %t49 br i1 %t50, label %while.body8626, label %while.end8627 while.body8626: %t51 = load i64, ptr %a46 %t52 = load { ptr, i64, i64 }, ptr %a6 %t53 = extractvalue { ptr, i64, i64 } %t52, 1 %t54 = icmp uge i64 %t51, %t53 br i1 %t54, label %range8628, label %inrange8629 range8628: call void @finch_panic_index(ptr @.str.6096, i64 336, i64 %t51, i64 %t53) unreachable inrange8629: %t55 = extractvalue { ptr, i64, i64 } %t52, 0 %t56 = getelementptr inbounds i8, ptr %t55, i64 %t51 %t57 = load i8, ptr %t56 store i8 %t57, ptr %a58 store i64 99, ptr %a59 %t60 = load i8, ptr %a58 %t61 = icmp uge i8 %t60, 48 br label %logic.from8630 logic.from8630: br i1 %t61, label %logic.rhs8631, label %logic.end8632 logic.rhs8631: %t62 = load i8, ptr %a58 %t63 = icmp ule i8 %t62, 57 br label %logic.rend8633 logic.rend8633: br label %logic.end8632 logic.end8632: %t64 = phi i1 [ false, %logic.from8630 ], [ %t63, %logic.rend8633 ] br i1 %t64, label %then8634, label %else8635 then8634: %t65 = load i8, ptr %a58 %t66 = zext i8 %t65 to i64 %t67 = zext i8 48 to i64 %t68 = sub i64 %t66, %t67 store i64 %t68, ptr %a59 br label %endif8636 else8635: %t69 = load i8, ptr %a58 %t70 = icmp uge i8 %t69, 97 br label %logic.from8637 logic.from8637: br i1 %t70, label %logic.rhs8638, label %logic.end8639 logic.rhs8638: %t71 = load i8, ptr %a58 %t72 = icmp ule i8 %t71, 102 br label %logic.rend8640 logic.rend8640: br label %logic.end8639 logic.end8639: %t73 = phi i1 [ false, %logic.from8637 ], [ %t72, %logic.rend8640 ] br i1 %t73, label %then8641, label %else8642 then8641: %t74 = load i8, ptr %a58 %t75 = zext i8 %t74 to i64 %t76 = zext i8 97 to i64 %t77 = sub i64 %t75, %t76 %t78 = add i64 %t77, 10 store i64 %t78, ptr %a59 br label %endif8643 else8642: %t79 = load i8, ptr %a58 %t80 = icmp uge i8 %t79, 65 br label %logic.from8644 logic.from8644: br i1 %t80, label %logic.rhs8645, label %logic.end8646 logic.rhs8645: %t81 = load i8, ptr %a58 %t82 = icmp ule i8 %t81, 70 br label %logic.rend8647 logic.rend8647: br label %logic.end8646 logic.end8646: %t83 = phi i1 [ false, %logic.from8644 ], [ %t82, %logic.rend8647 ] br i1 %t83, label %then8648, label %endif8650 then8648: %t84 = load i8, ptr %a58 %t85 = zext i8 %t84 to i64 %t86 = zext i8 65 to i64 %t87 = sub i64 %t85, %t86 %t88 = add i64 %t87, 10 store i64 %t88, ptr %a59 br label %endif8650 endif8650: br label %endif8643 endif8643: br label %endif8636 endif8636: %t89 = load i64, ptr %a59 %t90 = load i64, ptr %a7 %t91 = icmp sge i64 %t89, %t90 br i1 %t91, label %then8651, label %endif8653 then8651: br label %while.end8627 endif8653: %t92 = load i64, ptr %a44 %t93 = load i64, ptr %a7 %t94 = mul i64 %t92, %t93 %t95 = load i64, ptr %a59 %t96 = add i64 %t94, %t95 store i64 %t96, ptr %a44 store i1 true, ptr %a45 %t97 = load i64, ptr %a46 %t98 = add i64 %t97, 1 store i64 %t98, ptr %a46 br label %while.cond8625 while.end8627: br label %while.cond8654 while.cond8654: %t99 = load i64, ptr %a46 %t100 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 %t101 = load i64, ptr %t100 %t102 = icmp slt i64 %t99, %t101 br i1 %t102, label %while.body8655, label %while.end8656 while.body8655: store { ptr, i64, i64 } { ptr @.str.6097, i64 4, i64 0 }, ptr %a103 %t105 = load i64, ptr %a46 %t106 = load { ptr, i64, i64 }, ptr %a6 %t107 = extractvalue { ptr, i64, i64 } %t106, 1 %t108 = icmp uge i64 %t105, %t107 br i1 %t108, label %range8657, label %inrange8658 range8657: call void @finch_panic_index(ptr @.str.6099, i64 354, i64 %t105, i64 %t107) unreachable inrange8658: %t109 = extractvalue { ptr, i64, i64 } %t106, 0 %t110 = getelementptr inbounds i8, ptr %t109, i64 %t105 %t111 = load i8, ptr %t110 call void @finch_str_from_char(ptr %a112, i8 signext %t111) %t113 = load { ptr, i64, i64 }, ptr %a112 store { ptr, i64, i64 } %t113, ptr %a114 %t115 = call i64 @finch_str_find(ptr %a103, ptr %a114) %t116 = icmp sge i64 %t115, 0 %t117 = xor i1 %t116, true br i1 %t117, label %then8659, label %endif8661 then8659: ret %S.cimport.Number zeroinitializer endif8661: %t118 = load i64, ptr %a46 %t119 = add i64 %t118, 1 store i64 %t119, ptr %a46 br label %while.cond8654 while.end8656: %t120 = load i1, ptr %a45 %t121 = xor i1 %t120, true br label %logic.from8662 logic.from8662: br i1 %t121, label %logic.rhs8663, label %logic.end8664 logic.rhs8663: %t122 = load i64, ptr %a7 %t123 = icmp ne i64 %t122, 8 br label %logic.rend8665 logic.rend8665: br label %logic.end8664 logic.end8664: %t124 = phi i1 [ false, %logic.from8662 ], [ %t123, %logic.rend8665 ] br i1 %t124, label %then8666, label %endif8668 then8666: ret %S.cimport.Number zeroinitializer endif8668: %t125 = load i64, ptr %a44 %t126 = insertvalue %S.cimport.CConst zeroinitializer, i64 %t125, 1 %t127 = insertvalue %S.cimport.Number zeroinitializer, %S.cimport.CConst %t126, 0 %t128 = insertvalue %S.cimport.Number %t127, i1 true, 1 ret %S.cimport.Number %t128 } define internal void @finch.copy.S_cimport_Number(ptr %dst, ptr %src) { entry: %t1 = load %S.cimport.Number, ptr %src store %S.cimport.Number %t1, ptr %dst %t2 = getelementptr inbounds %S.cimport.Number, ptr %dst, i32 0, i32 0 %t3 = getelementptr inbounds %S.cimport.Number, ptr %src, i32 0, i32 0 call void @finch.copy.S_cimport_CConst(ptr %t2, ptr %t3) ret void } define internal %S.cimport.Number @finch.cimport.macroValue(ptr %p0, %S.C.CXCursor %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.C.CXCursor, align 16 %a3 = alloca ptr, align 16 %a4 = alloca i32, align 16 %a9 = alloca %S.C.CXSourceRange, align 16 %a11 = alloca %S.C.CXCursor, align 16 %a13 = alloca %S.C.CXSourceRange, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca i64, align 16 %a24 = alloca %S.C.CXToken, align 16 %a36 = alloca %S.C.CXToken, align 16 %a38 = alloca [32 x i8], align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca i1, align 16 %a104 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 %a124 = alloca { ptr, i64, i64 }, align 16 %a125 = alloca { ptr, i64, i64 }, align 16 %a127 = alloca { ptr, i64, i64 }, align 16 %a157 = alloca { ptr, i64, i64 }, align 16 %a158 = alloca { ptr, i64, i64 }, align 16 %a159 = alloca { ptr, i64, i64 }, align 16 %a163 = alloca { ptr, i64, i64 }, align 16 %a164 = alloca { ptr, i64, i64 }, align 16 %a165 = alloca { ptr, i64, i64 }, align 16 %a170 = alloca { ptr, i64, i64 }, align 16 %a171 = alloca { ptr, i64, i64 }, align 16 %a172 = alloca { ptr, i64, i64 }, align 16 %a177 = alloca { ptr, i64, i64 }, align 16 %a178 = alloca { ptr, i64, i64 }, align 16 %a179 = alloca { ptr, i64, i64 }, align 16 %a184 = alloca i1, align 16 %a187 = alloca { ptr, i64, i64 }, align 16 %a188 = alloca { ptr, i64, i64 }, align 16 %a190 = alloca { ptr, i64, i64 }, align 16 %a194 = alloca { ptr, i64, i64 }, align 16 %a195 = alloca { ptr, i64, i64 }, align 16 %a205 = alloca { ptr, i64, i64 }, align 16 %a207 = alloca { ptr, i64, i64 }, align 16 %a212 = alloca { ptr, i64, i64 }, align 16 %a213 = alloca { ptr, i64, i64 }, align 16 %a219 = alloca { ptr, i64, i64 }, align 16 %a220 = alloca double, align 16 %a221 = alloca { ptr, i64, i64 }, align 16 %a226 = alloca { ptr, i64, i64 }, align 16 %a227 = alloca double, align 16 %a235 = alloca { ptr, i64, i64 }, align 16 %a236 = alloca { ptr, i64, i64 }, align 16 %a243 = alloca %S.cimport.Number, align 16 %a255 = alloca %S.cimport.Number, align 16 %a256 = alloca %S.cimport.Number, align 16 store ptr %p0, ptr %a1 store %S.C.CXCursor %p1, ptr %a2 store ptr null, ptr %a3 store i32 0, ptr %a4 %t5 = load ptr, ptr %a1 %t6 = icmp eq ptr %t5, null br i1 %t6, label %panic8669, label %ok8670 panic8669: call void @finch_panic(ptr @.str.6100, i64 369, ptr @.str.6101) unreachable ok8670: %t7 = getelementptr inbounds %S.cimport.Importer, ptr %t5, i32 0, i32 1 %t8 = load ptr, ptr %t7 %t10 = load %S.C.CXCursor, ptr %a2 store %S.C.CXCursor %t10, ptr %a11 call void @clang_getCursorExtent(ptr sret(%S.C.CXSourceRange) align 16 %a9, ptr byval(%S.C.CXCursor) align 8 %a11) %t12 = load %S.C.CXSourceRange, ptr %a9 store %S.C.CXSourceRange %t12, ptr %a13 call void @clang_tokenize(ptr %t8, ptr byval(%S.C.CXSourceRange) align 8 %a13, ptr %a3, ptr %a4) store { ptr, i64, i64 } zeroinitializer, ptr %a14 %t15 = load i32, ptr %a4 %t16 = zext i32 %t15 to i64 store i64 1, ptr %a17 br label %for.cond8671 for.cond8671: %t18 = load i64, ptr %a17 %t19 = icmp slt i64 %t18, %t16 br i1 %t19, label %for.body8672, label %for.end8674 for.body8672: %t20 = load i64, ptr %a17 %t21 = load ptr, ptr %a3 %t22 = getelementptr inbounds %S.C.CXToken, ptr %t21, i64 %t20 %t23 = load %S.C.CXToken, ptr %t22 store %S.C.CXToken %t23, ptr %a24 %t25 = call i32 @clang_getTokenKind(ptr byval(%S.C.CXToken) align 8 %a24) %t26 = icmp eq i32 %t25, 4 br i1 %t26, label %then8675, label %endif8677 then8675: br label %for.step8673 endif8677: %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 %t28 = load ptr, ptr %a1 %t29 = icmp eq ptr %t28, null br i1 %t29, label %panic8678, label %ok8679 panic8678: call void @finch_panic(ptr @.str.6102, i64 375, ptr @.str.6103) unreachable ok8679: %t30 = getelementptr inbounds %S.cimport.Importer, ptr %t28, i32 0, i32 1 %t31 = load ptr, ptr %t30 %t32 = load i64, ptr %a17 %t33 = load ptr, ptr %a3 %t34 = getelementptr inbounds %S.C.CXToken, ptr %t33, i64 %t32 %t35 = load %S.C.CXToken, ptr %t34 store %S.C.CXToken %t35, ptr %a36 %t37 = call { i64, i64 } @clang_getTokenSpelling(ptr %t31, ptr byval(%S.C.CXToken) align 8 %a36) store { i64, i64 } %t37, ptr %a38 %t39 = load %S.C.CXString, ptr %a38 %t40 = call { ptr, i64, i64 } @finch.cimport.text(%S.C.CXString %t39) %t41 = load i64, ptr %t27 %t42 = add i64 %t41, 1 call void @finch_arr_reserve(ptr %a14, i64 %t42, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t43 = load ptr, ptr %a14 %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t43, i64 %t41 store { ptr, i64, i64 } %t40, ptr %t44 store i64 %t42, ptr %t27 br label %for.step8673 for.step8673: %t45 = load i64, ptr %a17 %t46 = add i64 %t45, 1 store i64 %t46, ptr %a17 br label %for.cond8671 for.end8674: %t47 = load ptr, ptr %a1 %t48 = icmp eq ptr %t47, null br i1 %t48, label %panic8680, label %ok8681 panic8680: call void @finch_panic(ptr @.str.6104, i64 377, ptr @.str.6105) unreachable ok8681: %t49 = getelementptr inbounds %S.cimport.Importer, ptr %t47, i32 0, i32 1 %t50 = load ptr, ptr %t49 %t51 = load ptr, ptr %a3 %t52 = load i32, ptr %a4 call void @clang_disposeTokens(ptr %t50, ptr %t51, i32 %t52) br label %while.cond8682 while.cond8682: %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 %t54 = load i64, ptr %t53 %t55 = icmp sge i64 %t54, 2 br label %logic.from8685 logic.from8685: br i1 %t55, label %logic.rhs8686, label %logic.end8687 logic.rhs8686: %t56 = load { ptr, i64, i64 }, ptr %a14 %t57 = extractvalue { ptr, i64, i64 } %t56, 1 %t58 = icmp uge i64 0, %t57 br i1 %t58, label %range8688, label %inrange8689 range8688: call void @finch_panic_index(ptr @.str.6106, i64 379, i64 0, i64 %t57) unreachable inrange8689: %t59 = extractvalue { ptr, i64, i64 } %t56, 0 %t60 = getelementptr inbounds { ptr, i64, i64 }, ptr %t59, i64 0 %t61 = load { ptr, i64, i64 }, ptr %t60 store { ptr, i64, i64 } %t61, ptr %a62 store { ptr, i64, i64 } { ptr @.str.6107, i64 1, i64 0 }, ptr %a63 %t64 = call i32 @finch_str_eq(ptr %a62, ptr %a63) %t65 = icmp ne i32 %t64, 0 br label %logic.rend8690 logic.rend8690: br label %logic.end8687 logic.end8687: %t66 = phi i1 [ false, %logic.from8685 ], [ %t65, %logic.rend8690 ] br label %logic.from8691 logic.from8691: br i1 %t66, label %logic.rhs8692, label %logic.end8693 logic.rhs8692: %t67 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 %t68 = load i64, ptr %t67 %t69 = sub i64 %t68, 1 %t70 = load { ptr, i64, i64 }, ptr %a14 %t71 = extractvalue { ptr, i64, i64 } %t70, 1 %t72 = icmp uge i64 %t69, %t71 br i1 %t72, label %range8694, label %inrange8695 range8694: call void @finch_panic_index(ptr @.str.6108, i64 379, i64 %t69, i64 %t71) unreachable inrange8695: %t73 = extractvalue { ptr, i64, i64 } %t70, 0 %t74 = getelementptr inbounds { ptr, i64, i64 }, ptr %t73, i64 %t69 %t75 = load { ptr, i64, i64 }, ptr %t74 store { ptr, i64, i64 } %t75, ptr %a76 store { ptr, i64, i64 } { ptr @.str.6109, i64 1, i64 0 }, ptr %a77 %t78 = call i32 @finch_str_eq(ptr %a76, ptr %a77) %t79 = icmp ne i32 %t78, 0 br label %logic.rend8696 logic.rend8696: br label %logic.end8693 logic.end8693: %t80 = phi i1 [ false, %logic.from8691 ], [ %t79, %logic.rend8696 ] br i1 %t80, label %while.body8683, label %while.end8684 while.body8683: %t81 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 %t82 = load i64, ptr %t81 %t83 = icmp uge i64 0, %t82 br i1 %t83, label %range8697, label %inrange8698 range8697: call void @finch_panic_index(ptr @.str.6110, i64 380, i64 0, i64 %t82) unreachable inrange8698: %t84 = load ptr, ptr %a14 %t85 = getelementptr inbounds { ptr, i64, i64 }, ptr %t84, i64 0 %t86 = load { ptr, i64, i64 }, ptr %t85 call void @finch_arr_remove_gap(ptr %a14, i64 0, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t87 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 %t88 = load i64, ptr %t87 %t89 = icmp eq i64 %t88, 0 br i1 %t89, label %panic8699, label %ok8700 panic8699: call void @finch_panic(ptr @.str.6111, i64 381, ptr @.str.6112) unreachable ok8700: %t90 = sub i64 %t88, 1 %t91 = load ptr, ptr %a14 %t92 = getelementptr inbounds { ptr, i64, i64 }, ptr %t91, i64 %t90 %t93 = load { ptr, i64, i64 }, ptr %t92 store i64 %t90, ptr %t87 br label %while.cond8682 while.end8684: store i1 false, ptr %a94 %t95 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 %t96 = load i64, ptr %t95 %t97 = icmp eq i64 %t96, 2 br label %logic.from8701 logic.from8701: br i1 %t97, label %logic.rhs8702, label %logic.end8703 logic.rhs8702: %t98 = load { ptr, i64, i64 }, ptr %a14 %t99 = extractvalue { ptr, i64, i64 } %t98, 1 %t100 = icmp uge i64 0, %t99 br i1 %t100, label %range8704, label %inrange8705 range8704: call void @finch_panic_index(ptr @.str.6113, i64 384, i64 0, i64 %t99) unreachable inrange8705: %t101 = extractvalue { ptr, i64, i64 } %t98, 0 %t102 = getelementptr inbounds { ptr, i64, i64 }, ptr %t101, i64 0 %t103 = load { ptr, i64, i64 }, ptr %t102 store { ptr, i64, i64 } %t103, ptr %a104 store { ptr, i64, i64 } { ptr @.str.6114, i64 1, i64 0 }, ptr %a105 %t106 = call i32 @finch_str_eq(ptr %a104, ptr %a105) %t107 = icmp ne i32 %t106, 0 br label %logic.rend8706 logic.rend8706: br label %logic.end8703 logic.end8703: %t108 = phi i1 [ false, %logic.from8701 ], [ %t107, %logic.rend8706 ] br i1 %t108, label %then8707, label %endif8709 then8707: store i1 true, ptr %a94 %t109 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 %t110 = load i64, ptr %t109 %t111 = icmp uge i64 0, %t110 br i1 %t111, label %range8710, label %inrange8711 range8710: call void @finch_panic_index(ptr @.str.6115, i64 386, i64 0, i64 %t110) unreachable inrange8711: %t112 = load ptr, ptr %a14 %t113 = getelementptr inbounds { ptr, i64, i64 }, ptr %t112, i64 0 %t114 = load { ptr, i64, i64 }, ptr %t113 call void @finch_arr_remove_gap(ptr %a14, i64 0, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) br label %endif8709 endif8709: %t115 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 %t116 = load i64, ptr %t115 %t117 = icmp ne i64 %t116, 1 br i1 %t117, label %then8712, label %endif8714 then8712: ret %S.cimport.Number zeroinitializer endif8714: %t118 = load { ptr, i64, i64 }, ptr %a14 %t119 = extractvalue { ptr, i64, i64 } %t118, 1 %t120 = icmp uge i64 0, %t119 br i1 %t120, label %range8715, label %inrange8716 range8715: call void @finch_panic_index(ptr @.str.6116, i64 391, i64 0, i64 %t119) unreachable inrange8716: %t121 = extractvalue { ptr, i64, i64 } %t118, 0 %t122 = getelementptr inbounds { ptr, i64, i64 }, ptr %t121, i64 0 %t123 = load { ptr, i64, i64 }, ptr %t122 store { ptr, i64, i64 } %t123, ptr %a124 call void @finch_str_copy(ptr %a125, ptr %a124) %t126 = load { ptr, i64, i64 }, ptr %a125 store { ptr, i64, i64 } %t126, ptr %a127 %t128 = getelementptr inbounds { ptr, i64, i64 }, ptr %a127, i32 0, i32 1 %t129 = load i64, ptr %t128 %t130 = icmp eq i64 %t129, 0 br label %logic.from8717 logic.from8717: br i1 %t130, label %logic.end8719, label %logic.rhs8718 logic.rhs8718: %t131 = load { ptr, i64, i64 }, ptr %a127 %t132 = extractvalue { ptr, i64, i64 } %t131, 1 %t133 = icmp uge i64 0, %t132 br i1 %t133, label %range8720, label %inrange8721 range8720: call void @finch_panic_index(ptr @.str.6117, i64 392, i64 0, i64 %t132) unreachable inrange8721: %t134 = extractvalue { ptr, i64, i64 } %t131, 0 %t135 = getelementptr inbounds i8, ptr %t134, i64 0 %t136 = load i8, ptr %t135 %t137 = icmp uge i8 %t136, 48 br label %logic.from8722 logic.from8722: br i1 %t137, label %logic.rhs8723, label %logic.end8724 logic.rhs8723: %t138 = load { ptr, i64, i64 }, ptr %a127 %t139 = extractvalue { ptr, i64, i64 } %t138, 1 %t140 = icmp uge i64 0, %t139 br i1 %t140, label %range8725, label %inrange8726 range8725: call void @finch_panic_index(ptr @.str.6118, i64 392, i64 0, i64 %t139) unreachable inrange8726: %t141 = extractvalue { ptr, i64, i64 } %t138, 0 %t142 = getelementptr inbounds i8, ptr %t141, i64 0 %t143 = load i8, ptr %t142 %t144 = icmp ule i8 %t143, 57 br label %logic.rend8727 logic.rend8727: br label %logic.end8724 logic.end8724: %t145 = phi i1 [ false, %logic.from8722 ], [ %t144, %logic.rend8727 ] br label %logic.from8728 logic.from8728: br i1 %t145, label %logic.end8730, label %logic.rhs8729 logic.rhs8729: %t146 = load { ptr, i64, i64 }, ptr %a127 %t147 = extractvalue { ptr, i64, i64 } %t146, 1 %t148 = icmp uge i64 0, %t147 br i1 %t148, label %range8731, label %inrange8732 range8731: call void @finch_panic_index(ptr @.str.6119, i64 392, i64 0, i64 %t147) unreachable inrange8732: %t149 = extractvalue { ptr, i64, i64 } %t146, 0 %t150 = getelementptr inbounds i8, ptr %t149, i64 0 %t151 = load i8, ptr %t150 %t152 = icmp eq i8 %t151, 46 br label %logic.rend8733 logic.rend8733: br label %logic.end8730 logic.end8730: %t153 = phi i1 [ true, %logic.from8728 ], [ %t152, %logic.rend8733 ] %t154 = xor i1 %t153, true br label %logic.rend8734 logic.rend8734: br label %logic.end8719 logic.end8719: %t155 = phi i1 [ true, %logic.from8717 ], [ %t154, %logic.rend8734 ] br i1 %t155, label %then8735, label %endif8737 then8735: ret %S.cimport.Number zeroinitializer endif8737: %t156 = load { ptr, i64, i64 }, ptr %a127 store { ptr, i64, i64 } %t156, ptr %a157 store { ptr, i64, i64 } { ptr @.str.6121, i64 1, i64 0 }, ptr %a159 %t160 = call i64 @finch_str_find(ptr %a157, ptr %a159) %t161 = icmp sge i64 %t160, 0 br label %logic.from8738 logic.from8738: br i1 %t161, label %logic.end8740, label %logic.rhs8739 logic.rhs8739: %t162 = load { ptr, i64, i64 }, ptr %a127 store { ptr, i64, i64 } %t162, ptr %a163 store { ptr, i64, i64 } { ptr @.str.6123, i64 1, i64 0 }, ptr %a165 %t166 = call i64 @finch_str_find(ptr %a163, ptr %a165) %t167 = icmp sge i64 %t166, 0 br label %logic.rend8741 logic.rend8741: br label %logic.end8740 logic.end8740: %t168 = phi i1 [ true, %logic.from8738 ], [ %t167, %logic.rend8741 ] br label %logic.from8742 logic.from8742: br i1 %t168, label %logic.end8744, label %logic.rhs8743 logic.rhs8743: %t169 = load { ptr, i64, i64 }, ptr %a127 store { ptr, i64, i64 } %t169, ptr %a170 store { ptr, i64, i64 } { ptr @.str.6125, i64 1, i64 0 }, ptr %a172 %t173 = call i64 @finch_str_find(ptr %a170, ptr %a172) %t174 = icmp sge i64 %t173, 0 br label %logic.rend8745 logic.rend8745: br label %logic.end8744 logic.end8744: %t175 = phi i1 [ true, %logic.from8742 ], [ %t174, %logic.rend8745 ] br label %logic.from8746 logic.from8746: br i1 %t175, label %logic.rhs8747, label %logic.end8748 logic.rhs8747: %t176 = load { ptr, i64, i64 }, ptr %a127 store { ptr, i64, i64 } %t176, ptr %a177 store { ptr, i64, i64 } { ptr @.str.6127, i64 2, i64 0 }, ptr %a179 %t180 = call i32 @finch_str_starts(ptr %a177, ptr %a179) %t181 = icmp ne i32 %t180, 0 %t182 = xor i1 %t181, true br label %logic.rend8749 logic.rend8749: br label %logic.end8748 logic.end8748: %t183 = phi i1 [ false, %logic.from8746 ], [ %t182, %logic.rend8749 ] store i1 %t183, ptr %a184 %t185 = load i1, ptr %a184 br i1 %t185, label %then8750, label %endif8752 then8750: %t186 = load { ptr, i64, i64 }, ptr %a127 store { ptr, i64, i64 } %t186, ptr %a187 call void @finch_str_copy(ptr %a188, ptr %a187) %t189 = load { ptr, i64, i64 }, ptr %a188 store { ptr, i64, i64 } %t189, ptr %a190 br label %while.cond8753 while.cond8753: %t191 = getelementptr inbounds { ptr, i64, i64 }, ptr %a190, i32 0, i32 1 %t192 = load i64, ptr %t191 %t193 = icmp sgt i64 %t192, 0 br label %logic.from8756 logic.from8756: br i1 %t193, label %logic.rhs8757, label %logic.end8758 logic.rhs8757: store { ptr, i64, i64 } { ptr @.str.6128, i64 4, i64 0 }, ptr %a194 %t196 = getelementptr inbounds { ptr, i64, i64 }, ptr %a190, i32 0, i32 1 %t197 = load i64, ptr %t196 %t198 = sub i64 %t197, 1 %t199 = load { ptr, i64, i64 }, ptr %a190 %t200 = extractvalue { ptr, i64, i64 } %t199, 1 %t201 = icmp uge i64 %t198, %t200 br i1 %t201, label %range8759, label %inrange8760 range8759: call void @finch_panic_index(ptr @.str.6130, i64 398, i64 %t198, i64 %t200) unreachable inrange8760: %t202 = extractvalue { ptr, i64, i64 } %t199, 0 %t203 = getelementptr inbounds i8, ptr %t202, i64 %t198 %t204 = load i8, ptr %t203 call void @finch_str_from_char(ptr %a205, i8 signext %t204) %t206 = load { ptr, i64, i64 }, ptr %a205 store { ptr, i64, i64 } %t206, ptr %a207 %t208 = call i64 @finch_str_find(ptr %a194, ptr %a207) %t209 = icmp sge i64 %t208, 0 br label %logic.rend8761 logic.rend8761: br label %logic.end8758 logic.end8758: %t210 = phi i1 [ false, %logic.from8756 ], [ %t209, %logic.rend8761 ] br i1 %t210, label %while.body8754, label %while.end8755 while.body8754: %t211 = load { ptr, i64, i64 }, ptr %a190 store { ptr, i64, i64 } %t211, ptr %a212 %t214 = getelementptr inbounds { ptr, i64, i64 }, ptr %a190, i32 0, i32 1 %t215 = load i64, ptr %t214 %t216 = sub i64 %t215, 1 call void @finch_str_sub(ptr %a213, ptr %a212, i64 0, i64 %t216, ptr @.str.6131, i64 399) %t217 = load { ptr, i64, i64 }, ptr %a213 store { ptr, i64, i64 } %t217, ptr %a190 br label %while.cond8753 while.end8755: %t218 = load { ptr, i64, i64 }, ptr %a190 store { ptr, i64, i64 } zeroinitializer, ptr %a219 store double 0.0, ptr %a220 store { ptr, i64, i64 } %t218, ptr %a221 %t222 = call i32 @finch_str_try_float(ptr %a221, ptr %a220, ptr %a219) %t223 = icmp eq i32 %t222, 0 %t224 = load { ptr, i64, i64 }, ptr %a219 %t225 = load double, ptr %a220 br i1 %t223, label %or.failed8762, label %or.ok8763 or.failed8762: store { ptr, i64, i64 } %t224, ptr %a226 ret %S.cimport.Number zeroinitializer or.ok8763: store double %t225, ptr %a227 %t228 = load i1, ptr %a94 br i1 %t228, label %then8764, label %endif8766 then8764: %t229 = load double, ptr %a227 %t230 = fsub double 0.0, %t229 store double %t230, ptr %a227 br label %endif8766 endif8766: %t231 = insertvalue %S.cimport.CConst zeroinitializer, i1 true, 0 %t232 = load double, ptr %a227 %t233 = insertvalue %S.cimport.CConst %t231, double %t232, 2 %t234 = load { ptr, i64, i64 }, ptr %a190 store { ptr, i64, i64 } %t234, ptr %a235 call void @finch_str_copy(ptr %a236, ptr %a235) %t237 = load { ptr, i64, i64 }, ptr %a236 %t238 = insertvalue %S.cimport.CConst %t233, { ptr, i64, i64 } %t237, 3 %t239 = insertvalue %S.cimport.Number zeroinitializer, %S.cimport.CConst %t238, 0 %t240 = insertvalue %S.cimport.Number %t239, i1 true, 1 ret %S.cimport.Number %t240 endif8752: %t241 = load { ptr, i64, i64 }, ptr %a127 %t242 = call %S.cimport.Number @finch.cimport.parseInt({ ptr, i64, i64 } %t241) store %S.cimport.Number %t242, ptr %a243 %t244 = getelementptr inbounds %S.cimport.Number, ptr %a243, i32 0, i32 1 %t245 = load i1, ptr %t244 br label %logic.from8767 logic.from8767: br i1 %t245, label %logic.rhs8768, label %logic.end8769 logic.rhs8768: %t246 = load i1, ptr %a94 br label %logic.rend8770 logic.rend8770: br label %logic.end8769 logic.end8769: %t247 = phi i1 [ false, %logic.from8767 ], [ %t246, %logic.rend8770 ] br i1 %t247, label %then8771, label %endif8773 then8771: %t248 = getelementptr inbounds %S.cimport.Number, ptr %a243, i32 0, i32 0 %t249 = getelementptr inbounds %S.cimport.CConst, ptr %t248, i32 0, i32 1 %t250 = load i64, ptr %t249 %t251 = sub i64 0, %t250 %t252 = getelementptr inbounds %S.cimport.Number, ptr %a243, i32 0, i32 0 %t253 = getelementptr inbounds %S.cimport.CConst, ptr %t252, i32 0, i32 1 store i64 %t251, ptr %t253 br label %endif8773 endif8773: %t254 = load %S.cimport.Number, ptr %a243 store %S.cimport.Number %t254, ptr %a255 call void @finch.copy.S_cimport_Number(ptr %a256, ptr %a255) %t257 = load %S.cimport.Number, ptr %a256 ret %S.cimport.Number %t257 } define internal i32 @finch.cimport.visitTop(%S.C.CXCursor %p0, %S.C.CXCursor %p1, ptr %p2) { entry: %a1 = alloca %S.C.CXCursor, align 16 %a2 = alloca %S.C.CXCursor, align 16 %a3 = alloca ptr, align 16 %a5 = alloca ptr, align 16 store %S.C.CXCursor %p0, ptr %a1 store %S.C.CXCursor %p1, ptr %a2 store ptr %p2, ptr %a3 %t4 = load ptr, ptr %a3 store ptr %t4, ptr %a5 %t6 = load ptr, ptr %a5 %t7 = load %S.C.CXCursor, ptr %a1 call void @finch.cimport.visit(ptr %t6, %S.C.CXCursor %t7) ret i32 1 } define internal i32 @finch.c.cimport.visitTop(ptr byval(%S.C.CXCursor) align 8 %c0, ptr byval(%S.C.CXCursor) align 8 %c1, ptr %c2) { entry: %t1 = load %S.C.CXCursor, ptr %c0 %t2 = load %S.C.CXCursor, ptr %c1 %t3 = call i32 @finch.cimport.visitTop(%S.C.CXCursor %t1, %S.C.CXCursor %t2, ptr %c2) ret i32 %t3 } define internal void @finch.cimport.visit(ptr %p0, %S.C.CXCursor %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca %S.C.CXCursor, align 16 %a4 = alloca %S.C.CXCursor, align 16 %a6 = alloca [32 x i8], align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca %S.C.CXCursor, align 16 %a13 = alloca i32, align 16 %a16 = alloca %S.C.CXType, align 16 %a17 = alloca %S.C.CXType, align 16 %a19 = alloca %S.C.CXCursor, align 16 %a21 = alloca %S.C.CXType, align 16 %a23 = alloca %S.C.CXType, align 16 %a27 = alloca %S.C.CXCursor, align 16 %a29 = alloca %S.C.CXType, align 16 %a31 = alloca %S.C.CXCursor, align 16 %a33 = alloca [32 x i8], align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca i1, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a85 = alloca i32, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca { ptr, i64, i64 }, align 16 %a110 = alloca { ptr, i64, i64 }, align 16 %a117 = alloca { ptr, i64, i64 }, align 16 %a118 = alloca { ptr, i64, i64 }, align 16 %a121 = alloca %S.cimport.CFunc, align 16 %a123 = alloca %S.C.CXCursor, align 16 %a133 = alloca { ptr, i64, i64 }, align 16 %a134 = alloca i32, align 16 %a144 = alloca %S.cimport.CFunc, align 16 %a145 = alloca %S.cimport.CFunc, align 16 %a147 = alloca %S.C.CXType, align 16 %a148 = alloca %S.C.CXType, align 16 %a150 = alloca %S.C.CXCursor, align 16 %a152 = alloca %S.C.CXType, align 16 %a154 = alloca %S.C.CXType, align 16 %a165 = alloca { ptr, i64, i64 }, align 16 %a166 = alloca i32, align 16 %a176 = alloca %S.cimport.CFunc, align 16 %a177 = alloca %S.cimport.CFunc, align 16 %a180 = alloca %S.C.CXType, align 16 %a182 = alloca %S.C.CXType, align 16 %a185 = alloca %S.cimport.Mapped, align 16 %a191 = alloca %S.ast.Type, align 16 %a192 = alloca %S.ast.Type, align 16 %a197 = alloca { ptr, i64, i64 }, align 16 %a198 = alloca { ptr, i64, i64 }, align 16 %a201 = alloca %S.C.CXType, align 16 %a204 = alloca i64, align 16 %a206 = alloca i64, align 16 %a214 = alloca %S.C.CXType, align 16 %a216 = alloca %S.C.CXType, align 16 %a221 = alloca %S.cimport.Mapped, align 16 %a228 = alloca %S.ast.Type, align 16 %a229 = alloca %S.ast.Type, align 16 %a238 = alloca { ptr, i64, i64 }, align 16 %a239 = alloca { ptr, i64, i64 }, align 16 %a244 = alloca %S.C.CXType, align 16 %a254 = alloca { ptr, i64, i64 }, align 16 %a255 = alloca i32, align 16 %a265 = alloca %S.cimport.CFunc, align 16 %a266 = alloca %S.cimport.CFunc, align 16 %a271 = alloca %S.C.CXCursor, align 16 %a279 = alloca { ptr, i64, i64 }, align 16 %a284 = alloca %S.C.CXType, align 16 %a286 = alloca %S.C.CXCursor, align 16 %a289 = alloca %S.cimport.Mapped, align 16 %a299 = alloca { ptr, i64, i64 }, align 16 %a300 = alloca i32, align 16 %a310 = alloca %S.ast.Type, align 16 %a311 = alloca %S.ast.Type, align 16 %a316 = alloca %S.C.CXCursor, align 16 %a324 = alloca { ptr, i64, i64 }, align 16 %a325 = alloca { ptr, i64, i64 }, align 16 %a326 = alloca { ptr, i64, i64 }, align 16 %a332 = alloca %S.C.CXCursor, align 16 %a334 = alloca [32 x i8], align 16 %a337 = alloca { ptr, i64, i64 }, align 16 %a342 = alloca { ptr, i64, i64 }, align 16 %a351 = alloca { ptr, i64, i64 }, align 16 %a352 = alloca i32, align 16 %a362 = alloca { ptr, i64, i64 }, align 16 %a363 = alloca { ptr, i64, i64 }, align 16 %a368 = alloca %S.C.CXCursor, align 16 %a378 = alloca { ptr, i64, i64 }, align 16 %a383 = alloca %S.C.CXCursor, align 16 %a391 = alloca { ptr, i64, i64 }, align 16 %a392 = alloca i32, align 16 %a405 = alloca %S.C.CXCursor, align 16 %a409 = alloca %S.C.CXCursor, align 16 %a416 = alloca %S.cimport.Number, align 16 %a424 = alloca { ptr, i64, i64 }, align 16 %a436 = alloca { ptr, i64, i64 }, align 16 %a437 = alloca i32, align 16 %a447 = alloca %S.cimport.CConst, align 16 %a448 = alloca %S.cimport.CConst, align 16 store ptr %p0, ptr %a1 store %S.C.CXCursor %p1, ptr %a2 %t3 = load %S.C.CXCursor, ptr %a2 store %S.C.CXCursor %t3, ptr %a4 %t5 = call { i64, i64 } @clang_getCursorSpelling(ptr byval(%S.C.CXCursor) align 8 %a4) store { i64, i64 } %t5, ptr %a6 %t7 = load %S.C.CXString, ptr %a6 %t8 = call { ptr, i64, i64 } @finch.cimport.text(%S.C.CXString %t7) store { ptr, i64, i64 } %t8, ptr %a9 %t10 = load %S.C.CXCursor, ptr %a2 store %S.C.CXCursor %t10, ptr %a11 %t12 = call i32 @clang_getCursorKind(ptr byval(%S.C.CXCursor) align 8 %a11) store i32 %t12, ptr %a13 %t14 = load i32, ptr %a13 %t15 = icmp eq i32 %t14, 20 br i1 %t15, label %then8774, label %else8775 then8774: %t18 = load %S.C.CXCursor, ptr %a2 store %S.C.CXCursor %t18, ptr %a19 call void @clang_getTypedefDeclUnderlyingType(ptr sret(%S.C.CXType) align 16 %a17, ptr byval(%S.C.CXCursor) align 8 %a19) %t20 = load %S.C.CXType, ptr %a17 store %S.C.CXType %t20, ptr %a21 call void @clang_getCanonicalType(ptr sret(%S.C.CXType) align 16 %a16, ptr byval(%S.C.CXType) align 8 %a21) %t22 = load %S.C.CXType, ptr %a16 store %S.C.CXType %t22, ptr %a23 %t24 = getelementptr inbounds %S.C.CXType, ptr %a23, i32 0, i32 0 %t25 = load i32, ptr %t24 %t26 = icmp eq i32 %t25, 105 br i1 %t26, label %then8777, label %endif8779 then8777: %t28 = load %S.C.CXType, ptr %a23 store %S.C.CXType %t28, ptr %a29 call void @clang_getTypeDeclaration(ptr sret(%S.C.CXCursor) align 16 %a27, ptr byval(%S.C.CXType) align 8 %a29) %t30 = load %S.C.CXCursor, ptr %a27 store %S.C.CXCursor %t30, ptr %a31 %t32 = call { i64, i64 } @clang_getCursorUSR(ptr byval(%S.C.CXCursor) align 8 %a31) store { i64, i64 } %t32, ptr %a33 %t34 = load %S.C.CXString, ptr %a33 %t35 = call { ptr, i64, i64 } @finch.cimport.text(%S.C.CXString %t34) store { ptr, i64, i64 } %t35, ptr %a36 %t37 = load ptr, ptr %a1 %t38 = icmp eq ptr %t37, null br i1 %t38, label %panic8780, label %ok8781 panic8780: call void @finch_panic(ptr @.str.6132, i64 433, ptr @.str.6133) unreachable ok8781: %t39 = getelementptr inbounds %S.cimport.Importer, ptr %t37, i32 0, i32 3 %t40 = load { ptr, i64, i64 }, ptr %a36 store { ptr, i64, i64 } %t40, ptr %a41 %t42 = call i64 @finch_map_find(ptr %t39, ptr %a41, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t43 = icmp sge i64 %t42, 0 br label %logic.from8782 logic.from8782: br i1 %t43, label %logic.rhs8783, label %logic.end8784 logic.rhs8783: %t44 = load ptr, ptr %a1 %t45 = icmp eq ptr %t44, null br i1 %t45, label %panic8785, label %ok8786 panic8785: call void @finch_panic(ptr @.str.6134, i64 433, ptr @.str.6135) unreachable ok8786: %t46 = getelementptr inbounds %S.cimport.Importer, ptr %t44, i32 0, i32 0 %t47 = getelementptr inbounds %S.cimport.CImports, ptr %t46, i32 0, i32 3 %t48 = load ptr, ptr %a1 %t49 = icmp eq ptr %t48, null br i1 %t49, label %panic8787, label %ok8788 panic8787: call void @finch_panic(ptr @.str.6136, i64 433, ptr @.str.6137) unreachable ok8788: %t50 = getelementptr inbounds %S.cimport.Importer, ptr %t48, i32 0, i32 3 %t51 = load { ptr, i64, i64 }, ptr %a36 store { ptr, i64, i64 } %t51, ptr %a52 %t53 = call i64 @finch_map_find(ptr %t50, ptr %a52, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t54 = icmp slt i64 %t53, 0 br i1 %t54, label %map.missing8789, label %map.found8790 map.missing8789: store { ptr, i64, i64 } zeroinitializer, ptr %a55 store { ptr, i64, i64 } %t51, ptr %a56 call void @finch_buf_str(ptr %a55, ptr %a56, i32 1) call void @finch_map_missing(ptr @.str.6138, i64 433, ptr %a55) unreachable map.found8790: %t57 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t50, i32 0, i32 0 %t58 = load ptr, ptr %t57 %t59 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t58, i64 %t53 %t60 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t59, i32 0, i32 2 %t61 = load { ptr, i64, i64 }, ptr %t60 store { ptr, i64, i64 } %t61, ptr %a62 %t63 = call i64 @finch_map_find(ptr %t47, ptr %a62, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t64 = icmp sge i64 %t63, 0 br label %logic.rend8791 logic.rend8791: br label %logic.end8784 logic.end8784: %t65 = phi i1 [ false, %logic.from8782 ], [ %t64, %logic.rend8791 ] store i1 %t65, ptr %a66 %t67 = load i1, ptr %a66 %t68 = xor i1 %t67, true br label %logic.from8792 logic.from8792: br i1 %t68, label %logic.rhs8793, label %logic.end8794 logic.rhs8793: %t69 = load ptr, ptr %a1 %t70 = icmp eq ptr %t69, null br i1 %t70, label %panic8795, label %ok8796 panic8795: call void @finch_panic(ptr @.str.6139, i64 434, ptr @.str.6140) unreachable ok8796: %t71 = getelementptr inbounds %S.cimport.Importer, ptr %t69, i32 0, i32 0 %t72 = getelementptr inbounds %S.cimport.CImports, ptr %t71, i32 0, i32 3 %t73 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t73, ptr %a74 %t75 = call i64 @finch_map_find(ptr %t72, ptr %a74, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t76 = icmp sge i64 %t75, 0 %t77 = xor i1 %t76, true br label %logic.rend8797 logic.rend8797: br label %logic.end8794 logic.end8794: %t78 = phi i1 [ false, %logic.from8792 ], [ %t77, %logic.rend8797 ] br i1 %t78, label %then8798, label %endif8800 then8798: %t79 = load { ptr, i64, i64 }, ptr %a9 %t80 = load ptr, ptr %a1 %t81 = icmp eq ptr %t80, null br i1 %t81, label %panic8801, label %ok8802 panic8801: call void @finch_panic(ptr @.str.6141, i64 435, ptr @.str.6142) unreachable ok8802: %t82 = getelementptr inbounds %S.cimport.Importer, ptr %t80, i32 0, i32 3 %t83 = load { ptr, i64, i64 }, ptr %a36 store { ptr, i64, i64 } %t83, ptr %a84 store i32 0, ptr %a85 %t86 = call i64 @finch_map_slot(ptr %t82, ptr %a84, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a85) %t87 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t82, i32 0, i32 0 %t88 = load ptr, ptr %t87 %t89 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t88, i64 %t86 %t90 = load i32, ptr %a85 %t91 = icmp ne i32 %t90, 0 br i1 %t91, label %map.new8803, label %map.have8804 map.new8803: %t92 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t89, i32 0, i32 1 call void @finch_str_copy(ptr %t92, ptr %a84) %t93 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t89, i32 0, i32 2 store { ptr, i64, i64 } zeroinitializer, ptr %t93 br label %map.have8804 map.have8804: %t94 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t89, i32 0, i32 2 store { ptr, i64, i64 } %t79, ptr %a95 call void @finch_str_copy(ptr %a96, ptr %a95) %t97 = load { ptr, i64, i64 }, ptr %a96 store { ptr, i64, i64 } %t97, ptr %t94 br label %endif8800 endif8800: br label %endif8779 endif8779: br label %endif8776 else8775: %t98 = load i32, ptr %a13 %t99 = icmp eq i32 %t98, 8 br i1 %t99, label %then8805, label %else8806 then8805: %t100 = load ptr, ptr %a1 %t101 = icmp eq ptr %t100, null br i1 %t101, label %panic8808, label %ok8809 panic8808: call void @finch_panic(ptr @.str.6143, i64 439, ptr @.str.6144) unreachable ok8809: %t102 = getelementptr inbounds %S.cimport.Importer, ptr %t100, i32 0, i32 0 %t103 = getelementptr inbounds %S.cimport.CImports, ptr %t102, i32 0, i32 0 %t104 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t104, ptr %a105 %t106 = call i64 @finch_map_find(ptr %t103, ptr %a105, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t107 = icmp sge i64 %t106, 0 br i1 %t107, label %then8810, label %endif8812 then8810: ret void endif8812: %t108 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t108, ptr %a109 call void @finch_str_copy(ptr %a110, ptr %a109) %t111 = load { ptr, i64, i64 }, ptr %a110 %t112 = insertvalue %S.cimport.CFunc zeroinitializer, { ptr, i64, i64 } %t111, 0 %t113 = load ptr, ptr %a1 %t114 = icmp eq ptr %t113, null br i1 %t114, label %panic8813, label %ok8814 panic8813: call void @finch_panic(ptr @.str.6145, i64 442, ptr @.str.6146) unreachable ok8814: %t115 = getelementptr inbounds %S.cimport.Importer, ptr %t113, i32 0, i32 2 %t116 = load { ptr, i64, i64 }, ptr %t115 store { ptr, i64, i64 } %t116, ptr %a117 call void @finch_str_copy(ptr %a118, ptr %a117) %t119 = load { ptr, i64, i64 }, ptr %a118 %t120 = insertvalue %S.cimport.CFunc %t112, { ptr, i64, i64 } %t119, 1 store %S.cimport.CFunc %t120, ptr %a121 %t122 = load %S.C.CXCursor, ptr %a2 store %S.C.CXCursor %t122, ptr %a123 %t124 = call i32 @clang_Cursor_getStorageClass(ptr byval(%S.C.CXCursor) align 8 %a123) %t125 = icmp eq i32 %t124, 3 br i1 %t125, label %then8815, label %endif8817 then8815: %t126 = getelementptr inbounds %S.cimport.CFunc, ptr %a121, i32 0, i32 5 store { ptr, i64, i64 } { ptr @.str.6147, i64 62, i64 0 }, ptr %t126 %t127 = load %S.cimport.CFunc, ptr %a121 %t128 = load ptr, ptr %a1 %t129 = icmp eq ptr %t128, null br i1 %t129, label %panic8818, label %ok8819 panic8818: call void @finch_panic(ptr @.str.6148, i64 445, ptr @.str.6149) unreachable ok8819: %t130 = getelementptr inbounds %S.cimport.Importer, ptr %t128, i32 0, i32 0 %t131 = getelementptr inbounds %S.cimport.CImports, ptr %t130, i32 0, i32 0 %t132 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t132, ptr %a133 store i32 0, ptr %a134 %t135 = call i64 @finch_map_slot(ptr %t131, ptr %a133, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a134) %t136 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t131, i32 0, i32 0 %t137 = load ptr, ptr %t136 %t138 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t137, i64 %t135 %t139 = load i32, ptr %a134 %t140 = icmp ne i32 %t139, 0 br i1 %t140, label %map.new8820, label %map.have8821 map.new8820: %t141 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t138, i32 0, i32 1 call void @finch_str_copy(ptr %t141, ptr %a133) %t142 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t138, i32 0, i32 2 store %S.cimport.CFunc zeroinitializer, ptr %t142 br label %map.have8821 map.have8821: %t143 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t138, i32 0, i32 2 store %S.cimport.CFunc %t127, ptr %a144 call void @finch.copy.S_cimport_CFunc(ptr %a145, ptr %a144) %t146 = load %S.cimport.CFunc, ptr %a145 store %S.cimport.CFunc %t146, ptr %t143 ret void endif8817: %t149 = load %S.C.CXCursor, ptr %a2 store %S.C.CXCursor %t149, ptr %a150 call void @clang_getCursorType(ptr sret(%S.C.CXType) align 16 %a148, ptr byval(%S.C.CXCursor) align 8 %a150) %t151 = load %S.C.CXType, ptr %a148 store %S.C.CXType %t151, ptr %a152 call void @clang_getCanonicalType(ptr sret(%S.C.CXType) align 16 %a147, ptr byval(%S.C.CXType) align 8 %a152) %t153 = load %S.C.CXType, ptr %a147 store %S.C.CXType %t153, ptr %a154 %t155 = getelementptr inbounds %S.C.CXType, ptr %a154, i32 0, i32 0 %t156 = load i32, ptr %t155 %t157 = icmp eq i32 %t156, 110 br i1 %t157, label %then8822, label %endif8824 then8822: %t158 = getelementptr inbounds %S.cimport.CFunc, ptr %a121, i32 0, i32 5 store { ptr, i64, i64 } { ptr @.str.6150, i64 42, i64 0 }, ptr %t158 %t159 = load %S.cimport.CFunc, ptr %a121 %t160 = load ptr, ptr %a1 %t161 = icmp eq ptr %t160, null br i1 %t161, label %panic8825, label %ok8826 panic8825: call void @finch_panic(ptr @.str.6151, i64 451, ptr @.str.6152) unreachable ok8826: %t162 = getelementptr inbounds %S.cimport.Importer, ptr %t160, i32 0, i32 0 %t163 = getelementptr inbounds %S.cimport.CImports, ptr %t162, i32 0, i32 0 %t164 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t164, ptr %a165 store i32 0, ptr %a166 %t167 = call i64 @finch_map_slot(ptr %t163, ptr %a165, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a166) %t168 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t163, i32 0, i32 0 %t169 = load ptr, ptr %t168 %t170 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t169, i64 %t167 %t171 = load i32, ptr %a166 %t172 = icmp ne i32 %t171, 0 br i1 %t172, label %map.new8827, label %map.have8828 map.new8827: %t173 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t170, i32 0, i32 1 call void @finch_str_copy(ptr %t173, ptr %a165) %t174 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t170, i32 0, i32 2 store %S.cimport.CFunc zeroinitializer, ptr %t174 br label %map.have8828 map.have8828: %t175 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t170, i32 0, i32 2 store %S.cimport.CFunc %t159, ptr %a176 call void @finch.copy.S_cimport_CFunc(ptr %a177, ptr %a176) %t178 = load %S.cimport.CFunc, ptr %a177 store %S.cimport.CFunc %t178, ptr %t175 ret void endif8824: %t179 = load ptr, ptr %a1 %t181 = load %S.C.CXType, ptr %a154 store %S.C.CXType %t181, ptr %a182 call void @clang_getResultType(ptr sret(%S.C.CXType) align 16 %a180, ptr byval(%S.C.CXType) align 8 %a182) %t183 = load %S.C.CXType, ptr %a180 %t184 = call %S.cimport.Mapped @finch.cimport.mapType(ptr %t179, %S.C.CXType %t183, i1 true, i1 false) store %S.cimport.Mapped %t184, ptr %a185 %t186 = getelementptr inbounds %S.cimport.Mapped, ptr %a185, i32 0, i32 2 %t187 = load i1, ptr %t186 br i1 %t187, label %then8829, label %else8830 then8829: %t188 = getelementptr inbounds %S.cimport.Mapped, ptr %a185, i32 0, i32 0 %t189 = load %S.ast.Type, ptr %t188 %t190 = getelementptr inbounds %S.cimport.CFunc, ptr %a121, i32 0, i32 2 store %S.ast.Type %t189, ptr %a191 call void @finch.copy.S_ast_Type(ptr %a192, ptr %a191) %t193 = load %S.ast.Type, ptr %a192 store %S.ast.Type %t193, ptr %t190 br label %endif8831 else8830: %t194 = getelementptr inbounds %S.cimport.Mapped, ptr %a185, i32 0, i32 1 %t195 = load { ptr, i64, i64 }, ptr %t194 %t196 = getelementptr inbounds %S.cimport.CFunc, ptr %a121, i32 0, i32 5 store { ptr, i64, i64 } %t195, ptr %a197 call void @finch_str_copy(ptr %a198, ptr %a197) %t199 = load { ptr, i64, i64 }, ptr %a198 store { ptr, i64, i64 } %t199, ptr %t196 br label %endif8831 endif8831: %t200 = load %S.C.CXType, ptr %a154 store %S.C.CXType %t200, ptr %a201 %t202 = call i32 @clang_getNumArgTypes(ptr byval(%S.C.CXType) align 8 %a201) %t203 = sext i32 %t202 to i64 store i64 %t203, ptr %a204 %t205 = load i64, ptr %a204 store i64 0, ptr %a206 br label %for.cond8832 for.cond8832: %t207 = load i64, ptr %a206 %t208 = icmp slt i64 %t207, %t205 br i1 %t208, label %for.body8833, label %for.end8835 for.body8833: %t209 = getelementptr inbounds %S.cimport.CFunc, ptr %a121, i32 0, i32 5 %t210 = getelementptr inbounds { ptr, i64, i64 }, ptr %t209, i32 0, i32 1 %t211 = load i64, ptr %t210 %t212 = icmp sgt i64 %t211, 0 br i1 %t212, label %then8836, label %endif8838 then8836: br label %for.end8835 endif8838: %t213 = load ptr, ptr %a1 %t215 = load %S.C.CXType, ptr %a154 store %S.C.CXType %t215, ptr %a216 %t217 = load i64, ptr %a206 %t218 = trunc i64 %t217 to i32 call void @clang_getArgType(ptr sret(%S.C.CXType) align 16 %a214, ptr byval(%S.C.CXType) align 8 %a216, i32 %t218) %t219 = load %S.C.CXType, ptr %a214 %t220 = call %S.cimport.Mapped @finch.cimport.mapType(ptr %t213, %S.C.CXType %t219, i1 true, i1 true) store %S.cimport.Mapped %t220, ptr %a221 %t222 = getelementptr inbounds %S.cimport.Mapped, ptr %a221, i32 0, i32 2 %t223 = load i1, ptr %t222 br i1 %t223, label %then8839, label %else8840 then8839: %t224 = getelementptr inbounds %S.cimport.CFunc, ptr %a121, i32 0, i32 3 %t225 = getelementptr inbounds { ptr, i64, i64 }, ptr %t224, i32 0, i32 1 %t226 = getelementptr inbounds %S.cimport.Mapped, ptr %a221, i32 0, i32 0 %t227 = load %S.ast.Type, ptr %t226 store %S.ast.Type %t227, ptr %a228 call void @finch.copy.S_ast_Type(ptr %a229, ptr %a228) %t230 = load %S.ast.Type, ptr %a229 %t231 = load i64, ptr %t225 %t232 = add i64 %t231, 1 call void @finch_arr_reserve(ptr %t224, i64 %t232, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) %t233 = load ptr, ptr %t224 %t234 = getelementptr inbounds %S.ast.Type, ptr %t233, i64 %t231 store %S.ast.Type %t230, ptr %t234 store i64 %t232, ptr %t225 br label %endif8841 else8840: %t235 = getelementptr inbounds %S.cimport.Mapped, ptr %a221, i32 0, i32 1 %t236 = load { ptr, i64, i64 }, ptr %t235 %t237 = getelementptr inbounds %S.cimport.CFunc, ptr %a121, i32 0, i32 5 store { ptr, i64, i64 } %t236, ptr %a238 call void @finch_str_copy(ptr %a239, ptr %a238) %t240 = load { ptr, i64, i64 }, ptr %a239 store { ptr, i64, i64 } %t240, ptr %t237 br label %endif8841 endif8841: br label %for.step8834 for.step8834: %t241 = load i64, ptr %a206 %t242 = add i64 %t241, 1 store i64 %t242, ptr %a206 br label %for.cond8832 for.end8835: %t243 = load %S.C.CXType, ptr %a154 store %S.C.CXType %t243, ptr %a244 %t245 = call i32 @clang_isFunctionTypeVariadic(ptr byval(%S.C.CXType) align 8 %a244) %t246 = icmp ne i32 %t245, 0 %t247 = getelementptr inbounds %S.cimport.CFunc, ptr %a121, i32 0, i32 4 store i1 %t246, ptr %t247 %t248 = load %S.cimport.CFunc, ptr %a121 %t249 = load ptr, ptr %a1 %t250 = icmp eq ptr %t249, null br i1 %t250, label %panic8842, label %ok8843 panic8842: call void @finch_panic(ptr @.str.6153, i64 473, ptr @.str.6154) unreachable ok8843: %t251 = getelementptr inbounds %S.cimport.Importer, ptr %t249, i32 0, i32 0 %t252 = getelementptr inbounds %S.cimport.CImports, ptr %t251, i32 0, i32 0 %t253 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t253, ptr %a254 store i32 0, ptr %a255 %t256 = call i64 @finch_map_slot(ptr %t252, ptr %a254, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a255) %t257 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t252, i32 0, i32 0 %t258 = load ptr, ptr %t257 %t259 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t258, i64 %t256 %t260 = load i32, ptr %a255 %t261 = icmp ne i32 %t260, 0 br i1 %t261, label %map.new8844, label %map.have8845 map.new8844: %t262 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t259, i32 0, i32 1 call void @finch_str_copy(ptr %t262, ptr %a254) %t263 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t259, i32 0, i32 2 store %S.cimport.CFunc zeroinitializer, ptr %t263 br label %map.have8845 map.have8845: %t264 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t259, i32 0, i32 2 store %S.cimport.CFunc %t248, ptr %a265 call void @finch.copy.S_cimport_CFunc(ptr %a266, ptr %a265) %t267 = load %S.cimport.CFunc, ptr %a266 store %S.cimport.CFunc %t267, ptr %t264 br label %endif8807 else8806: %t268 = load i32, ptr %a13 %t269 = icmp eq i32 %t268, 9 br i1 %t269, label %then8846, label %else8847 then8846: %t270 = load %S.C.CXCursor, ptr %a2 store %S.C.CXCursor %t270, ptr %a271 %t272 = call i32 @clang_Cursor_getStorageClass(ptr byval(%S.C.CXCursor) align 8 %a271) %t273 = icmp ne i32 %t272, 2 br label %logic.from8849 logic.from8849: br i1 %t273, label %logic.end8851, label %logic.rhs8850 logic.rhs8850: %t274 = load ptr, ptr %a1 %t275 = icmp eq ptr %t274, null br i1 %t275, label %panic8852, label %ok8853 panic8852: call void @finch_panic(ptr @.str.6155, i64 475, ptr @.str.6156) unreachable ok8853: %t276 = getelementptr inbounds %S.cimport.Importer, ptr %t274, i32 0, i32 0 %t277 = getelementptr inbounds %S.cimport.CImports, ptr %t276, i32 0, i32 2 %t278 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t278, ptr %a279 %t280 = call i64 @finch_map_find(ptr %t277, ptr %a279, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.ast.Type }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t281 = icmp sge i64 %t280, 0 br label %logic.rend8854 logic.rend8854: br label %logic.end8851 logic.end8851: %t282 = phi i1 [ true, %logic.from8849 ], [ %t281, %logic.rend8854 ] br i1 %t282, label %then8855, label %endif8857 then8855: ret void endif8857: %t283 = load ptr, ptr %a1 %t285 = load %S.C.CXCursor, ptr %a2 store %S.C.CXCursor %t285, ptr %a286 call void @clang_getCursorType(ptr sret(%S.C.CXType) align 16 %a284, ptr byval(%S.C.CXCursor) align 8 %a286) %t287 = load %S.C.CXType, ptr %a284 %t288 = call %S.cimport.Mapped @finch.cimport.mapType(ptr %t283, %S.C.CXType %t287, i1 false, i1 false) store %S.cimport.Mapped %t288, ptr %a289 %t290 = getelementptr inbounds %S.cimport.Mapped, ptr %a289, i32 0, i32 2 %t291 = load i1, ptr %t290 br i1 %t291, label %then8858, label %endif8860 then8858: %t292 = getelementptr inbounds %S.cimport.Mapped, ptr %a289, i32 0, i32 0 %t293 = load %S.ast.Type, ptr %t292 %t294 = load ptr, ptr %a1 %t295 = icmp eq ptr %t294, null br i1 %t295, label %panic8861, label %ok8862 panic8861: call void @finch_panic(ptr @.str.6157, i64 480, ptr @.str.6158) unreachable ok8862: %t296 = getelementptr inbounds %S.cimport.Importer, ptr %t294, i32 0, i32 0 %t297 = getelementptr inbounds %S.cimport.CImports, ptr %t296, i32 0, i32 2 %t298 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t298, ptr %a299 store i32 0, ptr %a300 %t301 = call i64 @finch_map_slot(ptr %t297, ptr %a299, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.ast.Type }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a300) %t302 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t297, i32 0, i32 0 %t303 = load ptr, ptr %t302 %t304 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t303, i64 %t301 %t305 = load i32, ptr %a300 %t306 = icmp ne i32 %t305, 0 br i1 %t306, label %map.new8863, label %map.have8864 map.new8863: %t307 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t304, i32 0, i32 1 call void @finch_str_copy(ptr %t307, ptr %a299) %t308 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t304, i32 0, i32 2 store %S.ast.Type zeroinitializer, ptr %t308 br label %map.have8864 map.have8864: %t309 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t304, i32 0, i32 2 store %S.ast.Type %t293, ptr %a310 call void @finch.copy.S_ast_Type(ptr %a311, ptr %a310) %t312 = load %S.ast.Type, ptr %a311 store %S.ast.Type %t312, ptr %t309 br label %endif8860 endif8860: br label %endif8848 else8847: %t313 = load i32, ptr %a13 %t314 = icmp eq i32 %t313, 2 br i1 %t314, label %then8865, label %else8866 then8865: %t315 = load %S.C.CXCursor, ptr %a2 store %S.C.CXCursor %t315, ptr %a316 %t317 = call i32 @clang_isCursorDefinition(ptr byval(%S.C.CXCursor) align 8 %a316) %t318 = icmp ne i32 %t317, 0 br label %logic.from8868 logic.from8868: br i1 %t318, label %logic.rhs8869, label %logic.end8870 logic.rhs8869: %t319 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1 %t320 = load i64, ptr %t319 %t321 = icmp sgt i64 %t320, 0 br label %logic.rend8871 logic.rend8871: br label %logic.end8870 logic.end8870: %t322 = phi i1 [ false, %logic.from8868 ], [ %t321, %logic.rend8871 ] br label %logic.from8872 logic.from8872: br i1 %t322, label %logic.rhs8873, label %logic.end8874 logic.rhs8873: %t323 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t323, ptr %a324 store { ptr, i64, i64 } { ptr @.str.6160, i64 1, i64 0 }, ptr %a326 %t327 = call i64 @finch_str_find(ptr %a324, ptr %a326) %t328 = icmp sge i64 %t327, 0 %t329 = xor i1 %t328, true br label %logic.rend8875 logic.rend8875: br label %logic.end8874 logic.end8874: %t330 = phi i1 [ false, %logic.from8872 ], [ %t329, %logic.rend8875 ] br i1 %t330, label %then8876, label %endif8878 then8876: %t331 = load %S.C.CXCursor, ptr %a2 store %S.C.CXCursor %t331, ptr %a332 %t333 = call { i64, i64 } @clang_getCursorUSR(ptr byval(%S.C.CXCursor) align 8 %a332) store { i64, i64 } %t333, ptr %a334 %t335 = load %S.C.CXString, ptr %a334 %t336 = call { ptr, i64, i64 } @finch.cimport.text(%S.C.CXString %t335) store { ptr, i64, i64 } %t336, ptr %a337 %t338 = load ptr, ptr %a1 %t339 = icmp eq ptr %t338, null br i1 %t339, label %panic8879, label %ok8880 panic8879: call void @finch_panic(ptr @.str.6161, i64 485, ptr @.str.6162) unreachable ok8880: %t340 = getelementptr inbounds %S.cimport.Importer, ptr %t338, i32 0, i32 3 %t341 = load { ptr, i64, i64 }, ptr %a337 store { ptr, i64, i64 } %t341, ptr %a342 %t343 = call i64 @finch_map_find(ptr %t340, ptr %a342, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t344 = icmp sge i64 %t343, 0 %t345 = xor i1 %t344, true br i1 %t345, label %then8881, label %endif8883 then8881: %t346 = load { ptr, i64, i64 }, ptr %a9 %t347 = load ptr, ptr %a1 %t348 = icmp eq ptr %t347, null br i1 %t348, label %panic8884, label %ok8885 panic8884: call void @finch_panic(ptr @.str.6163, i64 486, ptr @.str.6164) unreachable ok8885: %t349 = getelementptr inbounds %S.cimport.Importer, ptr %t347, i32 0, i32 3 %t350 = load { ptr, i64, i64 }, ptr %a337 store { ptr, i64, i64 } %t350, ptr %a351 store i32 0, ptr %a352 %t353 = call i64 @finch_map_slot(ptr %t349, ptr %a351, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a352) %t354 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t349, i32 0, i32 0 %t355 = load ptr, ptr %t354 %t356 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t355, i64 %t353 %t357 = load i32, ptr %a352 %t358 = icmp ne i32 %t357, 0 br i1 %t358, label %map.new8886, label %map.have8887 map.new8886: %t359 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t356, i32 0, i32 1 call void @finch_str_copy(ptr %t359, ptr %a351) %t360 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t356, i32 0, i32 2 store { ptr, i64, i64 } zeroinitializer, ptr %t360 br label %map.have8887 map.have8887: %t361 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t356, i32 0, i32 2 store { ptr, i64, i64 } %t346, ptr %a362 call void @finch_str_copy(ptr %a363, ptr %a362) %t364 = load { ptr, i64, i64 }, ptr %a363 store { ptr, i64, i64 } %t364, ptr %t361 br label %endif8883 endif8883: br label %endif8878 endif8878: br label %endif8867 else8866: %t365 = load i32, ptr %a13 %t366 = icmp eq i32 %t365, 5 br i1 %t366, label %then8888, label %else8889 then8888: %t367 = load %S.C.CXCursor, ptr %a2 store %S.C.CXCursor %t367, ptr %a368 %t369 = load ptr, ptr %a1 %t370 = call i32 @clang_visitChildren(ptr byval(%S.C.CXCursor) align 8 %a368, ptr @finch.c.cimport.visitTop, ptr %t369) br label %endif8890 else8889: %t371 = load i32, ptr %a13 %t372 = icmp eq i32 %t371, 7 br i1 %t372, label %then8891, label %else8892 then8891: %t373 = load ptr, ptr %a1 %t374 = icmp eq ptr %t373, null br i1 %t374, label %panic8894, label %ok8895 panic8894: call void @finch_panic(ptr @.str.6165, i64 492, ptr @.str.6166) unreachable ok8895: %t375 = getelementptr inbounds %S.cimport.Importer, ptr %t373, i32 0, i32 0 %t376 = getelementptr inbounds %S.cimport.CImports, ptr %t375, i32 0, i32 1 %t377 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t377, ptr %a378 %t379 = call i64 @finch_map_find(ptr %t376, ptr %a378, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t380 = icmp sge i64 %t379, 0 %t381 = xor i1 %t380, true br i1 %t381, label %then8896, label %endif8898 then8896: %t382 = load %S.C.CXCursor, ptr %a2 store %S.C.CXCursor %t382, ptr %a383 %t384 = call i64 @clang_getEnumConstantDeclValue(ptr byval(%S.C.CXCursor) align 8 %a383) %t385 = insertvalue %S.cimport.CConst zeroinitializer, i64 %t384, 1 %t386 = load ptr, ptr %a1 %t387 = icmp eq ptr %t386, null br i1 %t387, label %panic8899, label %ok8900 panic8899: call void @finch_panic(ptr @.str.6167, i64 493, ptr @.str.6168) unreachable ok8900: %t388 = getelementptr inbounds %S.cimport.Importer, ptr %t386, i32 0, i32 0 %t389 = getelementptr inbounds %S.cimport.CImports, ptr %t388, i32 0, i32 1 %t390 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t390, ptr %a391 store i32 0, ptr %a392 %t393 = call i64 @finch_map_slot(ptr %t389, ptr %a391, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a392) %t394 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t389, i32 0, i32 0 %t395 = load ptr, ptr %t394 %t396 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t395, i64 %t393 %t397 = load i32, ptr %a392 %t398 = icmp ne i32 %t397, 0 br i1 %t398, label %map.new8901, label %map.have8902 map.new8901: %t399 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t396, i32 0, i32 1 call void @finch_str_copy(ptr %t399, ptr %a391) %t400 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t396, i32 0, i32 2 store %S.cimport.CConst zeroinitializer, ptr %t400 br label %map.have8902 map.have8902: %t401 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t396, i32 0, i32 2 store %S.cimport.CConst %t385, ptr %t401 br label %endif8898 endif8898: br label %endif8893 else8892: %t402 = load i32, ptr %a13 %t403 = icmp eq i32 %t402, 501 br i1 %t403, label %then8903, label %endif8905 then8903: %t404 = load %S.C.CXCursor, ptr %a2 store %S.C.CXCursor %t404, ptr %a405 %t406 = call i32 @clang_Cursor_isMacroBuiltin(ptr byval(%S.C.CXCursor) align 8 %a405) %t407 = icmp ne i32 %t406, 0 br label %logic.from8906 logic.from8906: br i1 %t407, label %logic.end8908, label %logic.rhs8907 logic.rhs8907: %t408 = load %S.C.CXCursor, ptr %a2 store %S.C.CXCursor %t408, ptr %a409 %t410 = call i32 @clang_Cursor_isMacroFunctionLike(ptr byval(%S.C.CXCursor) align 8 %a409) %t411 = icmp ne i32 %t410, 0 br label %logic.rend8909 logic.rend8909: br label %logic.end8908 logic.end8908: %t412 = phi i1 [ true, %logic.from8906 ], [ %t411, %logic.rend8909 ] br i1 %t412, label %then8910, label %endif8912 then8910: ret void endif8912: %t413 = load ptr, ptr %a1 %t414 = load %S.C.CXCursor, ptr %a2 %t415 = call %S.cimport.Number @finch.cimport.macroValue(ptr %t413, %S.C.CXCursor %t414) store %S.cimport.Number %t415, ptr %a416 %t417 = getelementptr inbounds %S.cimport.Number, ptr %a416, i32 0, i32 1 %t418 = load i1, ptr %t417 br label %logic.from8913 logic.from8913: br i1 %t418, label %logic.rhs8914, label %logic.end8915 logic.rhs8914: %t419 = load ptr, ptr %a1 %t420 = icmp eq ptr %t419, null br i1 %t420, label %panic8916, label %ok8917 panic8916: call void @finch_panic(ptr @.str.6169, i64 500, ptr @.str.6170) unreachable ok8917: %t421 = getelementptr inbounds %S.cimport.Importer, ptr %t419, i32 0, i32 0 %t422 = getelementptr inbounds %S.cimport.CImports, ptr %t421, i32 0, i32 1 %t423 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t423, ptr %a424 %t425 = call i64 @finch_map_find(ptr %t422, ptr %a424, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t426 = icmp sge i64 %t425, 0 %t427 = xor i1 %t426, true br label %logic.rend8918 logic.rend8918: br label %logic.end8915 logic.end8915: %t428 = phi i1 [ false, %logic.from8913 ], [ %t427, %logic.rend8918 ] br i1 %t428, label %then8919, label %endif8921 then8919: %t429 = getelementptr inbounds %S.cimport.Number, ptr %a416, i32 0, i32 0 %t430 = load %S.cimport.CConst, ptr %t429 %t431 = load ptr, ptr %a1 %t432 = icmp eq ptr %t431, null br i1 %t432, label %panic8922, label %ok8923 panic8922: call void @finch_panic(ptr @.str.6171, i64 501, ptr @.str.6172) unreachable ok8923: %t433 = getelementptr inbounds %S.cimport.Importer, ptr %t431, i32 0, i32 0 %t434 = getelementptr inbounds %S.cimport.CImports, ptr %t433, i32 0, i32 1 %t435 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t435, ptr %a436 store i32 0, ptr %a437 %t438 = call i64 @finch_map_slot(ptr %t434, ptr %a436, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a437) %t439 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t434, i32 0, i32 0 %t440 = load ptr, ptr %t439 %t441 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t440, i64 %t438 %t442 = load i32, ptr %a437 %t443 = icmp ne i32 %t442, 0 br i1 %t443, label %map.new8924, label %map.have8925 map.new8924: %t444 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t441, i32 0, i32 1 call void @finch_str_copy(ptr %t444, ptr %a436) %t445 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t441, i32 0, i32 2 store %S.cimport.CConst zeroinitializer, ptr %t445 br label %map.have8925 map.have8925: %t446 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t441, i32 0, i32 2 store %S.cimport.CConst %t430, ptr %a447 call void @finch.copy.S_cimport_CConst(ptr %a448, ptr %a447) %t449 = load %S.cimport.CConst, ptr %a448 store %S.cimport.CConst %t449, ptr %t446 br label %endif8921 endif8921: br label %endif8905 endif8905: br label %endif8893 endif8893: br label %endif8890 endif8890: br label %endif8867 endif8867: br label %endif8848 endif8848: br label %endif8807 endif8807: br label %endif8776 endif8776: ret void } define internal { i1, %S.cimport.CImports, { ptr, i64, i64 } } @finch.cimport.importHeaders({ ptr, i64, i64 } %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, i1 %p3, { ptr, i64, i64 } %p4) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca i1, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca %S.cimport.Importer, align 16 %a12 = alloca %S.cimport.CImports, align 16 %a13 = alloca %S.cimport.CImports, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca i64, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca i64, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca i64, align 16 %a113 = alloca ptr, align 16 %a114 = alloca i64, align 16 %a122 = alloca %S.cimport.Header, align 16 %a125 = alloca { ptr, i64, i64 }, align 16 %a126 = alloca { ptr, i64, i64 }, align 16 %a127 = alloca { ptr, i64, i64 }, align 16 %a129 = alloca { ptr, i64, i64 }, align 16 %a130 = alloca { ptr, i64, i64 }, align 16 %a131 = alloca { ptr, i64, i64 }, align 16 %a133 = alloca { ptr, i64, i64 }, align 16 %a146 = alloca %S.C.CXUnsavedFile, align 16 %a147 = alloca ptr, align 16 %a149 = alloca i64, align 16 %a162 = alloca i32, align 16 %a170 = alloca { ptr, i64, i64 }, align 16 %a171 = alloca { ptr, i64, i64 }, align 16 %a172 = alloca { ptr, i64, i64 }, align 16 %a176 = alloca { ptr, i64, i64 }, align 16 %a177 = alloca { ptr, i64, i64 }, align 16 %a178 = alloca { ptr, i64, i64 }, align 16 %a180 = alloca { ptr, i64, i64 }, align 16 %a181 = alloca { ptr, i64, i64 }, align 16 %a182 = alloca { ptr, i64, i64 }, align 16 %a188 = alloca i64, align 16 %a190 = alloca i64, align 16 %a197 = alloca ptr, align 16 %a203 = alloca [32 x i8], align 16 %a206 = alloca { ptr, i64, i64 }, align 16 %a209 = alloca { ptr, i64, i64 }, align 16 %a210 = alloca { ptr, i64, i64 }, align 16 %a211 = alloca { ptr, i64, i64 }, align 16 %a215 = alloca { ptr, i64, i64 }, align 16 %a216 = alloca { ptr, i64, i64 }, align 16 %a218 = alloca { ptr, i64, i64 }, align 16 %a219 = alloca { ptr, i64, i64 }, align 16 %a223 = alloca { ptr, i64, i64 }, align 16 %a224 = alloca { ptr, i64, i64 }, align 16 %a225 = alloca { ptr, i64, i64 }, align 16 %a229 = alloca { ptr, i64, i64 }, align 16 %a233 = alloca { ptr, i64, i64 }, align 16 %a234 = alloca { ptr, i64, i64 }, align 16 %a239 = alloca { ptr, i64, i64 }, align 16 %a240 = alloca { ptr, i64, i64 }, align 16 %a241 = alloca { ptr, i64, i64 }, align 16 %a245 = alloca { ptr, i64, i64 }, align 16 %a246 = alloca { ptr, i64, i64 }, align 16 %a247 = alloca { ptr, i64, i64 }, align 16 %a249 = alloca { ptr, i64, i64 }, align 16 %a250 = alloca { ptr, i64, i64 }, align 16 %a251 = alloca { ptr, i64, i64 }, align 16 %a256 = alloca { ptr, i64, i64 }, align 16 %a257 = alloca { ptr, i64, i64 }, align 16 %a258 = alloca { ptr, i64, i64 }, align 16 %a261 = alloca { ptr, i64, i64 }, align 16 %a262 = alloca { ptr, i64, i64 }, align 16 %a263 = alloca { ptr, i64, i64 }, align 16 %a265 = alloca { ptr, i64, i64 }, align 16 %a266 = alloca { ptr, i64, i64 }, align 16 %a267 = alloca { ptr, i64, i64 }, align 16 %a271 = alloca { ptr, i64, i64 }, align 16 %a272 = alloca { ptr, i64, i64 }, align 16 %a273 = alloca { ptr, i64, i64 }, align 16 %a275 = alloca { ptr, i64, i64 }, align 16 %a276 = alloca { ptr, i64, i64 }, align 16 %a277 = alloca { ptr, i64, i64 }, align 16 %a282 = alloca { ptr, i64, i64 }, align 16 %a283 = alloca { ptr, i64, i64 }, align 16 %a284 = alloca { ptr, i64, i64 }, align 16 %a288 = alloca { ptr, i64, i64 }, align 16 %a289 = alloca { ptr, i64, i64 }, align 16 %a290 = alloca { ptr, i64, i64 }, align 16 %a292 = alloca { ptr, i64, i64 }, align 16 %a293 = alloca { ptr, i64, i64 }, align 16 %a294 = alloca { ptr, i64, i64 }, align 16 %a297 = alloca { ptr, i64, i64 }, align 16 %a298 = alloca { ptr, i64, i64 }, align 16 %a299 = alloca { ptr, i64, i64 }, align 16 %a310 = alloca { ptr, i64, i64 }, align 16 %a311 = alloca { ptr, i64, i64 }, align 16 %a313 = alloca %S.C.CXCursor, align 16 %a316 = alloca %S.C.CXCursor, align 16 %a324 = alloca %S.cimport.CImports, align 16 %a325 = alloca %S.cimport.CImports, align 16 store { ptr, i64, i64 } %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 store i1 %p3, ptr %a4 store { ptr, i64, i64 } %p4, ptr %a5 store %S.cimport.Importer zeroinitializer, ptr %a6 %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t8 = load i64, ptr %t7 %t9 = icmp eq i64 %t8, 0 br i1 %t9, label %then8926, label %endif8928 then8926: %t10 = getelementptr inbounds %S.cimport.Importer, ptr %a6, i32 0, i32 0 %t11 = load %S.cimport.CImports, ptr %t10 store %S.cimport.CImports %t11, ptr %a12 call void @finch.copy.S_cimport_CImports(ptr %a13, ptr %a12) %t14 = load %S.cimport.CImports, ptr %a13 %t15 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 %t16 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t15, %S.cimport.CImports %t14, 1 ret { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t16 endif8928: %t17 = mul i64 3, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t18 = call ptr @finch_alloc(i64 %t17) %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t18, i64 0 store { ptr, i64, i64 } { ptr @.str.6173, i64 2, i64 0 }, ptr %t19 %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t18, i64 1 store { ptr, i64, i64 } { ptr @.str.6174, i64 1, i64 0 }, ptr %t20 %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t18, i64 2 store { ptr, i64, i64 } { ptr @.str.6175, i64 10, i64 0 }, ptr %t21 %t22 = insertvalue { ptr, i64, i64 } undef, ptr %t18, 0 %t23 = insertvalue { ptr, i64, i64 } %t22, i64 3, 1 %t24 = insertvalue { ptr, i64, i64 } %t23, i64 3, 2 store { ptr, i64, i64 } %t24, ptr %a25 %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 %t27 = load i64, ptr %t26 %t28 = icmp sgt i64 %t27, 0 br i1 %t28, label %then8929, label %endif8931 then8929: %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %a25, i32 0, i32 1 %t30 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } { ptr @.str.6176, i64 9, i64 0 }, ptr %a32 store { ptr, i64, i64 } %t30, ptr %a33 call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33) %t34 = load { ptr, i64, i64 }, ptr %a31 %t35 = load i64, ptr %t29 %t36 = add i64 %t35, 1 call void @finch_arr_reserve(ptr %a25, i64 %t36, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t37 = load ptr, ptr %a25 %t38 = getelementptr inbounds { ptr, i64, i64 }, ptr %t37, i64 %t35 store { ptr, i64, i64 } %t34, ptr %t38 store i64 %t36, ptr %t29 br label %endif8931 endif8931: %t39 = load i1, ptr %a4 br i1 %t39, label %then8932, label %endif8934 then8932: %t40 = getelementptr inbounds { ptr, i64, i64 }, ptr %a25, i32 0, i32 1 %t41 = load i64, ptr %t40 %t42 = add i64 %t41, 1 call void @finch_arr_reserve(ptr %a25, i64 %t42, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t43 = load ptr, ptr %a25 %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t43, i64 %t41 store { ptr, i64, i64 } { ptr @.str.6177, i64 19, i64 0 }, ptr %t44 store i64 %t42, ptr %t40 br label %endif8934 endif8934: store i64 0, ptr %a45 br label %each.cond8935 each.cond8935: %t46 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t47 = load i64, ptr %t46 %t48 = load i64, ptr %a45 %t49 = icmp slt i64 %t48, %t47 br i1 %t49, label %each.body8936, label %each.end8938 each.body8936: %t50 = load ptr, ptr %a2 %t51 = getelementptr inbounds { ptr, i64, i64 }, ptr %t50, i64 %t48 %t52 = load { ptr, i64, i64 }, ptr %t51 store { ptr, i64, i64 } %t52, ptr %a53 %t54 = getelementptr inbounds { ptr, i64, i64 }, ptr %a25, i32 0, i32 1 %t55 = load { ptr, i64, i64 }, ptr %a53 store { ptr, i64, i64 } { ptr @.str.6178, i64 2, i64 0 }, ptr %a57 store { ptr, i64, i64 } %t55, ptr %a58 call void @finch_str_concat(ptr %a56, ptr %a57, ptr %a58) %t59 = load { ptr, i64, i64 }, ptr %a56 %t60 = load i64, ptr %t54 %t61 = add i64 %t60, 1 call void @finch_arr_reserve(ptr %a25, i64 %t61, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t62 = load ptr, ptr %a25 %t63 = getelementptr inbounds { ptr, i64, i64 }, ptr %t62, i64 %t60 store { ptr, i64, i64 } %t59, ptr %t63 store i64 %t61, ptr %t54 br label %each.step8937 each.step8937: %t64 = load i64, ptr %a45 %t65 = add i64 %t64, 1 store i64 %t65, ptr %a45 br label %each.cond8935 each.end8938: %t66 = load { ptr, i64, i64 }, ptr %a5 %t67 = call { ptr, i64, i64 } @finch.cimport.systemIncludeArgs({ ptr, i64, i64 } %t66) store { ptr, i64, i64 } %t67, ptr %a68 store i64 0, ptr %a69 br label %each.cond8939 each.cond8939: %t70 = getelementptr inbounds { ptr, i64, i64 }, ptr %a68, i32 0, i32 1 %t71 = load i64, ptr %t70 %t72 = load i64, ptr %a69 %t73 = icmp slt i64 %t72, %t71 br i1 %t73, label %each.body8940, label %each.end8942 each.body8940: %t74 = load ptr, ptr %a68 %t75 = getelementptr inbounds { ptr, i64, i64 }, ptr %t74, i64 %t72 %t76 = load { ptr, i64, i64 }, ptr %t75 store { ptr, i64, i64 } %t76, ptr %a77 %t78 = getelementptr inbounds { ptr, i64, i64 }, ptr %a25, i32 0, i32 1 %t79 = load { ptr, i64, i64 }, ptr %a77 store { ptr, i64, i64 } %t79, ptr %a80 call void @finch_str_copy(ptr %a81, ptr %a80) %t82 = load { ptr, i64, i64 }, ptr %a81 %t83 = load i64, ptr %t78 %t84 = add i64 %t83, 1 call void @finch_arr_reserve(ptr %a25, i64 %t84, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t85 = load ptr, ptr %a25 %t86 = getelementptr inbounds { ptr, i64, i64 }, ptr %t85, i64 %t83 store { ptr, i64, i64 } %t82, ptr %t86 store i64 %t84, ptr %t78 br label %each.step8941 each.step8941: %t87 = load i64, ptr %a69 %t88 = add i64 %t87, 1 store i64 %t88, ptr %a69 br label %each.cond8939 each.end8942: store { ptr, i64, i64 } zeroinitializer, ptr %a89 %t90 = getelementptr inbounds { ptr, i64, i64 }, ptr %a25, i32 0, i32 1 %t91 = load i64, ptr %t90 store i64 0, ptr %a92 br label %for.cond8943 for.cond8943: %t93 = load i64, ptr %a92 %t94 = icmp slt i64 %t93, %t91 br i1 %t94, label %for.body8944, label %for.end8946 for.body8944: %t95 = getelementptr inbounds { ptr, i64, i64 }, ptr %a89, i32 0, i32 1 %t96 = load i64, ptr %a92 %t97 = load { ptr, i64, i64 }, ptr %a25 %t98 = extractvalue { ptr, i64, i64 } %t97, 1 %t99 = icmp uge i64 %t96, %t98 br i1 %t99, label %range8947, label %inrange8948 range8947: call void @finch_panic_index(ptr @.str.6179, i64 528, i64 %t96, i64 %t98) unreachable inrange8948: %t100 = extractvalue { ptr, i64, i64 } %t97, 0 %t101 = getelementptr inbounds { ptr, i64, i64 }, ptr %t100, i64 %t96 %t102 = load { ptr, i64, i64 }, ptr %t101 %t103 = extractvalue { ptr, i64, i64 } %t102, 0 %t104 = icmp eq ptr %t103, null %t105 = select i1 %t104, ptr @.str.6180, ptr %t103 %t106 = load i64, ptr %t95 %t107 = add i64 %t106, 1 call void @finch_arr_reserve(ptr %a89, i64 %t107, i64 ptrtoint (ptr getelementptr (ptr, ptr null, i32 1) to i64)) %t108 = load ptr, ptr %a89 %t109 = getelementptr inbounds ptr, ptr %t108, i64 %t106 store ptr %t105, ptr %t109 store i64 %t107, ptr %t95 br label %for.step8945 for.step8945: %t110 = load i64, ptr %a92 %t111 = add i64 %t110, 1 store i64 %t111, ptr %a92 br label %for.cond8943 for.end8946: %t112 = call ptr @clang_createIndex(i32 0, i32 0) store ptr %t112, ptr %a113 store i64 0, ptr %a114 br label %each.cond8949 each.cond8949: %t115 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t116 = load i64, ptr %t115 %t117 = load i64, ptr %a114 %t118 = icmp slt i64 %t117, %t116 br i1 %t118, label %each.body8950, label %each.end8952 each.body8950: %t119 = load ptr, ptr %a1 %t120 = getelementptr inbounds %S.cimport.Header, ptr %t119, i64 %t117 %t121 = load %S.cimport.Header, ptr %t120 store %S.cimport.Header %t121, ptr %a122 %t123 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 0 %t124 = load { ptr, i64, i64 }, ptr %t123 store { ptr, i64, i64 } { ptr @.str.6181, i64 10, i64 0 }, ptr %a126 store { ptr, i64, i64 } %t124, ptr %a127 call void @finch_str_concat(ptr %a125, ptr %a126, ptr %a127) %t128 = load { ptr, i64, i64 }, ptr %a125 store { ptr, i64, i64 } %t128, ptr %a130 store { ptr, i64, i64 } { ptr @.str.6182, i64 2, i64 0 }, ptr %a131 call void @finch_str_concat(ptr %a129, ptr %a130, ptr %a131) %t132 = load { ptr, i64, i64 }, ptr %a129 store { ptr, i64, i64 } %t132, ptr %a133 %t134 = extractvalue { ptr, i64, i64 } { ptr @.str.6183, i64 14, i64 0 }, 0 %t135 = icmp eq ptr %t134, null %t136 = select i1 %t135, ptr @.str.6184, ptr %t134 %t137 = insertvalue %S.C.CXUnsavedFile zeroinitializer, ptr %t136, 0 %t138 = load { ptr, i64, i64 }, ptr %a133 %t139 = extractvalue { ptr, i64, i64 } %t138, 0 %t140 = icmp eq ptr %t139, null %t141 = select i1 %t140, ptr @.str.6185, ptr %t139 %t142 = insertvalue %S.C.CXUnsavedFile %t137, ptr %t141, 1 %t143 = getelementptr inbounds { ptr, i64, i64 }, ptr %a133, i32 0, i32 1 %t144 = load i64, ptr %t143 %t145 = insertvalue %S.C.CXUnsavedFile %t142, i64 %t144, 2 store %S.C.CXUnsavedFile %t145, ptr %a146 store ptr null, ptr %a147 %t148 = or i64 1, 64 store i64 %t148, ptr %a149 %t150 = load ptr, ptr %a113 %t151 = extractvalue { ptr, i64, i64 } { ptr @.str.6186, i64 14, i64 0 }, 0 %t152 = icmp eq ptr %t151, null %t153 = select i1 %t152, ptr @.str.6187, ptr %t151 %t154 = load { ptr, i64, i64 }, ptr %a89 %t155 = extractvalue { ptr, i64, i64 } %t154, 0 %t156 = getelementptr inbounds { ptr, i64, i64 }, ptr %a89, i32 0, i32 1 %t157 = load i64, ptr %t156 %t158 = trunc i64 %t157 to i32 %t159 = load i64, ptr %a149 %t160 = trunc i64 %t159 to i32 %t161 = call i32 @clang_parseTranslationUnit2(ptr %t150, ptr %t153, ptr %t155, i32 %t158, ptr %a146, i32 1, i32 %t160, ptr %a147) store i32 %t161, ptr %a162 %t163 = load i32, ptr %a162 %t164 = icmp ne i32 %t163, 0 br label %logic.from8953 logic.from8953: br i1 %t164, label %logic.end8955, label %logic.rhs8954 logic.rhs8954: %t165 = load ptr, ptr %a147 %t166 = icmp eq ptr %t165, null br label %logic.rend8956 logic.rend8956: br label %logic.end8955 logic.end8955: %t167 = phi i1 [ true, %logic.from8953 ], [ %t166, %logic.rend8956 ] br i1 %t167, label %then8957, label %endif8959 then8957: %t168 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 1 %t169 = load { ptr, i64, i64 }, ptr %t168 store { ptr, i64, i64 } %t169, ptr %a171 store { ptr, i64, i64 } { ptr @.str.6188, i64 33, i64 0 }, ptr %a172 call void @finch_str_concat(ptr %a170, ptr %a171, ptr %a172) %t173 = load { ptr, i64, i64 }, ptr %a170 %t174 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 0 %t175 = load { ptr, i64, i64 }, ptr %t174 store { ptr, i64, i64 } %t173, ptr %a177 store { ptr, i64, i64 } %t175, ptr %a178 call void @finch_str_concat(ptr %a176, ptr %a177, ptr %a178) %t179 = load { ptr, i64, i64 }, ptr %a176 store { ptr, i64, i64 } %t179, ptr %a181 store { ptr, i64, i64 } { ptr @.str.6189, i64 1, i64 0 }, ptr %a182 call void @finch_str_concat(ptr %a180, ptr %a181, ptr %a182) %t183 = load { ptr, i64, i64 }, ptr %a180 %t184 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t183, 2 ret { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t184 endif8959: %t185 = load ptr, ptr %a147 %t186 = call i32 @clang_getNumDiagnostics(ptr %t185) %t187 = zext i32 %t186 to i64 store i64 %t187, ptr %a188 %t189 = load i64, ptr %a188 store i64 0, ptr %a190 br label %for.cond8960 for.cond8960: %t191 = load i64, ptr %a190 %t192 = icmp slt i64 %t191, %t189 br i1 %t192, label %for.body8961, label %for.end8963 for.body8961: %t193 = load ptr, ptr %a147 %t194 = load i64, ptr %a190 %t195 = trunc i64 %t194 to i32 %t196 = call ptr @clang_getDiagnostic(ptr %t193, i32 %t195) store ptr %t196, ptr %a197 %t198 = load ptr, ptr %a197 %t199 = call i32 @clang_getDiagnosticSeverity(ptr %t198) %t200 = icmp sge i32 %t199, 3 br i1 %t200, label %then8964, label %endif8966 then8964: %t201 = load ptr, ptr %a197 %t202 = call { i64, i64 } @clang_getDiagnosticSpelling(ptr %t201) store { i64, i64 } %t202, ptr %a203 %t204 = load %S.C.CXString, ptr %a203 %t205 = call { ptr, i64, i64 } @finch.cimport.text(%S.C.CXString %t204) store { ptr, i64, i64 } %t205, ptr %a206 %t207 = load ptr, ptr %a197 call void @clang_disposeDiagnostic(ptr %t207) %t208 = load { ptr, i64, i64 }, ptr %a206 store { ptr, i64, i64 } %t208, ptr %a209 store { ptr, i64, i64 } { ptr @.str.6191, i64 14, i64 0 }, ptr %a211 %t212 = call i64 @finch_str_find(ptr %a209, ptr %a211) %t213 = icmp sge i64 %t212, 0 br i1 %t213, label %then8967, label %endif8969 then8967: %t214 = load { ptr, i64, i64 }, ptr %a206 store { ptr, i64, i64 } %t214, ptr %a215 %t217 = load { ptr, i64, i64 }, ptr %a206 store { ptr, i64, i64 } %t217, ptr %a218 %t220 = getelementptr inbounds { ptr, i64, i64 }, ptr %a206, i32 0, i32 1 %t221 = load i64, ptr %t220 call void @finch_str_sub(ptr %a219, ptr %a218, i64 1, i64 %t221, ptr @.str.6193, i64 548) %t222 = load { ptr, i64, i64 }, ptr %a219 store { ptr, i64, i64 } %t222, ptr %a223 store { ptr, i64, i64 } { ptr @.str.6195, i64 1, i64 0 }, ptr %a225 %t226 = call i64 @finch_str_find(ptr %a223, ptr %a225) %t227 = add i64 %t226, 1 call void @finch_str_sub(ptr %a216, ptr %a215, i64 1, i64 %t227, ptr @.str.6192, i64 548) %t228 = load { ptr, i64, i64 }, ptr %a216 store { ptr, i64, i64 } %t228, ptr %a229 %t230 = load { ptr, i64, i64 }, ptr %a229 %t231 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 0 %t232 = load { ptr, i64, i64 }, ptr %t231 store { ptr, i64, i64 } %t230, ptr %a233 store { ptr, i64, i64 } %t232, ptr %a234 %t235 = call i32 @finch_str_eq(ptr %a233, ptr %a234) %t236 = icmp ne i32 %t235, 0 br i1 %t236, label %then8970, label %endif8972 then8970: %t237 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 1 %t238 = load { ptr, i64, i64 }, ptr %t237 store { ptr, i64, i64 } %t238, ptr %a240 store { ptr, i64, i64 } { ptr @.str.6196, i64 34, i64 0 }, ptr %a241 call void @finch_str_concat(ptr %a239, ptr %a240, ptr %a241) %t242 = load { ptr, i64, i64 }, ptr %a239 %t243 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 0 %t244 = load { ptr, i64, i64 }, ptr %t243 store { ptr, i64, i64 } %t242, ptr %a246 store { ptr, i64, i64 } %t244, ptr %a247 call void @finch_str_concat(ptr %a245, ptr %a246, ptr %a247) %t248 = load { ptr, i64, i64 }, ptr %a245 store { ptr, i64, i64 } %t248, ptr %a250 store { ptr, i64, i64 } { ptr @.str.6197, i64 1, i64 0 }, ptr %a251 call void @finch_str_concat(ptr %a249, ptr %a250, ptr %a251) %t252 = load { ptr, i64, i64 }, ptr %a249 %t253 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t252, 2 ret { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t253 endif8972: %t254 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 1 %t255 = load { ptr, i64, i64 }, ptr %t254 store { ptr, i64, i64 } %t255, ptr %a257 store { ptr, i64, i64 } { ptr @.str.6198, i64 34, i64 0 }, ptr %a258 call void @finch_str_concat(ptr %a256, ptr %a257, ptr %a258) %t259 = load { ptr, i64, i64 }, ptr %a256 %t260 = load { ptr, i64, i64 }, ptr %a229 store { ptr, i64, i64 } %t259, ptr %a262 store { ptr, i64, i64 } %t260, ptr %a263 call void @finch_str_concat(ptr %a261, ptr %a262, ptr %a263) %t264 = load { ptr, i64, i64 }, ptr %a261 store { ptr, i64, i64 } %t264, ptr %a266 store { ptr, i64, i64 } { ptr @.str.6199, i64 10, i64 0 }, ptr %a267 call void @finch_str_concat(ptr %a265, ptr %a266, ptr %a267) %t268 = load { ptr, i64, i64 }, ptr %a265 %t269 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 0 %t270 = load { ptr, i64, i64 }, ptr %t269 store { ptr, i64, i64 } %t268, ptr %a272 store { ptr, i64, i64 } %t270, ptr %a273 call void @finch_str_concat(ptr %a271, ptr %a272, ptr %a273) %t274 = load { ptr, i64, i64 }, ptr %a271 store { ptr, i64, i64 } %t274, ptr %a276 store { ptr, i64, i64 } { ptr @.str.6200, i64 60, i64 0 }, ptr %a277 call void @finch_str_concat(ptr %a275, ptr %a276, ptr %a277) %t278 = load { ptr, i64, i64 }, ptr %a275 %t279 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t278, 2 ret { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t279 endif8969: %t280 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 1 %t281 = load { ptr, i64, i64 }, ptr %t280 store { ptr, i64, i64 } %t281, ptr %a283 store { ptr, i64, i64 } { ptr @.str.6201, i64 19, i64 0 }, ptr %a284 call void @finch_str_concat(ptr %a282, ptr %a283, ptr %a284) %t285 = load { ptr, i64, i64 }, ptr %a282 %t286 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 0 %t287 = load { ptr, i64, i64 }, ptr %t286 store { ptr, i64, i64 } %t285, ptr %a289 store { ptr, i64, i64 } %t287, ptr %a290 call void @finch_str_concat(ptr %a288, ptr %a289, ptr %a290) %t291 = load { ptr, i64, i64 }, ptr %a288 store { ptr, i64, i64 } %t291, ptr %a293 store { ptr, i64, i64 } { ptr @.str.6202, i64 16, i64 0 }, ptr %a294 call void @finch_str_concat(ptr %a292, ptr %a293, ptr %a294) %t295 = load { ptr, i64, i64 }, ptr %a292 %t296 = load { ptr, i64, i64 }, ptr %a206 store { ptr, i64, i64 } %t295, ptr %a298 store { ptr, i64, i64 } %t296, ptr %a299 call void @finch_str_concat(ptr %a297, ptr %a298, ptr %a299) %t300 = load { ptr, i64, i64 }, ptr %a297 %t301 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t300, 2 ret { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t301 endif8966: %t302 = load ptr, ptr %a197 call void @clang_disposeDiagnostic(ptr %t302) br label %for.step8962 for.step8962: %t303 = load i64, ptr %a190 %t304 = add i64 %t303, 1 store i64 %t304, ptr %a190 br label %for.cond8960 for.end8963: %t305 = load ptr, ptr %a147 %t306 = getelementptr inbounds %S.cimport.Importer, ptr %a6, i32 0, i32 1 store ptr %t305, ptr %t306 %t307 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 0 %t308 = load { ptr, i64, i64 }, ptr %t307 %t309 = getelementptr inbounds %S.cimport.Importer, ptr %a6, i32 0, i32 2 store { ptr, i64, i64 } %t308, ptr %a310 call void @finch_str_copy(ptr %a311, ptr %a310) %t312 = load { ptr, i64, i64 }, ptr %a311 store { ptr, i64, i64 } %t312, ptr %t309 %t314 = load ptr, ptr %a147 call void @clang_getTranslationUnitCursor(ptr sret(%S.C.CXCursor) align 16 %a313, ptr %t314) %t315 = load %S.C.CXCursor, ptr %a313 store %S.C.CXCursor %t315, ptr %a316 %t317 = call i32 @clang_visitChildren(ptr byval(%S.C.CXCursor) align 8 %a316, ptr @finch.c.cimport.visitTop, ptr %a6) %t318 = load ptr, ptr %a147 call void @clang_disposeTranslationUnit(ptr %t318) br label %each.step8951 each.step8951: %t319 = load i64, ptr %a114 %t320 = add i64 %t319, 1 store i64 %t320, ptr %a114 br label %each.cond8949 each.end8952: %t321 = load ptr, ptr %a113 call void @clang_disposeIndex(ptr %t321) %t322 = getelementptr inbounds %S.cimport.Importer, ptr %a6, i32 0, i32 0 %t323 = load %S.cimport.CImports, ptr %t322 store %S.cimport.CImports %t323, ptr %a324 call void @finch.copy.S_cimport_CImports(ptr %a325, ptr %a324) %t326 = load %S.cimport.CImports, ptr %a325 %t327 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 %t328 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t327, %S.cimport.CImports %t326, 1 ret { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t328 } define internal { ptr, i64, i64 } @finch.platform.firstLine({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t2, ptr %a3 call void @finch_str_trim(ptr %a4, ptr %a3) %t5 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t5, ptr %a6 store { ptr, i64, i64 } { ptr @.str.6205, i64 1, i64 0 }, ptr %a8 call void @finch_str_split(ptr %a9, ptr %a6, ptr %a8) %t10 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t10, ptr %a11 %t12 = load { ptr, i64, i64 }, ptr %a11 %t13 = extractvalue { ptr, i64, i64 } %t12, 1 %t14 = icmp uge i64 0, %t13 br i1 %t14, label %range8973, label %inrange8974 range8973: call void @finch_panic_index(ptr @.str.6206, i64 20, i64 0, i64 %t13) unreachable inrange8974: %t15 = extractvalue { ptr, i64, i64 } %t12, 0 %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t15, i64 0 %t17 = load { ptr, i64, i64 }, ptr %t16 store { ptr, i64, i64 } %t17, ptr %a18 call void @finch_str_trim(ptr %a19, ptr %a18) %t20 = load { ptr, i64, i64 }, ptr %a19 ret { ptr, i64, i64 } %t20 } define internal { ptr, i64, i64 } @finch.platform.hostTriple() { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } { ptr @.str.6208, i64 21, i64 0 }, ptr %a1 %t2 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } { ptr @.str.6209, i64 22, i64 0 }, ptr %a4 store { ptr, i64, i64 } %t2, ptr %a5 call void @finch_str_concat(ptr %a3, ptr %a4, ptr %a5) %t6 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t6, ptr %a8 store { ptr, i64, i64 } { ptr @.str.6210, i64 14, i64 0 }, ptr %a9 call void @finch_str_concat(ptr %a7, ptr %a8, ptr %a9) %t10 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t10, ptr %a12 call void @finch_str_copy(ptr %a11, ptr %a12) %t13 = call i64 @finch_shell(ptr %a11) %t14 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t14, ptr %a15 store { ptr, i64, i64 } zeroinitializer, ptr %a16 store { ptr, i64, i64 } zeroinitializer, ptr %a17 %t18 = call i32 @finch_try_read_file(ptr %a16, ptr %a15, ptr %a17) %t19 = icmp eq i32 %t18, 0 %t20 = load { ptr, i64, i64 }, ptr %a17 %t21 = load { ptr, i64, i64 }, ptr %a16 br i1 %t19, label %or.failed8975, label %or.ok8976 or.failed8975: store { ptr, i64, i64 } %t20, ptr %a22 br label %or.bend8977 or.bend8977: br label %or.end8978 or.ok8976: br label %or.end8978 or.end8978: %t23 = phi { ptr, i64, i64 } [ { ptr @.str.6211, i64 0, i64 0 }, %or.bend8977 ], [ %t21, %or.ok8976 ] store { ptr, i64, i64 } %t23, ptr %a24 %t25 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } { ptr @.str.6212, i64 7, i64 0 }, ptr %a27 store { ptr, i64, i64 } %t25, ptr %a28 call void @finch_str_concat(ptr %a26, ptr %a27, ptr %a28) %t29 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } %t29, ptr %a31 store { ptr, i64, i64 } { ptr @.str.6213, i64 1, i64 0 }, ptr %a32 call void @finch_str_concat(ptr %a30, ptr %a31, ptr %a32) %t33 = load { ptr, i64, i64 }, ptr %a30 store { ptr, i64, i64 } %t33, ptr %a35 call void @finch_str_copy(ptr %a34, ptr %a35) %t36 = call i64 @finch_shell(ptr %a34) %t37 = load { ptr, i64, i64 }, ptr %a24 store { ptr, i64, i64 } %t37, ptr %a38 call void @finch_str_trim(ptr %a39, ptr %a38) %t40 = load { ptr, i64, i64 }, ptr %a39 %t41 = extractvalue { ptr, i64, i64 } %t40, 1 %t42 = icmp eq i64 %t41, 0 br i1 %t42, label %then8979, label %endif8981 then8979: ret { ptr, i64, i64 } { ptr @.str.6215, i64 24, i64 0 } endif8981: %t43 = load { ptr, i64, i64 }, ptr %a24 %t44 = call { ptr, i64, i64 } @finch.platform.firstLine({ ptr, i64, i64 } %t43) ret { ptr, i64, i64 } %t44 } define internal %S.platform.Target @finch.platform.select({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca %S.platform.Target, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca { ptr, i64, i64 }, align 16 %a104 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca { ptr, i64, i64 }, align 16 %a110 = alloca { ptr, i64, i64 }, align 16 %a111 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca { ptr, i64, i64 }, align 16 %a117 = alloca { ptr, i64, i64 }, align 16 %a118 = alloca { ptr, i64, i64 }, align 16 %a124 = alloca { ptr, i64, i64 }, align 16 %a125 = alloca { ptr, i64, i64 }, align 16 %a126 = alloca { ptr, i64, i64 }, align 16 %a130 = alloca { ptr, i64, i64 }, align 16 %a131 = alloca { ptr, i64, i64 }, align 16 %a132 = alloca { ptr, i64, i64 }, align 16 %a138 = alloca { ptr, i64, i64 }, align 16 %a139 = alloca { ptr, i64, i64 }, align 16 %a140 = alloca { ptr, i64, i64 }, align 16 %a144 = alloca { ptr, i64, i64 }, align 16 %a145 = alloca { ptr, i64, i64 }, align 16 %a146 = alloca { ptr, i64, i64 }, align 16 %a150 = alloca i1, align 16 %a152 = alloca { ptr, i64, i64 }, align 16 %a153 = alloca { ptr, i64, i64 }, align 16 %a154 = alloca { ptr, i64, i64 }, align 16 %a158 = alloca { ptr, i64, i64 }, align 16 %a159 = alloca { ptr, i64, i64 }, align 16 %a160 = alloca { ptr, i64, i64 }, align 16 %a164 = alloca i1, align 16 %a186 = alloca { ptr, i64, i64 }, align 16 %a188 = alloca { ptr, i64, i64 }, align 16 %a189 = alloca { ptr, i64, i64 }, align 16 %a191 = alloca { ptr, i64, i64 }, align 16 %a197 = alloca { ptr, i64, i64 }, align 16 %a198 = alloca { ptr, i64, i64 }, align 16 %a219 = alloca { ptr, i64, i64 }, align 16 %a220 = alloca { ptr, i64, i64 }, align 16 %a221 = alloca { ptr, i64, i64 }, align 16 %a242 = alloca %S.platform.Target, align 16 %a243 = alloca %S.platform.Target, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = call { ptr, i64, i64 } @finch.platform.hostTriple() store { ptr, i64, i64 } %t2, ptr %a3 %t4 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t4, ptr %a5 call void @finch_str_copy(ptr %a6, ptr %a5) %t7 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t7, ptr %a8 %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t10 = load i64, ptr %t9 %t11 = icmp eq i64 %t10, 0 br i1 %t11, label %then8982, label %else8983 then8982: %t12 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t12, ptr %a13 call void @finch_str_copy(ptr %a14, ptr %a13) %t15 = load { ptr, i64, i64 }, ptr %a14 store { ptr, i64, i64 } %t15, ptr %a8 br label %endif8984 else8983: %t16 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t16, ptr %a17 store { ptr, i64, i64 } { ptr @.str.6216, i64 7, i64 0 }, ptr %a18 %t19 = call i32 @finch_str_eq(ptr %a17, ptr %a18) %t20 = icmp ne i32 %t19, 0 br i1 %t20, label %then8985, label %else8986 then8985: store { ptr, i64, i64 } { ptr @.str.6217, i64 18, i64 0 }, ptr %a8 br label %endif8987 else8986: %t21 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t21, ptr %a22 store { ptr, i64, i64 } { ptr @.str.6218, i64 5, i64 0 }, ptr %a23 %t24 = call i32 @finch_str_eq(ptr %a22, ptr %a23) %t25 = icmp ne i32 %t24, 0 br i1 %t25, label %then8988, label %else8989 then8988: store { ptr, i64, i64 } { ptr @.str.6219, i64 24, i64 0 }, ptr %a8 br label %endif8990 else8989: %t26 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t26, ptr %a27 store { ptr, i64, i64 } { ptr @.str.6220, i64 5, i64 0 }, ptr %a28 %t29 = call i32 @finch_str_eq(ptr %a27, ptr %a28) %t30 = icmp ne i32 %t29, 0 br label %logic.from8991 logic.from8991: br i1 %t30, label %logic.end8993, label %logic.rhs8992 logic.rhs8992: %t31 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t31, ptr %a32 store { ptr, i64, i64 } { ptr @.str.6221, i64 7, i64 0 }, ptr %a33 %t34 = call i32 @finch_str_eq(ptr %a32, ptr %a33) %t35 = icmp ne i32 %t34, 0 br label %logic.rend8994 logic.rend8994: br label %logic.end8993 logic.end8993: %t36 = phi i1 [ true, %logic.from8991 ], [ %t35, %logic.rend8994 ] br label %logic.from8995 logic.from8995: br i1 %t36, label %logic.end8997, label %logic.rhs8996 logic.rhs8996: %t37 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t37, ptr %a38 store { ptr, i64, i64 } { ptr @.str.6222, i64 11, i64 0 }, ptr %a39 %t40 = call i32 @finch_str_eq(ptr %a38, ptr %a39) %t41 = icmp ne i32 %t40, 0 br label %logic.rend8998 logic.rend8998: br label %logic.end8997 logic.end8997: %t42 = phi i1 [ true, %logic.from8995 ], [ %t41, %logic.rend8998 ] br i1 %t42, label %then8999, label %else9000 then8999: store { ptr, i64, i64 } { ptr @.str.6223, i64 25, i64 0 }, ptr %a8 br label %endif9001 else9000: %t43 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t43, ptr %a44 store { ptr, i64, i64 } { ptr @.str.6224, i64 5, i64 0 }, ptr %a45 %t46 = call i32 @finch_str_eq(ptr %a44, ptr %a45) %t47 = icmp ne i32 %t46, 0 br i1 %t47, label %then9002, label %endif9004 then9002: %t48 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t48, ptr %a49 store { ptr, i64, i64 } { ptr @.str.6226, i64 7, i64 0 }, ptr %a51 %t52 = call i32 @finch_str_starts(ptr %a49, ptr %a51) %t53 = icmp ne i32 %t52, 0 br label %logic.from9005 logic.from9005: br i1 %t53, label %logic.end9007, label %logic.rhs9006 logic.rhs9006: %t54 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t54, ptr %a55 store { ptr, i64, i64 } { ptr @.str.6228, i64 5, i64 0 }, ptr %a57 %t58 = call i32 @finch_str_starts(ptr %a55, ptr %a57) %t59 = icmp ne i32 %t58, 0 br label %logic.rend9008 logic.rend9008: br label %logic.end9007 logic.end9007: %t60 = phi i1 [ true, %logic.from9005 ], [ %t59, %logic.rend9008 ] br i1 %t60, label %then9009, label %else9010 then9009: store { ptr, i64, i64 } { ptr @.str.6229, i64 24, i64 0 }, ptr %a8 br label %endif9011 else9010: store { ptr, i64, i64 } { ptr @.str.6230, i64 25, i64 0 }, ptr %a8 br label %endif9011 endif9011: br label %endif9004 endif9004: br label %endif9001 endif9001: br label %endif8990 endif8990: br label %endif8987 endif8987: br label %endif8984 endif8984: %t61 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t61, ptr %a62 call void @finch_str_copy(ptr %a63, ptr %a62) %t64 = load { ptr, i64, i64 }, ptr %a63 %t65 = insertvalue %S.platform.Target zeroinitializer, { ptr, i64, i64 } %t64, 0 store %S.platform.Target %t65, ptr %a66 %t67 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t67, ptr %a68 store { ptr, i64, i64 } { ptr @.str.6232, i64 7, i64 0 }, ptr %a70 %t71 = call i64 @finch_str_find(ptr %a68, ptr %a70) %t72 = icmp sge i64 %t71, 0 br label %logic.from9012 logic.from9012: br i1 %t72, label %logic.end9014, label %logic.rhs9013 logic.rhs9013: %t73 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t73, ptr %a74 store { ptr, i64, i64 } { ptr @.str.6234, i64 5, i64 0 }, ptr %a76 %t77 = call i64 @finch_str_find(ptr %a74, ptr %a76) %t78 = icmp sge i64 %t77, 0 br label %logic.rend9015 logic.rend9015: br label %logic.end9014 logic.end9014: %t79 = phi i1 [ true, %logic.from9012 ], [ %t78, %logic.rend9015 ] br label %logic.from9016 logic.from9016: br i1 %t79, label %logic.end9018, label %logic.rhs9017 logic.rhs9017: %t80 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t80, ptr %a81 store { ptr, i64, i64 } { ptr @.str.6236, i64 4, i64 0 }, ptr %a83 %t84 = call i64 @finch_str_find(ptr %a81, ptr %a83) %t85 = icmp sge i64 %t84, 0 br label %logic.rend9019 logic.rend9019: br label %logic.end9018 logic.end9018: %t86 = phi i1 [ true, %logic.from9016 ], [ %t85, %logic.rend9019 ] br label %logic.from9020 logic.from9020: br i1 %t86, label %logic.end9022, label %logic.rhs9021 logic.rhs9021: %t87 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t87, ptr %a88 store { ptr, i64, i64 } { ptr @.str.6238, i64 5, i64 0 }, ptr %a90 %t91 = call i64 @finch_str_find(ptr %a88, ptr %a90) %t92 = icmp sge i64 %t91, 0 br label %logic.rend9023 logic.rend9023: br label %logic.end9022 logic.end9022: %t93 = phi i1 [ true, %logic.from9020 ], [ %t92, %logic.rend9023 ] %t94 = getelementptr inbounds %S.platform.Target, ptr %a66, i32 0, i32 1 store i1 %t93, ptr %t94 %t95 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t95, ptr %a96 store { ptr, i64, i64 } { ptr @.str.6240, i64 4, i64 0 }, ptr %a98 %t99 = call i64 @finch_str_find(ptr %a96, ptr %a98) %t100 = icmp sge i64 %t99, 0 %t101 = getelementptr inbounds %S.platform.Target, ptr %a66, i32 0, i32 2 store i1 %t100, ptr %t101 %t102 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t102, ptr %a103 store { ptr, i64, i64 } { ptr @.str.6242, i64 5, i64 0 }, ptr %a105 %t106 = call i64 @finch_str_find(ptr %a103, ptr %a105) %t107 = icmp sge i64 %t106, 0 br label %logic.from9024 logic.from9024: br i1 %t107, label %logic.end9026, label %logic.rhs9025 logic.rhs9025: %t108 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t108, ptr %a109 store { ptr, i64, i64 } { ptr @.str.6244, i64 6, i64 0 }, ptr %a111 %t112 = call i64 @finch_str_find(ptr %a109, ptr %a111) %t113 = icmp sge i64 %t112, 0 br label %logic.rend9027 logic.rend9027: br label %logic.end9026 logic.end9026: %t114 = phi i1 [ true, %logic.from9024 ], [ %t113, %logic.rend9027 ] br label %logic.from9028 logic.from9028: br i1 %t114, label %logic.end9030, label %logic.rhs9029 logic.rhs9029: %t115 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t115, ptr %a116 store { ptr, i64, i64 } { ptr @.str.6246, i64 5, i64 0 }, ptr %a118 %t119 = call i64 @finch_str_find(ptr %a116, ptr %a118) %t120 = icmp sge i64 %t119, 0 br label %logic.rend9031 logic.rend9031: br label %logic.end9030 logic.end9030: %t121 = phi i1 [ true, %logic.from9028 ], [ %t120, %logic.rend9031 ] %t122 = getelementptr inbounds %S.platform.Target, ptr %a66, i32 0, i32 3 store i1 %t121, ptr %t122 %t123 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t123, ptr %a124 store { ptr, i64, i64 } { ptr @.str.6248, i64 7, i64 0 }, ptr %a126 %t127 = call i32 @finch_str_starts(ptr %a124, ptr %a126) %t128 = icmp ne i32 %t127, 0 br label %logic.from9032 logic.from9032: br i1 %t128, label %logic.end9034, label %logic.rhs9033 logic.rhs9033: %t129 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t129, ptr %a130 store { ptr, i64, i64 } { ptr @.str.6250, i64 5, i64 0 }, ptr %a132 %t133 = call i32 @finch_str_starts(ptr %a130, ptr %a132) %t134 = icmp ne i32 %t133, 0 br label %logic.rend9035 logic.rend9035: br label %logic.end9034 logic.end9034: %t135 = phi i1 [ true, %logic.from9032 ], [ %t134, %logic.rend9035 ] %t136 = getelementptr inbounds %S.platform.Target, ptr %a66, i32 0, i32 4 store i1 %t135, ptr %t136 %t137 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t137, ptr %a138 store { ptr, i64, i64 } { ptr @.str.6252, i64 7, i64 0 }, ptr %a140 %t141 = call i32 @finch_str_starts(ptr %a138, ptr %a140) %t142 = icmp ne i32 %t141, 0 br label %logic.from9036 logic.from9036: br i1 %t142, label %logic.end9038, label %logic.rhs9037 logic.rhs9037: %t143 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t143, ptr %a144 store { ptr, i64, i64 } { ptr @.str.6254, i64 5, i64 0 }, ptr %a146 %t147 = call i32 @finch_str_starts(ptr %a144, ptr %a146) %t148 = icmp ne i32 %t147, 0 br label %logic.rend9039 logic.rend9039: br label %logic.end9038 logic.end9038: %t149 = phi i1 [ true, %logic.from9036 ], [ %t148, %logic.rend9039 ] store i1 %t149, ptr %a150 %t151 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t151, ptr %a152 store { ptr, i64, i64 } { ptr @.str.6256, i64 5, i64 0 }, ptr %a154 %t155 = call i64 @finch_str_find(ptr %a152, ptr %a154) %t156 = icmp sge i64 %t155, 0 br label %logic.from9040 logic.from9040: br i1 %t156, label %logic.end9042, label %logic.rhs9041 logic.rhs9041: %t157 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t157, ptr %a158 store { ptr, i64, i64 } { ptr @.str.6258, i64 6, i64 0 }, ptr %a160 %t161 = call i64 @finch_str_find(ptr %a158, ptr %a160) %t162 = icmp sge i64 %t161, 0 br label %logic.rend9043 logic.rend9043: br label %logic.end9042 logic.end9042: %t163 = phi i1 [ true, %logic.from9040 ], [ %t162, %logic.rend9043 ] store i1 %t163, ptr %a164 %t165 = getelementptr inbounds %S.platform.Target, ptr %a66, i32 0, i32 1 %t166 = load i1, ptr %t165 br label %logic.from9044 logic.from9044: br i1 %t166, label %logic.end9046, label %logic.rhs9045 logic.rhs9045: %t167 = getelementptr inbounds %S.platform.Target, ptr %a66, i32 0, i32 3 %t168 = load i1, ptr %t167 %t169 = load i1, ptr %a164 %t170 = icmp ne i1 %t168, %t169 br label %logic.rend9047 logic.rend9047: br label %logic.end9046 logic.end9046: %t171 = phi i1 [ true, %logic.from9044 ], [ %t170, %logic.rend9047 ] br label %logic.from9048 logic.from9048: br i1 %t171, label %logic.end9050, label %logic.rhs9049 logic.rhs9049: %t172 = getelementptr inbounds %S.platform.Target, ptr %a66, i32 0, i32 4 %t173 = load i1, ptr %t172 %t174 = load i1, ptr %a150 %t175 = icmp ne i1 %t173, %t174 br label %logic.rend9051 logic.rend9051: br label %logic.end9050 logic.end9050: %t176 = phi i1 [ true, %logic.from9048 ], [ %t175, %logic.rend9051 ] %t177 = getelementptr inbounds %S.platform.Target, ptr %a66, i32 0, i32 5 store i1 %t176, ptr %t177 %t178 = getelementptr inbounds %S.platform.Target, ptr %a66, i32 0, i32 6 store { ptr, i64, i64 } { ptr @.str.6259, i64 0, i64 0 }, ptr %t178 %t179 = getelementptr inbounds %S.platform.Target, ptr %a66, i32 0, i32 1 %t180 = load i1, ptr %t179 br i1 %t180, label %then9052, label %endif9054 then9052: %t181 = getelementptr inbounds %S.platform.Target, ptr %a66, i32 0, i32 6 store { ptr, i64, i64 } { ptr @.str.6260, i64 4, i64 0 }, ptr %t181 br label %endif9054 endif9054: %t182 = extractvalue { ptr, i64, i64 } { ptr @.str.6261, i64 8, i64 0 }, 0 %t183 = icmp eq ptr %t182, null %t184 = select i1 %t183, ptr @.str.6262, ptr %t182 %t185 = call ptr @getenv(ptr %t184) store { ptr, i64, i64 } zeroinitializer, ptr %a186 call void @finch_str_from_c(ptr %a186, ptr %t185) %t187 = load { ptr, i64, i64 }, ptr %a186 store { ptr, i64, i64 } %t187, ptr %a188 call void @finch_str_copy(ptr %a189, ptr %a188) %t190 = load { ptr, i64, i64 }, ptr %a189 store { ptr, i64, i64 } %t190, ptr %a191 %t192 = getelementptr inbounds { ptr, i64, i64 }, ptr %a191, i32 0, i32 1 %t193 = load i64, ptr %t192 %t194 = icmp sgt i64 %t193, 0 br i1 %t194, label %then9055, label %else9056 then9055: %t195 = load { ptr, i64, i64 }, ptr %a191 %t196 = getelementptr inbounds %S.platform.Target, ptr %a66, i32 0, i32 7 store { ptr, i64, i64 } %t195, ptr %a197 call void @finch_str_copy(ptr %a198, ptr %a197) %t199 = load { ptr, i64, i64 }, ptr %a198 store { ptr, i64, i64 } %t199, ptr %t196 br label %endif9057 else9056: %t200 = getelementptr inbounds %S.platform.Target, ptr %a66, i32 0, i32 5 %t201 = load i1, ptr %t200 br label %logic.from9058 logic.from9058: br i1 %t201, label %logic.rhs9059, label %logic.end9060 logic.rhs9059: %t202 = getelementptr inbounds %S.platform.Target, ptr %a66, i32 0, i32 1 %t203 = load i1, ptr %t202 br label %logic.rend9061 logic.rend9061: br label %logic.end9060 logic.end9060: %t204 = phi i1 [ false, %logic.from9058 ], [ %t203, %logic.rend9061 ] br i1 %t204, label %then9062, label %else9063 then9062: %t205 = getelementptr inbounds %S.platform.Target, ptr %a66, i32 0, i32 7 store { ptr, i64, i64 } { ptr @.str.6263, i64 22, i64 0 }, ptr %t205 br label %endif9064 else9063: %t206 = getelementptr inbounds %S.platform.Target, ptr %a66, i32 0, i32 5 %t207 = load i1, ptr %t206 br label %logic.from9065 logic.from9065: br i1 %t207, label %logic.rhs9066, label %logic.end9067 logic.rhs9066: %t208 = getelementptr inbounds %S.platform.Target, ptr %a66, i32 0, i32 4 %t209 = load i1, ptr %t208 br label %logic.rend9068 logic.rend9068: br label %logic.end9067 logic.end9067: %t210 = phi i1 [ false, %logic.from9065 ], [ %t209, %logic.rend9068 ] br label %logic.from9069 logic.from9069: br i1 %t210, label %logic.rhs9070, label %logic.end9071 logic.rhs9070: %t211 = getelementptr inbounds %S.platform.Target, ptr %a66, i32 0, i32 3 %t212 = load i1, ptr %t211 %t213 = xor i1 %t212, true br label %logic.rend9072 logic.rend9072: br label %logic.end9071 logic.end9071: %t214 = phi i1 [ false, %logic.from9069 ], [ %t213, %logic.rend9072 ] br i1 %t214, label %then9073, label %else9074 then9073: %t215 = getelementptr inbounds %S.platform.Target, ptr %a66, i32 0, i32 7 store { ptr, i64, i64 } { ptr @.str.6264, i64 21, i64 0 }, ptr %t215 br label %endif9075 else9074: %t216 = getelementptr inbounds %S.platform.Target, ptr %a66, i32 0, i32 5 %t217 = load i1, ptr %t216 br i1 %t217, label %then9076, label %else9077 then9076: %t218 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } { ptr @.str.6265, i64 15, i64 0 }, ptr %a220 store { ptr, i64, i64 } %t218, ptr %a221 call void @finch_str_concat(ptr %a219, ptr %a220, ptr %a221) %t222 = load { ptr, i64, i64 }, ptr %a219 %t223 = getelementptr inbounds %S.platform.Target, ptr %a66, i32 0, i32 7 store { ptr, i64, i64 } %t222, ptr %t223 br label %endif9078 else9077: %t224 = getelementptr inbounds %S.platform.Target, ptr %a66, i32 0, i32 7 store { ptr, i64, i64 } { ptr @.str.6266, i64 2, i64 0 }, ptr %t224 br label %endif9078 endif9078: br label %endif9075 endif9075: br label %endif9064 endif9064: br label %endif9057 endif9057: %t225 = getelementptr inbounds %S.platform.Target, ptr %a66, i32 0, i32 5 %t226 = load i1, ptr %t225 br label %logic.from9079 logic.from9079: br i1 %t226, label %logic.rhs9080, label %logic.end9081 logic.rhs9080: %t227 = getelementptr inbounds %S.platform.Target, ptr %a66, i32 0, i32 1 %t228 = load i1, ptr %t227 br label %logic.rend9082 logic.rend9082: br label %logic.end9081 logic.end9081: %t229 = phi i1 [ false, %logic.from9079 ], [ %t228, %logic.rend9082 ] br i1 %t229, label %then9083, label %else9084 then9083: %t230 = getelementptr inbounds %S.platform.Target, ptr %a66, i32 0, i32 8 store { ptr, i64, i64 } { ptr @.str.6267, i64 5, i64 0 }, ptr %t230 br label %endif9085 else9084: %t231 = getelementptr inbounds %S.platform.Target, ptr %a66, i32 0, i32 5 %t232 = load i1, ptr %t231 br label %logic.from9086 logic.from9086: br i1 %t232, label %logic.rhs9087, label %logic.end9088 logic.rhs9087: %t233 = getelementptr inbounds %S.platform.Target, ptr %a66, i32 0, i32 4 %t234 = load i1, ptr %t233 br label %logic.rend9089 logic.rend9089: br label %logic.end9088 logic.end9088: %t235 = phi i1 [ false, %logic.from9086 ], [ %t234, %logic.rend9089 ] br label %logic.from9090 logic.from9090: br i1 %t235, label %logic.rhs9091, label %logic.end9092 logic.rhs9091: %t236 = getelementptr inbounds %S.platform.Target, ptr %a66, i32 0, i32 3 %t237 = load i1, ptr %t236 %t238 = xor i1 %t237, true br label %logic.rend9093 logic.rend9093: br label %logic.end9092 logic.end9092: %t239 = phi i1 [ false, %logic.from9090 ], [ %t238, %logic.rend9093 ] br i1 %t239, label %then9094, label %endif9096 then9094: %t240 = getelementptr inbounds %S.platform.Target, ptr %a66, i32 0, i32 8 store { ptr, i64, i64 } { ptr @.str.6268, i64 13, i64 0 }, ptr %t240 br label %endif9096 endif9096: br label %endif9085 endif9085: %t241 = load %S.platform.Target, ptr %a66 store %S.platform.Target %t241, ptr %a242 call void @finch.copy.S_platform_Target(ptr %a243, ptr %a242) %t244 = load %S.platform.Target, ptr %a243 ret %S.platform.Target %t244 } define internal i1 @finch.platform.charIsSigned(%S.platform.Target %p0) { entry: %a1 = alloca %S.platform.Target, align 16 store %S.platform.Target %p0, ptr %a1 %t2 = getelementptr inbounds %S.platform.Target, ptr %a1, i32 0, i32 4 %t3 = load i1, ptr %t2 %t4 = xor i1 %t3, true br label %logic.from9097 logic.from9097: br i1 %t4, label %logic.end9099, label %logic.rhs9098 logic.rhs9098: %t5 = getelementptr inbounds %S.platform.Target, ptr %a1, i32 0, i32 3 %t6 = load i1, ptr %t5 br label %logic.rend9100 logic.rend9100: br label %logic.end9099 logic.end9099: %t7 = phi i1 [ true, %logic.from9097 ], [ %t6, %logic.rend9100 ] br label %logic.from9101 logic.from9101: br i1 %t7, label %logic.end9103, label %logic.rhs9102 logic.rhs9102: %t8 = getelementptr inbounds %S.platform.Target, ptr %a1, i32 0, i32 1 %t9 = load i1, ptr %t8 br label %logic.rend9104 logic.rend9104: br label %logic.end9103 logic.end9103: %t10 = phi i1 [ true, %logic.from9101 ], [ %t9, %logic.rend9104 ] ret i1 %t10 } define internal { ptr, i64, i64 } @finch.linker.fingerprint({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a2 = alloca i32, align 16 %a3 = alloca i64, align 16 %a11 = alloca i8, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca i64, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 store i32 2166136261, ptr %a2 store i64 0, ptr %a3 br label %each.cond9105 each.cond9105: %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t5 = load i64, ptr %t4 %t6 = load i64, ptr %a3 %t7 = icmp slt i64 %t6, %t5 br i1 %t7, label %each.body9106, label %each.end9108 each.body9106: %t8 = load ptr, ptr %a1 %t9 = getelementptr inbounds i8, ptr %t8, i64 %t6 %t10 = load i8, ptr %t9 store i8 %t10, ptr %a11 %t12 = load i32, ptr %a2 %t13 = load i8, ptr %a11 %t14 = zext i8 %t13 to i32 %t15 = xor i32 %t12, %t14 %t16 = mul i32 %t15, 16777619 store i32 %t16, ptr %a2 br label %each.step9107 each.step9107: %t17 = load i64, ptr %a3 %t18 = add i64 %t17, 1 store i64 %t18, ptr %a3 br label %each.cond9105 each.end9108: store { ptr, i64, i64 } { ptr @.str.6269, i64 16, i64 0 }, ptr %a19 store { ptr, i64, i64 } zeroinitializer, ptr %a20 store i64 0, ptr %a21 br label %for.cond9109 for.cond9109: %t22 = load i64, ptr %a21 %t23 = icmp slt i64 %t22, 8 br i1 %t23, label %for.body9110, label %for.end9112 for.body9110: %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %a20, i32 0, i32 1 %t25 = load i32, ptr %a2 %t26 = load i64, ptr %a21 %t27 = mul i64 4, %t26 %t28 = sub i64 28, %t27 %t29 = trunc i64 %t28 to i32 %t30 = lshr i32 %t25, %t29 %t31 = and i32 %t30, 15 %t32 = zext i32 %t31 to i64 %t33 = load { ptr, i64, i64 }, ptr %a19 %t34 = extractvalue { ptr, i64, i64 } %t33, 1 %t35 = icmp uge i64 %t32, %t34 br i1 %t35, label %range9113, label %inrange9114 range9113: call void @finch_panic_index(ptr @.str.6270, i64 17, i64 %t32, i64 %t34) unreachable inrange9114: %t36 = extractvalue { ptr, i64, i64 } %t33, 0 %t37 = getelementptr inbounds i8, ptr %t36, i64 %t32 %t38 = load i8, ptr %t37 call void @finch_str_from_char(ptr %a39, i8 signext %t38) %t40 = load { ptr, i64, i64 }, ptr %a39 %t41 = load i64, ptr %t24 %t42 = add i64 %t41, 1 call void @finch_arr_reserve(ptr %a20, i64 %t42, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t43 = load ptr, ptr %a20 %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t43, i64 %t41 store { ptr, i64, i64 } %t40, ptr %t44 store i64 %t42, ptr %t24 br label %for.step9111 for.step9111: %t45 = load i64, ptr %a21 %t46 = add i64 %t45, 1 store i64 %t46, ptr %a21 br label %for.cond9109 for.end9112: %t47 = getelementptr inbounds { ptr, i64, i64 }, ptr %a20, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.6271, i64 0, i64 0 }, ptr %a48 call void @finch_str_join(ptr %a49, ptr %a20, ptr %a48) %t50 = load { ptr, i64, i64 }, ptr %a49 ret { ptr, i64, i64 } %t50 } define internal { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t2, ptr %a3 store { ptr, i64, i64 } { ptr @.str.6274, i64 1, i64 0 }, ptr %a5 store { ptr, i64, i64 } { ptr @.str.6275, i64 4, i64 0 }, ptr %a6 call void @finch_str_replace(ptr %a4, ptr %a3, ptr %a5, ptr %a6) %t7 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } { ptr @.str.6272, i64 1, i64 0 }, ptr %a9 store { ptr, i64, i64 } %t7, ptr %a10 call void @finch_str_concat(ptr %a8, ptr %a9, ptr %a10) %t11 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t11, ptr %a13 store { ptr, i64, i64 } { ptr @.str.6276, i64 1, i64 0 }, ptr %a14 call void @finch_str_concat(ptr %a12, ptr %a13, ptr %a14) %t15 = load { ptr, i64, i64 }, ptr %a12 ret { ptr, i64, i64 } %t15 } define internal { ptr, i64, i64 } @finch.linker.cacheDir() { entry: %a5 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %t1 = extractvalue { ptr, i64, i64 } { ptr @.str.6277, i64 14, i64 0 }, 0 %t2 = icmp eq ptr %t1, null %t3 = select i1 %t2, ptr @.str.6278, ptr %t1 %t4 = call ptr @getenv(ptr %t3) store { ptr, i64, i64 } zeroinitializer, ptr %a5 call void @finch_str_from_c(ptr %a5, ptr %t4) %t6 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } %t6, ptr %a7 call void @finch_str_copy(ptr %a8, ptr %a7) %t9 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t9, ptr %a10 %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %a10, i32 0, i32 1 %t12 = load i64, ptr %t11 %t13 = icmp sgt i64 %t12, 0 br i1 %t13, label %then9115, label %endif9117 then9115: %t14 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t14, ptr %a16 store { ptr, i64, i64 } { ptr @.str.6279, i64 6, i64 0 }, ptr %a17 call void @finch_str_concat(ptr %a15, ptr %a16, ptr %a17) %t18 = load { ptr, i64, i64 }, ptr %a15 ret { ptr, i64, i64 } %t18 endif9117: %t19 = extractvalue { ptr, i64, i64 } { ptr @.str.6280, i64 4, i64 0 }, 0 %t20 = icmp eq ptr %t19, null %t21 = select i1 %t20, ptr @.str.6281, ptr %t19 %t22 = call ptr @getenv(ptr %t21) store { ptr, i64, i64 } zeroinitializer, ptr %a23 call void @finch_str_from_c(ptr %a23, ptr %t22) %t24 = load { ptr, i64, i64 }, ptr %a23 store { ptr, i64, i64 } %t24, ptr %a25 call void @finch_str_copy(ptr %a26, ptr %a25) %t27 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } %t27, ptr %a28 %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %a28, i32 0, i32 1 %t30 = load i64, ptr %t29 %t31 = icmp sgt i64 %t30, 0 br i1 %t31, label %then9118, label %endif9120 then9118: %t32 = load { ptr, i64, i64 }, ptr %a28 store { ptr, i64, i64 } %t32, ptr %a34 store { ptr, i64, i64 } { ptr @.str.6282, i64 13, i64 0 }, ptr %a35 call void @finch_str_concat(ptr %a33, ptr %a34, ptr %a35) %t36 = load { ptr, i64, i64 }, ptr %a33 ret { ptr, i64, i64 } %t36 endif9120: ret { ptr, i64, i64 } { ptr @.str.6283, i64 16, i64 0 } } define internal { ptr, i64, i64 } @finch.linker.libFlags({ ptr, i64, i64 } %p0, %S.platform.Target %p1) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a2 = alloca %S.platform.Target, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca i64, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 store %S.platform.Target %p1, ptr %a2 %t3 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t3, ptr %a4 store { ptr, i64, i64 } { ptr @.str.6285, i64 10, i64 0 }, ptr %a6 %t7 = call i32 @finch_str_ends(ptr %a4, ptr %a6) %t8 = icmp ne i32 %t7, 0 br i1 %t8, label %then9121, label %endif9123 then9121: %t9 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t9, ptr %a10 %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t13 = load i64, ptr %t12 %t14 = sub i64 %t13, 10 call void @finch_str_sub(ptr %a11, ptr %a10, i64 0, i64 %t14, ptr @.str.6287, i64 42) %t15 = load { ptr, i64, i64 }, ptr %a11 %t16 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t15) store { ptr, i64, i64 } { ptr @.str.6286, i64 11, i64 0 }, ptr %a18 store { ptr, i64, i64 } %t16, ptr %a19 call void @finch_str_concat(ptr %a17, ptr %a18, ptr %a19) %t20 = load { ptr, i64, i64 }, ptr %a17 ret { ptr, i64, i64 } %t20 endif9123: %t21 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 5 %t22 = load i1, ptr %t21 %t23 = xor i1 %t22, true br i1 %t23, label %then9124, label %endif9126 then9124: store { ptr, i64, i64 } { ptr @.str.6288, i64 24, i64 0 }, ptr %a24 %t25 = load { ptr, i64, i64 }, ptr %a1 %t26 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t25) store { ptr, i64, i64 } { ptr @.str.6289, i64 18, i64 0 }, ptr %a28 store { ptr, i64, i64 } %t26, ptr %a29 call void @finch_str_concat(ptr %a27, ptr %a28, ptr %a29) %t30 = load { ptr, i64, i64 }, ptr %a27 store { ptr, i64, i64 } %t30, ptr %a32 store { ptr, i64, i64 } { ptr @.str.6290, i64 4, i64 0 }, ptr %a33 call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33) %t34 = load { ptr, i64, i64 }, ptr %a31 %t35 = load { ptr, i64, i64 }, ptr %a24 store { ptr, i64, i64 } %t34, ptr %a37 store { ptr, i64, i64 } %t35, ptr %a38 call void @finch_str_concat(ptr %a36, ptr %a37, ptr %a38) %t39 = load { ptr, i64, i64 }, ptr %a36 store { ptr, i64, i64 } %t39, ptr %a41 store { ptr, i64, i64 } { ptr @.str.6291, i64 14, i64 0 }, ptr %a42 call void @finch_str_concat(ptr %a40, ptr %a41, ptr %a42) %t43 = load { ptr, i64, i64 }, ptr %a40 store { ptr, i64, i64 } %t43, ptr %a45 call void @finch_str_copy(ptr %a44, ptr %a45) %t46 = call i64 @finch_shell(ptr %a44) store i64 %t46, ptr %a47 %t48 = load i64, ptr %a47 %t49 = icmp eq i64 %t48, 0 br label %logic.from9127 logic.from9127: br i1 %t49, label %logic.rhs9128, label %logic.end9129 logic.rhs9128: %t50 = load { ptr, i64, i64 }, ptr %a24 store { ptr, i64, i64 } %t50, ptr %a51 %t52 = call i32 @finch_file_exists(ptr %a51) %t53 = icmp ne i32 %t52, 0 br label %logic.rend9130 logic.rend9130: br label %logic.end9129 logic.end9129: %t54 = phi i1 [ false, %logic.from9127 ], [ %t53, %logic.rend9130 ] br i1 %t54, label %then9131, label %endif9133 then9131: %t55 = load { ptr, i64, i64 }, ptr %a24 store { ptr, i64, i64 } %t55, ptr %a56 store { ptr, i64, i64 } zeroinitializer, ptr %a57 store { ptr, i64, i64 } zeroinitializer, ptr %a58 %t59 = call i32 @finch_try_read_file(ptr %a57, ptr %a56, ptr %a58) %t60 = icmp eq i32 %t59, 0 %t61 = load { ptr, i64, i64 }, ptr %a58 %t62 = load { ptr, i64, i64 }, ptr %a57 br i1 %t60, label %or.failed9134, label %or.ok9135 or.failed9134: store { ptr, i64, i64 } %t61, ptr %a63 br label %or.bend9136 or.bend9136: br label %or.end9137 or.ok9135: br label %or.end9137 or.end9137: %t64 = phi { ptr, i64, i64 } [ { ptr @.str.6292, i64 0, i64 0 }, %or.bend9136 ], [ %t62, %or.ok9135 ] store { ptr, i64, i64 } %t64, ptr %a65 call void @finch_str_trim(ptr %a66, ptr %a65) %t67 = load { ptr, i64, i64 }, ptr %a66 store { ptr, i64, i64 } %t67, ptr %a68 %t69 = load { ptr, i64, i64 }, ptr %a24 store { ptr, i64, i64 } { ptr @.str.6294, i64 7, i64 0 }, ptr %a71 store { ptr, i64, i64 } %t69, ptr %a72 call void @finch_str_concat(ptr %a70, ptr %a71, ptr %a72) %t73 = load { ptr, i64, i64 }, ptr %a70 store { ptr, i64, i64 } %t73, ptr %a75 store { ptr, i64, i64 } { ptr @.str.6295, i64 1, i64 0 }, ptr %a76 call void @finch_str_concat(ptr %a74, ptr %a75, ptr %a76) %t77 = load { ptr, i64, i64 }, ptr %a74 store { ptr, i64, i64 } %t77, ptr %a79 call void @finch_str_copy(ptr %a78, ptr %a79) %t80 = call i64 @finch_shell(ptr %a78) %t81 = getelementptr inbounds { ptr, i64, i64 }, ptr %a68, i32 0, i32 1 %t82 = load i64, ptr %t81 %t83 = icmp sgt i64 %t82, 0 br i1 %t83, label %then9138, label %endif9140 then9138: %t84 = load { ptr, i64, i64 }, ptr %a68 ret { ptr, i64, i64 } %t84 endif9140: br label %endif9133 endif9133: br label %endif9126 endif9126: %t85 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } { ptr @.str.6296, i64 2, i64 0 }, ptr %a87 store { ptr, i64, i64 } %t85, ptr %a88 call void @finch_str_concat(ptr %a86, ptr %a87, ptr %a88) %t89 = load { ptr, i64, i64 }, ptr %a86 %t90 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t89) ret { ptr, i64, i64 } %t90 } define internal { ptr, i64, i64 } @finch.linker.guessLib({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca i64, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca i64, align 16 %a33 = alloca i64, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a85 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t2, ptr %a3 call void @finch_str_copy(ptr %a4, ptr %a3) %t5 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t5, ptr %a6 %t7 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t7, ptr %a8 store { ptr, i64, i64 } { ptr @.str.6298, i64 1, i64 0 }, ptr %a10 %t11 = call i64 @finch_str_find(ptr %a8, ptr %a10) store i64 %t11, ptr %a12 br label %while.cond9141 while.cond9141: %t13 = load i64, ptr %a12 %t14 = icmp sge i64 %t13, 0 br i1 %t14, label %while.body9142, label %while.end9143 while.body9142: %t15 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t15, ptr %a16 %t18 = load i64, ptr %a12 %t19 = add i64 %t18, 1 %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 %t21 = load i64, ptr %t20 call void @finch_str_sub(ptr %a17, ptr %a16, i64 %t19, i64 %t21, ptr @.str.6299, i64 63) %t22 = load { ptr, i64, i64 }, ptr %a17 store { ptr, i64, i64 } %t22, ptr %a6 %t23 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t23, ptr %a24 store { ptr, i64, i64 } { ptr @.str.6301, i64 1, i64 0 }, ptr %a26 %t27 = call i64 @finch_str_find(ptr %a24, ptr %a26) store i64 %t27, ptr %a12 br label %while.cond9141 while.end9143: %t28 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 %t29 = load i64, ptr %t28 store i64 %t29, ptr %a30 %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 %t32 = load i64, ptr %t31 store i64 0, ptr %a33 br label %for.cond9144 for.cond9144: %t34 = load i64, ptr %a33 %t35 = icmp slt i64 %t34, %t32 br i1 %t35, label %for.body9145, label %for.end9147 for.body9145: %t36 = load i64, ptr %a33 %t37 = load { ptr, i64, i64 }, ptr %a6 %t38 = extractvalue { ptr, i64, i64 } %t37, 1 %t39 = icmp uge i64 %t36, %t38 br i1 %t39, label %range9148, label %inrange9149 range9148: call void @finch_panic_index(ptr @.str.6302, i64 68, i64 %t36, i64 %t38) unreachable inrange9149: %t40 = extractvalue { ptr, i64, i64 } %t37, 0 %t41 = getelementptr inbounds i8, ptr %t40, i64 %t36 %t42 = load i8, ptr %t41 %t43 = icmp eq i8 %t42, 46 br i1 %t43, label %then9150, label %endif9152 then9150: %t44 = load i64, ptr %a33 store i64 %t44, ptr %a30 br label %endif9152 endif9152: br label %for.step9146 for.step9146: %t45 = load i64, ptr %a33 %t46 = add i64 %t45, 1 store i64 %t46, ptr %a33 br label %for.cond9144 for.end9147: %t47 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t47, ptr %a48 %t50 = load i64, ptr %a30 call void @finch_str_sub(ptr %a49, ptr %a48, i64 0, i64 %t50, ptr @.str.6303, i64 72) %t51 = load { ptr, i64, i64 }, ptr %a49 store { ptr, i64, i64 } %t51, ptr %a6 br label %while.cond9153 while.cond9153: %t52 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 %t53 = load i64, ptr %t52 %t54 = icmp sgt i64 %t53, 0 br label %logic.from9156 logic.from9156: br i1 %t54, label %logic.rhs9157, label %logic.end9158 logic.rhs9157: %t55 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 %t56 = load i64, ptr %t55 %t57 = sub i64 %t56, 1 %t58 = load { ptr, i64, i64 }, ptr %a6 %t59 = extractvalue { ptr, i64, i64 } %t58, 1 %t60 = icmp uge i64 %t57, %t59 br i1 %t60, label %range9159, label %inrange9160 range9159: call void @finch_panic_index(ptr @.str.6304, i64 73, i64 %t57, i64 %t59) unreachable inrange9160: %t61 = extractvalue { ptr, i64, i64 } %t58, 0 %t62 = getelementptr inbounds i8, ptr %t61, i64 %t57 %t63 = load i8, ptr %t62 %t64 = icmp uge i8 %t63, 48 br label %logic.rend9161 logic.rend9161: br label %logic.end9158 logic.end9158: %t65 = phi i1 [ false, %logic.from9156 ], [ %t64, %logic.rend9161 ] br label %logic.from9162 logic.from9162: br i1 %t65, label %logic.rhs9163, label %logic.end9164 logic.rhs9163: %t66 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 %t67 = load i64, ptr %t66 %t68 = sub i64 %t67, 1 %t69 = load { ptr, i64, i64 }, ptr %a6 %t70 = extractvalue { ptr, i64, i64 } %t69, 1 %t71 = icmp uge i64 %t68, %t70 br i1 %t71, label %range9165, label %inrange9166 range9165: call void @finch_panic_index(ptr @.str.6305, i64 73, i64 %t68, i64 %t70) unreachable inrange9166: %t72 = extractvalue { ptr, i64, i64 } %t69, 0 %t73 = getelementptr inbounds i8, ptr %t72, i64 %t68 %t74 = load i8, ptr %t73 %t75 = icmp ule i8 %t74, 57 br label %logic.rend9167 logic.rend9167: br label %logic.end9164 logic.end9164: %t76 = phi i1 [ false, %logic.from9162 ], [ %t75, %logic.rend9167 ] br i1 %t76, label %while.body9154, label %while.end9155 while.body9154: %t77 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t77, ptr %a78 %t80 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 %t81 = load i64, ptr %t80 %t82 = sub i64 %t81, 1 call void @finch_str_sub(ptr %a79, ptr %a78, i64 0, i64 %t82, ptr @.str.6306, i64 74) %t83 = load { ptr, i64, i64 }, ptr %a79 store { ptr, i64, i64 } %t83, ptr %a6 br label %while.cond9153 while.end9155: %t84 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t84, ptr %a85 call void @finch_str_lower(ptr %a86, ptr %a85) %t87 = load { ptr, i64, i64 }, ptr %a86 ret { ptr, i64, i64 } %t87 } define internal void @finch.linker.Names.add(ptr %self, { ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca i64, align 16 %a11 = alloca i64, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t3 = load i64, ptr %t2 %t4 = icmp sgt i64 %t3, 0 br label %logic.from9168 logic.from9168: br i1 %t4, label %logic.rhs9169, label %logic.end9170 logic.rhs9169: %t5 = getelementptr inbounds %S.linker.Names, ptr %self, i32 0, i32 0 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 %t7 = load { ptr, i64, i64 }, ptr %a1 store i64 -1, ptr %a8 %t9 = load i64, ptr %t6 %t10 = load ptr, ptr %t5 store i64 0, ptr %a11 br label %find.cond9171 find.cond9171: %t12 = load i64, ptr %a11 %t13 = icmp slt i64 %t12, %t9 br i1 %t13, label %find.body9172, label %find.end9175 find.body9172: %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t10, i64 %t12 %t15 = load { ptr, i64, i64 }, ptr %t14 store { ptr, i64, i64 } %t15, ptr %a16 store { ptr, i64, i64 } %t7, ptr %a17 %t18 = call i32 @finch_str_eq(ptr %a16, ptr %a17) %t19 = icmp ne i32 %t18, 0 br i1 %t19, label %find.hit9173, label %find.next9174 find.hit9173: store i64 %t12, ptr %a8 br label %find.end9175 find.next9174: %t20 = add i64 %t12, 1 store i64 %t20, ptr %a11 br label %find.cond9171 find.end9175: %t21 = load i64, ptr %a8 %t22 = icmp sge i64 %t21, 0 %t23 = xor i1 %t22, true br label %logic.rend9176 logic.rend9176: br label %logic.end9170 logic.end9170: %t24 = phi i1 [ false, %logic.from9168 ], [ %t23, %logic.rend9176 ] br i1 %t24, label %then9177, label %endif9179 then9177: %t25 = getelementptr inbounds %S.linker.Names, ptr %self, i32 0, i32 0 %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %t25, i32 0, i32 1 %t27 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t27, ptr %a28 call void @finch_str_copy(ptr %a29, ptr %a28) %t30 = load { ptr, i64, i64 }, ptr %a29 %t31 = load i64, ptr %t26 %t32 = add i64 %t31, 1 call void @finch_arr_reserve(ptr %t25, i64 %t32, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t33 = load ptr, ptr %t25 %t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %t33, i64 %t31 store { ptr, i64, i64 } %t30, ptr %t34 store i64 %t32, ptr %t26 br label %endif9179 endif9179: ret void } define internal { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca i64, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca i64, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 %t4 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t4, ptr %a5 %t7 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t7, ptr %a8 %t9 = call i64 @finch_str_find(ptr %a5, ptr %a8) store i64 %t9, ptr %a10 %t11 = load i64, ptr %a10 %t12 = icmp slt i64 %t11, 0 br i1 %t12, label %then9180, label %endif9182 then9180: ret { ptr, i64, i64 } { ptr @.str.6309, i64 0, i64 0 } endif9182: %t13 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t13, ptr %a14 %t16 = load i64, ptr %a10 %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t18 = load i64, ptr %t17 %t19 = add i64 %t16, %t18 %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t21 = load i64, ptr %t20 call void @finch_str_sub(ptr %a15, ptr %a14, i64 %t19, i64 %t21, ptr @.str.6310, i64 95) %t22 = load { ptr, i64, i64 }, ptr %a15 store { ptr, i64, i64 } %t22, ptr %a23 store i64 0, ptr %a24 br label %while.cond9183 while.cond9183: %t25 = load i64, ptr %a24 %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %a23, i32 0, i32 1 %t27 = load i64, ptr %t26 %t28 = icmp slt i64 %t25, %t27 br label %logic.from9186 logic.from9186: br i1 %t28, label %logic.rhs9187, label %logic.end9188 logic.rhs9187: %t29 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t29, ptr %a30 %t32 = load i64, ptr %a24 %t33 = load { ptr, i64, i64 }, ptr %a23 %t34 = extractvalue { ptr, i64, i64 } %t33, 1 %t35 = icmp uge i64 %t32, %t34 br i1 %t35, label %range9189, label %inrange9190 range9189: call void @finch_panic_index(ptr @.str.6312, i64 97, i64 %t32, i64 %t34) unreachable inrange9190: %t36 = extractvalue { ptr, i64, i64 } %t33, 0 %t37 = getelementptr inbounds i8, ptr %t36, i64 %t32 %t38 = load i8, ptr %t37 call void @finch_str_from_char(ptr %a39, i8 signext %t38) %t40 = load { ptr, i64, i64 }, ptr %a39 store { ptr, i64, i64 } %t40, ptr %a41 %t42 = call i64 @finch_str_find(ptr %a30, ptr %a41) %t43 = icmp sge i64 %t42, 0 %t44 = xor i1 %t43, true br label %logic.rend9191 logic.rend9191: br label %logic.end9188 logic.end9188: %t45 = phi i1 [ false, %logic.from9186 ], [ %t44, %logic.rend9191 ] br i1 %t45, label %while.body9184, label %while.end9185 while.body9184: %t46 = load i64, ptr %a24 %t47 = add i64 %t46, 1 store i64 %t47, ptr %a24 br label %while.cond9183 while.end9185: %t48 = load { ptr, i64, i64 }, ptr %a23 store { ptr, i64, i64 } %t48, ptr %a49 %t51 = load i64, ptr %a24 call void @finch_str_sub(ptr %a50, ptr %a49, i64 0, i64 %t51, ptr @.str.6313, i64 100) %t52 = load { ptr, i64, i64 }, ptr %a50 ret { ptr, i64, i64 } %t52 } define internal i64 @finch.linker.linkFailed({ ptr, i64, i64 } %p0, %S.cimport.CImports %p1, %S.platform.Target %p2) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a2 = alloca %S.cimport.CImports, align 16 %a3 = alloca %S.platform.Target, align 16 %a4 = alloca %S.linker.Names, align 16 %a5 = alloca %S.linker.Names, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca i64, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca { ptr, i64, i64 }, align 16 %a111 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 %a113 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca { ptr, i64, i64 }, align 16 %a120 = alloca { ptr, i64, i64 }, align 16 %a121 = alloca { ptr, i64, i64 }, align 16 %a122 = alloca { ptr, i64, i64 }, align 16 %a127 = alloca { ptr, i64, i64 }, align 16 %a128 = alloca { ptr, i64, i64 }, align 16 %a145 = alloca { ptr, i64, i64 }, align 16 %a146 = alloca { ptr, i64, i64 }, align 16 %a147 = alloca { ptr, i64, i64 }, align 16 %a157 = alloca i64, align 16 %a165 = alloca { ptr, i64, i64 }, align 16 %a167 = alloca { ptr, i64, i64 }, align 16 %a168 = alloca { ptr, i64, i64 }, align 16 %a169 = alloca { ptr, i64, i64 }, align 16 %a171 = alloca { ptr, i64, i64 }, align 16 %a172 = alloca { ptr, i64, i64 }, align 16 %a173 = alloca { ptr, i64, i64 }, align 16 %a184 = alloca { ptr, i64, i64 }, align 16 %a185 = alloca { ptr, i64, i64 }, align 16 %a187 = alloca i64, align 16 %a195 = alloca { ptr, i64, i64 }, align 16 %a196 = alloca { ptr, i64, i64 }, align 16 %a199 = alloca { ptr, i64, i64 }, align 16 %a204 = alloca { ptr, i64, i64 }, align 16 %a207 = alloca { ptr, i64, i64 }, align 16 %a208 = alloca { ptr, i64, i64 }, align 16 %a215 = alloca { ptr, i64, i64 }, align 16 %a216 = alloca { ptr, i64, i64 }, align 16 %a220 = alloca i64, align 16 %a223 = alloca i64, align 16 %a228 = alloca { ptr, i64, i64 }, align 16 %a229 = alloca { ptr, i64, i64 }, align 16 %a234 = alloca i64, align 16 %a239 = alloca { ptr, i64, i64 }, align 16 %a240 = alloca { ptr, i64, i64 }, align 16 %a265 = alloca i64, align 16 %a276 = alloca { ptr, i64, i64 }, align 16 %a277 = alloca { ptr, i64, i64 }, align 16 %a279 = alloca { ptr, i64, i64 }, align 16 %a280 = alloca { ptr, i64, i64 }, align 16 %a283 = alloca i64, align 16 %a296 = alloca { ptr, i64, i64 }, align 16 %a297 = alloca { ptr, i64, i64 }, align 16 %a306 = alloca { ptr, i64, i64 }, align 16 %a307 = alloca { ptr, i64, i64 }, align 16 %a309 = alloca { ptr, i64, i64 }, align 16 %a314 = alloca { ptr, i64, i64 }, align 16 %a315 = alloca { ptr, i64, i64 }, align 16 %a316 = alloca { ptr, i64, i64 }, align 16 %a321 = alloca { ptr, i64, i64 }, align 16 %a323 = alloca { ptr, i64, i64 }, align 16 %a324 = alloca { ptr, i64, i64 }, align 16 %a325 = alloca { ptr, i64, i64 }, align 16 %a327 = alloca { ptr, i64, i64 }, align 16 %a328 = alloca { ptr, i64, i64 }, align 16 %a329 = alloca { ptr, i64, i64 }, align 16 %a341 = alloca { ptr, i64, i64 }, align 16 %a342 = alloca { ptr, i64, i64 }, align 16 %a343 = alloca { ptr, i64, i64 }, align 16 %a352 = alloca { ptr, i64, i64 }, align 16 %a357 = alloca { ptr, i64, i64 }, align 16 %a358 = alloca { ptr, i64, i64 }, align 16 %a359 = alloca { ptr, i64, i64 }, align 16 %a361 = alloca { ptr, i64, i64 }, align 16 %a362 = alloca { ptr, i64, i64 }, align 16 %a363 = alloca { ptr, i64, i64 }, align 16 %a366 = alloca { ptr, i64, i64 }, align 16 %a367 = alloca { ptr, i64, i64 }, align 16 %a368 = alloca { ptr, i64, i64 }, align 16 %a370 = alloca { ptr, i64, i64 }, align 16 %a371 = alloca { ptr, i64, i64 }, align 16 %a372 = alloca { ptr, i64, i64 }, align 16 %a381 = alloca { ptr, i64, i64 }, align 16 %a382 = alloca { ptr, i64, i64 }, align 16 %a383 = alloca { ptr, i64, i64 }, align 16 %a385 = alloca { ptr, i64, i64 }, align 16 %a386 = alloca { ptr, i64, i64 }, align 16 %a387 = alloca { ptr, i64, i64 }, align 16 %a425 = alloca { ptr, i64, i64 }, align 16 %a426 = alloca { ptr, i64, i64 }, align 16 %a427 = alloca { ptr, i64, i64 }, align 16 %a429 = alloca { ptr, i64, i64 }, align 16 %a430 = alloca { ptr, i64, i64 }, align 16 %a431 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 store %S.cimport.CImports %p1, ptr %a2 store %S.platform.Target %p2, ptr %a3 store %S.linker.Names zeroinitializer, ptr %a4 store %S.linker.Names zeroinitializer, ptr %a5 %t6 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t6, ptr %a7 store { ptr, i64, i64 } { ptr @.str.6315, i64 1, i64 0 }, ptr %a9 call void @finch_str_split(ptr %a10, ptr %a7, ptr %a9) %t11 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t11, ptr %a12 store i64 0, ptr %a13 br label %each.cond9192 each.cond9192: %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %a12, i32 0, i32 1 %t15 = load i64, ptr %t14 %t16 = load i64, ptr %a13 %t17 = icmp slt i64 %t16, %t15 br i1 %t17, label %each.body9193, label %each.end9195 each.body9193: %t18 = load ptr, ptr %a12 %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t18, i64 %t16 %t20 = load { ptr, i64, i64 }, ptr %t19 store { ptr, i64, i64 } %t20, ptr %a21 %t22 = load { ptr, i64, i64 }, ptr %a21 store { ptr, i64, i64 } %t22, ptr %a23 call void @finch_str_trim(ptr %a24, ptr %a23) %t25 = load { ptr, i64, i64 }, ptr %a24 store { ptr, i64, i64 } %t25, ptr %a26 %t27 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } %t27, ptr %a28 store { ptr, i64, i64 } { ptr @.str.6318, i64 24, i64 0 }, ptr %a30 %t31 = call i64 @finch_str_find(ptr %a28, ptr %a30) %t32 = icmp sge i64 %t31, 0 br i1 %t32, label %then9196, label %else9197 then9196: %t33 = load { ptr, i64, i64 }, ptr %a26 %t34 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t33, { ptr, i64, i64 } { ptr @.str.6319, i64 24, i64 0 }, { ptr, i64, i64 } { ptr @.str.6320, i64 1, i64 0 }) call void @finch.linker.Names.add(ptr %a4, { ptr, i64, i64 } %t34) br label %endif9198 else9197: %t35 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } %t35, ptr %a36 store { ptr, i64, i64 } { ptr @.str.6322, i64 18, i64 0 }, ptr %a38 %t39 = call i64 @finch_str_find(ptr %a36, ptr %a38) %t40 = icmp sge i64 %t39, 0 br i1 %t40, label %then9199, label %else9200 then9199: %t41 = load { ptr, i64, i64 }, ptr %a26 %t42 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t41, { ptr, i64, i64 } { ptr @.str.6323, i64 18, i64 0 }, { ptr, i64, i64 } { ptr @.str.6324, i64 2, i64 0 }) call void @finch.linker.Names.add(ptr %a4, { ptr, i64, i64 } %t42) br label %endif9201 else9200: %t43 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } %t43, ptr %a44 store { ptr, i64, i64 } { ptr @.str.6326, i64 27, i64 0 }, ptr %a46 %t47 = call i64 @finch_str_find(ptr %a44, ptr %a46) %t48 = icmp sge i64 %t47, 0 br i1 %t48, label %then9202, label %else9203 then9202: %t49 = load { ptr, i64, i64 }, ptr %a26 %t50 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t49, { ptr, i64, i64 } { ptr @.str.6327, i64 27, i64 0 }, { ptr, i64, i64 } { ptr @.str.6328, i64 3, i64 0 }) call void @finch.linker.Names.add(ptr %a4, { ptr, i64, i64 } %t50) br label %endif9204 else9203: %t51 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } %t51, ptr %a52 store { ptr, i64, i64 } { ptr @.str.6330, i64 14, i64 0 }, ptr %a54 %t55 = call i64 @finch_str_find(ptr %a52, ptr %a54) %t56 = icmp sge i64 %t55, 0 br i1 %t56, label %then9205, label %else9206 then9205: %t57 = load { ptr, i64, i64 }, ptr %a26 %t58 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t57, { ptr, i64, i64 } { ptr @.str.6331, i64 14, i64 0 }, { ptr, i64, i64 } { ptr @.str.6332, i64 4, i64 0 }) call void @finch.linker.Names.add(ptr %a5, { ptr, i64, i64 } %t58) br label %endif9207 else9206: %t59 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } %t59, ptr %a60 store { ptr, i64, i64 } { ptr @.str.6334, i64 24, i64 0 }, ptr %a62 %t63 = call i64 @finch_str_find(ptr %a60, ptr %a62) %t64 = icmp sge i64 %t63, 0 br i1 %t64, label %then9208, label %else9209 then9208: %t65 = load { ptr, i64, i64 }, ptr %a26 %t66 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t65, { ptr, i64, i64 } { ptr @.str.6335, i64 24, i64 0 }, { ptr, i64, i64 } { ptr @.str.6336, i64 4, i64 0 }) call void @finch.linker.Names.add(ptr %a5, { ptr, i64, i64 } %t66) br label %endif9210 else9209: %t67 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } %t67, ptr %a68 store { ptr, i64, i64 } { ptr @.str.6338, i64 13, i64 0 }, ptr %a70 %t71 = call i64 @finch_str_find(ptr %a68, ptr %a70) %t72 = icmp sge i64 %t71, 0 br i1 %t72, label %then9211, label %else9212 then9211: %t73 = load { ptr, i64, i64 }, ptr %a26 %t74 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t73, { ptr, i64, i64 } { ptr @.str.6339, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.6340, i64 1, i64 0 }) call void @finch.linker.Names.add(ptr %a5, { ptr, i64, i64 } %t74) br label %endif9213 else9212: %t75 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } %t75, ptr %a76 store { ptr, i64, i64 } { ptr @.str.6342, i64 11, i64 0 }, ptr %a78 %t79 = call i64 @finch_str_find(ptr %a76, ptr %a78) %t80 = icmp sge i64 %t79, 0 br label %logic.from9214 logic.from9214: br i1 %t80, label %logic.rhs9215, label %logic.end9216 logic.rhs9215: %t81 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } %t81, ptr %a82 store { ptr, i64, i64 } { ptr @.str.6344, i64 9, i64 0 }, ptr %a84 %t85 = call i64 @finch_str_find(ptr %a82, ptr %a84) %t86 = icmp sge i64 %t85, 0 br label %logic.rend9217 logic.rend9217: br label %logic.end9216 logic.end9216: %t87 = phi i1 [ false, %logic.from9214 ], [ %t86, %logic.rend9217 ] br i1 %t87, label %then9218, label %else9219 then9218: %t88 = load { ptr, i64, i64 }, ptr %a26 %t89 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t88, { ptr, i64, i64 } { ptr @.str.6345, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.6346, i64 1, i64 0 }) store { ptr, i64, i64 } %t89, ptr %a91 store { ptr, i64, i64 } { ptr @.str.6347, i64 10, i64 0 }, ptr %a92 call void @finch_str_concat(ptr %a90, ptr %a91, ptr %a92) %t93 = load { ptr, i64, i64 }, ptr %a90 call void @finch.linker.Names.add(ptr %a5, { ptr, i64, i64 } %t93) br label %endif9220 else9219: %t94 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } %t94, ptr %a95 store { ptr, i64, i64 } { ptr @.str.6349, i64 1, i64 0 }, ptr %a97 %t98 = call i32 @finch_str_starts(ptr %a95, ptr %a97) %t99 = icmp ne i32 %t98, 0 br label %logic.from9221 logic.from9221: br i1 %t99, label %logic.rhs9222, label %logic.end9223 logic.rhs9222: %t100 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } %t100, ptr %a101 store { ptr, i64, i64 } { ptr @.str.6351, i64 19, i64 0 }, ptr %a103 %t104 = call i64 @finch_str_find(ptr %a101, ptr %a103) %t105 = icmp sge i64 %t104, 0 br label %logic.rend9224 logic.rend9224: br label %logic.end9223 logic.end9223: %t106 = phi i1 [ false, %logic.from9221 ], [ %t105, %logic.rend9224 ] br i1 %t106, label %then9225, label %endif9227 then9225: %t107 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } %t107, ptr %a108 %t110 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } %t110, ptr %a111 store { ptr, i64, i64 } { ptr @.str.6354, i64 19, i64 0 }, ptr %a113 %t114 = call i64 @finch_str_find(ptr %a111, ptr %a113) call void @finch_str_sub(ptr %a109, ptr %a108, i64 1, i64 %t114, ptr @.str.6352, i64 125) %t115 = load { ptr, i64, i64 }, ptr %a109 store { ptr, i64, i64 } %t115, ptr %a116 %t117 = getelementptr inbounds %S.platform.Target, ptr %a3, i32 0, i32 3 %t118 = load i1, ptr %t117 br label %logic.from9228 logic.from9228: br i1 %t118, label %logic.rhs9229, label %logic.end9230 logic.rhs9229: %t119 = load { ptr, i64, i64 }, ptr %a116 store { ptr, i64, i64 } %t119, ptr %a120 store { ptr, i64, i64 } { ptr @.str.6356, i64 1, i64 0 }, ptr %a122 %t123 = call i32 @finch_str_starts(ptr %a120, ptr %a122) %t124 = icmp ne i32 %t123, 0 br label %logic.rend9231 logic.rend9231: br label %logic.end9230 logic.end9230: %t125 = phi i1 [ false, %logic.from9228 ], [ %t124, %logic.rend9231 ] br i1 %t125, label %then9232, label %endif9234 then9232: %t126 = load { ptr, i64, i64 }, ptr %a116 store { ptr, i64, i64 } %t126, ptr %a127 %t129 = getelementptr inbounds { ptr, i64, i64 }, ptr %a116, i32 0, i32 1 %t130 = load i64, ptr %t129 call void @finch_str_sub(ptr %a128, ptr %a127, i64 1, i64 %t130, ptr @.str.6357, i64 127) %t131 = load { ptr, i64, i64 }, ptr %a128 store { ptr, i64, i64 } %t131, ptr %a116 br label %endif9234 endif9234: %t132 = load { ptr, i64, i64 }, ptr %a116 call void @finch.linker.Names.add(ptr %a4, { ptr, i64, i64 } %t132) br label %endif9227 endif9227: br label %endif9220 endif9220: br label %endif9213 endif9213: br label %endif9210 endif9210: br label %endif9207 endif9207: br label %endif9204 endif9204: br label %endif9201 endif9201: br label %endif9198 endif9198: br label %each.step9194 each.step9194: %t133 = load i64, ptr %a13 %t134 = add i64 %t133, 1 store i64 %t134, ptr %a13 br label %each.cond9192 each.end9195: %t135 = getelementptr inbounds %S.linker.Names, ptr %a4, i32 0, i32 0 %t136 = getelementptr inbounds { ptr, i64, i64 }, ptr %t135, i32 0, i32 1 %t137 = load i64, ptr %t136 %t138 = icmp eq i64 %t137, 0 br label %logic.from9235 logic.from9235: br i1 %t138, label %logic.rhs9236, label %logic.end9237 logic.rhs9236: %t139 = getelementptr inbounds %S.linker.Names, ptr %a5, i32 0, i32 0 %t140 = getelementptr inbounds { ptr, i64, i64 }, ptr %t139, i32 0, i32 1 %t141 = load i64, ptr %t140 %t142 = icmp eq i64 %t141, 0 br label %logic.rend9238 logic.rend9238: br label %logic.end9237 logic.end9237: %t143 = phi i1 [ false, %logic.from9235 ], [ %t142, %logic.rend9238 ] br i1 %t143, label %then9239, label %endif9241 then9239: %t144 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t144, ptr %a146 store { ptr, i64, i64 } { ptr @.str.6358, i64 21, i64 0 }, ptr %a147 call void @finch_str_concat(ptr %a145, ptr %a146, ptr %a147) %t148 = load { ptr, i64, i64 }, ptr %a145 %t149 = extractvalue { ptr, i64, i64 } %t148, 1 %t150 = trunc i64 %t149 to i32 %t151 = extractvalue { ptr, i64, i64 } %t148, 0 %t152 = icmp eq ptr %t151, null %t153 = select i1 %t152, ptr @.str.6359, ptr %t151 %t154 = call i32 (ptr, ...) @printf(ptr @.str.6360, i32 %t150, ptr %t153) %t155 = call i32 (ptr, ...) @printf(ptr @.str.6361) ret i64 1 endif9241: %t156 = getelementptr inbounds %S.linker.Names, ptr %a5, i32 0, i32 0 store i64 0, ptr %a157 br label %each.cond9242 each.cond9242: %t158 = getelementptr inbounds { ptr, i64, i64 }, ptr %t156, i32 0, i32 1 %t159 = load i64, ptr %t158 %t160 = load i64, ptr %a157 %t161 = icmp slt i64 %t160, %t159 br i1 %t161, label %each.body9243, label %each.end9245 each.body9243: %t162 = load ptr, ptr %t156 %t163 = getelementptr inbounds { ptr, i64, i64 }, ptr %t162, i64 %t160 %t164 = load { ptr, i64, i64 }, ptr %t163 store { ptr, i64, i64 } %t164, ptr %a165 %t166 = load { ptr, i64, i64 }, ptr %a165 store { ptr, i64, i64 } { ptr @.str.6362, i64 20, i64 0 }, ptr %a168 store { ptr, i64, i64 } %t166, ptr %a169 call void @finch_str_concat(ptr %a167, ptr %a168, ptr %a169) %t170 = load { ptr, i64, i64 }, ptr %a167 store { ptr, i64, i64 } %t170, ptr %a172 store { ptr, i64, i64 } { ptr @.str.6363, i64 62, i64 0 }, ptr %a173 call void @finch_str_concat(ptr %a171, ptr %a172, ptr %a173) %t174 = load { ptr, i64, i64 }, ptr %a171 %t175 = extractvalue { ptr, i64, i64 } %t174, 1 %t176 = trunc i64 %t175 to i32 %t177 = extractvalue { ptr, i64, i64 } %t174, 0 %t178 = icmp eq ptr %t177, null %t179 = select i1 %t178, ptr @.str.6364, ptr %t177 %t180 = call i32 (ptr, ...) @printf(ptr @.str.6365, i32 %t176, ptr %t179) %t181 = call i32 (ptr, ...) @printf(ptr @.str.6366) br label %each.step9244 each.step9244: %t182 = load i64, ptr %a157 %t183 = add i64 %t182, 1 store i64 %t183, ptr %a157 br label %each.cond9242 each.end9245: store { ptr, i64, i64 } zeroinitializer, ptr %a184 store { ptr, i64, i64 } zeroinitializer, ptr %a185 %t186 = getelementptr inbounds %S.linker.Names, ptr %a4, i32 0, i32 0 store i64 0, ptr %a187 br label %each.cond9246 each.cond9246: %t188 = getelementptr inbounds { ptr, i64, i64 }, ptr %t186, i32 0, i32 1 %t189 = load i64, ptr %t188 %t190 = load i64, ptr %a187 %t191 = icmp slt i64 %t190, %t189 br i1 %t191, label %each.body9247, label %each.end9249 each.body9247: %t192 = load ptr, ptr %t186 %t193 = getelementptr inbounds { ptr, i64, i64 }, ptr %t192, i64 %t190 %t194 = load { ptr, i64, i64 }, ptr %t193 store { ptr, i64, i64 } %t194, ptr %a195 store { ptr, i64, i64 } { ptr @.str.6367, i64 0, i64 0 }, ptr %a196 %t197 = getelementptr inbounds %S.cimport.CImports, ptr %a2, i32 0, i32 0 %t198 = load { ptr, i64, i64 }, ptr %a195 store { ptr, i64, i64 } %t198, ptr %a199 %t200 = call i64 @finch_map_find(ptr %t197, ptr %a199, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t201 = icmp sge i64 %t200, 0 br i1 %t201, label %then9250, label %endif9252 then9250: %t202 = getelementptr inbounds %S.cimport.CImports, ptr %a2, i32 0, i32 0 %t203 = load { ptr, i64, i64 }, ptr %a195 store { ptr, i64, i64 } %t203, ptr %a204 %t205 = call i64 @finch_map_find(ptr %t202, ptr %a204, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t206 = icmp slt i64 %t205, 0 br i1 %t206, label %map.missing9253, label %map.found9254 map.missing9253: store { ptr, i64, i64 } zeroinitializer, ptr %a207 store { ptr, i64, i64 } %t203, ptr %a208 call void @finch_buf_str(ptr %a207, ptr %a208, i32 1) call void @finch_map_missing(ptr @.str.6368, i64 145, ptr %a207) unreachable map.found9254: %t209 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t202, i32 0, i32 0 %t210 = load ptr, ptr %t209 %t211 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t210, i64 %t205 %t212 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t211, i32 0, i32 2 %t213 = getelementptr inbounds %S.cimport.CFunc, ptr %t212, i32 0, i32 1 %t214 = load { ptr, i64, i64 }, ptr %t213 store { ptr, i64, i64 } %t214, ptr %a215 call void @finch_str_copy(ptr %a216, ptr %a215) %t217 = load { ptr, i64, i64 }, ptr %a216 store { ptr, i64, i64 } %t217, ptr %a196 br label %endif9252 endif9252: %t218 = getelementptr inbounds { ptr, i64, i64 }, ptr %a184, i32 0, i32 1 %t219 = load { ptr, i64, i64 }, ptr %a196 store i64 -1, ptr %a220 %t221 = load i64, ptr %t218 %t222 = load ptr, ptr %a184 store i64 0, ptr %a223 br label %find.cond9255 find.cond9255: %t224 = load i64, ptr %a223 %t225 = icmp slt i64 %t224, %t221 br i1 %t225, label %find.body9256, label %find.end9259 find.body9256: %t226 = getelementptr inbounds { ptr, i64, i64 }, ptr %t222, i64 %t224 %t227 = load { ptr, i64, i64 }, ptr %t226 store { ptr, i64, i64 } %t227, ptr %a228 store { ptr, i64, i64 } %t219, ptr %a229 %t230 = call i32 @finch_str_eq(ptr %a228, ptr %a229) %t231 = icmp ne i32 %t230, 0 br i1 %t231, label %find.hit9257, label %find.next9258 find.hit9257: store i64 %t224, ptr %a220 br label %find.end9259 find.next9258: %t232 = add i64 %t224, 1 store i64 %t232, ptr %a223 br label %find.cond9255 find.end9259: %t233 = load i64, ptr %a220 store i64 %t233, ptr %a234 %t235 = load i64, ptr %a234 %t236 = icmp slt i64 %t235, 0 br i1 %t236, label %then9260, label %endif9262 then9260: %t237 = getelementptr inbounds { ptr, i64, i64 }, ptr %a184, i32 0, i32 1 %t238 = load { ptr, i64, i64 }, ptr %a196 store { ptr, i64, i64 } %t238, ptr %a239 call void @finch_str_copy(ptr %a240, ptr %a239) %t241 = load { ptr, i64, i64 }, ptr %a240 %t242 = load i64, ptr %t237 %t243 = add i64 %t242, 1 call void @finch_arr_reserve(ptr %a184, i64 %t243, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t244 = load ptr, ptr %a184 %t245 = getelementptr inbounds { ptr, i64, i64 }, ptr %t244, i64 %t242 store { ptr, i64, i64 } %t241, ptr %t245 store i64 %t243, ptr %t237 %t246 = getelementptr inbounds { ptr, i64, i64 }, ptr %a185, i32 0, i32 1 %t247 = load i64, ptr %t246 %t248 = add i64 %t247, 1 call void @finch_arr_reserve(ptr %a185, i64 %t248, i64 ptrtoint (ptr getelementptr (%S.linker.Names, ptr null, i32 1) to i64)) %t249 = load ptr, ptr %a185 %t250 = getelementptr inbounds %S.linker.Names, ptr %t249, i64 %t247 store %S.linker.Names zeroinitializer, ptr %t250 store i64 %t248, ptr %t246 %t251 = getelementptr inbounds { ptr, i64, i64 }, ptr %a184, i32 0, i32 1 %t252 = load i64, ptr %t251 %t253 = sub i64 %t252, 1 store i64 %t253, ptr %a234 br label %endif9262 endif9262: %t254 = load i64, ptr %a234 %t255 = load { ptr, i64, i64 }, ptr %a185 %t256 = extractvalue { ptr, i64, i64 } %t255, 1 %t257 = icmp uge i64 %t254, %t256 br i1 %t257, label %range9263, label %inrange9264 range9263: call void @finch_panic_index(ptr @.str.6369, i64 153, i64 %t254, i64 %t256) unreachable inrange9264: %t258 = extractvalue { ptr, i64, i64 } %t255, 0 %t259 = getelementptr inbounds %S.linker.Names, ptr %t258, i64 %t254 %t260 = load { ptr, i64, i64 }, ptr %a195 call void @finch.linker.Names.add(ptr %t259, { ptr, i64, i64 } %t260) br label %each.step9248 each.step9248: %t261 = load i64, ptr %a187 %t262 = add i64 %t261, 1 store i64 %t262, ptr %a187 br label %each.cond9246 each.end9249: %t263 = getelementptr inbounds { ptr, i64, i64 }, ptr %a184, i32 0, i32 1 %t264 = load i64, ptr %t263 store i64 0, ptr %a265 br label %for.cond9265 for.cond9265: %t266 = load i64, ptr %a265 %t267 = icmp slt i64 %t266, %t264 br i1 %t267, label %for.body9266, label %for.end9268 for.body9266: %t268 = load i64, ptr %a265 %t269 = load { ptr, i64, i64 }, ptr %a185 %t270 = extractvalue { ptr, i64, i64 } %t269, 1 %t271 = icmp uge i64 %t268, %t270 br i1 %t271, label %range9269, label %inrange9270 range9269: call void @finch_panic_index(ptr @.str.6370, i64 156, i64 %t268, i64 %t270) unreachable inrange9270: %t272 = extractvalue { ptr, i64, i64 } %t269, 0 %t273 = getelementptr inbounds %S.linker.Names, ptr %t272, i64 %t268 %t274 = getelementptr inbounds %S.linker.Names, ptr %t273, i32 0, i32 0 %t275 = load { ptr, i64, i64 }, ptr %t274 store { ptr, i64, i64 } %t275, ptr %a276 call void @finch.copy.arr_str(ptr %a277, ptr %a276) %t278 = load { ptr, i64, i64 }, ptr %a277 store { ptr, i64, i64 } %t278, ptr %a279 store { ptr, i64, i64 } zeroinitializer, ptr %a280 %t281 = getelementptr inbounds { ptr, i64, i64 }, ptr %a279, i32 0, i32 1 %t282 = load i64, ptr %t281 store i64 0, ptr %a283 br label %for.cond9271 for.cond9271: %t284 = load i64, ptr %a283 %t285 = icmp slt i64 %t284, %t282 br i1 %t285, label %for.body9272, label %for.end9274 for.body9272: %t286 = load i64, ptr %a283 %t287 = icmp slt i64 %t286, 3 br i1 %t287, label %then9275, label %endif9277 then9275: %t288 = getelementptr inbounds { ptr, i64, i64 }, ptr %a280, i32 0, i32 1 %t289 = load i64, ptr %a283 %t290 = load { ptr, i64, i64 }, ptr %a279 %t291 = extractvalue { ptr, i64, i64 } %t290, 1 %t292 = icmp uge i64 %t289, %t291 br i1 %t292, label %range9278, label %inrange9279 range9278: call void @finch_panic_index(ptr @.str.6371, i64 160, i64 %t289, i64 %t291) unreachable inrange9279: %t293 = extractvalue { ptr, i64, i64 } %t290, 0 %t294 = getelementptr inbounds { ptr, i64, i64 }, ptr %t293, i64 %t289 %t295 = load { ptr, i64, i64 }, ptr %t294 store { ptr, i64, i64 } %t295, ptr %a296 call void @finch_str_copy(ptr %a297, ptr %a296) %t298 = load { ptr, i64, i64 }, ptr %a297 %t299 = load i64, ptr %t288 %t300 = add i64 %t299, 1 call void @finch_arr_reserve(ptr %a280, i64 %t300, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t301 = load ptr, ptr %a280 %t302 = getelementptr inbounds { ptr, i64, i64 }, ptr %t301, i64 %t299 store { ptr, i64, i64 } %t298, ptr %t302 store i64 %t300, ptr %t288 br label %endif9277 endif9277: br label %for.step9273 for.step9273: %t303 = load i64, ptr %a283 %t304 = add i64 %t303, 1 store i64 %t304, ptr %a283 br label %for.cond9271 for.end9274: %t305 = getelementptr inbounds { ptr, i64, i64 }, ptr %a280, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.6372, i64 2, i64 0 }, ptr %a306 call void @finch_str_join(ptr %a307, ptr %a280, ptr %a306) %t308 = load { ptr, i64, i64 }, ptr %a307 store { ptr, i64, i64 } %t308, ptr %a309 %t310 = getelementptr inbounds { ptr, i64, i64 }, ptr %a279, i32 0, i32 1 %t311 = load i64, ptr %t310 %t312 = icmp sgt i64 %t311, 3 br i1 %t312, label %then9280, label %endif9282 then9280: %t313 = load { ptr, i64, i64 }, ptr %a309 store { ptr, i64, i64 } %t313, ptr %a315 store { ptr, i64, i64 } { ptr @.str.6373, i64 5, i64 0 }, ptr %a316 call void @finch_str_concat(ptr %a314, ptr %a315, ptr %a316) %t317 = load { ptr, i64, i64 }, ptr %a314 %t318 = getelementptr inbounds { ptr, i64, i64 }, ptr %a279, i32 0, i32 1 %t319 = load i64, ptr %t318 %t320 = sub i64 %t319, 3 call void @finch_str_from_int(ptr %a321, i64 %t320) %t322 = load { ptr, i64, i64 }, ptr %a321 store { ptr, i64, i64 } %t317, ptr %a324 store { ptr, i64, i64 } %t322, ptr %a325 call void @finch_str_concat(ptr %a323, ptr %a324, ptr %a325) %t326 = load { ptr, i64, i64 }, ptr %a323 store { ptr, i64, i64 } %t326, ptr %a328 store { ptr, i64, i64 } { ptr @.str.6374, i64 5, i64 0 }, ptr %a329 call void @finch_str_concat(ptr %a327, ptr %a328, ptr %a329) %t330 = load { ptr, i64, i64 }, ptr %a327 store { ptr, i64, i64 } %t330, ptr %a309 br label %endif9282 endif9282: %t331 = load i64, ptr %a265 %t332 = load { ptr, i64, i64 }, ptr %a184 %t333 = extractvalue { ptr, i64, i64 } %t332, 1 %t334 = icmp uge i64 %t331, %t333 br i1 %t334, label %range9283, label %inrange9284 range9283: call void @finch_panic_index(ptr @.str.6375, i64 167, i64 %t331, i64 %t333) unreachable inrange9284: %t335 = extractvalue { ptr, i64, i64 } %t332, 0 %t336 = getelementptr inbounds { ptr, i64, i64 }, ptr %t335, i64 %t331 %t337 = getelementptr inbounds { ptr, i64, i64 }, ptr %t336, i32 0, i32 1 %t338 = load i64, ptr %t337 %t339 = icmp eq i64 %t338, 0 br i1 %t339, label %then9285, label %endif9287 then9285: %t340 = load { ptr, i64, i64 }, ptr %a309 store { ptr, i64, i64 } { ptr @.str.6376, i64 25, i64 0 }, ptr %a342 store { ptr, i64, i64 } %t340, ptr %a343 call void @finch_str_concat(ptr %a341, ptr %a342, ptr %a343) %t344 = load { ptr, i64, i64 }, ptr %a341 %t345 = extractvalue { ptr, i64, i64 } %t344, 1 %t346 = trunc i64 %t345 to i32 %t347 = extractvalue { ptr, i64, i64 } %t344, 0 %t348 = icmp eq ptr %t347, null %t349 = select i1 %t348, ptr @.str.6377, ptr %t347 %t350 = call i32 (ptr, ...) @printf(ptr @.str.6378, i32 %t346, ptr %t349) %t351 = call i32 (ptr, ...) @printf(ptr @.str.6379) br label %for.step9267 endif9287: store { ptr, i64, i64 } { ptr @.str.6380, i64 4, i64 0 }, ptr %a352 %t353 = getelementptr inbounds { ptr, i64, i64 }, ptr %a279, i32 0, i32 1 %t354 = load i64, ptr %t353 %t355 = icmp eq i64 %t354, 1 br i1 %t355, label %then9288, label %endif9290 then9288: store { ptr, i64, i64 } { ptr @.str.6381, i64 5, i64 0 }, ptr %a352 br label %endif9290 endif9290: %t356 = load { ptr, i64, i64 }, ptr %a309 store { ptr, i64, i64 } { ptr @.str.6382, i64 7, i64 0 }, ptr %a358 store { ptr, i64, i64 } %t356, ptr %a359 call void @finch_str_concat(ptr %a357, ptr %a358, ptr %a359) %t360 = load { ptr, i64, i64 }, ptr %a357 store { ptr, i64, i64 } %t360, ptr %a362 store { ptr, i64, i64 } { ptr @.str.6383, i64 1, i64 0 }, ptr %a363 call void @finch_str_concat(ptr %a361, ptr %a362, ptr %a363) %t364 = load { ptr, i64, i64 }, ptr %a361 %t365 = load { ptr, i64, i64 }, ptr %a352 store { ptr, i64, i64 } %t364, ptr %a367 store { ptr, i64, i64 } %t365, ptr %a368 call void @finch_str_concat(ptr %a366, ptr %a367, ptr %a368) %t369 = load { ptr, i64, i64 }, ptr %a366 store { ptr, i64, i64 } %t369, ptr %a371 store { ptr, i64, i64 } { ptr @.str.6384, i64 7, i64 0 }, ptr %a372 call void @finch_str_concat(ptr %a370, ptr %a371, ptr %a372) %t373 = load { ptr, i64, i64 }, ptr %a370 %t374 = load i64, ptr %a265 %t375 = load { ptr, i64, i64 }, ptr %a184 %t376 = extractvalue { ptr, i64, i64 } %t375, 1 %t377 = icmp uge i64 %t374, %t376 br i1 %t377, label %range9291, label %inrange9292 range9291: call void @finch_panic_index(ptr @.str.6385, i64 175, i64 %t374, i64 %t376) unreachable inrange9292: %t378 = extractvalue { ptr, i64, i64 } %t375, 0 %t379 = getelementptr inbounds { ptr, i64, i64 }, ptr %t378, i64 %t374 %t380 = load { ptr, i64, i64 }, ptr %t379 store { ptr, i64, i64 } %t373, ptr %a382 store { ptr, i64, i64 } %t380, ptr %a383 call void @finch_str_concat(ptr %a381, ptr %a382, ptr %a383) %t384 = load { ptr, i64, i64 }, ptr %a381 store { ptr, i64, i64 } %t384, ptr %a386 store { ptr, i64, i64 } { ptr @.str.6386, i64 31, i64 0 }, ptr %a387 call void @finch_str_concat(ptr %a385, ptr %a386, ptr %a387) %t388 = load { ptr, i64, i64 }, ptr %a385 %t389 = extractvalue { ptr, i64, i64 } %t388, 1 %t390 = trunc i64 %t389 to i32 %t391 = extractvalue { ptr, i64, i64 } %t388, 0 %t392 = icmp eq ptr %t391, null %t393 = select i1 %t392, ptr @.str.6387, ptr %t391 %t394 = call i32 (ptr, ...) @printf(ptr @.str.6388, i32 %t390, ptr %t393) %t395 = call i32 (ptr, ...) @printf(ptr @.str.6389) %t396 = extractvalue { ptr, i64, i64 } { ptr @.str.6390, i64 74, i64 0 }, 1 %t397 = trunc i64 %t396 to i32 %t398 = extractvalue { ptr, i64, i64 } { ptr @.str.6390, i64 74, i64 0 }, 0 %t399 = icmp eq ptr %t398, null %t400 = select i1 %t399, ptr @.str.6391, ptr %t398 %t401 = call i32 (ptr, ...) @printf(ptr @.str.6392, i32 %t397, ptr %t400) %t402 = call i32 (ptr, ...) @printf(ptr @.str.6393) %t403 = extractvalue { ptr, i64, i64 } { ptr @.str.6394, i64 66, i64 0 }, 1 %t404 = trunc i64 %t403 to i32 %t405 = extractvalue { ptr, i64, i64 } { ptr @.str.6394, i64 66, i64 0 }, 0 %t406 = icmp eq ptr %t405, null %t407 = select i1 %t406, ptr @.str.6395, ptr %t405 %t408 = call i32 (ptr, ...) @printf(ptr @.str.6396, i32 %t404, ptr %t407) %t409 = call i32 (ptr, ...) @printf(ptr @.str.6397) %t410 = extractvalue { ptr, i64, i64 } { ptr @.str.6398, i64 0, i64 0 }, 1 %t411 = trunc i64 %t410 to i32 %t412 = extractvalue { ptr, i64, i64 } { ptr @.str.6398, i64 0, i64 0 }, 0 %t413 = icmp eq ptr %t412, null %t414 = select i1 %t413, ptr @.str.6399, ptr %t412 %t415 = call i32 (ptr, ...) @printf(ptr @.str.6400, i32 %t411, ptr %t414) %t416 = call i32 (ptr, ...) @printf(ptr @.str.6401) %t417 = load i64, ptr %a265 %t418 = load { ptr, i64, i64 }, ptr %a184 %t419 = extractvalue { ptr, i64, i64 } %t418, 1 %t420 = icmp uge i64 %t417, %t419 br i1 %t420, label %range9293, label %inrange9294 range9293: call void @finch_panic_index(ptr @.str.6403, i64 179, i64 %t417, i64 %t419) unreachable inrange9294: %t421 = extractvalue { ptr, i64, i64 } %t418, 0 %t422 = getelementptr inbounds { ptr, i64, i64 }, ptr %t421, i64 %t417 %t423 = load { ptr, i64, i64 }, ptr %t422 %t424 = call { ptr, i64, i64 } @finch.linker.guessLib({ ptr, i64, i64 } %t423) store { ptr, i64, i64 } { ptr @.str.6402, i64 12, i64 0 }, ptr %a426 store { ptr, i64, i64 } %t424, ptr %a427 call void @finch_str_concat(ptr %a425, ptr %a426, ptr %a427) %t428 = load { ptr, i64, i64 }, ptr %a425 store { ptr, i64, i64 } %t428, ptr %a430 store { ptr, i64, i64 } { ptr @.str.6404, i64 1, i64 0 }, ptr %a431 call void @finch_str_concat(ptr %a429, ptr %a430, ptr %a431) %t432 = load { ptr, i64, i64 }, ptr %a429 %t433 = extractvalue { ptr, i64, i64 } %t432, 1 %t434 = trunc i64 %t433 to i32 %t435 = extractvalue { ptr, i64, i64 } %t432, 0 %t436 = icmp eq ptr %t435, null %t437 = select i1 %t436, ptr @.str.6405, ptr %t435 %t438 = call i32 (ptr, ...) @printf(ptr @.str.6406, i32 %t434, ptr %t437) %t439 = call i32 (ptr, ...) @printf(ptr @.str.6407) %t440 = extractvalue { ptr, i64, i64 } { ptr @.str.6408, i64 0, i64 0 }, 1 %t441 = trunc i64 %t440 to i32 %t442 = extractvalue { ptr, i64, i64 } { ptr @.str.6408, i64 0, i64 0 }, 0 %t443 = icmp eq ptr %t442, null %t444 = select i1 %t443, ptr @.str.6409, ptr %t442 %t445 = call i32 (ptr, ...) @printf(ptr @.str.6410, i32 %t441, ptr %t444) %t446 = call i32 (ptr, ...) @printf(ptr @.str.6411) br label %for.step9267 for.step9267: %t447 = load i64, ptr %a265 %t448 = add i64 %t447, 1 store i64 %t448, ptr %a265 br label %for.cond9265 for.end9268: ret i64 1 } define internal { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } @finch.linker.runtimeObject({ ptr, i64, i64 } %p0, %S.platform.Target %p1, { ptr, i64, i64 } %p2) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a2 = alloca %S.platform.Target, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a85 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca { ptr, i64, i64 }, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 %a106 = alloca { ptr, i64, i64 }, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca { ptr, i64, i64 }, align 16 %a110 = alloca { ptr, i64, i64 }, align 16 %a111 = alloca { ptr, i64, i64 }, align 16 %a115 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca { ptr, i64, i64 }, align 16 %a117 = alloca { ptr, i64, i64 }, align 16 %a119 = alloca { ptr, i64, i64 }, align 16 %a120 = alloca { ptr, i64, i64 }, align 16 %a121 = alloca { ptr, i64, i64 }, align 16 %a125 = alloca { ptr, i64, i64 }, align 16 %a126 = alloca { ptr, i64, i64 }, align 16 %a127 = alloca { ptr, i64, i64 }, align 16 %a129 = alloca { ptr, i64, i64 }, align 16 %a130 = alloca { ptr, i64, i64 }, align 16 %a131 = alloca { ptr, i64, i64 }, align 16 %a133 = alloca { ptr, i64, i64 }, align 16 %a134 = alloca { ptr, i64, i64 }, align 16 %a136 = alloca i64, align 16 %a140 = alloca { ptr, i64, i64 }, align 16 %a141 = alloca { ptr, i64, i64 }, align 16 %a142 = alloca { ptr, i64, i64 }, align 16 %a147 = alloca { ptr, i64, i64 }, align 16 %a149 = alloca { ptr, i64, i64 }, align 16 %a152 = alloca { ptr, i64, i64 }, align 16 %a153 = alloca { ptr, i64, i64 }, align 16 %a154 = alloca { ptr, i64, i64 }, align 16 %a156 = alloca { ptr, i64, i64 }, align 16 %a157 = alloca { ptr, i64, i64 }, align 16 %a158 = alloca { ptr, i64, i64 }, align 16 %a162 = alloca { ptr, i64, i64 }, align 16 %a163 = alloca { ptr, i64, i64 }, align 16 %a164 = alloca { ptr, i64, i64 }, align 16 %a166 = alloca { ptr, i64, i64 }, align 16 %a167 = alloca { ptr, i64, i64 }, align 16 %a170 = alloca { ptr, i64, i64 }, align 16 %a171 = alloca { ptr, i64, i64 }, align 16 %a172 = alloca { ptr, i64, i64 }, align 16 %a175 = alloca { ptr, i64, i64 }, align 16 %a176 = alloca { ptr, i64, i64 }, align 16 %a177 = alloca { ptr, i64, i64 }, align 16 %a179 = alloca { ptr, i64, i64 }, align 16 %a180 = alloca { ptr, i64, i64 }, align 16 %a181 = alloca { ptr, i64, i64 }, align 16 %a186 = alloca { ptr, i64, i64 }, align 16 %a187 = alloca { ptr, i64, i64 }, align 16 %a188 = alloca { ptr, i64, i64 }, align 16 %a190 = alloca { ptr, i64, i64 }, align 16 %a191 = alloca { ptr, i64, i64 }, align 16 %a192 = alloca { ptr, i64, i64 }, align 16 %a196 = alloca { ptr, i64, i64 }, align 16 %a197 = alloca { ptr, i64, i64 }, align 16 %a198 = alloca { ptr, i64, i64 }, align 16 %a200 = alloca { ptr, i64, i64 }, align 16 %a201 = alloca { ptr, i64, i64 }, align 16 %a202 = alloca { ptr, i64, i64 }, align 16 %a206 = alloca { ptr, i64, i64 }, align 16 %a207 = alloca { ptr, i64, i64 }, align 16 %a208 = alloca { ptr, i64, i64 }, align 16 %a210 = alloca { ptr, i64, i64 }, align 16 %a211 = alloca { ptr, i64, i64 }, align 16 %a214 = alloca { ptr, i64, i64 }, align 16 %a215 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 store %S.platform.Target %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 %t4 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t4, ptr %a5 store { ptr, i64, i64 } zeroinitializer, ptr %a6 store { ptr, i64, i64 } zeroinitializer, ptr %a7 %t8 = call i32 @finch_try_read_file(ptr %a6, ptr %a5, ptr %a7) %t9 = icmp eq i32 %t8, 0 %t10 = load { ptr, i64, i64 }, ptr %a7 %t11 = load { ptr, i64, i64 }, ptr %a6 br i1 %t9, label %try.failed9295, label %try.ok9296 try.failed9295: %t12 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t10, 2 ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t12 try.ok9296: store { ptr, i64, i64 } %t11, ptr %a13 %t14 = call { ptr, i64, i64 } @finch.linker.cacheDir() store { ptr, i64, i64 } %t14, ptr %a15 %t16 = load { ptr, i64, i64 }, ptr %a15 store { ptr, i64, i64 } %t16, ptr %a18 store { ptr, i64, i64 } { ptr @.str.6412, i64 4, i64 0 }, ptr %a19 call void @finch_str_concat(ptr %a17, ptr %a18, ptr %a19) %t20 = load { ptr, i64, i64 }, ptr %a17 %t21 = load { ptr, i64, i64 }, ptr %a13 %t22 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t21, ptr %a24 store { ptr, i64, i64 } %t22, ptr %a25 call void @finch_str_concat(ptr %a23, ptr %a24, ptr %a25) %t26 = load { ptr, i64, i64 }, ptr %a23 %t27 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 0 %t28 = load { ptr, i64, i64 }, ptr %t27 store { ptr, i64, i64 } %t26, ptr %a30 store { ptr, i64, i64 } %t28, ptr %a31 call void @finch_str_concat(ptr %a29, ptr %a30, ptr %a31) %t32 = load { ptr, i64, i64 }, ptr %a29 store { ptr, i64, i64 } %t32, ptr %a34 store { ptr, i64, i64 } { ptr @.str.6413, i64 3, i64 0 }, ptr %a35 call void @finch_str_concat(ptr %a33, ptr %a34, ptr %a35) %t36 = load { ptr, i64, i64 }, ptr %a33 %t37 = call { ptr, i64, i64 } @finch.linker.fingerprint({ ptr, i64, i64 } %t36) store { ptr, i64, i64 } %t20, ptr %a39 store { ptr, i64, i64 } %t37, ptr %a40 call void @finch_str_concat(ptr %a38, ptr %a39, ptr %a40) %t41 = load { ptr, i64, i64 }, ptr %a38 store { ptr, i64, i64 } %t41, ptr %a43 store { ptr, i64, i64 } { ptr @.str.6414, i64 2, i64 0 }, ptr %a44 call void @finch_str_concat(ptr %a42, ptr %a43, ptr %a44) %t45 = load { ptr, i64, i64 }, ptr %a42 store { ptr, i64, i64 } %t45, ptr %a46 %t47 = load { ptr, i64, i64 }, ptr %a46 store { ptr, i64, i64 } %t47, ptr %a48 %t49 = call i32 @finch_file_exists(ptr %a48) %t50 = icmp ne i32 %t49, 0 br i1 %t50, label %then9297, label %endif9299 then9297: %t51 = load { ptr, i64, i64 }, ptr %a46 store { ptr, i64, i64 } %t51, ptr %a52 call void @finch_str_copy(ptr %a53, ptr %a52) %t54 = load { ptr, i64, i64 }, ptr %a53 %t55 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 %t56 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t55, { ptr, i64, i64 } %t54, 1 ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t56 endif9299: %t57 = load { ptr, i64, i64 }, ptr %a15 %t58 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t57) store { ptr, i64, i64 } { ptr @.str.6415, i64 9, i64 0 }, ptr %a60 store { ptr, i64, i64 } %t58, ptr %a61 call void @finch_str_concat(ptr %a59, ptr %a60, ptr %a61) %t62 = load { ptr, i64, i64 }, ptr %a59 store { ptr, i64, i64 } %t62, ptr %a64 call void @finch_str_copy(ptr %a63, ptr %a64) %t65 = call i64 @finch_shell(ptr %a63) %t66 = load { ptr, i64, i64 }, ptr %a46 store { ptr, i64, i64 } %t66, ptr %a68 store { ptr, i64, i64 } { ptr @.str.6416, i64 5, i64 0 }, ptr %a69 call void @finch_str_concat(ptr %a67, ptr %a68, ptr %a69) %t70 = load { ptr, i64, i64 }, ptr %a67 %t71 = call i32 @getpid() %t72 = sext i32 %t71 to i64 call void @finch_str_from_int(ptr %a73, i64 %t72) %t74 = load { ptr, i64, i64 }, ptr %a73 store { ptr, i64, i64 } %t70, ptr %a76 store { ptr, i64, i64 } %t74, ptr %a77 call void @finch_str_concat(ptr %a75, ptr %a76, ptr %a77) %t78 = load { ptr, i64, i64 }, ptr %a75 store { ptr, i64, i64 } %t78, ptr %a79 store { ptr, i64, i64 } { ptr @.str.6417, i64 6, i64 0 }, ptr %a80 %t81 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 1 %t82 = load i1, ptr %t81 br i1 %t82, label %then9300, label %endif9302 then9300: store { ptr, i64, i64 } { ptr @.str.6418, i64 0, i64 0 }, ptr %a80 br label %endif9302 endif9302: %t83 = load { ptr, i64, i64 }, ptr %a79 store { ptr, i64, i64 } %t83, ptr %a85 store { ptr, i64, i64 } { ptr @.str.6419, i64 4, i64 0 }, ptr %a86 call void @finch_str_concat(ptr %a84, ptr %a85, ptr %a86) %t87 = load { ptr, i64, i64 }, ptr %a84 store { ptr, i64, i64 } %t87, ptr %a88 %t89 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t89, ptr %a91 store { ptr, i64, i64 } { ptr @.str.6420, i64 4, i64 0 }, ptr %a92 call void @finch_str_concat(ptr %a90, ptr %a91, ptr %a92) %t93 = load { ptr, i64, i64 }, ptr %a90 %t94 = load { ptr, i64, i64 }, ptr %a80 store { ptr, i64, i64 } %t93, ptr %a96 store { ptr, i64, i64 } %t94, ptr %a97 call void @finch_str_concat(ptr %a95, ptr %a96, ptr %a97) %t98 = load { ptr, i64, i64 }, ptr %a95 store { ptr, i64, i64 } %t98, ptr %a100 store { ptr, i64, i64 } { ptr @.str.6421, i64 4, i64 0 }, ptr %a101 call void @finch_str_concat(ptr %a99, ptr %a100, ptr %a101) %t102 = load { ptr, i64, i64 }, ptr %a99 %t103 = load { ptr, i64, i64 }, ptr %a1 %t104 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t103) store { ptr, i64, i64 } %t102, ptr %a106 store { ptr, i64, i64 } %t104, ptr %a107 call void @finch_str_concat(ptr %a105, ptr %a106, ptr %a107) %t108 = load { ptr, i64, i64 }, ptr %a105 store { ptr, i64, i64 } %t108, ptr %a110 store { ptr, i64, i64 } { ptr @.str.6422, i64 4, i64 0 }, ptr %a111 call void @finch_str_concat(ptr %a109, ptr %a110, ptr %a111) %t112 = load { ptr, i64, i64 }, ptr %a109 %t113 = load { ptr, i64, i64 }, ptr %a79 %t114 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t113) store { ptr, i64, i64 } %t112, ptr %a116 store { ptr, i64, i64 } %t114, ptr %a117 call void @finch_str_concat(ptr %a115, ptr %a116, ptr %a117) %t118 = load { ptr, i64, i64 }, ptr %a115 store { ptr, i64, i64 } %t118, ptr %a120 store { ptr, i64, i64 } { ptr @.str.6423, i64 3, i64 0 }, ptr %a121 call void @finch_str_concat(ptr %a119, ptr %a120, ptr %a121) %t122 = load { ptr, i64, i64 }, ptr %a119 %t123 = load { ptr, i64, i64 }, ptr %a88 %t124 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t123) store { ptr, i64, i64 } %t122, ptr %a126 store { ptr, i64, i64 } %t124, ptr %a127 call void @finch_str_concat(ptr %a125, ptr %a126, ptr %a127) %t128 = load { ptr, i64, i64 }, ptr %a125 store { ptr, i64, i64 } %t128, ptr %a130 store { ptr, i64, i64 } { ptr @.str.6424, i64 5, i64 0 }, ptr %a131 call void @finch_str_concat(ptr %a129, ptr %a130, ptr %a131) %t132 = load { ptr, i64, i64 }, ptr %a129 store { ptr, i64, i64 } %t132, ptr %a134 call void @finch_str_copy(ptr %a133, ptr %a134) %t135 = call i64 @finch_shell(ptr %a133) store i64 %t135, ptr %a136 %t137 = load i64, ptr %a136 %t138 = icmp ne i64 %t137, 0 br i1 %t138, label %then9303, label %endif9305 then9303: %t139 = load { ptr, i64, i64 }, ptr %a88 store { ptr, i64, i64 } %t139, ptr %a140 store { ptr, i64, i64 } zeroinitializer, ptr %a141 store { ptr, i64, i64 } zeroinitializer, ptr %a142 %t143 = call i32 @finch_try_read_file(ptr %a141, ptr %a140, ptr %a142) %t144 = icmp eq i32 %t143, 0 %t145 = load { ptr, i64, i64 }, ptr %a142 %t146 = load { ptr, i64, i64 }, ptr %a141 br i1 %t144, label %or.failed9306, label %or.ok9307 or.failed9306: store { ptr, i64, i64 } %t145, ptr %a147 br label %or.bend9308 or.bend9308: br label %or.end9309 or.ok9307: br label %or.end9309 or.end9309: %t148 = phi { ptr, i64, i64 } [ { ptr @.str.6425, i64 0, i64 0 }, %or.bend9308 ], [ %t146, %or.ok9307 ] store { ptr, i64, i64 } %t148, ptr %a149 %t150 = load { ptr, i64, i64 }, ptr %a79 %t151 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t150) store { ptr, i64, i64 } { ptr @.str.6426, i64 6, i64 0 }, ptr %a153 store { ptr, i64, i64 } %t151, ptr %a154 call void @finch_str_concat(ptr %a152, ptr %a153, ptr %a154) %t155 = load { ptr, i64, i64 }, ptr %a152 store { ptr, i64, i64 } %t155, ptr %a157 store { ptr, i64, i64 } { ptr @.str.6427, i64 1, i64 0 }, ptr %a158 call void @finch_str_concat(ptr %a156, ptr %a157, ptr %a158) %t159 = load { ptr, i64, i64 }, ptr %a156 %t160 = load { ptr, i64, i64 }, ptr %a88 %t161 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t160) store { ptr, i64, i64 } %t159, ptr %a163 store { ptr, i64, i64 } %t161, ptr %a164 call void @finch_str_concat(ptr %a162, ptr %a163, ptr %a164) %t165 = load { ptr, i64, i64 }, ptr %a162 store { ptr, i64, i64 } %t165, ptr %a167 call void @finch_str_copy(ptr %a166, ptr %a167) %t168 = call i64 @finch_shell(ptr %a166) %t169 = load { ptr, i64, i64 }, ptr %a149 store { ptr, i64, i64 } %t169, ptr %a171 store { ptr, i64, i64 } { ptr @.str.6428, i64 46, i64 0 }, ptr %a172 call void @finch_str_concat(ptr %a170, ptr %a171, ptr %a172) %t173 = load { ptr, i64, i64 }, ptr %a170 %t174 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t173, ptr %a176 store { ptr, i64, i64 } %t174, ptr %a177 call void @finch_str_concat(ptr %a175, ptr %a176, ptr %a177) %t178 = load { ptr, i64, i64 }, ptr %a175 store { ptr, i64, i64 } %t178, ptr %a180 store { ptr, i64, i64 } { ptr @.str.6429, i64 30, i64 0 }, ptr %a181 call void @finch_str_concat(ptr %a179, ptr %a180, ptr %a181) %t182 = load { ptr, i64, i64 }, ptr %a179 %t183 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t182, 2 ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t183 endif9305: %t184 = load { ptr, i64, i64 }, ptr %a88 %t185 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t184) store { ptr, i64, i64 } { ptr @.str.6430, i64 6, i64 0 }, ptr %a187 store { ptr, i64, i64 } %t185, ptr %a188 call void @finch_str_concat(ptr %a186, ptr %a187, ptr %a188) %t189 = load { ptr, i64, i64 }, ptr %a186 store { ptr, i64, i64 } %t189, ptr %a191 store { ptr, i64, i64 } { ptr @.str.6431, i64 7, i64 0 }, ptr %a192 call void @finch_str_concat(ptr %a190, ptr %a191, ptr %a192) %t193 = load { ptr, i64, i64 }, ptr %a190 %t194 = load { ptr, i64, i64 }, ptr %a79 %t195 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t194) store { ptr, i64, i64 } %t193, ptr %a197 store { ptr, i64, i64 } %t195, ptr %a198 call void @finch_str_concat(ptr %a196, ptr %a197, ptr %a198) %t199 = load { ptr, i64, i64 }, ptr %a196 store { ptr, i64, i64 } %t199, ptr %a201 store { ptr, i64, i64 } { ptr @.str.6432, i64 1, i64 0 }, ptr %a202 call void @finch_str_concat(ptr %a200, ptr %a201, ptr %a202) %t203 = load { ptr, i64, i64 }, ptr %a200 %t204 = load { ptr, i64, i64 }, ptr %a46 %t205 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t204) store { ptr, i64, i64 } %t203, ptr %a207 store { ptr, i64, i64 } %t205, ptr %a208 call void @finch_str_concat(ptr %a206, ptr %a207, ptr %a208) %t209 = load { ptr, i64, i64 }, ptr %a206 store { ptr, i64, i64 } %t209, ptr %a211 call void @finch_str_copy(ptr %a210, ptr %a211) %t212 = call i64 @finch_shell(ptr %a210) %t213 = load { ptr, i64, i64 }, ptr %a46 store { ptr, i64, i64 } %t213, ptr %a214 call void @finch_str_copy(ptr %a215, ptr %a214) %t216 = load { ptr, i64, i64 }, ptr %a215 %t217 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 %t218 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t217, { ptr, i64, i64 } %t216, 1 ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t218 } define internal i64 @finch.linker.build(%S.linker.Build %p0, %S.platform.Target %p1, %S.cimport.CImports %p2) { entry: %a1 = alloca %S.linker.Build, align 16 %a2 = alloca %S.platform.Target, align 16 %a3 = alloca %S.cimport.CImports, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a86 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 %a104 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 %a106 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca { ptr, i64, i64 }, align 16 %a110 = alloca { ptr, i64, i64 }, align 16 %a114 = alloca { ptr, i64, i64 }, align 16 %a115 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca { ptr, i64, i64 }, align 16 %a120 = alloca { ptr, i64, i64 }, align 16 %a121 = alloca { ptr, i64, i64 }, align 16 %a122 = alloca { ptr, i64, i64 }, align 16 %a124 = alloca { ptr, i64, i64 }, align 16 %a125 = alloca { ptr, i64, i64 }, align 16 %a126 = alloca { ptr, i64, i64 }, align 16 %a130 = alloca { ptr, i64, i64 }, align 16 %a131 = alloca { ptr, i64, i64 }, align 16 %a132 = alloca { ptr, i64, i64 }, align 16 %a134 = alloca { ptr, i64, i64 }, align 16 %a135 = alloca { ptr, i64, i64 }, align 16 %a136 = alloca { ptr, i64, i64 }, align 16 %a140 = alloca { ptr, i64, i64 }, align 16 %a141 = alloca { ptr, i64, i64 }, align 16 %a142 = alloca { ptr, i64, i64 }, align 16 %a144 = alloca { ptr, i64, i64 }, align 16 %a145 = alloca { ptr, i64, i64 }, align 16 %a146 = alloca { ptr, i64, i64 }, align 16 %a150 = alloca { ptr, i64, i64 }, align 16 %a151 = alloca { ptr, i64, i64 }, align 16 %a152 = alloca { ptr, i64, i64 }, align 16 %a154 = alloca { ptr, i64, i64 }, align 16 %a155 = alloca { ptr, i64, i64 }, align 16 %a156 = alloca { ptr, i64, i64 }, align 16 %a158 = alloca { ptr, i64, i64 }, align 16 %a159 = alloca { ptr, i64, i64 }, align 16 %a161 = alloca i64, align 16 %a164 = alloca { ptr, i64, i64 }, align 16 %a165 = alloca { ptr, i64, i64 }, align 16 %a166 = alloca { ptr, i64, i64 }, align 16 %a168 = alloca { ptr, i64, i64 }, align 16 %a169 = alloca { ptr, i64, i64 }, align 16 %a174 = alloca { ptr, i64, i64 }, align 16 %a175 = alloca { ptr, i64, i64 }, align 16 %a176 = alloca { ptr, i64, i64 }, align 16 %a181 = alloca { ptr, i64, i64 }, align 16 %a199 = alloca { ptr, i64, i64 }, align 16 %a200 = alloca { ptr, i64, i64 }, align 16 %a201 = alloca { ptr, i64, i64 }, align 16 %a203 = alloca { ptr, i64, i64 }, align 16 %a204 = alloca { ptr, i64, i64 }, align 16 %a205 = alloca { ptr, i64, i64 }, align 16 %a209 = alloca { ptr, i64, i64 }, align 16 %a210 = alloca { ptr, i64, i64 }, align 16 %a211 = alloca { ptr, i64, i64 }, align 16 %a213 = alloca { ptr, i64, i64 }, align 16 %a214 = alloca { ptr, i64, i64 }, align 16 %a217 = alloca { ptr, i64, i64 }, align 16 %a218 = alloca { ptr, i64, i64 }, align 16 %a219 = alloca { ptr, i64, i64 }, align 16 %a223 = alloca { ptr, i64, i64 }, align 16 %a224 = alloca { ptr, i64, i64 }, align 16 %a225 = alloca { ptr, i64, i64 }, align 16 %a227 = alloca { ptr, i64, i64 }, align 16 %a228 = alloca { ptr, i64, i64 }, align 16 %a229 = alloca { ptr, i64, i64 }, align 16 %a233 = alloca { ptr, i64, i64 }, align 16 %a234 = alloca { ptr, i64, i64 }, align 16 %a235 = alloca { ptr, i64, i64 }, align 16 %a237 = alloca { ptr, i64, i64 }, align 16 %a238 = alloca { ptr, i64, i64 }, align 16 %a239 = alloca { ptr, i64, i64 }, align 16 %a244 = alloca { ptr, i64, i64 }, align 16 %a245 = alloca { ptr, i64, i64 }, align 16 %a246 = alloca { ptr, i64, i64 }, align 16 %a248 = alloca { ptr, i64, i64 }, align 16 %a253 = alloca { ptr, i64, i64 }, align 16 %a254 = alloca { ptr, i64, i64 }, align 16 %a255 = alloca { ptr, i64, i64 }, align 16 %a262 = alloca { ptr, i64, i64 }, align 16 %a263 = alloca { ptr, i64, i64 }, align 16 %a264 = alloca { ptr, i64, i64 }, align 16 %a267 = alloca { ptr, i64, i64 }, align 16 %a268 = alloca { ptr, i64, i64 }, align 16 %a269 = alloca { ptr, i64, i64 }, align 16 %a271 = alloca { ptr, i64, i64 }, align 16 %a273 = alloca i64, align 16 %a281 = alloca { ptr, i64, i64 }, align 16 %a283 = alloca { ptr, i64, i64 }, align 16 %a284 = alloca { ptr, i64, i64 }, align 16 %a285 = alloca { ptr, i64, i64 }, align 16 %a290 = alloca { ptr, i64, i64 }, align 16 %a291 = alloca { ptr, i64, i64 }, align 16 %a292 = alloca { ptr, i64, i64 }, align 16 %a296 = alloca { ptr, i64, i64 }, align 16 %a298 = alloca { ptr, i64, i64 }, align 16 %a299 = alloca { ptr, i64, i64 }, align 16 %a300 = alloca { ptr, i64, i64 }, align 16 %a302 = alloca { ptr, i64, i64 }, align 16 %a303 = alloca { ptr, i64, i64 }, align 16 %a304 = alloca { ptr, i64, i64 }, align 16 %a306 = alloca { ptr, i64, i64 }, align 16 %a307 = alloca { ptr, i64, i64 }, align 16 %a311 = alloca { ptr, i64, i64 }, align 16 %a312 = alloca { ptr, i64, i64 }, align 16 %a313 = alloca { ptr, i64, i64 }, align 16 %a316 = alloca { ptr, i64, i64 }, align 16 %a317 = alloca { ptr, i64, i64 }, align 16 %a318 = alloca { ptr, i64, i64 }, align 16 %a320 = alloca { ptr, i64, i64 }, align 16 %a321 = alloca { ptr, i64, i64 }, align 16 %a322 = alloca { ptr, i64, i64 }, align 16 %a326 = alloca { ptr, i64, i64 }, align 16 %a327 = alloca { ptr, i64, i64 }, align 16 %a328 = alloca { ptr, i64, i64 }, align 16 %a330 = alloca { ptr, i64, i64 }, align 16 %a331 = alloca { ptr, i64, i64 }, align 16 %a332 = alloca { ptr, i64, i64 }, align 16 %a336 = alloca { ptr, i64, i64 }, align 16 %a337 = alloca { ptr, i64, i64 }, align 16 %a338 = alloca { ptr, i64, i64 }, align 16 %a340 = alloca { ptr, i64, i64 }, align 16 %a341 = alloca { ptr, i64, i64 }, align 16 %a342 = alloca { ptr, i64, i64 }, align 16 %a346 = alloca { ptr, i64, i64 }, align 16 %a347 = alloca { ptr, i64, i64 }, align 16 %a348 = alloca { ptr, i64, i64 }, align 16 %a350 = alloca { ptr, i64, i64 }, align 16 %a351 = alloca { ptr, i64, i64 }, align 16 %a352 = alloca { ptr, i64, i64 }, align 16 %a354 = alloca { ptr, i64, i64 }, align 16 %a355 = alloca { ptr, i64, i64 }, align 16 %a357 = alloca i64, align 16 %a361 = alloca { ptr, i64, i64 }, align 16 %a362 = alloca { ptr, i64, i64 }, align 16 %a363 = alloca { ptr, i64, i64 }, align 16 %a368 = alloca { ptr, i64, i64 }, align 16 %a370 = alloca { ptr, i64, i64 }, align 16 %a371 = alloca { ptr, i64, i64 }, align 16 %a372 = alloca { ptr, i64, i64 }, align 16 %a375 = alloca { ptr, i64, i64 }, align 16 %a376 = alloca { ptr, i64, i64 }, align 16 %a377 = alloca { ptr, i64, i64 }, align 16 %a388 = alloca { ptr, i64, i64 }, align 16 %a389 = alloca { ptr, i64, i64 }, align 16 %a390 = alloca { ptr, i64, i64 }, align 16 %a392 = alloca { ptr, i64, i64 }, align 16 %a393 = alloca { ptr, i64, i64 }, align 16 %a394 = alloca { ptr, i64, i64 }, align 16 %a398 = alloca { ptr, i64, i64 }, align 16 %a399 = alloca { ptr, i64, i64 }, align 16 %a400 = alloca { ptr, i64, i64 }, align 16 %a402 = alloca { ptr, i64, i64 }, align 16 %a403 = alloca { ptr, i64, i64 }, align 16 %a404 = alloca { ptr, i64, i64 }, align 16 %a408 = alloca { ptr, i64, i64 }, align 16 %a409 = alloca { ptr, i64, i64 }, align 16 %a410 = alloca { ptr, i64, i64 }, align 16 %a412 = alloca { ptr, i64, i64 }, align 16 %a413 = alloca { ptr, i64, i64 }, align 16 %a417 = alloca { ptr, i64, i64 }, align 16 %a418 = alloca { ptr, i64, i64 }, align 16 %a425 = alloca { ptr, i64, i64 }, align 16 %a426 = alloca { ptr, i64, i64 }, align 16 %a427 = alloca { ptr, i64, i64 }, align 16 %a431 = alloca { ptr, i64, i64 }, align 16 %a432 = alloca { ptr, i64, i64 }, align 16 %a433 = alloca { ptr, i64, i64 }, align 16 %a436 = alloca { ptr, i64, i64 }, align 16 %a437 = alloca { ptr, i64, i64 }, align 16 %a438 = alloca { ptr, i64, i64 }, align 16 %a442 = alloca { ptr, i64, i64 }, align 16 %a443 = alloca { ptr, i64, i64 }, align 16 %a444 = alloca { ptr, i64, i64 }, align 16 %a449 = alloca { ptr, i64, i64 }, align 16 %a450 = alloca { ptr, i64, i64 }, align 16 %a451 = alloca { ptr, i64, i64 }, align 16 %a455 = alloca { ptr, i64, i64 }, align 16 %a456 = alloca { ptr, i64, i64 }, align 16 %a457 = alloca { ptr, i64, i64 }, align 16 %a460 = alloca { ptr, i64, i64 }, align 16 %a461 = alloca { ptr, i64, i64 }, align 16 %a462 = alloca { ptr, i64, i64 }, align 16 %a467 = alloca { ptr, i64, i64 }, align 16 %a468 = alloca { ptr, i64, i64 }, align 16 %a469 = alloca { ptr, i64, i64 }, align 16 %a474 = alloca { ptr, i64, i64 }, align 16 %a475 = alloca { ptr, i64, i64 }, align 16 %a476 = alloca { ptr, i64, i64 }, align 16 %a480 = alloca { ptr, i64, i64 }, align 16 %a481 = alloca { ptr, i64, i64 }, align 16 %a482 = alloca { ptr, i64, i64 }, align 16 %a484 = alloca { ptr, i64, i64 }, align 16 %a485 = alloca { ptr, i64, i64 }, align 16 %a486 = alloca { ptr, i64, i64 }, align 16 %a488 = alloca { ptr, i64, i64 }, align 16 %a489 = alloca { ptr, i64, i64 }, align 16 %a491 = alloca i64, align 16 %a493 = alloca { ptr, i64, i64 }, align 16 %a494 = alloca { ptr, i64, i64 }, align 16 %a495 = alloca { ptr, i64, i64 }, align 16 %a500 = alloca { ptr, i64, i64 }, align 16 %a502 = alloca { ptr, i64, i64 }, align 16 %a505 = alloca { ptr, i64, i64 }, align 16 %a506 = alloca { ptr, i64, i64 }, align 16 %a507 = alloca { ptr, i64, i64 }, align 16 %a509 = alloca { ptr, i64, i64 }, align 16 %a510 = alloca { ptr, i64, i64 }, align 16 %a511 = alloca { ptr, i64, i64 }, align 16 %a515 = alloca { ptr, i64, i64 }, align 16 %a516 = alloca { ptr, i64, i64 }, align 16 %a517 = alloca { ptr, i64, i64 }, align 16 %a519 = alloca { ptr, i64, i64 }, align 16 %a520 = alloca { ptr, i64, i64 }, align 16 %a522 = alloca i64, align 16 %a530 = alloca { ptr, i64, i64 }, align 16 %a533 = alloca { ptr, i64, i64 }, align 16 %a534 = alloca { ptr, i64, i64 }, align 16 %a535 = alloca { ptr, i64, i64 }, align 16 %a537 = alloca { ptr, i64, i64 }, align 16 %a538 = alloca { ptr, i64, i64 }, align 16 %a545 = alloca { ptr, i64, i64 }, align 16 %a546 = alloca { ptr, i64, i64 }, align 16 %a547 = alloca { ptr, i64, i64 }, align 16 %a549 = alloca { ptr, i64, i64 }, align 16 %a550 = alloca { ptr, i64, i64 }, align 16 %a551 = alloca { ptr, i64, i64 }, align 16 store %S.linker.Build %p0, ptr %a1 store %S.platform.Target %p1, ptr %a2 store %S.cimport.CImports %p2, ptr %a3 %t4 = extractvalue { ptr, i64, i64 } { ptr @.str.6433, i64 11, i64 0 }, 0 %t5 = icmp eq ptr %t4, null %t6 = select i1 %t5, ptr @.str.6434, ptr %t4 %t7 = call ptr @getenv(ptr %t6) store { ptr, i64, i64 } zeroinitializer, ptr %a8 call void @finch_str_from_c(ptr %a8, ptr %t7) %t9 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t9, ptr %a10 call void @finch_str_copy(ptr %a11, ptr %a10) %t12 = load { ptr, i64, i64 }, ptr %a11 store { ptr, i64, i64 } %t12, ptr %a13 %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %a13, i32 0, i32 1 %t15 = load i64, ptr %t14 %t16 = icmp eq i64 %t15, 0 br i1 %t16, label %then9310, label %endif9312 then9310: store { ptr, i64, i64 } { ptr @.str.6435, i64 5, i64 0 }, ptr %a13 br label %endif9312 endif9312: %t17 = load { ptr, i64, i64 }, ptr %a13 store { ptr, i64, i64 } %t17, ptr %a18 call void @finch_str_copy(ptr %a19, ptr %a18) %t20 = load { ptr, i64, i64 }, ptr %a19 store { ptr, i64, i64 } %t20, ptr %a21 %t22 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 5 %t23 = load i1, ptr %t22 br i1 %t23, label %then9313, label %else9314 then9313: %t24 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 7 %t25 = load { ptr, i64, i64 }, ptr %t24 store { ptr, i64, i64 } %t25, ptr %a26 call void @finch_str_copy(ptr %a27, ptr %a26) %t28 = load { ptr, i64, i64 }, ptr %a27 store { ptr, i64, i64 } %t28, ptr %a21 br label %endif9315 else9314: %t29 = extractvalue { ptr, i64, i64 } { ptr @.str.6436, i64 8, i64 0 }, 0 %t30 = icmp eq ptr %t29, null %t31 = select i1 %t30, ptr @.str.6437, ptr %t29 %t32 = call ptr @getenv(ptr %t31) store { ptr, i64, i64 } zeroinitializer, ptr %a33 call void @finch_str_from_c(ptr %a33, ptr %t32) %t34 = load { ptr, i64, i64 }, ptr %a33 %t35 = extractvalue { ptr, i64, i64 } %t34, 1 %t36 = icmp sgt i64 %t35, 0 br i1 %t36, label %then9316, label %endif9318 then9316: %t37 = extractvalue { ptr, i64, i64 } { ptr @.str.6438, i64 8, i64 0 }, 0 %t38 = icmp eq ptr %t37, null %t39 = select i1 %t38, ptr @.str.6439, ptr %t37 %t40 = call ptr @getenv(ptr %t39) store { ptr, i64, i64 } zeroinitializer, ptr %a41 call void @finch_str_from_c(ptr %a41, ptr %t40) %t42 = load { ptr, i64, i64 }, ptr %a41 store { ptr, i64, i64 } %t42, ptr %a43 call void @finch_str_copy(ptr %a44, ptr %a43) %t45 = load { ptr, i64, i64 }, ptr %a44 store { ptr, i64, i64 } %t45, ptr %a21 br label %endif9318 endif9318: br label %endif9315 endif9315: %t46 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 2 %t47 = load { ptr, i64, i64 }, ptr %t46 %t48 = load %S.platform.Target, ptr %a2 %t49 = load { ptr, i64, i64 }, ptr %a21 %t50 = call { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } @finch.linker.runtimeObject({ ptr, i64, i64 } %t47, %S.platform.Target %t48, { ptr, i64, i64 } %t49) %t51 = extractvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t50, 0 %t52 = xor i1 %t51, true %t53 = extractvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t50, 2 %t54 = extractvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t50, 1 br i1 %t52, label %or.failed9319, label %or.ok9320 or.failed9319: store { ptr, i64, i64 } %t53, ptr %a55 %t56 = load { ptr, i64, i64 }, ptr %a55 %t57 = extractvalue { ptr, i64, i64 } %t56, 1 %t58 = trunc i64 %t57 to i32 %t59 = extractvalue { ptr, i64, i64 } %t56, 0 %t60 = icmp eq ptr %t59, null %t61 = select i1 %t60, ptr @.str.6440, ptr %t59 %t62 = call i32 (ptr, ...) @printf(ptr @.str.6441, i32 %t58, ptr %t61) %t63 = call i32 (ptr, ...) @printf(ptr @.str.6442) ret i64 1 or.ok9320: store { ptr, i64, i64 } %t54, ptr %a64 %t65 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 0 %t66 = load { ptr, i64, i64 }, ptr %t65 store { ptr, i64, i64 } %t66, ptr %a68 store { ptr, i64, i64 } { ptr @.str.6443, i64 3, i64 0 }, ptr %a69 call void @finch_str_concat(ptr %a67, ptr %a68, ptr %a69) %t70 = load { ptr, i64, i64 }, ptr %a67 store { ptr, i64, i64 } %t70, ptr %a71 %t72 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 0 %t73 = load { ptr, i64, i64 }, ptr %t72 store { ptr, i64, i64 } %t73, ptr %a75 store { ptr, i64, i64 } { ptr @.str.6444, i64 2, i64 0 }, ptr %a76 call void @finch_str_concat(ptr %a74, ptr %a75, ptr %a76) %t77 = load { ptr, i64, i64 }, ptr %a74 store { ptr, i64, i64 } %t77, ptr %a78 %t79 = load { ptr, i64, i64 }, ptr %a71 store { ptr, i64, i64 } %t79, ptr %a80 %t81 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 1 %t82 = load { ptr, i64, i64 }, ptr %t81 store { ptr, i64, i64 } %t82, ptr %a83 %t84 = call i32 @finch_write_file(ptr %a80, ptr %a83) %t85 = icmp ne i32 %t84, 0 store { ptr, i64, i64 } { ptr @.str.6445, i64 0, i64 0 }, ptr %a86 %t87 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 5 %t88 = load i1, ptr %t87 br i1 %t88, label %then9321, label %endif9323 then9321: %t89 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 0 %t90 = load { ptr, i64, i64 }, ptr %t89 store { ptr, i64, i64 } { ptr @.str.6446, i64 10, i64 0 }, ptr %a92 store { ptr, i64, i64 } %t90, ptr %a93 call void @finch_str_concat(ptr %a91, ptr %a92, ptr %a93) %t94 = load { ptr, i64, i64 }, ptr %a91 store { ptr, i64, i64 } %t94, ptr %a86 br label %endif9323 endif9323: %t95 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 0 %t96 = load { ptr, i64, i64 }, ptr %t95 store { ptr, i64, i64 } %t96, ptr %a98 store { ptr, i64, i64 } { ptr @.str.6447, i64 4, i64 0 }, ptr %a99 call void @finch_str_concat(ptr %a97, ptr %a98, ptr %a99) %t100 = load { ptr, i64, i64 }, ptr %a97 store { ptr, i64, i64 } %t100, ptr %a101 %t102 = load { ptr, i64, i64 }, ptr %a13 %t103 = load { ptr, i64, i64 }, ptr %a86 store { ptr, i64, i64 } %t102, ptr %a105 store { ptr, i64, i64 } %t103, ptr %a106 call void @finch_str_concat(ptr %a104, ptr %a105, ptr %a106) %t107 = load { ptr, i64, i64 }, ptr %a104 store { ptr, i64, i64 } %t107, ptr %a109 store { ptr, i64, i64 } { ptr @.str.6448, i64 1, i64 0 }, ptr %a110 call void @finch_str_concat(ptr %a108, ptr %a109, ptr %a110) %t111 = load { ptr, i64, i64 }, ptr %a108 %t112 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 3 %t113 = load { ptr, i64, i64 }, ptr %t112 store { ptr, i64, i64 } %t111, ptr %a115 store { ptr, i64, i64 } %t113, ptr %a116 call void @finch_str_concat(ptr %a114, ptr %a115, ptr %a116) %t117 = load { ptr, i64, i64 }, ptr %a114 %t118 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 4 %t119 = load { ptr, i64, i64 }, ptr %t118 store { ptr, i64, i64 } %t117, ptr %a121 store { ptr, i64, i64 } %t119, ptr %a122 call void @finch_str_concat(ptr %a120, ptr %a121, ptr %a122) %t123 = load { ptr, i64, i64 }, ptr %a120 store { ptr, i64, i64 } %t123, ptr %a125 store { ptr, i64, i64 } { ptr @.str.6449, i64 7, i64 0 }, ptr %a126 call void @finch_str_concat(ptr %a124, ptr %a125, ptr %a126) %t127 = load { ptr, i64, i64 }, ptr %a124 %t128 = load { ptr, i64, i64 }, ptr %a71 %t129 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t128) store { ptr, i64, i64 } %t127, ptr %a131 store { ptr, i64, i64 } %t129, ptr %a132 call void @finch_str_concat(ptr %a130, ptr %a131, ptr %a132) %t133 = load { ptr, i64, i64 }, ptr %a130 store { ptr, i64, i64 } %t133, ptr %a135 store { ptr, i64, i64 } { ptr @.str.6450, i64 4, i64 0 }, ptr %a136 call void @finch_str_concat(ptr %a134, ptr %a135, ptr %a136) %t137 = load { ptr, i64, i64 }, ptr %a134 %t138 = load { ptr, i64, i64 }, ptr %a78 %t139 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t138) store { ptr, i64, i64 } %t137, ptr %a141 store { ptr, i64, i64 } %t139, ptr %a142 call void @finch_str_concat(ptr %a140, ptr %a141, ptr %a142) %t143 = load { ptr, i64, i64 }, ptr %a140 store { ptr, i64, i64 } %t143, ptr %a145 store { ptr, i64, i64 } { ptr @.str.6451, i64 3, i64 0 }, ptr %a146 call void @finch_str_concat(ptr %a144, ptr %a145, ptr %a146) %t147 = load { ptr, i64, i64 }, ptr %a144 %t148 = load { ptr, i64, i64 }, ptr %a101 %t149 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t148) store { ptr, i64, i64 } %t147, ptr %a151 store { ptr, i64, i64 } %t149, ptr %a152 call void @finch_str_concat(ptr %a150, ptr %a151, ptr %a152) %t153 = load { ptr, i64, i64 }, ptr %a150 store { ptr, i64, i64 } %t153, ptr %a155 store { ptr, i64, i64 } { ptr @.str.6452, i64 5, i64 0 }, ptr %a156 call void @finch_str_concat(ptr %a154, ptr %a155, ptr %a156) %t157 = load { ptr, i64, i64 }, ptr %a154 store { ptr, i64, i64 } %t157, ptr %a159 call void @finch_str_copy(ptr %a158, ptr %a159) %t160 = call i64 @finch_shell(ptr %a158) store i64 %t160, ptr %a161 %t162 = load { ptr, i64, i64 }, ptr %a71 %t163 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t162) store { ptr, i64, i64 } { ptr @.str.6453, i64 6, i64 0 }, ptr %a165 store { ptr, i64, i64 } %t163, ptr %a166 call void @finch_str_concat(ptr %a164, ptr %a165, ptr %a166) %t167 = load { ptr, i64, i64 }, ptr %a164 store { ptr, i64, i64 } %t167, ptr %a169 call void @finch_str_copy(ptr %a168, ptr %a169) %t170 = call i64 @finch_shell(ptr %a168) %t171 = load i64, ptr %a161 %t172 = icmp ne i64 %t171, 0 br i1 %t172, label %then9324, label %endif9326 then9324: %t173 = load { ptr, i64, i64 }, ptr %a101 store { ptr, i64, i64 } %t173, ptr %a174 store { ptr, i64, i64 } zeroinitializer, ptr %a175 store { ptr, i64, i64 } zeroinitializer, ptr %a176 %t177 = call i32 @finch_try_read_file(ptr %a175, ptr %a174, ptr %a176) %t178 = icmp eq i32 %t177, 0 %t179 = load { ptr, i64, i64 }, ptr %a176 %t180 = load { ptr, i64, i64 }, ptr %a175 br i1 %t178, label %or.failed9327, label %or.ok9328 or.failed9327: store { ptr, i64, i64 } %t179, ptr %a181 br label %or.bend9329 or.bend9329: br label %or.end9330 or.ok9328: br label %or.end9330 or.end9330: %t182 = phi { ptr, i64, i64 } [ { ptr @.str.6454, i64 0, i64 0 }, %or.bend9329 ], [ %t180, %or.ok9328 ] %t183 = extractvalue { ptr, i64, i64 } %t182, 1 %t184 = trunc i64 %t183 to i32 %t185 = extractvalue { ptr, i64, i64 } %t182, 0 %t186 = icmp eq ptr %t185, null %t187 = select i1 %t186, ptr @.str.6455, ptr %t185 %t188 = call i32 (ptr, ...) @printf(ptr @.str.6456, i32 %t184, ptr %t187) %t189 = call i32 (ptr, ...) @printf(ptr @.str.6457) %t190 = extractvalue { ptr, i64, i64 } { ptr @.str.6458, i64 46, i64 0 }, 1 %t191 = trunc i64 %t190 to i32 %t192 = extractvalue { ptr, i64, i64 } { ptr @.str.6458, i64 46, i64 0 }, 0 %t193 = icmp eq ptr %t192, null %t194 = select i1 %t193, ptr @.str.6459, ptr %t192 %t195 = call i32 (ptr, ...) @printf(ptr @.str.6460, i32 %t191, ptr %t194) %t196 = call i32 (ptr, ...) @printf(ptr @.str.6461) %t197 = load { ptr, i64, i64 }, ptr %a78 %t198 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t197) store { ptr, i64, i64 } { ptr @.str.6462, i64 6, i64 0 }, ptr %a200 store { ptr, i64, i64 } %t198, ptr %a201 call void @finch_str_concat(ptr %a199, ptr %a200, ptr %a201) %t202 = load { ptr, i64, i64 }, ptr %a199 store { ptr, i64, i64 } %t202, ptr %a204 store { ptr, i64, i64 } { ptr @.str.6463, i64 1, i64 0 }, ptr %a205 call void @finch_str_concat(ptr %a203, ptr %a204, ptr %a205) %t206 = load { ptr, i64, i64 }, ptr %a203 %t207 = load { ptr, i64, i64 }, ptr %a101 %t208 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t207) store { ptr, i64, i64 } %t206, ptr %a210 store { ptr, i64, i64 } %t208, ptr %a211 call void @finch_str_concat(ptr %a209, ptr %a210, ptr %a211) %t212 = load { ptr, i64, i64 }, ptr %a209 store { ptr, i64, i64 } %t212, ptr %a214 call void @finch_str_copy(ptr %a213, ptr %a214) %t215 = call i64 @finch_shell(ptr %a213) ret i64 1 endif9326: %t216 = load { ptr, i64, i64 }, ptr %a21 store { ptr, i64, i64 } %t216, ptr %a218 store { ptr, i64, i64 } { ptr @.str.6464, i64 1, i64 0 }, ptr %a219 call void @finch_str_concat(ptr %a217, ptr %a218, ptr %a219) %t220 = load { ptr, i64, i64 }, ptr %a217 %t221 = load { ptr, i64, i64 }, ptr %a78 %t222 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t221) store { ptr, i64, i64 } %t220, ptr %a224 store { ptr, i64, i64 } %t222, ptr %a225 call void @finch_str_concat(ptr %a223, ptr %a224, ptr %a225) %t226 = load { ptr, i64, i64 }, ptr %a223 store { ptr, i64, i64 } %t226, ptr %a228 store { ptr, i64, i64 } { ptr @.str.6465, i64 1, i64 0 }, ptr %a229 call void @finch_str_concat(ptr %a227, ptr %a228, ptr %a229) %t230 = load { ptr, i64, i64 }, ptr %a227 %t231 = load { ptr, i64, i64 }, ptr %a64 %t232 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t231) store { ptr, i64, i64 } %t230, ptr %a234 store { ptr, i64, i64 } %t232, ptr %a235 call void @finch_str_concat(ptr %a233, ptr %a234, ptr %a235) %t236 = load { ptr, i64, i64 }, ptr %a233 store { ptr, i64, i64 } %t236, ptr %a238 store { ptr, i64, i64 } { ptr @.str.6466, i64 4, i64 0 }, ptr %a239 call void @finch_str_concat(ptr %a237, ptr %a238, ptr %a239) %t240 = load { ptr, i64, i64 }, ptr %a237 %t241 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 0 %t242 = load { ptr, i64, i64 }, ptr %t241 %t243 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t242) store { ptr, i64, i64 } %t240, ptr %a245 store { ptr, i64, i64 } %t243, ptr %a246 call void @finch_str_concat(ptr %a244, ptr %a245, ptr %a246) %t247 = load { ptr, i64, i64 }, ptr %a244 store { ptr, i64, i64 } %t247, ptr %a248 %t249 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 2 %t250 = load i1, ptr %t249 %t251 = xor i1 %t250, true br i1 %t251, label %then9331, label %endif9333 then9331: %t252 = load { ptr, i64, i64 }, ptr %a248 store { ptr, i64, i64 } %t252, ptr %a254 store { ptr, i64, i64 } { ptr @.str.6467, i64 4, i64 0 }, ptr %a255 call void @finch_str_concat(ptr %a253, ptr %a254, ptr %a255) %t256 = load { ptr, i64, i64 }, ptr %a253 store { ptr, i64, i64 } %t256, ptr %a248 br label %endif9333 endif9333: %t257 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 5 %t258 = load i1, ptr %t257 br i1 %t258, label %then9334, label %endif9336 then9334: %t259 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 3 %t260 = load i1, ptr %t259 br i1 %t260, label %then9337, label %else9338 then9337: %t261 = load { ptr, i64, i64 }, ptr %a248 store { ptr, i64, i64 } %t261, ptr %a263 store { ptr, i64, i64 } { ptr @.str.6468, i64 12, i64 0 }, ptr %a264 call void @finch_str_concat(ptr %a262, ptr %a263, ptr %a264) %t265 = load { ptr, i64, i64 }, ptr %a262 store { ptr, i64, i64 } %t265, ptr %a248 br label %endif9339 else9338: %t266 = load { ptr, i64, i64 }, ptr %a248 store { ptr, i64, i64 } %t266, ptr %a268 store { ptr, i64, i64 } { ptr @.str.6469, i64 8, i64 0 }, ptr %a269 call void @finch_str_concat(ptr %a267, ptr %a268, ptr %a269) %t270 = load { ptr, i64, i64 }, ptr %a267 store { ptr, i64, i64 } %t270, ptr %a248 br label %endif9339 endif9339: br label %endif9336 endif9336: store { ptr, i64, i64 } zeroinitializer, ptr %a271 %t272 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 6 store i64 0, ptr %a273 br label %each.cond9340 each.cond9340: %t274 = getelementptr inbounds { ptr, i64, i64 }, ptr %t272, i32 0, i32 1 %t275 = load i64, ptr %t274 %t276 = load i64, ptr %a273 %t277 = icmp slt i64 %t276, %t275 br i1 %t277, label %each.body9341, label %each.end9343 each.body9341: %t278 = load ptr, ptr %t272 %t279 = getelementptr inbounds { ptr, i64, i64 }, ptr %t278, i64 %t276 %t280 = load { ptr, i64, i64 }, ptr %t279 store { ptr, i64, i64 } %t280, ptr %a281 %t282 = load { ptr, i64, i64 }, ptr %a281 store { ptr, i64, i64 } %t282, ptr %a283 store { ptr, i64, i64 } { ptr @.str.6471, i64 2, i64 0 }, ptr %a285 %t286 = call i32 @finch_str_ends(ptr %a283, ptr %a285) %t287 = icmp ne i32 %t286, 0 br i1 %t287, label %then9344, label %else9345 then9344: %t288 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 0 %t289 = load { ptr, i64, i64 }, ptr %t288 store { ptr, i64, i64 } %t289, ptr %a291 store { ptr, i64, i64 } { ptr @.str.6472, i64 1, i64 0 }, ptr %a292 call void @finch_str_concat(ptr %a290, ptr %a291, ptr %a292) %t293 = load { ptr, i64, i64 }, ptr %a290 %t294 = getelementptr inbounds { ptr, i64, i64 }, ptr %a271, i32 0, i32 1 %t295 = load i64, ptr %t294 call void @finch_str_from_int(ptr %a296, i64 %t295) %t297 = load { ptr, i64, i64 }, ptr %a296 store { ptr, i64, i64 } %t293, ptr %a299 store { ptr, i64, i64 } %t297, ptr %a300 call void @finch_str_concat(ptr %a298, ptr %a299, ptr %a300) %t301 = load { ptr, i64, i64 }, ptr %a298 store { ptr, i64, i64 } %t301, ptr %a303 store { ptr, i64, i64 } { ptr @.str.6473, i64 2, i64 0 }, ptr %a304 call void @finch_str_concat(ptr %a302, ptr %a303, ptr %a304) %t305 = load { ptr, i64, i64 }, ptr %a302 store { ptr, i64, i64 } %t305, ptr %a306 store { ptr, i64, i64 } { ptr @.str.6474, i64 6, i64 0 }, ptr %a307 %t308 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 1 %t309 = load i1, ptr %t308 br i1 %t309, label %then9347, label %endif9349 then9347: store { ptr, i64, i64 } { ptr @.str.6475, i64 0, i64 0 }, ptr %a307 br label %endif9349 endif9349: %t310 = load { ptr, i64, i64 }, ptr %a21 store { ptr, i64, i64 } %t310, ptr %a312 store { ptr, i64, i64 } { ptr @.str.6476, i64 4, i64 0 }, ptr %a313 call void @finch_str_concat(ptr %a311, ptr %a312, ptr %a313) %t314 = load { ptr, i64, i64 }, ptr %a311 %t315 = load { ptr, i64, i64 }, ptr %a307 store { ptr, i64, i64 } %t314, ptr %a317 store { ptr, i64, i64 } %t315, ptr %a318 call void @finch_str_concat(ptr %a316, ptr %a317, ptr %a318) %t319 = load { ptr, i64, i64 }, ptr %a316 store { ptr, i64, i64 } %t319, ptr %a321 store { ptr, i64, i64 } { ptr @.str.6477, i64 4, i64 0 }, ptr %a322 call void @finch_str_concat(ptr %a320, ptr %a321, ptr %a322) %t323 = load { ptr, i64, i64 }, ptr %a320 %t324 = load { ptr, i64, i64 }, ptr %a281 %t325 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t324) store { ptr, i64, i64 } %t323, ptr %a327 store { ptr, i64, i64 } %t325, ptr %a328 call void @finch_str_concat(ptr %a326, ptr %a327, ptr %a328) %t329 = load { ptr, i64, i64 }, ptr %a326 store { ptr, i64, i64 } %t329, ptr %a331 store { ptr, i64, i64 } { ptr @.str.6478, i64 4, i64 0 }, ptr %a332 call void @finch_str_concat(ptr %a330, ptr %a331, ptr %a332) %t333 = load { ptr, i64, i64 }, ptr %a330 %t334 = load { ptr, i64, i64 }, ptr %a306 %t335 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t334) store { ptr, i64, i64 } %t333, ptr %a337 store { ptr, i64, i64 } %t335, ptr %a338 call void @finch_str_concat(ptr %a336, ptr %a337, ptr %a338) %t339 = load { ptr, i64, i64 }, ptr %a336 store { ptr, i64, i64 } %t339, ptr %a341 store { ptr, i64, i64 } { ptr @.str.6479, i64 3, i64 0 }, ptr %a342 call void @finch_str_concat(ptr %a340, ptr %a341, ptr %a342) %t343 = load { ptr, i64, i64 }, ptr %a340 %t344 = load { ptr, i64, i64 }, ptr %a101 %t345 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t344) store { ptr, i64, i64 } %t343, ptr %a347 store { ptr, i64, i64 } %t345, ptr %a348 call void @finch_str_concat(ptr %a346, ptr %a347, ptr %a348) %t349 = load { ptr, i64, i64 }, ptr %a346 store { ptr, i64, i64 } %t349, ptr %a351 store { ptr, i64, i64 } { ptr @.str.6480, i64 5, i64 0 }, ptr %a352 call void @finch_str_concat(ptr %a350, ptr %a351, ptr %a352) %t353 = load { ptr, i64, i64 }, ptr %a350 store { ptr, i64, i64 } %t353, ptr %a355 call void @finch_str_copy(ptr %a354, ptr %a355) %t356 = call i64 @finch_shell(ptr %a354) store i64 %t356, ptr %a357 %t358 = load i64, ptr %a357 %t359 = icmp ne i64 %t358, 0 br i1 %t359, label %then9350, label %endif9352 then9350: %t360 = load { ptr, i64, i64 }, ptr %a101 store { ptr, i64, i64 } %t360, ptr %a361 store { ptr, i64, i64 } zeroinitializer, ptr %a362 store { ptr, i64, i64 } zeroinitializer, ptr %a363 %t364 = call i32 @finch_try_read_file(ptr %a362, ptr %a361, ptr %a363) %t365 = icmp eq i32 %t364, 0 %t366 = load { ptr, i64, i64 }, ptr %a363 %t367 = load { ptr, i64, i64 }, ptr %a362 br i1 %t365, label %or.failed9353, label %or.ok9354 or.failed9353: store { ptr, i64, i64 } %t366, ptr %a368 br label %or.bend9355 or.bend9355: br label %or.end9356 or.ok9354: br label %or.end9356 or.end9356: %t369 = phi { ptr, i64, i64 } [ { ptr @.str.6481, i64 0, i64 0 }, %or.bend9355 ], [ %t367, %or.ok9354 ] store { ptr, i64, i64 } %t369, ptr %a371 store { ptr, i64, i64 } { ptr @.str.6482, i64 24, i64 0 }, ptr %a372 call void @finch_str_concat(ptr %a370, ptr %a371, ptr %a372) %t373 = load { ptr, i64, i64 }, ptr %a370 %t374 = load { ptr, i64, i64 }, ptr %a281 store { ptr, i64, i64 } %t373, ptr %a376 store { ptr, i64, i64 } %t374, ptr %a377 call void @finch_str_concat(ptr %a375, ptr %a376, ptr %a377) %t378 = load { ptr, i64, i64 }, ptr %a375 %t379 = extractvalue { ptr, i64, i64 } %t378, 1 %t380 = trunc i64 %t379 to i32 %t381 = extractvalue { ptr, i64, i64 } %t378, 0 %t382 = icmp eq ptr %t381, null %t383 = select i1 %t382, ptr @.str.6483, ptr %t381 %t384 = call i32 (ptr, ...) @printf(ptr @.str.6484, i32 %t380, ptr %t383) %t385 = call i32 (ptr, ...) @printf(ptr @.str.6485) %t386 = load { ptr, i64, i64 }, ptr %a78 %t387 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t386) store { ptr, i64, i64 } { ptr @.str.6486, i64 6, i64 0 }, ptr %a389 store { ptr, i64, i64 } %t387, ptr %a390 call void @finch_str_concat(ptr %a388, ptr %a389, ptr %a390) %t391 = load { ptr, i64, i64 }, ptr %a388 store { ptr, i64, i64 } %t391, ptr %a393 store { ptr, i64, i64 } { ptr @.str.6487, i64 1, i64 0 }, ptr %a394 call void @finch_str_concat(ptr %a392, ptr %a393, ptr %a394) %t395 = load { ptr, i64, i64 }, ptr %a392 %t396 = load { ptr, i64, i64 }, ptr %a101 %t397 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t396) store { ptr, i64, i64 } %t395, ptr %a399 store { ptr, i64, i64 } %t397, ptr %a400 call void @finch_str_concat(ptr %a398, ptr %a399, ptr %a400) %t401 = load { ptr, i64, i64 }, ptr %a398 store { ptr, i64, i64 } %t401, ptr %a403 store { ptr, i64, i64 } { ptr @.str.6488, i64 1, i64 0 }, ptr %a404 call void @finch_str_concat(ptr %a402, ptr %a403, ptr %a404) %t405 = load { ptr, i64, i64 }, ptr %a402 %t406 = load { ptr, i64, i64 }, ptr %a306 %t407 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t406) store { ptr, i64, i64 } %t405, ptr %a409 store { ptr, i64, i64 } %t407, ptr %a410 call void @finch_str_concat(ptr %a408, ptr %a409, ptr %a410) %t411 = load { ptr, i64, i64 }, ptr %a408 store { ptr, i64, i64 } %t411, ptr %a413 call void @finch_str_copy(ptr %a412, ptr %a413) %t414 = call i64 @finch_shell(ptr %a412) ret i64 1 endif9352: %t415 = getelementptr inbounds { ptr, i64, i64 }, ptr %a271, i32 0, i32 1 %t416 = load { ptr, i64, i64 }, ptr %a306 store { ptr, i64, i64 } %t416, ptr %a417 call void @finch_str_copy(ptr %a418, ptr %a417) %t419 = load { ptr, i64, i64 }, ptr %a418 %t420 = load i64, ptr %t415 %t421 = add i64 %t420, 1 call void @finch_arr_reserve(ptr %a271, i64 %t421, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t422 = load ptr, ptr %a271 %t423 = getelementptr inbounds { ptr, i64, i64 }, ptr %t422, i64 %t420 store { ptr, i64, i64 } %t419, ptr %t423 store i64 %t421, ptr %t415 %t424 = load { ptr, i64, i64 }, ptr %a248 store { ptr, i64, i64 } %t424, ptr %a426 store { ptr, i64, i64 } { ptr @.str.6489, i64 1, i64 0 }, ptr %a427 call void @finch_str_concat(ptr %a425, ptr %a426, ptr %a427) %t428 = load { ptr, i64, i64 }, ptr %a425 %t429 = load { ptr, i64, i64 }, ptr %a306 %t430 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t429) store { ptr, i64, i64 } %t428, ptr %a432 store { ptr, i64, i64 } %t430, ptr %a433 call void @finch_str_concat(ptr %a431, ptr %a432, ptr %a433) %t434 = load { ptr, i64, i64 }, ptr %a431 store { ptr, i64, i64 } %t434, ptr %a248 br label %endif9346 else9345: %t435 = load { ptr, i64, i64 }, ptr %a281 store { ptr, i64, i64 } %t435, ptr %a436 store { ptr, i64, i64 } { ptr @.str.6491, i64 2, i64 0 }, ptr %a438 %t439 = call i32 @finch_str_ends(ptr %a436, ptr %a438) %t440 = icmp ne i32 %t439, 0 br label %logic.from9357 logic.from9357: br i1 %t440, label %logic.end9359, label %logic.rhs9358 logic.rhs9358: %t441 = load { ptr, i64, i64 }, ptr %a281 store { ptr, i64, i64 } %t441, ptr %a442 store { ptr, i64, i64 } { ptr @.str.6493, i64 2, i64 0 }, ptr %a444 %t445 = call i32 @finch_str_ends(ptr %a442, ptr %a444) %t446 = icmp ne i32 %t445, 0 br label %logic.rend9360 logic.rend9360: br label %logic.end9359 logic.end9359: %t447 = phi i1 [ true, %logic.from9357 ], [ %t446, %logic.rend9360 ] br i1 %t447, label %then9361, label %else9362 then9361: %t448 = load { ptr, i64, i64 }, ptr %a248 store { ptr, i64, i64 } %t448, ptr %a450 store { ptr, i64, i64 } { ptr @.str.6494, i64 1, i64 0 }, ptr %a451 call void @finch_str_concat(ptr %a449, ptr %a450, ptr %a451) %t452 = load { ptr, i64, i64 }, ptr %a449 %t453 = load { ptr, i64, i64 }, ptr %a281 %t454 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t453) store { ptr, i64, i64 } %t452, ptr %a456 store { ptr, i64, i64 } %t454, ptr %a457 call void @finch_str_concat(ptr %a455, ptr %a456, ptr %a457) %t458 = load { ptr, i64, i64 }, ptr %a455 store { ptr, i64, i64 } %t458, ptr %a248 br label %endif9363 else9362: %t459 = load { ptr, i64, i64 }, ptr %a248 store { ptr, i64, i64 } %t459, ptr %a461 store { ptr, i64, i64 } { ptr @.str.6495, i64 1, i64 0 }, ptr %a462 call void @finch_str_concat(ptr %a460, ptr %a461, ptr %a462) %t463 = load { ptr, i64, i64 }, ptr %a460 %t464 = load { ptr, i64, i64 }, ptr %a281 %t465 = load %S.platform.Target, ptr %a2 %t466 = call { ptr, i64, i64 } @finch.linker.libFlags({ ptr, i64, i64 } %t464, %S.platform.Target %t465) store { ptr, i64, i64 } %t463, ptr %a468 store { ptr, i64, i64 } %t466, ptr %a469 call void @finch_str_concat(ptr %a467, ptr %a468, ptr %a469) %t470 = load { ptr, i64, i64 }, ptr %a467 store { ptr, i64, i64 } %t470, ptr %a248 br label %endif9363 endif9363: br label %endif9346 endif9346: br label %each.step9342 each.step9342: %t471 = load i64, ptr %a273 %t472 = add i64 %t471, 1 store i64 %t472, ptr %a273 br label %each.cond9340 each.end9343: %t473 = load { ptr, i64, i64 }, ptr %a248 store { ptr, i64, i64 } %t473, ptr %a475 store { ptr, i64, i64 } { ptr @.str.6496, i64 3, i64 0 }, ptr %a476 call void @finch_str_concat(ptr %a474, ptr %a475, ptr %a476) %t477 = load { ptr, i64, i64 }, ptr %a474 %t478 = load { ptr, i64, i64 }, ptr %a101 %t479 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t478) store { ptr, i64, i64 } %t477, ptr %a481 store { ptr, i64, i64 } %t479, ptr %a482 call void @finch_str_concat(ptr %a480, ptr %a481, ptr %a482) %t483 = load { ptr, i64, i64 }, ptr %a480 store { ptr, i64, i64 } %t483, ptr %a485 store { ptr, i64, i64 } { ptr @.str.6497, i64 5, i64 0 }, ptr %a486 call void @finch_str_concat(ptr %a484, ptr %a485, ptr %a486) %t487 = load { ptr, i64, i64 }, ptr %a484 store { ptr, i64, i64 } %t487, ptr %a489 call void @finch_str_copy(ptr %a488, ptr %a489) %t490 = call i64 @finch_shell(ptr %a488) store i64 %t490, ptr %a491 %t492 = load { ptr, i64, i64 }, ptr %a101 store { ptr, i64, i64 } %t492, ptr %a493 store { ptr, i64, i64 } zeroinitializer, ptr %a494 store { ptr, i64, i64 } zeroinitializer, ptr %a495 %t496 = call i32 @finch_try_read_file(ptr %a494, ptr %a493, ptr %a495) %t497 = icmp eq i32 %t496, 0 %t498 = load { ptr, i64, i64 }, ptr %a495 %t499 = load { ptr, i64, i64 }, ptr %a494 br i1 %t497, label %or.failed9364, label %or.ok9365 or.failed9364: store { ptr, i64, i64 } %t498, ptr %a500 br label %or.bend9366 or.bend9366: br label %or.end9367 or.ok9365: br label %or.end9367 or.end9367: %t501 = phi { ptr, i64, i64 } [ { ptr @.str.6498, i64 0, i64 0 }, %or.bend9366 ], [ %t499, %or.ok9365 ] store { ptr, i64, i64 } %t501, ptr %a502 %t503 = load { ptr, i64, i64 }, ptr %a78 %t504 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t503) store { ptr, i64, i64 } { ptr @.str.6499, i64 6, i64 0 }, ptr %a506 store { ptr, i64, i64 } %t504, ptr %a507 call void @finch_str_concat(ptr %a505, ptr %a506, ptr %a507) %t508 = load { ptr, i64, i64 }, ptr %a505 store { ptr, i64, i64 } %t508, ptr %a510 store { ptr, i64, i64 } { ptr @.str.6500, i64 1, i64 0 }, ptr %a511 call void @finch_str_concat(ptr %a509, ptr %a510, ptr %a511) %t512 = load { ptr, i64, i64 }, ptr %a509 %t513 = load { ptr, i64, i64 }, ptr %a101 %t514 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t513) store { ptr, i64, i64 } %t512, ptr %a516 store { ptr, i64, i64 } %t514, ptr %a517 call void @finch_str_concat(ptr %a515, ptr %a516, ptr %a517) %t518 = load { ptr, i64, i64 }, ptr %a515 store { ptr, i64, i64 } %t518, ptr %a520 call void @finch_str_copy(ptr %a519, ptr %a520) %t521 = call i64 @finch_shell(ptr %a519) store i64 0, ptr %a522 br label %each.cond9368 each.cond9368: %t523 = getelementptr inbounds { ptr, i64, i64 }, ptr %a271, i32 0, i32 1 %t524 = load i64, ptr %t523 %t525 = load i64, ptr %a522 %t526 = icmp slt i64 %t525, %t524 br i1 %t526, label %each.body9369, label %each.end9371 each.body9369: %t527 = load ptr, ptr %a271 %t528 = getelementptr inbounds { ptr, i64, i64 }, ptr %t527, i64 %t525 %t529 = load { ptr, i64, i64 }, ptr %t528 store { ptr, i64, i64 } %t529, ptr %a530 %t531 = load { ptr, i64, i64 }, ptr %a530 %t532 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t531) store { ptr, i64, i64 } { ptr @.str.6501, i64 6, i64 0 }, ptr %a534 store { ptr, i64, i64 } %t532, ptr %a535 call void @finch_str_concat(ptr %a533, ptr %a534, ptr %a535) %t536 = load { ptr, i64, i64 }, ptr %a533 store { ptr, i64, i64 } %t536, ptr %a538 call void @finch_str_copy(ptr %a537, ptr %a538) %t539 = call i64 @finch_shell(ptr %a537) br label %each.step9370 each.step9370: %t540 = load i64, ptr %a522 %t541 = add i64 %t540, 1 store i64 %t541, ptr %a522 br label %each.cond9368 each.end9371: %t542 = load i64, ptr %a491 %t543 = icmp eq i64 %t542, 127 br i1 %t543, label %then9372, label %endif9374 then9372: %t544 = load { ptr, i64, i64 }, ptr %a21 store { ptr, i64, i64 } { ptr @.str.6502, i64 42, i64 0 }, ptr %a546 store { ptr, i64, i64 } %t544, ptr %a547 call void @finch_str_concat(ptr %a545, ptr %a546, ptr %a547) %t548 = load { ptr, i64, i64 }, ptr %a545 store { ptr, i64, i64 } %t548, ptr %a550 store { ptr, i64, i64 } { ptr @.str.6503, i64 32, i64 0 }, ptr %a551 call void @finch_str_concat(ptr %a549, ptr %a550, ptr %a551) %t552 = load { ptr, i64, i64 }, ptr %a549 %t553 = extractvalue { ptr, i64, i64 } %t552, 1 %t554 = trunc i64 %t553 to i32 %t555 = extractvalue { ptr, i64, i64 } %t552, 0 %t556 = icmp eq ptr %t555, null %t557 = select i1 %t556, ptr @.str.6504, ptr %t555 %t558 = call i32 (ptr, ...) @printf(ptr @.str.6505, i32 %t554, ptr %t557) %t559 = call i32 (ptr, ...) @printf(ptr @.str.6506) ret i64 1 endif9374: %t560 = load i64, ptr %a491 %t561 = icmp ne i64 %t560, 0 br i1 %t561, label %then9375, label %endif9377 then9375: %t562 = load { ptr, i64, i64 }, ptr %a502 %t563 = load %S.cimport.CImports, ptr %a3 %t564 = load %S.platform.Target, ptr %a2 %t565 = call i64 @finch.linker.linkFailed({ ptr, i64, i64 } %t562, %S.cimport.CImports %t563, %S.platform.Target %t564) ret i64 %t565 endif9377: %t566 = getelementptr inbounds { ptr, i64, i64 }, ptr %a502, i32 0, i32 1 %t567 = load i64, ptr %t566 %t568 = icmp sgt i64 %t567, 0 br i1 %t568, label %then9378, label %endif9380 then9378: %t569 = load { ptr, i64, i64 }, ptr %a502 %t570 = extractvalue { ptr, i64, i64 } %t569, 1 %t571 = trunc i64 %t570 to i32 %t572 = extractvalue { ptr, i64, i64 } %t569, 0 %t573 = icmp eq ptr %t572, null %t574 = select i1 %t573, ptr @.str.6507, ptr %t572 %t575 = call i32 (ptr, ...) @printf(ptr @.str.6508, i32 %t571, ptr %t574) %t576 = call i32 (ptr, ...) @printf(ptr @.str.6509) br label %endif9380 endif9380: ret i64 0 } define internal i64 @finch.lsp.hexval(i8 %p0) { entry: %a1 = alloca i8, align 16 store i8 %p0, ptr %a1 %t2 = load i8, ptr %a1 %t3 = icmp uge i8 %t2, 48 br label %logic.from9381 logic.from9381: br i1 %t3, label %logic.rhs9382, label %logic.end9383 logic.rhs9382: %t4 = load i8, ptr %a1 %t5 = icmp ule i8 %t4, 57 br label %logic.rend9384 logic.rend9384: br label %logic.end9383 logic.end9383: %t6 = phi i1 [ false, %logic.from9381 ], [ %t5, %logic.rend9384 ] br i1 %t6, label %then9385, label %endif9387 then9385: %t7 = load i8, ptr %a1 %t8 = zext i8 %t7 to i64 %t9 = zext i8 48 to i64 %t10 = sub i64 %t8, %t9 ret i64 %t10 endif9387: %t11 = load i8, ptr %a1 %t12 = icmp uge i8 %t11, 97 br label %logic.from9388 logic.from9388: br i1 %t12, label %logic.rhs9389, label %logic.end9390 logic.rhs9389: %t13 = load i8, ptr %a1 %t14 = icmp ule i8 %t13, 102 br label %logic.rend9391 logic.rend9391: br label %logic.end9390 logic.end9390: %t15 = phi i1 [ false, %logic.from9388 ], [ %t14, %logic.rend9391 ] br i1 %t15, label %then9392, label %endif9394 then9392: %t16 = load i8, ptr %a1 %t17 = zext i8 %t16 to i64 %t18 = zext i8 97 to i64 %t19 = sub i64 %t17, %t18 %t20 = add i64 %t19, 10 ret i64 %t20 endif9394: %t21 = load i8, ptr %a1 %t22 = icmp uge i8 %t21, 65 br label %logic.from9395 logic.from9395: br i1 %t22, label %logic.rhs9396, label %logic.end9397 logic.rhs9396: %t23 = load i8, ptr %a1 %t24 = icmp ule i8 %t23, 70 br label %logic.rend9398 logic.rend9398: br label %logic.end9397 logic.end9397: %t25 = phi i1 [ false, %logic.from9395 ], [ %t24, %logic.rend9398 ] br i1 %t25, label %then9399, label %endif9401 then9399: %t26 = load i8, ptr %a1 %t27 = zext i8 %t26 to i64 %t28 = zext i8 65 to i64 %t29 = sub i64 %t27, %t28 %t30 = add i64 %t29, 10 ret i64 %t30 endif9401: ret i64 -1 } define internal { ptr, i64, i64 } @finch.lsp.uriToPath({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca i64, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 %a106 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t2, ptr %a3 call void @finch_str_copy(ptr %a4, ptr %a3) %t5 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t5, ptr %a6 %t7 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t7, ptr %a8 store { ptr, i64, i64 } { ptr @.str.6511, i64 7, i64 0 }, ptr %a10 %t11 = call i32 @finch_str_starts(ptr %a8, ptr %a10) %t12 = icmp ne i32 %t11, 0 br i1 %t12, label %then9402, label %endif9404 then9402: %t13 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t13, ptr %a14 %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 %t17 = load i64, ptr %t16 call void @finch_str_sub(ptr %a15, ptr %a14, i64 7, i64 %t17, ptr @.str.6512, i64 114) %t18 = load { ptr, i64, i64 }, ptr %a15 store { ptr, i64, i64 } %t18, ptr %a6 br label %endif9404 endif9404: store { ptr, i64, i64 } zeroinitializer, ptr %a19 store i64 0, ptr %a20 br label %while.cond9405 while.cond9405: %t21 = load i64, ptr %a20 %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 %t23 = load i64, ptr %t22 %t24 = icmp slt i64 %t21, %t23 br i1 %t24, label %while.body9406, label %while.end9407 while.body9406: %t25 = load i64, ptr %a20 %t26 = load { ptr, i64, i64 }, ptr %a6 %t27 = extractvalue { ptr, i64, i64 } %t26, 1 %t28 = icmp uge i64 %t25, %t27 br i1 %t28, label %range9408, label %inrange9409 range9408: call void @finch_panic_index(ptr @.str.6513, i64 119, i64 %t25, i64 %t27) unreachable inrange9409: %t29 = extractvalue { ptr, i64, i64 } %t26, 0 %t30 = getelementptr inbounds i8, ptr %t29, i64 %t25 %t31 = load i8, ptr %t30 %t32 = icmp eq i8 %t31, 37 br label %logic.from9410 logic.from9410: br i1 %t32, label %logic.rhs9411, label %logic.end9412 logic.rhs9411: %t33 = load i64, ptr %a20 %t34 = add i64 %t33, 2 %t35 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 %t36 = load i64, ptr %t35 %t37 = add i64 %t36, 0 %t38 = icmp slt i64 %t34, %t37 br label %logic.rend9413 logic.rend9413: br label %logic.end9412 logic.end9412: %t39 = phi i1 [ false, %logic.from9410 ], [ %t38, %logic.rend9413 ] br label %logic.from9414 logic.from9414: br i1 %t39, label %logic.rhs9415, label %logic.end9416 logic.rhs9415: %t40 = load i64, ptr %a20 %t41 = add i64 %t40, 1 %t42 = load { ptr, i64, i64 }, ptr %a6 %t43 = extractvalue { ptr, i64, i64 } %t42, 1 %t44 = icmp uge i64 %t41, %t43 br i1 %t44, label %range9417, label %inrange9418 range9417: call void @finch_panic_index(ptr @.str.6514, i64 119, i64 %t41, i64 %t43) unreachable inrange9418: %t45 = extractvalue { ptr, i64, i64 } %t42, 0 %t46 = getelementptr inbounds i8, ptr %t45, i64 %t41 %t47 = load i8, ptr %t46 %t48 = call i64 @finch.lsp.hexval(i8 %t47) %t49 = icmp sge i64 %t48, 0 br label %logic.rend9419 logic.rend9419: br label %logic.end9416 logic.end9416: %t50 = phi i1 [ false, %logic.from9414 ], [ %t49, %logic.rend9419 ] br label %logic.from9420 logic.from9420: br i1 %t50, label %logic.rhs9421, label %logic.end9422 logic.rhs9421: %t51 = load i64, ptr %a20 %t52 = add i64 %t51, 2 %t53 = load { ptr, i64, i64 }, ptr %a6 %t54 = extractvalue { ptr, i64, i64 } %t53, 1 %t55 = icmp uge i64 %t52, %t54 br i1 %t55, label %range9423, label %inrange9424 range9423: call void @finch_panic_index(ptr @.str.6515, i64 119, i64 %t52, i64 %t54) unreachable inrange9424: %t56 = extractvalue { ptr, i64, i64 } %t53, 0 %t57 = getelementptr inbounds i8, ptr %t56, i64 %t52 %t58 = load i8, ptr %t57 %t59 = call i64 @finch.lsp.hexval(i8 %t58) %t60 = icmp sge i64 %t59, 0 br label %logic.rend9425 logic.rend9425: br label %logic.end9422 logic.end9422: %t61 = phi i1 [ false, %logic.from9420 ], [ %t60, %logic.rend9425 ] br i1 %t61, label %then9426, label %else9427 then9426: %t62 = getelementptr inbounds { ptr, i64, i64 }, ptr %a19, i32 0, i32 1 %t63 = load i64, ptr %a20 %t64 = add i64 %t63, 1 %t65 = load { ptr, i64, i64 }, ptr %a6 %t66 = extractvalue { ptr, i64, i64 } %t65, 1 %t67 = icmp uge i64 %t64, %t66 br i1 %t67, label %range9429, label %inrange9430 range9429: call void @finch_panic_index(ptr @.str.6516, i64 120, i64 %t64, i64 %t66) unreachable inrange9430: %t68 = extractvalue { ptr, i64, i64 } %t65, 0 %t69 = getelementptr inbounds i8, ptr %t68, i64 %t64 %t70 = load i8, ptr %t69 %t71 = call i64 @finch.lsp.hexval(i8 %t70) %t72 = mul i64 %t71, 16 %t73 = load i64, ptr %a20 %t74 = add i64 %t73, 2 %t75 = load { ptr, i64, i64 }, ptr %a6 %t76 = extractvalue { ptr, i64, i64 } %t75, 1 %t77 = icmp uge i64 %t74, %t76 br i1 %t77, label %range9431, label %inrange9432 range9431: call void @finch_panic_index(ptr @.str.6517, i64 120, i64 %t74, i64 %t76) unreachable inrange9432: %t78 = extractvalue { ptr, i64, i64 } %t75, 0 %t79 = getelementptr inbounds i8, ptr %t78, i64 %t74 %t80 = load i8, ptr %t79 %t81 = call i64 @finch.lsp.hexval(i8 %t80) %t82 = add i64 %t72, %t81 %t83 = trunc i64 %t82 to i8 %t84 = load i64, ptr %t62 %t85 = add i64 %t84, 1 call void @finch_arr_reserve(ptr %a19, i64 %t85, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) %t86 = load ptr, ptr %a19 %t87 = getelementptr inbounds i8, ptr %t86, i64 %t84 store i8 %t83, ptr %t87 store i64 %t85, ptr %t62 %t88 = load i64, ptr %a20 %t89 = add i64 %t88, 3 store i64 %t89, ptr %a20 br label %endif9428 else9427: %t90 = getelementptr inbounds { ptr, i64, i64 }, ptr %a19, i32 0, i32 1 %t91 = load i64, ptr %a20 %t92 = load { ptr, i64, i64 }, ptr %a6 %t93 = extractvalue { ptr, i64, i64 } %t92, 1 %t94 = icmp uge i64 %t91, %t93 br i1 %t94, label %range9433, label %inrange9434 range9433: call void @finch_panic_index(ptr @.str.6518, i64 123, i64 %t91, i64 %t93) unreachable inrange9434: %t95 = extractvalue { ptr, i64, i64 } %t92, 0 %t96 = getelementptr inbounds i8, ptr %t95, i64 %t91 %t97 = load i8, ptr %t96 %t98 = load i64, ptr %t90 %t99 = add i64 %t98, 1 call void @finch_arr_reserve(ptr %a19, i64 %t99, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) %t100 = load ptr, ptr %a19 %t101 = getelementptr inbounds i8, ptr %t100, i64 %t98 store i8 %t97, ptr %t101 store i64 %t99, ptr %t90 %t102 = load i64, ptr %a20 %t103 = add i64 %t102, 1 store i64 %t103, ptr %a20 br label %endif9428 endif9428: br label %while.cond9405 while.end9407: %t104 = load { ptr, i64, i64 }, ptr %a19 store { ptr, i64, i64 } zeroinitializer, ptr %a105 store { ptr, i64, i64 } %t104, ptr %a106 call void @finch_str_from_bytes(ptr %a105, ptr %a106) %t107 = load { ptr, i64, i64 }, ptr %a105 ret { ptr, i64, i64 } %t107 } define internal { ptr, i64, i64 } @finch.lsp.pathToUri({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca i64, align 16 %a18 = alloca i8, align 16 %a21 = alloca i64, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a80 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 store { ptr, i64, i64 } { ptr @.str.6519, i64 16, i64 0 }, ptr %a2 %t3 = mul i64 1, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t4 = call ptr @finch_alloc(i64 %t3) %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i64 0 store { ptr, i64, i64 } { ptr @.str.6520, i64 7, i64 0 }, ptr %t5 %t6 = insertvalue { ptr, i64, i64 } undef, ptr %t4, 0 %t7 = insertvalue { ptr, i64, i64 } %t6, i64 1, 1 %t8 = insertvalue { ptr, i64, i64 } %t7, i64 1, 2 store { ptr, i64, i64 } %t8, ptr %a9 store i64 0, ptr %a10 br label %each.cond9435 each.cond9435: %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t12 = load i64, ptr %t11 %t13 = load i64, ptr %a10 %t14 = icmp slt i64 %t13, %t12 br i1 %t14, label %each.body9436, label %each.end9438 each.body9436: %t15 = load ptr, ptr %a1 %t16 = getelementptr inbounds i8, ptr %t15, i64 %t13 %t17 = load i8, ptr %t16 store i8 %t17, ptr %a18 %t19 = load i8, ptr %a18 %t20 = zext i8 %t19 to i64 store i64 %t20, ptr %a21 %t22 = load i8, ptr %a18 %t23 = icmp uge i8 %t22, 97 br label %logic.from9439 logic.from9439: br i1 %t23, label %logic.rhs9440, label %logic.end9441 logic.rhs9440: %t24 = load i8, ptr %a18 %t25 = icmp ule i8 %t24, 122 br label %logic.rend9442 logic.rend9442: br label %logic.end9441 logic.end9441: %t26 = phi i1 [ false, %logic.from9439 ], [ %t25, %logic.rend9442 ] br label %logic.from9443 logic.from9443: br i1 %t26, label %logic.end9445, label %logic.rhs9444 logic.rhs9444: %t27 = load i8, ptr %a18 %t28 = icmp uge i8 %t27, 65 br label %logic.from9446 logic.from9446: br i1 %t28, label %logic.rhs9447, label %logic.end9448 logic.rhs9447: %t29 = load i8, ptr %a18 %t30 = icmp ule i8 %t29, 90 br label %logic.rend9449 logic.rend9449: br label %logic.end9448 logic.end9448: %t31 = phi i1 [ false, %logic.from9446 ], [ %t30, %logic.rend9449 ] br label %logic.rend9450 logic.rend9450: br label %logic.end9445 logic.end9445: %t32 = phi i1 [ true, %logic.from9443 ], [ %t31, %logic.rend9450 ] br label %logic.from9451 logic.from9451: br i1 %t32, label %logic.end9453, label %logic.rhs9452 logic.rhs9452: %t33 = load i8, ptr %a18 %t34 = icmp uge i8 %t33, 48 br label %logic.from9454 logic.from9454: br i1 %t34, label %logic.rhs9455, label %logic.end9456 logic.rhs9455: %t35 = load i8, ptr %a18 %t36 = icmp ule i8 %t35, 57 br label %logic.rend9457 logic.rend9457: br label %logic.end9456 logic.end9456: %t37 = phi i1 [ false, %logic.from9454 ], [ %t36, %logic.rend9457 ] br label %logic.rend9458 logic.rend9458: br label %logic.end9453 logic.end9453: %t38 = phi i1 [ true, %logic.from9451 ], [ %t37, %logic.rend9458 ] br label %logic.from9459 logic.from9459: br i1 %t38, label %logic.end9461, label %logic.rhs9460 logic.rhs9460: store { ptr, i64, i64 } { ptr @.str.6521, i64 5, i64 0 }, ptr %a39 %t41 = load i8, ptr %a18 call void @finch_str_from_char(ptr %a42, i8 signext %t41) %t43 = load { ptr, i64, i64 }, ptr %a42 store { ptr, i64, i64 } %t43, ptr %a44 %t45 = call i64 @finch_str_find(ptr %a39, ptr %a44) %t46 = icmp sge i64 %t45, 0 br label %logic.rend9462 logic.rend9462: br label %logic.end9461 logic.end9461: %t47 = phi i1 [ true, %logic.from9459 ], [ %t46, %logic.rend9462 ] br i1 %t47, label %then9463, label %else9464 then9463: %t48 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1 %t49 = load i8, ptr %a18 call void @finch_str_from_char(ptr %a50, i8 signext %t49) %t51 = load { ptr, i64, i64 }, ptr %a50 %t52 = load i64, ptr %t48 %t53 = add i64 %t52, 1 call void @finch_arr_reserve(ptr %a9, i64 %t53, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t54 = load ptr, ptr %a9 %t55 = getelementptr inbounds { ptr, i64, i64 }, ptr %t54, i64 %t52 store { ptr, i64, i64 } %t51, ptr %t55 store i64 %t53, ptr %t48 br label %endif9465 else9464: %t56 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1 %t57 = load i64, ptr %a21 %t58 = sdiv i64 %t57, 16 %t59 = srem i64 %t58, 16 %t60 = load { ptr, i64, i64 }, ptr %a2 %t61 = extractvalue { ptr, i64, i64 } %t60, 1 %t62 = icmp uge i64 %t59, %t61 br i1 %t62, label %range9466, label %inrange9467 range9466: call void @finch_panic_index(ptr @.str.6524, i64 138, i64 %t59, i64 %t61) unreachable inrange9467: %t63 = extractvalue { ptr, i64, i64 } %t60, 0 %t64 = getelementptr inbounds i8, ptr %t63, i64 %t59 %t65 = load i8, ptr %t64 call void @finch_str_from_char(ptr %a66, i8 signext %t65) %t67 = load { ptr, i64, i64 }, ptr %a66 store { ptr, i64, i64 } { ptr @.str.6523, i64 1, i64 0 }, ptr %a69 store { ptr, i64, i64 } %t67, ptr %a70 call void @finch_str_concat(ptr %a68, ptr %a69, ptr %a70) %t71 = load { ptr, i64, i64 }, ptr %a68 %t72 = load i64, ptr %a21 %t73 = srem i64 %t72, 16 %t74 = load { ptr, i64, i64 }, ptr %a2 %t75 = extractvalue { ptr, i64, i64 } %t74, 1 %t76 = icmp uge i64 %t73, %t75 br i1 %t76, label %range9468, label %inrange9469 range9468: call void @finch_panic_index(ptr @.str.6525, i64 138, i64 %t73, i64 %t75) unreachable inrange9469: %t77 = extractvalue { ptr, i64, i64 } %t74, 0 %t78 = getelementptr inbounds i8, ptr %t77, i64 %t73 %t79 = load i8, ptr %t78 call void @finch_str_from_char(ptr %a80, i8 signext %t79) %t81 = load { ptr, i64, i64 }, ptr %a80 store { ptr, i64, i64 } %t71, ptr %a83 store { ptr, i64, i64 } %t81, ptr %a84 call void @finch_str_concat(ptr %a82, ptr %a83, ptr %a84) %t85 = load { ptr, i64, i64 }, ptr %a82 %t86 = load i64, ptr %t56 %t87 = add i64 %t86, 1 call void @finch_arr_reserve(ptr %a9, i64 %t87, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t88 = load ptr, ptr %a9 %t89 = getelementptr inbounds { ptr, i64, i64 }, ptr %t88, i64 %t86 store { ptr, i64, i64 } %t85, ptr %t89 store i64 %t87, ptr %t56 br label %endif9465 endif9465: br label %each.step9437 each.step9437: %t90 = load i64, ptr %a10 %t91 = add i64 %t90, 1 store i64 %t91, ptr %a10 br label %each.cond9435 each.end9438: %t92 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.6526, i64 0, i64 0 }, ptr %a93 call void @finch_str_join(ptr %a94, ptr %a9, ptr %a93) %t95 = load { ptr, i64, i64 }, ptr %a94 ret { ptr, i64, i64 } %t95 } define internal { ptr, i64, i64 } @finch.lsp.unesc({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca i64, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 store { ptr, i64, i64 } zeroinitializer, ptr %a2 store i64 0, ptr %a3 br label %while.cond9470 while.cond9470: %t4 = load i64, ptr %a3 %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t6 = load i64, ptr %t5 %t7 = icmp slt i64 %t4, %t6 br i1 %t7, label %while.body9471, label %while.end9472 while.body9471: %t8 = load i64, ptr %a3 %t9 = load { ptr, i64, i64 }, ptr %a1 %t10 = extractvalue { ptr, i64, i64 } %t9, 1 %t11 = icmp uge i64 %t8, %t10 br i1 %t11, label %range9473, label %inrange9474 range9473: call void @finch_panic_index(ptr @.str.6527, i64 149, i64 %t8, i64 %t10) unreachable inrange9474: %t12 = extractvalue { ptr, i64, i64 } %t9, 0 %t13 = getelementptr inbounds i8, ptr %t12, i64 %t8 %t14 = load i8, ptr %t13 %t15 = icmp eq i8 %t14, 92 br label %logic.from9475 logic.from9475: br i1 %t15, label %logic.rhs9476, label %logic.end9477 logic.rhs9476: %t16 = load i64, ptr %a3 %t17 = add i64 %t16, 1 %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t19 = load i64, ptr %t18 %t20 = icmp slt i64 %t17, %t19 br label %logic.rend9478 logic.rend9478: br label %logic.end9477 logic.end9477: %t21 = phi i1 [ false, %logic.from9475 ], [ %t20, %logic.rend9478 ] br i1 %t21, label %then9479, label %else9480 then9479: %t22 = load i64, ptr %a3 %t23 = add i64 %t22, 1 %t24 = load { ptr, i64, i64 }, ptr %a1 %t25 = extractvalue { ptr, i64, i64 } %t24, 1 %t26 = icmp uge i64 %t23, %t25 br i1 %t26, label %range9482, label %inrange9483 range9482: call void @finch_panic_index(ptr @.str.6528, i64 150, i64 %t23, i64 %t25) unreachable inrange9483: %t27 = extractvalue { ptr, i64, i64 } %t24, 0 %t28 = getelementptr inbounds i8, ptr %t27, i64 %t23 %t29 = load i8, ptr %t28 %t30 = icmp eq i8 %t29, 110 br i1 %t30, label %then9484, label %else9485 then9484: %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t32 = load i64, ptr %t31 %t33 = add i64 %t32, 1 call void @finch_arr_reserve(ptr %a2, i64 %t33, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t34 = load ptr, ptr %a2 %t35 = getelementptr inbounds { ptr, i64, i64 }, ptr %t34, i64 %t32 store { ptr, i64, i64 } { ptr @.str.6529, i64 1, i64 0 }, ptr %t35 store i64 %t33, ptr %t31 br label %endif9486 else9485: %t36 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t37 = load i64, ptr %a3 %t38 = add i64 %t37, 1 %t39 = load { ptr, i64, i64 }, ptr %a1 %t40 = extractvalue { ptr, i64, i64 } %t39, 1 %t41 = icmp uge i64 %t38, %t40 br i1 %t41, label %range9487, label %inrange9488 range9487: call void @finch_panic_index(ptr @.str.6530, i64 153, i64 %t38, i64 %t40) unreachable inrange9488: %t42 = extractvalue { ptr, i64, i64 } %t39, 0 %t43 = getelementptr inbounds i8, ptr %t42, i64 %t38 %t44 = load i8, ptr %t43 call void @finch_str_from_char(ptr %a45, i8 signext %t44) %t46 = load { ptr, i64, i64 }, ptr %a45 %t47 = load i64, ptr %t36 %t48 = add i64 %t47, 1 call void @finch_arr_reserve(ptr %a2, i64 %t48, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t49 = load ptr, ptr %a2 %t50 = getelementptr inbounds { ptr, i64, i64 }, ptr %t49, i64 %t47 store { ptr, i64, i64 } %t46, ptr %t50 store i64 %t48, ptr %t36 br label %endif9486 endif9486: %t51 = load i64, ptr %a3 %t52 = add i64 %t51, 2 store i64 %t52, ptr %a3 br label %endif9481 else9480: %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t54 = load i64, ptr %a3 %t55 = load { ptr, i64, i64 }, ptr %a1 %t56 = extractvalue { ptr, i64, i64 } %t55, 1 %t57 = icmp uge i64 %t54, %t56 br i1 %t57, label %range9489, label %inrange9490 range9489: call void @finch_panic_index(ptr @.str.6531, i64 157, i64 %t54, i64 %t56) unreachable inrange9490: %t58 = extractvalue { ptr, i64, i64 } %t55, 0 %t59 = getelementptr inbounds i8, ptr %t58, i64 %t54 %t60 = load i8, ptr %t59 call void @finch_str_from_char(ptr %a61, i8 signext %t60) %t62 = load { ptr, i64, i64 }, ptr %a61 %t63 = load i64, ptr %t53 %t64 = add i64 %t63, 1 call void @finch_arr_reserve(ptr %a2, i64 %t64, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t65 = load ptr, ptr %a2 %t66 = getelementptr inbounds { ptr, i64, i64 }, ptr %t65, i64 %t63 store { ptr, i64, i64 } %t62, ptr %t66 store i64 %t64, ptr %t53 %t67 = load i64, ptr %a3 %t68 = add i64 %t67, 1 store i64 %t68, ptr %a3 br label %endif9481 endif9481: br label %while.cond9470 while.end9472: %t69 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.6532, i64 0, i64 0 }, ptr %a70 call void @finch_str_join(ptr %a71, ptr %a2, ptr %a70) %t72 = load { ptr, i64, i64 }, ptr %a71 ret { ptr, i64, i64 } %t72 } define internal { ptr, i64, i64 } @finch.lsp.lineOf({ ptr, i64, i64 } %p0, i64 %p1) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a2 = alloca i64, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 store i64 %p1, ptr %a2 %t3 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t3, ptr %a4 store { ptr, i64, i64 } { ptr @.str.6534, i64 1, i64 0 }, ptr %a6 call void @finch_str_split(ptr %a7, ptr %a4, ptr %a6) %t8 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t8, ptr %a9 %t10 = load i64, ptr %a2 %t11 = icmp sge i64 %t10, 1 br label %logic.from9491 logic.from9491: br i1 %t11, label %logic.rhs9492, label %logic.end9493 logic.rhs9492: %t12 = load i64, ptr %a2 %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1 %t14 = load i64, ptr %t13 %t15 = icmp sle i64 %t12, %t14 br label %logic.rend9494 logic.rend9494: br label %logic.end9493 logic.end9493: %t16 = phi i1 [ false, %logic.from9491 ], [ %t15, %logic.rend9494 ] br i1 %t16, label %then9495, label %endif9497 then9495: %t17 = load i64, ptr %a2 %t18 = sub i64 %t17, 1 %t19 = load { ptr, i64, i64 }, ptr %a9 %t20 = extractvalue { ptr, i64, i64 } %t19, 1 %t21 = icmp uge i64 %t18, %t20 br i1 %t21, label %range9498, label %inrange9499 range9498: call void @finch_panic_index(ptr @.str.6535, i64 167, i64 %t18, i64 %t20) unreachable inrange9499: %t22 = extractvalue { ptr, i64, i64 } %t19, 0 %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t22, i64 %t18 %t24 = load { ptr, i64, i64 }, ptr %t23 store { ptr, i64, i64 } %t24, ptr %a25 call void @finch_str_copy(ptr %a26, ptr %a25) %t27 = load { ptr, i64, i64 }, ptr %a26 ret { ptr, i64, i64 } %t27 endif9497: ret { ptr, i64, i64 } { ptr @.str.6536, i64 0, i64 0 } } define internal { ptr, i64, i64 } @finch.lsp.readLine() { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca i32, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } zeroinitializer, ptr %a1 br label %while.cond9500 while.cond9500: br label %while.body9501 while.body9501: %t2 = call i32 @getchar() store i32 %t2, ptr %a3 %t4 = load i32, ptr %a3 %t5 = icmp slt i32 %t4, 0 br i1 %t5, label %then9503, label %endif9505 then9503: ret { ptr, i64, i64 } { ptr @.str.6537, i64 0, i64 0 } endif9505: %t6 = load i32, ptr %a3 %t7 = icmp eq i32 %t6, 10 br i1 %t7, label %then9506, label %endif9508 then9506: br label %while.end9502 endif9508: %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t9 = load i32, ptr %a3 %t10 = trunc i32 %t9 to i8 %t11 = load i64, ptr %t8 %t12 = add i64 %t11, 1 call void @finch_arr_reserve(ptr %a1, i64 %t12, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) %t13 = load ptr, ptr %a1 %t14 = getelementptr inbounds i8, ptr %t13, i64 %t11 store i8 %t10, ptr %t14 store i64 %t12, ptr %t8 br label %while.cond9500 while.end9502: %t15 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } zeroinitializer, ptr %a16 store { ptr, i64, i64 } %t15, ptr %a17 call void @finch_str_from_bytes(ptr %a16, ptr %a17) %t18 = load { ptr, i64, i64 }, ptr %a16 store { ptr, i64, i64 } %t18, ptr %a19 %t20 = load { ptr, i64, i64 }, ptr %a19 store { ptr, i64, i64 } %t20, ptr %a21 store { ptr, i64, i64 } { ptr @.str.6539, i64 1, i64 0 }, ptr %a23 %t24 = call i32 @finch_str_ends(ptr %a21, ptr %a23) %t25 = icmp ne i32 %t24, 0 br i1 %t25, label %then9509, label %endif9511 then9509: %t26 = load { ptr, i64, i64 }, ptr %a19 store { ptr, i64, i64 } %t26, ptr %a27 %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %a19, i32 0, i32 1 %t30 = load i64, ptr %t29 %t31 = sub i64 %t30, 1 call void @finch_str_sub(ptr %a28, ptr %a27, i64 0, i64 %t31, ptr @.str.6540, i64 188) %t32 = load { ptr, i64, i64 }, ptr %a28 store { ptr, i64, i64 } %t32, ptr %a19 br label %endif9511 endif9511: %t33 = load { ptr, i64, i64 }, ptr %a19 store { ptr, i64, i64 } %t33, ptr %a34 call void @finch_str_copy(ptr %a35, ptr %a34) %t36 = load { ptr, i64, i64 }, ptr %a35 ret { ptr, i64, i64 } %t36 } define internal { i1, %S.json.Json, { ptr, i64, i64 } } @finch.lsp.readMessage() { entry: %a1 = alloca i64, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca i64, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca i64, align 16 %a43 = alloca i32, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 store i64 0, ptr %a1 br label %while.cond9512 while.cond9512: br label %while.body9513 while.body9513: %t2 = call { ptr, i64, i64 } @finch.lsp.readLine() store { ptr, i64, i64 } %t2, ptr %a3 %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 %t5 = load i64, ptr %t4 %t6 = icmp eq i64 %t5, 0 br i1 %t6, label %then9515, label %endif9517 then9515: %t7 = load i64, ptr %a1 %t8 = icmp sgt i64 %t7, 0 br i1 %t8, label %then9518, label %endif9520 then9518: br label %while.end9514 endif9520: %t9 = load ptr, ptr @stdin %t10 = call i32 @feof(ptr %t9) %t11 = icmp ne i32 %t10, 0 br i1 %t11, label %then9521, label %endif9523 then9521: %t12 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } { ptr @.str.6541, i64 32, i64 0 }, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t12 endif9523: br label %while.cond9512 endif9517: %t13 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t13, ptr %a14 store { ptr, i64, i64 } { ptr @.str.6543, i64 15, i64 0 }, ptr %a16 %t17 = call i32 @finch_str_starts(ptr %a14, ptr %a16) %t18 = icmp ne i32 %t17, 0 br i1 %t18, label %then9524, label %endif9526 then9524: %t19 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t19, ptr %a20 %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 %t23 = load i64, ptr %t22 call void @finch_str_sub(ptr %a21, ptr %a20, i64 15, i64 %t23, ptr @.str.6544, i64 208) %t24 = load { ptr, i64, i64 }, ptr %a21 store { ptr, i64, i64 } %t24, ptr %a25 call void @finch_str_trim(ptr %a26, ptr %a25) %t27 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } zeroinitializer, ptr %a28 store i64 0, ptr %a29 store { ptr, i64, i64 } %t27, ptr %a30 %t31 = call i32 @finch_str_try_int(ptr %a30, ptr %a29, ptr %a28) %t32 = icmp eq i32 %t31, 0 %t33 = load { ptr, i64, i64 }, ptr %a28 %t34 = load i64, ptr %a29 br i1 %t32, label %or.failed9527, label %or.ok9528 or.failed9527: store { ptr, i64, i64 } %t33, ptr %a35 br label %or.bend9529 or.bend9529: br label %or.end9530 or.ok9528: br label %or.end9530 or.end9530: %t36 = phi i64 [ 0, %or.bend9529 ], [ %t34, %or.ok9528 ] store i64 %t36, ptr %a1 br label %endif9526 endif9526: br label %while.cond9512 while.end9514: store { ptr, i64, i64 } zeroinitializer, ptr %a37 %t38 = load i64, ptr %a1 store i64 0, ptr %a39 br label %for.cond9531 for.cond9531: %t40 = load i64, ptr %a39 %t41 = icmp slt i64 %t40, %t38 br i1 %t41, label %for.body9532, label %for.end9534 for.body9532: %t42 = call i32 @getchar() store i32 %t42, ptr %a43 %t44 = load i32, ptr %a43 %t45 = icmp slt i32 %t44, 0 br i1 %t45, label %then9535, label %endif9537 then9535: %t46 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } { ptr @.str.6546, i64 25, i64 0 }, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t46 endif9537: %t47 = getelementptr inbounds { ptr, i64, i64 }, ptr %a37, i32 0, i32 1 %t48 = load i32, ptr %a43 %t49 = trunc i32 %t48 to i8 %t50 = load i64, ptr %t47 %t51 = add i64 %t50, 1 call void @finch_arr_reserve(ptr %a37, i64 %t51, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) %t52 = load ptr, ptr %a37 %t53 = getelementptr inbounds i8, ptr %t52, i64 %t50 store i8 %t49, ptr %t53 store i64 %t51, ptr %t47 br label %for.step9533 for.step9533: %t54 = load i64, ptr %a39 %t55 = add i64 %t54, 1 store i64 %t55, ptr %a39 br label %for.cond9531 for.end9534: %t56 = load { ptr, i64, i64 }, ptr %a37 store { ptr, i64, i64 } zeroinitializer, ptr %a57 store { ptr, i64, i64 } %t56, ptr %a58 call void @finch_str_from_bytes(ptr %a57, ptr %a58) %t59 = load { ptr, i64, i64 }, ptr %a57 %t60 = call { i1, %S.json.Json, { ptr, i64, i64 } } @finch.json.parse({ ptr, i64, i64 } %t59) %t61 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t60, 0 %t62 = xor i1 %t61, true %t63 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t60, 2 %t64 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t60, 1 br i1 %t62, label %try.failed9538, label %try.ok9539 try.failed9538: %t65 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t63, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t65 try.ok9539: %t66 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 %t67 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t66, %S.json.Json %t64, 1 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t67 } define internal void @finch.lsp.send(%S.json.Json %p0) { entry: %a1 = alloca %S.json.Json, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 store %S.json.Json %p0, ptr %a1 %t2 = load %S.json.Json, ptr %a1 %t3 = call { ptr, i64, i64 } @finch.json.stringify(%S.json.Json %t2) store { ptr, i64, i64 } %t3, ptr %a4 %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 %t6 = load i64, ptr %t5 call void @finch_str_from_int(ptr %a7, i64 %t6) %t8 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } { ptr @.str.6547, i64 16, i64 0 }, ptr %a10 store { ptr, i64, i64 } %t8, ptr %a11 call void @finch_str_concat(ptr %a9, ptr %a10, ptr %a11) %t12 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t12, ptr %a14 store { ptr, i64, i64 } { ptr @.str.6548, i64 4, i64 0 }, ptr %a15 call void @finch_str_concat(ptr %a13, ptr %a14, ptr %a15) %t16 = load { ptr, i64, i64 }, ptr %a13 store { ptr, i64, i64 } %t16, ptr %a17 %t18 = load { ptr, i64, i64 }, ptr %a17 %t19 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t18, ptr %a21 store { ptr, i64, i64 } %t19, ptr %a22 call void @finch_str_concat(ptr %a20, ptr %a21, ptr %a22) %t23 = load { ptr, i64, i64 }, ptr %a20 store { ptr, i64, i64 } %t23, ptr %a24 %t25 = load { ptr, i64, i64 }, ptr %a24 %t26 = extractvalue { ptr, i64, i64 } %t25, 0 %t27 = icmp eq ptr %t26, null %t28 = select i1 %t27, ptr @.str.6549, ptr %t26 %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %a24, i32 0, i32 1 %t30 = load i64, ptr %t29 %t31 = load ptr, ptr @stdout %t32 = call i64 @fwrite(ptr %t28, i64 1, i64 %t30, ptr %t31) %t33 = load ptr, ptr @stdout %t34 = call i32 @fflush(ptr %t33) ret void } define internal void @finch.lsp.reply(%S.json.Json %p0, %S.json.Json %p1) { entry: %a1 = alloca %S.json.Json, align 16 %a2 = alloca %S.json.Json, align 16 %a4 = alloca %S.json.Json, align 16 store %S.json.Json %p0, ptr %a1 store %S.json.Json %p1, ptr %a2 %t3 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t3, ptr %a4 %t5 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.6551, i64 3, i64 0 }) call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.6550, i64 7, i64 0 }, %S.json.Json %t5) %t6 = load %S.json.Json, ptr %a1 call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.6552, i64 2, i64 0 }, %S.json.Json %t6) %t7 = load %S.json.Json, ptr %a2 call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.6553, i64 6, i64 0 }, %S.json.Json %t7) %t8 = load %S.json.Json, ptr %a4 call void @finch.lsp.send(%S.json.Json %t8) ret void } define internal void @finch.lsp.notify({ ptr, i64, i64 } %p0, %S.json.Json %p1) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a2 = alloca %S.json.Json, align 16 %a4 = alloca %S.json.Json, align 16 store { ptr, i64, i64 } %p0, ptr %a1 store %S.json.Json %p1, ptr %a2 %t3 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t3, ptr %a4 %t5 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.6555, i64 3, i64 0 }) call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.6554, i64 7, i64 0 }, %S.json.Json %t5) %t6 = load { ptr, i64, i64 }, ptr %a1 %t7 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t6) call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.6556, i64 6, i64 0 }, %S.json.Json %t7) %t8 = load %S.json.Json, ptr %a2 call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.6557, i64 6, i64 0 }, %S.json.Json %t8) %t9 = load %S.json.Json, ptr %a4 call void @finch.lsp.send(%S.json.Json %t9) ret void } define internal %S.json.Json @finch.lsp.num(i64 %p0) { entry: %a1 = alloca i64, align 16 store i64 %p0, ptr %a1 %t2 = load i64, ptr %a1 %t3 = sitofp i64 %t2 to double %t4 = call %S.json.Json @finch.json.new_number(double %t3) ret %S.json.Json %t4 } define internal void @finch.copy.arr_S_json_Json(ptr %dst, ptr %src) { entry: %a5 = alloca i64, align 16 call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.json.Json, ptr null, i32 1) to i64)) %t1 = load ptr, ptr %dst %t2 = load ptr, ptr %src %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 %t4 = load i64, ptr %t3 store i64 0, ptr %a5 br label %n.cond9540 n.cond9540: %t6 = load i64, ptr %a5 %t7 = icmp slt i64 %t6, %t4 br i1 %t7, label %n.body9541, label %n.end9542 n.body9541: %t8 = getelementptr inbounds %S.json.Json, ptr %t1, i64 %t6 %t9 = getelementptr inbounds %S.json.Json, ptr %t2, i64 %t6 call void @finch.copy.S_json_Json(ptr %t8, ptr %t9) %t10 = load i64, ptr %a5 %t11 = add i64 %t10, 1 store i64 %t11, ptr %a5 br label %n.cond9540 n.end9542: ret void } define internal void @finch.copy.S_json_Json(ptr %dst, ptr %src) { entry: %t1 = load %S.json.Json, ptr %src store %S.json.Json %t1, ptr %dst %t2 = getelementptr inbounds %S.json.Json, ptr %dst, i32 0, i32 3 %t3 = getelementptr inbounds %S.json.Json, ptr %src, i32 0, i32 3 call void @finch_str_copy(ptr %t2, ptr %t3) %t4 = getelementptr inbounds %S.json.Json, ptr %dst, i32 0, i32 4 %t5 = getelementptr inbounds %S.json.Json, ptr %src, i32 0, i32 4 call void @finch.copy.arr_S_json_Json(ptr %t4, ptr %t5) %t6 = getelementptr inbounds %S.json.Json, ptr %dst, i32 0, i32 5 %t7 = getelementptr inbounds %S.json.Json, ptr %src, i32 0, i32 5 call void @finch.copy.arr_str(ptr %t6, ptr %t7) ret void } define internal %S.json.Json @finch.lsp.position(i64 %p0, i64 %p1) { entry: %a1 = alloca i64, align 16 %a2 = alloca i64, align 16 %a4 = alloca %S.json.Json, align 16 %a10 = alloca %S.json.Json, align 16 %a11 = alloca %S.json.Json, align 16 store i64 %p0, ptr %a1 store i64 %p1, ptr %a2 %t3 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t3, ptr %a4 %t5 = load i64, ptr %a1 %t6 = call %S.json.Json @finch.lsp.num(i64 %t5) call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.6558, i64 4, i64 0 }, %S.json.Json %t6) %t7 = load i64, ptr %a2 %t8 = call %S.json.Json @finch.lsp.num(i64 %t7) call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.6559, i64 9, i64 0 }, %S.json.Json %t8) %t9 = load %S.json.Json, ptr %a4 store %S.json.Json %t9, ptr %a10 call void @finch.copy.S_json_Json(ptr %a11, ptr %a10) %t12 = load %S.json.Json, ptr %a11 ret %S.json.Json %t12 } define internal %S.json.Json @finch.lsp.range(i64 %p0, i64 %p1, i64 %p2) { entry: %a1 = alloca i64, align 16 %a2 = alloca i64, align 16 %a3 = alloca i64, align 16 %a5 = alloca %S.json.Json, align 16 %a13 = alloca %S.json.Json, align 16 %a14 = alloca %S.json.Json, align 16 store i64 %p0, ptr %a1 store i64 %p1, ptr %a2 store i64 %p2, ptr %a3 %t4 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t4, ptr %a5 %t6 = load i64, ptr %a1 %t7 = load i64, ptr %a2 %t8 = call %S.json.Json @finch.lsp.position(i64 %t6, i64 %t7) call void @finch.json.Json.set(ptr %a5, { ptr, i64, i64 } { ptr @.str.6560, i64 5, i64 0 }, %S.json.Json %t8) %t9 = load i64, ptr %a1 %t10 = load i64, ptr %a3 %t11 = call %S.json.Json @finch.lsp.position(i64 %t9, i64 %t10) call void @finch.json.Json.set(ptr %a5, { ptr, i64, i64 } { ptr @.str.6561, i64 3, i64 0 }, %S.json.Json %t11) %t12 = load %S.json.Json, ptr %a5 store %S.json.Json %t12, ptr %a13 call void @finch.copy.S_json_Json(ptr %a14, ptr %a13) %t15 = load %S.json.Json, ptr %a14 ret %S.json.Json %t15 } define internal { ptr, i64, i64 } @finch.lsp.splitTabs({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t2, ptr %a3 store { ptr, i64, i64 } { ptr @.str.6563, i64 1, i64 0 }, ptr %a5 call void @finch_str_split(ptr %a6, ptr %a3, ptr %a5) %t7 = load { ptr, i64, i64 }, ptr %a6 ret { ptr, i64, i64 } %t7 } define internal i64 @finch.lsp.intOf({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca i64, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } zeroinitializer, ptr %a3 store i64 0, ptr %a4 store { ptr, i64, i64 } %t2, ptr %a5 %t6 = call i32 @finch_str_try_int(ptr %a5, ptr %a4, ptr %a3) %t7 = icmp eq i32 %t6, 0 %t8 = load { ptr, i64, i64 }, ptr %a3 %t9 = load i64, ptr %a4 br i1 %t7, label %or.failed9543, label %or.ok9544 or.failed9543: store { ptr, i64, i64 } %t8, ptr %a10 br label %or.bend9545 or.bend9545: br label %or.end9546 or.ok9544: br label %or.end9546 or.end9546: %t11 = phi i64 [ 0, %or.bend9545 ], [ %t9, %or.ok9544 ] ret i64 %t11 } define internal %S.lsp.Diag @finch.lsp.parseDiag({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca i64, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca i64, align 16 %a56 = alloca i64, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca i64, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t2, ptr %a3 store { ptr, i64, i64 } { ptr @.str.6565, i64 9, i64 0 }, ptr %a5 %t6 = call i64 @finch_str_find(ptr %a3, ptr %a5) store i64 %t6, ptr %a7 %t8 = load i64, ptr %a7 %t9 = icmp slt i64 %t8, 0 br i1 %t9, label %then9547, label %endif9549 then9547: ret %S.lsp.Diag zeroinitializer endif9549: %t10 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t10, ptr %a11 %t13 = load i64, ptr %a7 call void @finch_str_sub(ptr %a12, ptr %a11, i64 0, i64 %t13, ptr @.str.6566, i64 280) %t14 = load { ptr, i64, i64 }, ptr %a12 store { ptr, i64, i64 } %t14, ptr %a15 %t16 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t16, ptr %a17 %t19 = load i64, ptr %a7 %t20 = add i64 %t19, 9 %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t22 = load i64, ptr %t21 call void @finch_str_sub(ptr %a18, ptr %a17, i64 %t20, i64 %t22, ptr @.str.6567, i64 281) %t23 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t23, ptr %a24 %t25 = load { ptr, i64, i64 }, ptr %a15 store { ptr, i64, i64 } %t25, ptr %a26 store { ptr, i64, i64 } { ptr @.str.6569, i64 1, i64 0 }, ptr %a28 call void @finch_str_split(ptr %a29, ptr %a26, ptr %a28) %t30 = load { ptr, i64, i64 }, ptr %a29 store { ptr, i64, i64 } %t30, ptr %a31 %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %a31, i32 0, i32 1 %t33 = load i64, ptr %t32 %t34 = icmp slt i64 %t33, 3 br i1 %t34, label %then9550, label %endif9552 then9550: ret %S.lsp.Diag zeroinitializer endif9552: %t35 = getelementptr inbounds { ptr, i64, i64 }, ptr %a31, i32 0, i32 1 %t36 = load i64, ptr %t35 %t37 = sub i64 %t36, 1 %t38 = load { ptr, i64, i64 }, ptr %a31 %t39 = extractvalue { ptr, i64, i64 } %t38, 1 %t40 = icmp uge i64 %t37, %t39 br i1 %t40, label %range9553, label %inrange9554 range9553: call void @finch_panic_index(ptr @.str.6570, i64 287, i64 %t37, i64 %t39) unreachable inrange9554: %t41 = extractvalue { ptr, i64, i64 } %t38, 0 %t42 = getelementptr inbounds { ptr, i64, i64 }, ptr %t41, i64 %t37 %t43 = load { ptr, i64, i64 }, ptr %t42 %t44 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t43) store i64 %t44, ptr %a45 %t46 = getelementptr inbounds { ptr, i64, i64 }, ptr %a31, i32 0, i32 1 %t47 = load i64, ptr %t46 %t48 = sub i64 %t47, 2 %t49 = load { ptr, i64, i64 }, ptr %a31 %t50 = extractvalue { ptr, i64, i64 } %t49, 1 %t51 = icmp uge i64 %t48, %t50 br i1 %t51, label %range9555, label %inrange9556 range9555: call void @finch_panic_index(ptr @.str.6571, i64 288, i64 %t48, i64 %t50) unreachable inrange9556: %t52 = extractvalue { ptr, i64, i64 } %t49, 0 %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %t52, i64 %t48 %t54 = load { ptr, i64, i64 }, ptr %t53 %t55 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t54) store i64 %t55, ptr %a56 store { ptr, i64, i64 } zeroinitializer, ptr %a57 %t58 = getelementptr inbounds { ptr, i64, i64 }, ptr %a31, i32 0, i32 1 %t59 = load i64, ptr %t58 %t60 = sub i64 %t59, 2 store i64 0, ptr %a61 br label %for.cond9557 for.cond9557: %t62 = load i64, ptr %a61 %t63 = icmp slt i64 %t62, %t60 br i1 %t63, label %for.body9558, label %for.end9560 for.body9558: %t64 = getelementptr inbounds { ptr, i64, i64 }, ptr %a57, i32 0, i32 1 %t65 = load i64, ptr %a61 %t66 = load { ptr, i64, i64 }, ptr %a31 %t67 = extractvalue { ptr, i64, i64 } %t66, 1 %t68 = icmp uge i64 %t65, %t67 br i1 %t68, label %range9561, label %inrange9562 range9561: call void @finch_panic_index(ptr @.str.6572, i64 291, i64 %t65, i64 %t67) unreachable inrange9562: %t69 = extractvalue { ptr, i64, i64 } %t66, 0 %t70 = getelementptr inbounds { ptr, i64, i64 }, ptr %t69, i64 %t65 %t71 = load { ptr, i64, i64 }, ptr %t70 store { ptr, i64, i64 } %t71, ptr %a72 call void @finch_str_copy(ptr %a73, ptr %a72) %t74 = load { ptr, i64, i64 }, ptr %a73 %t75 = load i64, ptr %t64 %t76 = add i64 %t75, 1 call void @finch_arr_reserve(ptr %a57, i64 %t76, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t77 = load ptr, ptr %a57 %t78 = getelementptr inbounds { ptr, i64, i64 }, ptr %t77, i64 %t75 store { ptr, i64, i64 } %t74, ptr %t78 store i64 %t76, ptr %t64 br label %for.step9559 for.step9559: %t79 = load i64, ptr %a61 %t80 = add i64 %t79, 1 store i64 %t80, ptr %a61 br label %for.cond9557 for.end9560: %t81 = insertvalue %S.lsp.Diag zeroinitializer, i1 true, 0 %t82 = getelementptr inbounds { ptr, i64, i64 }, ptr %a57, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.6573, i64 1, i64 0 }, ptr %a83 call void @finch_str_join(ptr %a84, ptr %a57, ptr %a83) %t85 = load { ptr, i64, i64 }, ptr %a84 %t86 = insertvalue %S.lsp.Diag %t81, { ptr, i64, i64 } %t85, 1 %t87 = load i64, ptr %a56 %t88 = insertvalue %S.lsp.Diag %t86, i64 %t87, 2 %t89 = load i64, ptr %a45 %t90 = insertvalue %S.lsp.Diag %t88, i64 %t89, 3 %t91 = load { ptr, i64, i64 }, ptr %a24 store { ptr, i64, i64 } %t91, ptr %a92 call void @finch_str_copy(ptr %a93, ptr %a92) %t94 = load { ptr, i64, i64 }, ptr %a93 %t95 = insertvalue %S.lsp.Diag %t90, { ptr, i64, i64 } %t94, 4 ret %S.lsp.Diag %t95 } define internal void @finch.copy.S_lsp_Ref(ptr %dst, ptr %src) { entry: %t1 = load %S.lsp.Ref, ptr %src store %S.lsp.Ref %t1, ptr %dst %t2 = getelementptr inbounds %S.lsp.Ref, ptr %dst, i32 0, i32 0 %t3 = getelementptr inbounds %S.lsp.Ref, ptr %src, i32 0, i32 0 call void @finch_str_copy(ptr %t2, ptr %t3) %t4 = getelementptr inbounds %S.lsp.Ref, ptr %dst, i32 0, i32 4 %t5 = getelementptr inbounds %S.lsp.Ref, ptr %src, i32 0, i32 4 call void @finch_str_copy(ptr %t4, ptr %t5) %t6 = getelementptr inbounds %S.lsp.Ref, ptr %dst, i32 0, i32 7 %t7 = getelementptr inbounds %S.lsp.Ref, ptr %src, i32 0, i32 7 call void @finch_str_copy(ptr %t6, ptr %t7) ret void } define internal void @finch.copy.arr_S_lsp_Ref(ptr %dst, ptr %src) { entry: %a5 = alloca i64, align 16 call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.lsp.Ref, ptr null, i32 1) to i64)) %t1 = load ptr, ptr %dst %t2 = load ptr, ptr %src %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 %t4 = load i64, ptr %t3 store i64 0, ptr %a5 br label %n.cond9710 n.cond9710: %t6 = load i64, ptr %a5 %t7 = icmp slt i64 %t6, %t4 br i1 %t7, label %n.body9711, label %n.end9712 n.body9711: %t8 = getelementptr inbounds %S.lsp.Ref, ptr %t1, i64 %t6 %t9 = getelementptr inbounds %S.lsp.Ref, ptr %t2, i64 %t6 call void @finch.copy.S_lsp_Ref(ptr %t8, ptr %t9) %t10 = load i64, ptr %a5 %t11 = add i64 %t10, 1 store i64 %t11, ptr %a5 br label %n.cond9710 n.end9712: ret void } define internal void @finch.copy.S_lsp_VarRec(ptr %dst, ptr %src) { entry: %t1 = load %S.lsp.VarRec, ptr %src store %S.lsp.VarRec %t1, ptr %dst %t2 = getelementptr inbounds %S.lsp.VarRec, ptr %dst, i32 0, i32 0 %t3 = getelementptr inbounds %S.lsp.VarRec, ptr %src, i32 0, i32 0 call void @finch_str_copy(ptr %t2, ptr %t3) %t4 = getelementptr inbounds %S.lsp.VarRec, ptr %dst, i32 0, i32 1 %t5 = getelementptr inbounds %S.lsp.VarRec, ptr %src, i32 0, i32 1 call void @finch_str_copy(ptr %t4, ptr %t5) %t6 = getelementptr inbounds %S.lsp.VarRec, ptr %dst, i32 0, i32 2 %t7 = getelementptr inbounds %S.lsp.VarRec, ptr %src, i32 0, i32 2 call void @finch_str_copy(ptr %t6, ptr %t7) %t8 = getelementptr inbounds %S.lsp.VarRec, ptr %dst, i32 0, i32 5 %t9 = getelementptr inbounds %S.lsp.VarRec, ptr %src, i32 0, i32 5 call void @finch_str_copy(ptr %t8, ptr %t9) ret void } define internal void @finch.copy.arr_S_lsp_VarRec(ptr %dst, ptr %src) { entry: %a5 = alloca i64, align 16 call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.lsp.VarRec, ptr null, i32 1) to i64)) %t1 = load ptr, ptr %dst %t2 = load ptr, ptr %src %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 %t4 = load i64, ptr %t3 store i64 0, ptr %a5 br label %n.cond9713 n.cond9713: %t6 = load i64, ptr %a5 %t7 = icmp slt i64 %t6, %t4 br i1 %t7, label %n.body9714, label %n.end9715 n.body9714: %t8 = getelementptr inbounds %S.lsp.VarRec, ptr %t1, i64 %t6 %t9 = getelementptr inbounds %S.lsp.VarRec, ptr %t2, i64 %t6 call void @finch.copy.S_lsp_VarRec(ptr %t8, ptr %t9) %t10 = load i64, ptr %a5 %t11 = add i64 %t10, 1 store i64 %t11, ptr %a5 br label %n.cond9713 n.end9715: ret void } define internal void @finch.copy.S_lsp_FnRec(ptr %dst, ptr %src) { entry: %t1 = load %S.lsp.FnRec, ptr %src store %S.lsp.FnRec %t1, ptr %dst %t2 = getelementptr inbounds %S.lsp.FnRec, ptr %dst, i32 0, i32 0 %t3 = getelementptr inbounds %S.lsp.FnRec, ptr %src, i32 0, i32 0 call void @finch_str_copy(ptr %t2, ptr %t3) %t4 = getelementptr inbounds %S.lsp.FnRec, ptr %dst, i32 0, i32 1 %t5 = getelementptr inbounds %S.lsp.FnRec, ptr %src, i32 0, i32 1 call void @finch_str_copy(ptr %t4, ptr %t5) %t6 = getelementptr inbounds %S.lsp.FnRec, ptr %dst, i32 0, i32 2 %t7 = getelementptr inbounds %S.lsp.FnRec, ptr %src, i32 0, i32 2 call void @finch_str_copy(ptr %t6, ptr %t7) %t8 = getelementptr inbounds %S.lsp.FnRec, ptr %dst, i32 0, i32 3 %t9 = getelementptr inbounds %S.lsp.FnRec, ptr %src, i32 0, i32 3 call void @finch_str_copy(ptr %t8, ptr %t9) %t10 = getelementptr inbounds %S.lsp.FnRec, ptr %dst, i32 0, i32 7 %t11 = getelementptr inbounds %S.lsp.FnRec, ptr %src, i32 0, i32 7 call void @finch_str_copy(ptr %t10, ptr %t11) %t12 = getelementptr inbounds %S.lsp.FnRec, ptr %dst, i32 0, i32 8 %t13 = getelementptr inbounds %S.lsp.FnRec, ptr %src, i32 0, i32 8 call void @finch.copy.arr_str(ptr %t12, ptr %t13) ret void } define internal void @finch.copy.arr_S_lsp_FnRec(ptr %dst, ptr %src) { entry: %a5 = alloca i64, align 16 call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.lsp.FnRec, ptr null, i32 1) to i64)) %t1 = load ptr, ptr %dst %t2 = load ptr, ptr %src %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 %t4 = load i64, ptr %t3 store i64 0, ptr %a5 br label %n.cond9716 n.cond9716: %t6 = load i64, ptr %a5 %t7 = icmp slt i64 %t6, %t4 br i1 %t7, label %n.body9717, label %n.end9718 n.body9717: %t8 = getelementptr inbounds %S.lsp.FnRec, ptr %t1, i64 %t6 %t9 = getelementptr inbounds %S.lsp.FnRec, ptr %t2, i64 %t6 call void @finch.copy.S_lsp_FnRec(ptr %t8, ptr %t9) %t10 = load i64, ptr %a5 %t11 = add i64 %t10, 1 store i64 %t11, ptr %a5 br label %n.cond9716 n.end9718: ret void } define internal void @finch.copy.S_lsp_StructRec(ptr %dst, ptr %src) { entry: %t1 = load %S.lsp.StructRec, ptr %src store %S.lsp.StructRec %t1, ptr %dst %t2 = getelementptr inbounds %S.lsp.StructRec, ptr %dst, i32 0, i32 0 %t3 = getelementptr inbounds %S.lsp.StructRec, ptr %src, i32 0, i32 0 call void @finch_str_copy(ptr %t2, ptr %t3) %t4 = getelementptr inbounds %S.lsp.StructRec, ptr %dst, i32 0, i32 1 %t5 = getelementptr inbounds %S.lsp.StructRec, ptr %src, i32 0, i32 1 call void @finch_str_copy(ptr %t4, ptr %t5) %t6 = getelementptr inbounds %S.lsp.StructRec, ptr %dst, i32 0, i32 2 %t7 = getelementptr inbounds %S.lsp.StructRec, ptr %src, i32 0, i32 2 call void @finch_str_copy(ptr %t6, ptr %t7) %t8 = getelementptr inbounds %S.lsp.StructRec, ptr %dst, i32 0, i32 5 %t9 = getelementptr inbounds %S.lsp.StructRec, ptr %src, i32 0, i32 5 call void @finch.copy.arr_str(ptr %t8, ptr %t9) %t10 = getelementptr inbounds %S.lsp.StructRec, ptr %dst, i32 0, i32 6 %t11 = getelementptr inbounds %S.lsp.StructRec, ptr %src, i32 0, i32 6 call void @finch.copy.arr_str(ptr %t10, ptr %t11) ret void } define internal void @finch.copy.arr_S_lsp_StructRec(ptr %dst, ptr %src) { entry: %a5 = alloca i64, align 16 call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.lsp.StructRec, ptr null, i32 1) to i64)) %t1 = load ptr, ptr %dst %t2 = load ptr, ptr %src %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 %t4 = load i64, ptr %t3 store i64 0, ptr %a5 br label %n.cond9719 n.cond9719: %t6 = load i64, ptr %a5 %t7 = icmp slt i64 %t6, %t4 br i1 %t7, label %n.body9720, label %n.end9721 n.body9720: %t8 = getelementptr inbounds %S.lsp.StructRec, ptr %t1, i64 %t6 %t9 = getelementptr inbounds %S.lsp.StructRec, ptr %t2, i64 %t6 call void @finch.copy.S_lsp_StructRec(ptr %t8, ptr %t9) %t10 = load i64, ptr %a5 %t11 = add i64 %t10, 1 store i64 %t11, ptr %a5 br label %n.cond9719 n.end9721: ret void } define internal void @finch.copy.S_lsp_EnumRec(ptr %dst, ptr %src) { entry: %t1 = load %S.lsp.EnumRec, ptr %src store %S.lsp.EnumRec %t1, ptr %dst %t2 = getelementptr inbounds %S.lsp.EnumRec, ptr %dst, i32 0, i32 0 %t3 = getelementptr inbounds %S.lsp.EnumRec, ptr %src, i32 0, i32 0 call void @finch_str_copy(ptr %t2, ptr %t3) %t4 = getelementptr inbounds %S.lsp.EnumRec, ptr %dst, i32 0, i32 1 %t5 = getelementptr inbounds %S.lsp.EnumRec, ptr %src, i32 0, i32 1 call void @finch_str_copy(ptr %t4, ptr %t5) %t6 = getelementptr inbounds %S.lsp.EnumRec, ptr %dst, i32 0, i32 2 %t7 = getelementptr inbounds %S.lsp.EnumRec, ptr %src, i32 0, i32 2 call void @finch_str_copy(ptr %t6, ptr %t7) %t8 = getelementptr inbounds %S.lsp.EnumRec, ptr %dst, i32 0, i32 5 %t9 = getelementptr inbounds %S.lsp.EnumRec, ptr %src, i32 0, i32 5 call void @finch.copy.arr_str(ptr %t8, ptr %t9) ret void } define internal void @finch.copy.arr_S_lsp_EnumRec(ptr %dst, ptr %src) { entry: %a5 = alloca i64, align 16 call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.lsp.EnumRec, ptr null, i32 1) to i64)) %t1 = load ptr, ptr %dst %t2 = load ptr, ptr %src %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 %t4 = load i64, ptr %t3 store i64 0, ptr %a5 br label %n.cond9722 n.cond9722: %t6 = load i64, ptr %a5 %t7 = icmp slt i64 %t6, %t4 br i1 %t7, label %n.body9723, label %n.end9724 n.body9723: %t8 = getelementptr inbounds %S.lsp.EnumRec, ptr %t1, i64 %t6 %t9 = getelementptr inbounds %S.lsp.EnumRec, ptr %t2, i64 %t6 call void @finch.copy.S_lsp_EnumRec(ptr %t8, ptr %t9) %t10 = load i64, ptr %a5 %t11 = add i64 %t10, 1 store i64 %t11, ptr %a5 br label %n.cond9722 n.end9724: ret void } define internal void @finch.copy.S_lsp_Diag(ptr %dst, ptr %src) { entry: %t1 = load %S.lsp.Diag, ptr %src store %S.lsp.Diag %t1, ptr %dst %t2 = getelementptr inbounds %S.lsp.Diag, ptr %dst, i32 0, i32 1 %t3 = getelementptr inbounds %S.lsp.Diag, ptr %src, i32 0, i32 1 call void @finch_str_copy(ptr %t2, ptr %t3) %t4 = getelementptr inbounds %S.lsp.Diag, ptr %dst, i32 0, i32 4 %t5 = getelementptr inbounds %S.lsp.Diag, ptr %src, i32 0, i32 4 call void @finch_str_copy(ptr %t4, ptr %t5) ret void } define internal void @finch.copy.S_lsp_Analysis(ptr %dst, ptr %src) { entry: %t1 = load %S.lsp.Analysis, ptr %src store %S.lsp.Analysis %t1, ptr %dst %t2 = getelementptr inbounds %S.lsp.Analysis, ptr %dst, i32 0, i32 0 %t3 = getelementptr inbounds %S.lsp.Analysis, ptr %src, i32 0, i32 0 call void @finch.copy.arr_S_lsp_Ref(ptr %t2, ptr %t3) %t4 = getelementptr inbounds %S.lsp.Analysis, ptr %dst, i32 0, i32 1 %t5 = getelementptr inbounds %S.lsp.Analysis, ptr %src, i32 0, i32 1 call void @finch.copy.arr_S_lsp_VarRec(ptr %t4, ptr %t5) %t6 = getelementptr inbounds %S.lsp.Analysis, ptr %dst, i32 0, i32 2 %t7 = getelementptr inbounds %S.lsp.Analysis, ptr %src, i32 0, i32 2 call void @finch.copy.arr_S_lsp_FnRec(ptr %t6, ptr %t7) %t8 = getelementptr inbounds %S.lsp.Analysis, ptr %dst, i32 0, i32 3 %t9 = getelementptr inbounds %S.lsp.Analysis, ptr %src, i32 0, i32 3 call void @finch.copy.arr_S_lsp_StructRec(ptr %t8, ptr %t9) %t10 = getelementptr inbounds %S.lsp.Analysis, ptr %dst, i32 0, i32 4 %t11 = getelementptr inbounds %S.lsp.Analysis, ptr %src, i32 0, i32 4 call void @finch.copy.arr_S_lsp_EnumRec(ptr %t10, ptr %t11) %t12 = getelementptr inbounds %S.lsp.Analysis, ptr %dst, i32 0, i32 5 %t13 = getelementptr inbounds %S.lsp.Analysis, ptr %src, i32 0, i32 5 call void @finch.copy.arr_str(ptr %t12, ptr %t13) %t14 = getelementptr inbounds %S.lsp.Analysis, ptr %dst, i32 0, i32 6 %t15 = getelementptr inbounds %S.lsp.Analysis, ptr %src, i32 0, i32 6 call void @finch.copy.S_lsp_Diag(ptr %t14, ptr %t15) ret void } define internal %S.lsp.Analysis @finch.lsp.parseOutput({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a2 = alloca %S.lsp.Analysis, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca i64, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a122 = alloca { ptr, i64, i64 }, align 16 %a123 = alloca { ptr, i64, i64 }, align 16 %a138 = alloca { ptr, i64, i64 }, align 16 %a139 = alloca { ptr, i64, i64 }, align 16 %a148 = alloca { ptr, i64, i64 }, align 16 %a149 = alloca { ptr, i64, i64 }, align 16 %a158 = alloca { ptr, i64, i64 }, align 16 %a159 = alloca { ptr, i64, i64 }, align 16 %a184 = alloca { ptr, i64, i64 }, align 16 %a185 = alloca { ptr, i64, i64 }, align 16 %a209 = alloca { ptr, i64, i64 }, align 16 %a210 = alloca { ptr, i64, i64 }, align 16 %a225 = alloca { ptr, i64, i64 }, align 16 %a226 = alloca { ptr, i64, i64 }, align 16 %a235 = alloca { ptr, i64, i64 }, align 16 %a236 = alloca { ptr, i64, i64 }, align 16 %a245 = alloca { ptr, i64, i64 }, align 16 %a246 = alloca { ptr, i64, i64 }, align 16 %a255 = alloca { ptr, i64, i64 }, align 16 %a256 = alloca { ptr, i64, i64 }, align 16 %a297 = alloca { ptr, i64, i64 }, align 16 %a298 = alloca { ptr, i64, i64 }, align 16 %a299 = alloca { ptr, i64, i64 }, align 16 %a300 = alloca { ptr, i64, i64 }, align 16 %a308 = alloca { ptr, i64, i64 }, align 16 %a309 = alloca { ptr, i64, i64 }, align 16 %a324 = alloca { ptr, i64, i64 }, align 16 %a325 = alloca { ptr, i64, i64 }, align 16 %a334 = alloca { ptr, i64, i64 }, align 16 %a335 = alloca { ptr, i64, i64 }, align 16 %a344 = alloca { ptr, i64, i64 }, align 16 %a345 = alloca { ptr, i64, i64 }, align 16 %a369 = alloca { ptr, i64, i64 }, align 16 %a370 = alloca { ptr, i64, i64 }, align 16 %a386 = alloca i64, align 16 %a402 = alloca { ptr, i64, i64 }, align 16 %a403 = alloca { ptr, i64, i64 }, align 16 %a424 = alloca { ptr, i64, i64 }, align 16 %a425 = alloca { ptr, i64, i64 }, align 16 %a432 = alloca { ptr, i64, i64 }, align 16 %a433 = alloca { ptr, i64, i64 }, align 16 %a448 = alloca { ptr, i64, i64 }, align 16 %a449 = alloca { ptr, i64, i64 }, align 16 %a458 = alloca { ptr, i64, i64 }, align 16 %a459 = alloca { ptr, i64, i64 }, align 16 %a468 = alloca { ptr, i64, i64 }, align 16 %a469 = alloca { ptr, i64, i64 }, align 16 %a494 = alloca { ptr, i64, i64 }, align 16 %a495 = alloca { ptr, i64, i64 }, align 16 %a496 = alloca { ptr, i64, i64 }, align 16 %a497 = alloca { ptr, i64, i64 }, align 16 %a505 = alloca { ptr, i64, i64 }, align 16 %a506 = alloca { ptr, i64, i64 }, align 16 %a521 = alloca { ptr, i64, i64 }, align 16 %a522 = alloca { ptr, i64, i64 }, align 16 %a538 = alloca %S.lsp.Analysis, align 16 %a539 = alloca %S.lsp.Analysis, align 16 store { ptr, i64, i64 } %p0, ptr %a1 store %S.lsp.Analysis zeroinitializer, ptr %a2 %t3 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t3, ptr %a4 store { ptr, i64, i64 } { ptr @.str.6575, i64 1, i64 0 }, ptr %a6 call void @finch_str_split(ptr %a7, ptr %a4, ptr %a6) %t8 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t8, ptr %a9 store i64 0, ptr %a10 br label %each.cond9563 each.cond9563: %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1 %t12 = load i64, ptr %t11 %t13 = load i64, ptr %a10 %t14 = icmp slt i64 %t13, %t12 br i1 %t14, label %each.body9564, label %each.end9566 each.body9564: %t15 = load ptr, ptr %a9 %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t15, i64 %t13 %t17 = load { ptr, i64, i64 }, ptr %t16 store { ptr, i64, i64 } %t17, ptr %a18 %t19 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t19, ptr %a20 store { ptr, i64, i64 } { ptr @.str.6577, i64 1, i64 0 }, ptr %a22 %t23 = call i32 @finch_str_starts(ptr %a20, ptr %a22) %t24 = icmp ne i32 %t23, 0 br i1 %t24, label %then9567, label %else9568 then9567: %t25 = load { ptr, i64, i64 }, ptr %a18 %t26 = call { ptr, i64, i64 } @finch.lsp.splitTabs({ ptr, i64, i64 } %t25) store { ptr, i64, i64 } %t26, ptr %a27 %t28 = load { ptr, i64, i64 }, ptr %a27 %t29 = extractvalue { ptr, i64, i64 } %t28, 1 %t30 = icmp uge i64 0, %t29 br i1 %t30, label %range9570, label %inrange9571 range9570: call void @finch_panic_index(ptr @.str.6578, i64 301, i64 0, i64 %t29) unreachable inrange9571: %t31 = extractvalue { ptr, i64, i64 } %t28, 0 %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %t31, i64 0 %t33 = load { ptr, i64, i64 }, ptr %t32 store { ptr, i64, i64 } %t33, ptr %a34 call void @finch_str_copy(ptr %a35, ptr %a34) %t36 = load { ptr, i64, i64 }, ptr %a35 store { ptr, i64, i64 } %t36, ptr %a37 %t38 = load { ptr, i64, i64 }, ptr %a37 store { ptr, i64, i64 } %t38, ptr %a39 store { ptr, i64, i64 } { ptr @.str.6579, i64 2, i64 0 }, ptr %a40 %t41 = call i32 @finch_str_eq(ptr %a39, ptr %a40) %t42 = icmp ne i32 %t41, 0 br label %logic.from9572 logic.from9572: br i1 %t42, label %logic.rhs9573, label %logic.end9574 logic.rhs9573: %t43 = getelementptr inbounds { ptr, i64, i64 }, ptr %a27, i32 0, i32 1 %t44 = load i64, ptr %t43 %t45 = icmp sge i64 %t44, 9 br label %logic.rend9575 logic.rend9575: br label %logic.end9574 logic.end9574: %t46 = phi i1 [ false, %logic.from9572 ], [ %t45, %logic.rend9575 ] br i1 %t46, label %then9576, label %else9577 then9576: %t47 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 0 %t48 = getelementptr inbounds { ptr, i64, i64 }, ptr %t47, i32 0, i32 1 %t49 = load { ptr, i64, i64 }, ptr %a27 %t50 = extractvalue { ptr, i64, i64 } %t49, 1 %t51 = icmp uge i64 1, %t50 br i1 %t51, label %range9579, label %inrange9580 range9579: call void @finch_panic_index(ptr @.str.6580, i64 303, i64 1, i64 %t50) unreachable inrange9580: %t52 = extractvalue { ptr, i64, i64 } %t49, 0 %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %t52, i64 1 %t54 = load { ptr, i64, i64 }, ptr %t53 store { ptr, i64, i64 } %t54, ptr %a55 call void @finch_str_copy(ptr %a56, ptr %a55) %t57 = load { ptr, i64, i64 }, ptr %a56 %t58 = insertvalue %S.lsp.Ref zeroinitializer, { ptr, i64, i64 } %t57, 0 %t59 = load { ptr, i64, i64 }, ptr %a27 %t60 = extractvalue { ptr, i64, i64 } %t59, 1 %t61 = icmp uge i64 2, %t60 br i1 %t61, label %range9581, label %inrange9582 range9581: call void @finch_panic_index(ptr @.str.6581, i64 303, i64 2, i64 %t60) unreachable inrange9582: %t62 = extractvalue { ptr, i64, i64 } %t59, 0 %t63 = getelementptr inbounds { ptr, i64, i64 }, ptr %t62, i64 2 %t64 = load { ptr, i64, i64 }, ptr %t63 %t65 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t64) %t66 = insertvalue %S.lsp.Ref %t58, i64 %t65, 1 %t67 = load { ptr, i64, i64 }, ptr %a27 %t68 = extractvalue { ptr, i64, i64 } %t67, 1 %t69 = icmp uge i64 3, %t68 br i1 %t69, label %range9583, label %inrange9584 range9583: call void @finch_panic_index(ptr @.str.6582, i64 303, i64 3, i64 %t68) unreachable inrange9584: %t70 = extractvalue { ptr, i64, i64 } %t67, 0 %t71 = getelementptr inbounds { ptr, i64, i64 }, ptr %t70, i64 3 %t72 = load { ptr, i64, i64 }, ptr %t71 %t73 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t72) %t74 = insertvalue %S.lsp.Ref %t66, i64 %t73, 2 %t75 = load { ptr, i64, i64 }, ptr %a27 %t76 = extractvalue { ptr, i64, i64 } %t75, 1 %t77 = icmp uge i64 4, %t76 br i1 %t77, label %range9585, label %inrange9586 range9585: call void @finch_panic_index(ptr @.str.6583, i64 303, i64 4, i64 %t76) unreachable inrange9586: %t78 = extractvalue { ptr, i64, i64 } %t75, 0 %t79 = getelementptr inbounds { ptr, i64, i64 }, ptr %t78, i64 4 %t80 = load { ptr, i64, i64 }, ptr %t79 %t81 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t80) %t82 = insertvalue %S.lsp.Ref %t74, i64 %t81, 3 %t83 = load { ptr, i64, i64 }, ptr %a27 %t84 = extractvalue { ptr, i64, i64 } %t83, 1 %t85 = icmp uge i64 5, %t84 br i1 %t85, label %range9587, label %inrange9588 range9587: call void @finch_panic_index(ptr @.str.6584, i64 303, i64 5, i64 %t84) unreachable inrange9588: %t86 = extractvalue { ptr, i64, i64 } %t83, 0 %t87 = getelementptr inbounds { ptr, i64, i64 }, ptr %t86, i64 5 %t88 = load { ptr, i64, i64 }, ptr %t87 store { ptr, i64, i64 } %t88, ptr %a89 call void @finch_str_copy(ptr %a90, ptr %a89) %t91 = load { ptr, i64, i64 }, ptr %a90 %t92 = insertvalue %S.lsp.Ref %t82, { ptr, i64, i64 } %t91, 4 %t93 = load { ptr, i64, i64 }, ptr %a27 %t94 = extractvalue { ptr, i64, i64 } %t93, 1 %t95 = icmp uge i64 6, %t94 br i1 %t95, label %range9589, label %inrange9590 range9589: call void @finch_panic_index(ptr @.str.6585, i64 303, i64 6, i64 %t94) unreachable inrange9590: %t96 = extractvalue { ptr, i64, i64 } %t93, 0 %t97 = getelementptr inbounds { ptr, i64, i64 }, ptr %t96, i64 6 %t98 = load { ptr, i64, i64 }, ptr %t97 %t99 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t98) %t100 = insertvalue %S.lsp.Ref %t92, i64 %t99, 5 %t101 = load { ptr, i64, i64 }, ptr %a27 %t102 = extractvalue { ptr, i64, i64 } %t101, 1 %t103 = icmp uge i64 7, %t102 br i1 %t103, label %range9591, label %inrange9592 range9591: call void @finch_panic_index(ptr @.str.6586, i64 303, i64 7, i64 %t102) unreachable inrange9592: %t104 = extractvalue { ptr, i64, i64 } %t101, 0 %t105 = getelementptr inbounds { ptr, i64, i64 }, ptr %t104, i64 7 %t106 = load { ptr, i64, i64 }, ptr %t105 %t107 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t106) %t108 = insertvalue %S.lsp.Ref %t100, i64 %t107, 6 %t109 = load { ptr, i64, i64 }, ptr %a27 %t110 = extractvalue { ptr, i64, i64 } %t109, 1 %t111 = icmp uge i64 8, %t110 br i1 %t111, label %range9593, label %inrange9594 range9593: call void @finch_panic_index(ptr @.str.6587, i64 303, i64 8, i64 %t110) unreachable inrange9594: %t112 = extractvalue { ptr, i64, i64 } %t109, 0 %t113 = getelementptr inbounds { ptr, i64, i64 }, ptr %t112, i64 8 %t114 = load { ptr, i64, i64 }, ptr %t113 %t115 = call { ptr, i64, i64 } @finch.lsp.unesc({ ptr, i64, i64 } %t114) %t116 = insertvalue %S.lsp.Ref %t108, { ptr, i64, i64 } %t115, 7 %t117 = load i64, ptr %t48 %t118 = add i64 %t117, 1 call void @finch_arr_reserve(ptr %t47, i64 %t118, i64 ptrtoint (ptr getelementptr (%S.lsp.Ref, ptr null, i32 1) to i64)) %t119 = load ptr, ptr %t47 %t120 = getelementptr inbounds %S.lsp.Ref, ptr %t119, i64 %t117 store %S.lsp.Ref %t116, ptr %t120 store i64 %t118, ptr %t48 br label %endif9578 else9577: %t121 = load { ptr, i64, i64 }, ptr %a37 store { ptr, i64, i64 } %t121, ptr %a122 store { ptr, i64, i64 } { ptr @.str.6588, i64 2, i64 0 }, ptr %a123 %t124 = call i32 @finch_str_eq(ptr %a122, ptr %a123) %t125 = icmp ne i32 %t124, 0 br label %logic.from9595 logic.from9595: br i1 %t125, label %logic.rhs9596, label %logic.end9597 logic.rhs9596: %t126 = getelementptr inbounds { ptr, i64, i64 }, ptr %a27, i32 0, i32 1 %t127 = load i64, ptr %t126 %t128 = icmp sge i64 %t127, 9 br label %logic.rend9598 logic.rend9598: br label %logic.end9597 logic.end9597: %t129 = phi i1 [ false, %logic.from9595 ], [ %t128, %logic.rend9598 ] br i1 %t129, label %then9599, label %else9600 then9599: %t130 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 1 %t131 = getelementptr inbounds { ptr, i64, i64 }, ptr %t130, i32 0, i32 1 %t132 = load { ptr, i64, i64 }, ptr %a27 %t133 = extractvalue { ptr, i64, i64 } %t132, 1 %t134 = icmp uge i64 1, %t133 br i1 %t134, label %range9602, label %inrange9603 range9602: call void @finch_panic_index(ptr @.str.6589, i64 305, i64 1, i64 %t133) unreachable inrange9603: %t135 = extractvalue { ptr, i64, i64 } %t132, 0 %t136 = getelementptr inbounds { ptr, i64, i64 }, ptr %t135, i64 1 %t137 = load { ptr, i64, i64 }, ptr %t136 store { ptr, i64, i64 } %t137, ptr %a138 call void @finch_str_copy(ptr %a139, ptr %a138) %t140 = load { ptr, i64, i64 }, ptr %a139 %t141 = insertvalue %S.lsp.VarRec zeroinitializer, { ptr, i64, i64 } %t140, 0 %t142 = load { ptr, i64, i64 }, ptr %a27 %t143 = extractvalue { ptr, i64, i64 } %t142, 1 %t144 = icmp uge i64 2, %t143 br i1 %t144, label %range9604, label %inrange9605 range9604: call void @finch_panic_index(ptr @.str.6590, i64 305, i64 2, i64 %t143) unreachable inrange9605: %t145 = extractvalue { ptr, i64, i64 } %t142, 0 %t146 = getelementptr inbounds { ptr, i64, i64 }, ptr %t145, i64 2 %t147 = load { ptr, i64, i64 }, ptr %t146 store { ptr, i64, i64 } %t147, ptr %a148 call void @finch_str_copy(ptr %a149, ptr %a148) %t150 = load { ptr, i64, i64 }, ptr %a149 %t151 = insertvalue %S.lsp.VarRec %t141, { ptr, i64, i64 } %t150, 1 %t152 = load { ptr, i64, i64 }, ptr %a27 %t153 = extractvalue { ptr, i64, i64 } %t152, 1 %t154 = icmp uge i64 3, %t153 br i1 %t154, label %range9606, label %inrange9607 range9606: call void @finch_panic_index(ptr @.str.6591, i64 305, i64 3, i64 %t153) unreachable inrange9607: %t155 = extractvalue { ptr, i64, i64 } %t152, 0 %t156 = getelementptr inbounds { ptr, i64, i64 }, ptr %t155, i64 3 %t157 = load { ptr, i64, i64 }, ptr %t156 store { ptr, i64, i64 } %t157, ptr %a158 call void @finch_str_copy(ptr %a159, ptr %a158) %t160 = load { ptr, i64, i64 }, ptr %a159 %t161 = insertvalue %S.lsp.VarRec %t151, { ptr, i64, i64 } %t160, 2 %t162 = load { ptr, i64, i64 }, ptr %a27 %t163 = extractvalue { ptr, i64, i64 } %t162, 1 %t164 = icmp uge i64 4, %t163 br i1 %t164, label %range9608, label %inrange9609 range9608: call void @finch_panic_index(ptr @.str.6592, i64 305, i64 4, i64 %t163) unreachable inrange9609: %t165 = extractvalue { ptr, i64, i64 } %t162, 0 %t166 = getelementptr inbounds { ptr, i64, i64 }, ptr %t165, i64 4 %t167 = load { ptr, i64, i64 }, ptr %t166 %t168 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t167) %t169 = insertvalue %S.lsp.VarRec %t161, i64 %t168, 3 %t170 = load { ptr, i64, i64 }, ptr %a27 %t171 = extractvalue { ptr, i64, i64 } %t170, 1 %t172 = icmp uge i64 5, %t171 br i1 %t172, label %range9610, label %inrange9611 range9610: call void @finch_panic_index(ptr @.str.6593, i64 305, i64 5, i64 %t171) unreachable inrange9611: %t173 = extractvalue { ptr, i64, i64 } %t170, 0 %t174 = getelementptr inbounds { ptr, i64, i64 }, ptr %t173, i64 5 %t175 = load { ptr, i64, i64 }, ptr %t174 %t176 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t175) %t177 = insertvalue %S.lsp.VarRec %t169, i64 %t176, 4 %t178 = load { ptr, i64, i64 }, ptr %a27 %t179 = extractvalue { ptr, i64, i64 } %t178, 1 %t180 = icmp uge i64 6, %t179 br i1 %t180, label %range9612, label %inrange9613 range9612: call void @finch_panic_index(ptr @.str.6594, i64 305, i64 6, i64 %t179) unreachable inrange9613: %t181 = extractvalue { ptr, i64, i64 } %t178, 0 %t182 = getelementptr inbounds { ptr, i64, i64 }, ptr %t181, i64 6 %t183 = load { ptr, i64, i64 }, ptr %t182 store { ptr, i64, i64 } %t183, ptr %a184 call void @finch_str_copy(ptr %a185, ptr %a184) %t186 = load { ptr, i64, i64 }, ptr %a185 %t187 = insertvalue %S.lsp.VarRec %t177, { ptr, i64, i64 } %t186, 5 %t188 = load { ptr, i64, i64 }, ptr %a27 %t189 = extractvalue { ptr, i64, i64 } %t188, 1 %t190 = icmp uge i64 7, %t189 br i1 %t190, label %range9614, label %inrange9615 range9614: call void @finch_panic_index(ptr @.str.6595, i64 305, i64 7, i64 %t189) unreachable inrange9615: %t191 = extractvalue { ptr, i64, i64 } %t188, 0 %t192 = getelementptr inbounds { ptr, i64, i64 }, ptr %t191, i64 7 %t193 = load { ptr, i64, i64 }, ptr %t192 %t194 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t193) %t195 = insertvalue %S.lsp.VarRec %t187, i64 %t194, 6 %t196 = load { ptr, i64, i64 }, ptr %a27 %t197 = extractvalue { ptr, i64, i64 } %t196, 1 %t198 = icmp uge i64 8, %t197 br i1 %t198, label %range9616, label %inrange9617 range9616: call void @finch_panic_index(ptr @.str.6596, i64 305, i64 8, i64 %t197) unreachable inrange9617: %t199 = extractvalue { ptr, i64, i64 } %t196, 0 %t200 = getelementptr inbounds { ptr, i64, i64 }, ptr %t199, i64 8 %t201 = load { ptr, i64, i64 }, ptr %t200 %t202 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t201) %t203 = insertvalue %S.lsp.VarRec %t195, i64 %t202, 7 %t204 = load i64, ptr %t131 %t205 = add i64 %t204, 1 call void @finch_arr_reserve(ptr %t130, i64 %t205, i64 ptrtoint (ptr getelementptr (%S.lsp.VarRec, ptr null, i32 1) to i64)) %t206 = load ptr, ptr %t130 %t207 = getelementptr inbounds %S.lsp.VarRec, ptr %t206, i64 %t204 store %S.lsp.VarRec %t203, ptr %t207 store i64 %t205, ptr %t131 br label %endif9601 else9600: %t208 = load { ptr, i64, i64 }, ptr %a37 store { ptr, i64, i64 } %t208, ptr %a209 store { ptr, i64, i64 } { ptr @.str.6597, i64 2, i64 0 }, ptr %a210 %t211 = call i32 @finch_str_eq(ptr %a209, ptr %a210) %t212 = icmp ne i32 %t211, 0 br label %logic.from9618 logic.from9618: br i1 %t212, label %logic.rhs9619, label %logic.end9620 logic.rhs9619: %t213 = getelementptr inbounds { ptr, i64, i64 }, ptr %a27, i32 0, i32 1 %t214 = load i64, ptr %t213 %t215 = icmp sge i64 %t214, 10 br label %logic.rend9621 logic.rend9621: br label %logic.end9620 logic.end9620: %t216 = phi i1 [ false, %logic.from9618 ], [ %t215, %logic.rend9621 ] br i1 %t216, label %then9622, label %else9623 then9622: %t217 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 2 %t218 = getelementptr inbounds { ptr, i64, i64 }, ptr %t217, i32 0, i32 1 %t219 = load { ptr, i64, i64 }, ptr %a27 %t220 = extractvalue { ptr, i64, i64 } %t219, 1 %t221 = icmp uge i64 1, %t220 br i1 %t221, label %range9625, label %inrange9626 range9625: call void @finch_panic_index(ptr @.str.6598, i64 307, i64 1, i64 %t220) unreachable inrange9626: %t222 = extractvalue { ptr, i64, i64 } %t219, 0 %t223 = getelementptr inbounds { ptr, i64, i64 }, ptr %t222, i64 1 %t224 = load { ptr, i64, i64 }, ptr %t223 store { ptr, i64, i64 } %t224, ptr %a225 call void @finch_str_copy(ptr %a226, ptr %a225) %t227 = load { ptr, i64, i64 }, ptr %a226 %t228 = insertvalue %S.lsp.FnRec zeroinitializer, { ptr, i64, i64 } %t227, 0 %t229 = load { ptr, i64, i64 }, ptr %a27 %t230 = extractvalue { ptr, i64, i64 } %t229, 1 %t231 = icmp uge i64 2, %t230 br i1 %t231, label %range9627, label %inrange9628 range9627: call void @finch_panic_index(ptr @.str.6599, i64 307, i64 2, i64 %t230) unreachable inrange9628: %t232 = extractvalue { ptr, i64, i64 } %t229, 0 %t233 = getelementptr inbounds { ptr, i64, i64 }, ptr %t232, i64 2 %t234 = load { ptr, i64, i64 }, ptr %t233 store { ptr, i64, i64 } %t234, ptr %a235 call void @finch_str_copy(ptr %a236, ptr %a235) %t237 = load { ptr, i64, i64 }, ptr %a236 %t238 = insertvalue %S.lsp.FnRec %t228, { ptr, i64, i64 } %t237, 1 %t239 = load { ptr, i64, i64 }, ptr %a27 %t240 = extractvalue { ptr, i64, i64 } %t239, 1 %t241 = icmp uge i64 3, %t240 br i1 %t241, label %range9629, label %inrange9630 range9629: call void @finch_panic_index(ptr @.str.6600, i64 307, i64 3, i64 %t240) unreachable inrange9630: %t242 = extractvalue { ptr, i64, i64 } %t239, 0 %t243 = getelementptr inbounds { ptr, i64, i64 }, ptr %t242, i64 3 %t244 = load { ptr, i64, i64 }, ptr %t243 store { ptr, i64, i64 } %t244, ptr %a245 call void @finch_str_copy(ptr %a246, ptr %a245) %t247 = load { ptr, i64, i64 }, ptr %a246 %t248 = insertvalue %S.lsp.FnRec %t238, { ptr, i64, i64 } %t247, 2 %t249 = load { ptr, i64, i64 }, ptr %a27 %t250 = extractvalue { ptr, i64, i64 } %t249, 1 %t251 = icmp uge i64 4, %t250 br i1 %t251, label %range9631, label %inrange9632 range9631: call void @finch_panic_index(ptr @.str.6601, i64 307, i64 4, i64 %t250) unreachable inrange9632: %t252 = extractvalue { ptr, i64, i64 } %t249, 0 %t253 = getelementptr inbounds { ptr, i64, i64 }, ptr %t252, i64 4 %t254 = load { ptr, i64, i64 }, ptr %t253 store { ptr, i64, i64 } %t254, ptr %a255 call void @finch_str_copy(ptr %a256, ptr %a255) %t257 = load { ptr, i64, i64 }, ptr %a256 %t258 = insertvalue %S.lsp.FnRec %t248, { ptr, i64, i64 } %t257, 3 %t259 = load { ptr, i64, i64 }, ptr %a27 %t260 = extractvalue { ptr, i64, i64 } %t259, 1 %t261 = icmp uge i64 5, %t260 br i1 %t261, label %range9633, label %inrange9634 range9633: call void @finch_panic_index(ptr @.str.6602, i64 307, i64 5, i64 %t260) unreachable inrange9634: %t262 = extractvalue { ptr, i64, i64 } %t259, 0 %t263 = getelementptr inbounds { ptr, i64, i64 }, ptr %t262, i64 5 %t264 = load { ptr, i64, i64 }, ptr %t263 %t265 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t264) %t266 = insertvalue %S.lsp.FnRec %t258, i64 %t265, 4 %t267 = load { ptr, i64, i64 }, ptr %a27 %t268 = extractvalue { ptr, i64, i64 } %t267, 1 %t269 = icmp uge i64 6, %t268 br i1 %t269, label %range9635, label %inrange9636 range9635: call void @finch_panic_index(ptr @.str.6603, i64 307, i64 6, i64 %t268) unreachable inrange9636: %t270 = extractvalue { ptr, i64, i64 } %t267, 0 %t271 = getelementptr inbounds { ptr, i64, i64 }, ptr %t270, i64 6 %t272 = load { ptr, i64, i64 }, ptr %t271 %t273 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t272) %t274 = insertvalue %S.lsp.FnRec %t266, i64 %t273, 5 %t275 = load { ptr, i64, i64 }, ptr %a27 %t276 = extractvalue { ptr, i64, i64 } %t275, 1 %t277 = icmp uge i64 7, %t276 br i1 %t277, label %range9637, label %inrange9638 range9637: call void @finch_panic_index(ptr @.str.6604, i64 307, i64 7, i64 %t276) unreachable inrange9638: %t278 = extractvalue { ptr, i64, i64 } %t275, 0 %t279 = getelementptr inbounds { ptr, i64, i64 }, ptr %t278, i64 7 %t280 = load { ptr, i64, i64 }, ptr %t279 %t281 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t280) %t282 = insertvalue %S.lsp.FnRec %t274, i64 %t281, 6 %t283 = load { ptr, i64, i64 }, ptr %a27 %t284 = extractvalue { ptr, i64, i64 } %t283, 1 %t285 = icmp uge i64 8, %t284 br i1 %t285, label %range9639, label %inrange9640 range9639: call void @finch_panic_index(ptr @.str.6605, i64 307, i64 8, i64 %t284) unreachable inrange9640: %t286 = extractvalue { ptr, i64, i64 } %t283, 0 %t287 = getelementptr inbounds { ptr, i64, i64 }, ptr %t286, i64 8 %t288 = load { ptr, i64, i64 }, ptr %t287 %t289 = call { ptr, i64, i64 } @finch.lsp.unesc({ ptr, i64, i64 } %t288) %t290 = insertvalue %S.lsp.FnRec %t282, { ptr, i64, i64 } %t289, 7 %t291 = load { ptr, i64, i64 }, ptr %a27 %t292 = extractvalue { ptr, i64, i64 } %t291, 1 %t293 = icmp uge i64 9, %t292 br i1 %t293, label %range9641, label %inrange9642 range9641: call void @finch_panic_index(ptr @.str.6606, i64 307, i64 9, i64 %t292) unreachable inrange9642: %t294 = extractvalue { ptr, i64, i64 } %t291, 0 %t295 = getelementptr inbounds { ptr, i64, i64 }, ptr %t294, i64 9 %t296 = load { ptr, i64, i64 }, ptr %t295 store { ptr, i64, i64 } %t296, ptr %a297 store { ptr, i64, i64 } { ptr @.str.6608, i64 1, i64 0 }, ptr %a299 call void @finch_str_split(ptr %a300, ptr %a297, ptr %a299) %t301 = load { ptr, i64, i64 }, ptr %a300 %t302 = insertvalue %S.lsp.FnRec %t290, { ptr, i64, i64 } %t301, 8 %t303 = load i64, ptr %t218 %t304 = add i64 %t303, 1 call void @finch_arr_reserve(ptr %t217, i64 %t304, i64 ptrtoint (ptr getelementptr (%S.lsp.FnRec, ptr null, i32 1) to i64)) %t305 = load ptr, ptr %t217 %t306 = getelementptr inbounds %S.lsp.FnRec, ptr %t305, i64 %t303 store %S.lsp.FnRec %t302, ptr %t306 store i64 %t304, ptr %t218 br label %endif9624 else9623: %t307 = load { ptr, i64, i64 }, ptr %a37 store { ptr, i64, i64 } %t307, ptr %a308 store { ptr, i64, i64 } { ptr @.str.6609, i64 2, i64 0 }, ptr %a309 %t310 = call i32 @finch_str_eq(ptr %a308, ptr %a309) %t311 = icmp ne i32 %t310, 0 br label %logic.from9643 logic.from9643: br i1 %t311, label %logic.rhs9644, label %logic.end9645 logic.rhs9644: %t312 = getelementptr inbounds { ptr, i64, i64 }, ptr %a27, i32 0, i32 1 %t313 = load i64, ptr %t312 %t314 = icmp sge i64 %t313, 6 br label %logic.rend9646 logic.rend9646: br label %logic.end9645 logic.end9645: %t315 = phi i1 [ false, %logic.from9643 ], [ %t314, %logic.rend9646 ] br i1 %t315, label %then9647, label %else9648 then9647: %t316 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 3 %t317 = getelementptr inbounds { ptr, i64, i64 }, ptr %t316, i32 0, i32 1 %t318 = load { ptr, i64, i64 }, ptr %a27 %t319 = extractvalue { ptr, i64, i64 } %t318, 1 %t320 = icmp uge i64 1, %t319 br i1 %t320, label %range9650, label %inrange9651 range9650: call void @finch_panic_index(ptr @.str.6610, i64 309, i64 1, i64 %t319) unreachable inrange9651: %t321 = extractvalue { ptr, i64, i64 } %t318, 0 %t322 = getelementptr inbounds { ptr, i64, i64 }, ptr %t321, i64 1 %t323 = load { ptr, i64, i64 }, ptr %t322 store { ptr, i64, i64 } %t323, ptr %a324 call void @finch_str_copy(ptr %a325, ptr %a324) %t326 = load { ptr, i64, i64 }, ptr %a325 %t327 = insertvalue %S.lsp.StructRec zeroinitializer, { ptr, i64, i64 } %t326, 0 %t328 = load { ptr, i64, i64 }, ptr %a27 %t329 = extractvalue { ptr, i64, i64 } %t328, 1 %t330 = icmp uge i64 2, %t329 br i1 %t330, label %range9652, label %inrange9653 range9652: call void @finch_panic_index(ptr @.str.6611, i64 309, i64 2, i64 %t329) unreachable inrange9653: %t331 = extractvalue { ptr, i64, i64 } %t328, 0 %t332 = getelementptr inbounds { ptr, i64, i64 }, ptr %t331, i64 2 %t333 = load { ptr, i64, i64 }, ptr %t332 store { ptr, i64, i64 } %t333, ptr %a334 call void @finch_str_copy(ptr %a335, ptr %a334) %t336 = load { ptr, i64, i64 }, ptr %a335 %t337 = insertvalue %S.lsp.StructRec %t327, { ptr, i64, i64 } %t336, 1 %t338 = load { ptr, i64, i64 }, ptr %a27 %t339 = extractvalue { ptr, i64, i64 } %t338, 1 %t340 = icmp uge i64 3, %t339 br i1 %t340, label %range9654, label %inrange9655 range9654: call void @finch_panic_index(ptr @.str.6612, i64 309, i64 3, i64 %t339) unreachable inrange9655: %t341 = extractvalue { ptr, i64, i64 } %t338, 0 %t342 = getelementptr inbounds { ptr, i64, i64 }, ptr %t341, i64 3 %t343 = load { ptr, i64, i64 }, ptr %t342 store { ptr, i64, i64 } %t343, ptr %a344 call void @finch_str_copy(ptr %a345, ptr %a344) %t346 = load { ptr, i64, i64 }, ptr %a345 %t347 = insertvalue %S.lsp.StructRec %t337, { ptr, i64, i64 } %t346, 2 %t348 = load { ptr, i64, i64 }, ptr %a27 %t349 = extractvalue { ptr, i64, i64 } %t348, 1 %t350 = icmp uge i64 4, %t349 br i1 %t350, label %range9656, label %inrange9657 range9656: call void @finch_panic_index(ptr @.str.6613, i64 309, i64 4, i64 %t349) unreachable inrange9657: %t351 = extractvalue { ptr, i64, i64 } %t348, 0 %t352 = getelementptr inbounds { ptr, i64, i64 }, ptr %t351, i64 4 %t353 = load { ptr, i64, i64 }, ptr %t352 %t354 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t353) %t355 = insertvalue %S.lsp.StructRec %t347, i64 %t354, 3 %t356 = load { ptr, i64, i64 }, ptr %a27 %t357 = extractvalue { ptr, i64, i64 } %t356, 1 %t358 = icmp uge i64 5, %t357 br i1 %t358, label %range9658, label %inrange9659 range9658: call void @finch_panic_index(ptr @.str.6614, i64 309, i64 5, i64 %t357) unreachable inrange9659: %t359 = extractvalue { ptr, i64, i64 } %t356, 0 %t360 = getelementptr inbounds { ptr, i64, i64 }, ptr %t359, i64 5 %t361 = load { ptr, i64, i64 }, ptr %t360 %t362 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t361) %t363 = insertvalue %S.lsp.StructRec %t355, i64 %t362, 4 %t364 = load i64, ptr %t317 %t365 = add i64 %t364, 1 call void @finch_arr_reserve(ptr %t316, i64 %t365, i64 ptrtoint (ptr getelementptr (%S.lsp.StructRec, ptr null, i32 1) to i64)) %t366 = load ptr, ptr %t316 %t367 = getelementptr inbounds %S.lsp.StructRec, ptr %t366, i64 %t364 store %S.lsp.StructRec %t363, ptr %t367 store i64 %t365, ptr %t317 br label %endif9649 else9648: %t368 = load { ptr, i64, i64 }, ptr %a37 store { ptr, i64, i64 } %t368, ptr %a369 store { ptr, i64, i64 } { ptr @.str.6615, i64 3, i64 0 }, ptr %a370 %t371 = call i32 @finch_str_eq(ptr %a369, ptr %a370) %t372 = icmp ne i32 %t371, 0 br label %logic.from9660 logic.from9660: br i1 %t372, label %logic.rhs9661, label %logic.end9662 logic.rhs9661: %t373 = getelementptr inbounds { ptr, i64, i64 }, ptr %a27, i32 0, i32 1 %t374 = load i64, ptr %t373 %t375 = icmp sge i64 %t374, 5 br label %logic.rend9663 logic.rend9663: br label %logic.end9662 logic.end9662: %t376 = phi i1 [ false, %logic.from9660 ], [ %t375, %logic.rend9663 ] br label %logic.from9664 logic.from9664: br i1 %t376, label %logic.rhs9665, label %logic.end9666 logic.rhs9665: %t377 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 3 %t378 = getelementptr inbounds { ptr, i64, i64 }, ptr %t377, i32 0, i32 1 %t379 = load i64, ptr %t378 %t380 = icmp sgt i64 %t379, 0 br label %logic.rend9667 logic.rend9667: br label %logic.end9666 logic.end9666: %t381 = phi i1 [ false, %logic.from9664 ], [ %t380, %logic.rend9667 ] br i1 %t381, label %then9668, label %else9669 then9668: %t382 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 3 %t383 = getelementptr inbounds { ptr, i64, i64 }, ptr %t382, i32 0, i32 1 %t384 = load i64, ptr %t383 %t385 = sub i64 %t384, 1 store i64 %t385, ptr %a386 %t387 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 3 %t388 = load i64, ptr %a386 %t389 = load { ptr, i64, i64 }, ptr %t387 %t390 = extractvalue { ptr, i64, i64 } %t389, 1 %t391 = icmp uge i64 %t388, %t390 br i1 %t391, label %range9671, label %inrange9672 range9671: call void @finch_panic_index(ptr @.str.6616, i64 312, i64 %t388, i64 %t390) unreachable inrange9672: %t392 = extractvalue { ptr, i64, i64 } %t389, 0 %t393 = getelementptr inbounds %S.lsp.StructRec, ptr %t392, i64 %t388 %t394 = getelementptr inbounds %S.lsp.StructRec, ptr %t393, i32 0, i32 5 %t395 = getelementptr inbounds { ptr, i64, i64 }, ptr %t394, i32 0, i32 1 %t396 = load { ptr, i64, i64 }, ptr %a27 %t397 = extractvalue { ptr, i64, i64 } %t396, 1 %t398 = icmp uge i64 3, %t397 br i1 %t398, label %range9673, label %inrange9674 range9673: call void @finch_panic_index(ptr @.str.6617, i64 312, i64 3, i64 %t397) unreachable inrange9674: %t399 = extractvalue { ptr, i64, i64 } %t396, 0 %t400 = getelementptr inbounds { ptr, i64, i64 }, ptr %t399, i64 3 %t401 = load { ptr, i64, i64 }, ptr %t400 store { ptr, i64, i64 } %t401, ptr %a402 call void @finch_str_copy(ptr %a403, ptr %a402) %t404 = load { ptr, i64, i64 }, ptr %a403 %t405 = load i64, ptr %t395 %t406 = add i64 %t405, 1 call void @finch_arr_reserve(ptr %t394, i64 %t406, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t407 = load ptr, ptr %t394 %t408 = getelementptr inbounds { ptr, i64, i64 }, ptr %t407, i64 %t405 store { ptr, i64, i64 } %t404, ptr %t408 store i64 %t406, ptr %t395 %t409 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 3 %t410 = load i64, ptr %a386 %t411 = load { ptr, i64, i64 }, ptr %t409 %t412 = extractvalue { ptr, i64, i64 } %t411, 1 %t413 = icmp uge i64 %t410, %t412 br i1 %t413, label %range9675, label %inrange9676 range9675: call void @finch_panic_index(ptr @.str.6618, i64 313, i64 %t410, i64 %t412) unreachable inrange9676: %t414 = extractvalue { ptr, i64, i64 } %t411, 0 %t415 = getelementptr inbounds %S.lsp.StructRec, ptr %t414, i64 %t410 %t416 = getelementptr inbounds %S.lsp.StructRec, ptr %t415, i32 0, i32 6 %t417 = getelementptr inbounds { ptr, i64, i64 }, ptr %t416, i32 0, i32 1 %t418 = load { ptr, i64, i64 }, ptr %a27 %t419 = extractvalue { ptr, i64, i64 } %t418, 1 %t420 = icmp uge i64 4, %t419 br i1 %t420, label %range9677, label %inrange9678 range9677: call void @finch_panic_index(ptr @.str.6619, i64 313, i64 4, i64 %t419) unreachable inrange9678: %t421 = extractvalue { ptr, i64, i64 } %t418, 0 %t422 = getelementptr inbounds { ptr, i64, i64 }, ptr %t421, i64 4 %t423 = load { ptr, i64, i64 }, ptr %t422 store { ptr, i64, i64 } %t423, ptr %a424 call void @finch_str_copy(ptr %a425, ptr %a424) %t426 = load { ptr, i64, i64 }, ptr %a425 %t427 = load i64, ptr %t417 %t428 = add i64 %t427, 1 call void @finch_arr_reserve(ptr %t416, i64 %t428, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t429 = load ptr, ptr %t416 %t430 = getelementptr inbounds { ptr, i64, i64 }, ptr %t429, i64 %t427 store { ptr, i64, i64 } %t426, ptr %t430 store i64 %t428, ptr %t417 br label %endif9670 else9669: %t431 = load { ptr, i64, i64 }, ptr %a37 store { ptr, i64, i64 } %t431, ptr %a432 store { ptr, i64, i64 } { ptr @.str.6620, i64 2, i64 0 }, ptr %a433 %t434 = call i32 @finch_str_eq(ptr %a432, ptr %a433) %t435 = icmp ne i32 %t434, 0 br label %logic.from9679 logic.from9679: br i1 %t435, label %logic.rhs9680, label %logic.end9681 logic.rhs9680: %t436 = getelementptr inbounds { ptr, i64, i64 }, ptr %a27, i32 0, i32 1 %t437 = load i64, ptr %t436 %t438 = icmp sge i64 %t437, 7 br label %logic.rend9682 logic.rend9682: br label %logic.end9681 logic.end9681: %t439 = phi i1 [ false, %logic.from9679 ], [ %t438, %logic.rend9682 ] br i1 %t439, label %then9683, label %else9684 then9683: %t440 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 4 %t441 = getelementptr inbounds { ptr, i64, i64 }, ptr %t440, i32 0, i32 1 %t442 = load { ptr, i64, i64 }, ptr %a27 %t443 = extractvalue { ptr, i64, i64 } %t442, 1 %t444 = icmp uge i64 1, %t443 br i1 %t444, label %range9686, label %inrange9687 range9686: call void @finch_panic_index(ptr @.str.6621, i64 315, i64 1, i64 %t443) unreachable inrange9687: %t445 = extractvalue { ptr, i64, i64 } %t442, 0 %t446 = getelementptr inbounds { ptr, i64, i64 }, ptr %t445, i64 1 %t447 = load { ptr, i64, i64 }, ptr %t446 store { ptr, i64, i64 } %t447, ptr %a448 call void @finch_str_copy(ptr %a449, ptr %a448) %t450 = load { ptr, i64, i64 }, ptr %a449 %t451 = insertvalue %S.lsp.EnumRec zeroinitializer, { ptr, i64, i64 } %t450, 0 %t452 = load { ptr, i64, i64 }, ptr %a27 %t453 = extractvalue { ptr, i64, i64 } %t452, 1 %t454 = icmp uge i64 2, %t453 br i1 %t454, label %range9688, label %inrange9689 range9688: call void @finch_panic_index(ptr @.str.6622, i64 315, i64 2, i64 %t453) unreachable inrange9689: %t455 = extractvalue { ptr, i64, i64 } %t452, 0 %t456 = getelementptr inbounds { ptr, i64, i64 }, ptr %t455, i64 2 %t457 = load { ptr, i64, i64 }, ptr %t456 store { ptr, i64, i64 } %t457, ptr %a458 call void @finch_str_copy(ptr %a459, ptr %a458) %t460 = load { ptr, i64, i64 }, ptr %a459 %t461 = insertvalue %S.lsp.EnumRec %t451, { ptr, i64, i64 } %t460, 1 %t462 = load { ptr, i64, i64 }, ptr %a27 %t463 = extractvalue { ptr, i64, i64 } %t462, 1 %t464 = icmp uge i64 3, %t463 br i1 %t464, label %range9690, label %inrange9691 range9690: call void @finch_panic_index(ptr @.str.6623, i64 315, i64 3, i64 %t463) unreachable inrange9691: %t465 = extractvalue { ptr, i64, i64 } %t462, 0 %t466 = getelementptr inbounds { ptr, i64, i64 }, ptr %t465, i64 3 %t467 = load { ptr, i64, i64 }, ptr %t466 store { ptr, i64, i64 } %t467, ptr %a468 call void @finch_str_copy(ptr %a469, ptr %a468) %t470 = load { ptr, i64, i64 }, ptr %a469 %t471 = insertvalue %S.lsp.EnumRec %t461, { ptr, i64, i64 } %t470, 2 %t472 = load { ptr, i64, i64 }, ptr %a27 %t473 = extractvalue { ptr, i64, i64 } %t472, 1 %t474 = icmp uge i64 4, %t473 br i1 %t474, label %range9692, label %inrange9693 range9692: call void @finch_panic_index(ptr @.str.6624, i64 315, i64 4, i64 %t473) unreachable inrange9693: %t475 = extractvalue { ptr, i64, i64 } %t472, 0 %t476 = getelementptr inbounds { ptr, i64, i64 }, ptr %t475, i64 4 %t477 = load { ptr, i64, i64 }, ptr %t476 %t478 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t477) %t479 = insertvalue %S.lsp.EnumRec %t471, i64 %t478, 3 %t480 = load { ptr, i64, i64 }, ptr %a27 %t481 = extractvalue { ptr, i64, i64 } %t480, 1 %t482 = icmp uge i64 5, %t481 br i1 %t482, label %range9694, label %inrange9695 range9694: call void @finch_panic_index(ptr @.str.6625, i64 315, i64 5, i64 %t481) unreachable inrange9695: %t483 = extractvalue { ptr, i64, i64 } %t480, 0 %t484 = getelementptr inbounds { ptr, i64, i64 }, ptr %t483, i64 5 %t485 = load { ptr, i64, i64 }, ptr %t484 %t486 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t485) %t487 = insertvalue %S.lsp.EnumRec %t479, i64 %t486, 4 %t488 = load { ptr, i64, i64 }, ptr %a27 %t489 = extractvalue { ptr, i64, i64 } %t488, 1 %t490 = icmp uge i64 6, %t489 br i1 %t490, label %range9696, label %inrange9697 range9696: call void @finch_panic_index(ptr @.str.6626, i64 315, i64 6, i64 %t489) unreachable inrange9697: %t491 = extractvalue { ptr, i64, i64 } %t488, 0 %t492 = getelementptr inbounds { ptr, i64, i64 }, ptr %t491, i64 6 %t493 = load { ptr, i64, i64 }, ptr %t492 store { ptr, i64, i64 } %t493, ptr %a494 store { ptr, i64, i64 } { ptr @.str.6628, i64 1, i64 0 }, ptr %a496 call void @finch_str_split(ptr %a497, ptr %a494, ptr %a496) %t498 = load { ptr, i64, i64 }, ptr %a497 %t499 = insertvalue %S.lsp.EnumRec %t487, { ptr, i64, i64 } %t498, 5 %t500 = load i64, ptr %t441 %t501 = add i64 %t500, 1 call void @finch_arr_reserve(ptr %t440, i64 %t501, i64 ptrtoint (ptr getelementptr (%S.lsp.EnumRec, ptr null, i32 1) to i64)) %t502 = load ptr, ptr %t440 %t503 = getelementptr inbounds %S.lsp.EnumRec, ptr %t502, i64 %t500 store %S.lsp.EnumRec %t499, ptr %t503 store i64 %t501, ptr %t441 br label %endif9685 else9684: %t504 = load { ptr, i64, i64 }, ptr %a37 store { ptr, i64, i64 } %t504, ptr %a505 store { ptr, i64, i64 } { ptr @.str.6629, i64 2, i64 0 }, ptr %a506 %t507 = call i32 @finch_str_eq(ptr %a505, ptr %a506) %t508 = icmp ne i32 %t507, 0 br label %logic.from9698 logic.from9698: br i1 %t508, label %logic.rhs9699, label %logic.end9700 logic.rhs9699: %t509 = getelementptr inbounds { ptr, i64, i64 }, ptr %a27, i32 0, i32 1 %t510 = load i64, ptr %t509 %t511 = icmp sge i64 %t510, 2 br label %logic.rend9701 logic.rend9701: br label %logic.end9700 logic.end9700: %t512 = phi i1 [ false, %logic.from9698 ], [ %t511, %logic.rend9701 ] br i1 %t512, label %then9702, label %endif9704 then9702: %t513 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 5 %t514 = getelementptr inbounds { ptr, i64, i64 }, ptr %t513, i32 0, i32 1 %t515 = load { ptr, i64, i64 }, ptr %a27 %t516 = extractvalue { ptr, i64, i64 } %t515, 1 %t517 = icmp uge i64 1, %t516 br i1 %t517, label %range9705, label %inrange9706 range9705: call void @finch_panic_index(ptr @.str.6630, i64 317, i64 1, i64 %t516) unreachable inrange9706: %t518 = extractvalue { ptr, i64, i64 } %t515, 0 %t519 = getelementptr inbounds { ptr, i64, i64 }, ptr %t518, i64 1 %t520 = load { ptr, i64, i64 }, ptr %t519 store { ptr, i64, i64 } %t520, ptr %a521 call void @finch_str_copy(ptr %a522, ptr %a521) %t523 = load { ptr, i64, i64 }, ptr %a522 %t524 = load i64, ptr %t514 %t525 = add i64 %t524, 1 call void @finch_arr_reserve(ptr %t513, i64 %t525, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t526 = load ptr, ptr %t513 %t527 = getelementptr inbounds { ptr, i64, i64 }, ptr %t526, i64 %t524 store { ptr, i64, i64 } %t523, ptr %t527 store i64 %t525, ptr %t514 br label %endif9704 endif9704: br label %endif9685 endif9685: br label %endif9670 endif9670: br label %endif9649 endif9649: br label %endif9624 endif9624: br label %endif9601 endif9601: br label %endif9578 endif9578: br label %endif9569 else9568: %t528 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 6 %t529 = getelementptr inbounds %S.lsp.Diag, ptr %t528, i32 0, i32 0 %t530 = load i1, ptr %t529 %t531 = xor i1 %t530, true br i1 %t531, label %then9707, label %endif9709 then9707: %t532 = load { ptr, i64, i64 }, ptr %a18 %t533 = call %S.lsp.Diag @finch.lsp.parseDiag({ ptr, i64, i64 } %t532) %t534 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 6 store %S.lsp.Diag %t533, ptr %t534 br label %endif9709 endif9709: br label %endif9569 endif9569: br label %each.step9565 each.step9565: %t535 = load i64, ptr %a10 %t536 = add i64 %t535, 1 store i64 %t536, ptr %a10 br label %each.cond9563 each.end9566: %t537 = load %S.lsp.Analysis, ptr %a2 store %S.lsp.Analysis %t537, ptr %a538 call void @finch.copy.S_lsp_Analysis(ptr %a539, ptr %a538) %t540 = load %S.lsp.Analysis, ptr %a539 ret %S.lsp.Analysis %t540 } define internal void @finch.lsp.Server.analyse(ptr %self, { ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca i64, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca i64, align 16 %a25 = alloca i64, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca i64, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a65 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a76 = alloca { ptr, i64, i64 }, align 16 %a77 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca { ptr, i64, i64 }, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 %a106 = alloca { ptr, i64, i64 }, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a115 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca { ptr, i64, i64 }, align 16 %a117 = alloca { ptr, i64, i64 }, align 16 %a119 = alloca { ptr, i64, i64 }, align 16 %a122 = alloca { ptr, i64, i64 }, align 16 %a123 = alloca { ptr, i64, i64 }, align 16 %a124 = alloca { ptr, i64, i64 }, align 16 %a126 = alloca { ptr, i64, i64 }, align 16 %a127 = alloca { ptr, i64, i64 }, align 16 %a128 = alloca { ptr, i64, i64 }, align 16 %a131 = alloca { ptr, i64, i64 }, align 16 %a132 = alloca { ptr, i64, i64 }, align 16 %a133 = alloca { ptr, i64, i64 }, align 16 %a135 = alloca { ptr, i64, i64 }, align 16 %a136 = alloca { ptr, i64, i64 }, align 16 %a137 = alloca { ptr, i64, i64 }, align 16 %a140 = alloca { ptr, i64, i64 }, align 16 %a141 = alloca { ptr, i64, i64 }, align 16 %a142 = alloca { ptr, i64, i64 }, align 16 %a144 = alloca { ptr, i64, i64 }, align 16 %a145 = alloca { ptr, i64, i64 }, align 16 %a146 = alloca { ptr, i64, i64 }, align 16 %a149 = alloca { ptr, i64, i64 }, align 16 %a150 = alloca { ptr, i64, i64 }, align 16 %a151 = alloca { ptr, i64, i64 }, align 16 %a153 = alloca { ptr, i64, i64 }, align 16 %a154 = alloca { ptr, i64, i64 }, align 16 %a155 = alloca { ptr, i64, i64 }, align 16 %a157 = alloca { ptr, i64, i64 }, align 16 %a158 = alloca { ptr, i64, i64 }, align 16 %a161 = alloca { ptr, i64, i64 }, align 16 %a162 = alloca { ptr, i64, i64 }, align 16 %a163 = alloca { ptr, i64, i64 }, align 16 %a168 = alloca { ptr, i64, i64 }, align 16 %a171 = alloca %S.lsp.Analysis, align 16 %a179 = alloca { ptr, i64, i64 }, align 16 %a180 = alloca i32, align 16 %a190 = alloca %S.lsp.Analysis, align 16 %a191 = alloca %S.lsp.Analysis, align 16 %a195 = alloca { ptr, i64, i64 }, align 16 %a200 = alloca { ptr, i64, i64 }, align 16 %a203 = alloca { ptr, i64, i64 }, align 16 %a204 = alloca { ptr, i64, i64 }, align 16 %a210 = alloca %S.lsp.Analysis, align 16 %a211 = alloca %S.lsp.Analysis, align 16 %a213 = alloca %S.lsp.Analysis, align 16 %a217 = alloca { ptr, i64, i64 }, align 16 %a218 = alloca { ptr, i64, i64 }, align 16 %a223 = alloca { ptr, i64, i64 }, align 16 %a224 = alloca { ptr, i64, i64 }, align 16 %a229 = alloca { ptr, i64, i64 }, align 16 %a230 = alloca { ptr, i64, i64 }, align 16 %a235 = alloca { ptr, i64, i64 }, align 16 %a236 = alloca { ptr, i64, i64 }, align 16 %a245 = alloca { ptr, i64, i64 }, align 16 %a246 = alloca { ptr, i64, i64 }, align 16 %a251 = alloca { ptr, i64, i64 }, align 16 %a252 = alloca i32, align 16 %a262 = alloca %S.lsp.Analysis, align 16 %a263 = alloca %S.lsp.Analysis, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 1 %t3 = load { ptr, i64, i64 }, ptr %t2 store { ptr, i64, i64 } { ptr @.str.6631, i64 10, i64 0 }, ptr %a5 store { ptr, i64, i64 } %t3, ptr %a6 call void @finch_str_concat(ptr %a4, ptr %a5, ptr %a6) %t7 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t7, ptr %a9 store { ptr, i64, i64 } { ptr @.str.6632, i64 1, i64 0 }, ptr %a10 call void @finch_str_concat(ptr %a8, ptr %a9, ptr %a10) %t11 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t11, ptr %a13 call void @finch_str_copy(ptr %a12, ptr %a13) %t14 = call i64 @finch_shell(ptr %a12) store { ptr, i64, i64 } { ptr @.str.6633, i64 0, i64 0 }, ptr %a15 store i64 0, ptr %a16 %t17 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 2 store { ptr, i64, i64 } zeroinitializer, ptr %a18 %t19 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t17, i32 0, i32 1 %t20 = load i64, ptr %t19 call void @finch_arr_make(ptr %a18, i64 %t20, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t21 = load ptr, ptr %a18 store i64 0, ptr %a22 %t23 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t17, i32 0, i32 2 %t24 = load i64, ptr %t23 store i64 0, ptr %a25 br label %n.cond9725 n.cond9725: %t26 = load i64, ptr %a25 %t27 = icmp slt i64 %t26, %t24 br i1 %t27, label %n.body9726, label %n.end9727 n.body9726: %t28 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t17, i32 0, i32 0 %t29 = load ptr, ptr %t28 %t30 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t29, i64 %t26 %t31 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t30, i32 0, i32 0 %t32 = load i64, ptr %t31 %t33 = icmp ne i64 %t32, 0 br i1 %t33, label %entry.live9728, label %entry.next9729 entry.live9728: %t34 = load i64, ptr %a22 %t35 = getelementptr inbounds { ptr, i64, i64 }, ptr %t21, i64 %t34 %t36 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t30, i32 0, i32 1 call void @finch_str_copy(ptr %t35, ptr %t36) %t37 = add i64 %t34, 1 store i64 %t37, ptr %a22 br label %entry.next9729 entry.next9729: %t38 = load i64, ptr %a25 %t39 = add i64 %t38, 1 store i64 %t39, ptr %a25 br label %n.cond9725 n.end9727: %t40 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t40, ptr %a41 store i64 0, ptr %a42 br label %each.cond9730 each.cond9730: %t43 = getelementptr inbounds { ptr, i64, i64 }, ptr %a41, i32 0, i32 1 %t44 = load i64, ptr %t43 %t45 = load i64, ptr %a42 %t46 = icmp slt i64 %t45, %t44 br i1 %t46, label %each.body9731, label %each.end9733 each.body9731: %t47 = load ptr, ptr %a41 %t48 = getelementptr inbounds { ptr, i64, i64 }, ptr %t47, i64 %t45 %t49 = load { ptr, i64, i64 }, ptr %t48 store { ptr, i64, i64 } %t49, ptr %a50 %t51 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 1 %t52 = load { ptr, i64, i64 }, ptr %t51 store { ptr, i64, i64 } %t52, ptr %a54 store { ptr, i64, i64 } { ptr @.str.6634, i64 4, i64 0 }, ptr %a55 call void @finch_str_concat(ptr %a53, ptr %a54, ptr %a55) %t56 = load { ptr, i64, i64 }, ptr %a53 %t57 = load i64, ptr %a16 call void @finch_str_from_int(ptr %a58, i64 %t57) %t59 = load { ptr, i64, i64 }, ptr %a58 store { ptr, i64, i64 } %t56, ptr %a61 store { ptr, i64, i64 } %t59, ptr %a62 call void @finch_str_concat(ptr %a60, ptr %a61, ptr %a62) %t63 = load { ptr, i64, i64 }, ptr %a60 store { ptr, i64, i64 } %t63, ptr %a65 store { ptr, i64, i64 } { ptr @.str.6635, i64 4, i64 0 }, ptr %a66 call void @finch_str_concat(ptr %a64, ptr %a65, ptr %a66) %t67 = load { ptr, i64, i64 }, ptr %a64 store { ptr, i64, i64 } %t67, ptr %a68 %t69 = load { ptr, i64, i64 }, ptr %a68 store { ptr, i64, i64 } %t69, ptr %a70 %t71 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 2 %t72 = load { ptr, i64, i64 }, ptr %a50 store { ptr, i64, i64 } %t72, ptr %a73 %t74 = call i64 @finch_map_find(ptr %t71, ptr %a73, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t75 = icmp slt i64 %t74, 0 br i1 %t75, label %map.missing9734, label %map.found9735 map.missing9734: store { ptr, i64, i64 } zeroinitializer, ptr %a76 store { ptr, i64, i64 } %t72, ptr %a77 call void @finch_buf_str(ptr %a76, ptr %a77, i32 1) call void @finch_map_missing(ptr @.str.6636, i64 333, ptr %a76) unreachable map.found9735: %t78 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t71, i32 0, i32 0 %t79 = load ptr, ptr %t78 %t80 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t79, i64 %t74 %t81 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t80, i32 0, i32 2 %t82 = load { ptr, i64, i64 }, ptr %t81 store { ptr, i64, i64 } %t82, ptr %a83 %t84 = call i32 @finch_write_file(ptr %a70, ptr %a83) %t85 = icmp ne i32 %t84, 0 %t86 = load { ptr, i64, i64 }, ptr %a15 store { ptr, i64, i64 } %t86, ptr %a88 store { ptr, i64, i64 } { ptr @.str.6637, i64 12, i64 0 }, ptr %a89 call void @finch_str_concat(ptr %a87, ptr %a88, ptr %a89) %t90 = load { ptr, i64, i64 }, ptr %a87 %t91 = load { ptr, i64, i64 }, ptr %a50 store { ptr, i64, i64 } %t90, ptr %a93 store { ptr, i64, i64 } %t91, ptr %a94 call void @finch_str_concat(ptr %a92, ptr %a93, ptr %a94) %t95 = load { ptr, i64, i64 }, ptr %a92 store { ptr, i64, i64 } %t95, ptr %a97 store { ptr, i64, i64 } { ptr @.str.6638, i64 1, i64 0 }, ptr %a98 call void @finch_str_concat(ptr %a96, ptr %a97, ptr %a98) %t99 = load { ptr, i64, i64 }, ptr %a96 %t100 = load { ptr, i64, i64 }, ptr %a68 store { ptr, i64, i64 } %t99, ptr %a102 store { ptr, i64, i64 } %t100, ptr %a103 call void @finch_str_concat(ptr %a101, ptr %a102, ptr %a103) %t104 = load { ptr, i64, i64 }, ptr %a101 store { ptr, i64, i64 } %t104, ptr %a106 store { ptr, i64, i64 } { ptr @.str.6639, i64 1, i64 0 }, ptr %a107 call void @finch_str_concat(ptr %a105, ptr %a106, ptr %a107) %t108 = load { ptr, i64, i64 }, ptr %a105 store { ptr, i64, i64 } %t108, ptr %a15 %t109 = load i64, ptr %a16 %t110 = add i64 %t109, 1 store i64 %t110, ptr %a16 br label %each.step9732 each.step9732: %t111 = load i64, ptr %a42 %t112 = add i64 %t111, 1 store i64 %t112, ptr %a42 br label %each.cond9730 each.end9733: %t113 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 1 %t114 = load { ptr, i64, i64 }, ptr %t113 store { ptr, i64, i64 } %t114, ptr %a116 store { ptr, i64, i64 } { ptr @.str.6640, i64 8, i64 0 }, ptr %a117 call void @finch_str_concat(ptr %a115, ptr %a116, ptr %a117) %t118 = load { ptr, i64, i64 }, ptr %a115 store { ptr, i64, i64 } %t118, ptr %a119 %t120 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 0 %t121 = load { ptr, i64, i64 }, ptr %t120 store { ptr, i64, i64 } { ptr @.str.6641, i64 1, i64 0 }, ptr %a123 store { ptr, i64, i64 } %t121, ptr %a124 call void @finch_str_concat(ptr %a122, ptr %a123, ptr %a124) %t125 = load { ptr, i64, i64 }, ptr %a122 store { ptr, i64, i64 } %t125, ptr %a127 store { ptr, i64, i64 } { ptr @.str.6642, i64 9, i64 0 }, ptr %a128 call void @finch_str_concat(ptr %a126, ptr %a127, ptr %a128) %t129 = load { ptr, i64, i64 }, ptr %a126 %t130 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t129, ptr %a132 store { ptr, i64, i64 } %t130, ptr %a133 call void @finch_str_concat(ptr %a131, ptr %a132, ptr %a133) %t134 = load { ptr, i64, i64 }, ptr %a131 store { ptr, i64, i64 } %t134, ptr %a136 store { ptr, i64, i64 } { ptr @.str.6643, i64 1, i64 0 }, ptr %a137 call void @finch_str_concat(ptr %a135, ptr %a136, ptr %a137) %t138 = load { ptr, i64, i64 }, ptr %a135 %t139 = load { ptr, i64, i64 }, ptr %a15 store { ptr, i64, i64 } %t138, ptr %a141 store { ptr, i64, i64 } %t139, ptr %a142 call void @finch_str_concat(ptr %a140, ptr %a141, ptr %a142) %t143 = load { ptr, i64, i64 }, ptr %a140 store { ptr, i64, i64 } %t143, ptr %a145 store { ptr, i64, i64 } { ptr @.str.6644, i64 4, i64 0 }, ptr %a146 call void @finch_str_concat(ptr %a144, ptr %a145, ptr %a146) %t147 = load { ptr, i64, i64 }, ptr %a144 %t148 = load { ptr, i64, i64 }, ptr %a119 store { ptr, i64, i64 } %t147, ptr %a150 store { ptr, i64, i64 } %t148, ptr %a151 call void @finch_str_concat(ptr %a149, ptr %a150, ptr %a151) %t152 = load { ptr, i64, i64 }, ptr %a149 store { ptr, i64, i64 } %t152, ptr %a154 store { ptr, i64, i64 } { ptr @.str.6645, i64 6, i64 0 }, ptr %a155 call void @finch_str_concat(ptr %a153, ptr %a154, ptr %a155) %t156 = load { ptr, i64, i64 }, ptr %a153 store { ptr, i64, i64 } %t156, ptr %a158 call void @finch_str_copy(ptr %a157, ptr %a158) %t159 = call i64 @finch_shell(ptr %a157) %t160 = load { ptr, i64, i64 }, ptr %a119 store { ptr, i64, i64 } %t160, ptr %a161 store { ptr, i64, i64 } zeroinitializer, ptr %a162 store { ptr, i64, i64 } zeroinitializer, ptr %a163 %t164 = call i32 @finch_try_read_file(ptr %a162, ptr %a161, ptr %a163) %t165 = icmp eq i32 %t164, 0 %t166 = load { ptr, i64, i64 }, ptr %a163 %t167 = load { ptr, i64, i64 }, ptr %a162 br i1 %t165, label %or.failed9736, label %or.ok9737 or.failed9736: store { ptr, i64, i64 } %t166, ptr %a168 br label %or.bend9738 or.bend9738: br label %or.end9739 or.ok9737: br label %or.end9739 or.end9739: %t169 = phi { ptr, i64, i64 } [ { ptr @.str.6646, i64 0, i64 0 }, %or.bend9738 ], [ %t167, %or.ok9737 ] %t170 = call %S.lsp.Analysis @finch.lsp.parseOutput({ ptr, i64, i64 } %t169) store %S.lsp.Analysis %t170, ptr %a171 %t172 = getelementptr inbounds %S.lsp.Analysis, ptr %a171, i32 0, i32 6 %t173 = getelementptr inbounds %S.lsp.Diag, ptr %t172, i32 0, i32 0 %t174 = load i1, ptr %t173 %t175 = xor i1 %t174, true br i1 %t175, label %then9740, label %else9741 then9740: %t176 = load %S.lsp.Analysis, ptr %a171 %t177 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 4 %t178 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t178, ptr %a179 store i32 0, ptr %a180 %t181 = call i64 @finch_map_slot(ptr %t177, ptr %a179, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a180) %t182 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t177, i32 0, i32 0 %t183 = load ptr, ptr %t182 %t184 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t183, i64 %t181 %t185 = load i32, ptr %a180 %t186 = icmp ne i32 %t185, 0 br i1 %t186, label %map.new9743, label %map.have9744 map.new9743: %t187 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t184, i32 0, i32 1 call void @finch_str_copy(ptr %t187, ptr %a179) %t188 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t184, i32 0, i32 2 store %S.lsp.Analysis zeroinitializer, ptr %t188 br label %map.have9744 map.have9744: %t189 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t184, i32 0, i32 2 store %S.lsp.Analysis %t176, ptr %a190 call void @finch.copy.S_lsp_Analysis(ptr %a191, ptr %a190) %t192 = load %S.lsp.Analysis, ptr %a191 store %S.lsp.Analysis %t192, ptr %t189 br label %endif9742 else9741: %t193 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 4 %t194 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t194, ptr %a195 %t196 = call i64 @finch_map_find(ptr %t193, ptr %a195, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t197 = icmp sge i64 %t196, 0 br i1 %t197, label %then9745, label %endif9747 then9745: %t198 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 4 %t199 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t199, ptr %a200 %t201 = call i64 @finch_map_find(ptr %t198, ptr %a200, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t202 = icmp slt i64 %t201, 0 br i1 %t202, label %map.missing9748, label %map.found9749 map.missing9748: store { ptr, i64, i64 } zeroinitializer, ptr %a203 store { ptr, i64, i64 } %t199, ptr %a204 call void @finch_buf_str(ptr %a203, ptr %a204, i32 1) call void @finch_map_missing(ptr @.str.6647, i64 344, ptr %a203) unreachable map.found9749: %t205 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t198, i32 0, i32 0 %t206 = load ptr, ptr %t205 %t207 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t206, i64 %t201 %t208 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t207, i32 0, i32 2 %t209 = load %S.lsp.Analysis, ptr %t208 store %S.lsp.Analysis %t209, ptr %a210 call void @finch.copy.S_lsp_Analysis(ptr %a211, ptr %a210) %t212 = load %S.lsp.Analysis, ptr %a211 store %S.lsp.Analysis %t212, ptr %a213 %t214 = getelementptr inbounds %S.lsp.Analysis, ptr %a213, i32 0, i32 2 %t215 = load { ptr, i64, i64 }, ptr %t214 %t216 = getelementptr inbounds %S.lsp.Analysis, ptr %a171, i32 0, i32 2 store { ptr, i64, i64 } %t215, ptr %a217 call void @finch.copy.arr_S_lsp_FnRec(ptr %a218, ptr %a217) %t219 = load { ptr, i64, i64 }, ptr %a218 store { ptr, i64, i64 } %t219, ptr %t216 %t220 = getelementptr inbounds %S.lsp.Analysis, ptr %a213, i32 0, i32 3 %t221 = load { ptr, i64, i64 }, ptr %t220 %t222 = getelementptr inbounds %S.lsp.Analysis, ptr %a171, i32 0, i32 3 store { ptr, i64, i64 } %t221, ptr %a223 call void @finch.copy.arr_S_lsp_StructRec(ptr %a224, ptr %a223) %t225 = load { ptr, i64, i64 }, ptr %a224 store { ptr, i64, i64 } %t225, ptr %t222 %t226 = getelementptr inbounds %S.lsp.Analysis, ptr %a213, i32 0, i32 4 %t227 = load { ptr, i64, i64 }, ptr %t226 %t228 = getelementptr inbounds %S.lsp.Analysis, ptr %a171, i32 0, i32 4 store { ptr, i64, i64 } %t227, ptr %a229 call void @finch.copy.arr_S_lsp_EnumRec(ptr %a230, ptr %a229) %t231 = load { ptr, i64, i64 }, ptr %a230 store { ptr, i64, i64 } %t231, ptr %t228 %t232 = getelementptr inbounds %S.lsp.Analysis, ptr %a213, i32 0, i32 1 %t233 = load { ptr, i64, i64 }, ptr %t232 %t234 = getelementptr inbounds %S.lsp.Analysis, ptr %a171, i32 0, i32 1 store { ptr, i64, i64 } %t233, ptr %a235 call void @finch.copy.arr_S_lsp_VarRec(ptr %a236, ptr %a235) %t237 = load { ptr, i64, i64 }, ptr %a236 store { ptr, i64, i64 } %t237, ptr %t234 %t238 = getelementptr inbounds %S.lsp.Analysis, ptr %a171, i32 0, i32 5 %t239 = getelementptr inbounds { ptr, i64, i64 }, ptr %t238, i32 0, i32 1 %t240 = load i64, ptr %t239 %t241 = icmp eq i64 %t240, 0 br i1 %t241, label %then9750, label %endif9752 then9750: %t242 = getelementptr inbounds %S.lsp.Analysis, ptr %a213, i32 0, i32 5 %t243 = load { ptr, i64, i64 }, ptr %t242 %t244 = getelementptr inbounds %S.lsp.Analysis, ptr %a171, i32 0, i32 5 store { ptr, i64, i64 } %t243, ptr %a245 call void @finch.copy.arr_str(ptr %a246, ptr %a245) %t247 = load { ptr, i64, i64 }, ptr %a246 store { ptr, i64, i64 } %t247, ptr %t244 br label %endif9752 endif9752: br label %endif9747 endif9747: br label %endif9742 endif9742: %t248 = load %S.lsp.Analysis, ptr %a171 %t249 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 3 %t250 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t250, ptr %a251 store i32 0, ptr %a252 %t253 = call i64 @finch_map_slot(ptr %t249, ptr %a251, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a252) %t254 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t249, i32 0, i32 0 %t255 = load ptr, ptr %t254 %t256 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t255, i64 %t253 %t257 = load i32, ptr %a252 %t258 = icmp ne i32 %t257, 0 br i1 %t258, label %map.new9753, label %map.have9754 map.new9753: %t259 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t256, i32 0, i32 1 call void @finch_str_copy(ptr %t259, ptr %a251) %t260 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t256, i32 0, i32 2 store %S.lsp.Analysis zeroinitializer, ptr %t260 br label %map.have9754 map.have9754: %t261 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t256, i32 0, i32 2 store %S.lsp.Analysis %t248, ptr %a262 call void @finch.copy.S_lsp_Analysis(ptr %a263, ptr %a262) %t264 = load %S.lsp.Analysis, ptr %a263 store %S.lsp.Analysis %t264, ptr %t261 %t265 = load { ptr, i64, i64 }, ptr %a1 %t266 = load %S.lsp.Analysis, ptr %a171 call void @finch.lsp.Server.publish(ptr %self, { ptr, i64, i64 } %t265, %S.lsp.Analysis %t266) ret void } define internal void @finch.lsp.Server.publish(ptr %self, { ptr, i64, i64 } %p0, %S.lsp.Analysis %p1) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a2 = alloca %S.lsp.Analysis, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca i64, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca i64, align 16 %a29 = alloca i64, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a54 = alloca i64, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca %S.json.Json, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca i64, align 16 %a88 = alloca i64, align 16 %a92 = alloca %S.json.Json, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a115 = alloca %S.json.Json, align 16 %a125 = alloca { ptr, i64, i64 }, align 16 %a126 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 store %S.lsp.Analysis %p1, ptr %a2 %t3 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t3, ptr %a4 call void @finch_str_copy(ptr %a5, ptr %a4) %t6 = load { ptr, i64, i64 }, ptr %a5 %t7 = mul i64 1, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t8 = call ptr @finch_alloc(i64 %t7) %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t8, i64 0 store { ptr, i64, i64 } %t6, ptr %t9 %t10 = insertvalue { ptr, i64, i64 } undef, ptr %t8, 0 %t11 = insertvalue { ptr, i64, i64 } %t10, i64 1, 1 %t12 = insertvalue { ptr, i64, i64 } %t11, i64 1, 2 store { ptr, i64, i64 } %t12, ptr %a13 %t14 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 5 store i64 0, ptr %a15 br label %each.cond9755 each.cond9755: %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t14, i32 0, i32 1 %t17 = load i64, ptr %t16 %t18 = load i64, ptr %a15 %t19 = icmp slt i64 %t18, %t17 br i1 %t19, label %each.body9756, label %each.end9758 each.body9756: %t20 = load ptr, ptr %t14 %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i64 %t18 %t22 = load { ptr, i64, i64 }, ptr %t21 store { ptr, i64, i64 } %t22, ptr %a23 %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %a13, i32 0, i32 1 %t25 = load { ptr, i64, i64 }, ptr %a23 store i64 -1, ptr %a26 %t27 = load i64, ptr %t24 %t28 = load ptr, ptr %a13 store i64 0, ptr %a29 br label %find.cond9759 find.cond9759: %t30 = load i64, ptr %a29 %t31 = icmp slt i64 %t30, %t27 br i1 %t31, label %find.body9760, label %find.end9763 find.body9760: %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %t28, i64 %t30 %t33 = load { ptr, i64, i64 }, ptr %t32 store { ptr, i64, i64 } %t33, ptr %a34 store { ptr, i64, i64 } %t25, ptr %a35 %t36 = call i32 @finch_str_eq(ptr %a34, ptr %a35) %t37 = icmp ne i32 %t36, 0 br i1 %t37, label %find.hit9761, label %find.next9762 find.hit9761: store i64 %t30, ptr %a26 br label %find.end9763 find.next9762: %t38 = add i64 %t30, 1 store i64 %t38, ptr %a29 br label %find.cond9759 find.end9763: %t39 = load i64, ptr %a26 %t40 = icmp sge i64 %t39, 0 %t41 = xor i1 %t40, true br i1 %t41, label %then9764, label %endif9766 then9764: %t42 = getelementptr inbounds { ptr, i64, i64 }, ptr %a13, i32 0, i32 1 %t43 = load { ptr, i64, i64 }, ptr %a23 store { ptr, i64, i64 } %t43, ptr %a44 call void @finch_str_copy(ptr %a45, ptr %a44) %t46 = load { ptr, i64, i64 }, ptr %a45 %t47 = load i64, ptr %t42 %t48 = add i64 %t47, 1 call void @finch_arr_reserve(ptr %a13, i64 %t48, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t49 = load ptr, ptr %a13 %t50 = getelementptr inbounds { ptr, i64, i64 }, ptr %t49, i64 %t47 store { ptr, i64, i64 } %t46, ptr %t50 store i64 %t48, ptr %t42 br label %endif9766 endif9766: br label %each.step9757 each.step9757: %t51 = load i64, ptr %a15 %t52 = add i64 %t51, 1 store i64 %t52, ptr %a15 br label %each.cond9755 each.end9758: store { ptr, i64, i64 } zeroinitializer, ptr %a53 store i64 0, ptr %a54 br label %each.cond9767 each.cond9767: %t55 = getelementptr inbounds { ptr, i64, i64 }, ptr %a13, i32 0, i32 1 %t56 = load i64, ptr %t55 %t57 = load i64, ptr %a54 %t58 = icmp slt i64 %t57, %t56 br i1 %t58, label %each.body9768, label %each.end9770 each.body9768: %t59 = load ptr, ptr %a13 %t60 = getelementptr inbounds { ptr, i64, i64 }, ptr %t59, i64 %t57 %t61 = load { ptr, i64, i64 }, ptr %t60 store { ptr, i64, i64 } %t61, ptr %a62 %t63 = call %S.json.Json @finch.json.new_list() store %S.json.Json %t63, ptr %a64 %t65 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 6 %t66 = getelementptr inbounds %S.lsp.Diag, ptr %t65, i32 0, i32 0 %t67 = load i1, ptr %t66 br label %logic.from9771 logic.from9771: br i1 %t67, label %logic.rhs9772, label %logic.end9773 logic.rhs9772: %t68 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 6 %t69 = getelementptr inbounds %S.lsp.Diag, ptr %t68, i32 0, i32 1 %t70 = load { ptr, i64, i64 }, ptr %t69 %t71 = load { ptr, i64, i64 }, ptr %a62 store { ptr, i64, i64 } %t70, ptr %a72 store { ptr, i64, i64 } %t71, ptr %a73 %t74 = call i32 @finch_str_eq(ptr %a72, ptr %a73) %t75 = icmp ne i32 %t74, 0 br label %logic.rend9774 logic.rend9774: br label %logic.end9773 logic.end9773: %t76 = phi i1 [ false, %logic.from9771 ], [ %t75, %logic.rend9774 ] br i1 %t76, label %then9775, label %endif9777 then9775: %t77 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 6 %t78 = getelementptr inbounds %S.lsp.Diag, ptr %t77, i32 0, i32 2 %t79 = load i64, ptr %t78 %t80 = sub i64 %t79, 1 store i64 %t80, ptr %a81 %t82 = load i64, ptr %a81 %t83 = icmp slt i64 %t82, 0 br i1 %t83, label %then9778, label %endif9780 then9778: store i64 0, ptr %a81 br label %endif9780 endif9780: %t84 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 6 %t85 = getelementptr inbounds %S.lsp.Diag, ptr %t84, i32 0, i32 3 %t86 = load i64, ptr %t85 %t87 = sub i64 %t86, 1 store i64 %t87, ptr %a88 %t89 = load i64, ptr %a88 %t90 = icmp slt i64 %t89, 0 br i1 %t90, label %then9781, label %endif9783 then9781: store i64 0, ptr %a88 br label %endif9783 endif9783: %t91 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t91, ptr %a92 %t93 = load i64, ptr %a81 %t94 = load i64, ptr %a88 %t95 = load i64, ptr %a88 %t96 = add i64 %t95, 1 %t97 = call %S.json.Json @finch.lsp.range(i64 %t93, i64 %t94, i64 %t96) call void @finch.json.Json.set(ptr %a92, { ptr, i64, i64 } { ptr @.str.6648, i64 5, i64 0 }, %S.json.Json %t97) %t98 = call %S.json.Json @finch.lsp.num(i64 1) call void @finch.json.Json.set(ptr %a92, { ptr, i64, i64 } { ptr @.str.6649, i64 8, i64 0 }, %S.json.Json %t98) %t99 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.6651, i64 5, i64 0 }) call void @finch.json.Json.set(ptr %a92, { ptr, i64, i64 } { ptr @.str.6650, i64 6, i64 0 }, %S.json.Json %t99) %t100 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 6 %t101 = getelementptr inbounds %S.lsp.Diag, ptr %t100, i32 0, i32 4 %t102 = load { ptr, i64, i64 }, ptr %t101 %t103 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t102) call void @finch.json.Json.set(ptr %a92, { ptr, i64, i64 } { ptr @.str.6652, i64 7, i64 0 }, %S.json.Json %t103) %t104 = load %S.json.Json, ptr %a92 call void @finch.json.Json.push(ptr %a64, %S.json.Json %t104) %t105 = getelementptr inbounds { ptr, i64, i64 }, ptr %a53, i32 0, i32 1 %t106 = load { ptr, i64, i64 }, ptr %a62 store { ptr, i64, i64 } %t106, ptr %a107 call void @finch_str_copy(ptr %a108, ptr %a107) %t109 = load { ptr, i64, i64 }, ptr %a108 %t110 = load i64, ptr %t105 %t111 = add i64 %t110, 1 call void @finch_arr_reserve(ptr %a53, i64 %t111, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t112 = load ptr, ptr %a53 %t113 = getelementptr inbounds { ptr, i64, i64 }, ptr %t112, i64 %t110 store { ptr, i64, i64 } %t109, ptr %t113 store i64 %t111, ptr %t105 br label %endif9777 endif9777: %t114 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t114, ptr %a115 %t116 = load { ptr, i64, i64 }, ptr %a62 %t117 = call { ptr, i64, i64 } @finch.lsp.pathToUri({ ptr, i64, i64 } %t116) %t118 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t117) call void @finch.json.Json.set(ptr %a115, { ptr, i64, i64 } { ptr @.str.6653, i64 3, i64 0 }, %S.json.Json %t118) %t119 = load %S.json.Json, ptr %a64 call void @finch.json.Json.set(ptr %a115, { ptr, i64, i64 } { ptr @.str.6654, i64 11, i64 0 }, %S.json.Json %t119) %t120 = load %S.json.Json, ptr %a115 call void @finch.lsp.notify({ ptr, i64, i64 } { ptr @.str.6655, i64 31, i64 0 }, %S.json.Json %t120) br label %each.step9769 each.step9769: %t121 = load i64, ptr %a54 %t122 = add i64 %t121, 1 store i64 %t122, ptr %a54 br label %each.cond9767 each.end9770: %t123 = load { ptr, i64, i64 }, ptr %a53 %t124 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 5 store { ptr, i64, i64 } %t123, ptr %a125 call void @finch.copy.arr_str(ptr %a126, ptr %a125) %t127 = load { ptr, i64, i64 }, ptr %a126 store { ptr, i64, i64 } %t127, ptr %t124 ret void } define internal i64 @finch.lsp.refAt(%S.lsp.Analysis %p0, { ptr, i64, i64 } %p1, i64 %p2, i64 %p3) { entry: %a1 = alloca %S.lsp.Analysis, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca i64, align 16 %a4 = alloca i64, align 16 %a8 = alloca i64, align 16 %a19 = alloca %S.lsp.Ref, align 16 %a20 = alloca %S.lsp.Ref, align 16 %a22 = alloca %S.lsp.Ref, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 store %S.lsp.Analysis %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store i64 %p2, ptr %a3 store i64 %p3, ptr %a4 %t5 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 0 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 %t7 = load i64, ptr %t6 store i64 0, ptr %a8 br label %for.cond9784 for.cond9784: %t9 = load i64, ptr %a8 %t10 = icmp slt i64 %t9, %t7 br i1 %t10, label %for.body9785, label %for.end9787 for.body9785: %t11 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 0 %t12 = load i64, ptr %a8 %t13 = load { ptr, i64, i64 }, ptr %t11 %t14 = extractvalue { ptr, i64, i64 } %t13, 1 %t15 = icmp uge i64 %t12, %t14 br i1 %t15, label %range9788, label %inrange9789 range9788: call void @finch_panic_index(ptr @.str.6656, i64 397, i64 %t12, i64 %t14) unreachable inrange9789: %t16 = extractvalue { ptr, i64, i64 } %t13, 0 %t17 = getelementptr inbounds %S.lsp.Ref, ptr %t16, i64 %t12 %t18 = load %S.lsp.Ref, ptr %t17 store %S.lsp.Ref %t18, ptr %a19 call void @finch.copy.S_lsp_Ref(ptr %a20, ptr %a19) %t21 = load %S.lsp.Ref, ptr %a20 store %S.lsp.Ref %t21, ptr %a22 %t23 = getelementptr inbounds %S.lsp.Ref, ptr %a22, i32 0, i32 1 %t24 = load i64, ptr %t23 %t25 = load i64, ptr %a3 %t26 = icmp eq i64 %t24, %t25 br label %logic.from9790 logic.from9790: br i1 %t26, label %logic.rhs9791, label %logic.end9792 logic.rhs9791: %t27 = load i64, ptr %a4 %t28 = getelementptr inbounds %S.lsp.Ref, ptr %a22, i32 0, i32 2 %t29 = load i64, ptr %t28 %t30 = icmp sge i64 %t27, %t29 br label %logic.rend9793 logic.rend9793: br label %logic.end9792 logic.end9792: %t31 = phi i1 [ false, %logic.from9790 ], [ %t30, %logic.rend9793 ] br label %logic.from9794 logic.from9794: br i1 %t31, label %logic.rhs9795, label %logic.end9796 logic.rhs9795: %t32 = load i64, ptr %a4 %t33 = getelementptr inbounds %S.lsp.Ref, ptr %a22, i32 0, i32 2 %t34 = load i64, ptr %t33 %t35 = getelementptr inbounds %S.lsp.Ref, ptr %a22, i32 0, i32 3 %t36 = load i64, ptr %t35 %t37 = add i64 %t34, %t36 %t38 = icmp sle i64 %t32, %t37 br label %logic.rend9797 logic.rend9797: br label %logic.end9796 logic.end9796: %t39 = phi i1 [ false, %logic.from9794 ], [ %t38, %logic.rend9797 ] br label %logic.from9798 logic.from9798: br i1 %t39, label %logic.rhs9799, label %logic.end9800 logic.rhs9799: %t40 = getelementptr inbounds %S.lsp.Ref, ptr %a22, i32 0, i32 0 %t41 = load { ptr, i64, i64 }, ptr %t40 %t42 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t41, ptr %a43 store { ptr, i64, i64 } %t42, ptr %a44 %t45 = call i32 @finch_str_eq(ptr %a43, ptr %a44) %t46 = icmp ne i32 %t45, 0 br label %logic.rend9801 logic.rend9801: br label %logic.end9800 logic.end9800: %t47 = phi i1 [ false, %logic.from9798 ], [ %t46, %logic.rend9801 ] br i1 %t47, label %then9802, label %endif9804 then9802: %t48 = load i64, ptr %a8 ret i64 %t48 endif9804: br label %for.step9786 for.step9786: %t49 = load i64, ptr %a8 %t50 = add i64 %t49, 1 store i64 %t50, ptr %a8 br label %for.cond9784 for.end9787: ret i64 -1 } define internal %S.json.Json @finch.lsp.hoverAt(%S.lsp.Analysis %p0, { ptr, i64, i64 } %p1, i64 %p2, i64 %p3) { entry: %a1 = alloca %S.lsp.Analysis, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca i64, align 16 %a4 = alloca i64, align 16 %a10 = alloca i64, align 16 %a15 = alloca %S.json.Json, align 16 %a28 = alloca %S.json.Json, align 16 %a31 = alloca %S.json.Json, align 16 %a32 = alloca %S.json.Json, align 16 store %S.lsp.Analysis %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store i64 %p2, ptr %a3 store i64 %p3, ptr %a4 %t5 = load %S.lsp.Analysis, ptr %a1 %t6 = load { ptr, i64, i64 }, ptr %a2 %t7 = load i64, ptr %a3 %t8 = load i64, ptr %a4 %t9 = call i64 @finch.lsp.refAt(%S.lsp.Analysis %t5, { ptr, i64, i64 } %t6, i64 %t7, i64 %t8) store i64 %t9, ptr %a10 %t11 = load i64, ptr %a10 %t12 = icmp slt i64 %t11, 0 br i1 %t12, label %then9805, label %endif9807 then9805: %t13 = call %S.json.Json @finch.json.new_null() ret %S.json.Json %t13 endif9807: %t14 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t14, ptr %a15 %t16 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.6658, i64 8, i64 0 }) call void @finch.json.Json.set(ptr %a15, { ptr, i64, i64 } { ptr @.str.6657, i64 4, i64 0 }, %S.json.Json %t16) %t17 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 0 %t18 = load i64, ptr %a10 %t19 = load { ptr, i64, i64 }, ptr %t17 %t20 = extractvalue { ptr, i64, i64 } %t19, 1 %t21 = icmp uge i64 %t18, %t20 br i1 %t21, label %range9808, label %inrange9809 range9808: call void @finch_panic_index(ptr @.str.6660, i64 412, i64 %t18, i64 %t20) unreachable inrange9809: %t22 = extractvalue { ptr, i64, i64 } %t19, 0 %t23 = getelementptr inbounds %S.lsp.Ref, ptr %t22, i64 %t18 %t24 = getelementptr inbounds %S.lsp.Ref, ptr %t23, i32 0, i32 7 %t25 = load { ptr, i64, i64 }, ptr %t24 %t26 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t25) call void @finch.json.Json.set(ptr %a15, { ptr, i64, i64 } { ptr @.str.6659, i64 5, i64 0 }, %S.json.Json %t26) %t27 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t27, ptr %a28 %t29 = load %S.json.Json, ptr %a15 call void @finch.json.Json.set(ptr %a28, { ptr, i64, i64 } { ptr @.str.6661, i64 8, i64 0 }, %S.json.Json %t29) %t30 = load %S.json.Json, ptr %a28 store %S.json.Json %t30, ptr %a31 call void @finch.copy.S_json_Json(ptr %a32, ptr %a31) %t33 = load %S.json.Json, ptr %a32 ret %S.json.Json %t33 } define internal %S.json.Json @finch.lsp.definitionAt(%S.lsp.Analysis %p0, { ptr, i64, i64 } %p1, i64 %p2, i64 %p3) { entry: %a1 = alloca %S.lsp.Analysis, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca i64, align 16 %a4 = alloca i64, align 16 %a10 = alloca i64, align 16 %a34 = alloca %S.lsp.Ref, align 16 %a35 = alloca %S.lsp.Ref, align 16 %a37 = alloca %S.lsp.Ref, align 16 %a39 = alloca %S.json.Json, align 16 %a55 = alloca %S.json.Json, align 16 %a56 = alloca %S.json.Json, align 16 store %S.lsp.Analysis %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store i64 %p2, ptr %a3 store i64 %p3, ptr %a4 %t5 = load %S.lsp.Analysis, ptr %a1 %t6 = load { ptr, i64, i64 }, ptr %a2 %t7 = load i64, ptr %a3 %t8 = load i64, ptr %a4 %t9 = call i64 @finch.lsp.refAt(%S.lsp.Analysis %t5, { ptr, i64, i64 } %t6, i64 %t7, i64 %t8) store i64 %t9, ptr %a10 %t11 = load i64, ptr %a10 %t12 = icmp slt i64 %t11, 0 br label %logic.from9810 logic.from9810: br i1 %t12, label %logic.end9812, label %logic.rhs9811 logic.rhs9811: %t13 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 0 %t14 = load i64, ptr %a10 %t15 = load { ptr, i64, i64 }, ptr %t13 %t16 = extractvalue { ptr, i64, i64 } %t15, 1 %t17 = icmp uge i64 %t14, %t16 br i1 %t17, label %range9813, label %inrange9814 range9813: call void @finch_panic_index(ptr @.str.6662, i64 420, i64 %t14, i64 %t16) unreachable inrange9814: %t18 = extractvalue { ptr, i64, i64 } %t15, 0 %t19 = getelementptr inbounds %S.lsp.Ref, ptr %t18, i64 %t14 %t20 = getelementptr inbounds %S.lsp.Ref, ptr %t19, i32 0, i32 4 %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i32 0, i32 1 %t22 = load i64, ptr %t21 %t23 = icmp eq i64 %t22, 0 br label %logic.rend9815 logic.rend9815: br label %logic.end9812 logic.end9812: %t24 = phi i1 [ true, %logic.from9810 ], [ %t23, %logic.rend9815 ] br i1 %t24, label %then9816, label %endif9818 then9816: %t25 = call %S.json.Json @finch.json.new_null() ret %S.json.Json %t25 endif9818: %t26 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 0 %t27 = load i64, ptr %a10 %t28 = load { ptr, i64, i64 }, ptr %t26 %t29 = extractvalue { ptr, i64, i64 } %t28, 1 %t30 = icmp uge i64 %t27, %t29 br i1 %t30, label %range9819, label %inrange9820 range9819: call void @finch_panic_index(ptr @.str.6663, i64 423, i64 %t27, i64 %t29) unreachable inrange9820: %t31 = extractvalue { ptr, i64, i64 } %t28, 0 %t32 = getelementptr inbounds %S.lsp.Ref, ptr %t31, i64 %t27 %t33 = load %S.lsp.Ref, ptr %t32 store %S.lsp.Ref %t33, ptr %a34 call void @finch.copy.S_lsp_Ref(ptr %a35, ptr %a34) %t36 = load %S.lsp.Ref, ptr %a35 store %S.lsp.Ref %t36, ptr %a37 %t38 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t38, ptr %a39 %t40 = getelementptr inbounds %S.lsp.Ref, ptr %a37, i32 0, i32 4 %t41 = load { ptr, i64, i64 }, ptr %t40 %t42 = call { ptr, i64, i64 } @finch.lsp.pathToUri({ ptr, i64, i64 } %t41) %t43 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t42) call void @finch.json.Json.set(ptr %a39, { ptr, i64, i64 } { ptr @.str.6664, i64 3, i64 0 }, %S.json.Json %t43) %t44 = getelementptr inbounds %S.lsp.Ref, ptr %a37, i32 0, i32 5 %t45 = load i64, ptr %t44 %t46 = sub i64 %t45, 1 %t47 = getelementptr inbounds %S.lsp.Ref, ptr %a37, i32 0, i32 6 %t48 = load i64, ptr %t47 %t49 = sub i64 %t48, 1 %t50 = getelementptr inbounds %S.lsp.Ref, ptr %a37, i32 0, i32 6 %t51 = load i64, ptr %t50 %t52 = sub i64 %t51, 1 %t53 = call %S.json.Json @finch.lsp.range(i64 %t46, i64 %t49, i64 %t52) call void @finch.json.Json.set(ptr %a39, { ptr, i64, i64 } { ptr @.str.6665, i64 5, i64 0 }, %S.json.Json %t53) %t54 = load %S.json.Json, ptr %a39 store %S.json.Json %t54, ptr %a55 call void @finch.copy.S_json_Json(ptr %a56, ptr %a55) %t57 = load %S.json.Json, ptr %a56 ret %S.json.Json %t57 } define internal %S.json.Json @finch.lsp.symbolsOf(%S.lsp.Analysis %p0, { ptr, i64, i64 } %p1) { entry: %a1 = alloca %S.lsp.Analysis, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca %S.json.Json, align 16 %a6 = alloca i64, align 16 %a14 = alloca %S.lsp.FnRec, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca i64, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a42 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca i64, align 16 %a65 = alloca %S.lsp.StructRec, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca i64, align 16 %a98 = alloca %S.lsp.EnumRec, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca { ptr, i64, i64 }, align 16 %a123 = alloca %S.json.Json, align 16 %a124 = alloca %S.json.Json, align 16 store %S.lsp.Analysis %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 %t3 = call %S.json.Json @finch.json.new_list() store %S.json.Json %t3, ptr %a4 %t5 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 2 store i64 0, ptr %a6 br label %each.cond9821 each.cond9821: %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 %t8 = load i64, ptr %t7 %t9 = load i64, ptr %a6 %t10 = icmp slt i64 %t9, %t8 br i1 %t10, label %each.body9822, label %each.end9824 each.body9822: %t11 = load ptr, ptr %t5 %t12 = getelementptr inbounds %S.lsp.FnRec, ptr %t11, i64 %t9 %t13 = load %S.lsp.FnRec, ptr %t12 store %S.lsp.FnRec %t13, ptr %a14 %t15 = getelementptr inbounds %S.lsp.FnRec, ptr %a14, i32 0, i32 3 %t16 = load { ptr, i64, i64 }, ptr %t15 %t17 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t16, ptr %a18 store { ptr, i64, i64 } %t17, ptr %a19 %t20 = call i32 @finch_str_eq(ptr %a18, ptr %a19) %t21 = icmp eq i32 %t20, 0 br i1 %t21, label %then9825, label %endif9827 then9825: br label %each.step9823 endif9827: store i64 12, ptr %a22 %t23 = getelementptr inbounds %S.lsp.FnRec, ptr %a14, i32 0, i32 1 %t24 = load { ptr, i64, i64 }, ptr %t23 store { ptr, i64, i64 } %t24, ptr %a25 call void @finch_str_copy(ptr %a26, ptr %a25) %t27 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } %t27, ptr %a28 %t29 = getelementptr inbounds %S.lsp.FnRec, ptr %a14, i32 0, i32 2 %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i32 0, i32 1 %t31 = load i64, ptr %t30 %t32 = icmp sgt i64 %t31, 0 br i1 %t32, label %then9828, label %endif9830 then9828: store i64 6, ptr %a22 %t33 = getelementptr inbounds %S.lsp.FnRec, ptr %a14, i32 0, i32 2 %t34 = load { ptr, i64, i64 }, ptr %t33 store { ptr, i64, i64 } %t34, ptr %a36 store { ptr, i64, i64 } { ptr @.str.6666, i64 1, i64 0 }, ptr %a37 call void @finch_str_concat(ptr %a35, ptr %a36, ptr %a37) %t38 = load { ptr, i64, i64 }, ptr %a35 %t39 = getelementptr inbounds %S.lsp.FnRec, ptr %a14, i32 0, i32 1 %t40 = load { ptr, i64, i64 }, ptr %t39 store { ptr, i64, i64 } %t38, ptr %a42 store { ptr, i64, i64 } %t40, ptr %a43 call void @finch_str_concat(ptr %a41, ptr %a42, ptr %a43) %t44 = load { ptr, i64, i64 }, ptr %a41 store { ptr, i64, i64 } %t44, ptr %a28 br label %endif9830 endif9830: %t45 = load { ptr, i64, i64 }, ptr %a28 %t46 = load i64, ptr %a22 %t47 = getelementptr inbounds %S.lsp.FnRec, ptr %a14, i32 0, i32 4 %t48 = load i64, ptr %t47 %t49 = getelementptr inbounds %S.lsp.FnRec, ptr %a14, i32 0, i32 5 %t50 = load i64, ptr %t49 %t51 = getelementptr inbounds %S.lsp.FnRec, ptr %a14, i32 0, i32 6 %t52 = load i64, ptr %t51 %t53 = call %S.json.Json @finch.lsp.symbol({ ptr, i64, i64 } %t45, i64 %t46, i64 %t48, i64 %t50, i64 %t52) call void @finch.json.Json.push(ptr %a4, %S.json.Json %t53) br label %each.step9823 each.step9823: %t54 = load i64, ptr %a6 %t55 = add i64 %t54, 1 store i64 %t55, ptr %a6 br label %each.cond9821 each.end9824: %t56 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 3 store i64 0, ptr %a57 br label %each.cond9831 each.cond9831: %t58 = getelementptr inbounds { ptr, i64, i64 }, ptr %t56, i32 0, i32 1 %t59 = load i64, ptr %t58 %t60 = load i64, ptr %a57 %t61 = icmp slt i64 %t60, %t59 br i1 %t61, label %each.body9832, label %each.end9834 each.body9832: %t62 = load ptr, ptr %t56 %t63 = getelementptr inbounds %S.lsp.StructRec, ptr %t62, i64 %t60 %t64 = load %S.lsp.StructRec, ptr %t63 store %S.lsp.StructRec %t64, ptr %a65 %t66 = getelementptr inbounds %S.lsp.StructRec, ptr %a65, i32 0, i32 2 %t67 = load { ptr, i64, i64 }, ptr %t66 %t68 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t67, ptr %a69 store { ptr, i64, i64 } %t68, ptr %a70 %t71 = call i32 @finch_str_eq(ptr %a69, ptr %a70) %t72 = icmp ne i32 %t71, 0 br i1 %t72, label %then9835, label %endif9837 then9835: %t73 = getelementptr inbounds %S.lsp.StructRec, ptr %a65, i32 0, i32 1 %t74 = load { ptr, i64, i64 }, ptr %t73 %t75 = getelementptr inbounds %S.lsp.StructRec, ptr %a65, i32 0, i32 3 %t76 = load i64, ptr %t75 %t77 = getelementptr inbounds %S.lsp.StructRec, ptr %a65, i32 0, i32 4 %t78 = load i64, ptr %t77 %t79 = getelementptr inbounds %S.lsp.StructRec, ptr %a65, i32 0, i32 3 %t80 = load i64, ptr %t79 %t81 = getelementptr inbounds %S.lsp.StructRec, ptr %a65, i32 0, i32 5 %t82 = getelementptr inbounds { ptr, i64, i64 }, ptr %t81, i32 0, i32 1 %t83 = load i64, ptr %t82 %t84 = add i64 %t80, %t83 %t85 = add i64 %t84, 1 %t86 = call %S.json.Json @finch.lsp.symbol({ ptr, i64, i64 } %t74, i64 23, i64 %t76, i64 %t78, i64 %t85) call void @finch.json.Json.push(ptr %a4, %S.json.Json %t86) br label %endif9837 endif9837: br label %each.step9833 each.step9833: %t87 = load i64, ptr %a57 %t88 = add i64 %t87, 1 store i64 %t88, ptr %a57 br label %each.cond9831 each.end9834: %t89 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 4 store i64 0, ptr %a90 br label %each.cond9838 each.cond9838: %t91 = getelementptr inbounds { ptr, i64, i64 }, ptr %t89, i32 0, i32 1 %t92 = load i64, ptr %t91 %t93 = load i64, ptr %a90 %t94 = icmp slt i64 %t93, %t92 br i1 %t94, label %each.body9839, label %each.end9841 each.body9839: %t95 = load ptr, ptr %t89 %t96 = getelementptr inbounds %S.lsp.EnumRec, ptr %t95, i64 %t93 %t97 = load %S.lsp.EnumRec, ptr %t96 store %S.lsp.EnumRec %t97, ptr %a98 %t99 = getelementptr inbounds %S.lsp.EnumRec, ptr %a98, i32 0, i32 2 %t100 = load { ptr, i64, i64 }, ptr %t99 %t101 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t100, ptr %a102 store { ptr, i64, i64 } %t101, ptr %a103 %t104 = call i32 @finch_str_eq(ptr %a102, ptr %a103) %t105 = icmp ne i32 %t104, 0 br i1 %t105, label %then9842, label %endif9844 then9842: %t106 = getelementptr inbounds %S.lsp.EnumRec, ptr %a98, i32 0, i32 1 %t107 = load { ptr, i64, i64 }, ptr %t106 %t108 = getelementptr inbounds %S.lsp.EnumRec, ptr %a98, i32 0, i32 3 %t109 = load i64, ptr %t108 %t110 = getelementptr inbounds %S.lsp.EnumRec, ptr %a98, i32 0, i32 4 %t111 = load i64, ptr %t110 %t112 = getelementptr inbounds %S.lsp.EnumRec, ptr %a98, i32 0, i32 3 %t113 = load i64, ptr %t112 %t114 = getelementptr inbounds %S.lsp.EnumRec, ptr %a98, i32 0, i32 5 %t115 = getelementptr inbounds { ptr, i64, i64 }, ptr %t114, i32 0, i32 1 %t116 = load i64, ptr %t115 %t117 = add i64 %t113, %t116 %t118 = add i64 %t117, 1 %t119 = call %S.json.Json @finch.lsp.symbol({ ptr, i64, i64 } %t107, i64 10, i64 %t109, i64 %t111, i64 %t118) call void @finch.json.Json.push(ptr %a4, %S.json.Json %t119) br label %endif9844 endif9844: br label %each.step9840 each.step9840: %t120 = load i64, ptr %a90 %t121 = add i64 %t120, 1 store i64 %t121, ptr %a90 br label %each.cond9838 each.end9841: %t122 = load %S.json.Json, ptr %a4 store %S.json.Json %t122, ptr %a123 call void @finch.copy.S_json_Json(ptr %a124, ptr %a123) %t125 = load %S.json.Json, ptr %a124 ret %S.json.Json %t125 } define internal %S.json.Json @finch.lsp.symbol({ ptr, i64, i64 } %p0, i64 %p1, i64 %p2, i64 %p3, i64 %p4) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a2 = alloca i64, align 16 %a3 = alloca i64, align 16 %a4 = alloca i64, align 16 %a5 = alloca i64, align 16 %a7 = alloca %S.json.Json, align 16 %a13 = alloca %S.json.Json, align 16 %a28 = alloca %S.json.Json, align 16 %a29 = alloca %S.json.Json, align 16 store { ptr, i64, i64 } %p0, ptr %a1 store i64 %p1, ptr %a2 store i64 %p2, ptr %a3 store i64 %p3, ptr %a4 store i64 %p4, ptr %a5 %t6 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t6, ptr %a7 %t8 = load { ptr, i64, i64 }, ptr %a1 %t9 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t8) call void @finch.json.Json.set(ptr %a7, { ptr, i64, i64 } { ptr @.str.6667, i64 4, i64 0 }, %S.json.Json %t9) %t10 = load i64, ptr %a2 %t11 = call %S.json.Json @finch.lsp.num(i64 %t10) call void @finch.json.Json.set(ptr %a7, { ptr, i64, i64 } { ptr @.str.6668, i64 4, i64 0 }, %S.json.Json %t11) %t12 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t12, ptr %a13 %t14 = load i64, ptr %a3 %t15 = sub i64 %t14, 1 %t16 = call %S.json.Json @finch.lsp.position(i64 %t15, i64 0) call void @finch.json.Json.set(ptr %a13, { ptr, i64, i64 } { ptr @.str.6669, i64 5, i64 0 }, %S.json.Json %t16) %t17 = load i64, ptr %a5 %t18 = call %S.json.Json @finch.lsp.position(i64 %t17, i64 0) call void @finch.json.Json.set(ptr %a13, { ptr, i64, i64 } { ptr @.str.6670, i64 3, i64 0 }, %S.json.Json %t18) %t19 = load %S.json.Json, ptr %a13 call void @finch.json.Json.set(ptr %a7, { ptr, i64, i64 } { ptr @.str.6671, i64 5, i64 0 }, %S.json.Json %t19) %t20 = load i64, ptr %a3 %t21 = sub i64 %t20, 1 %t22 = load i64, ptr %a4 %t23 = sub i64 %t22, 1 %t24 = load i64, ptr %a4 %t25 = sub i64 %t24, 1 %t26 = call %S.json.Json @finch.lsp.range(i64 %t21, i64 %t23, i64 %t25) call void @finch.json.Json.set(ptr %a7, { ptr, i64, i64 } { ptr @.str.6672, i64 14, i64 0 }, %S.json.Json %t26) %t27 = load %S.json.Json, ptr %a7 store %S.json.Json %t27, ptr %a28 call void @finch.copy.S_json_Json(ptr %a29, ptr %a28) %t30 = load %S.json.Json, ptr %a29 ret %S.json.Json %t30 } define internal %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %p0, i64 %p1, { ptr, i64, i64 } %p2, { ptr, i64, i64 } %p3) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a2 = alloca i64, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca %S.json.Json, align 16 %a20 = alloca %S.json.Json, align 16 %a26 = alloca %S.json.Json, align 16 %a27 = alloca %S.json.Json, align 16 store { ptr, i64, i64 } %p0, ptr %a1 store i64 %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 store { ptr, i64, i64 } %p3, ptr %a4 %t5 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t5, ptr %a6 %t7 = load { ptr, i64, i64 }, ptr %a1 %t8 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t7) call void @finch.json.Json.set(ptr %a6, { ptr, i64, i64 } { ptr @.str.6673, i64 5, i64 0 }, %S.json.Json %t8) %t9 = load i64, ptr %a2 %t10 = call %S.json.Json @finch.lsp.num(i64 %t9) call void @finch.json.Json.set(ptr %a6, { ptr, i64, i64 } { ptr @.str.6674, i64 4, i64 0 }, %S.json.Json %t10) %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 %t12 = load i64, ptr %t11 %t13 = icmp sgt i64 %t12, 0 br i1 %t13, label %then9845, label %endif9847 then9845: %t14 = load { ptr, i64, i64 }, ptr %a3 %t15 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t14) call void @finch.json.Json.set(ptr %a6, { ptr, i64, i64 } { ptr @.str.6675, i64 6, i64 0 }, %S.json.Json %t15) br label %endif9847 endif9847: %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 %t17 = load i64, ptr %t16 %t18 = icmp sgt i64 %t17, 0 br i1 %t18, label %then9848, label %endif9850 then9848: %t19 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t19, ptr %a20 %t21 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.6677, i64 8, i64 0 }) call void @finch.json.Json.set(ptr %a20, { ptr, i64, i64 } { ptr @.str.6676, i64 4, i64 0 }, %S.json.Json %t21) %t22 = load { ptr, i64, i64 }, ptr %a4 %t23 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t22) call void @finch.json.Json.set(ptr %a20, { ptr, i64, i64 } { ptr @.str.6678, i64 5, i64 0 }, %S.json.Json %t23) %t24 = load %S.json.Json, ptr %a20 call void @finch.json.Json.set(ptr %a6, { ptr, i64, i64 } { ptr @.str.6679, i64 13, i64 0 }, %S.json.Json %t24) br label %endif9850 endif9850: %t25 = load %S.json.Json, ptr %a6 store %S.json.Json %t25, ptr %a26 call void @finch.copy.S_json_Json(ptr %a27, ptr %a26) %t28 = load %S.json.Json, ptr %a27 ret %S.json.Json %t28 } define internal i1 @finch.lsp.isWordChar(i8 %p0) { entry: %a1 = alloca i8, align 16 store i8 %p0, ptr %a1 %t2 = load i8, ptr %a1 %t3 = icmp uge i8 %t2, 97 br label %logic.from9851 logic.from9851: br i1 %t3, label %logic.rhs9852, label %logic.end9853 logic.rhs9852: %t4 = load i8, ptr %a1 %t5 = icmp ule i8 %t4, 122 br label %logic.rend9854 logic.rend9854: br label %logic.end9853 logic.end9853: %t6 = phi i1 [ false, %logic.from9851 ], [ %t5, %logic.rend9854 ] br label %logic.from9855 logic.from9855: br i1 %t6, label %logic.end9857, label %logic.rhs9856 logic.rhs9856: %t7 = load i8, ptr %a1 %t8 = icmp uge i8 %t7, 65 br label %logic.from9858 logic.from9858: br i1 %t8, label %logic.rhs9859, label %logic.end9860 logic.rhs9859: %t9 = load i8, ptr %a1 %t10 = icmp ule i8 %t9, 90 br label %logic.rend9861 logic.rend9861: br label %logic.end9860 logic.end9860: %t11 = phi i1 [ false, %logic.from9858 ], [ %t10, %logic.rend9861 ] br label %logic.rend9862 logic.rend9862: br label %logic.end9857 logic.end9857: %t12 = phi i1 [ true, %logic.from9855 ], [ %t11, %logic.rend9862 ] br label %logic.from9863 logic.from9863: br i1 %t12, label %logic.end9865, label %logic.rhs9864 logic.rhs9864: %t13 = load i8, ptr %a1 %t14 = icmp uge i8 %t13, 48 br label %logic.from9866 logic.from9866: br i1 %t14, label %logic.rhs9867, label %logic.end9868 logic.rhs9867: %t15 = load i8, ptr %a1 %t16 = icmp ule i8 %t15, 57 br label %logic.rend9869 logic.rend9869: br label %logic.end9868 logic.end9868: %t17 = phi i1 [ false, %logic.from9866 ], [ %t16, %logic.rend9869 ] br label %logic.rend9870 logic.rend9870: br label %logic.end9865 logic.end9865: %t18 = phi i1 [ true, %logic.from9863 ], [ %t17, %logic.rend9870 ] br label %logic.from9871 logic.from9871: br i1 %t18, label %logic.end9873, label %logic.rhs9872 logic.rhs9872: %t19 = load i8, ptr %a1 %t20 = icmp eq i8 %t19, 95 br label %logic.rend9874 logic.rend9874: br label %logic.end9873 logic.end9873: %t21 = phi i1 [ true, %logic.from9871 ], [ %t20, %logic.rend9874 ] ret i1 %t21 } define internal void @finch.lsp.methodItems(ptr %p0, { ptr, i64, i64 } %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca i64, align 16 %a11 = alloca %S.docs.Doc, align 16 %a12 = alloca i64, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store i64 0, ptr %a3 br label %each.cond9875 each.cond9875: %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t5 = load i64, ptr %t4 %t6 = load i64, ptr %a3 %t7 = icmp slt i64 %t6, %t5 br i1 %t7, label %each.body9876, label %each.end9878 each.body9876: %t8 = load ptr, ptr %a2 %t9 = getelementptr inbounds %S.docs.Doc, ptr %t8, i64 %t6 %t10 = load %S.docs.Doc, ptr %t9 store %S.docs.Doc %t10, ptr %a11 store i64 2, ptr %a12 %t13 = getelementptr inbounds %S.docs.Doc, ptr %a11, i32 0, i32 1 %t14 = load { ptr, i64, i64 }, ptr %t13 store { ptr, i64, i64 } %t14, ptr %a15 store { ptr, i64, i64 } { ptr @.str.6681, i64 1, i64 0 }, ptr %a17 %t18 = call i32 @finch_str_starts(ptr %a15, ptr %a17) %t19 = icmp ne i32 %t18, 0 br i1 %t19, label %then9879, label %endif9881 then9879: store i64 5, ptr %a12 br label %endif9881 endif9881: %t20 = load ptr, ptr %a1 %t21 = icmp eq ptr %t20, null br i1 %t21, label %panic9882, label %ok9883 panic9882: call void @finch_panic(ptr @.str.6682, i64 497, ptr @.str.6683) unreachable ok9883: %t22 = getelementptr inbounds %S.docs.Doc, ptr %a11, i32 0, i32 0 %t23 = load { ptr, i64, i64 }, ptr %t22 %t24 = load i64, ptr %a12 %t25 = getelementptr inbounds %S.docs.Doc, ptr %a11, i32 0, i32 1 %t26 = load { ptr, i64, i64 }, ptr %t25 %t27 = getelementptr inbounds %S.docs.Doc, ptr %a11, i32 0, i32 2 %t28 = load { ptr, i64, i64 }, ptr %t27 %t29 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t23, i64 %t24, { ptr, i64, i64 } %t26, { ptr, i64, i64 } %t28) call void @finch.json.Json.push(ptr %t20, %S.json.Json %t29) br label %each.step9877 each.step9877: %t30 = load i64, ptr %a3 %t31 = add i64 %t30, 1 store i64 %t31, ptr %a3 br label %each.cond9875 each.end9878: ret void } define internal %S.lsp.VarRec @finch.lsp.varNamed(%S.lsp.Analysis %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, i64 %p3) { entry: %a1 = alloca %S.lsp.Analysis, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca i64, align 16 %a5 = alloca %S.lsp.VarRec, align 16 %a7 = alloca i64, align 16 %a15 = alloca %S.lsp.VarRec, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca %S.lsp.VarRec, align 16 %a44 = alloca %S.lsp.VarRec, align 16 %a49 = alloca %S.lsp.VarRec, align 16 %a50 = alloca %S.lsp.VarRec, align 16 store %S.lsp.Analysis %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 store i64 %p3, ptr %a4 store %S.lsp.VarRec zeroinitializer, ptr %a5 %t6 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 1 store i64 0, ptr %a7 br label %each.cond9884 each.cond9884: %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t6, i32 0, i32 1 %t9 = load i64, ptr %t8 %t10 = load i64, ptr %a7 %t11 = icmp slt i64 %t10, %t9 br i1 %t11, label %each.body9885, label %each.end9887 each.body9885: %t12 = load ptr, ptr %t6 %t13 = getelementptr inbounds %S.lsp.VarRec, ptr %t12, i64 %t10 %t14 = load %S.lsp.VarRec, ptr %t13 store %S.lsp.VarRec %t14, ptr %a15 %t16 = getelementptr inbounds %S.lsp.VarRec, ptr %a15, i32 0, i32 0 %t17 = load { ptr, i64, i64 }, ptr %t16 %t18 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t17, ptr %a19 store { ptr, i64, i64 } %t18, ptr %a20 %t21 = call i32 @finch_str_eq(ptr %a19, ptr %a20) %t22 = icmp ne i32 %t21, 0 br label %logic.from9888 logic.from9888: br i1 %t22, label %logic.rhs9889, label %logic.end9890 logic.rhs9889: %t23 = getelementptr inbounds %S.lsp.VarRec, ptr %a15, i32 0, i32 3 %t24 = load i64, ptr %t23 %t25 = load i64, ptr %a4 %t26 = icmp sle i64 %t24, %t25 br label %logic.rend9891 logic.rend9891: br label %logic.end9890 logic.end9890: %t27 = phi i1 [ false, %logic.from9888 ], [ %t26, %logic.rend9891 ] br label %logic.from9892 logic.from9892: br i1 %t27, label %logic.rhs9893, label %logic.end9894 logic.rhs9893: %t28 = load i64, ptr %a4 %t29 = getelementptr inbounds %S.lsp.VarRec, ptr %a15, i32 0, i32 7 %t30 = load i64, ptr %t29 %t31 = add i64 %t30, 1 %t32 = icmp sle i64 %t28, %t31 br label %logic.rend9895 logic.rend9895: br label %logic.end9894 logic.end9894: %t33 = phi i1 [ false, %logic.from9892 ], [ %t32, %logic.rend9895 ] br label %logic.from9896 logic.from9896: br i1 %t33, label %logic.rhs9897, label %logic.end9898 logic.rhs9897: %t34 = getelementptr inbounds %S.lsp.VarRec, ptr %a15, i32 0, i32 5 %t35 = load { ptr, i64, i64 }, ptr %t34 %t36 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t35, ptr %a37 store { ptr, i64, i64 } %t36, ptr %a38 %t39 = call i32 @finch_str_eq(ptr %a37, ptr %a38) %t40 = icmp ne i32 %t39, 0 br label %logic.rend9899 logic.rend9899: br label %logic.end9898 logic.end9898: %t41 = phi i1 [ false, %logic.from9896 ], [ %t40, %logic.rend9899 ] br i1 %t41, label %then9900, label %endif9902 then9900: %t42 = load %S.lsp.VarRec, ptr %a15 store %S.lsp.VarRec %t42, ptr %a43 call void @finch.copy.S_lsp_VarRec(ptr %a44, ptr %a43) %t45 = load %S.lsp.VarRec, ptr %a44 store %S.lsp.VarRec %t45, ptr %a5 br label %endif9902 endif9902: br label %each.step9886 each.step9886: %t46 = load i64, ptr %a7 %t47 = add i64 %t46, 1 store i64 %t47, ptr %a7 br label %each.cond9884 each.end9887: %t48 = load %S.lsp.VarRec, ptr %a5 store %S.lsp.VarRec %t48, ptr %a49 call void @finch.copy.S_lsp_VarRec(ptr %a50, ptr %a49) %t51 = load %S.lsp.VarRec, ptr %a50 ret %S.lsp.VarRec %t51 } define internal %S.json.Json @finch.lsp.completionAt(%S.lsp.Analysis %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, i64 %p3, i64 %p4) { entry: %a1 = alloca %S.lsp.Analysis, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca i64, align 16 %a5 = alloca i64, align 16 %a7 = alloca %S.json.Json, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca i64, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca i64, align 16 %a56 = alloca i1, align 16 %a60 = alloca i64, align 16 %a96 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 %a103 = alloca i1, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 %a106 = alloca { ptr, i64, i64 }, align 16 %a107 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca i64, align 16 %a113 = alloca { ptr, i64, i64 }, align 16 %a114 = alloca { ptr, i64, i64 }, align 16 %a120 = alloca i64, align 16 %a123 = alloca i64, align 16 %a128 = alloca { ptr, i64, i64 }, align 16 %a129 = alloca { ptr, i64, i64 }, align 16 %a136 = alloca i64, align 16 %a144 = alloca %S.lsp.FnRec, align 16 %a148 = alloca { ptr, i64, i64 }, align 16 %a149 = alloca { ptr, i64, i64 }, align 16 %a165 = alloca i64, align 16 %a173 = alloca %S.lsp.StructRec, align 16 %a177 = alloca { ptr, i64, i64 }, align 16 %a178 = alloca { ptr, i64, i64 }, align 16 %a185 = alloca { ptr, i64, i64 }, align 16 %a186 = alloca { ptr, i64, i64 }, align 16 %a187 = alloca { ptr, i64, i64 }, align 16 %a193 = alloca i64, align 16 %a201 = alloca %S.lsp.EnumRec, align 16 %a205 = alloca { ptr, i64, i64 }, align 16 %a206 = alloca { ptr, i64, i64 }, align 16 %a213 = alloca { ptr, i64, i64 }, align 16 %a214 = alloca { ptr, i64, i64 }, align 16 %a215 = alloca { ptr, i64, i64 }, align 16 %a223 = alloca i64, align 16 %a231 = alloca %S.lsp.EnumRec, align 16 %a235 = alloca { ptr, i64, i64 }, align 16 %a236 = alloca { ptr, i64, i64 }, align 16 %a245 = alloca { ptr, i64, i64 }, align 16 %a246 = alloca { ptr, i64, i64 }, align 16 %a252 = alloca i64, align 16 %a260 = alloca { ptr, i64, i64 }, align 16 %a264 = alloca { ptr, i64, i64 }, align 16 %a265 = alloca { ptr, i64, i64 }, align 16 %a266 = alloca { ptr, i64, i64 }, align 16 %a269 = alloca { ptr, i64, i64 }, align 16 %a270 = alloca { ptr, i64, i64 }, align 16 %a271 = alloca { ptr, i64, i64 }, align 16 %a286 = alloca { ptr, i64, i64 }, align 16 %a287 = alloca { ptr, i64, i64 }, align 16 %a289 = alloca { ptr, i64, i64 }, align 16 %a292 = alloca { ptr, i64, i64 }, align 16 %a293 = alloca { ptr, i64, i64 }, align 16 %a294 = alloca { ptr, i64, i64 }, align 16 %a299 = alloca { ptr, i64, i64 }, align 16 %a300 = alloca { ptr, i64, i64 }, align 16 %a306 = alloca { ptr, i64, i64 }, align 16 %a307 = alloca { ptr, i64, i64 }, align 16 %a312 = alloca { ptr, i64, i64 }, align 16 %a313 = alloca { ptr, i64, i64 }, align 16 %a314 = alloca { ptr, i64, i64 }, align 16 %a318 = alloca { ptr, i64, i64 }, align 16 %a319 = alloca { ptr, i64, i64 }, align 16 %a320 = alloca { ptr, i64, i64 }, align 16 %a325 = alloca { ptr, i64, i64 }, align 16 %a326 = alloca { ptr, i64, i64 }, align 16 %a332 = alloca { ptr, i64, i64 }, align 16 %a333 = alloca { ptr, i64, i64 }, align 16 %a334 = alloca { ptr, i64, i64 }, align 16 %a339 = alloca { ptr, i64, i64 }, align 16 %a340 = alloca { ptr, i64, i64 }, align 16 %a345 = alloca { ptr, i64, i64 }, align 16 %a346 = alloca { ptr, i64, i64 }, align 16 %a347 = alloca { ptr, i64, i64 }, align 16 %a352 = alloca { ptr, i64, i64 }, align 16 %a353 = alloca { ptr, i64, i64 }, align 16 %a355 = alloca { ptr, i64, i64 }, align 16 %a357 = alloca i64, align 16 %a365 = alloca %S.lsp.StructRec, align 16 %a369 = alloca { ptr, i64, i64 }, align 16 %a370 = alloca { ptr, i64, i64 }, align 16 %a376 = alloca i64, align 16 %a401 = alloca i64, align 16 %a409 = alloca %S.lsp.FnRec, align 16 %a413 = alloca { ptr, i64, i64 }, align 16 %a414 = alloca { ptr, i64, i64 }, align 16 %a426 = alloca %S.lsp.Names, align 16 %a428 = alloca i64, align 16 %a436 = alloca %S.lsp.VarRec, align 16 %a450 = alloca { ptr, i64, i64 }, align 16 %a451 = alloca { ptr, i64, i64 }, align 16 %a467 = alloca i64, align 16 %a475 = alloca %S.lsp.FnRec, align 16 %a482 = alloca { ptr, i64, i64 }, align 16 %a483 = alloca { ptr, i64, i64 }, align 16 %a499 = alloca i64, align 16 %a507 = alloca %S.lsp.StructRec, align 16 %a510 = alloca { ptr, i64, i64 }, align 16 %a511 = alloca { ptr, i64, i64 }, align 16 %a522 = alloca { ptr, i64, i64 }, align 16 %a523 = alloca { ptr, i64, i64 }, align 16 %a524 = alloca { ptr, i64, i64 }, align 16 %a530 = alloca i64, align 16 %a538 = alloca %S.lsp.EnumRec, align 16 %a541 = alloca { ptr, i64, i64 }, align 16 %a542 = alloca { ptr, i64, i64 }, align 16 %a553 = alloca { ptr, i64, i64 }, align 16 %a554 = alloca { ptr, i64, i64 }, align 16 %a555 = alloca { ptr, i64, i64 }, align 16 %a561 = alloca i64, align 16 %a569 = alloca { ptr, i64, i64 }, align 16 %a577 = alloca { ptr, i64, i64 }, align 16 %a578 = alloca i64, align 16 %a586 = alloca %S.docs.Doc, align 16 %a600 = alloca { ptr, i64, i64 }, align 16 %a601 = alloca i64, align 16 %a609 = alloca { ptr, i64, i64 }, align 16 %a617 = alloca { ptr, i64, i64 }, align 16 %a618 = alloca i64, align 16 %a626 = alloca { ptr, i64, i64 }, align 16 store %S.lsp.Analysis %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 store i64 %p3, ptr %a4 store i64 %p4, ptr %a5 %t6 = call %S.json.Json @finch.json.new_list() store %S.json.Json %t6, ptr %a7 %t8 = load { ptr, i64, i64 }, ptr %a2 %t9 = load i64, ptr %a4 %t10 = call { ptr, i64, i64 } @finch.lsp.lineOf({ ptr, i64, i64 } %t8, i64 %t9) store { ptr, i64, i64 } %t10, ptr %a11 %t12 = load i64, ptr %a5 %t13 = sub i64 %t12, 1 store i64 %t13, ptr %a14 %t15 = load i64, ptr %a14 %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %a11, i32 0, i32 1 %t17 = load i64, ptr %t16 %t18 = icmp sgt i64 %t15, %t17 br i1 %t18, label %then9903, label %endif9905 then9903: %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %a11, i32 0, i32 1 %t20 = load i64, ptr %t19 store i64 %t20, ptr %a14 br label %endif9905 endif9905: %t21 = load { ptr, i64, i64 }, ptr %a11 store { ptr, i64, i64 } %t21, ptr %a22 %t24 = load i64, ptr %a14 call void @finch_str_sub(ptr %a23, ptr %a22, i64 0, i64 %t24, ptr @.str.6684, i64 519) %t25 = load { ptr, i64, i64 }, ptr %a23 store { ptr, i64, i64 } %t25, ptr %a26 %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %a26, i32 0, i32 1 %t28 = load i64, ptr %t27 store i64 %t28, ptr %a29 br label %while.cond9906 while.cond9906: %t30 = load i64, ptr %a29 %t31 = icmp sgt i64 %t30, 0 br label %logic.from9909 logic.from9909: br i1 %t31, label %logic.rhs9910, label %logic.end9911 logic.rhs9910: %t32 = load i64, ptr %a29 %t33 = sub i64 %t32, 1 %t34 = load { ptr, i64, i64 }, ptr %a26 %t35 = extractvalue { ptr, i64, i64 } %t34, 1 %t36 = icmp uge i64 %t33, %t35 br i1 %t36, label %range9912, label %inrange9913 range9912: call void @finch_panic_index(ptr @.str.6685, i64 522, i64 %t33, i64 %t35) unreachable inrange9913: %t37 = extractvalue { ptr, i64, i64 } %t34, 0 %t38 = getelementptr inbounds i8, ptr %t37, i64 %t33 %t39 = load i8, ptr %t38 %t40 = call i1 @finch.lsp.isWordChar(i8 %t39) br label %logic.rend9914 logic.rend9914: br label %logic.end9911 logic.end9911: %t41 = phi i1 [ false, %logic.from9909 ], [ %t40, %logic.rend9914 ] br i1 %t41, label %while.body9907, label %while.end9908 while.body9907: %t42 = load i64, ptr %a29 %t43 = sub i64 %t42, 1 store i64 %t43, ptr %a29 br label %while.cond9906 while.end9908: %t44 = load i64, ptr %a29 %t45 = icmp sgt i64 %t44, 0 br label %logic.from9915 logic.from9915: br i1 %t45, label %logic.rhs9916, label %logic.end9917 logic.rhs9916: %t46 = load i64, ptr %a29 %t47 = sub i64 %t46, 1 %t48 = load { ptr, i64, i64 }, ptr %a26 %t49 = extractvalue { ptr, i64, i64 } %t48, 1 %t50 = icmp uge i64 %t47, %t49 br i1 %t50, label %range9918, label %inrange9919 range9918: call void @finch_panic_index(ptr @.str.6686, i64 525, i64 %t47, i64 %t49) unreachable inrange9919: %t51 = extractvalue { ptr, i64, i64 } %t48, 0 %t52 = getelementptr inbounds i8, ptr %t51, i64 %t47 %t53 = load i8, ptr %t52 %t54 = icmp eq i8 %t53, 46 br label %logic.rend9920 logic.rend9920: br label %logic.end9917 logic.end9917: %t55 = phi i1 [ false, %logic.from9915 ], [ %t54, %logic.rend9920 ] store i1 %t55, ptr %a56 %t57 = load i1, ptr %a56 br i1 %t57, label %then9921, label %endif9923 then9921: %t58 = load i64, ptr %a29 %t59 = sub i64 %t58, 1 store i64 %t59, ptr %a60 br label %while.cond9924 while.cond9924: %t61 = load i64, ptr %a60 %t62 = icmp sgt i64 %t61, 0 br label %logic.from9927 logic.from9927: br i1 %t62, label %logic.rhs9928, label %logic.end9929 logic.rhs9928: %t63 = load i64, ptr %a60 %t64 = sub i64 %t63, 1 %t65 = load { ptr, i64, i64 }, ptr %a26 %t66 = extractvalue { ptr, i64, i64 } %t65, 1 %t67 = icmp uge i64 %t64, %t66 br i1 %t67, label %range9930, label %inrange9931 range9930: call void @finch_panic_index(ptr @.str.6687, i64 528, i64 %t64, i64 %t66) unreachable inrange9931: %t68 = extractvalue { ptr, i64, i64 } %t65, 0 %t69 = getelementptr inbounds i8, ptr %t68, i64 %t64 %t70 = load i8, ptr %t69 %t71 = call i1 @finch.lsp.isWordChar(i8 %t70) br label %logic.from9932 logic.from9932: br i1 %t71, label %logic.end9934, label %logic.rhs9933 logic.rhs9933: %t72 = load i64, ptr %a60 %t73 = sub i64 %t72, 1 %t74 = load { ptr, i64, i64 }, ptr %a26 %t75 = extractvalue { ptr, i64, i64 } %t74, 1 %t76 = icmp uge i64 %t73, %t75 br i1 %t76, label %range9935, label %inrange9936 range9935: call void @finch_panic_index(ptr @.str.6688, i64 528, i64 %t73, i64 %t75) unreachable inrange9936: %t77 = extractvalue { ptr, i64, i64 } %t74, 0 %t78 = getelementptr inbounds i8, ptr %t77, i64 %t73 %t79 = load i8, ptr %t78 %t80 = icmp eq i8 %t79, 91 br label %logic.rend9937 logic.rend9937: br label %logic.end9934 logic.end9934: %t81 = phi i1 [ true, %logic.from9932 ], [ %t80, %logic.rend9937 ] br label %logic.from9938 logic.from9938: br i1 %t81, label %logic.end9940, label %logic.rhs9939 logic.rhs9939: %t82 = load i64, ptr %a60 %t83 = sub i64 %t82, 1 %t84 = load { ptr, i64, i64 }, ptr %a26 %t85 = extractvalue { ptr, i64, i64 } %t84, 1 %t86 = icmp uge i64 %t83, %t85 br i1 %t86, label %range9941, label %inrange9942 range9941: call void @finch_panic_index(ptr @.str.6689, i64 528, i64 %t83, i64 %t85) unreachable inrange9942: %t87 = extractvalue { ptr, i64, i64 } %t84, 0 %t88 = getelementptr inbounds i8, ptr %t87, i64 %t83 %t89 = load i8, ptr %t88 %t90 = icmp eq i8 %t89, 93 br label %logic.rend9943 logic.rend9943: br label %logic.end9940 logic.end9940: %t91 = phi i1 [ true, %logic.from9938 ], [ %t90, %logic.rend9943 ] br label %logic.rend9944 logic.rend9944: br label %logic.end9929 logic.end9929: %t92 = phi i1 [ false, %logic.from9927 ], [ %t91, %logic.rend9944 ] br i1 %t92, label %while.body9925, label %while.end9926 while.body9925: %t93 = load i64, ptr %a60 %t94 = sub i64 %t93, 1 store i64 %t94, ptr %a60 br label %while.cond9924 while.end9926: %t95 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } %t95, ptr %a96 %t98 = load i64, ptr %a60 %t99 = load i64, ptr %a29 %t100 = sub i64 %t99, 1 call void @finch_str_sub(ptr %a97, ptr %a96, i64 %t98, i64 %t100, ptr @.str.6690, i64 531) %t101 = load { ptr, i64, i64 }, ptr %a97 store { ptr, i64, i64 } %t101, ptr %a102 store i1 false, ptr %a103 %t104 = load { ptr, i64, i64 }, ptr %a102 store { ptr, i64, i64 } %t104, ptr %a105 store { ptr, i64, i64 } { ptr @.str.6692, i64 1, i64 0 }, ptr %a107 %t108 = call i64 @finch_str_find(ptr %a105, ptr %a107) store i64 %t108, ptr %a109 %t110 = load i64, ptr %a109 %t111 = icmp sge i64 %t110, 0 br i1 %t111, label %then9945, label %endif9947 then9945: %t112 = load { ptr, i64, i64 }, ptr %a102 store { ptr, i64, i64 } %t112, ptr %a113 %t115 = load i64, ptr %a109 call void @finch_str_sub(ptr %a114, ptr %a113, i64 0, i64 %t115, ptr @.str.6693, i64 535) %t116 = load { ptr, i64, i64 }, ptr %a114 store { ptr, i64, i64 } %t116, ptr %a102 store i1 true, ptr %a103 br label %endif9947 endif9947: %t117 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 5 %t118 = getelementptr inbounds { ptr, i64, i64 }, ptr %t117, i32 0, i32 1 %t119 = load { ptr, i64, i64 }, ptr %a102 store i64 -1, ptr %a120 %t121 = load i64, ptr %t118 %t122 = load ptr, ptr %t117 store i64 0, ptr %a123 br label %find.cond9948 find.cond9948: %t124 = load i64, ptr %a123 %t125 = icmp slt i64 %t124, %t121 br i1 %t125, label %find.body9949, label %find.end9952 find.body9949: %t126 = getelementptr inbounds { ptr, i64, i64 }, ptr %t122, i64 %t124 %t127 = load { ptr, i64, i64 }, ptr %t126 store { ptr, i64, i64 } %t127, ptr %a128 store { ptr, i64, i64 } %t119, ptr %a129 %t130 = call i32 @finch_str_eq(ptr %a128, ptr %a129) %t131 = icmp ne i32 %t130, 0 br i1 %t131, label %find.hit9950, label %find.next9951 find.hit9950: store i64 %t124, ptr %a120 br label %find.end9952 find.next9951: %t132 = add i64 %t124, 1 store i64 %t132, ptr %a123 br label %find.cond9948 find.end9952: %t133 = load i64, ptr %a120 %t134 = icmp sge i64 %t133, 0 br i1 %t134, label %then9953, label %endif9955 then9953: %t135 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 2 store i64 0, ptr %a136 br label %each.cond9956 each.cond9956: %t137 = getelementptr inbounds { ptr, i64, i64 }, ptr %t135, i32 0, i32 1 %t138 = load i64, ptr %t137 %t139 = load i64, ptr %a136 %t140 = icmp slt i64 %t139, %t138 br i1 %t140, label %each.body9957, label %each.end9959 each.body9957: %t141 = load ptr, ptr %t135 %t142 = getelementptr inbounds %S.lsp.FnRec, ptr %t141, i64 %t139 %t143 = load %S.lsp.FnRec, ptr %t142 store %S.lsp.FnRec %t143, ptr %a144 %t145 = getelementptr inbounds %S.lsp.FnRec, ptr %a144, i32 0, i32 0 %t146 = load { ptr, i64, i64 }, ptr %t145 %t147 = load { ptr, i64, i64 }, ptr %a102 store { ptr, i64, i64 } %t146, ptr %a148 store { ptr, i64, i64 } %t147, ptr %a149 %t150 = call i32 @finch_str_eq(ptr %a148, ptr %a149) %t151 = icmp ne i32 %t150, 0 br label %logic.from9960 logic.from9960: br i1 %t151, label %logic.rhs9961, label %logic.end9962 logic.rhs9961: %t152 = getelementptr inbounds %S.lsp.FnRec, ptr %a144, i32 0, i32 2 %t153 = getelementptr inbounds { ptr, i64, i64 }, ptr %t152, i32 0, i32 1 %t154 = load i64, ptr %t153 %t155 = icmp eq i64 %t154, 0 br label %logic.rend9963 logic.rend9963: br label %logic.end9962 logic.end9962: %t156 = phi i1 [ false, %logic.from9960 ], [ %t155, %logic.rend9963 ] br i1 %t156, label %then9964, label %endif9966 then9964: %t157 = getelementptr inbounds %S.lsp.FnRec, ptr %a144, i32 0, i32 1 %t158 = load { ptr, i64, i64 }, ptr %t157 %t159 = getelementptr inbounds %S.lsp.FnRec, ptr %a144, i32 0, i32 7 %t160 = load { ptr, i64, i64 }, ptr %t159 %t161 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t158, i64 3, { ptr, i64, i64 } %t160, { ptr, i64, i64 } { ptr @.str.6694, i64 0, i64 0 }) call void @finch.json.Json.push(ptr %a7, %S.json.Json %t161) br label %endif9966 endif9966: br label %each.step9958 each.step9958: %t162 = load i64, ptr %a136 %t163 = add i64 %t162, 1 store i64 %t163, ptr %a136 br label %each.cond9956 each.end9959: %t164 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 3 store i64 0, ptr %a165 br label %each.cond9967 each.cond9967: %t166 = getelementptr inbounds { ptr, i64, i64 }, ptr %t164, i32 0, i32 1 %t167 = load i64, ptr %t166 %t168 = load i64, ptr %a165 %t169 = icmp slt i64 %t168, %t167 br i1 %t169, label %each.body9968, label %each.end9970 each.body9968: %t170 = load ptr, ptr %t164 %t171 = getelementptr inbounds %S.lsp.StructRec, ptr %t170, i64 %t168 %t172 = load %S.lsp.StructRec, ptr %t171 store %S.lsp.StructRec %t172, ptr %a173 %t174 = getelementptr inbounds %S.lsp.StructRec, ptr %a173, i32 0, i32 0 %t175 = load { ptr, i64, i64 }, ptr %t174 %t176 = load { ptr, i64, i64 }, ptr %a102 store { ptr, i64, i64 } %t175, ptr %a177 store { ptr, i64, i64 } %t176, ptr %a178 %t179 = call i32 @finch_str_eq(ptr %a177, ptr %a178) %t180 = icmp ne i32 %t179, 0 br i1 %t180, label %then9971, label %endif9973 then9971: %t181 = getelementptr inbounds %S.lsp.StructRec, ptr %a173, i32 0, i32 1 %t182 = load { ptr, i64, i64 }, ptr %t181 %t183 = getelementptr inbounds %S.lsp.StructRec, ptr %a173, i32 0, i32 1 %t184 = load { ptr, i64, i64 }, ptr %t183 store { ptr, i64, i64 } { ptr @.str.6695, i64 7, i64 0 }, ptr %a186 store { ptr, i64, i64 } %t184, ptr %a187 call void @finch_str_concat(ptr %a185, ptr %a186, ptr %a187) %t188 = load { ptr, i64, i64 }, ptr %a185 %t189 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t182, i64 22, { ptr, i64, i64 } %t188, { ptr, i64, i64 } { ptr @.str.6696, i64 0, i64 0 }) call void @finch.json.Json.push(ptr %a7, %S.json.Json %t189) br label %endif9973 endif9973: br label %each.step9969 each.step9969: %t190 = load i64, ptr %a165 %t191 = add i64 %t190, 1 store i64 %t191, ptr %a165 br label %each.cond9967 each.end9970: %t192 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 4 store i64 0, ptr %a193 br label %each.cond9974 each.cond9974: %t194 = getelementptr inbounds { ptr, i64, i64 }, ptr %t192, i32 0, i32 1 %t195 = load i64, ptr %t194 %t196 = load i64, ptr %a193 %t197 = icmp slt i64 %t196, %t195 br i1 %t197, label %each.body9975, label %each.end9977 each.body9975: %t198 = load ptr, ptr %t192 %t199 = getelementptr inbounds %S.lsp.EnumRec, ptr %t198, i64 %t196 %t200 = load %S.lsp.EnumRec, ptr %t199 store %S.lsp.EnumRec %t200, ptr %a201 %t202 = getelementptr inbounds %S.lsp.EnumRec, ptr %a201, i32 0, i32 0 %t203 = load { ptr, i64, i64 }, ptr %t202 %t204 = load { ptr, i64, i64 }, ptr %a102 store { ptr, i64, i64 } %t203, ptr %a205 store { ptr, i64, i64 } %t204, ptr %a206 %t207 = call i32 @finch_str_eq(ptr %a205, ptr %a206) %t208 = icmp ne i32 %t207, 0 br i1 %t208, label %then9978, label %endif9980 then9978: %t209 = getelementptr inbounds %S.lsp.EnumRec, ptr %a201, i32 0, i32 1 %t210 = load { ptr, i64, i64 }, ptr %t209 %t211 = getelementptr inbounds %S.lsp.EnumRec, ptr %a201, i32 0, i32 1 %t212 = load { ptr, i64, i64 }, ptr %t211 store { ptr, i64, i64 } { ptr @.str.6697, i64 5, i64 0 }, ptr %a214 store { ptr, i64, i64 } %t212, ptr %a215 call void @finch_str_concat(ptr %a213, ptr %a214, ptr %a215) %t216 = load { ptr, i64, i64 }, ptr %a213 %t217 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t210, i64 13, { ptr, i64, i64 } %t216, { ptr, i64, i64 } { ptr @.str.6698, i64 0, i64 0 }) call void @finch.json.Json.push(ptr %a7, %S.json.Json %t217) br label %endif9980 endif9980: br label %each.step9976 each.step9976: %t218 = load i64, ptr %a193 %t219 = add i64 %t218, 1 store i64 %t219, ptr %a193 br label %each.cond9974 each.end9977: %t220 = load %S.json.Json, ptr %a7 %t221 = call %S.json.Json @finch.lsp.completionList(%S.json.Json %t220) ret %S.json.Json %t221 endif9955: %t222 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 4 store i64 0, ptr %a223 br label %each.cond9981 each.cond9981: %t224 = getelementptr inbounds { ptr, i64, i64 }, ptr %t222, i32 0, i32 1 %t225 = load i64, ptr %t224 %t226 = load i64, ptr %a223 %t227 = icmp slt i64 %t226, %t225 br i1 %t227, label %each.body9982, label %each.end9984 each.body9982: %t228 = load ptr, ptr %t222 %t229 = getelementptr inbounds %S.lsp.EnumRec, ptr %t228, i64 %t226 %t230 = load %S.lsp.EnumRec, ptr %t229 store %S.lsp.EnumRec %t230, ptr %a231 %t232 = getelementptr inbounds %S.lsp.EnumRec, ptr %a231, i32 0, i32 1 %t233 = load { ptr, i64, i64 }, ptr %t232 %t234 = load { ptr, i64, i64 }, ptr %a102 store { ptr, i64, i64 } %t233, ptr %a235 store { ptr, i64, i64 } %t234, ptr %a236 %t237 = call i32 @finch_str_eq(ptr %a235, ptr %a236) %t238 = icmp ne i32 %t237, 0 br label %logic.from9985 logic.from9985: br i1 %t238, label %logic.rhs9986, label %logic.end9987 logic.rhs9986: %t239 = load %S.lsp.Analysis, ptr %a1 %t240 = load { ptr, i64, i64 }, ptr %a3 %t241 = load { ptr, i64, i64 }, ptr %a102 %t242 = load i64, ptr %a4 %t243 = call %S.lsp.VarRec @finch.lsp.varNamed(%S.lsp.Analysis %t239, { ptr, i64, i64 } %t240, { ptr, i64, i64 } %t241, i64 %t242) %t244 = extractvalue %S.lsp.VarRec %t243, 0 store { ptr, i64, i64 } %t244, ptr %a245 call void @finch_str_copy(ptr %a246, ptr %a245) %t247 = load { ptr, i64, i64 }, ptr %a246 %t248 = extractvalue { ptr, i64, i64 } %t247, 1 %t249 = icmp eq i64 %t248, 0 br label %logic.rend9988 logic.rend9988: br label %logic.end9987 logic.end9987: %t250 = phi i1 [ false, %logic.from9985 ], [ %t249, %logic.rend9988 ] br i1 %t250, label %then9989, label %endif9991 then9989: %t251 = getelementptr inbounds %S.lsp.EnumRec, ptr %a231, i32 0, i32 5 store i64 0, ptr %a252 br label %each.cond9992 each.cond9992: %t253 = getelementptr inbounds { ptr, i64, i64 }, ptr %t251, i32 0, i32 1 %t254 = load i64, ptr %t253 %t255 = load i64, ptr %a252 %t256 = icmp slt i64 %t255, %t254 br i1 %t256, label %each.body9993, label %each.end9995 each.body9993: %t257 = load ptr, ptr %t251 %t258 = getelementptr inbounds { ptr, i64, i64 }, ptr %t257, i64 %t255 %t259 = load { ptr, i64, i64 }, ptr %t258 store { ptr, i64, i64 } %t259, ptr %a260 %t261 = load { ptr, i64, i64 }, ptr %a260 %t262 = getelementptr inbounds %S.lsp.EnumRec, ptr %a231, i32 0, i32 1 %t263 = load { ptr, i64, i64 }, ptr %t262 store { ptr, i64, i64 } %t263, ptr %a265 store { ptr, i64, i64 } { ptr @.str.6699, i64 1, i64 0 }, ptr %a266 call void @finch_str_concat(ptr %a264, ptr %a265, ptr %a266) %t267 = load { ptr, i64, i64 }, ptr %a264 %t268 = load { ptr, i64, i64 }, ptr %a260 store { ptr, i64, i64 } %t267, ptr %a270 store { ptr, i64, i64 } %t268, ptr %a271 call void @finch_str_concat(ptr %a269, ptr %a270, ptr %a271) %t272 = load { ptr, i64, i64 }, ptr %a269 %t273 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t261, i64 20, { ptr, i64, i64 } %t272, { ptr, i64, i64 } { ptr @.str.6700, i64 0, i64 0 }) call void @finch.json.Json.push(ptr %a7, %S.json.Json %t273) br label %each.step9994 each.step9994: %t274 = load i64, ptr %a252 %t275 = add i64 %t274, 1 store i64 %t275, ptr %a252 br label %each.cond9992 each.end9995: %t276 = load %S.json.Json, ptr %a7 %t277 = call %S.json.Json @finch.lsp.completionList(%S.json.Json %t276) ret %S.json.Json %t277 endif9991: br label %each.step9983 each.step9983: %t278 = load i64, ptr %a223 %t279 = add i64 %t278, 1 store i64 %t279, ptr %a223 br label %each.cond9981 each.end9984: %t280 = load %S.lsp.Analysis, ptr %a1 %t281 = load { ptr, i64, i64 }, ptr %a3 %t282 = load { ptr, i64, i64 }, ptr %a102 %t283 = load i64, ptr %a4 %t284 = call %S.lsp.VarRec @finch.lsp.varNamed(%S.lsp.Analysis %t280, { ptr, i64, i64 } %t281, { ptr, i64, i64 } %t282, i64 %t283) %t285 = extractvalue %S.lsp.VarRec %t284, 1 store { ptr, i64, i64 } %t285, ptr %a286 call void @finch_str_copy(ptr %a287, ptr %a286) %t288 = load { ptr, i64, i64 }, ptr %a287 store { ptr, i64, i64 } %t288, ptr %a289 %t290 = load i1, ptr %a103 br label %logic.from9996 logic.from9996: br i1 %t290, label %logic.rhs9997, label %logic.end9998 logic.rhs9997: %t291 = load { ptr, i64, i64 }, ptr %a289 store { ptr, i64, i64 } %t291, ptr %a292 store { ptr, i64, i64 } { ptr @.str.6702, i64 2, i64 0 }, ptr %a294 %t295 = call i32 @finch_str_starts(ptr %a292, ptr %a294) %t296 = icmp ne i32 %t295, 0 br label %logic.rend9999 logic.rend9999: br label %logic.end9998 logic.end9998: %t297 = phi i1 [ false, %logic.from9996 ], [ %t296, %logic.rend9999 ] br i1 %t297, label %then10000, label %else10001 then10000: %t298 = load { ptr, i64, i64 }, ptr %a289 store { ptr, i64, i64 } %t298, ptr %a299 %t301 = getelementptr inbounds { ptr, i64, i64 }, ptr %a289, i32 0, i32 1 %t302 = load i64, ptr %t301 call void @finch_str_sub(ptr %a300, ptr %a299, i64 2, i64 %t302, ptr @.str.6703, i64 569) %t303 = load { ptr, i64, i64 }, ptr %a300 store { ptr, i64, i64 } %t303, ptr %a289 br label %endif10002 else10001: %t304 = load i1, ptr %a103 br label %logic.from10003 logic.from10003: br i1 %t304, label %logic.rhs10004, label %logic.end10005 logic.rhs10004: %t305 = load { ptr, i64, i64 }, ptr %a289 store { ptr, i64, i64 } %t305, ptr %a306 store { ptr, i64, i64 } { ptr @.str.6704, i64 3, i64 0 }, ptr %a307 %t308 = call i32 @finch_str_eq(ptr %a306, ptr %a307) %t309 = icmp ne i32 %t308, 0 br label %logic.rend10006 logic.rend10006: br label %logic.end10005 logic.end10005: %t310 = phi i1 [ false, %logic.from10003 ], [ %t309, %logic.rend10006 ] br i1 %t310, label %then10007, label %endif10009 then10007: store { ptr, i64, i64 } { ptr @.str.6705, i64 4, i64 0 }, ptr %a289 br label %endif10009 endif10009: br label %endif10002 endif10002: %t311 = load { ptr, i64, i64 }, ptr %a289 store { ptr, i64, i64 } %t311, ptr %a312 store { ptr, i64, i64 } { ptr @.str.6707, i64 4, i64 0 }, ptr %a314 %t315 = call i32 @finch_str_starts(ptr %a312, ptr %a314) %t316 = icmp ne i32 %t315, 0 br label %logic.from10010 logic.from10010: br i1 %t316, label %logic.rhs10011, label %logic.end10012 logic.rhs10011: %t317 = load { ptr, i64, i64 }, ptr %a289 store { ptr, i64, i64 } %t317, ptr %a318 store { ptr, i64, i64 } { ptr @.str.6709, i64 1, i64 0 }, ptr %a320 %t321 = call i32 @finch_str_ends(ptr %a318, ptr %a320) %t322 = icmp ne i32 %t321, 0 br label %logic.rend10013 logic.rend10013: br label %logic.end10012 logic.end10012: %t323 = phi i1 [ false, %logic.from10010 ], [ %t322, %logic.rend10013 ] br i1 %t323, label %then10014, label %endif10016 then10014: %t324 = load { ptr, i64, i64 }, ptr %a289 store { ptr, i64, i64 } %t324, ptr %a325 %t327 = getelementptr inbounds { ptr, i64, i64 }, ptr %a289, i32 0, i32 1 %t328 = load i64, ptr %t327 %t329 = sub i64 %t328, 1 call void @finch_str_sub(ptr %a326, ptr %a325, i64 4, i64 %t329, ptr @.str.6710, i64 574) %t330 = load { ptr, i64, i64 }, ptr %a326 store { ptr, i64, i64 } %t330, ptr %a289 br label %endif10016 endif10016: %t331 = load { ptr, i64, i64 }, ptr %a289 store { ptr, i64, i64 } %t331, ptr %a332 store { ptr, i64, i64 } { ptr @.str.6712, i64 2, i64 0 }, ptr %a334 %t335 = call i32 @finch_str_starts(ptr %a332, ptr %a334) %t336 = icmp ne i32 %t335, 0 br i1 %t336, label %then10017, label %else10018 then10017: %t337 = call { ptr, i64, i64 } @finch.docs.arrayMethods() call void @finch.lsp.methodItems(ptr %a7, { ptr, i64, i64 } %t337) br label %endif10019 else10018: %t338 = load { ptr, i64, i64 }, ptr %a289 store { ptr, i64, i64 } %t338, ptr %a339 store { ptr, i64, i64 } { ptr @.str.6713, i64 3, i64 0 }, ptr %a340 %t341 = call i32 @finch_str_eq(ptr %a339, ptr %a340) %t342 = icmp ne i32 %t341, 0 br i1 %t342, label %then10020, label %else10021 then10020: %t343 = call { ptr, i64, i64 } @finch.docs.strMethods() call void @finch.lsp.methodItems(ptr %a7, { ptr, i64, i64 } %t343) br label %endif10022 else10021: %t344 = load { ptr, i64, i64 }, ptr %a289 store { ptr, i64, i64 } %t344, ptr %a345 store { ptr, i64, i64 } { ptr @.str.6715, i64 4, i64 0 }, ptr %a347 %t348 = call i32 @finch_str_starts(ptr %a345, ptr %a347) %t349 = icmp ne i32 %t348, 0 br i1 %t349, label %then10023, label %else10024 then10023: %t350 = call { ptr, i64, i64 } @finch.docs.mapMethods() call void @finch.lsp.methodItems(ptr %a7, { ptr, i64, i64 } %t350) br label %endif10025 else10024: %t351 = load { ptr, i64, i64 }, ptr %a289 store { ptr, i64, i64 } %t351, ptr %a352 call void @finch_str_copy(ptr %a353, ptr %a352) %t354 = load { ptr, i64, i64 }, ptr %a353 store { ptr, i64, i64 } %t354, ptr %a355 %t356 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 3 store i64 0, ptr %a357 br label %each.cond10026 each.cond10026: %t358 = getelementptr inbounds { ptr, i64, i64 }, ptr %t356, i32 0, i32 1 %t359 = load i64, ptr %t358 %t360 = load i64, ptr %a357 %t361 = icmp slt i64 %t360, %t359 br i1 %t361, label %each.body10027, label %each.end10029 each.body10027: %t362 = load ptr, ptr %t356 %t363 = getelementptr inbounds %S.lsp.StructRec, ptr %t362, i64 %t360 %t364 = load %S.lsp.StructRec, ptr %t363 store %S.lsp.StructRec %t364, ptr %a365 %t366 = getelementptr inbounds %S.lsp.StructRec, ptr %a365, i32 0, i32 1 %t367 = load { ptr, i64, i64 }, ptr %t366 %t368 = load { ptr, i64, i64 }, ptr %a355 store { ptr, i64, i64 } %t367, ptr %a369 store { ptr, i64, i64 } %t368, ptr %a370 %t371 = call i32 @finch_str_eq(ptr %a369, ptr %a370) %t372 = icmp ne i32 %t371, 0 br i1 %t372, label %then10030, label %endif10032 then10030: %t373 = getelementptr inbounds %S.lsp.StructRec, ptr %a365, i32 0, i32 5 %t374 = getelementptr inbounds { ptr, i64, i64 }, ptr %t373, i32 0, i32 1 %t375 = load i64, ptr %t374 store i64 0, ptr %a376 br label %for.cond10033 for.cond10033: %t377 = load i64, ptr %a376 %t378 = icmp slt i64 %t377, %t375 br i1 %t378, label %for.body10034, label %for.end10036 for.body10034: %t379 = getelementptr inbounds %S.lsp.StructRec, ptr %a365, i32 0, i32 5 %t380 = load i64, ptr %a376 %t381 = load { ptr, i64, i64 }, ptr %t379 %t382 = extractvalue { ptr, i64, i64 } %t381, 1 %t383 = icmp uge i64 %t380, %t382 br i1 %t383, label %range10037, label %inrange10038 range10037: call void @finch_panic_index(ptr @.str.6716, i64 587, i64 %t380, i64 %t382) unreachable inrange10038: %t384 = extractvalue { ptr, i64, i64 } %t381, 0 %t385 = getelementptr inbounds { ptr, i64, i64 }, ptr %t384, i64 %t380 %t386 = load { ptr, i64, i64 }, ptr %t385 %t387 = getelementptr inbounds %S.lsp.StructRec, ptr %a365, i32 0, i32 6 %t388 = load i64, ptr %a376 %t389 = load { ptr, i64, i64 }, ptr %t387 %t390 = extractvalue { ptr, i64, i64 } %t389, 1 %t391 = icmp uge i64 %t388, %t390 br i1 %t391, label %range10039, label %inrange10040 range10039: call void @finch_panic_index(ptr @.str.6717, i64 587, i64 %t388, i64 %t390) unreachable inrange10040: %t392 = extractvalue { ptr, i64, i64 } %t389, 0 %t393 = getelementptr inbounds { ptr, i64, i64 }, ptr %t392, i64 %t388 %t394 = load { ptr, i64, i64 }, ptr %t393 %t395 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t386, i64 5, { ptr, i64, i64 } %t394, { ptr, i64, i64 } { ptr @.str.6718, i64 0, i64 0 }) call void @finch.json.Json.push(ptr %a7, %S.json.Json %t395) br label %for.step10035 for.step10035: %t396 = load i64, ptr %a376 %t397 = add i64 %t396, 1 store i64 %t397, ptr %a376 br label %for.cond10033 for.end10036: br label %endif10032 endif10032: br label %each.step10028 each.step10028: %t398 = load i64, ptr %a357 %t399 = add i64 %t398, 1 store i64 %t399, ptr %a357 br label %each.cond10026 each.end10029: %t400 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 2 store i64 0, ptr %a401 br label %each.cond10041 each.cond10041: %t402 = getelementptr inbounds { ptr, i64, i64 }, ptr %t400, i32 0, i32 1 %t403 = load i64, ptr %t402 %t404 = load i64, ptr %a401 %t405 = icmp slt i64 %t404, %t403 br i1 %t405, label %each.body10042, label %each.end10044 each.body10042: %t406 = load ptr, ptr %t400 %t407 = getelementptr inbounds %S.lsp.FnRec, ptr %t406, i64 %t404 %t408 = load %S.lsp.FnRec, ptr %t407 store %S.lsp.FnRec %t408, ptr %a409 %t410 = getelementptr inbounds %S.lsp.FnRec, ptr %a409, i32 0, i32 2 %t411 = load { ptr, i64, i64 }, ptr %t410 %t412 = load { ptr, i64, i64 }, ptr %a355 store { ptr, i64, i64 } %t411, ptr %a413 store { ptr, i64, i64 } %t412, ptr %a414 %t415 = call i32 @finch_str_eq(ptr %a413, ptr %a414) %t416 = icmp ne i32 %t415, 0 br i1 %t416, label %then10045, label %endif10047 then10045: %t417 = getelementptr inbounds %S.lsp.FnRec, ptr %a409, i32 0, i32 1 %t418 = load { ptr, i64, i64 }, ptr %t417 %t419 = getelementptr inbounds %S.lsp.FnRec, ptr %a409, i32 0, i32 7 %t420 = load { ptr, i64, i64 }, ptr %t419 %t421 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t418, i64 2, { ptr, i64, i64 } %t420, { ptr, i64, i64 } { ptr @.str.6719, i64 0, i64 0 }) call void @finch.json.Json.push(ptr %a7, %S.json.Json %t421) br label %endif10047 endif10047: br label %each.step10043 each.step10043: %t422 = load i64, ptr %a401 %t423 = add i64 %t422, 1 store i64 %t423, ptr %a401 br label %each.cond10041 each.end10044: br label %endif10025 endif10025: br label %endif10022 endif10022: br label %endif10019 endif10019: %t424 = load %S.json.Json, ptr %a7 %t425 = call %S.json.Json @finch.lsp.completionList(%S.json.Json %t424) ret %S.json.Json %t425 endif9923: store %S.lsp.Names zeroinitializer, ptr %a426 %t427 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 1 store i64 0, ptr %a428 br label %each.cond10048 each.cond10048: %t429 = getelementptr inbounds { ptr, i64, i64 }, ptr %t427, i32 0, i32 1 %t430 = load i64, ptr %t429 %t431 = load i64, ptr %a428 %t432 = icmp slt i64 %t431, %t430 br i1 %t432, label %each.body10049, label %each.end10051 each.body10049: %t433 = load ptr, ptr %t427 %t434 = getelementptr inbounds %S.lsp.VarRec, ptr %t433, i64 %t431 %t435 = load %S.lsp.VarRec, ptr %t434 store %S.lsp.VarRec %t435, ptr %a436 %t437 = getelementptr inbounds %S.lsp.VarRec, ptr %a436, i32 0, i32 3 %t438 = load i64, ptr %t437 %t439 = load i64, ptr %a4 %t440 = icmp sle i64 %t438, %t439 br label %logic.from10052 logic.from10052: br i1 %t440, label %logic.rhs10053, label %logic.end10054 logic.rhs10053: %t441 = load i64, ptr %a4 %t442 = getelementptr inbounds %S.lsp.VarRec, ptr %a436, i32 0, i32 7 %t443 = load i64, ptr %t442 %t444 = add i64 %t443, 1 %t445 = icmp sle i64 %t441, %t444 br label %logic.rend10055 logic.rend10055: br label %logic.end10054 logic.end10054: %t446 = phi i1 [ false, %logic.from10052 ], [ %t445, %logic.rend10055 ] br label %logic.from10056 logic.from10056: br i1 %t446, label %logic.rhs10057, label %logic.end10058 logic.rhs10057: %t447 = getelementptr inbounds %S.lsp.VarRec, ptr %a436, i32 0, i32 5 %t448 = load { ptr, i64, i64 }, ptr %t447 %t449 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t448, ptr %a450 store { ptr, i64, i64 } %t449, ptr %a451 %t452 = call i32 @finch_str_eq(ptr %a450, ptr %a451) %t453 = icmp ne i32 %t452, 0 br label %logic.rend10059 logic.rend10059: br label %logic.end10058 logic.end10058: %t454 = phi i1 [ false, %logic.from10056 ], [ %t453, %logic.rend10059 ] br label %logic.from10060 logic.from10060: br i1 %t454, label %logic.rhs10061, label %logic.end10062 logic.rhs10061: %t455 = getelementptr inbounds %S.lsp.VarRec, ptr %a436, i32 0, i32 0 %t456 = load { ptr, i64, i64 }, ptr %t455 %t457 = call i1 @finch.lsp.Names.add(ptr %a426, { ptr, i64, i64 } %t456) br label %logic.rend10063 logic.rend10063: br label %logic.end10062 logic.end10062: %t458 = phi i1 [ false, %logic.from10060 ], [ %t457, %logic.rend10063 ] br i1 %t458, label %then10064, label %endif10066 then10064: %t459 = getelementptr inbounds %S.lsp.VarRec, ptr %a436, i32 0, i32 0 %t460 = load { ptr, i64, i64 }, ptr %t459 %t461 = getelementptr inbounds %S.lsp.VarRec, ptr %a436, i32 0, i32 1 %t462 = load { ptr, i64, i64 }, ptr %t461 %t463 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t460, i64 6, { ptr, i64, i64 } %t462, { ptr, i64, i64 } { ptr @.str.6720, i64 0, i64 0 }) call void @finch.json.Json.push(ptr %a7, %S.json.Json %t463) br label %endif10066 endif10066: br label %each.step10050 each.step10050: %t464 = load i64, ptr %a428 %t465 = add i64 %t464, 1 store i64 %t465, ptr %a428 br label %each.cond10048 each.end10051: %t466 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 2 store i64 0, ptr %a467 br label %each.cond10067 each.cond10067: %t468 = getelementptr inbounds { ptr, i64, i64 }, ptr %t466, i32 0, i32 1 %t469 = load i64, ptr %t468 %t470 = load i64, ptr %a467 %t471 = icmp slt i64 %t470, %t469 br i1 %t471, label %each.body10068, label %each.end10070 each.body10068: %t472 = load ptr, ptr %t466 %t473 = getelementptr inbounds %S.lsp.FnRec, ptr %t472, i64 %t470 %t474 = load %S.lsp.FnRec, ptr %t473 store %S.lsp.FnRec %t474, ptr %a475 %t476 = getelementptr inbounds %S.lsp.FnRec, ptr %a475, i32 0, i32 2 %t477 = getelementptr inbounds { ptr, i64, i64 }, ptr %t476, i32 0, i32 1 %t478 = load i64, ptr %t477 %t479 = icmp eq i64 %t478, 0 br label %logic.from10071 logic.from10071: br i1 %t479, label %logic.rhs10072, label %logic.end10073 logic.rhs10072: %t480 = getelementptr inbounds %S.lsp.FnRec, ptr %a475, i32 0, i32 0 %t481 = load { ptr, i64, i64 }, ptr %t480 store { ptr, i64, i64 } %t481, ptr %a482 store { ptr, i64, i64 } { ptr @.str.6721, i64 0, i64 0 }, ptr %a483 %t484 = call i32 @finch_str_eq(ptr %a482, ptr %a483) %t485 = icmp ne i32 %t484, 0 br label %logic.rend10074 logic.rend10074: br label %logic.end10073 logic.end10073: %t486 = phi i1 [ false, %logic.from10071 ], [ %t485, %logic.rend10074 ] br label %logic.from10075 logic.from10075: br i1 %t486, label %logic.rhs10076, label %logic.end10077 logic.rhs10076: %t487 = getelementptr inbounds %S.lsp.FnRec, ptr %a475, i32 0, i32 1 %t488 = load { ptr, i64, i64 }, ptr %t487 %t489 = call i1 @finch.lsp.Names.add(ptr %a426, { ptr, i64, i64 } %t488) br label %logic.rend10078 logic.rend10078: br label %logic.end10077 logic.end10077: %t490 = phi i1 [ false, %logic.from10075 ], [ %t489, %logic.rend10078 ] br i1 %t490, label %then10079, label %endif10081 then10079: %t491 = getelementptr inbounds %S.lsp.FnRec, ptr %a475, i32 0, i32 1 %t492 = load { ptr, i64, i64 }, ptr %t491 %t493 = getelementptr inbounds %S.lsp.FnRec, ptr %a475, i32 0, i32 7 %t494 = load { ptr, i64, i64 }, ptr %t493 %t495 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t492, i64 3, { ptr, i64, i64 } %t494, { ptr, i64, i64 } { ptr @.str.6722, i64 0, i64 0 }) call void @finch.json.Json.push(ptr %a7, %S.json.Json %t495) br label %endif10081 endif10081: br label %each.step10069 each.step10069: %t496 = load i64, ptr %a467 %t497 = add i64 %t496, 1 store i64 %t497, ptr %a467 br label %each.cond10067 each.end10070: %t498 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 3 store i64 0, ptr %a499 br label %each.cond10082 each.cond10082: %t500 = getelementptr inbounds { ptr, i64, i64 }, ptr %t498, i32 0, i32 1 %t501 = load i64, ptr %t500 %t502 = load i64, ptr %a499 %t503 = icmp slt i64 %t502, %t501 br i1 %t503, label %each.body10083, label %each.end10085 each.body10083: %t504 = load ptr, ptr %t498 %t505 = getelementptr inbounds %S.lsp.StructRec, ptr %t504, i64 %t502 %t506 = load %S.lsp.StructRec, ptr %t505 store %S.lsp.StructRec %t506, ptr %a507 %t508 = getelementptr inbounds %S.lsp.StructRec, ptr %a507, i32 0, i32 0 %t509 = load { ptr, i64, i64 }, ptr %t508 store { ptr, i64, i64 } %t509, ptr %a510 store { ptr, i64, i64 } { ptr @.str.6723, i64 0, i64 0 }, ptr %a511 %t512 = call i32 @finch_str_eq(ptr %a510, ptr %a511) %t513 = icmp ne i32 %t512, 0 br label %logic.from10086 logic.from10086: br i1 %t513, label %logic.rhs10087, label %logic.end10088 logic.rhs10087: %t514 = getelementptr inbounds %S.lsp.StructRec, ptr %a507, i32 0, i32 1 %t515 = load { ptr, i64, i64 }, ptr %t514 %t516 = call i1 @finch.lsp.Names.add(ptr %a426, { ptr, i64, i64 } %t515) br label %logic.rend10089 logic.rend10089: br label %logic.end10088 logic.end10088: %t517 = phi i1 [ false, %logic.from10086 ], [ %t516, %logic.rend10089 ] br i1 %t517, label %then10090, label %endif10092 then10090: %t518 = getelementptr inbounds %S.lsp.StructRec, ptr %a507, i32 0, i32 1 %t519 = load { ptr, i64, i64 }, ptr %t518 %t520 = getelementptr inbounds %S.lsp.StructRec, ptr %a507, i32 0, i32 1 %t521 = load { ptr, i64, i64 }, ptr %t520 store { ptr, i64, i64 } { ptr @.str.6724, i64 7, i64 0 }, ptr %a523 store { ptr, i64, i64 } %t521, ptr %a524 call void @finch_str_concat(ptr %a522, ptr %a523, ptr %a524) %t525 = load { ptr, i64, i64 }, ptr %a522 %t526 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t519, i64 22, { ptr, i64, i64 } %t525, { ptr, i64, i64 } { ptr @.str.6725, i64 0, i64 0 }) call void @finch.json.Json.push(ptr %a7, %S.json.Json %t526) br label %endif10092 endif10092: br label %each.step10084 each.step10084: %t527 = load i64, ptr %a499 %t528 = add i64 %t527, 1 store i64 %t528, ptr %a499 br label %each.cond10082 each.end10085: %t529 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 4 store i64 0, ptr %a530 br label %each.cond10093 each.cond10093: %t531 = getelementptr inbounds { ptr, i64, i64 }, ptr %t529, i32 0, i32 1 %t532 = load i64, ptr %t531 %t533 = load i64, ptr %a530 %t534 = icmp slt i64 %t533, %t532 br i1 %t534, label %each.body10094, label %each.end10096 each.body10094: %t535 = load ptr, ptr %t529 %t536 = getelementptr inbounds %S.lsp.EnumRec, ptr %t535, i64 %t533 %t537 = load %S.lsp.EnumRec, ptr %t536 store %S.lsp.EnumRec %t537, ptr %a538 %t539 = getelementptr inbounds %S.lsp.EnumRec, ptr %a538, i32 0, i32 0 %t540 = load { ptr, i64, i64 }, ptr %t539 store { ptr, i64, i64 } %t540, ptr %a541 store { ptr, i64, i64 } { ptr @.str.6726, i64 0, i64 0 }, ptr %a542 %t543 = call i32 @finch_str_eq(ptr %a541, ptr %a542) %t544 = icmp ne i32 %t543, 0 br label %logic.from10097 logic.from10097: br i1 %t544, label %logic.rhs10098, label %logic.end10099 logic.rhs10098: %t545 = getelementptr inbounds %S.lsp.EnumRec, ptr %a538, i32 0, i32 1 %t546 = load { ptr, i64, i64 }, ptr %t545 %t547 = call i1 @finch.lsp.Names.add(ptr %a426, { ptr, i64, i64 } %t546) br label %logic.rend10100 logic.rend10100: br label %logic.end10099 logic.end10099: %t548 = phi i1 [ false, %logic.from10097 ], [ %t547, %logic.rend10100 ] br i1 %t548, label %then10101, label %endif10103 then10101: %t549 = getelementptr inbounds %S.lsp.EnumRec, ptr %a538, i32 0, i32 1 %t550 = load { ptr, i64, i64 }, ptr %t549 %t551 = getelementptr inbounds %S.lsp.EnumRec, ptr %a538, i32 0, i32 1 %t552 = load { ptr, i64, i64 }, ptr %t551 store { ptr, i64, i64 } { ptr @.str.6727, i64 5, i64 0 }, ptr %a554 store { ptr, i64, i64 } %t552, ptr %a555 call void @finch_str_concat(ptr %a553, ptr %a554, ptr %a555) %t556 = load { ptr, i64, i64 }, ptr %a553 %t557 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t550, i64 13, { ptr, i64, i64 } %t556, { ptr, i64, i64 } { ptr @.str.6728, i64 0, i64 0 }) call void @finch.json.Json.push(ptr %a7, %S.json.Json %t557) br label %endif10103 endif10103: br label %each.step10095 each.step10095: %t558 = load i64, ptr %a530 %t559 = add i64 %t558, 1 store i64 %t559, ptr %a530 br label %each.cond10093 each.end10096: %t560 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 5 store i64 0, ptr %a561 br label %each.cond10104 each.cond10104: %t562 = getelementptr inbounds { ptr, i64, i64 }, ptr %t560, i32 0, i32 1 %t563 = load i64, ptr %t562 %t564 = load i64, ptr %a561 %t565 = icmp slt i64 %t564, %t563 br i1 %t565, label %each.body10105, label %each.end10107 each.body10105: %t566 = load ptr, ptr %t560 %t567 = getelementptr inbounds { ptr, i64, i64 }, ptr %t566, i64 %t564 %t568 = load { ptr, i64, i64 }, ptr %t567 store { ptr, i64, i64 } %t568, ptr %a569 %t570 = load { ptr, i64, i64 }, ptr %a569 %t571 = call i1 @finch.lsp.Names.add(ptr %a426, { ptr, i64, i64 } %t570) br i1 %t571, label %then10108, label %endif10110 then10108: %t572 = load { ptr, i64, i64 }, ptr %a569 %t573 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t572, i64 9, { ptr, i64, i64 } { ptr @.str.6729, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.6730, i64 0, i64 0 }) call void @finch.json.Json.push(ptr %a7, %S.json.Json %t573) br label %endif10110 endif10110: br label %each.step10106 each.step10106: %t574 = load i64, ptr %a561 %t575 = add i64 %t574, 1 store i64 %t575, ptr %a561 br label %each.cond10104 each.end10107: %t576 = call { ptr, i64, i64 } @finch.docs.builtins() store { ptr, i64, i64 } %t576, ptr %a577 store i64 0, ptr %a578 br label %each.cond10111 each.cond10111: %t579 = getelementptr inbounds { ptr, i64, i64 }, ptr %a577, i32 0, i32 1 %t580 = load i64, ptr %t579 %t581 = load i64, ptr %a578 %t582 = icmp slt i64 %t581, %t580 br i1 %t582, label %each.body10112, label %each.end10114 each.body10112: %t583 = load ptr, ptr %a577 %t584 = getelementptr inbounds %S.docs.Doc, ptr %t583, i64 %t581 %t585 = load %S.docs.Doc, ptr %t584 store %S.docs.Doc %t585, ptr %a586 %t587 = getelementptr inbounds %S.docs.Doc, ptr %a586, i32 0, i32 0 %t588 = load { ptr, i64, i64 }, ptr %t587 %t589 = call i1 @finch.lsp.Names.add(ptr %a426, { ptr, i64, i64 } %t588) br i1 %t589, label %then10115, label %endif10117 then10115: %t590 = getelementptr inbounds %S.docs.Doc, ptr %a586, i32 0, i32 0 %t591 = load { ptr, i64, i64 }, ptr %t590 %t592 = getelementptr inbounds %S.docs.Doc, ptr %a586, i32 0, i32 1 %t593 = load { ptr, i64, i64 }, ptr %t592 %t594 = getelementptr inbounds %S.docs.Doc, ptr %a586, i32 0, i32 2 %t595 = load { ptr, i64, i64 }, ptr %t594 %t596 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t591, i64 3, { ptr, i64, i64 } %t593, { ptr, i64, i64 } %t595) call void @finch.json.Json.push(ptr %a7, %S.json.Json %t596) br label %endif10117 endif10117: br label %each.step10113 each.step10113: %t597 = load i64, ptr %a578 %t598 = add i64 %t597, 1 store i64 %t598, ptr %a578 br label %each.cond10111 each.end10114: %t599 = call { ptr, i64, i64 } @finch.docs.keywords() store { ptr, i64, i64 } %t599, ptr %a600 store i64 0, ptr %a601 br label %each.cond10118 each.cond10118: %t602 = getelementptr inbounds { ptr, i64, i64 }, ptr %a600, i32 0, i32 1 %t603 = load i64, ptr %t602 %t604 = load i64, ptr %a601 %t605 = icmp slt i64 %t604, %t603 br i1 %t605, label %each.body10119, label %each.end10121 each.body10119: %t606 = load ptr, ptr %a600 %t607 = getelementptr inbounds { ptr, i64, i64 }, ptr %t606, i64 %t604 %t608 = load { ptr, i64, i64 }, ptr %t607 store { ptr, i64, i64 } %t608, ptr %a609 %t610 = load { ptr, i64, i64 }, ptr %a609 %t611 = call i1 @finch.lsp.Names.add(ptr %a426, { ptr, i64, i64 } %t610) br i1 %t611, label %then10122, label %endif10124 then10122: %t612 = load { ptr, i64, i64 }, ptr %a609 %t613 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t612, i64 14, { ptr, i64, i64 } { ptr @.str.6731, i64 0, i64 0 }, { ptr, i64, i64 } { ptr @.str.6732, i64 0, i64 0 }) call void @finch.json.Json.push(ptr %a7, %S.json.Json %t613) br label %endif10124 endif10124: br label %each.step10120 each.step10120: %t614 = load i64, ptr %a601 %t615 = add i64 %t614, 1 store i64 %t615, ptr %a601 br label %each.cond10118 each.end10121: %t616 = call { ptr, i64, i64 } @finch.docs.typeNames() store { ptr, i64, i64 } %t616, ptr %a617 store i64 0, ptr %a618 br label %each.cond10125 each.cond10125: %t619 = getelementptr inbounds { ptr, i64, i64 }, ptr %a617, i32 0, i32 1 %t620 = load i64, ptr %t619 %t621 = load i64, ptr %a618 %t622 = icmp slt i64 %t621, %t620 br i1 %t622, label %each.body10126, label %each.end10128 each.body10126: %t623 = load ptr, ptr %a617 %t624 = getelementptr inbounds { ptr, i64, i64 }, ptr %t623, i64 %t621 %t625 = load { ptr, i64, i64 }, ptr %t624 store { ptr, i64, i64 } %t625, ptr %a626 %t627 = load { ptr, i64, i64 }, ptr %a626 %t628 = call i1 @finch.lsp.Names.add(ptr %a426, { ptr, i64, i64 } %t627) br i1 %t628, label %then10129, label %endif10131 then10129: %t629 = load { ptr, i64, i64 }, ptr %a626 %t630 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t629, i64 25, { ptr, i64, i64 } { ptr @.str.6733, i64 0, i64 0 }, { ptr, i64, i64 } { ptr @.str.6734, i64 0, i64 0 }) call void @finch.json.Json.push(ptr %a7, %S.json.Json %t630) br label %endif10131 endif10131: br label %each.step10127 each.step10127: %t631 = load i64, ptr %a618 %t632 = add i64 %t631, 1 store i64 %t632, ptr %a618 br label %each.cond10125 each.end10128: %t633 = load %S.json.Json, ptr %a7 %t634 = call %S.json.Json @finch.lsp.completionList(%S.json.Json %t633) ret %S.json.Json %t634 } define internal i1 @finch.lsp.Names.add(ptr %self, { ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca i64, align 16 %a8 = alloca i64, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = getelementptr inbounds %S.lsp.Names, ptr %self, i32 0, i32 0 %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i32 0, i32 1 %t4 = load { ptr, i64, i64 }, ptr %a1 store i64 -1, ptr %a5 %t6 = load i64, ptr %t3 %t7 = load ptr, ptr %t2 store i64 0, ptr %a8 br label %find.cond10132 find.cond10132: %t9 = load i64, ptr %a8 %t10 = icmp slt i64 %t9, %t6 br i1 %t10, label %find.body10133, label %find.end10136 find.body10133: %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t7, i64 %t9 %t12 = load { ptr, i64, i64 }, ptr %t11 store { ptr, i64, i64 } %t12, ptr %a13 store { ptr, i64, i64 } %t4, ptr %a14 %t15 = call i32 @finch_str_eq(ptr %a13, ptr %a14) %t16 = icmp ne i32 %t15, 0 br i1 %t16, label %find.hit10134, label %find.next10135 find.hit10134: store i64 %t9, ptr %a5 br label %find.end10136 find.next10135: %t17 = add i64 %t9, 1 store i64 %t17, ptr %a8 br label %find.cond10132 find.end10136: %t18 = load i64, ptr %a5 %t19 = icmp sge i64 %t18, 0 br i1 %t19, label %then10137, label %endif10139 then10137: ret i1 false endif10139: %t20 = getelementptr inbounds %S.lsp.Names, ptr %self, i32 0, i32 0 %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i32 0, i32 1 %t22 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t22, ptr %a23 call void @finch_str_copy(ptr %a24, ptr %a23) %t25 = load { ptr, i64, i64 }, ptr %a24 %t26 = load i64, ptr %t21 %t27 = add i64 %t26, 1 call void @finch_arr_reserve(ptr %t20, i64 %t27, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t28 = load ptr, ptr %t20 %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %t28, i64 %t26 store { ptr, i64, i64 } %t25, ptr %t29 store i64 %t27, ptr %t21 ret i1 true } define internal %S.json.Json @finch.lsp.completionList(%S.json.Json %p0) { entry: %a1 = alloca %S.json.Json, align 16 %a3 = alloca %S.json.Json, align 16 %a7 = alloca %S.json.Json, align 16 %a8 = alloca %S.json.Json, align 16 store %S.json.Json %p0, ptr %a1 %t2 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t2, ptr %a3 %t4 = call %S.json.Json @finch.json.new_bool(i1 false) call void @finch.json.Json.set(ptr %a3, { ptr, i64, i64 } { ptr @.str.6735, i64 12, i64 0 }, %S.json.Json %t4) %t5 = load %S.json.Json, ptr %a1 call void @finch.json.Json.set(ptr %a3, { ptr, i64, i64 } { ptr @.str.6736, i64 5, i64 0 }, %S.json.Json %t5) %t6 = load %S.json.Json, ptr %a3 store %S.json.Json %t6, ptr %a7 call void @finch.copy.S_json_Json(ptr %a8, ptr %a7) %t9 = load %S.json.Json, ptr %a8 ret %S.json.Json %t9 } define internal %S.json.Json @finch.lsp.signatureAt(%S.lsp.Analysis %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, i64 %p3, i64 %p4) { entry: %a1 = alloca %S.lsp.Analysis, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca i64, align 16 %a5 = alloca i64, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca i64, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca i64, align 16 %a26 = alloca i64, align 16 %a27 = alloca i64, align 16 %a31 = alloca i64, align 16 %a41 = alloca i8, align 16 %a74 = alloca i64, align 16 %a76 = alloca i64, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a97 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 %a117 = alloca i64, align 16 %a133 = alloca { ptr, i64, i64 }, align 16 %a134 = alloca { ptr, i64, i64 }, align 16 %a139 = alloca { ptr, i64, i64 }, align 16 %a146 = alloca { ptr, i64, i64 }, align 16 %a147 = alloca { ptr, i64, i64 }, align 16 %a149 = alloca { ptr, i64, i64 }, align 16 %a151 = alloca { ptr, i64, i64 }, align 16 %a152 = alloca { ptr, i64, i64 }, align 16 %a153 = alloca { ptr, i64, i64 }, align 16 %a157 = alloca { ptr, i64, i64 }, align 16 %a158 = alloca { ptr, i64, i64 }, align 16 %a159 = alloca { ptr, i64, i64 }, align 16 %a164 = alloca { ptr, i64, i64 }, align 16 %a165 = alloca { ptr, i64, i64 }, align 16 %a171 = alloca { ptr, i64, i64 }, align 16 %a172 = alloca { ptr, i64, i64 }, align 16 %a175 = alloca i64, align 16 %a183 = alloca %S.lsp.FnRec, align 16 %a187 = alloca { ptr, i64, i64 }, align 16 %a188 = alloca { ptr, i64, i64 }, align 16 %a194 = alloca { ptr, i64, i64 }, align 16 %a195 = alloca { ptr, i64, i64 }, align 16 %a200 = alloca %S.json.Json, align 16 %a205 = alloca %S.json.Json, align 16 %a207 = alloca i64, align 16 %a215 = alloca { ptr, i64, i64 }, align 16 %a220 = alloca %S.json.Json, align 16 %a228 = alloca %S.json.Json, align 16 %a231 = alloca %S.json.Json, align 16 %a242 = alloca %S.docs.Doc, align 16 %a248 = alloca %S.json.Json, align 16 %a256 = alloca %S.json.Json, align 16 %a259 = alloca %S.json.Json, align 16 store %S.lsp.Analysis %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 store i64 %p3, ptr %a4 store i64 %p4, ptr %a5 %t6 = load { ptr, i64, i64 }, ptr %a2 %t7 = load i64, ptr %a4 %t8 = call { ptr, i64, i64 } @finch.lsp.lineOf({ ptr, i64, i64 } %t6, i64 %t7) store { ptr, i64, i64 } %t8, ptr %a9 %t10 = load i64, ptr %a5 %t11 = sub i64 %t10, 1 store i64 %t11, ptr %a12 %t13 = load i64, ptr %a12 %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1 %t15 = load i64, ptr %t14 %t16 = icmp sgt i64 %t13, %t15 br i1 %t16, label %then10140, label %endif10142 then10140: %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1 %t18 = load i64, ptr %t17 store i64 %t18, ptr %a12 br label %endif10142 endif10142: %t19 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t19, ptr %a20 %t22 = load i64, ptr %a12 call void @finch_str_sub(ptr %a21, ptr %a20, i64 0, i64 %t22, ptr @.str.6737, i64 671) %t23 = load { ptr, i64, i64 }, ptr %a21 store { ptr, i64, i64 } %t23, ptr %a24 store i64 0, ptr %a25 store i64 0, ptr %a26 store i64 -1, ptr %a27 %t28 = getelementptr inbounds { ptr, i64, i64 }, ptr %a24, i32 0, i32 1 %t29 = load i64, ptr %t28 %t30 = sub i64 %t29, 1 store i64 %t30, ptr %a31 br label %while.cond10143 while.cond10143: %t32 = load i64, ptr %a31 %t33 = icmp sge i64 %t32, 0 br i1 %t33, label %while.body10144, label %while.end10145 while.body10144: %t34 = load i64, ptr %a31 %t35 = load { ptr, i64, i64 }, ptr %a24 %t36 = extractvalue { ptr, i64, i64 } %t35, 1 %t37 = icmp uge i64 %t34, %t36 br i1 %t37, label %range10146, label %inrange10147 range10146: call void @finch_panic_index(ptr @.str.6738, i64 678, i64 %t34, i64 %t36) unreachable inrange10147: %t38 = extractvalue { ptr, i64, i64 } %t35, 0 %t39 = getelementptr inbounds i8, ptr %t38, i64 %t34 %t40 = load i8, ptr %t39 store i8 %t40, ptr %a41 %t42 = load i8, ptr %a41 %t43 = icmp eq i8 %t42, 41 br label %logic.from10148 logic.from10148: br i1 %t43, label %logic.end10150, label %logic.rhs10149 logic.rhs10149: %t44 = load i8, ptr %a41 %t45 = icmp eq i8 %t44, 93 br label %logic.rend10151 logic.rend10151: br label %logic.end10150 logic.end10150: %t46 = phi i1 [ true, %logic.from10148 ], [ %t45, %logic.rend10151 ] br i1 %t46, label %then10152, label %else10153 then10152: %t47 = load i64, ptr %a25 %t48 = add i64 %t47, 1 store i64 %t48, ptr %a25 br label %endif10154 else10153: %t49 = load i8, ptr %a41 %t50 = icmp eq i8 %t49, 40 br label %logic.from10155 logic.from10155: br i1 %t50, label %logic.end10157, label %logic.rhs10156 logic.rhs10156: %t51 = load i8, ptr %a41 %t52 = icmp eq i8 %t51, 91 br label %logic.rend10158 logic.rend10158: br label %logic.end10157 logic.end10157: %t53 = phi i1 [ true, %logic.from10155 ], [ %t52, %logic.rend10158 ] br i1 %t53, label %then10159, label %else10160 then10159: %t54 = load i64, ptr %a25 %t55 = icmp eq i64 %t54, 0 br i1 %t55, label %then10162, label %else10163 then10162: %t56 = load i8, ptr %a41 %t57 = icmp eq i8 %t56, 40 br i1 %t57, label %then10165, label %endif10167 then10165: %t58 = load i64, ptr %a31 store i64 %t58, ptr %a27 br label %while.end10145 endif10167: br label %endif10164 else10163: %t59 = load i64, ptr %a25 %t60 = sub i64 %t59, 1 store i64 %t60, ptr %a25 br label %endif10164 endif10164: br label %endif10161 else10160: %t61 = load i8, ptr %a41 %t62 = icmp eq i8 %t61, 44 br label %logic.from10168 logic.from10168: br i1 %t62, label %logic.rhs10169, label %logic.end10170 logic.rhs10169: %t63 = load i64, ptr %a25 %t64 = icmp eq i64 %t63, 0 br label %logic.rend10171 logic.rend10171: br label %logic.end10170 logic.end10170: %t65 = phi i1 [ false, %logic.from10168 ], [ %t64, %logic.rend10171 ] br i1 %t65, label %then10172, label %endif10174 then10172: %t66 = load i64, ptr %a26 %t67 = add i64 %t66, 1 store i64 %t67, ptr %a26 br label %endif10174 endif10174: br label %endif10161 endif10161: br label %endif10154 endif10154: %t68 = load i64, ptr %a31 %t69 = sub i64 %t68, 1 store i64 %t69, ptr %a31 br label %while.cond10143 while.end10145: %t70 = load i64, ptr %a27 %t71 = icmp slt i64 %t70, 0 br i1 %t71, label %then10175, label %endif10177 then10175: %t72 = call %S.json.Json @finch.json.new_null() ret %S.json.Json %t72 endif10177: %t73 = load i64, ptr %a27 store i64 %t73, ptr %a74 %t75 = load i64, ptr %a74 store i64 %t75, ptr %a76 br label %while.cond10178 while.cond10178: %t77 = load i64, ptr %a76 %t78 = icmp sgt i64 %t77, 0 br label %logic.from10181 logic.from10181: br i1 %t78, label %logic.rhs10182, label %logic.end10183 logic.rhs10182: %t79 = load i64, ptr %a76 %t80 = sub i64 %t79, 1 %t81 = load { ptr, i64, i64 }, ptr %a24 %t82 = extractvalue { ptr, i64, i64 } %t81, 1 %t83 = icmp uge i64 %t80, %t82 br i1 %t83, label %range10184, label %inrange10185 range10184: call void @finch_panic_index(ptr @.str.6739, i64 700, i64 %t80, i64 %t82) unreachable inrange10185: %t84 = extractvalue { ptr, i64, i64 } %t81, 0 %t85 = getelementptr inbounds i8, ptr %t84, i64 %t80 %t86 = load i8, ptr %t85 %t87 = call i1 @finch.lsp.isWordChar(i8 %t86) br label %logic.rend10186 logic.rend10186: br label %logic.end10183 logic.end10183: %t88 = phi i1 [ false, %logic.from10181 ], [ %t87, %logic.rend10186 ] br i1 %t88, label %while.body10179, label %while.end10180 while.body10179: %t89 = load i64, ptr %a76 %t90 = sub i64 %t89, 1 store i64 %t90, ptr %a76 br label %while.cond10178 while.end10180: %t91 = load { ptr, i64, i64 }, ptr %a24 store { ptr, i64, i64 } %t91, ptr %a92 %t94 = load i64, ptr %a76 %t95 = load i64, ptr %a74 call void @finch_str_sub(ptr %a93, ptr %a92, i64 %t94, i64 %t95, ptr @.str.6740, i64 703) %t96 = load { ptr, i64, i64 }, ptr %a93 store { ptr, i64, i64 } %t96, ptr %a97 %t98 = getelementptr inbounds { ptr, i64, i64 }, ptr %a97, i32 0, i32 1 %t99 = load i64, ptr %t98 %t100 = icmp eq i64 %t99, 0 br i1 %t100, label %then10187, label %endif10189 then10187: %t101 = call %S.json.Json @finch.json.new_null() ret %S.json.Json %t101 endif10189: store { ptr, i64, i64 } { ptr @.str.6741, i64 0, i64 0 }, ptr %a102 %t103 = load i64, ptr %a76 %t104 = icmp sgt i64 %t103, 0 br label %logic.from10190 logic.from10190: br i1 %t104, label %logic.rhs10191, label %logic.end10192 logic.rhs10191: %t105 = load i64, ptr %a76 %t106 = sub i64 %t105, 1 %t107 = load { ptr, i64, i64 }, ptr %a24 %t108 = extractvalue { ptr, i64, i64 } %t107, 1 %t109 = icmp uge i64 %t106, %t108 br i1 %t109, label %range10193, label %inrange10194 range10193: call void @finch_panic_index(ptr @.str.6742, i64 708, i64 %t106, i64 %t108) unreachable inrange10194: %t110 = extractvalue { ptr, i64, i64 } %t107, 0 %t111 = getelementptr inbounds i8, ptr %t110, i64 %t106 %t112 = load i8, ptr %t111 %t113 = icmp eq i8 %t112, 46 br label %logic.rend10195 logic.rend10195: br label %logic.end10192 logic.end10192: %t114 = phi i1 [ false, %logic.from10190 ], [ %t113, %logic.rend10195 ] br i1 %t114, label %then10196, label %endif10198 then10196: %t115 = load i64, ptr %a76 %t116 = sub i64 %t115, 1 store i64 %t116, ptr %a117 br label %while.cond10199 while.cond10199: %t118 = load i64, ptr %a117 %t119 = icmp sgt i64 %t118, 0 br label %logic.from10202 logic.from10202: br i1 %t119, label %logic.rhs10203, label %logic.end10204 logic.rhs10203: %t120 = load i64, ptr %a117 %t121 = sub i64 %t120, 1 %t122 = load { ptr, i64, i64 }, ptr %a24 %t123 = extractvalue { ptr, i64, i64 } %t122, 1 %t124 = icmp uge i64 %t121, %t123 br i1 %t124, label %range10205, label %inrange10206 range10205: call void @finch_panic_index(ptr @.str.6743, i64 711, i64 %t121, i64 %t123) unreachable inrange10206: %t125 = extractvalue { ptr, i64, i64 } %t122, 0 %t126 = getelementptr inbounds i8, ptr %t125, i64 %t121 %t127 = load i8, ptr %t126 %t128 = call i1 @finch.lsp.isWordChar(i8 %t127) br label %logic.rend10207 logic.rend10207: br label %logic.end10204 logic.end10204: %t129 = phi i1 [ false, %logic.from10202 ], [ %t128, %logic.rend10207 ] br i1 %t129, label %while.body10200, label %while.end10201 while.body10200: %t130 = load i64, ptr %a117 %t131 = sub i64 %t130, 1 store i64 %t131, ptr %a117 br label %while.cond10199 while.end10201: %t132 = load { ptr, i64, i64 }, ptr %a24 store { ptr, i64, i64 } %t132, ptr %a133 %t135 = load i64, ptr %a117 %t136 = load i64, ptr %a76 %t137 = sub i64 %t136, 1 call void @finch_str_sub(ptr %a134, ptr %a133, i64 %t135, i64 %t137, ptr @.str.6744, i64 714) %t138 = load { ptr, i64, i64 }, ptr %a134 store { ptr, i64, i64 } %t138, ptr %a139 %t140 = load %S.lsp.Analysis, ptr %a1 %t141 = load { ptr, i64, i64 }, ptr %a3 %t142 = load { ptr, i64, i64 }, ptr %a139 %t143 = load i64, ptr %a4 %t144 = call %S.lsp.VarRec @finch.lsp.varNamed(%S.lsp.Analysis %t140, { ptr, i64, i64 } %t141, { ptr, i64, i64 } %t142, i64 %t143) %t145 = extractvalue %S.lsp.VarRec %t144, 1 store { ptr, i64, i64 } %t145, ptr %a146 call void @finch_str_copy(ptr %a147, ptr %a146) %t148 = load { ptr, i64, i64 }, ptr %a147 store { ptr, i64, i64 } %t148, ptr %a149 %t150 = load { ptr, i64, i64 }, ptr %a149 store { ptr, i64, i64 } %t150, ptr %a151 store { ptr, i64, i64 } { ptr @.str.6746, i64 4, i64 0 }, ptr %a153 %t154 = call i32 @finch_str_starts(ptr %a151, ptr %a153) %t155 = icmp ne i32 %t154, 0 br label %logic.from10208 logic.from10208: br i1 %t155, label %logic.rhs10209, label %logic.end10210 logic.rhs10209: %t156 = load { ptr, i64, i64 }, ptr %a149 store { ptr, i64, i64 } %t156, ptr %a157 store { ptr, i64, i64 } { ptr @.str.6748, i64 1, i64 0 }, ptr %a159 %t160 = call i32 @finch_str_ends(ptr %a157, ptr %a159) %t161 = icmp ne i32 %t160, 0 br label %logic.rend10211 logic.rend10211: br label %logic.end10210 logic.end10210: %t162 = phi i1 [ false, %logic.from10208 ], [ %t161, %logic.rend10211 ] br i1 %t162, label %then10212, label %endif10214 then10212: %t163 = load { ptr, i64, i64 }, ptr %a149 store { ptr, i64, i64 } %t163, ptr %a164 %t166 = getelementptr inbounds { ptr, i64, i64 }, ptr %a149, i32 0, i32 1 %t167 = load i64, ptr %t166 %t168 = sub i64 %t167, 1 call void @finch_str_sub(ptr %a165, ptr %a164, i64 4, i64 %t168, ptr @.str.6749, i64 717) %t169 = load { ptr, i64, i64 }, ptr %a165 store { ptr, i64, i64 } %t169, ptr %a149 br label %endif10214 endif10214: %t170 = load { ptr, i64, i64 }, ptr %a149 store { ptr, i64, i64 } %t170, ptr %a171 call void @finch_str_copy(ptr %a172, ptr %a171) %t173 = load { ptr, i64, i64 }, ptr %a172 store { ptr, i64, i64 } %t173, ptr %a102 br label %endif10198 endif10198: %t174 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 2 store i64 0, ptr %a175 br label %each.cond10215 each.cond10215: %t176 = getelementptr inbounds { ptr, i64, i64 }, ptr %t174, i32 0, i32 1 %t177 = load i64, ptr %t176 %t178 = load i64, ptr %a175 %t179 = icmp slt i64 %t178, %t177 br i1 %t179, label %each.body10216, label %each.end10218 each.body10216: %t180 = load ptr, ptr %t174 %t181 = getelementptr inbounds %S.lsp.FnRec, ptr %t180, i64 %t178 %t182 = load %S.lsp.FnRec, ptr %t181 store %S.lsp.FnRec %t182, ptr %a183 %t184 = getelementptr inbounds %S.lsp.FnRec, ptr %a183, i32 0, i32 1 %t185 = load { ptr, i64, i64 }, ptr %t184 %t186 = load { ptr, i64, i64 }, ptr %a97 store { ptr, i64, i64 } %t185, ptr %a187 store { ptr, i64, i64 } %t186, ptr %a188 %t189 = call i32 @finch_str_eq(ptr %a187, ptr %a188) %t190 = icmp ne i32 %t189, 0 br label %logic.from10219 logic.from10219: br i1 %t190, label %logic.rhs10220, label %logic.end10221 logic.rhs10220: %t191 = getelementptr inbounds %S.lsp.FnRec, ptr %a183, i32 0, i32 2 %t192 = load { ptr, i64, i64 }, ptr %t191 %t193 = load { ptr, i64, i64 }, ptr %a102 store { ptr, i64, i64 } %t192, ptr %a194 store { ptr, i64, i64 } %t193, ptr %a195 %t196 = call i32 @finch_str_eq(ptr %a194, ptr %a195) %t197 = icmp ne i32 %t196, 0 br label %logic.rend10222 logic.rend10222: br label %logic.end10221 logic.end10221: %t198 = phi i1 [ false, %logic.from10219 ], [ %t197, %logic.rend10222 ] br i1 %t198, label %then10223, label %endif10225 then10223: %t199 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t199, ptr %a200 %t201 = getelementptr inbounds %S.lsp.FnRec, ptr %a183, i32 0, i32 7 %t202 = load { ptr, i64, i64 }, ptr %t201 %t203 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t202) call void @finch.json.Json.set(ptr %a200, { ptr, i64, i64 } { ptr @.str.6750, i64 5, i64 0 }, %S.json.Json %t203) %t204 = call %S.json.Json @finch.json.new_list() store %S.json.Json %t204, ptr %a205 %t206 = getelementptr inbounds %S.lsp.FnRec, ptr %a183, i32 0, i32 8 store i64 0, ptr %a207 br label %each.cond10226 each.cond10226: %t208 = getelementptr inbounds { ptr, i64, i64 }, ptr %t206, i32 0, i32 1 %t209 = load i64, ptr %t208 %t210 = load i64, ptr %a207 %t211 = icmp slt i64 %t210, %t209 br i1 %t211, label %each.body10227, label %each.end10229 each.body10227: %t212 = load ptr, ptr %t206 %t213 = getelementptr inbounds { ptr, i64, i64 }, ptr %t212, i64 %t210 %t214 = load { ptr, i64, i64 }, ptr %t213 store { ptr, i64, i64 } %t214, ptr %a215 %t216 = getelementptr inbounds { ptr, i64, i64 }, ptr %a215, i32 0, i32 1 %t217 = load i64, ptr %t216 %t218 = icmp sgt i64 %t217, 0 br i1 %t218, label %then10230, label %endif10232 then10230: %t219 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t219, ptr %a220 %t221 = load { ptr, i64, i64 }, ptr %a215 %t222 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t221) call void @finch.json.Json.set(ptr %a220, { ptr, i64, i64 } { ptr @.str.6751, i64 5, i64 0 }, %S.json.Json %t222) %t223 = load %S.json.Json, ptr %a220 call void @finch.json.Json.push(ptr %a205, %S.json.Json %t223) br label %endif10232 endif10232: br label %each.step10228 each.step10228: %t224 = load i64, ptr %a207 %t225 = add i64 %t224, 1 store i64 %t225, ptr %a207 br label %each.cond10226 each.end10229: %t226 = load %S.json.Json, ptr %a205 call void @finch.json.Json.set(ptr %a200, { ptr, i64, i64 } { ptr @.str.6752, i64 10, i64 0 }, %S.json.Json %t226) %t227 = call %S.json.Json @finch.json.new_list() store %S.json.Json %t227, ptr %a228 %t229 = load %S.json.Json, ptr %a200 call void @finch.json.Json.push(ptr %a228, %S.json.Json %t229) %t230 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t230, ptr %a231 %t232 = load %S.json.Json, ptr %a228 call void @finch.json.Json.set(ptr %a231, { ptr, i64, i64 } { ptr @.str.6753, i64 10, i64 0 }, %S.json.Json %t232) %t233 = call %S.json.Json @finch.lsp.num(i64 0) call void @finch.json.Json.set(ptr %a231, { ptr, i64, i64 } { ptr @.str.6754, i64 15, i64 0 }, %S.json.Json %t233) %t234 = load i64, ptr %a26 %t235 = call %S.json.Json @finch.lsp.num(i64 %t234) call void @finch.json.Json.set(ptr %a231, { ptr, i64, i64 } { ptr @.str.6755, i64 15, i64 0 }, %S.json.Json %t235) %t236 = load %S.json.Json, ptr %a231 ret %S.json.Json %t236 endif10225: br label %each.step10217 each.step10217: %t237 = load i64, ptr %a175 %t238 = add i64 %t237, 1 store i64 %t238, ptr %a175 br label %each.cond10215 each.end10218: %t239 = call { ptr, i64, i64 } @finch.docs.builtins() %t240 = load { ptr, i64, i64 }, ptr %a97 %t241 = call %S.docs.Doc @finch.docs.find({ ptr, i64, i64 } %t239, { ptr, i64, i64 } %t240) store %S.docs.Doc %t241, ptr %a242 %t243 = getelementptr inbounds %S.docs.Doc, ptr %a242, i32 0, i32 0 %t244 = getelementptr inbounds { ptr, i64, i64 }, ptr %t243, i32 0, i32 1 %t245 = load i64, ptr %t244 %t246 = icmp sgt i64 %t245, 0 br i1 %t246, label %then10233, label %endif10235 then10233: %t247 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t247, ptr %a248 %t249 = getelementptr inbounds %S.docs.Doc, ptr %a242, i32 0, i32 1 %t250 = load { ptr, i64, i64 }, ptr %t249 %t251 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t250) call void @finch.json.Json.set(ptr %a248, { ptr, i64, i64 } { ptr @.str.6756, i64 5, i64 0 }, %S.json.Json %t251) %t252 = getelementptr inbounds %S.docs.Doc, ptr %a242, i32 0, i32 2 %t253 = load { ptr, i64, i64 }, ptr %t252 %t254 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t253) call void @finch.json.Json.set(ptr %a248, { ptr, i64, i64 } { ptr @.str.6757, i64 13, i64 0 }, %S.json.Json %t254) %t255 = call %S.json.Json @finch.json.new_list() store %S.json.Json %t255, ptr %a256 %t257 = load %S.json.Json, ptr %a248 call void @finch.json.Json.push(ptr %a256, %S.json.Json %t257) %t258 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t258, ptr %a259 %t260 = load %S.json.Json, ptr %a256 call void @finch.json.Json.set(ptr %a259, { ptr, i64, i64 } { ptr @.str.6758, i64 10, i64 0 }, %S.json.Json %t260) %t261 = call %S.json.Json @finch.lsp.num(i64 0) call void @finch.json.Json.set(ptr %a259, { ptr, i64, i64 } { ptr @.str.6759, i64 15, i64 0 }, %S.json.Json %t261) %t262 = load i64, ptr %a26 %t263 = call %S.json.Json @finch.lsp.num(i64 %t262) call void @finch.json.Json.set(ptr %a259, { ptr, i64, i64 } { ptr @.str.6760, i64 15, i64 0 }, %S.json.Json %t263) %t264 = load %S.json.Json, ptr %a259 ret %S.json.Json %t264 endif10235: %t265 = call %S.json.Json @finch.json.new_null() ret %S.json.Json %t265 } define internal { ptr, i64, i64 } @finch.lsp.textOf(%S.json.Json %p0) { entry: %a1 = alloca %S.json.Json, align 16 %a3 = alloca %S.json.Json, align 16 %a5 = alloca %S.json.Json, align 16 store %S.json.Json %p0, ptr %a1 %t2 = call %S.json.Json @finch.json.Json.get(ptr %a1, { ptr, i64, i64 } { ptr @.str.6761, i64 12, i64 0 }) store %S.json.Json %t2, ptr %a3 %t4 = call %S.json.Json @finch.json.Json.get(ptr %a3, { ptr, i64, i64 } { ptr @.str.6762, i64 4, i64 0 }) store %S.json.Json %t4, ptr %a5 %t6 = call { ptr, i64, i64 } @finch.json.Json.str_or(ptr %a5, { ptr, i64, i64 } { ptr @.str.6763, i64 0, i64 0 }) ret { ptr, i64, i64 } %t6 } define internal { ptr, i64, i64 } @finch.lsp.pathOf(%S.json.Json %p0) { entry: %a1 = alloca %S.json.Json, align 16 %a3 = alloca %S.json.Json, align 16 %a5 = alloca %S.json.Json, align 16 store %S.json.Json %p0, ptr %a1 %t2 = call %S.json.Json @finch.json.Json.get(ptr %a1, { ptr, i64, i64 } { ptr @.str.6764, i64 12, i64 0 }) store %S.json.Json %t2, ptr %a3 %t4 = call %S.json.Json @finch.json.Json.get(ptr %a3, { ptr, i64, i64 } { ptr @.str.6765, i64 3, i64 0 }) store %S.json.Json %t4, ptr %a5 %t6 = call { ptr, i64, i64 } @finch.json.Json.str_or(ptr %a5, { ptr, i64, i64 } { ptr @.str.6766, i64 0, i64 0 }) %t7 = call { ptr, i64, i64 } @finch.lsp.uriToPath({ ptr, i64, i64 } %t6) ret { ptr, i64, i64 } %t7 } define internal void @finch.lsp.Server.answer(ptr %self, %S.json.Json %p0) { entry: %a1 = alloca %S.json.Json, align 16 %a3 = alloca %S.json.Json, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca %S.json.Json, align 16 %a9 = alloca %S.json.Json, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca %S.json.Json, align 16 %a22 = alloca %S.json.Json, align 16 %a24 = alloca %S.json.Json, align 16 %a29 = alloca %S.json.Json, align 16 %a31 = alloca %S.json.Json, align 16 %a37 = alloca %S.json.Json, align 16 %a40 = alloca %S.json.Json, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a59 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca i32, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca %S.json.Json, align 16 %a95 = alloca %S.json.Json, align 16 %a97 = alloca %S.json.Json, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca i32, align 16 %a113 = alloca { ptr, i64, i64 }, align 16 %a114 = alloca { ptr, i64, i64 }, align 16 %a119 = alloca { ptr, i64, i64 }, align 16 %a122 = alloca { ptr, i64, i64 }, align 16 %a126 = alloca { ptr, i64, i64 }, align 16 %a127 = alloca { ptr, i64, i64 }, align 16 %a132 = alloca { ptr, i64, i64 }, align 16 %a135 = alloca { ptr, i64, i64 }, align 16 %a140 = alloca { ptr, i64, i64 }, align 16 %a145 = alloca { ptr, i64, i64 }, align 16 %a149 = alloca %S.json.Json, align 16 %a155 = alloca { ptr, i64, i64 }, align 16 %a156 = alloca { ptr, i64, i64 }, align 16 %a159 = alloca { ptr, i64, i64 }, align 16 %a160 = alloca { ptr, i64, i64 }, align 16 %a163 = alloca { ptr, i64, i64 }, align 16 %a164 = alloca { ptr, i64, i64 }, align 16 %a167 = alloca { ptr, i64, i64 }, align 16 %a168 = alloca { ptr, i64, i64 }, align 16 %a171 = alloca { ptr, i64, i64 }, align 16 %a172 = alloca { ptr, i64, i64 }, align 16 %a177 = alloca { ptr, i64, i64 }, align 16 %a179 = alloca %S.json.Json, align 16 %a181 = alloca %S.json.Json, align 16 %a184 = alloca i64, align 16 %a186 = alloca %S.json.Json, align 16 %a188 = alloca %S.json.Json, align 16 %a191 = alloca i64, align 16 %a194 = alloca { ptr, i64, i64 }, align 16 %a202 = alloca { ptr, i64, i64 }, align 16 %a205 = alloca { ptr, i64, i64 }, align 16 %a206 = alloca { ptr, i64, i64 }, align 16 %a212 = alloca %S.lsp.Analysis, align 16 %a213 = alloca %S.lsp.Analysis, align 16 %a215 = alloca %S.lsp.Analysis, align 16 %a216 = alloca { ptr, i64, i64 }, align 16 %a219 = alloca { ptr, i64, i64 }, align 16 %a224 = alloca { ptr, i64, i64 }, align 16 %a227 = alloca { ptr, i64, i64 }, align 16 %a228 = alloca { ptr, i64, i64 }, align 16 %a234 = alloca { ptr, i64, i64 }, align 16 %a235 = alloca { ptr, i64, i64 }, align 16 %a238 = alloca { ptr, i64, i64 }, align 16 %a239 = alloca { ptr, i64, i64 }, align 16 %a248 = alloca { ptr, i64, i64 }, align 16 %a249 = alloca { ptr, i64, i64 }, align 16 %a258 = alloca { ptr, i64, i64 }, align 16 %a259 = alloca { ptr, i64, i64 }, align 16 %a269 = alloca { ptr, i64, i64 }, align 16 %a270 = alloca { ptr, i64, i64 }, align 16 store %S.json.Json %p0, ptr %a1 %t2 = call %S.json.Json @finch.json.Json.get(ptr %a1, { ptr, i64, i64 } { ptr @.str.6767, i64 6, i64 0 }) store %S.json.Json %t2, ptr %a3 %t4 = call { ptr, i64, i64 } @finch.json.Json.str_or(ptr %a3, { ptr, i64, i64 } { ptr @.str.6768, i64 0, i64 0 }) store { ptr, i64, i64 } %t4, ptr %a5 %t6 = call %S.json.Json @finch.json.Json.get(ptr %a1, { ptr, i64, i64 } { ptr @.str.6769, i64 6, i64 0 }) store %S.json.Json %t6, ptr %a7 %t8 = call %S.json.Json @finch.json.Json.get(ptr %a1, { ptr, i64, i64 } { ptr @.str.6770, i64 2, i64 0 }) store %S.json.Json %t8, ptr %a9 %t10 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } %t10, ptr %a11 store { ptr, i64, i64 } { ptr @.str.6771, i64 10, i64 0 }, ptr %a12 %t13 = call i32 @finch_str_eq(ptr %a11, ptr %a12) %t14 = icmp ne i32 %t13, 0 br i1 %t14, label %match.arm10237, label %match.next10238 match.arm10237: %t15 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t15, ptr %a16 %t17 = call %S.json.Json @finch.lsp.num(i64 1) call void @finch.json.Json.set(ptr %a16, { ptr, i64, i64 } { ptr @.str.6772, i64 16, i64 0 }, %S.json.Json %t17) %t18 = call %S.json.Json @finch.json.new_bool(i1 true) call void @finch.json.Json.set(ptr %a16, { ptr, i64, i64 } { ptr @.str.6773, i64 13, i64 0 }, %S.json.Json %t18) %t19 = call %S.json.Json @finch.json.new_bool(i1 true) call void @finch.json.Json.set(ptr %a16, { ptr, i64, i64 } { ptr @.str.6774, i64 18, i64 0 }, %S.json.Json %t19) %t20 = call %S.json.Json @finch.json.new_bool(i1 true) call void @finch.json.Json.set(ptr %a16, { ptr, i64, i64 } { ptr @.str.6775, i64 22, i64 0 }, %S.json.Json %t20) %t21 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t21, ptr %a22 %t23 = call %S.json.Json @finch.json.new_list() store %S.json.Json %t23, ptr %a24 %t25 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.6776, i64 1, i64 0 }) call void @finch.json.Json.push(ptr %a24, %S.json.Json %t25) %t26 = load %S.json.Json, ptr %a24 call void @finch.json.Json.set(ptr %a22, { ptr, i64, i64 } { ptr @.str.6777, i64 17, i64 0 }, %S.json.Json %t26) %t27 = load %S.json.Json, ptr %a22 call void @finch.json.Json.set(ptr %a16, { ptr, i64, i64 } { ptr @.str.6778, i64 18, i64 0 }, %S.json.Json %t27) %t28 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t28, ptr %a29 %t30 = call %S.json.Json @finch.json.new_list() store %S.json.Json %t30, ptr %a31 %t32 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.6779, i64 1, i64 0 }) call void @finch.json.Json.push(ptr %a31, %S.json.Json %t32) %t33 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.6780, i64 1, i64 0 }) call void @finch.json.Json.push(ptr %a31, %S.json.Json %t33) %t34 = load %S.json.Json, ptr %a31 call void @finch.json.Json.set(ptr %a29, { ptr, i64, i64 } { ptr @.str.6781, i64 17, i64 0 }, %S.json.Json %t34) %t35 = load %S.json.Json, ptr %a29 call void @finch.json.Json.set(ptr %a16, { ptr, i64, i64 } { ptr @.str.6782, i64 21, i64 0 }, %S.json.Json %t35) %t36 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t36, ptr %a37 %t38 = load %S.json.Json, ptr %a16 call void @finch.json.Json.set(ptr %a37, { ptr, i64, i64 } { ptr @.str.6783, i64 12, i64 0 }, %S.json.Json %t38) %t39 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t39, ptr %a40 %t41 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.6785, i64 5, i64 0 }) call void @finch.json.Json.set(ptr %a40, { ptr, i64, i64 } { ptr @.str.6784, i64 4, i64 0 }, %S.json.Json %t41) %t42 = load %S.json.Json, ptr %a40 call void @finch.json.Json.set(ptr %a37, { ptr, i64, i64 } { ptr @.str.6786, i64 10, i64 0 }, %S.json.Json %t42) %t43 = load %S.json.Json, ptr %a9 %t44 = load %S.json.Json, ptr %a37 call void @finch.lsp.reply(%S.json.Json %t43, %S.json.Json %t44) br label %match.end10236 match.next10238: store { ptr, i64, i64 } %t10, ptr %a45 store { ptr, i64, i64 } { ptr @.str.6787, i64 8, i64 0 }, ptr %a46 %t47 = call i32 @finch_str_eq(ptr %a45, ptr %a46) %t48 = icmp ne i32 %t47, 0 br i1 %t48, label %match.arm10239, label %match.next10240 match.arm10239: %t49 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 6 store i1 true, ptr %t49 %t50 = load %S.json.Json, ptr %a9 %t51 = call %S.json.Json @finch.json.new_null() call void @finch.lsp.reply(%S.json.Json %t50, %S.json.Json %t51) br label %match.end10236 match.next10240: store { ptr, i64, i64 } %t10, ptr %a52 store { ptr, i64, i64 } { ptr @.str.6788, i64 4, i64 0 }, ptr %a53 %t54 = call i32 @finch_str_eq(ptr %a52, ptr %a53) %t55 = icmp ne i32 %t54, 0 br i1 %t55, label %match.arm10241, label %match.next10242 match.arm10241: %t56 = trunc i64 0 to i32 %t57 = call i32 @fflush(ptr null) call void @exit(i32 %t56) br label %match.end10236 match.next10242: store { ptr, i64, i64 } %t10, ptr %a58 store { ptr, i64, i64 } { ptr @.str.6789, i64 20, i64 0 }, ptr %a59 %t60 = call i32 @finch_str_eq(ptr %a58, ptr %a59) %t61 = icmp ne i32 %t60, 0 br i1 %t61, label %match.arm10243, label %match.next10244 match.arm10243: %t62 = load %S.json.Json, ptr %a7 %t63 = call { ptr, i64, i64 } @finch.lsp.pathOf(%S.json.Json %t62) store { ptr, i64, i64 } %t63, ptr %a64 %t65 = load %S.json.Json, ptr %a7 %t66 = call { ptr, i64, i64 } @finch.lsp.textOf(%S.json.Json %t65) %t67 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 2 %t68 = load { ptr, i64, i64 }, ptr %a64 store { ptr, i64, i64 } %t68, ptr %a69 store i32 0, ptr %a70 %t71 = call i64 @finch_map_slot(ptr %t67, ptr %a69, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a70) %t72 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t67, i32 0, i32 0 %t73 = load ptr, ptr %t72 %t74 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t73, i64 %t71 %t75 = load i32, ptr %a70 %t76 = icmp ne i32 %t75, 0 br i1 %t76, label %map.new10245, label %map.have10246 map.new10245: %t77 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t74, i32 0, i32 1 call void @finch_str_copy(ptr %t77, ptr %a69) %t78 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t74, i32 0, i32 2 store { ptr, i64, i64 } zeroinitializer, ptr %t78 br label %map.have10246 map.have10246: %t79 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t74, i32 0, i32 2 store { ptr, i64, i64 } %t66, ptr %t79 %t80 = load { ptr, i64, i64 }, ptr %a64 call void @finch.lsp.Server.analyse(ptr %self, { ptr, i64, i64 } %t80) br label %match.end10236 match.next10244: store { ptr, i64, i64 } %t10, ptr %a81 store { ptr, i64, i64 } { ptr @.str.6790, i64 22, i64 0 }, ptr %a82 %t83 = call i32 @finch_str_eq(ptr %a81, ptr %a82) %t84 = icmp ne i32 %t83, 0 br i1 %t84, label %match.arm10247, label %match.next10248 match.arm10247: %t85 = load %S.json.Json, ptr %a7 %t86 = call { ptr, i64, i64 } @finch.lsp.pathOf(%S.json.Json %t85) store { ptr, i64, i64 } %t86, ptr %a87 %t88 = call %S.json.Json @finch.json.Json.get(ptr %a7, { ptr, i64, i64 } { ptr @.str.6791, i64 14, i64 0 }) store %S.json.Json %t88, ptr %a89 %t90 = call i64 @finch.json.Json.len(ptr %a89) %t91 = icmp sgt i64 %t90, 0 br i1 %t91, label %then10249, label %endif10251 then10249: %t92 = call i64 @finch.json.Json.len(ptr %a89) %t93 = sub i64 %t92, 1 %t94 = call %S.json.Json @finch.json.Json.at(ptr %a89, i64 %t93) store %S.json.Json %t94, ptr %a95 %t96 = call %S.json.Json @finch.json.Json.get(ptr %a95, { ptr, i64, i64 } { ptr @.str.6792, i64 4, i64 0 }) store %S.json.Json %t96, ptr %a97 %t98 = call { ptr, i64, i64 } @finch.json.Json.str_or(ptr %a97, { ptr, i64, i64 } { ptr @.str.6793, i64 0, i64 0 }) %t99 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 2 %t100 = load { ptr, i64, i64 }, ptr %a87 store { ptr, i64, i64 } %t100, ptr %a101 store i32 0, ptr %a102 %t103 = call i64 @finch_map_slot(ptr %t99, ptr %a101, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a102) %t104 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t99, i32 0, i32 0 %t105 = load ptr, ptr %t104 %t106 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t105, i64 %t103 %t107 = load i32, ptr %a102 %t108 = icmp ne i32 %t107, 0 br i1 %t108, label %map.new10252, label %map.have10253 map.new10252: %t109 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t106, i32 0, i32 1 call void @finch_str_copy(ptr %t109, ptr %a101) %t110 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t106, i32 0, i32 2 store { ptr, i64, i64 } zeroinitializer, ptr %t110 br label %map.have10253 map.have10253: %t111 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t106, i32 0, i32 2 store { ptr, i64, i64 } %t98, ptr %t111 %t112 = load { ptr, i64, i64 }, ptr %a87 call void @finch.lsp.Server.analyse(ptr %self, { ptr, i64, i64 } %t112) br label %endif10251 endif10251: br label %match.end10236 match.next10248: store { ptr, i64, i64 } %t10, ptr %a113 store { ptr, i64, i64 } { ptr @.str.6794, i64 20, i64 0 }, ptr %a114 %t115 = call i32 @finch_str_eq(ptr %a113, ptr %a114) %t116 = icmp ne i32 %t115, 0 br i1 %t116, label %match.arm10254, label %match.next10255 match.arm10254: %t117 = load %S.json.Json, ptr %a7 %t118 = call { ptr, i64, i64 } @finch.lsp.pathOf(%S.json.Json %t117) store { ptr, i64, i64 } %t118, ptr %a119 %t120 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 2 %t121 = load { ptr, i64, i64 }, ptr %a119 store { ptr, i64, i64 } %t121, ptr %a122 %t123 = call i64 @finch_map_find(ptr %t120, ptr %a122, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t124 = icmp sge i64 %t123, 0 br i1 %t124, label %then10256, label %endif10258 then10256: %t125 = load { ptr, i64, i64 }, ptr %a119 call void @finch.lsp.Server.analyse(ptr %self, { ptr, i64, i64 } %t125) br label %endif10258 endif10258: br label %match.end10236 match.next10255: store { ptr, i64, i64 } %t10, ptr %a126 store { ptr, i64, i64 } { ptr @.str.6795, i64 21, i64 0 }, ptr %a127 %t128 = call i32 @finch_str_eq(ptr %a126, ptr %a127) %t129 = icmp ne i32 %t128, 0 br i1 %t129, label %match.arm10259, label %match.next10260 match.arm10259: %t130 = load %S.json.Json, ptr %a7 %t131 = call { ptr, i64, i64 } @finch.lsp.pathOf(%S.json.Json %t130) store { ptr, i64, i64 } %t131, ptr %a132 %t133 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 2 %t134 = load { ptr, i64, i64 }, ptr %a132 store { ptr, i64, i64 } %t134, ptr %a135 %t136 = call i64 @finch_map_find(ptr %t133, ptr %a135, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t137 = icmp sge i64 %t136, 0 br i1 %t137, label %remove.hit10261, label %remove.end10262 remove.hit10261: call void @finch_map_remove_at(ptr %t133, i64 %t136, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64)) br label %remove.end10262 remove.end10262: %t138 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 3 %t139 = load { ptr, i64, i64 }, ptr %a132 store { ptr, i64, i64 } %t139, ptr %a140 %t141 = call i64 @finch_map_find(ptr %t138, ptr %a140, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t142 = icmp sge i64 %t141, 0 br i1 %t142, label %remove.hit10263, label %remove.end10264 remove.hit10263: call void @finch_map_remove_at(ptr %t138, i64 %t141, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr null, i32 1) to i64)) br label %remove.end10264 remove.end10264: %t143 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 4 %t144 = load { ptr, i64, i64 }, ptr %a132 store { ptr, i64, i64 } %t144, ptr %a145 %t146 = call i64 @finch_map_find(ptr %t143, ptr %a145, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t147 = icmp sge i64 %t146, 0 br i1 %t147, label %remove.hit10265, label %remove.end10266 remove.hit10265: call void @finch_map_remove_at(ptr %t143, i64 %t146, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr null, i32 1) to i64)) br label %remove.end10266 remove.end10266: %t148 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t148, ptr %a149 %t150 = load { ptr, i64, i64 }, ptr %a132 %t151 = call { ptr, i64, i64 } @finch.lsp.pathToUri({ ptr, i64, i64 } %t150) %t152 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t151) call void @finch.json.Json.set(ptr %a149, { ptr, i64, i64 } { ptr @.str.6796, i64 3, i64 0 }, %S.json.Json %t152) %t153 = call %S.json.Json @finch.json.new_list() call void @finch.json.Json.set(ptr %a149, { ptr, i64, i64 } { ptr @.str.6797, i64 11, i64 0 }, %S.json.Json %t153) %t154 = load %S.json.Json, ptr %a149 call void @finch.lsp.notify({ ptr, i64, i64 } { ptr @.str.6798, i64 31, i64 0 }, %S.json.Json %t154) br label %match.end10236 match.next10260: store { ptr, i64, i64 } %t10, ptr %a155 store { ptr, i64, i64 } { ptr @.str.6799, i64 18, i64 0 }, ptr %a156 %t157 = call i32 @finch_str_eq(ptr %a155, ptr %a156) %t158 = icmp ne i32 %t157, 0 br i1 %t158, label %match.arm10267, label %match.or10269 match.or10269: store { ptr, i64, i64 } %t10, ptr %a159 store { ptr, i64, i64 } { ptr @.str.6800, i64 23, i64 0 }, ptr %a160 %t161 = call i32 @finch_str_eq(ptr %a159, ptr %a160) %t162 = icmp ne i32 %t161, 0 br i1 %t162, label %match.arm10267, label %match.or10270 match.or10270: store { ptr, i64, i64 } %t10, ptr %a163 store { ptr, i64, i64 } { ptr @.str.6801, i64 23, i64 0 }, ptr %a164 %t165 = call i32 @finch_str_eq(ptr %a163, ptr %a164) %t166 = icmp ne i32 %t165, 0 br i1 %t166, label %match.arm10267, label %match.or10271 match.or10271: store { ptr, i64, i64 } %t10, ptr %a167 store { ptr, i64, i64 } { ptr @.str.6802, i64 27, i64 0 }, ptr %a168 %t169 = call i32 @finch_str_eq(ptr %a167, ptr %a168) %t170 = icmp ne i32 %t169, 0 br i1 %t170, label %match.arm10267, label %match.or10272 match.or10272: store { ptr, i64, i64 } %t10, ptr %a171 store { ptr, i64, i64 } { ptr @.str.6803, i64 26, i64 0 }, ptr %a172 %t173 = call i32 @finch_str_eq(ptr %a171, ptr %a172) %t174 = icmp ne i32 %t173, 0 br i1 %t174, label %match.arm10267, label %match.next10268 match.arm10267: %t175 = load %S.json.Json, ptr %a7 %t176 = call { ptr, i64, i64 } @finch.lsp.pathOf(%S.json.Json %t175) store { ptr, i64, i64 } %t176, ptr %a177 %t178 = call %S.json.Json @finch.json.Json.get(ptr %a7, { ptr, i64, i64 } { ptr @.str.6804, i64 8, i64 0 }) store %S.json.Json %t178, ptr %a179 %t180 = call %S.json.Json @finch.json.Json.get(ptr %a179, { ptr, i64, i64 } { ptr @.str.6805, i64 4, i64 0 }) store %S.json.Json %t180, ptr %a181 %t182 = call i64 @finch.json.Json.int_or(ptr %a181, i64 0) %t183 = add i64 %t182, 1 store i64 %t183, ptr %a184 %t185 = call %S.json.Json @finch.json.Json.get(ptr %a7, { ptr, i64, i64 } { ptr @.str.6806, i64 8, i64 0 }) store %S.json.Json %t185, ptr %a186 %t187 = call %S.json.Json @finch.json.Json.get(ptr %a186, { ptr, i64, i64 } { ptr @.str.6807, i64 9, i64 0 }) store %S.json.Json %t187, ptr %a188 %t189 = call i64 @finch.json.Json.int_or(ptr %a188, i64 0) %t190 = add i64 %t189, 1 store i64 %t190, ptr %a191 %t192 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 3 %t193 = load { ptr, i64, i64 }, ptr %a177 store { ptr, i64, i64 } %t193, ptr %a194 %t195 = call i64 @finch_map_find(ptr %t192, ptr %a194, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t196 = icmp sge i64 %t195, 0 %t197 = xor i1 %t196, true br i1 %t197, label %then10273, label %endif10275 then10273: %t198 = load %S.json.Json, ptr %a9 %t199 = call %S.json.Json @finch.json.new_null() call void @finch.lsp.reply(%S.json.Json %t198, %S.json.Json %t199) ret void endif10275: %t200 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 3 %t201 = load { ptr, i64, i64 }, ptr %a177 store { ptr, i64, i64 } %t201, ptr %a202 %t203 = call i64 @finch_map_find(ptr %t200, ptr %a202, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t204 = icmp slt i64 %t203, 0 br i1 %t204, label %map.missing10276, label %map.found10277 map.missing10276: store { ptr, i64, i64 } zeroinitializer, ptr %a205 store { ptr, i64, i64 } %t201, ptr %a206 call void @finch_buf_str(ptr %a205, ptr %a206, i32 1) call void @finch_map_missing(ptr @.str.6808, i64 842, ptr %a205) unreachable map.found10277: %t207 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t200, i32 0, i32 0 %t208 = load ptr, ptr %t207 %t209 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t208, i64 %t203 %t210 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t209, i32 0, i32 2 %t211 = load %S.lsp.Analysis, ptr %t210 store %S.lsp.Analysis %t211, ptr %a212 call void @finch.copy.S_lsp_Analysis(ptr %a213, ptr %a212) %t214 = load %S.lsp.Analysis, ptr %a213 store %S.lsp.Analysis %t214, ptr %a215 store { ptr, i64, i64 } { ptr @.str.6809, i64 0, i64 0 }, ptr %a216 %t217 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 2 %t218 = load { ptr, i64, i64 }, ptr %a177 store { ptr, i64, i64 } %t218, ptr %a219 %t220 = call i64 @finch_map_find(ptr %t217, ptr %a219, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t221 = icmp sge i64 %t220, 0 br i1 %t221, label %then10278, label %endif10280 then10278: %t222 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 2 %t223 = load { ptr, i64, i64 }, ptr %a177 store { ptr, i64, i64 } %t223, ptr %a224 %t225 = call i64 @finch_map_find(ptr %t222, ptr %a224, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t226 = icmp slt i64 %t225, 0 br i1 %t226, label %map.missing10281, label %map.found10282 map.missing10281: store { ptr, i64, i64 } zeroinitializer, ptr %a227 store { ptr, i64, i64 } %t223, ptr %a228 call void @finch_buf_str(ptr %a227, ptr %a228, i32 1) call void @finch_map_missing(ptr @.str.6810, i64 845, ptr %a227) unreachable map.found10282: %t229 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t222, i32 0, i32 0 %t230 = load ptr, ptr %t229 %t231 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t230, i64 %t225 %t232 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t231, i32 0, i32 2 %t233 = load { ptr, i64, i64 }, ptr %t232 store { ptr, i64, i64 } %t233, ptr %a234 call void @finch_str_copy(ptr %a235, ptr %a234) %t236 = load { ptr, i64, i64 }, ptr %a235 store { ptr, i64, i64 } %t236, ptr %a216 br label %endif10280 endif10280: %t237 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } %t237, ptr %a238 store { ptr, i64, i64 } { ptr @.str.6811, i64 18, i64 0 }, ptr %a239 %t240 = call i32 @finch_str_eq(ptr %a238, ptr %a239) %t241 = icmp ne i32 %t240, 0 br i1 %t241, label %match.arm10284, label %match.next10285 match.arm10284: %t242 = load %S.json.Json, ptr %a9 %t243 = load %S.lsp.Analysis, ptr %a215 %t244 = load { ptr, i64, i64 }, ptr %a177 %t245 = load i64, ptr %a184 %t246 = load i64, ptr %a191 %t247 = call %S.json.Json @finch.lsp.hoverAt(%S.lsp.Analysis %t243, { ptr, i64, i64 } %t244, i64 %t245, i64 %t246) call void @finch.lsp.reply(%S.json.Json %t242, %S.json.Json %t247) br label %match.end10283 match.next10285: store { ptr, i64, i64 } %t237, ptr %a248 store { ptr, i64, i64 } { ptr @.str.6812, i64 23, i64 0 }, ptr %a249 %t250 = call i32 @finch_str_eq(ptr %a248, ptr %a249) %t251 = icmp ne i32 %t250, 0 br i1 %t251, label %match.arm10286, label %match.next10287 match.arm10286: %t252 = load %S.json.Json, ptr %a9 %t253 = load %S.lsp.Analysis, ptr %a215 %t254 = load { ptr, i64, i64 }, ptr %a177 %t255 = load i64, ptr %a184 %t256 = load i64, ptr %a191 %t257 = call %S.json.Json @finch.lsp.definitionAt(%S.lsp.Analysis %t253, { ptr, i64, i64 } %t254, i64 %t255, i64 %t256) call void @finch.lsp.reply(%S.json.Json %t252, %S.json.Json %t257) br label %match.end10283 match.next10287: store { ptr, i64, i64 } %t237, ptr %a258 store { ptr, i64, i64 } { ptr @.str.6813, i64 23, i64 0 }, ptr %a259 %t260 = call i32 @finch_str_eq(ptr %a258, ptr %a259) %t261 = icmp ne i32 %t260, 0 br i1 %t261, label %match.arm10288, label %match.next10289 match.arm10288: %t262 = load %S.json.Json, ptr %a9 %t263 = load %S.lsp.Analysis, ptr %a215 %t264 = load { ptr, i64, i64 }, ptr %a216 %t265 = load { ptr, i64, i64 }, ptr %a177 %t266 = load i64, ptr %a184 %t267 = load i64, ptr %a191 %t268 = call %S.json.Json @finch.lsp.completionAt(%S.lsp.Analysis %t263, { ptr, i64, i64 } %t264, { ptr, i64, i64 } %t265, i64 %t266, i64 %t267) call void @finch.lsp.reply(%S.json.Json %t262, %S.json.Json %t268) br label %match.end10283 match.next10289: store { ptr, i64, i64 } %t237, ptr %a269 store { ptr, i64, i64 } { ptr @.str.6814, i64 27, i64 0 }, ptr %a270 %t271 = call i32 @finch_str_eq(ptr %a269, ptr %a270) %t272 = icmp ne i32 %t271, 0 br i1 %t272, label %match.arm10290, label %match.next10291 match.arm10290: %t273 = load %S.json.Json, ptr %a9 %t274 = load %S.lsp.Analysis, ptr %a215 %t275 = load { ptr, i64, i64 }, ptr %a177 %t276 = call %S.json.Json @finch.lsp.symbolsOf(%S.lsp.Analysis %t274, { ptr, i64, i64 } %t275) call void @finch.lsp.reply(%S.json.Json %t273, %S.json.Json %t276) br label %match.end10283 match.next10291: br label %match.arm10292 match.arm10292: %t277 = load %S.json.Json, ptr %a9 %t278 = load %S.lsp.Analysis, ptr %a215 %t279 = load { ptr, i64, i64 }, ptr %a216 %t280 = load { ptr, i64, i64 }, ptr %a177 %t281 = load i64, ptr %a184 %t282 = load i64, ptr %a191 %t283 = call %S.json.Json @finch.lsp.signatureAt(%S.lsp.Analysis %t278, { ptr, i64, i64 } %t279, { ptr, i64, i64 } %t280, i64 %t281, i64 %t282) call void @finch.lsp.reply(%S.json.Json %t277, %S.json.Json %t283) br label %match.end10283 match.end10283: br label %match.end10236 match.next10268: br label %match.arm10294 match.arm10294: %t284 = getelementptr inbounds %S.json.Json, ptr %a9, i32 0, i32 0 %t285 = load i32, ptr %t284 %t286 = icmp ne i32 %t285, 0 br i1 %t286, label %then10296, label %endif10298 then10296: %t287 = load %S.json.Json, ptr %a9 %t288 = call %S.json.Json @finch.json.new_null() call void @finch.lsp.reply(%S.json.Json %t287, %S.json.Json %t288) br label %endif10298 endif10298: br label %match.end10236 match.end10236: ret void } define internal i64 @finch.lsp.run({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca %S.lsp.Server, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca %S.json.Json, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a32 = alloca { ptr, i64, i64 }, align 16 %a33 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t2, ptr %a3 call void @finch_str_copy(ptr %a4, ptr %a3) %t5 = load { ptr, i64, i64 }, ptr %a4 %t6 = insertvalue %S.lsp.Server zeroinitializer, { ptr, i64, i64 } %t5, 0 %t7 = call i32 @getpid() %t8 = sext i32 %t7 to i64 call void @finch_str_from_int(ptr %a9, i64 %t8) %t10 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } { ptr @.str.6815, i64 15, i64 0 }, ptr %a12 store { ptr, i64, i64 } %t10, ptr %a13 call void @finch_str_concat(ptr %a11, ptr %a12, ptr %a13) %t14 = load { ptr, i64, i64 }, ptr %a11 %t15 = insertvalue %S.lsp.Server %t6, { ptr, i64, i64 } %t14, 1 store %S.lsp.Server %t15, ptr %a16 br label %while.cond10299 while.cond10299: br label %while.body10300 while.body10300: %t17 = call { i1, %S.json.Json, { ptr, i64, i64 } } @finch.lsp.readMessage() %t18 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t17, 0 %t19 = xor i1 %t18, true %t20 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t17, 2 %t21 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t17, 1 br i1 %t19, label %or.failed10302, label %or.ok10303 or.failed10302: store { ptr, i64, i64 } %t20, ptr %a22 br label %while.end10301 or.ok10303: store %S.json.Json %t21, ptr %a23 %t24 = load %S.json.Json, ptr %a23 call void @finch.lsp.Server.answer(ptr %a16, %S.json.Json %t24) br label %while.cond10299 while.end10301: %t25 = getelementptr inbounds %S.lsp.Server, ptr %a16, i32 0, i32 1 %t26 = load { ptr, i64, i64 }, ptr %t25 store { ptr, i64, i64 } { ptr @.str.6816, i64 8, i64 0 }, ptr %a28 store { ptr, i64, i64 } %t26, ptr %a29 call void @finch_str_concat(ptr %a27, ptr %a28, ptr %a29) %t30 = load { ptr, i64, i64 }, ptr %a27 store { ptr, i64, i64 } %t30, ptr %a32 store { ptr, i64, i64 } { ptr @.str.6817, i64 1, i64 0 }, ptr %a33 call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33) %t34 = load { ptr, i64, i64 }, ptr %a31 store { ptr, i64, i64 } %t34, ptr %a36 call void @finch_str_copy(ptr %a35, ptr %a36) %t37 = call i64 @finch_shell(ptr %a35) ret i64 0 } define internal %S.json.Json @finch.json.new_null() { entry: %t1 = insertvalue %S.json.Json zeroinitializer, i32 0, 0 ret %S.json.Json %t1 } define internal %S.json.Json @finch.json.new_bool(i1 %p0) { entry: %a1 = alloca i1, align 16 store i1 %p0, ptr %a1 %t2 = insertvalue %S.json.Json zeroinitializer, i32 1, 0 %t3 = load i1, ptr %a1 %t4 = insertvalue %S.json.Json %t2, i1 %t3, 1 ret %S.json.Json %t4 } define internal %S.json.Json @finch.json.new_number(double %p0) { entry: %a1 = alloca double, align 16 store double %p0, ptr %a1 %t2 = insertvalue %S.json.Json zeroinitializer, i32 2, 0 %t3 = load double, ptr %a1 %t4 = insertvalue %S.json.Json %t2, double %t3, 2 ret %S.json.Json %t4 } define internal %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = insertvalue %S.json.Json zeroinitializer, i32 3, 0 %t3 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t3, ptr %a4 call void @finch_str_copy(ptr %a5, ptr %a4) %t6 = load { ptr, i64, i64 }, ptr %a5 %t7 = insertvalue %S.json.Json %t2, { ptr, i64, i64 } %t6, 3 ret %S.json.Json %t7 } define internal %S.json.Json @finch.json.new_list() { entry: %t1 = insertvalue %S.json.Json zeroinitializer, i32 4, 0 ret %S.json.Json %t1 } define internal %S.json.Json @finch.json.new_object() { entry: %t1 = insertvalue %S.json.Json zeroinitializer, i32 5, 0 ret %S.json.Json %t1 } define internal i1 @finch.json.Json.is_null(ptr %self) { entry: %t1 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 0 %t2 = load i32, ptr %t1 %t3 = icmp eq i32 %t2, 0 ret i1 %t3 } define internal i64 @finch.json.Json.len(ptr %self) { entry: %t1 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 0 %t2 = load i32, ptr %t1 %t3 = icmp eq i32 %t2, 4 br i1 %t3, label %match.arm10305, label %match.or10307 match.or10307: %t4 = icmp eq i32 %t2, 5 br i1 %t4, label %match.arm10305, label %match.next10306 match.arm10305: %t5 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 4 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 %t7 = load i64, ptr %t6 br label %match.from10308 match.from10308: br label %match.end10304 match.next10306: %t8 = icmp eq i32 %t2, 3 br i1 %t8, label %match.arm10309, label %match.next10310 match.arm10309: %t9 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 3 %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t9, i32 0, i32 1 %t11 = load i64, ptr %t10 br label %match.from10311 match.from10311: br label %match.end10304 match.next10310: br label %match.arm10312 match.arm10312: br label %match.from10314 match.from10314: br label %match.end10304 match.end10304: %t12 = phi i64 [ %t7, %match.from10308 ], [ %t11, %match.from10311 ], [ 0, %match.from10314 ] ret i64 %t12 } define internal i1 @finch.json.Json.has(ptr %self, { ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca i64, align 16 %a11 = alloca i64, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 0 %t3 = load i32, ptr %t2 %t4 = icmp eq i32 %t3, 5 br label %logic.from10315 logic.from10315: br i1 %t4, label %logic.rhs10316, label %logic.end10317 logic.rhs10316: %t5 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 5 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 %t7 = load { ptr, i64, i64 }, ptr %a1 store i64 -1, ptr %a8 %t9 = load i64, ptr %t6 %t10 = load ptr, ptr %t5 store i64 0, ptr %a11 br label %find.cond10318 find.cond10318: %t12 = load i64, ptr %a11 %t13 = icmp slt i64 %t12, %t9 br i1 %t13, label %find.body10319, label %find.end10322 find.body10319: %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t10, i64 %t12 %t15 = load { ptr, i64, i64 }, ptr %t14 store { ptr, i64, i64 } %t15, ptr %a16 store { ptr, i64, i64 } %t7, ptr %a17 %t18 = call i32 @finch_str_eq(ptr %a16, ptr %a17) %t19 = icmp ne i32 %t18, 0 br i1 %t19, label %find.hit10320, label %find.next10321 find.hit10320: store i64 %t12, ptr %a8 br label %find.end10322 find.next10321: %t20 = add i64 %t12, 1 store i64 %t20, ptr %a11 br label %find.cond10318 find.end10322: %t21 = load i64, ptr %a8 %t22 = icmp sge i64 %t21, 0 br label %logic.rend10323 logic.rend10323: br label %logic.end10317 logic.end10317: %t23 = phi i1 [ false, %logic.from10315 ], [ %t22, %logic.rend10323 ] ret i1 %t23 } define internal %S.json.Json @finch.json.Json.get(ptr %self, { ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca i64, align 16 %a12 = alloca i64, align 16 %a17 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a23 = alloca i64, align 16 %a35 = alloca %S.json.Json, align 16 %a36 = alloca %S.json.Json, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 0 %t3 = load i32, ptr %t2 %t4 = icmp ne i32 %t3, 5 br i1 %t4, label %then10324, label %endif10326 then10324: %t5 = call %S.json.Json @finch.json.new_null() ret %S.json.Json %t5 endif10326: %t6 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 5 %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t6, i32 0, i32 1 %t8 = load { ptr, i64, i64 }, ptr %a1 store i64 -1, ptr %a9 %t10 = load i64, ptr %t7 %t11 = load ptr, ptr %t6 store i64 0, ptr %a12 br label %find.cond10327 find.cond10327: %t13 = load i64, ptr %a12 %t14 = icmp slt i64 %t13, %t10 br i1 %t14, label %find.body10328, label %find.end10331 find.body10328: %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t11, i64 %t13 %t16 = load { ptr, i64, i64 }, ptr %t15 store { ptr, i64, i64 } %t16, ptr %a17 store { ptr, i64, i64 } %t8, ptr %a18 %t19 = call i32 @finch_str_eq(ptr %a17, ptr %a18) %t20 = icmp ne i32 %t19, 0 br i1 %t20, label %find.hit10329, label %find.next10330 find.hit10329: store i64 %t13, ptr %a9 br label %find.end10331 find.next10330: %t21 = add i64 %t13, 1 store i64 %t21, ptr %a12 br label %find.cond10327 find.end10331: %t22 = load i64, ptr %a9 store i64 %t22, ptr %a23 %t24 = load i64, ptr %a23 %t25 = icmp slt i64 %t24, 0 br i1 %t25, label %then10332, label %endif10334 then10332: %t26 = call %S.json.Json @finch.json.new_null() ret %S.json.Json %t26 endif10334: %t27 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 4 %t28 = load i64, ptr %a23 %t29 = load { ptr, i64, i64 }, ptr %t27 %t30 = extractvalue { ptr, i64, i64 } %t29, 1 %t31 = icmp uge i64 %t28, %t30 br i1 %t31, label %range10335, label %inrange10336 range10335: call void @finch_panic_index(ptr @.str.6818, i64 84, i64 %t28, i64 %t30) unreachable inrange10336: %t32 = extractvalue { ptr, i64, i64 } %t29, 0 %t33 = getelementptr inbounds %S.json.Json, ptr %t32, i64 %t28 %t34 = load %S.json.Json, ptr %t33 store %S.json.Json %t34, ptr %a35 call void @finch.copy.S_json_Json(ptr %a36, ptr %a35) %t37 = load %S.json.Json, ptr %a36 ret %S.json.Json %t37 } define internal %S.json.Json @finch.json.Json.at(ptr %self, i64 %p0) { entry: %a1 = alloca i64, align 16 %a23 = alloca %S.json.Json, align 16 %a24 = alloca %S.json.Json, align 16 store i64 %p0, ptr %a1 %t2 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 0 %t3 = load i32, ptr %t2 %t4 = icmp ne i32 %t3, 4 br label %logic.from10337 logic.from10337: br i1 %t4, label %logic.end10339, label %logic.rhs10338 logic.rhs10338: %t5 = load i64, ptr %a1 %t6 = icmp slt i64 %t5, 0 br label %logic.rend10340 logic.rend10340: br label %logic.end10339 logic.end10339: %t7 = phi i1 [ true, %logic.from10337 ], [ %t6, %logic.rend10340 ] br label %logic.from10341 logic.from10341: br i1 %t7, label %logic.end10343, label %logic.rhs10342 logic.rhs10342: %t8 = load i64, ptr %a1 %t9 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 4 %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t9, i32 0, i32 1 %t11 = load i64, ptr %t10 %t12 = icmp sge i64 %t8, %t11 br label %logic.rend10344 logic.rend10344: br label %logic.end10343 logic.end10343: %t13 = phi i1 [ true, %logic.from10341 ], [ %t12, %logic.rend10344 ] br i1 %t13, label %then10345, label %endif10347 then10345: %t14 = call %S.json.Json @finch.json.new_null() ret %S.json.Json %t14 endif10347: %t15 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 4 %t16 = load i64, ptr %a1 %t17 = load { ptr, i64, i64 }, ptr %t15 %t18 = extractvalue { ptr, i64, i64 } %t17, 1 %t19 = icmp uge i64 %t16, %t18 br i1 %t19, label %range10348, label %inrange10349 range10348: call void @finch_panic_index(ptr @.str.6819, i64 92, i64 %t16, i64 %t18) unreachable inrange10349: %t20 = extractvalue { ptr, i64, i64 } %t17, 0 %t21 = getelementptr inbounds %S.json.Json, ptr %t20, i64 %t16 %t22 = load %S.json.Json, ptr %t21 store %S.json.Json %t22, ptr %a23 call void @finch.copy.S_json_Json(ptr %a24, ptr %a23) %t25 = load %S.json.Json, ptr %a24 ret %S.json.Json %t25 } define internal { ptr, i64, i64 } @finch.json.Json.str_or(ptr %self, { ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 0 %t3 = load i32, ptr %t2 %t4 = icmp eq i32 %t3, 3 br i1 %t4, label %then10350, label %endif10352 then10350: %t5 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 3 %t6 = load { ptr, i64, i64 }, ptr %t5 store { ptr, i64, i64 } %t6, ptr %a7 call void @finch_str_copy(ptr %a8, ptr %a7) %t9 = load { ptr, i64, i64 }, ptr %a8 ret { ptr, i64, i64 } %t9 endif10352: %t10 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t10, ptr %a11 call void @finch_str_copy(ptr %a12, ptr %a11) %t13 = load { ptr, i64, i64 }, ptr %a12 ret { ptr, i64, i64 } %t13 } define internal double @finch.json.Json.float_or(ptr %self, double %p0) { entry: %a1 = alloca double, align 16 store double %p0, ptr %a1 %t2 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 0 %t3 = load i32, ptr %t2 %t4 = icmp eq i32 %t3, 2 br i1 %t4, label %then10353, label %endif10355 then10353: %t5 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 2 %t6 = load double, ptr %t5 ret double %t6 endif10355: %t7 = load double, ptr %a1 ret double %t7 } define internal i64 @finch.json.Json.int_or(ptr %self, i64 %p0) { entry: %a1 = alloca i64, align 16 store i64 %p0, ptr %a1 %t2 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 0 %t3 = load i32, ptr %t2 %t4 = icmp eq i32 %t3, 2 br i1 %t4, label %then10356, label %endif10358 then10356: %t5 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 2 %t6 = load double, ptr %t5 %t7 = fptosi double %t6 to i64 ret i64 %t7 endif10358: %t8 = load i64, ptr %a1 ret i64 %t8 } define internal i1 @finch.json.Json.bool_or(ptr %self, i1 %p0) { entry: %a1 = alloca i1, align 16 store i1 %p0, ptr %a1 %t2 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 0 %t3 = load i32, ptr %t2 %t4 = icmp eq i32 %t3, 1 br i1 %t4, label %then10359, label %endif10361 then10359: %t5 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 1 %t6 = load i1, ptr %t5 ret i1 %t6 endif10361: %t7 = load i1, ptr %a1 ret i1 %t7 } define internal { ptr, i64, i64 } @finch.json.Json.names(ptr %self) { entry: %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %t1 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 5 %t2 = load { ptr, i64, i64 }, ptr %t1 store { ptr, i64, i64 } %t2, ptr %a3 call void @finch.copy.arr_str(ptr %a4, ptr %a3) %t5 = load { ptr, i64, i64 }, ptr %a4 ret { ptr, i64, i64 } %t5 } define internal void @finch.json.Json.push(ptr %self, %S.json.Json %p0) { entry: %a1 = alloca %S.json.Json, align 16 %a5 = alloca %S.json.Json, align 16 %a6 = alloca %S.json.Json, align 16 store %S.json.Json %p0, ptr %a1 %t2 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 4 %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i32 0, i32 1 %t4 = load %S.json.Json, ptr %a1 store %S.json.Json %t4, ptr %a5 call void @finch.copy.S_json_Json(ptr %a6, ptr %a5) %t7 = load %S.json.Json, ptr %a6 %t8 = load i64, ptr %t3 %t9 = add i64 %t8, 1 call void @finch_arr_reserve(ptr %t2, i64 %t9, i64 ptrtoint (ptr getelementptr (%S.json.Json, ptr null, i32 1) to i64)) %t10 = load ptr, ptr %t2 %t11 = getelementptr inbounds %S.json.Json, ptr %t10, i64 %t8 store %S.json.Json %t7, ptr %t11 store i64 %t9, ptr %t3 ret void } define internal void @finch.json.Json.set(ptr %self, { ptr, i64, i64 } %p0, %S.json.Json %p1) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a2 = alloca %S.json.Json, align 16 %a6 = alloca i64, align 16 %a9 = alloca i64, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca i64, align 16 %a31 = alloca %S.json.Json, align 16 %a32 = alloca %S.json.Json, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a38 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca %S.json.Json, align 16 %a48 = alloca %S.json.Json, align 16 store { ptr, i64, i64 } %p0, ptr %a1 store %S.json.Json %p1, ptr %a2 %t3 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 5 %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i32 0, i32 1 %t5 = load { ptr, i64, i64 }, ptr %a1 store i64 -1, ptr %a6 %t7 = load i64, ptr %t4 %t8 = load ptr, ptr %t3 store i64 0, ptr %a9 br label %find.cond10362 find.cond10362: %t10 = load i64, ptr %a9 %t11 = icmp slt i64 %t10, %t7 br i1 %t11, label %find.body10363, label %find.end10366 find.body10363: %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t8, i64 %t10 %t13 = load { ptr, i64, i64 }, ptr %t12 store { ptr, i64, i64 } %t13, ptr %a14 store { ptr, i64, i64 } %t5, ptr %a15 %t16 = call i32 @finch_str_eq(ptr %a14, ptr %a15) %t17 = icmp ne i32 %t16, 0 br i1 %t17, label %find.hit10364, label %find.next10365 find.hit10364: store i64 %t10, ptr %a6 br label %find.end10366 find.next10365: %t18 = add i64 %t10, 1 store i64 %t18, ptr %a9 br label %find.cond10362 find.end10366: %t19 = load i64, ptr %a6 store i64 %t19, ptr %a20 %t21 = load i64, ptr %a20 %t22 = icmp sge i64 %t21, 0 br i1 %t22, label %then10367, label %endif10369 then10367: %t23 = load %S.json.Json, ptr %a2 %t24 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 4 %t25 = load i64, ptr %a20 %t26 = load { ptr, i64, i64 }, ptr %t24 %t27 = extractvalue { ptr, i64, i64 } %t26, 1 %t28 = icmp uge i64 %t25, %t27 br i1 %t28, label %range10370, label %inrange10371 range10370: call void @finch_panic_index(ptr @.str.6820, i64 140, i64 %t25, i64 %t27) unreachable inrange10371: %t29 = extractvalue { ptr, i64, i64 } %t26, 0 %t30 = getelementptr inbounds %S.json.Json, ptr %t29, i64 %t25 store %S.json.Json %t23, ptr %a31 call void @finch.copy.S_json_Json(ptr %a32, ptr %a31) %t33 = load %S.json.Json, ptr %a32 store %S.json.Json %t33, ptr %t30 ret void endif10369: %t34 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 5 %t35 = getelementptr inbounds { ptr, i64, i64 }, ptr %t34, i32 0, i32 1 %t36 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t36, ptr %a37 call void @finch_str_copy(ptr %a38, ptr %a37) %t39 = load { ptr, i64, i64 }, ptr %a38 %t40 = load i64, ptr %t35 %t41 = add i64 %t40, 1 call void @finch_arr_reserve(ptr %t34, i64 %t41, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t42 = load ptr, ptr %t34 %t43 = getelementptr inbounds { ptr, i64, i64 }, ptr %t42, i64 %t40 store { ptr, i64, i64 } %t39, ptr %t43 store i64 %t41, ptr %t35 %t44 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 4 %t45 = getelementptr inbounds { ptr, i64, i64 }, ptr %t44, i32 0, i32 1 %t46 = load %S.json.Json, ptr %a2 store %S.json.Json %t46, ptr %a47 call void @finch.copy.S_json_Json(ptr %a48, ptr %a47) %t49 = load %S.json.Json, ptr %a48 %t50 = load i64, ptr %t45 %t51 = add i64 %t50, 1 call void @finch_arr_reserve(ptr %t44, i64 %t51, i64 ptrtoint (ptr getelementptr (%S.json.Json, ptr null, i32 1) to i64)) %t52 = load ptr, ptr %t44 %t53 = getelementptr inbounds %S.json.Json, ptr %t52, i64 %t50 store %S.json.Json %t49, ptr %t53 store i64 %t51, ptr %t45 ret void } define internal { ptr, i64, i64 } @finch.json.quote({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca i64, align 16 %a17 = alloca i8, align 16 %a20 = alloca i64, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a63 = alloca { ptr, i64, i64 }, align 16 %a64 = alloca { ptr, i64, i64 }, align 16 %a69 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a79 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = mul i64 1, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t3 = call ptr @finch_alloc(i64 %t2) %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 0 store { ptr, i64, i64 } { ptr @.str.6821, i64 1, i64 0 }, ptr %t4 %t5 = insertvalue { ptr, i64, i64 } undef, ptr %t3, 0 %t6 = insertvalue { ptr, i64, i64 } %t5, i64 1, 1 %t7 = insertvalue { ptr, i64, i64 } %t6, i64 1, 2 store { ptr, i64, i64 } %t7, ptr %a8 store i64 0, ptr %a9 br label %each.cond10372 each.cond10372: %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t11 = load i64, ptr %t10 %t12 = load i64, ptr %a9 %t13 = icmp slt i64 %t12, %t11 br i1 %t13, label %each.body10373, label %each.end10375 each.body10373: %t14 = load ptr, ptr %a1 %t15 = getelementptr inbounds i8, ptr %t14, i64 %t12 %t16 = load i8, ptr %t15 store i8 %t16, ptr %a17 %t18 = load i8, ptr %a17 %t19 = zext i8 %t18 to i64 store i64 %t19, ptr %a20 %t21 = load i8, ptr %a17 %t22 = icmp eq i8 %t21, 34 br i1 %t22, label %then10376, label %else10377 then10376: %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 %t24 = load i64, ptr %t23 %t25 = add i64 %t24, 1 call void @finch_arr_reserve(ptr %a8, i64 %t25, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t26 = load ptr, ptr %a8 %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %t26, i64 %t24 store { ptr, i64, i64 } { ptr @.str.6822, i64 2, i64 0 }, ptr %t27 store i64 %t25, ptr %t23 br label %endif10378 else10377: %t28 = load i8, ptr %a17 %t29 = icmp eq i8 %t28, 92 br i1 %t29, label %then10379, label %else10380 then10379: %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 %t31 = load i64, ptr %t30 %t32 = add i64 %t31, 1 call void @finch_arr_reserve(ptr %a8, i64 %t32, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t33 = load ptr, ptr %a8 %t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %t33, i64 %t31 store { ptr, i64, i64 } { ptr @.str.6823, i64 2, i64 0 }, ptr %t34 store i64 %t32, ptr %t30 br label %endif10381 else10380: %t35 = load i8, ptr %a17 %t36 = icmp eq i8 %t35, 10 br i1 %t36, label %then10382, label %else10383 then10382: %t37 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 %t38 = load i64, ptr %t37 %t39 = add i64 %t38, 1 call void @finch_arr_reserve(ptr %a8, i64 %t39, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t40 = load ptr, ptr %a8 %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %t40, i64 %t38 store { ptr, i64, i64 } { ptr @.str.6824, i64 2, i64 0 }, ptr %t41 store i64 %t39, ptr %t37 br label %endif10384 else10383: %t42 = load i8, ptr %a17 %t43 = icmp eq i8 %t42, 13 br i1 %t43, label %then10385, label %else10386 then10385: %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 %t45 = load i64, ptr %t44 %t46 = add i64 %t45, 1 call void @finch_arr_reserve(ptr %a8, i64 %t46, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t47 = load ptr, ptr %a8 %t48 = getelementptr inbounds { ptr, i64, i64 }, ptr %t47, i64 %t45 store { ptr, i64, i64 } { ptr @.str.6825, i64 2, i64 0 }, ptr %t48 store i64 %t46, ptr %t44 br label %endif10387 else10386: %t49 = load i8, ptr %a17 %t50 = icmp eq i8 %t49, 9 br i1 %t50, label %then10388, label %else10389 then10388: %t51 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 %t52 = load i64, ptr %t51 %t53 = add i64 %t52, 1 call void @finch_arr_reserve(ptr %a8, i64 %t53, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t54 = load ptr, ptr %a8 %t55 = getelementptr inbounds { ptr, i64, i64 }, ptr %t54, i64 %t52 store { ptr, i64, i64 } { ptr @.str.6826, i64 2, i64 0 }, ptr %t55 store i64 %t53, ptr %t51 br label %endif10390 else10389: %t56 = load i64, ptr %a20 %t57 = icmp slt i64 %t56, 32 br i1 %t57, label %then10391, label %else10392 then10391: %t58 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 %t59 = load i64, ptr %a20 %t60 = sdiv i64 %t59, 16 %t61 = call { ptr, i64, i64 } @finch.json.hexdigit(i64 %t60) store { ptr, i64, i64 } { ptr @.str.6827, i64 4, i64 0 }, ptr %a63 store { ptr, i64, i64 } %t61, ptr %a64 call void @finch_str_concat(ptr %a62, ptr %a63, ptr %a64) %t65 = load { ptr, i64, i64 }, ptr %a62 %t66 = load i64, ptr %a20 %t67 = srem i64 %t66, 16 %t68 = call { ptr, i64, i64 } @finch.json.hexdigit(i64 %t67) store { ptr, i64, i64 } %t65, ptr %a70 store { ptr, i64, i64 } %t68, ptr %a71 call void @finch_str_concat(ptr %a69, ptr %a70, ptr %a71) %t72 = load { ptr, i64, i64 }, ptr %a69 %t73 = load i64, ptr %t58 %t74 = add i64 %t73, 1 call void @finch_arr_reserve(ptr %a8, i64 %t74, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t75 = load ptr, ptr %a8 %t76 = getelementptr inbounds { ptr, i64, i64 }, ptr %t75, i64 %t73 store { ptr, i64, i64 } %t72, ptr %t76 store i64 %t74, ptr %t58 br label %endif10393 else10392: %t77 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 %t78 = load i8, ptr %a17 call void @finch_str_from_char(ptr %a79, i8 signext %t78) %t80 = load { ptr, i64, i64 }, ptr %a79 %t81 = load i64, ptr %t77 %t82 = add i64 %t81, 1 call void @finch_arr_reserve(ptr %a8, i64 %t82, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t83 = load ptr, ptr %a8 %t84 = getelementptr inbounds { ptr, i64, i64 }, ptr %t83, i64 %t81 store { ptr, i64, i64 } %t80, ptr %t84 store i64 %t82, ptr %t77 br label %endif10393 endif10393: br label %endif10390 endif10390: br label %endif10387 endif10387: br label %endif10384 endif10384: br label %endif10381 endif10381: br label %endif10378 endif10378: br label %each.step10374 each.step10374: %t85 = load i64, ptr %a9 %t86 = add i64 %t85, 1 store i64 %t86, ptr %a9 br label %each.cond10372 each.end10375: %t87 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 %t88 = load i64, ptr %t87 %t89 = add i64 %t88, 1 call void @finch_arr_reserve(ptr %a8, i64 %t89, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t90 = load ptr, ptr %a8 %t91 = getelementptr inbounds { ptr, i64, i64 }, ptr %t90, i64 %t88 store { ptr, i64, i64 } { ptr @.str.6828, i64 1, i64 0 }, ptr %t91 store i64 %t89, ptr %t87 %t92 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.6829, i64 0, i64 0 }, ptr %a93 call void @finch_str_join(ptr %a94, ptr %a8, ptr %a93) %t95 = load { ptr, i64, i64 }, ptr %a94 ret { ptr, i64, i64 } %t95 } define internal { ptr, i64, i64 } @finch.json.hexdigit(i64 %p0) { entry: %a1 = alloca i64, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 store i64 %p0, ptr %a1 store { ptr, i64, i64 } { ptr @.str.6830, i64 16, i64 0 }, ptr %a2 %t3 = load i64, ptr %a1 %t4 = load { ptr, i64, i64 }, ptr %a2 %t5 = extractvalue { ptr, i64, i64 } %t4, 1 %t6 = icmp uge i64 %t3, %t5 br i1 %t6, label %range10394, label %inrange10395 range10394: call void @finch_panic_index(ptr @.str.6831, i64 175, i64 %t3, i64 %t5) unreachable inrange10395: %t7 = extractvalue { ptr, i64, i64 } %t4, 0 %t8 = getelementptr inbounds i8, ptr %t7, i64 %t3 %t9 = load i8, ptr %t8 call void @finch_str_from_char(ptr %a10, i8 signext %t9) %t11 = load { ptr, i64, i64 }, ptr %a10 ret { ptr, i64, i64 } %t11 } define internal { ptr, i64, i64 } @finch.json.number_text(double %p0) { entry: %a1 = alloca double, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 store double %p0, ptr %a1 %t2 = load double, ptr %a1 %t3 = load double, ptr %a1 %t4 = fptosi double %t3 to i64 %t5 = sitofp i64 %t4 to double %t6 = fcmp oeq double %t2, %t5 br label %logic.from10396 logic.from10396: br i1 %t6, label %logic.rhs10397, label %logic.end10398 logic.rhs10397: %t7 = load double, ptr %a1 %t8 = fneg double 1000000000000000.0 %t9 = fcmp ogt double %t7, %t8 br label %logic.rend10399 logic.rend10399: br label %logic.end10398 logic.end10398: %t10 = phi i1 [ false, %logic.from10396 ], [ %t9, %logic.rend10399 ] br label %logic.from10400 logic.from10400: br i1 %t10, label %logic.rhs10401, label %logic.end10402 logic.rhs10401: %t11 = load double, ptr %a1 %t12 = fcmp olt double %t11, 1000000000000000.0 br label %logic.rend10403 logic.rend10403: br label %logic.end10402 logic.end10402: %t13 = phi i1 [ false, %logic.from10400 ], [ %t12, %logic.rend10403 ] br i1 %t13, label %then10404, label %endif10406 then10404: %t14 = load double, ptr %a1 %t15 = fptosi double %t14 to i64 call void @finch_str_from_int(ptr %a16, i64 %t15) %t17 = load { ptr, i64, i64 }, ptr %a16 ret { ptr, i64, i64 } %t17 endif10406: %t18 = load double, ptr %a1 call void @finch_str_from_float(ptr %a19, double %t18) %t20 = load { ptr, i64, i64 }, ptr %a19 ret { ptr, i64, i64 } %t20 } define internal void @finch.json.write(%S.json.Json %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, ptr %p3) { entry: %a1 = alloca %S.json.Json, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca ptr, align 16 %a5 = alloca { ptr, i64, i64 }, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a90 = alloca { ptr, i64, i64 }, align 16 %a91 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca i64, align 16 %a107 = alloca i64, align 16 %a108 = alloca %S.json.Json, align 16 %a117 = alloca { ptr, i64, i64 }, align 16 %a118 = alloca { ptr, i64, i64 }, align 16 %a119 = alloca { ptr, i64, i64 }, align 16 %a130 = alloca { ptr, i64, i64 }, align 16 %a131 = alloca { ptr, i64, i64 }, align 16 %a149 = alloca { ptr, i64, i64 }, align 16 %a150 = alloca { ptr, i64, i64 }, align 16 %a151 = alloca { ptr, i64, i64 }, align 16 %a153 = alloca { ptr, i64, i64 }, align 16 %a154 = alloca { ptr, i64, i64 }, align 16 %a155 = alloca { ptr, i64, i64 }, align 16 %a179 = alloca { ptr, i64, i64 }, align 16 %a180 = alloca { ptr, i64, i64 }, align 16 %a181 = alloca { ptr, i64, i64 }, align 16 %a188 = alloca i64, align 16 %a196 = alloca i64, align 16 %a197 = alloca %S.json.Json, align 16 %a206 = alloca { ptr, i64, i64 }, align 16 %a207 = alloca { ptr, i64, i64 }, align 16 %a208 = alloca { ptr, i64, i64 }, align 16 %a228 = alloca { ptr, i64, i64 }, align 16 %a229 = alloca { ptr, i64, i64 }, align 16 %a230 = alloca { ptr, i64, i64 }, align 16 %a233 = alloca { ptr, i64, i64 }, align 16 %a234 = alloca { ptr, i64, i64 }, align 16 %a235 = alloca { ptr, i64, i64 }, align 16 %a253 = alloca { ptr, i64, i64 }, align 16 %a254 = alloca { ptr, i64, i64 }, align 16 %a255 = alloca { ptr, i64, i64 }, align 16 %a257 = alloca { ptr, i64, i64 }, align 16 %a258 = alloca { ptr, i64, i64 }, align 16 %a259 = alloca { ptr, i64, i64 }, align 16 store %S.json.Json %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 store ptr %p3, ptr %a4 store { ptr, i64, i64 } { ptr @.str.6832, i64 0, i64 0 }, ptr %a5 store { ptr, i64, i64 } { ptr @.str.6833, i64 0, i64 0 }, ptr %a6 store { ptr, i64, i64 } { ptr @.str.6834, i64 1, i64 0 }, ptr %a7 store { ptr, i64, i64 } { ptr @.str.6835, i64 1, i64 0 }, ptr %a8 %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t10 = load i64, ptr %t9 %t11 = icmp sgt i64 %t10, 0 br i1 %t11, label %then10407, label %endif10409 then10407: store { ptr, i64, i64 } { ptr @.str.6836, i64 1, i64 0 }, ptr %a5 %t12 = load { ptr, i64, i64 }, ptr %a3 %t13 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t12, ptr %a15 store { ptr, i64, i64 } %t13, ptr %a16 call void @finch_str_concat(ptr %a14, ptr %a15, ptr %a16) %t17 = load { ptr, i64, i64 }, ptr %a14 store { ptr, i64, i64 } %t17, ptr %a6 store { ptr, i64, i64 } { ptr @.str.6837, i64 2, i64 0 }, ptr %a8 br label %endif10409 endif10409: %t18 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 0 %t19 = load i32, ptr %t18 %t20 = icmp eq i32 %t19, 0 br i1 %t20, label %match.arm10411, label %match.next10412 match.arm10411: %t21 = load ptr, ptr %a4 %t22 = icmp eq ptr %t21, null br i1 %t22, label %panic10413, label %ok10414 panic10413: call void @finch_panic(ptr @.str.6838, i64 200, ptr @.str.6839) unreachable ok10414: %t23 = getelementptr inbounds %S.json.Writer, ptr %t21, i32 0, i32 0 %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %t23, i32 0, i32 1 %t25 = load i64, ptr %t24 %t26 = add i64 %t25, 1 call void @finch_arr_reserve(ptr %t23, i64 %t26, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t27 = load ptr, ptr %t23 %t28 = getelementptr inbounds { ptr, i64, i64 }, ptr %t27, i64 %t25 store { ptr, i64, i64 } { ptr @.str.6840, i64 4, i64 0 }, ptr %t28 store i64 %t26, ptr %t24 br label %match.end10410 match.next10412: %t29 = icmp eq i32 %t19, 1 br i1 %t29, label %match.arm10415, label %match.next10416 match.arm10415: %t30 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 1 %t31 = load i1, ptr %t30 br i1 %t31, label %then10417, label %else10418 then10417: %t32 = load ptr, ptr %a4 %t33 = icmp eq ptr %t32, null br i1 %t33, label %panic10420, label %ok10421 panic10420: call void @finch_panic(ptr @.str.6841, i64 203, ptr @.str.6842) unreachable ok10421: %t34 = getelementptr inbounds %S.json.Writer, ptr %t32, i32 0, i32 0 %t35 = getelementptr inbounds { ptr, i64, i64 }, ptr %t34, i32 0, i32 1 %t36 = load i64, ptr %t35 %t37 = add i64 %t36, 1 call void @finch_arr_reserve(ptr %t34, i64 %t37, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t38 = load ptr, ptr %t34 %t39 = getelementptr inbounds { ptr, i64, i64 }, ptr %t38, i64 %t36 store { ptr, i64, i64 } { ptr @.str.6843, i64 4, i64 0 }, ptr %t39 store i64 %t37, ptr %t35 br label %endif10419 else10418: %t40 = load ptr, ptr %a4 %t41 = icmp eq ptr %t40, null br i1 %t41, label %panic10422, label %ok10423 panic10422: call void @finch_panic(ptr @.str.6844, i64 205, ptr @.str.6845) unreachable ok10423: %t42 = getelementptr inbounds %S.json.Writer, ptr %t40, i32 0, i32 0 %t43 = getelementptr inbounds { ptr, i64, i64 }, ptr %t42, i32 0, i32 1 %t44 = load i64, ptr %t43 %t45 = add i64 %t44, 1 call void @finch_arr_reserve(ptr %t42, i64 %t45, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t46 = load ptr, ptr %t42 %t47 = getelementptr inbounds { ptr, i64, i64 }, ptr %t46, i64 %t44 store { ptr, i64, i64 } { ptr @.str.6846, i64 5, i64 0 }, ptr %t47 store i64 %t45, ptr %t43 br label %endif10419 endif10419: br label %match.end10410 match.next10416: %t48 = icmp eq i32 %t19, 2 br i1 %t48, label %match.arm10424, label %match.next10425 match.arm10424: %t49 = load ptr, ptr %a4 %t50 = icmp eq ptr %t49, null br i1 %t50, label %panic10426, label %ok10427 panic10426: call void @finch_panic(ptr @.str.6847, i64 208, ptr @.str.6848) unreachable ok10427: %t51 = getelementptr inbounds %S.json.Writer, ptr %t49, i32 0, i32 0 %t52 = getelementptr inbounds { ptr, i64, i64 }, ptr %t51, i32 0, i32 1 %t53 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 2 %t54 = load double, ptr %t53 %t55 = call { ptr, i64, i64 } @finch.json.number_text(double %t54) %t56 = load i64, ptr %t52 %t57 = add i64 %t56, 1 call void @finch_arr_reserve(ptr %t51, i64 %t57, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t58 = load ptr, ptr %t51 %t59 = getelementptr inbounds { ptr, i64, i64 }, ptr %t58, i64 %t56 store { ptr, i64, i64 } %t55, ptr %t59 store i64 %t57, ptr %t52 br label %match.end10410 match.next10425: %t60 = icmp eq i32 %t19, 3 br i1 %t60, label %match.arm10428, label %match.next10429 match.arm10428: %t61 = load ptr, ptr %a4 %t62 = icmp eq ptr %t61, null br i1 %t62, label %panic10430, label %ok10431 panic10430: call void @finch_panic(ptr @.str.6849, i64 209, ptr @.str.6850) unreachable ok10431: %t63 = getelementptr inbounds %S.json.Writer, ptr %t61, i32 0, i32 0 %t64 = getelementptr inbounds { ptr, i64, i64 }, ptr %t63, i32 0, i32 1 %t65 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 3 %t66 = load { ptr, i64, i64 }, ptr %t65 %t67 = call { ptr, i64, i64 } @finch.json.quote({ ptr, i64, i64 } %t66) %t68 = load i64, ptr %t64 %t69 = add i64 %t68, 1 call void @finch_arr_reserve(ptr %t63, i64 %t69, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t70 = load ptr, ptr %t63 %t71 = getelementptr inbounds { ptr, i64, i64 }, ptr %t70, i64 %t68 store { ptr, i64, i64 } %t67, ptr %t71 store i64 %t69, ptr %t64 br label %match.end10410 match.next10429: %t72 = icmp eq i32 %t19, 4 br i1 %t72, label %match.arm10432, label %match.next10433 match.arm10432: %t73 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 4 %t74 = getelementptr inbounds { ptr, i64, i64 }, ptr %t73, i32 0, i32 1 %t75 = load i64, ptr %t74 %t76 = icmp eq i64 %t75, 0 br i1 %t76, label %then10434, label %endif10436 then10434: %t77 = load ptr, ptr %a4 %t78 = icmp eq ptr %t77, null br i1 %t78, label %panic10437, label %ok10438 panic10437: call void @finch_panic(ptr @.str.6851, i64 212, ptr @.str.6852) unreachable ok10438: %t79 = getelementptr inbounds %S.json.Writer, ptr %t77, i32 0, i32 0 %t80 = getelementptr inbounds { ptr, i64, i64 }, ptr %t79, i32 0, i32 1 %t81 = load i64, ptr %t80 %t82 = add i64 %t81, 1 call void @finch_arr_reserve(ptr %t79, i64 %t82, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t83 = load ptr, ptr %t79 %t84 = getelementptr inbounds { ptr, i64, i64 }, ptr %t83, i64 %t81 store { ptr, i64, i64 } { ptr @.str.6853, i64 2, i64 0 }, ptr %t84 store i64 %t82, ptr %t80 ret void endif10436: %t85 = load ptr, ptr %a4 %t86 = icmp eq ptr %t85, null br i1 %t86, label %panic10439, label %ok10440 panic10439: call void @finch_panic(ptr @.str.6854, i64 215, ptr @.str.6855) unreachable ok10440: %t87 = getelementptr inbounds %S.json.Writer, ptr %t85, i32 0, i32 0 %t88 = getelementptr inbounds { ptr, i64, i64 }, ptr %t87, i32 0, i32 1 %t89 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } { ptr @.str.6856, i64 1, i64 0 }, ptr %a91 store { ptr, i64, i64 } %t89, ptr %a92 call void @finch_str_concat(ptr %a90, ptr %a91, ptr %a92) %t93 = load { ptr, i64, i64 }, ptr %a90 %t94 = load i64, ptr %t88 %t95 = add i64 %t94, 1 call void @finch_arr_reserve(ptr %t87, i64 %t95, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t96 = load ptr, ptr %t87 %t97 = getelementptr inbounds { ptr, i64, i64 }, ptr %t96, i64 %t94 store { ptr, i64, i64 } %t93, ptr %t97 store i64 %t95, ptr %t88 %t98 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 4 store i64 0, ptr %a99 br label %each.cond10441 each.cond10441: %t100 = getelementptr inbounds { ptr, i64, i64 }, ptr %t98, i32 0, i32 1 %t101 = load i64, ptr %t100 %t102 = load i64, ptr %a99 %t103 = icmp slt i64 %t102, %t101 br i1 %t103, label %each.body10442, label %each.end10444 each.body10442: %t104 = load ptr, ptr %t98 %t105 = getelementptr inbounds %S.json.Json, ptr %t104, i64 %t102 %t106 = load %S.json.Json, ptr %t105 store i64 %t102, ptr %a107 store %S.json.Json %t106, ptr %a108 %t109 = load i64, ptr %a107 %t110 = icmp sgt i64 %t109, 0 br i1 %t110, label %then10445, label %endif10447 then10445: %t111 = load ptr, ptr %a4 %t112 = icmp eq ptr %t111, null br i1 %t112, label %panic10448, label %ok10449 panic10448: call void @finch_panic(ptr @.str.6857, i64 218, ptr @.str.6858) unreachable ok10449: %t113 = getelementptr inbounds %S.json.Writer, ptr %t111, i32 0, i32 0 %t114 = getelementptr inbounds { ptr, i64, i64 }, ptr %t113, i32 0, i32 1 %t115 = load { ptr, i64, i64 }, ptr %a7 %t116 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } %t115, ptr %a118 store { ptr, i64, i64 } %t116, ptr %a119 call void @finch_str_concat(ptr %a117, ptr %a118, ptr %a119) %t120 = load { ptr, i64, i64 }, ptr %a117 %t121 = load i64, ptr %t114 %t122 = add i64 %t121, 1 call void @finch_arr_reserve(ptr %t113, i64 %t122, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t123 = load ptr, ptr %t113 %t124 = getelementptr inbounds { ptr, i64, i64 }, ptr %t123, i64 %t121 store { ptr, i64, i64 } %t120, ptr %t124 store i64 %t122, ptr %t114 br label %endif10447 endif10447: %t125 = load ptr, ptr %a4 %t126 = icmp eq ptr %t125, null br i1 %t126, label %panic10450, label %ok10451 panic10450: call void @finch_panic(ptr @.str.6859, i64 220, ptr @.str.6860) unreachable ok10451: %t127 = getelementptr inbounds %S.json.Writer, ptr %t125, i32 0, i32 0 %t128 = getelementptr inbounds { ptr, i64, i64 }, ptr %t127, i32 0, i32 1 %t129 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t129, ptr %a130 call void @finch_str_copy(ptr %a131, ptr %a130) %t132 = load { ptr, i64, i64 }, ptr %a131 %t133 = load i64, ptr %t128 %t134 = add i64 %t133, 1 call void @finch_arr_reserve(ptr %t127, i64 %t134, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t135 = load ptr, ptr %t127 %t136 = getelementptr inbounds { ptr, i64, i64 }, ptr %t135, i64 %t133 store { ptr, i64, i64 } %t132, ptr %t136 store i64 %t134, ptr %t128 %t137 = load %S.json.Json, ptr %a108 %t138 = load { ptr, i64, i64 }, ptr %a2 %t139 = load { ptr, i64, i64 }, ptr %a6 %t140 = load ptr, ptr %a4 call void @finch.json.write(%S.json.Json %t137, { ptr, i64, i64 } %t138, { ptr, i64, i64 } %t139, ptr %t140) br label %each.step10443 each.step10443: %t141 = load i64, ptr %a99 %t142 = add i64 %t141, 1 store i64 %t142, ptr %a99 br label %each.cond10441 each.end10444: %t143 = load ptr, ptr %a4 %t144 = icmp eq ptr %t143, null br i1 %t144, label %panic10452, label %ok10453 panic10452: call void @finch_panic(ptr @.str.6861, i64 223, ptr @.str.6862) unreachable ok10453: %t145 = getelementptr inbounds %S.json.Writer, ptr %t143, i32 0, i32 0 %t146 = getelementptr inbounds { ptr, i64, i64 }, ptr %t145, i32 0, i32 1 %t147 = load { ptr, i64, i64 }, ptr %a5 %t148 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t147, ptr %a150 store { ptr, i64, i64 } %t148, ptr %a151 call void @finch_str_concat(ptr %a149, ptr %a150, ptr %a151) %t152 = load { ptr, i64, i64 }, ptr %a149 store { ptr, i64, i64 } %t152, ptr %a154 store { ptr, i64, i64 } { ptr @.str.6863, i64 1, i64 0 }, ptr %a155 call void @finch_str_concat(ptr %a153, ptr %a154, ptr %a155) %t156 = load { ptr, i64, i64 }, ptr %a153 %t157 = load i64, ptr %t146 %t158 = add i64 %t157, 1 call void @finch_arr_reserve(ptr %t145, i64 %t158, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t159 = load ptr, ptr %t145 %t160 = getelementptr inbounds { ptr, i64, i64 }, ptr %t159, i64 %t157 store { ptr, i64, i64 } %t156, ptr %t160 store i64 %t158, ptr %t146 br label %match.end10410 match.next10433: %t161 = icmp eq i32 %t19, 5 br i1 %t161, label %match.arm10454, label %match.next10455 match.arm10454: %t162 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 4 %t163 = getelementptr inbounds { ptr, i64, i64 }, ptr %t162, i32 0, i32 1 %t164 = load i64, ptr %t163 %t165 = icmp eq i64 %t164, 0 br i1 %t165, label %then10456, label %endif10458 then10456: %t166 = load ptr, ptr %a4 %t167 = icmp eq ptr %t166, null br i1 %t167, label %panic10459, label %ok10460 panic10459: call void @finch_panic(ptr @.str.6864, i64 227, ptr @.str.6865) unreachable ok10460: %t168 = getelementptr inbounds %S.json.Writer, ptr %t166, i32 0, i32 0 %t169 = getelementptr inbounds { ptr, i64, i64 }, ptr %t168, i32 0, i32 1 %t170 = load i64, ptr %t169 %t171 = add i64 %t170, 1 call void @finch_arr_reserve(ptr %t168, i64 %t171, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t172 = load ptr, ptr %t168 %t173 = getelementptr inbounds { ptr, i64, i64 }, ptr %t172, i64 %t170 store { ptr, i64, i64 } { ptr @.str.6866, i64 2, i64 0 }, ptr %t173 store i64 %t171, ptr %t169 ret void endif10458: %t174 = load ptr, ptr %a4 %t175 = icmp eq ptr %t174, null br i1 %t175, label %panic10461, label %ok10462 panic10461: call void @finch_panic(ptr @.str.6867, i64 230, ptr @.str.6868) unreachable ok10462: %t176 = getelementptr inbounds %S.json.Writer, ptr %t174, i32 0, i32 0 %t177 = getelementptr inbounds { ptr, i64, i64 }, ptr %t176, i32 0, i32 1 %t178 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } { ptr @.str.6869, i64 1, i64 0 }, ptr %a180 store { ptr, i64, i64 } %t178, ptr %a181 call void @finch_str_concat(ptr %a179, ptr %a180, ptr %a181) %t182 = load { ptr, i64, i64 }, ptr %a179 %t183 = load i64, ptr %t177 %t184 = add i64 %t183, 1 call void @finch_arr_reserve(ptr %t176, i64 %t184, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t185 = load ptr, ptr %t176 %t186 = getelementptr inbounds { ptr, i64, i64 }, ptr %t185, i64 %t183 store { ptr, i64, i64 } %t182, ptr %t186 store i64 %t184, ptr %t177 %t187 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 4 store i64 0, ptr %a188 br label %each.cond10463 each.cond10463: %t189 = getelementptr inbounds { ptr, i64, i64 }, ptr %t187, i32 0, i32 1 %t190 = load i64, ptr %t189 %t191 = load i64, ptr %a188 %t192 = icmp slt i64 %t191, %t190 br i1 %t192, label %each.body10464, label %each.end10466 each.body10464: %t193 = load ptr, ptr %t187 %t194 = getelementptr inbounds %S.json.Json, ptr %t193, i64 %t191 %t195 = load %S.json.Json, ptr %t194 store i64 %t191, ptr %a196 store %S.json.Json %t195, ptr %a197 %t198 = load i64, ptr %a196 %t199 = icmp sgt i64 %t198, 0 br i1 %t199, label %then10467, label %endif10469 then10467: %t200 = load ptr, ptr %a4 %t201 = icmp eq ptr %t200, null br i1 %t201, label %panic10470, label %ok10471 panic10470: call void @finch_panic(ptr @.str.6870, i64 233, ptr @.str.6871) unreachable ok10471: %t202 = getelementptr inbounds %S.json.Writer, ptr %t200, i32 0, i32 0 %t203 = getelementptr inbounds { ptr, i64, i64 }, ptr %t202, i32 0, i32 1 %t204 = load { ptr, i64, i64 }, ptr %a7 %t205 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } %t204, ptr %a207 store { ptr, i64, i64 } %t205, ptr %a208 call void @finch_str_concat(ptr %a206, ptr %a207, ptr %a208) %t209 = load { ptr, i64, i64 }, ptr %a206 %t210 = load i64, ptr %t203 %t211 = add i64 %t210, 1 call void @finch_arr_reserve(ptr %t202, i64 %t211, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t212 = load ptr, ptr %t202 %t213 = getelementptr inbounds { ptr, i64, i64 }, ptr %t212, i64 %t210 store { ptr, i64, i64 } %t209, ptr %t213 store i64 %t211, ptr %t203 br label %endif10469 endif10469: %t214 = load ptr, ptr %a4 %t215 = icmp eq ptr %t214, null br i1 %t215, label %panic10472, label %ok10473 panic10472: call void @finch_panic(ptr @.str.6872, i64 235, ptr @.str.6873) unreachable ok10473: %t216 = getelementptr inbounds %S.json.Writer, ptr %t214, i32 0, i32 0 %t217 = getelementptr inbounds { ptr, i64, i64 }, ptr %t216, i32 0, i32 1 %t218 = load { ptr, i64, i64 }, ptr %a6 %t219 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 5 %t220 = load i64, ptr %a196 %t221 = load { ptr, i64, i64 }, ptr %t219 %t222 = extractvalue { ptr, i64, i64 } %t221, 1 %t223 = icmp uge i64 %t220, %t222 br i1 %t223, label %range10474, label %inrange10475 range10474: call void @finch_panic_index(ptr @.str.6874, i64 235, i64 %t220, i64 %t222) unreachable inrange10475: %t224 = extractvalue { ptr, i64, i64 } %t221, 0 %t225 = getelementptr inbounds { ptr, i64, i64 }, ptr %t224, i64 %t220 %t226 = load { ptr, i64, i64 }, ptr %t225 %t227 = call { ptr, i64, i64 } @finch.json.quote({ ptr, i64, i64 } %t226) store { ptr, i64, i64 } %t218, ptr %a229 store { ptr, i64, i64 } %t227, ptr %a230 call void @finch_str_concat(ptr %a228, ptr %a229, ptr %a230) %t231 = load { ptr, i64, i64 }, ptr %a228 %t232 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t231, ptr %a234 store { ptr, i64, i64 } %t232, ptr %a235 call void @finch_str_concat(ptr %a233, ptr %a234, ptr %a235) %t236 = load { ptr, i64, i64 }, ptr %a233 %t237 = load i64, ptr %t217 %t238 = add i64 %t237, 1 call void @finch_arr_reserve(ptr %t216, i64 %t238, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t239 = load ptr, ptr %t216 %t240 = getelementptr inbounds { ptr, i64, i64 }, ptr %t239, i64 %t237 store { ptr, i64, i64 } %t236, ptr %t240 store i64 %t238, ptr %t217 %t241 = load %S.json.Json, ptr %a197 %t242 = load { ptr, i64, i64 }, ptr %a2 %t243 = load { ptr, i64, i64 }, ptr %a6 %t244 = load ptr, ptr %a4 call void @finch.json.write(%S.json.Json %t241, { ptr, i64, i64 } %t242, { ptr, i64, i64 } %t243, ptr %t244) br label %each.step10465 each.step10465: %t245 = load i64, ptr %a188 %t246 = add i64 %t245, 1 store i64 %t246, ptr %a188 br label %each.cond10463 each.end10466: %t247 = load ptr, ptr %a4 %t248 = icmp eq ptr %t247, null br i1 %t248, label %panic10476, label %ok10477 panic10476: call void @finch_panic(ptr @.str.6875, i64 238, ptr @.str.6876) unreachable ok10477: %t249 = getelementptr inbounds %S.json.Writer, ptr %t247, i32 0, i32 0 %t250 = getelementptr inbounds { ptr, i64, i64 }, ptr %t249, i32 0, i32 1 %t251 = load { ptr, i64, i64 }, ptr %a5 %t252 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t251, ptr %a254 store { ptr, i64, i64 } %t252, ptr %a255 call void @finch_str_concat(ptr %a253, ptr %a254, ptr %a255) %t256 = load { ptr, i64, i64 }, ptr %a253 store { ptr, i64, i64 } %t256, ptr %a258 store { ptr, i64, i64 } { ptr @.str.6877, i64 1, i64 0 }, ptr %a259 call void @finch_str_concat(ptr %a257, ptr %a258, ptr %a259) %t260 = load { ptr, i64, i64 }, ptr %a257 %t261 = load i64, ptr %t250 %t262 = add i64 %t261, 1 call void @finch_arr_reserve(ptr %t249, i64 %t262, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t263 = load ptr, ptr %t249 %t264 = getelementptr inbounds { ptr, i64, i64 }, ptr %t263, i64 %t261 store { ptr, i64, i64 } %t260, ptr %t264 store i64 %t262, ptr %t250 br label %match.end10410 match.next10455: br i1 true, label %panic10478, label %ok10479 panic10478: call void @finch_panic(ptr @.str.6878, i64 199, ptr @.str.6879) unreachable ok10479: unreachable match.end10410: ret void } define internal { ptr, i64, i64 } @finch.json.stringify(%S.json.Json %p0) { entry: %a1 = alloca %S.json.Json, align 16 %a2 = alloca %S.json.Writer, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 store %S.json.Json %p0, ptr %a1 store %S.json.Writer zeroinitializer, ptr %a2 %t3 = load %S.json.Json, ptr %a1 call void @finch.json.write(%S.json.Json %t3, { ptr, i64, i64 } { ptr @.str.6880, i64 0, i64 0 }, { ptr, i64, i64 } { ptr @.str.6881, i64 0, i64 0 }, ptr %a2) %t4 = getelementptr inbounds %S.json.Writer, ptr %a2, i32 0, i32 0 %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.6882, i64 0, i64 0 }, ptr %a6 call void @finch_str_join(ptr %a7, ptr %t4, ptr %a6) %t8 = load { ptr, i64, i64 }, ptr %a7 ret { ptr, i64, i64 } %t8 } define internal { ptr, i64, i64 } @finch.json.pretty(%S.json.Json %p0) { entry: %a1 = alloca %S.json.Json, align 16 %a2 = alloca %S.json.Writer, align 16 %a6 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 store %S.json.Json %p0, ptr %a1 store %S.json.Writer zeroinitializer, ptr %a2 %t3 = load %S.json.Json, ptr %a1 call void @finch.json.write(%S.json.Json %t3, { ptr, i64, i64 } { ptr @.str.6883, i64 2, i64 0 }, { ptr, i64, i64 } { ptr @.str.6884, i64 0, i64 0 }, ptr %a2) %t4 = getelementptr inbounds %S.json.Writer, ptr %a2, i32 0, i32 0 %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.6885, i64 0, i64 0 }, ptr %a6 call void @finch_str_join(ptr %a7, ptr %t4, ptr %a6) %t8 = load { ptr, i64, i64 }, ptr %a7 ret { ptr, i64, i64 } %t8 } define internal { ptr, i64, i64 } @finch.json.where(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a2 = alloca i64, align 16 %a3 = alloca i64, align 16 %a8 = alloca i64, align 16 %a37 = alloca { ptr, i64, i64 }, align 16 %a39 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 %a43 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store i64 1, ptr %a2 store i64 1, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = icmp eq ptr %t4, null br i1 %t5, label %panic10480, label %ok10481 panic10480: call void @finch_panic(ptr @.str.6886, i64 268, ptr @.str.6887) unreachable ok10481: %t6 = getelementptr inbounds %S.json.Reader, ptr %t4, i32 0, i32 1 %t7 = load i64, ptr %t6 store i64 0, ptr %a8 br label %for.cond10482 for.cond10482: %t9 = load i64, ptr %a8 %t10 = icmp slt i64 %t9, %t7 br i1 %t10, label %for.body10483, label %for.end10485 for.body10483: %t11 = load i64, ptr %a8 %t12 = load ptr, ptr %a1 %t13 = icmp eq ptr %t12, null br i1 %t13, label %panic10486, label %ok10487 panic10486: call void @finch_panic(ptr @.str.6888, i64 269, ptr @.str.6889) unreachable ok10487: %t14 = getelementptr inbounds %S.json.Reader, ptr %t12, i32 0, i32 0 %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t14, i32 0, i32 1 %t16 = load i64, ptr %t15 %t17 = icmp slt i64 %t11, %t16 br label %logic.from10488 logic.from10488: br i1 %t17, label %logic.rhs10489, label %logic.end10490 logic.rhs10489: %t18 = load ptr, ptr %a1 %t19 = icmp eq ptr %t18, null br i1 %t19, label %panic10491, label %ok10492 panic10491: call void @finch_panic(ptr @.str.6890, i64 269, ptr @.str.6891) unreachable ok10492: %t20 = getelementptr inbounds %S.json.Reader, ptr %t18, i32 0, i32 0 %t21 = load i64, ptr %a8 %t22 = load { ptr, i64, i64 }, ptr %t20 %t23 = extractvalue { ptr, i64, i64 } %t22, 1 %t24 = icmp uge i64 %t21, %t23 br i1 %t24, label %range10493, label %inrange10494 range10493: call void @finch_panic_index(ptr @.str.6892, i64 269, i64 %t21, i64 %t23) unreachable inrange10494: %t25 = extractvalue { ptr, i64, i64 } %t22, 0 %t26 = getelementptr inbounds i8, ptr %t25, i64 %t21 %t27 = load i8, ptr %t26 %t28 = icmp eq i8 %t27, 10 br label %logic.rend10495 logic.rend10495: br label %logic.end10490 logic.end10490: %t29 = phi i1 [ false, %logic.from10488 ], [ %t28, %logic.rend10495 ] br i1 %t29, label %then10496, label %else10497 then10496: %t30 = load i64, ptr %a2 %t31 = add i64 %t30, 1 store i64 %t31, ptr %a2 store i64 1, ptr %a3 br label %endif10498 else10497: %t32 = load i64, ptr %a3 %t33 = add i64 %t32, 1 store i64 %t33, ptr %a3 br label %endif10498 endif10498: br label %for.step10484 for.step10484: %t34 = load i64, ptr %a8 %t35 = add i64 %t34, 1 store i64 %t35, ptr %a8 br label %for.cond10482 for.end10485: %t36 = load i64, ptr %a2 call void @finch_str_from_int(ptr %a37, i64 %t36) %t38 = load { ptr, i64, i64 }, ptr %a37 store { ptr, i64, i64 } { ptr @.str.6893, i64 5, i64 0 }, ptr %a40 store { ptr, i64, i64 } %t38, ptr %a41 call void @finch_str_concat(ptr %a39, ptr %a40, ptr %a41) %t42 = load { ptr, i64, i64 }, ptr %a39 store { ptr, i64, i64 } %t42, ptr %a44 store { ptr, i64, i64 } { ptr @.str.6894, i64 9, i64 0 }, ptr %a45 call void @finch_str_concat(ptr %a43, ptr %a44, ptr %a45) %t46 = load { ptr, i64, i64 }, ptr %a43 %t47 = load i64, ptr %a3 call void @finch_str_from_int(ptr %a48, i64 %t47) %t49 = load { ptr, i64, i64 }, ptr %a48 store { ptr, i64, i64 } %t46, ptr %a51 store { ptr, i64, i64 } %t49, ptr %a52 call void @finch_str_concat(ptr %a50, ptr %a51, ptr %a52) %t53 = load { ptr, i64, i64 }, ptr %a50 ret { ptr, i64, i64 } %t53 } define internal i8 @finch.json.peek(ptr %p0) { entry: %a1 = alloca ptr, align 16 store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = icmp eq ptr %t2, null br i1 %t3, label %panic10499, label %ok10500 panic10499: call void @finch_panic(ptr @.str.6895, i64 280, ptr @.str.6896) unreachable ok10500: %t4 = getelementptr inbounds %S.json.Reader, ptr %t2, i32 0, i32 1 %t5 = load i64, ptr %t4 %t6 = load ptr, ptr %a1 %t7 = icmp eq ptr %t6, null br i1 %t7, label %panic10501, label %ok10502 panic10501: call void @finch_panic(ptr @.str.6897, i64 280, ptr @.str.6898) unreachable ok10502: %t8 = getelementptr inbounds %S.json.Reader, ptr %t6, i32 0, i32 0 %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t8, i32 0, i32 1 %t10 = load i64, ptr %t9 %t11 = icmp slt i64 %t5, %t10 br i1 %t11, label %then10503, label %endif10505 then10503: %t12 = load ptr, ptr %a1 %t13 = icmp eq ptr %t12, null br i1 %t13, label %panic10506, label %ok10507 panic10506: call void @finch_panic(ptr @.str.6899, i64 281, ptr @.str.6900) unreachable ok10507: %t14 = getelementptr inbounds %S.json.Reader, ptr %t12, i32 0, i32 0 %t15 = load ptr, ptr %a1 %t16 = icmp eq ptr %t15, null br i1 %t16, label %panic10508, label %ok10509 panic10508: call void @finch_panic(ptr @.str.6901, i64 281, ptr @.str.6902) unreachable ok10509: %t17 = getelementptr inbounds %S.json.Reader, ptr %t15, i32 0, i32 1 %t18 = load i64, ptr %t17 %t19 = load { ptr, i64, i64 }, ptr %t14 %t20 = extractvalue { ptr, i64, i64 } %t19, 1 %t21 = icmp uge i64 %t18, %t20 br i1 %t21, label %range10510, label %inrange10511 range10510: call void @finch_panic_index(ptr @.str.6903, i64 281, i64 %t18, i64 %t20) unreachable inrange10511: %t22 = extractvalue { ptr, i64, i64 } %t19, 0 %t23 = getelementptr inbounds i8, ptr %t22, i64 %t18 %t24 = load i8, ptr %t23 ret i8 %t24 endif10505: %t25 = trunc i64 0 to i8 ret i8 %t25 } define internal void @finch.json.skip_space(ptr %p0) { entry: %a1 = alloca ptr, align 16 store ptr %p0, ptr %a1 br label %while.cond10512 while.cond10512: %t2 = load ptr, ptr %a1 %t3 = icmp eq ptr %t2, null br i1 %t3, label %panic10515, label %ok10516 panic10515: call void @finch_panic(ptr @.str.6904, i64 287, ptr @.str.6905) unreachable ok10516: %t4 = getelementptr inbounds %S.json.Reader, ptr %t2, i32 0, i32 1 %t5 = load i64, ptr %t4 %t6 = load ptr, ptr %a1 %t7 = icmp eq ptr %t6, null br i1 %t7, label %panic10517, label %ok10518 panic10517: call void @finch_panic(ptr @.str.6906, i64 287, ptr @.str.6907) unreachable ok10518: %t8 = getelementptr inbounds %S.json.Reader, ptr %t6, i32 0, i32 0 %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t8, i32 0, i32 1 %t10 = load i64, ptr %t9 %t11 = icmp slt i64 %t5, %t10 br label %logic.from10519 logic.from10519: br i1 %t11, label %logic.rhs10520, label %logic.end10521 logic.rhs10520: %t12 = load ptr, ptr %a1 %t13 = icmp eq ptr %t12, null br i1 %t13, label %panic10522, label %ok10523 panic10522: call void @finch_panic(ptr @.str.6908, i64 287, ptr @.str.6909) unreachable ok10523: %t14 = getelementptr inbounds %S.json.Reader, ptr %t12, i32 0, i32 0 %t15 = load ptr, ptr %a1 %t16 = icmp eq ptr %t15, null br i1 %t16, label %panic10524, label %ok10525 panic10524: call void @finch_panic(ptr @.str.6910, i64 287, ptr @.str.6911) unreachable ok10525: %t17 = getelementptr inbounds %S.json.Reader, ptr %t15, i32 0, i32 1 %t18 = load i64, ptr %t17 %t19 = load { ptr, i64, i64 }, ptr %t14 %t20 = extractvalue { ptr, i64, i64 } %t19, 1 %t21 = icmp uge i64 %t18, %t20 br i1 %t21, label %range10526, label %inrange10527 range10526: call void @finch_panic_index(ptr @.str.6912, i64 287, i64 %t18, i64 %t20) unreachable inrange10527: %t22 = extractvalue { ptr, i64, i64 } %t19, 0 %t23 = getelementptr inbounds i8, ptr %t22, i64 %t18 %t24 = load i8, ptr %t23 %t25 = icmp eq i8 %t24, 32 br label %logic.from10528 logic.from10528: br i1 %t25, label %logic.end10530, label %logic.rhs10529 logic.rhs10529: %t26 = load ptr, ptr %a1 %t27 = icmp eq ptr %t26, null br i1 %t27, label %panic10531, label %ok10532 panic10531: call void @finch_panic(ptr @.str.6913, i64 287, ptr @.str.6914) unreachable ok10532: %t28 = getelementptr inbounds %S.json.Reader, ptr %t26, i32 0, i32 0 %t29 = load ptr, ptr %a1 %t30 = icmp eq ptr %t29, null br i1 %t30, label %panic10533, label %ok10534 panic10533: call void @finch_panic(ptr @.str.6915, i64 287, ptr @.str.6916) unreachable ok10534: %t31 = getelementptr inbounds %S.json.Reader, ptr %t29, i32 0, i32 1 %t32 = load i64, ptr %t31 %t33 = load { ptr, i64, i64 }, ptr %t28 %t34 = extractvalue { ptr, i64, i64 } %t33, 1 %t35 = icmp uge i64 %t32, %t34 br i1 %t35, label %range10535, label %inrange10536 range10535: call void @finch_panic_index(ptr @.str.6917, i64 287, i64 %t32, i64 %t34) unreachable inrange10536: %t36 = extractvalue { ptr, i64, i64 } %t33, 0 %t37 = getelementptr inbounds i8, ptr %t36, i64 %t32 %t38 = load i8, ptr %t37 %t39 = icmp eq i8 %t38, 10 br label %logic.rend10537 logic.rend10537: br label %logic.end10530 logic.end10530: %t40 = phi i1 [ true, %logic.from10528 ], [ %t39, %logic.rend10537 ] br label %logic.from10538 logic.from10538: br i1 %t40, label %logic.end10540, label %logic.rhs10539 logic.rhs10539: %t41 = load ptr, ptr %a1 %t42 = icmp eq ptr %t41, null br i1 %t42, label %panic10541, label %ok10542 panic10541: call void @finch_panic(ptr @.str.6918, i64 287, ptr @.str.6919) unreachable ok10542: %t43 = getelementptr inbounds %S.json.Reader, ptr %t41, i32 0, i32 0 %t44 = load ptr, ptr %a1 %t45 = icmp eq ptr %t44, null br i1 %t45, label %panic10543, label %ok10544 panic10543: call void @finch_panic(ptr @.str.6920, i64 287, ptr @.str.6921) unreachable ok10544: %t46 = getelementptr inbounds %S.json.Reader, ptr %t44, i32 0, i32 1 %t47 = load i64, ptr %t46 %t48 = load { ptr, i64, i64 }, ptr %t43 %t49 = extractvalue { ptr, i64, i64 } %t48, 1 %t50 = icmp uge i64 %t47, %t49 br i1 %t50, label %range10545, label %inrange10546 range10545: call void @finch_panic_index(ptr @.str.6922, i64 287, i64 %t47, i64 %t49) unreachable inrange10546: %t51 = extractvalue { ptr, i64, i64 } %t48, 0 %t52 = getelementptr inbounds i8, ptr %t51, i64 %t47 %t53 = load i8, ptr %t52 %t54 = icmp eq i8 %t53, 9 br label %logic.rend10547 logic.rend10547: br label %logic.end10540 logic.end10540: %t55 = phi i1 [ true, %logic.from10538 ], [ %t54, %logic.rend10547 ] br label %logic.from10548 logic.from10548: br i1 %t55, label %logic.end10550, label %logic.rhs10549 logic.rhs10549: %t56 = load ptr, ptr %a1 %t57 = icmp eq ptr %t56, null br i1 %t57, label %panic10551, label %ok10552 panic10551: call void @finch_panic(ptr @.str.6923, i64 287, ptr @.str.6924) unreachable ok10552: %t58 = getelementptr inbounds %S.json.Reader, ptr %t56, i32 0, i32 0 %t59 = load ptr, ptr %a1 %t60 = icmp eq ptr %t59, null br i1 %t60, label %panic10553, label %ok10554 panic10553: call void @finch_panic(ptr @.str.6925, i64 287, ptr @.str.6926) unreachable ok10554: %t61 = getelementptr inbounds %S.json.Reader, ptr %t59, i32 0, i32 1 %t62 = load i64, ptr %t61 %t63 = load { ptr, i64, i64 }, ptr %t58 %t64 = extractvalue { ptr, i64, i64 } %t63, 1 %t65 = icmp uge i64 %t62, %t64 br i1 %t65, label %range10555, label %inrange10556 range10555: call void @finch_panic_index(ptr @.str.6927, i64 287, i64 %t62, i64 %t64) unreachable inrange10556: %t66 = extractvalue { ptr, i64, i64 } %t63, 0 %t67 = getelementptr inbounds i8, ptr %t66, i64 %t62 %t68 = load i8, ptr %t67 %t69 = icmp eq i8 %t68, 13 br label %logic.rend10557 logic.rend10557: br label %logic.end10550 logic.end10550: %t70 = phi i1 [ true, %logic.from10548 ], [ %t69, %logic.rend10557 ] br label %logic.rend10558 logic.rend10558: br label %logic.end10521 logic.end10521: %t71 = phi i1 [ false, %logic.from10519 ], [ %t70, %logic.rend10558 ] br i1 %t71, label %while.body10513, label %while.end10514 while.body10513: %t72 = load ptr, ptr %a1 %t73 = icmp eq ptr %t72, null br i1 %t73, label %panic10559, label %ok10560 panic10559: call void @finch_panic(ptr @.str.6928, i64 288, ptr @.str.6929) unreachable ok10560: %t74 = getelementptr inbounds %S.json.Reader, ptr %t72, i32 0, i32 1 %t75 = load i64, ptr %t74 %t76 = add i64 %t75, 1 store i64 %t76, ptr %t74 br label %while.cond10512 while.end10514: ret void } define internal { ptr, i64, i64 } @finch.json.unexpected(ptr %p0, { ptr, i64, i64 } %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 %a16 = alloca { ptr, i64, i64 }, align 16 %a18 = alloca { ptr, i64, i64 }, align 16 %a19 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a28 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca { ptr, i64, i64 }, align 16 %a48 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 %a53 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 %a60 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 %a62 = alloca { ptr, i64, i64 }, align 16 %a66 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 %a68 = alloca { ptr, i64, i64 }, align 16 %a70 = alloca { ptr, i64, i64 }, align 16 %a71 = alloca { ptr, i64, i64 }, align 16 %a72 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null br i1 %t4, label %panic10561, label %ok10562 panic10561: call void @finch_panic(ptr @.str.6930, i64 293, ptr @.str.6931) unreachable ok10562: %t5 = getelementptr inbounds %S.json.Reader, ptr %t3, i32 0, i32 1 %t6 = load i64, ptr %t5 %t7 = load ptr, ptr %a1 %t8 = icmp eq ptr %t7, null br i1 %t8, label %panic10563, label %ok10564 panic10563: call void @finch_panic(ptr @.str.6932, i64 293, ptr @.str.6933) unreachable ok10564: %t9 = getelementptr inbounds %S.json.Reader, ptr %t7, i32 0, i32 0 %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t9, i32 0, i32 1 %t11 = load i64, ptr %t10 %t12 = icmp sge i64 %t6, %t11 br i1 %t12, label %then10565, label %endif10567 then10565: %t13 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.6934, i64 26, i64 0 }, ptr %a15 store { ptr, i64, i64 } %t13, ptr %a16 call void @finch_str_concat(ptr %a14, ptr %a15, ptr %a16) %t17 = load { ptr, i64, i64 }, ptr %a14 store { ptr, i64, i64 } %t17, ptr %a19 store { ptr, i64, i64 } { ptr @.str.6935, i64 12, i64 0 }, ptr %a20 call void @finch_str_concat(ptr %a18, ptr %a19, ptr %a20) %t21 = load { ptr, i64, i64 }, ptr %a18 %t22 = load ptr, ptr %a1 %t23 = call { ptr, i64, i64 } @finch.json.where(ptr %t22) store { ptr, i64, i64 } %t21, ptr %a25 store { ptr, i64, i64 } %t23, ptr %a26 call void @finch_str_concat(ptr %a24, ptr %a25, ptr %a26) %t27 = load { ptr, i64, i64 }, ptr %a24 store { ptr, i64, i64 } %t27, ptr %a29 store { ptr, i64, i64 } { ptr @.str.6936, i64 1, i64 0 }, ptr %a30 call void @finch_str_concat(ptr %a28, ptr %a29, ptr %a30) %t31 = load { ptr, i64, i64 }, ptr %a28 ret { ptr, i64, i64 } %t31 endif10567: %t32 = load ptr, ptr %a1 %t33 = icmp eq ptr %t32, null br i1 %t33, label %panic10568, label %ok10569 panic10568: call void @finch_panic(ptr @.str.6938, i64 296, ptr @.str.6939) unreachable ok10569: %t34 = getelementptr inbounds %S.json.Reader, ptr %t32, i32 0, i32 0 %t35 = load ptr, ptr %a1 %t36 = icmp eq ptr %t35, null br i1 %t36, label %panic10570, label %ok10571 panic10570: call void @finch_panic(ptr @.str.6940, i64 296, ptr @.str.6941) unreachable ok10571: %t37 = getelementptr inbounds %S.json.Reader, ptr %t35, i32 0, i32 1 %t38 = load i64, ptr %t37 %t39 = load { ptr, i64, i64 }, ptr %t34 %t40 = extractvalue { ptr, i64, i64 } %t39, 1 %t41 = icmp uge i64 %t38, %t40 br i1 %t41, label %range10572, label %inrange10573 range10572: call void @finch_panic_index(ptr @.str.6942, i64 296, i64 %t38, i64 %t40) unreachable inrange10573: %t42 = extractvalue { ptr, i64, i64 } %t39, 0 %t43 = getelementptr inbounds i8, ptr %t42, i64 %t38 %t44 = load i8, ptr %t43 call void @finch_str_from_char(ptr %a45, i8 signext %t44) %t46 = load { ptr, i64, i64 }, ptr %a45 store { ptr, i64, i64 } { ptr @.str.6937, i64 13, i64 0 }, ptr %a48 store { ptr, i64, i64 } %t46, ptr %a49 call void @finch_str_concat(ptr %a47, ptr %a48, ptr %a49) %t50 = load { ptr, i64, i64 }, ptr %a47 store { ptr, i64, i64 } %t50, ptr %a52 store { ptr, i64, i64 } { ptr @.str.6943, i64 8, i64 0 }, ptr %a53 call void @finch_str_concat(ptr %a51, ptr %a52, ptr %a53) %t54 = load { ptr, i64, i64 }, ptr %a51 %t55 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t54, ptr %a57 store { ptr, i64, i64 } %t55, ptr %a58 call void @finch_str_concat(ptr %a56, ptr %a57, ptr %a58) %t59 = load { ptr, i64, i64 }, ptr %a56 store { ptr, i64, i64 } %t59, ptr %a61 store { ptr, i64, i64 } { ptr @.str.6944, i64 12, i64 0 }, ptr %a62 call void @finch_str_concat(ptr %a60, ptr %a61, ptr %a62) %t63 = load { ptr, i64, i64 }, ptr %a60 %t64 = load ptr, ptr %a1 %t65 = call { ptr, i64, i64 } @finch.json.where(ptr %t64) store { ptr, i64, i64 } %t63, ptr %a67 store { ptr, i64, i64 } %t65, ptr %a68 call void @finch_str_concat(ptr %a66, ptr %a67, ptr %a68) %t69 = load { ptr, i64, i64 }, ptr %a66 store { ptr, i64, i64 } %t69, ptr %a71 store { ptr, i64, i64 } { ptr @.str.6945, i64 1, i64 0 }, ptr %a72 call void @finch_str_concat(ptr %a70, ptr %a71, ptr %a72) %t73 = load { ptr, i64, i64 }, ptr %a70 ret { ptr, i64, i64 } %t73 } define internal i1 @finch.json.comes(ptr %p0, { ptr, i64, i64 } %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a20 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 %a36 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null br i1 %t4, label %panic10574, label %ok10575 panic10574: call void @finch_panic(ptr @.str.6946, i64 301, ptr @.str.6947) unreachable ok10575: %t5 = getelementptr inbounds %S.json.Reader, ptr %t3, i32 0, i32 0 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 %t7 = load i64, ptr %t6 %t8 = load ptr, ptr %a1 %t9 = icmp eq ptr %t8, null br i1 %t9, label %panic10576, label %ok10577 panic10576: call void @finch_panic(ptr @.str.6948, i64 301, ptr @.str.6949) unreachable ok10577: %t10 = getelementptr inbounds %S.json.Reader, ptr %t8, i32 0, i32 1 %t11 = load i64, ptr %t10 %t12 = sub i64 %t7, %t11 %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t14 = load i64, ptr %t13 %t15 = icmp sge i64 %t12, %t14 br label %logic.from10578 logic.from10578: br i1 %t15, label %logic.rhs10579, label %logic.end10580 logic.rhs10579: %t16 = load ptr, ptr %a1 %t17 = icmp eq ptr %t16, null br i1 %t17, label %panic10581, label %ok10582 panic10581: call void @finch_panic(ptr @.str.6950, i64 301, ptr @.str.6951) unreachable ok10582: %t18 = getelementptr inbounds %S.json.Reader, ptr %t16, i32 0, i32 0 %t19 = load { ptr, i64, i64 }, ptr %t18 store { ptr, i64, i64 } %t19, ptr %a20 %t22 = load ptr, ptr %a1 %t23 = icmp eq ptr %t22, null br i1 %t23, label %panic10583, label %ok10584 panic10583: call void @finch_panic(ptr @.str.6953, i64 301, ptr @.str.6954) unreachable ok10584: %t24 = getelementptr inbounds %S.json.Reader, ptr %t22, i32 0, i32 1 %t25 = load i64, ptr %t24 %t26 = load ptr, ptr %a1 %t27 = icmp eq ptr %t26, null br i1 %t27, label %panic10585, label %ok10586 panic10585: call void @finch_panic(ptr @.str.6955, i64 301, ptr @.str.6956) unreachable ok10586: %t28 = getelementptr inbounds %S.json.Reader, ptr %t26, i32 0, i32 1 %t29 = load i64, ptr %t28 %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t31 = load i64, ptr %t30 %t32 = add i64 %t29, %t31 call void @finch_str_sub(ptr %a21, ptr %a20, i64 %t25, i64 %t32, ptr @.str.6952, i64 301) %t33 = load { ptr, i64, i64 }, ptr %a21 %t34 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t33, ptr %a35 store { ptr, i64, i64 } %t34, ptr %a36 %t37 = call i32 @finch_str_eq(ptr %a35, ptr %a36) %t38 = icmp ne i32 %t37, 0 br label %logic.rend10587 logic.rend10587: br label %logic.end10580 logic.end10580: %t39 = phi i1 [ false, %logic.from10578 ], [ %t38, %logic.rend10587 ] ret i1 %t39 } define internal { i1, i8, { ptr, i64, i64 } } @finch.json.expect_word(ptr %p0, { ptr, i64, i64 } %p1) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a9 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 %a11 = alloca { ptr, i64, i64 }, align 16 %a13 = alloca { ptr, i64, i64 }, align 16 %a14 = alloca { ptr, i64, i64 }, align 16 %a15 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = load { ptr, i64, i64 }, ptr %a2 %t5 = call i1 @finch.json.comes(ptr %t3, { ptr, i64, i64 } %t4) %t6 = xor i1 %t5, true br i1 %t6, label %then10588, label %endif10590 then10588: %t7 = load ptr, ptr %a1 %t8 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.6957, i64 1, i64 0 }, ptr %a10 store { ptr, i64, i64 } %t8, ptr %a11 call void @finch_str_concat(ptr %a9, ptr %a10, ptr %a11) %t12 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t12, ptr %a14 store { ptr, i64, i64 } { ptr @.str.6958, i64 1, i64 0 }, ptr %a15 call void @finch_str_concat(ptr %a13, ptr %a14, ptr %a15) %t16 = load { ptr, i64, i64 }, ptr %a13 %t17 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t7, { ptr, i64, i64 } %t16) %t18 = insertvalue { i1, i8, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t17, 2 ret { i1, i8, { ptr, i64, i64 } } %t18 endif10590: %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t20 = load i64, ptr %t19 %t21 = load ptr, ptr %a1 %t22 = icmp eq ptr %t21, null br i1 %t22, label %panic10591, label %ok10592 panic10591: call void @finch_panic(ptr @.str.6959, i64 308, ptr @.str.6960) unreachable ok10592: %t23 = getelementptr inbounds %S.json.Reader, ptr %t21, i32 0, i32 1 %t24 = load i64, ptr %t23 %t25 = add i64 %t24, %t20 store i64 %t25, ptr %t23 ret { i1, i8, { ptr, i64, i64 } } { i1 true, i8 0, { ptr, i64, i64 } zeroinitializer } } define internal i64 @finch.json.hex_value(i8 %p0) { entry: %a1 = alloca i8, align 16 store i8 %p0, ptr %a1 %t2 = load i8, ptr %a1 %t3 = icmp uge i8 %t2, 48 br label %logic.from10593 logic.from10593: br i1 %t3, label %logic.rhs10594, label %logic.end10595 logic.rhs10594: %t4 = load i8, ptr %a1 %t5 = icmp ule i8 %t4, 57 br label %logic.rend10596 logic.rend10596: br label %logic.end10595 logic.end10595: %t6 = phi i1 [ false, %logic.from10593 ], [ %t5, %logic.rend10596 ] br i1 %t6, label %then10597, label %endif10599 then10597: %t7 = load i8, ptr %a1 %t8 = zext i8 %t7 to i64 %t9 = zext i8 48 to i64 %t10 = sub i64 %t8, %t9 ret i64 %t10 endif10599: %t11 = load i8, ptr %a1 %t12 = icmp uge i8 %t11, 97 br label %logic.from10600 logic.from10600: br i1 %t12, label %logic.rhs10601, label %logic.end10602 logic.rhs10601: %t13 = load i8, ptr %a1 %t14 = icmp ule i8 %t13, 102 br label %logic.rend10603 logic.rend10603: br label %logic.end10602 logic.end10602: %t15 = phi i1 [ false, %logic.from10600 ], [ %t14, %logic.rend10603 ] br i1 %t15, label %then10604, label %endif10606 then10604: %t16 = load i8, ptr %a1 %t17 = zext i8 %t16 to i64 %t18 = zext i8 97 to i64 %t19 = sub i64 %t17, %t18 %t20 = add i64 %t19, 10 ret i64 %t20 endif10606: %t21 = load i8, ptr %a1 %t22 = icmp uge i8 %t21, 65 br label %logic.from10607 logic.from10607: br i1 %t22, label %logic.rhs10608, label %logic.end10609 logic.rhs10608: %t23 = load i8, ptr %a1 %t24 = icmp ule i8 %t23, 70 br label %logic.rend10610 logic.rend10610: br label %logic.end10609 logic.end10609: %t25 = phi i1 [ false, %logic.from10607 ], [ %t24, %logic.rend10610 ] br i1 %t25, label %then10611, label %endif10613 then10611: %t26 = load i8, ptr %a1 %t27 = zext i8 %t26 to i64 %t28 = zext i8 65 to i64 %t29 = sub i64 %t27, %t28 %t30 = add i64 %t29, 10 ret i64 %t30 endif10613: ret i64 -1 } define internal { ptr, i64, i64 } @finch.json.utf8(i64 %p0) { entry: %a1 = alloca i64, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 store i64 %p0, ptr %a1 store { ptr, i64, i64 } zeroinitializer, ptr %a2 %t3 = load i64, ptr %a1 %t4 = icmp slt i64 %t3, 128 br i1 %t4, label %then10614, label %else10615 then10614: %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t6 = load i64, ptr %a1 %t7 = trunc i64 %t6 to i8 %t8 = load i64, ptr %t5 %t9 = add i64 %t8, 1 call void @finch_arr_reserve(ptr %a2, i64 %t9, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) %t10 = load ptr, ptr %a2 %t11 = getelementptr inbounds i8, ptr %t10, i64 %t8 store i8 %t7, ptr %t11 store i64 %t9, ptr %t5 br label %endif10616 else10615: %t12 = load i64, ptr %a1 %t13 = icmp slt i64 %t12, 2048 br i1 %t13, label %then10617, label %else10618 then10617: %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t15 = load i64, ptr %a1 %t16 = sdiv i64 %t15, 64 %t17 = add i64 192, %t16 %t18 = trunc i64 %t17 to i8 %t19 = load i64, ptr %t14 %t20 = add i64 %t19, 1 call void @finch_arr_reserve(ptr %a2, i64 %t20, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) %t21 = load ptr, ptr %a2 %t22 = getelementptr inbounds i8, ptr %t21, i64 %t19 store i8 %t18, ptr %t22 store i64 %t20, ptr %t14 %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t24 = load i64, ptr %a1 %t25 = srem i64 %t24, 64 %t26 = add i64 128, %t25 %t27 = trunc i64 %t26 to i8 %t28 = load i64, ptr %t23 %t29 = add i64 %t28, 1 call void @finch_arr_reserve(ptr %a2, i64 %t29, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) %t30 = load ptr, ptr %a2 %t31 = getelementptr inbounds i8, ptr %t30, i64 %t28 store i8 %t27, ptr %t31 store i64 %t29, ptr %t23 br label %endif10619 else10618: %t32 = load i64, ptr %a1 %t33 = icmp slt i64 %t32, 65536 br i1 %t33, label %then10620, label %else10621 then10620: %t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t35 = load i64, ptr %a1 %t36 = sdiv i64 %t35, 4096 %t37 = add i64 224, %t36 %t38 = trunc i64 %t37 to i8 %t39 = load i64, ptr %t34 %t40 = add i64 %t39, 1 call void @finch_arr_reserve(ptr %a2, i64 %t40, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) %t41 = load ptr, ptr %a2 %t42 = getelementptr inbounds i8, ptr %t41, i64 %t39 store i8 %t38, ptr %t42 store i64 %t40, ptr %t34 %t43 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t44 = load i64, ptr %a1 %t45 = sdiv i64 %t44, 64 %t46 = srem i64 %t45, 64 %t47 = add i64 128, %t46 %t48 = trunc i64 %t47 to i8 %t49 = load i64, ptr %t43 %t50 = add i64 %t49, 1 call void @finch_arr_reserve(ptr %a2, i64 %t50, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) %t51 = load ptr, ptr %a2 %t52 = getelementptr inbounds i8, ptr %t51, i64 %t49 store i8 %t48, ptr %t52 store i64 %t50, ptr %t43 %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t54 = load i64, ptr %a1 %t55 = srem i64 %t54, 64 %t56 = add i64 128, %t55 %t57 = trunc i64 %t56 to i8 %t58 = load i64, ptr %t53 %t59 = add i64 %t58, 1 call void @finch_arr_reserve(ptr %a2, i64 %t59, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) %t60 = load ptr, ptr %a2 %t61 = getelementptr inbounds i8, ptr %t60, i64 %t58 store i8 %t57, ptr %t61 store i64 %t59, ptr %t53 br label %endif10622 else10621: %t62 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t63 = load i64, ptr %a1 %t64 = sdiv i64 %t63, 262144 %t65 = add i64 240, %t64 %t66 = trunc i64 %t65 to i8 %t67 = load i64, ptr %t62 %t68 = add i64 %t67, 1 call void @finch_arr_reserve(ptr %a2, i64 %t68, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) %t69 = load ptr, ptr %a2 %t70 = getelementptr inbounds i8, ptr %t69, i64 %t67 store i8 %t66, ptr %t70 store i64 %t68, ptr %t62 %t71 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t72 = load i64, ptr %a1 %t73 = sdiv i64 %t72, 4096 %t74 = srem i64 %t73, 64 %t75 = add i64 128, %t74 %t76 = trunc i64 %t75 to i8 %t77 = load i64, ptr %t71 %t78 = add i64 %t77, 1 call void @finch_arr_reserve(ptr %a2, i64 %t78, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) %t79 = load ptr, ptr %a2 %t80 = getelementptr inbounds i8, ptr %t79, i64 %t77 store i8 %t76, ptr %t80 store i64 %t78, ptr %t71 %t81 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t82 = load i64, ptr %a1 %t83 = sdiv i64 %t82, 64 %t84 = srem i64 %t83, 64 %t85 = add i64 128, %t84 %t86 = trunc i64 %t85 to i8 %t87 = load i64, ptr %t81 %t88 = add i64 %t87, 1 call void @finch_arr_reserve(ptr %a2, i64 %t88, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) %t89 = load ptr, ptr %a2 %t90 = getelementptr inbounds i8, ptr %t89, i64 %t87 store i8 %t86, ptr %t90 store i64 %t88, ptr %t81 %t91 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t92 = load i64, ptr %a1 %t93 = srem i64 %t92, 64 %t94 = add i64 128, %t93 %t95 = trunc i64 %t94 to i8 %t96 = load i64, ptr %t91 %t97 = add i64 %t96, 1 call void @finch_arr_reserve(ptr %a2, i64 %t97, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) %t98 = load ptr, ptr %a2 %t99 = getelementptr inbounds i8, ptr %t98, i64 %t96 store i8 %t95, ptr %t99 store i64 %t97, ptr %t91 br label %endif10622 endif10622: br label %endif10619 endif10619: br label %endif10616 endif10616: %t100 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } zeroinitializer, ptr %a101 store { ptr, i64, i64 } %t100, ptr %a102 call void @finch_str_from_bytes(ptr %a101, ptr %a102) %t103 = load { ptr, i64, i64 }, ptr %a101 ret { ptr, i64, i64 } %t103 } define internal { i1, i64, { ptr, i64, i64 } } @finch.json.read_hex4(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a2 = alloca i64, align 16 %a3 = alloca i64, align 16 store ptr %p0, ptr %a1 store i64 0, ptr %a2 store i64 0, ptr %a3 br label %for.cond10623 for.cond10623: %t4 = load i64, ptr %a3 %t5 = icmp slt i64 %t4, 4 br i1 %t5, label %for.body10624, label %for.end10626 for.body10624: %t6 = load ptr, ptr %a1 %t7 = icmp eq ptr %t6, null br i1 %t7, label %panic10627, label %ok10628 panic10627: call void @finch_panic(ptr @.str.6961, i64 348, ptr @.str.6962) unreachable ok10628: %t8 = getelementptr inbounds %S.json.Reader, ptr %t6, i32 0, i32 1 %t9 = load i64, ptr %t8 %t10 = load ptr, ptr %a1 %t11 = icmp eq ptr %t10, null br i1 %t11, label %panic10629, label %ok10630 panic10629: call void @finch_panic(ptr @.str.6963, i64 348, ptr @.str.6964) unreachable ok10630: %t12 = getelementptr inbounds %S.json.Reader, ptr %t10, i32 0, i32 0 %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t12, i32 0, i32 1 %t14 = load i64, ptr %t13 %t15 = icmp sge i64 %t9, %t14 br label %logic.from10631 logic.from10631: br i1 %t15, label %logic.end10633, label %logic.rhs10632 logic.rhs10632: %t16 = load ptr, ptr %a1 %t17 = icmp eq ptr %t16, null br i1 %t17, label %panic10634, label %ok10635 panic10634: call void @finch_panic(ptr @.str.6965, i64 348, ptr @.str.6966) unreachable ok10635: %t18 = getelementptr inbounds %S.json.Reader, ptr %t16, i32 0, i32 0 %t19 = load ptr, ptr %a1 %t20 = icmp eq ptr %t19, null br i1 %t20, label %panic10636, label %ok10637 panic10636: call void @finch_panic(ptr @.str.6967, i64 348, ptr @.str.6968) unreachable ok10637: %t21 = getelementptr inbounds %S.json.Reader, ptr %t19, i32 0, i32 1 %t22 = load i64, ptr %t21 %t23 = load { ptr, i64, i64 }, ptr %t18 %t24 = extractvalue { ptr, i64, i64 } %t23, 1 %t25 = icmp uge i64 %t22, %t24 br i1 %t25, label %range10638, label %inrange10639 range10638: call void @finch_panic_index(ptr @.str.6969, i64 348, i64 %t22, i64 %t24) unreachable inrange10639: %t26 = extractvalue { ptr, i64, i64 } %t23, 0 %t27 = getelementptr inbounds i8, ptr %t26, i64 %t22 %t28 = load i8, ptr %t27 %t29 = call i64 @finch.json.hex_value(i8 %t28) %t30 = icmp slt i64 %t29, 0 br label %logic.rend10640 logic.rend10640: br label %logic.end10633 logic.end10633: %t31 = phi i1 [ true, %logic.from10631 ], [ %t30, %logic.rend10640 ] br i1 %t31, label %then10641, label %endif10643 then10641: %t32 = load ptr, ptr %a1 %t33 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t32, { ptr, i64, i64 } { ptr @.str.6970, i64 19, i64 0 }) %t34 = insertvalue { i1, i64, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t33, 2 ret { i1, i64, { ptr, i64, i64 } } %t34 endif10643: %t35 = load i64, ptr %a2 %t36 = mul i64 %t35, 16 %t37 = load ptr, ptr %a1 %t38 = icmp eq ptr %t37, null br i1 %t38, label %panic10644, label %ok10645 panic10644: call void @finch_panic(ptr @.str.6971, i64 351, ptr @.str.6972) unreachable ok10645: %t39 = getelementptr inbounds %S.json.Reader, ptr %t37, i32 0, i32 0 %t40 = load ptr, ptr %a1 %t41 = icmp eq ptr %t40, null br i1 %t41, label %panic10646, label %ok10647 panic10646: call void @finch_panic(ptr @.str.6973, i64 351, ptr @.str.6974) unreachable ok10647: %t42 = getelementptr inbounds %S.json.Reader, ptr %t40, i32 0, i32 1 %t43 = load i64, ptr %t42 %t44 = load { ptr, i64, i64 }, ptr %t39 %t45 = extractvalue { ptr, i64, i64 } %t44, 1 %t46 = icmp uge i64 %t43, %t45 br i1 %t46, label %range10648, label %inrange10649 range10648: call void @finch_panic_index(ptr @.str.6975, i64 351, i64 %t43, i64 %t45) unreachable inrange10649: %t47 = extractvalue { ptr, i64, i64 } %t44, 0 %t48 = getelementptr inbounds i8, ptr %t47, i64 %t43 %t49 = load i8, ptr %t48 %t50 = call i64 @finch.json.hex_value(i8 %t49) %t51 = add i64 %t36, %t50 store i64 %t51, ptr %a2 %t52 = load ptr, ptr %a1 %t53 = icmp eq ptr %t52, null br i1 %t53, label %panic10650, label %ok10651 panic10650: call void @finch_panic(ptr @.str.6976, i64 352, ptr @.str.6977) unreachable ok10651: %t54 = getelementptr inbounds %S.json.Reader, ptr %t52, i32 0, i32 1 %t55 = load i64, ptr %t54 %t56 = add i64 %t55, 1 store i64 %t56, ptr %t54 br label %for.step10625 for.step10625: %t57 = load i64, ptr %a3 %t58 = add i64 %t57, 1 store i64 %t58, ptr %a3 br label %for.cond10623 for.end10626: %t59 = load i64, ptr %a2 %t60 = insertvalue { i1, i64, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 %t61 = insertvalue { i1, i64, { ptr, i64, i64 } } %t60, i64 %t59, 1 ret { i1, i64, { ptr, i64, i64 } } %t61 } define internal { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } @finch.json.read_string(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a12 = alloca i64, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 %a27 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 %a30 = alloca { ptr, i64, i64 }, align 16 %a31 = alloca { ptr, i64, i64 }, align 16 %a47 = alloca i8, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a73 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a83 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 %a85 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a104 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 %a123 = alloca i8, align 16 %a176 = alloca { ptr, i64, i64 }, align 16 %a191 = alloca i64, align 16 %a212 = alloca i64, align 16 %a228 = alloca { ptr, i64, i64 }, align 16 %a230 = alloca { ptr, i64, i64 }, align 16 %a231 = alloca { ptr, i64, i64 }, align 16 %a232 = alloca { ptr, i64, i64 }, align 16 %a234 = alloca { ptr, i64, i64 }, align 16 %a235 = alloca { ptr, i64, i64 }, align 16 %a236 = alloca { ptr, i64, i64 }, align 16 %a240 = alloca { ptr, i64, i64 }, align 16 %a241 = alloca { ptr, i64, i64 }, align 16 %a242 = alloca { ptr, i64, i64 }, align 16 %a244 = alloca { ptr, i64, i64 }, align 16 %a245 = alloca { ptr, i64, i64 }, align 16 %a246 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = icmp eq ptr %t2, null br i1 %t3, label %panic10652, label %ok10653 panic10652: call void @finch_panic(ptr @.str.6978, i64 358, ptr @.str.6979) unreachable ok10653: %t4 = getelementptr inbounds %S.json.Reader, ptr %t2, i32 0, i32 1 %t5 = load i64, ptr %t4 %t6 = add i64 %t5, 1 store i64 %t6, ptr %t4 store { ptr, i64, i64 } zeroinitializer, ptr %a7 %t8 = load ptr, ptr %a1 %t9 = icmp eq ptr %t8, null br i1 %t9, label %panic10654, label %ok10655 panic10654: call void @finch_panic(ptr @.str.6980, i64 360, ptr @.str.6981) unreachable ok10655: %t10 = getelementptr inbounds %S.json.Reader, ptr %t8, i32 0, i32 1 %t11 = load i64, ptr %t10 store i64 %t11, ptr %a12 br label %while.cond10656 while.cond10656: br label %while.body10657 while.body10657: %t13 = load ptr, ptr %a1 %t14 = icmp eq ptr %t13, null br i1 %t14, label %panic10659, label %ok10660 panic10659: call void @finch_panic(ptr @.str.6982, i64 362, ptr @.str.6983) unreachable ok10660: %t15 = getelementptr inbounds %S.json.Reader, ptr %t13, i32 0, i32 1 %t16 = load i64, ptr %t15 %t17 = load ptr, ptr %a1 %t18 = icmp eq ptr %t17, null br i1 %t18, label %panic10661, label %ok10662 panic10661: call void @finch_panic(ptr @.str.6984, i64 362, ptr @.str.6985) unreachable ok10662: %t19 = getelementptr inbounds %S.json.Reader, ptr %t17, i32 0, i32 0 %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t19, i32 0, i32 1 %t21 = load i64, ptr %t20 %t22 = icmp sge i64 %t16, %t21 br i1 %t22, label %then10663, label %endif10665 then10663: %t23 = load ptr, ptr %a1 %t24 = call { ptr, i64, i64 } @finch.json.where(ptr %t23) store { ptr, i64, i64 } { ptr @.str.6986, i64 30, i64 0 }, ptr %a26 store { ptr, i64, i64 } %t24, ptr %a27 call void @finch_str_concat(ptr %a25, ptr %a26, ptr %a27) %t28 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t28, ptr %a30 store { ptr, i64, i64 } { ptr @.str.6987, i64 1, i64 0 }, ptr %a31 call void @finch_str_concat(ptr %a29, ptr %a30, ptr %a31) %t32 = load { ptr, i64, i64 }, ptr %a29 %t33 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t32, 2 ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t33 endif10665: %t34 = load ptr, ptr %a1 %t35 = icmp eq ptr %t34, null br i1 %t35, label %panic10666, label %ok10667 panic10666: call void @finch_panic(ptr @.str.6988, i64 365, ptr @.str.6989) unreachable ok10667: %t36 = getelementptr inbounds %S.json.Reader, ptr %t34, i32 0, i32 0 %t37 = load ptr, ptr %a1 %t38 = icmp eq ptr %t37, null br i1 %t38, label %panic10668, label %ok10669 panic10668: call void @finch_panic(ptr @.str.6990, i64 365, ptr @.str.6991) unreachable ok10669: %t39 = getelementptr inbounds %S.json.Reader, ptr %t37, i32 0, i32 1 %t40 = load i64, ptr %t39 %t41 = load { ptr, i64, i64 }, ptr %t36 %t42 = extractvalue { ptr, i64, i64 } %t41, 1 %t43 = icmp uge i64 %t40, %t42 br i1 %t43, label %range10670, label %inrange10671 range10670: call void @finch_panic_index(ptr @.str.6992, i64 365, i64 %t40, i64 %t42) unreachable inrange10671: %t44 = extractvalue { ptr, i64, i64 } %t41, 0 %t45 = getelementptr inbounds i8, ptr %t44, i64 %t40 %t46 = load i8, ptr %t45 store i8 %t46, ptr %a47 %t48 = load i8, ptr %a47 %t49 = icmp eq i8 %t48, 34 br i1 %t49, label %then10672, label %endif10674 then10672: %t50 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 %t51 = load ptr, ptr %a1 %t52 = icmp eq ptr %t51, null br i1 %t52, label %panic10675, label %ok10676 panic10675: call void @finch_panic(ptr @.str.6993, i64 367, ptr @.str.6994) unreachable ok10676: %t53 = getelementptr inbounds %S.json.Reader, ptr %t51, i32 0, i32 0 %t54 = load { ptr, i64, i64 }, ptr %t53 store { ptr, i64, i64 } %t54, ptr %a55 %t57 = load i64, ptr %a12 %t58 = load ptr, ptr %a1 %t59 = icmp eq ptr %t58, null br i1 %t59, label %panic10677, label %ok10678 panic10677: call void @finch_panic(ptr @.str.6996, i64 367, ptr @.str.6997) unreachable ok10678: %t60 = getelementptr inbounds %S.json.Reader, ptr %t58, i32 0, i32 1 %t61 = load i64, ptr %t60 call void @finch_str_sub(ptr %a56, ptr %a55, i64 %t57, i64 %t61, ptr @.str.6995, i64 367) %t62 = load { ptr, i64, i64 }, ptr %a56 %t63 = load i64, ptr %t50 %t64 = add i64 %t63, 1 call void @finch_arr_reserve(ptr %a7, i64 %t64, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t65 = load ptr, ptr %a7 %t66 = getelementptr inbounds { ptr, i64, i64 }, ptr %t65, i64 %t63 store { ptr, i64, i64 } %t62, ptr %t66 store i64 %t64, ptr %t50 %t67 = load ptr, ptr %a1 %t68 = icmp eq ptr %t67, null br i1 %t68, label %panic10679, label %ok10680 panic10679: call void @finch_panic(ptr @.str.6998, i64 368, ptr @.str.6999) unreachable ok10680: %t69 = getelementptr inbounds %S.json.Reader, ptr %t67, i32 0, i32 1 %t70 = load i64, ptr %t69 %t71 = add i64 %t70, 1 store i64 %t71, ptr %t69 %t72 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.7000, i64 0, i64 0 }, ptr %a73 call void @finch_str_join(ptr %a74, ptr %a7, ptr %a73) %t75 = load { ptr, i64, i64 }, ptr %a74 %t76 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 %t77 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t76, { ptr, i64, i64 } %t75, 1 ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t77 endif10674: %t78 = load i8, ptr %a47 %t79 = zext i8 %t78 to i64 %t80 = icmp slt i64 %t79, 32 br i1 %t80, label %then10681, label %endif10683 then10681: %t81 = load ptr, ptr %a1 %t82 = call { ptr, i64, i64 } @finch.json.where(ptr %t81) store { ptr, i64, i64 } { ptr @.str.7001, i64 55, i64 0 }, ptr %a84 store { ptr, i64, i64 } %t82, ptr %a85 call void @finch_str_concat(ptr %a83, ptr %a84, ptr %a85) %t86 = load { ptr, i64, i64 }, ptr %a83 store { ptr, i64, i64 } %t86, ptr %a88 store { ptr, i64, i64 } { ptr @.str.7002, i64 1, i64 0 }, ptr %a89 call void @finch_str_concat(ptr %a87, ptr %a88, ptr %a89) %t90 = load { ptr, i64, i64 }, ptr %a87 %t91 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t90, 2 ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t91 endif10683: %t92 = load i8, ptr %a47 %t93 = icmp ne i8 %t92, 92 br i1 %t93, label %then10684, label %endif10686 then10684: %t94 = load ptr, ptr %a1 %t95 = icmp eq ptr %t94, null br i1 %t95, label %panic10687, label %ok10688 panic10687: call void @finch_panic(ptr @.str.7003, i64 375, ptr @.str.7004) unreachable ok10688: %t96 = getelementptr inbounds %S.json.Reader, ptr %t94, i32 0, i32 1 %t97 = load i64, ptr %t96 %t98 = add i64 %t97, 1 store i64 %t98, ptr %t96 br label %while.cond10656 endif10686: %t99 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 %t100 = load ptr, ptr %a1 %t101 = icmp eq ptr %t100, null br i1 %t101, label %panic10689, label %ok10690 panic10689: call void @finch_panic(ptr @.str.7005, i64 378, ptr @.str.7006) unreachable ok10690: %t102 = getelementptr inbounds %S.json.Reader, ptr %t100, i32 0, i32 0 %t103 = load { ptr, i64, i64 }, ptr %t102 store { ptr, i64, i64 } %t103, ptr %a104 %t106 = load i64, ptr %a12 %t107 = load ptr, ptr %a1 %t108 = icmp eq ptr %t107, null br i1 %t108, label %panic10691, label %ok10692 panic10691: call void @finch_panic(ptr @.str.7008, i64 378, ptr @.str.7009) unreachable ok10692: %t109 = getelementptr inbounds %S.json.Reader, ptr %t107, i32 0, i32 1 %t110 = load i64, ptr %t109 call void @finch_str_sub(ptr %a105, ptr %a104, i64 %t106, i64 %t110, ptr @.str.7007, i64 378) %t111 = load { ptr, i64, i64 }, ptr %a105 %t112 = load i64, ptr %t99 %t113 = add i64 %t112, 1 call void @finch_arr_reserve(ptr %a7, i64 %t113, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t114 = load ptr, ptr %a7 %t115 = getelementptr inbounds { ptr, i64, i64 }, ptr %t114, i64 %t112 store { ptr, i64, i64 } %t111, ptr %t115 store i64 %t113, ptr %t99 %t116 = load ptr, ptr %a1 %t117 = icmp eq ptr %t116, null br i1 %t117, label %panic10693, label %ok10694 panic10693: call void @finch_panic(ptr @.str.7010, i64 379, ptr @.str.7011) unreachable ok10694: %t118 = getelementptr inbounds %S.json.Reader, ptr %t116, i32 0, i32 1 %t119 = load i64, ptr %t118 %t120 = add i64 %t119, 1 store i64 %t120, ptr %t118 %t121 = load ptr, ptr %a1 %t122 = call i8 @finch.json.peek(ptr %t121) store i8 %t122, ptr %a123 %t124 = load ptr, ptr %a1 %t125 = icmp eq ptr %t124, null br i1 %t125, label %panic10695, label %ok10696 panic10695: call void @finch_panic(ptr @.str.7012, i64 381, ptr @.str.7013) unreachable ok10696: %t126 = getelementptr inbounds %S.json.Reader, ptr %t124, i32 0, i32 1 %t127 = load i64, ptr %t126 %t128 = add i64 %t127, 1 store i64 %t128, ptr %t126 %t129 = load i8, ptr %a123 %t130 = icmp eq i8 %t129, 110 br i1 %t130, label %then10697, label %else10698 then10697: %t131 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 %t132 = load i64, ptr %t131 %t133 = add i64 %t132, 1 call void @finch_arr_reserve(ptr %a7, i64 %t133, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t134 = load ptr, ptr %a7 %t135 = getelementptr inbounds { ptr, i64, i64 }, ptr %t134, i64 %t132 store { ptr, i64, i64 } { ptr @.str.7014, i64 1, i64 0 }, ptr %t135 store i64 %t133, ptr %t131 br label %endif10699 else10698: %t136 = load i8, ptr %a123 %t137 = icmp eq i8 %t136, 116 br i1 %t137, label %then10700, label %else10701 then10700: %t138 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 %t139 = load i64, ptr %t138 %t140 = add i64 %t139, 1 call void @finch_arr_reserve(ptr %a7, i64 %t140, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t141 = load ptr, ptr %a7 %t142 = getelementptr inbounds { ptr, i64, i64 }, ptr %t141, i64 %t139 store { ptr, i64, i64 } { ptr @.str.7015, i64 1, i64 0 }, ptr %t142 store i64 %t140, ptr %t138 br label %endif10702 else10701: %t143 = load i8, ptr %a123 %t144 = icmp eq i8 %t143, 114 br i1 %t144, label %then10703, label %else10704 then10703: %t145 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 %t146 = load i64, ptr %t145 %t147 = add i64 %t146, 1 call void @finch_arr_reserve(ptr %a7, i64 %t147, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t148 = load ptr, ptr %a7 %t149 = getelementptr inbounds { ptr, i64, i64 }, ptr %t148, i64 %t146 store { ptr, i64, i64 } { ptr @.str.7016, i64 1, i64 0 }, ptr %t149 store i64 %t147, ptr %t145 br label %endif10705 else10704: %t150 = load i8, ptr %a123 %t151 = icmp eq i8 %t150, 98 br i1 %t151, label %then10706, label %else10707 then10706: %t152 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 %t153 = call { ptr, i64, i64 } @finch.json.utf8(i64 8) %t154 = load i64, ptr %t152 %t155 = add i64 %t154, 1 call void @finch_arr_reserve(ptr %a7, i64 %t155, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t156 = load ptr, ptr %a7 %t157 = getelementptr inbounds { ptr, i64, i64 }, ptr %t156, i64 %t154 store { ptr, i64, i64 } %t153, ptr %t157 store i64 %t155, ptr %t152 br label %endif10708 else10707: %t158 = load i8, ptr %a123 %t159 = icmp eq i8 %t158, 102 br i1 %t159, label %then10709, label %else10710 then10709: %t160 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 %t161 = call { ptr, i64, i64 } @finch.json.utf8(i64 12) %t162 = load i64, ptr %t160 %t163 = add i64 %t162, 1 call void @finch_arr_reserve(ptr %a7, i64 %t163, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t164 = load ptr, ptr %a7 %t165 = getelementptr inbounds { ptr, i64, i64 }, ptr %t164, i64 %t162 store { ptr, i64, i64 } %t161, ptr %t165 store i64 %t163, ptr %t160 br label %endif10711 else10710: %t166 = load i8, ptr %a123 %t167 = icmp eq i8 %t166, 34 br label %logic.from10712 logic.from10712: br i1 %t167, label %logic.end10714, label %logic.rhs10713 logic.rhs10713: %t168 = load i8, ptr %a123 %t169 = icmp eq i8 %t168, 92 br label %logic.rend10715 logic.rend10715: br label %logic.end10714 logic.end10714: %t170 = phi i1 [ true, %logic.from10712 ], [ %t169, %logic.rend10715 ] br label %logic.from10716 logic.from10716: br i1 %t170, label %logic.end10718, label %logic.rhs10717 logic.rhs10717: %t171 = load i8, ptr %a123 %t172 = icmp eq i8 %t171, 47 br label %logic.rend10719 logic.rend10719: br label %logic.end10718 logic.end10718: %t173 = phi i1 [ true, %logic.from10716 ], [ %t172, %logic.rend10719 ] br i1 %t173, label %then10720, label %else10721 then10720: %t174 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 %t175 = load i8, ptr %a123 call void @finch_str_from_char(ptr %a176, i8 signext %t175) %t177 = load { ptr, i64, i64 }, ptr %a176 %t178 = load i64, ptr %t174 %t179 = add i64 %t178, 1 call void @finch_arr_reserve(ptr %a7, i64 %t179, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t180 = load ptr, ptr %a7 %t181 = getelementptr inbounds { ptr, i64, i64 }, ptr %t180, i64 %t178 store { ptr, i64, i64 } %t177, ptr %t181 store i64 %t179, ptr %t174 br label %endif10722 else10721: %t182 = load i8, ptr %a123 %t183 = icmp eq i8 %t182, 117 br i1 %t183, label %then10723, label %else10724 then10723: %t184 = load ptr, ptr %a1 %t185 = call { i1, i64, { ptr, i64, i64 } } @finch.json.read_hex4(ptr %t184) %t186 = extractvalue { i1, i64, { ptr, i64, i64 } } %t185, 0 %t187 = xor i1 %t186, true %t188 = extractvalue { i1, i64, { ptr, i64, i64 } } %t185, 2 %t189 = extractvalue { i1, i64, { ptr, i64, i64 } } %t185, 1 br i1 %t187, label %try.failed10726, label %try.ok10727 try.failed10726: %t190 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t188, 2 ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t190 try.ok10727: store i64 %t189, ptr %a191 %t192 = load i64, ptr %a191 %t193 = icmp sge i64 %t192, 55296 br label %logic.from10728 logic.from10728: br i1 %t193, label %logic.rhs10729, label %logic.end10730 logic.rhs10729: %t194 = load i64, ptr %a191 %t195 = icmp slt i64 %t194, 56320 br label %logic.rend10731 logic.rend10731: br label %logic.end10730 logic.end10730: %t196 = phi i1 [ false, %logic.from10728 ], [ %t195, %logic.rend10731 ] br label %logic.from10732 logic.from10732: br i1 %t196, label %logic.rhs10733, label %logic.end10734 logic.rhs10733: %t197 = load ptr, ptr %a1 %t198 = call i1 @finch.json.comes(ptr %t197, { ptr, i64, i64 } { ptr @.str.7017, i64 2, i64 0 }) br label %logic.rend10735 logic.rend10735: br label %logic.end10734 logic.end10734: %t199 = phi i1 [ false, %logic.from10732 ], [ %t198, %logic.rend10735 ] br i1 %t199, label %then10736, label %endif10738 then10736: %t200 = load ptr, ptr %a1 %t201 = icmp eq ptr %t200, null br i1 %t201, label %panic10739, label %ok10740 panic10739: call void @finch_panic(ptr @.str.7018, i64 398, ptr @.str.7019) unreachable ok10740: %t202 = getelementptr inbounds %S.json.Reader, ptr %t200, i32 0, i32 1 %t203 = load i64, ptr %t202 %t204 = add i64 %t203, 2 store i64 %t204, ptr %t202 %t205 = load ptr, ptr %a1 %t206 = call { i1, i64, { ptr, i64, i64 } } @finch.json.read_hex4(ptr %t205) %t207 = extractvalue { i1, i64, { ptr, i64, i64 } } %t206, 0 %t208 = xor i1 %t207, true %t209 = extractvalue { i1, i64, { ptr, i64, i64 } } %t206, 2 %t210 = extractvalue { i1, i64, { ptr, i64, i64 } } %t206, 1 br i1 %t208, label %try.failed10741, label %try.ok10742 try.failed10741: %t211 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t209, 2 ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t211 try.ok10742: store i64 %t210, ptr %a212 %t213 = load i64, ptr %a191 %t214 = sub i64 %t213, 55296 %t215 = mul i64 %t214, 1024 %t216 = add i64 65536, %t215 %t217 = load i64, ptr %a212 %t218 = sub i64 %t217, 56320 %t219 = add i64 %t216, %t218 store i64 %t219, ptr %a191 br label %endif10738 endif10738: %t220 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 %t221 = load i64, ptr %a191 %t222 = call { ptr, i64, i64 } @finch.json.utf8(i64 %t221) %t223 = load i64, ptr %t220 %t224 = add i64 %t223, 1 call void @finch_arr_reserve(ptr %a7, i64 %t224, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t225 = load ptr, ptr %a7 %t226 = getelementptr inbounds { ptr, i64, i64 }, ptr %t225, i64 %t223 store { ptr, i64, i64 } %t222, ptr %t226 store i64 %t224, ptr %t220 br label %endif10725 else10724: %t227 = load i8, ptr %a123 call void @finch_str_from_char(ptr %a228, i8 signext %t227) %t229 = load { ptr, i64, i64 }, ptr %a228 store { ptr, i64, i64 } { ptr @.str.7020, i64 22, i64 0 }, ptr %a231 store { ptr, i64, i64 } %t229, ptr %a232 call void @finch_str_concat(ptr %a230, ptr %a231, ptr %a232) %t233 = load { ptr, i64, i64 }, ptr %a230 store { ptr, i64, i64 } %t233, ptr %a235 store { ptr, i64, i64 } { ptr @.str.7021, i64 12, i64 0 }, ptr %a236 call void @finch_str_concat(ptr %a234, ptr %a235, ptr %a236) %t237 = load { ptr, i64, i64 }, ptr %a234 %t238 = load ptr, ptr %a1 %t239 = call { ptr, i64, i64 } @finch.json.where(ptr %t238) store { ptr, i64, i64 } %t237, ptr %a241 store { ptr, i64, i64 } %t239, ptr %a242 call void @finch_str_concat(ptr %a240, ptr %a241, ptr %a242) %t243 = load { ptr, i64, i64 }, ptr %a240 store { ptr, i64, i64 } %t243, ptr %a245 store { ptr, i64, i64 } { ptr @.str.7022, i64 1, i64 0 }, ptr %a246 call void @finch_str_concat(ptr %a244, ptr %a245, ptr %a246) %t247 = load { ptr, i64, i64 }, ptr %a244 %t248 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t247, 2 ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t248 endif10725: br label %endif10722 endif10722: br label %endif10711 endif10711: br label %endif10708 endif10708: br label %endif10705 endif10705: br label %endif10702 endif10702: br label %endif10699 endif10699: %t249 = load ptr, ptr %a1 %t250 = icmp eq ptr %t249, null br i1 %t250, label %panic10743, label %ok10744 panic10743: call void @finch_panic(ptr @.str.7023, i64 406, ptr @.str.7024) unreachable ok10744: %t251 = getelementptr inbounds %S.json.Reader, ptr %t249, i32 0, i32 1 %t252 = load i64, ptr %t251 store i64 %t252, ptr %a12 br label %while.cond10656 } define internal { i1, %S.json.Json, { ptr, i64, i64 } } @finch.json.read_number(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a6 = alloca i64, align 16 %a139 = alloca { ptr, i64, i64 }, align 16 %a140 = alloca { ptr, i64, i64 }, align 16 %a147 = alloca { ptr, i64, i64 }, align 16 %a148 = alloca double, align 16 %a149 = alloca { ptr, i64, i64 }, align 16 %a154 = alloca { ptr, i64, i64 }, align 16 %a162 = alloca double, align 16 store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = icmp eq ptr %t2, null br i1 %t3, label %panic10745, label %ok10746 panic10745: call void @finch_panic(ptr @.str.7025, i64 411, ptr @.str.7026) unreachable ok10746: %t4 = getelementptr inbounds %S.json.Reader, ptr %t2, i32 0, i32 1 %t5 = load i64, ptr %t4 store i64 %t5, ptr %a6 %t7 = load ptr, ptr %a1 %t8 = call i8 @finch.json.peek(ptr %t7) %t9 = icmp eq i8 %t8, 45 br i1 %t9, label %then10747, label %endif10749 then10747: %t10 = load ptr, ptr %a1 %t11 = icmp eq ptr %t10, null br i1 %t11, label %panic10750, label %ok10751 panic10750: call void @finch_panic(ptr @.str.7027, i64 413, ptr @.str.7028) unreachable ok10751: %t12 = getelementptr inbounds %S.json.Reader, ptr %t10, i32 0, i32 1 %t13 = load i64, ptr %t12 %t14 = add i64 %t13, 1 store i64 %t14, ptr %t12 br label %endif10749 endif10749: br label %while.cond10752 while.cond10752: %t15 = load ptr, ptr %a1 %t16 = icmp eq ptr %t15, null br i1 %t16, label %panic10755, label %ok10756 panic10755: call void @finch_panic(ptr @.str.7029, i64 415, ptr @.str.7030) unreachable ok10756: %t17 = getelementptr inbounds %S.json.Reader, ptr %t15, i32 0, i32 1 %t18 = load i64, ptr %t17 %t19 = load ptr, ptr %a1 %t20 = icmp eq ptr %t19, null br i1 %t20, label %panic10757, label %ok10758 panic10757: call void @finch_panic(ptr @.str.7031, i64 415, ptr @.str.7032) unreachable ok10758: %t21 = getelementptr inbounds %S.json.Reader, ptr %t19, i32 0, i32 0 %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %t21, i32 0, i32 1 %t23 = load i64, ptr %t22 %t24 = icmp slt i64 %t18, %t23 br label %logic.from10759 logic.from10759: br i1 %t24, label %logic.rhs10760, label %logic.end10761 logic.rhs10760: %t25 = load ptr, ptr %a1 %t26 = icmp eq ptr %t25, null br i1 %t26, label %panic10762, label %ok10763 panic10762: call void @finch_panic(ptr @.str.7033, i64 415, ptr @.str.7034) unreachable ok10763: %t27 = getelementptr inbounds %S.json.Reader, ptr %t25, i32 0, i32 0 %t28 = load ptr, ptr %a1 %t29 = icmp eq ptr %t28, null br i1 %t29, label %panic10764, label %ok10765 panic10764: call void @finch_panic(ptr @.str.7035, i64 415, ptr @.str.7036) unreachable ok10765: %t30 = getelementptr inbounds %S.json.Reader, ptr %t28, i32 0, i32 1 %t31 = load i64, ptr %t30 %t32 = load { ptr, i64, i64 }, ptr %t27 %t33 = extractvalue { ptr, i64, i64 } %t32, 1 %t34 = icmp uge i64 %t31, %t33 br i1 %t34, label %range10766, label %inrange10767 range10766: call void @finch_panic_index(ptr @.str.7037, i64 415, i64 %t31, i64 %t33) unreachable inrange10767: %t35 = extractvalue { ptr, i64, i64 } %t32, 0 %t36 = getelementptr inbounds i8, ptr %t35, i64 %t31 %t37 = load i8, ptr %t36 %t38 = icmp uge i8 %t37, 48 br label %logic.from10768 logic.from10768: br i1 %t38, label %logic.rhs10769, label %logic.end10770 logic.rhs10769: %t39 = load ptr, ptr %a1 %t40 = icmp eq ptr %t39, null br i1 %t40, label %panic10771, label %ok10772 panic10771: call void @finch_panic(ptr @.str.7038, i64 415, ptr @.str.7039) unreachable ok10772: %t41 = getelementptr inbounds %S.json.Reader, ptr %t39, i32 0, i32 0 %t42 = load ptr, ptr %a1 %t43 = icmp eq ptr %t42, null br i1 %t43, label %panic10773, label %ok10774 panic10773: call void @finch_panic(ptr @.str.7040, i64 415, ptr @.str.7041) unreachable ok10774: %t44 = getelementptr inbounds %S.json.Reader, ptr %t42, i32 0, i32 1 %t45 = load i64, ptr %t44 %t46 = load { ptr, i64, i64 }, ptr %t41 %t47 = extractvalue { ptr, i64, i64 } %t46, 1 %t48 = icmp uge i64 %t45, %t47 br i1 %t48, label %range10775, label %inrange10776 range10775: call void @finch_panic_index(ptr @.str.7042, i64 415, i64 %t45, i64 %t47) unreachable inrange10776: %t49 = extractvalue { ptr, i64, i64 } %t46, 0 %t50 = getelementptr inbounds i8, ptr %t49, i64 %t45 %t51 = load i8, ptr %t50 %t52 = icmp ule i8 %t51, 57 br label %logic.rend10777 logic.rend10777: br label %logic.end10770 logic.end10770: %t53 = phi i1 [ false, %logic.from10768 ], [ %t52, %logic.rend10777 ] br label %logic.from10778 logic.from10778: br i1 %t53, label %logic.end10780, label %logic.rhs10779 logic.rhs10779: %t54 = load ptr, ptr %a1 %t55 = icmp eq ptr %t54, null br i1 %t55, label %panic10781, label %ok10782 panic10781: call void @finch_panic(ptr @.str.7043, i64 415, ptr @.str.7044) unreachable ok10782: %t56 = getelementptr inbounds %S.json.Reader, ptr %t54, i32 0, i32 0 %t57 = load ptr, ptr %a1 %t58 = icmp eq ptr %t57, null br i1 %t58, label %panic10783, label %ok10784 panic10783: call void @finch_panic(ptr @.str.7045, i64 415, ptr @.str.7046) unreachable ok10784: %t59 = getelementptr inbounds %S.json.Reader, ptr %t57, i32 0, i32 1 %t60 = load i64, ptr %t59 %t61 = load { ptr, i64, i64 }, ptr %t56 %t62 = extractvalue { ptr, i64, i64 } %t61, 1 %t63 = icmp uge i64 %t60, %t62 br i1 %t63, label %range10785, label %inrange10786 range10785: call void @finch_panic_index(ptr @.str.7047, i64 415, i64 %t60, i64 %t62) unreachable inrange10786: %t64 = extractvalue { ptr, i64, i64 } %t61, 0 %t65 = getelementptr inbounds i8, ptr %t64, i64 %t60 %t66 = load i8, ptr %t65 %t67 = icmp eq i8 %t66, 46 br label %logic.rend10787 logic.rend10787: br label %logic.end10780 logic.end10780: %t68 = phi i1 [ true, %logic.from10778 ], [ %t67, %logic.rend10787 ] br label %logic.from10788 logic.from10788: br i1 %t68, label %logic.end10790, label %logic.rhs10789 logic.rhs10789: %t69 = load ptr, ptr %a1 %t70 = icmp eq ptr %t69, null br i1 %t70, label %panic10791, label %ok10792 panic10791: call void @finch_panic(ptr @.str.7048, i64 415, ptr @.str.7049) unreachable ok10792: %t71 = getelementptr inbounds %S.json.Reader, ptr %t69, i32 0, i32 0 %t72 = load ptr, ptr %a1 %t73 = icmp eq ptr %t72, null br i1 %t73, label %panic10793, label %ok10794 panic10793: call void @finch_panic(ptr @.str.7050, i64 415, ptr @.str.7051) unreachable ok10794: %t74 = getelementptr inbounds %S.json.Reader, ptr %t72, i32 0, i32 1 %t75 = load i64, ptr %t74 %t76 = load { ptr, i64, i64 }, ptr %t71 %t77 = extractvalue { ptr, i64, i64 } %t76, 1 %t78 = icmp uge i64 %t75, %t77 br i1 %t78, label %range10795, label %inrange10796 range10795: call void @finch_panic_index(ptr @.str.7052, i64 415, i64 %t75, i64 %t77) unreachable inrange10796: %t79 = extractvalue { ptr, i64, i64 } %t76, 0 %t80 = getelementptr inbounds i8, ptr %t79, i64 %t75 %t81 = load i8, ptr %t80 %t82 = icmp eq i8 %t81, 101 br label %logic.rend10797 logic.rend10797: br label %logic.end10790 logic.end10790: %t83 = phi i1 [ true, %logic.from10788 ], [ %t82, %logic.rend10797 ] br label %logic.from10798 logic.from10798: br i1 %t83, label %logic.end10800, label %logic.rhs10799 logic.rhs10799: %t84 = load ptr, ptr %a1 %t85 = icmp eq ptr %t84, null br i1 %t85, label %panic10801, label %ok10802 panic10801: call void @finch_panic(ptr @.str.7053, i64 415, ptr @.str.7054) unreachable ok10802: %t86 = getelementptr inbounds %S.json.Reader, ptr %t84, i32 0, i32 0 %t87 = load ptr, ptr %a1 %t88 = icmp eq ptr %t87, null br i1 %t88, label %panic10803, label %ok10804 panic10803: call void @finch_panic(ptr @.str.7055, i64 415, ptr @.str.7056) unreachable ok10804: %t89 = getelementptr inbounds %S.json.Reader, ptr %t87, i32 0, i32 1 %t90 = load i64, ptr %t89 %t91 = load { ptr, i64, i64 }, ptr %t86 %t92 = extractvalue { ptr, i64, i64 } %t91, 1 %t93 = icmp uge i64 %t90, %t92 br i1 %t93, label %range10805, label %inrange10806 range10805: call void @finch_panic_index(ptr @.str.7057, i64 415, i64 %t90, i64 %t92) unreachable inrange10806: %t94 = extractvalue { ptr, i64, i64 } %t91, 0 %t95 = getelementptr inbounds i8, ptr %t94, i64 %t90 %t96 = load i8, ptr %t95 %t97 = icmp eq i8 %t96, 69 br label %logic.rend10807 logic.rend10807: br label %logic.end10800 logic.end10800: %t98 = phi i1 [ true, %logic.from10798 ], [ %t97, %logic.rend10807 ] br label %logic.from10808 logic.from10808: br i1 %t98, label %logic.end10810, label %logic.rhs10809 logic.rhs10809: %t99 = load ptr, ptr %a1 %t100 = icmp eq ptr %t99, null br i1 %t100, label %panic10811, label %ok10812 panic10811: call void @finch_panic(ptr @.str.7058, i64 415, ptr @.str.7059) unreachable ok10812: %t101 = getelementptr inbounds %S.json.Reader, ptr %t99, i32 0, i32 0 %t102 = load ptr, ptr %a1 %t103 = icmp eq ptr %t102, null br i1 %t103, label %panic10813, label %ok10814 panic10813: call void @finch_panic(ptr @.str.7060, i64 415, ptr @.str.7061) unreachable ok10814: %t104 = getelementptr inbounds %S.json.Reader, ptr %t102, i32 0, i32 1 %t105 = load i64, ptr %t104 %t106 = load { ptr, i64, i64 }, ptr %t101 %t107 = extractvalue { ptr, i64, i64 } %t106, 1 %t108 = icmp uge i64 %t105, %t107 br i1 %t108, label %range10815, label %inrange10816 range10815: call void @finch_panic_index(ptr @.str.7062, i64 415, i64 %t105, i64 %t107) unreachable inrange10816: %t109 = extractvalue { ptr, i64, i64 } %t106, 0 %t110 = getelementptr inbounds i8, ptr %t109, i64 %t105 %t111 = load i8, ptr %t110 %t112 = icmp eq i8 %t111, 43 br label %logic.rend10817 logic.rend10817: br label %logic.end10810 logic.end10810: %t113 = phi i1 [ true, %logic.from10808 ], [ %t112, %logic.rend10817 ] br label %logic.from10818 logic.from10818: br i1 %t113, label %logic.end10820, label %logic.rhs10819 logic.rhs10819: %t114 = load ptr, ptr %a1 %t115 = icmp eq ptr %t114, null br i1 %t115, label %panic10821, label %ok10822 panic10821: call void @finch_panic(ptr @.str.7063, i64 415, ptr @.str.7064) unreachable ok10822: %t116 = getelementptr inbounds %S.json.Reader, ptr %t114, i32 0, i32 0 %t117 = load ptr, ptr %a1 %t118 = icmp eq ptr %t117, null br i1 %t118, label %panic10823, label %ok10824 panic10823: call void @finch_panic(ptr @.str.7065, i64 415, ptr @.str.7066) unreachable ok10824: %t119 = getelementptr inbounds %S.json.Reader, ptr %t117, i32 0, i32 1 %t120 = load i64, ptr %t119 %t121 = load { ptr, i64, i64 }, ptr %t116 %t122 = extractvalue { ptr, i64, i64 } %t121, 1 %t123 = icmp uge i64 %t120, %t122 br i1 %t123, label %range10825, label %inrange10826 range10825: call void @finch_panic_index(ptr @.str.7067, i64 415, i64 %t120, i64 %t122) unreachable inrange10826: %t124 = extractvalue { ptr, i64, i64 } %t121, 0 %t125 = getelementptr inbounds i8, ptr %t124, i64 %t120 %t126 = load i8, ptr %t125 %t127 = icmp eq i8 %t126, 45 br label %logic.rend10827 logic.rend10827: br label %logic.end10820 logic.end10820: %t128 = phi i1 [ true, %logic.from10818 ], [ %t127, %logic.rend10827 ] br label %logic.rend10828 logic.rend10828: br label %logic.end10761 logic.end10761: %t129 = phi i1 [ false, %logic.from10759 ], [ %t128, %logic.rend10828 ] br i1 %t129, label %while.body10753, label %while.end10754 while.body10753: %t130 = load ptr, ptr %a1 %t131 = icmp eq ptr %t130, null br i1 %t131, label %panic10829, label %ok10830 panic10829: call void @finch_panic(ptr @.str.7068, i64 416, ptr @.str.7069) unreachable ok10830: %t132 = getelementptr inbounds %S.json.Reader, ptr %t130, i32 0, i32 1 %t133 = load i64, ptr %t132 %t134 = add i64 %t133, 1 store i64 %t134, ptr %t132 br label %while.cond10752 while.end10754: %t135 = load ptr, ptr %a1 %t136 = icmp eq ptr %t135, null br i1 %t136, label %panic10831, label %ok10832 panic10831: call void @finch_panic(ptr @.str.7070, i64 418, ptr @.str.7071) unreachable ok10832: %t137 = getelementptr inbounds %S.json.Reader, ptr %t135, i32 0, i32 0 %t138 = load { ptr, i64, i64 }, ptr %t137 store { ptr, i64, i64 } %t138, ptr %a139 %t141 = load i64, ptr %a6 %t142 = load ptr, ptr %a1 %t143 = icmp eq ptr %t142, null br i1 %t143, label %panic10833, label %ok10834 panic10833: call void @finch_panic(ptr @.str.7073, i64 418, ptr @.str.7074) unreachable ok10834: %t144 = getelementptr inbounds %S.json.Reader, ptr %t142, i32 0, i32 1 %t145 = load i64, ptr %t144 call void @finch_str_sub(ptr %a140, ptr %a139, i64 %t141, i64 %t145, ptr @.str.7072, i64 418) %t146 = load { ptr, i64, i64 }, ptr %a140 store { ptr, i64, i64 } zeroinitializer, ptr %a147 store double 0.0, ptr %a148 store { ptr, i64, i64 } %t146, ptr %a149 %t150 = call i32 @finch_str_try_float(ptr %a149, ptr %a148, ptr %a147) %t151 = icmp eq i32 %t150, 0 %t152 = load { ptr, i64, i64 }, ptr %a147 %t153 = load double, ptr %a148 br i1 %t151, label %or.failed10835, label %or.ok10836 or.failed10835: store { ptr, i64, i64 } %t152, ptr %a154 %t155 = load i64, ptr %a6 %t156 = load ptr, ptr %a1 %t157 = icmp eq ptr %t156, null br i1 %t157, label %panic10837, label %ok10838 panic10837: call void @finch_panic(ptr @.str.7075, i64 419, ptr @.str.7076) unreachable ok10838: %t158 = getelementptr inbounds %S.json.Reader, ptr %t156, i32 0, i32 1 store i64 %t155, ptr %t158 %t159 = load ptr, ptr %a1 %t160 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t159, { ptr, i64, i64 } { ptr @.str.7077, i64 8, i64 0 }) %t161 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t160, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t161 or.ok10836: store double %t153, ptr %a162 %t163 = load double, ptr %a162 %t164 = call %S.json.Json @finch.json.new_number(double %t163) %t165 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 %t166 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t165, %S.json.Json %t164, 1 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t166 } define internal { i1, %S.json.Json, { ptr, i64, i64 } } @finch.json.read_value(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a5 = alloca i8, align 16 %a22 = alloca %S.json.Json, align 16 %a54 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca %S.json.Json, align 16 %a103 = alloca %S.json.Json, align 16 %a128 = alloca %S.json.Json, align 16 %a162 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 call void @finch.json.skip_space(ptr %t2) %t3 = load ptr, ptr %a1 %t4 = call i8 @finch.json.peek(ptr %t3) store i8 %t4, ptr %a5 %t6 = load ptr, ptr %a1 %t7 = icmp eq ptr %t6, null br i1 %t7, label %panic10839, label %ok10840 panic10839: call void @finch_panic(ptr @.str.7078, i64 428, ptr @.str.7079) unreachable ok10840: %t8 = getelementptr inbounds %S.json.Reader, ptr %t6, i32 0, i32 1 %t9 = load i64, ptr %t8 %t10 = load ptr, ptr %a1 %t11 = icmp eq ptr %t10, null br i1 %t11, label %panic10841, label %ok10842 panic10841: call void @finch_panic(ptr @.str.7080, i64 428, ptr @.str.7081) unreachable ok10842: %t12 = getelementptr inbounds %S.json.Reader, ptr %t10, i32 0, i32 0 %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t12, i32 0, i32 1 %t14 = load i64, ptr %t13 %t15 = icmp sge i64 %t9, %t14 br i1 %t15, label %then10843, label %endif10845 then10843: %t16 = load ptr, ptr %a1 %t17 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t16, { ptr, i64, i64 } { ptr @.str.7082, i64 7, i64 0 }) %t18 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t17, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t18 endif10845: %t19 = load i8, ptr %a5 %t20 = icmp eq i8 %t19, 123 br i1 %t20, label %then10846, label %endif10848 then10846: %t21 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t21, ptr %a22 %t23 = load ptr, ptr %a1 %t24 = icmp eq ptr %t23, null br i1 %t24, label %panic10849, label %ok10850 panic10849: call void @finch_panic(ptr @.str.7083, i64 433, ptr @.str.7084) unreachable ok10850: %t25 = getelementptr inbounds %S.json.Reader, ptr %t23, i32 0, i32 1 %t26 = load i64, ptr %t25 %t27 = add i64 %t26, 1 store i64 %t27, ptr %t25 %t28 = load ptr, ptr %a1 call void @finch.json.skip_space(ptr %t28) %t29 = load ptr, ptr %a1 %t30 = call i8 @finch.json.peek(ptr %t29) %t31 = icmp eq i8 %t30, 125 br i1 %t31, label %then10851, label %endif10853 then10851: %t32 = load ptr, ptr %a1 %t33 = icmp eq ptr %t32, null br i1 %t33, label %panic10854, label %ok10855 panic10854: call void @finch_panic(ptr @.str.7085, i64 436, ptr @.str.7086) unreachable ok10855: %t34 = getelementptr inbounds %S.json.Reader, ptr %t32, i32 0, i32 1 %t35 = load i64, ptr %t34 %t36 = add i64 %t35, 1 store i64 %t36, ptr %t34 %t37 = load %S.json.Json, ptr %a22 %t38 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 %t39 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t38, %S.json.Json %t37, 1 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t39 endif10853: br label %while.cond10856 while.cond10856: br label %while.body10857 while.body10857: %t40 = load ptr, ptr %a1 call void @finch.json.skip_space(ptr %t40) %t41 = load ptr, ptr %a1 %t42 = call i8 @finch.json.peek(ptr %t41) %t43 = icmp ne i8 %t42, 34 br i1 %t43, label %then10859, label %endif10861 then10859: %t44 = load ptr, ptr %a1 %t45 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t44, { ptr, i64, i64 } { ptr @.str.7087, i64 15, i64 0 }) %t46 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t45, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t46 endif10861: %t47 = load ptr, ptr %a1 %t48 = call { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } @finch.json.read_string(ptr %t47) %t49 = extractvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t48, 0 %t50 = xor i1 %t49, true %t51 = extractvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t48, 2 %t52 = extractvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t48, 1 br i1 %t50, label %try.failed10862, label %try.ok10863 try.failed10862: %t53 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t51, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t53 try.ok10863: store { ptr, i64, i64 } %t52, ptr %a54 %t55 = load ptr, ptr %a1 call void @finch.json.skip_space(ptr %t55) %t56 = load ptr, ptr %a1 %t57 = call i8 @finch.json.peek(ptr %t56) %t58 = icmp ne i8 %t57, 58 br i1 %t58, label %then10864, label %endif10866 then10864: %t59 = load ptr, ptr %a1 %t60 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t59, { ptr, i64, i64 } { ptr @.str.7088, i64 3, i64 0 }) %t61 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t60, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t61 endif10866: %t62 = load ptr, ptr %a1 %t63 = icmp eq ptr %t62, null br i1 %t63, label %panic10867, label %ok10868 panic10867: call void @finch_panic(ptr @.str.7089, i64 449, ptr @.str.7090) unreachable ok10868: %t64 = getelementptr inbounds %S.json.Reader, ptr %t62, i32 0, i32 1 %t65 = load i64, ptr %t64 %t66 = add i64 %t65, 1 store i64 %t66, ptr %t64 %t67 = load ptr, ptr %a1 %t68 = call { i1, %S.json.Json, { ptr, i64, i64 } } @finch.json.read_value(ptr %t67) %t69 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t68, 0 %t70 = xor i1 %t69, true %t71 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t68, 2 %t72 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t68, 1 br i1 %t70, label %try.failed10869, label %try.ok10870 try.failed10869: %t73 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t71, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t73 try.ok10870: store %S.json.Json %t72, ptr %a74 %t75 = load { ptr, i64, i64 }, ptr %a54 %t76 = load %S.json.Json, ptr %a74 call void @finch.json.Json.set(ptr %a22, { ptr, i64, i64 } %t75, %S.json.Json %t76) %t77 = load ptr, ptr %a1 call void @finch.json.skip_space(ptr %t77) %t78 = load ptr, ptr %a1 %t79 = call i8 @finch.json.peek(ptr %t78) %t80 = icmp eq i8 %t79, 44 br i1 %t80, label %then10871, label %endif10873 then10871: %t81 = load ptr, ptr %a1 %t82 = icmp eq ptr %t81, null br i1 %t82, label %panic10874, label %ok10875 panic10874: call void @finch_panic(ptr @.str.7091, i64 454, ptr @.str.7092) unreachable ok10875: %t83 = getelementptr inbounds %S.json.Reader, ptr %t81, i32 0, i32 1 %t84 = load i64, ptr %t83 %t85 = add i64 %t84, 1 store i64 %t85, ptr %t83 br label %while.cond10856 endif10873: %t86 = load ptr, ptr %a1 %t87 = call i8 @finch.json.peek(ptr %t86) %t88 = icmp eq i8 %t87, 125 br i1 %t88, label %then10876, label %endif10878 then10876: %t89 = load ptr, ptr %a1 %t90 = icmp eq ptr %t89, null br i1 %t90, label %panic10879, label %ok10880 panic10879: call void @finch_panic(ptr @.str.7093, i64 458, ptr @.str.7094) unreachable ok10880: %t91 = getelementptr inbounds %S.json.Reader, ptr %t89, i32 0, i32 1 %t92 = load i64, ptr %t91 %t93 = add i64 %t92, 1 store i64 %t93, ptr %t91 %t94 = load %S.json.Json, ptr %a22 %t95 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 %t96 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t95, %S.json.Json %t94, 1 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t96 endif10878: %t97 = load ptr, ptr %a1 %t98 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t97, { ptr, i64, i64 } { ptr @.str.7095, i64 10, i64 0 }) %t99 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t98, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t99 endif10848: %t100 = load i8, ptr %a5 %t101 = icmp eq i8 %t100, 91 br i1 %t101, label %then10881, label %endif10883 then10881: %t102 = call %S.json.Json @finch.json.new_list() store %S.json.Json %t102, ptr %a103 %t104 = load ptr, ptr %a1 %t105 = icmp eq ptr %t104, null br i1 %t105, label %panic10884, label %ok10885 panic10884: call void @finch_panic(ptr @.str.7096, i64 466, ptr @.str.7097) unreachable ok10885: %t106 = getelementptr inbounds %S.json.Reader, ptr %t104, i32 0, i32 1 %t107 = load i64, ptr %t106 %t108 = add i64 %t107, 1 store i64 %t108, ptr %t106 %t109 = load ptr, ptr %a1 call void @finch.json.skip_space(ptr %t109) %t110 = load ptr, ptr %a1 %t111 = call i8 @finch.json.peek(ptr %t110) %t112 = icmp eq i8 %t111, 93 br i1 %t112, label %then10886, label %endif10888 then10886: %t113 = load ptr, ptr %a1 %t114 = icmp eq ptr %t113, null br i1 %t114, label %panic10889, label %ok10890 panic10889: call void @finch_panic(ptr @.str.7098, i64 469, ptr @.str.7099) unreachable ok10890: %t115 = getelementptr inbounds %S.json.Reader, ptr %t113, i32 0, i32 1 %t116 = load i64, ptr %t115 %t117 = add i64 %t116, 1 store i64 %t117, ptr %t115 %t118 = load %S.json.Json, ptr %a103 %t119 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 %t120 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t119, %S.json.Json %t118, 1 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t120 endif10888: br label %while.cond10891 while.cond10891: br label %while.body10892 while.body10892: %t121 = load ptr, ptr %a1 %t122 = call { i1, %S.json.Json, { ptr, i64, i64 } } @finch.json.read_value(ptr %t121) %t123 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t122, 0 %t124 = xor i1 %t123, true %t125 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t122, 2 %t126 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t122, 1 br i1 %t124, label %try.failed10894, label %try.ok10895 try.failed10894: %t127 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t125, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t127 try.ok10895: store %S.json.Json %t126, ptr %a128 %t129 = load %S.json.Json, ptr %a128 call void @finch.json.Json.push(ptr %a103, %S.json.Json %t129) %t130 = load ptr, ptr %a1 call void @finch.json.skip_space(ptr %t130) %t131 = load ptr, ptr %a1 %t132 = call i8 @finch.json.peek(ptr %t131) %t133 = icmp eq i8 %t132, 44 br i1 %t133, label %then10896, label %endif10898 then10896: %t134 = load ptr, ptr %a1 %t135 = icmp eq ptr %t134, null br i1 %t135, label %panic10899, label %ok10900 panic10899: call void @finch_panic(ptr @.str.7100, i64 477, ptr @.str.7101) unreachable ok10900: %t136 = getelementptr inbounds %S.json.Reader, ptr %t134, i32 0, i32 1 %t137 = load i64, ptr %t136 %t138 = add i64 %t137, 1 store i64 %t138, ptr %t136 br label %while.cond10891 endif10898: %t139 = load ptr, ptr %a1 %t140 = call i8 @finch.json.peek(ptr %t139) %t141 = icmp eq i8 %t140, 93 br i1 %t141, label %then10901, label %endif10903 then10901: %t142 = load ptr, ptr %a1 %t143 = icmp eq ptr %t142, null br i1 %t143, label %panic10904, label %ok10905 panic10904: call void @finch_panic(ptr @.str.7102, i64 481, ptr @.str.7103) unreachable ok10905: %t144 = getelementptr inbounds %S.json.Reader, ptr %t142, i32 0, i32 1 %t145 = load i64, ptr %t144 %t146 = add i64 %t145, 1 store i64 %t146, ptr %t144 %t147 = load %S.json.Json, ptr %a103 %t148 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 %t149 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t148, %S.json.Json %t147, 1 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t149 endif10903: %t150 = load ptr, ptr %a1 %t151 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t150, { ptr, i64, i64 } { ptr @.str.7104, i64 10, i64 0 }) %t152 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t151, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t152 endif10883: %t153 = load i8, ptr %a5 %t154 = icmp eq i8 %t153, 34 br i1 %t154, label %then10906, label %endif10908 then10906: %t155 = load ptr, ptr %a1 %t156 = call { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } @finch.json.read_string(ptr %t155) %t157 = extractvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t156, 0 %t158 = xor i1 %t157, true %t159 = extractvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t156, 2 %t160 = extractvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t156, 1 br i1 %t158, label %try.failed10909, label %try.ok10910 try.failed10909: %t161 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t159, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t161 try.ok10910: store { ptr, i64, i64 } %t160, ptr %a162 %t163 = load { ptr, i64, i64 }, ptr %a162 %t164 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t163) %t165 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 %t166 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t165, %S.json.Json %t164, 1 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t166 endif10908: %t167 = load i8, ptr %a5 %t168 = icmp eq i8 %t167, 116 br i1 %t168, label %then10911, label %endif10913 then10911: %t169 = load ptr, ptr %a1 %t170 = call { i1, i8, { ptr, i64, i64 } } @finch.json.expect_word(ptr %t169, { ptr, i64, i64 } { ptr @.str.7105, i64 4, i64 0 }) %t171 = extractvalue { i1, i8, { ptr, i64, i64 } } %t170, 0 %t172 = xor i1 %t171, true %t173 = extractvalue { i1, i8, { ptr, i64, i64 } } %t170, 2 br i1 %t172, label %try.failed10914, label %try.ok10915 try.failed10914: %t174 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t173, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t174 try.ok10915: %t175 = call %S.json.Json @finch.json.new_bool(i1 true) %t176 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 %t177 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t176, %S.json.Json %t175, 1 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t177 endif10913: %t178 = load i8, ptr %a5 %t179 = icmp eq i8 %t178, 102 br i1 %t179, label %then10916, label %endif10918 then10916: %t180 = load ptr, ptr %a1 %t181 = call { i1, i8, { ptr, i64, i64 } } @finch.json.expect_word(ptr %t180, { ptr, i64, i64 } { ptr @.str.7106, i64 5, i64 0 }) %t182 = extractvalue { i1, i8, { ptr, i64, i64 } } %t181, 0 %t183 = xor i1 %t182, true %t184 = extractvalue { i1, i8, { ptr, i64, i64 } } %t181, 2 br i1 %t183, label %try.failed10919, label %try.ok10920 try.failed10919: %t185 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t184, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t185 try.ok10920: %t186 = call %S.json.Json @finch.json.new_bool(i1 false) %t187 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 %t188 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t187, %S.json.Json %t186, 1 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t188 endif10918: %t189 = load i8, ptr %a5 %t190 = icmp eq i8 %t189, 110 br i1 %t190, label %then10921, label %endif10923 then10921: %t191 = load ptr, ptr %a1 %t192 = call { i1, i8, { ptr, i64, i64 } } @finch.json.expect_word(ptr %t191, { ptr, i64, i64 } { ptr @.str.7107, i64 4, i64 0 }) %t193 = extractvalue { i1, i8, { ptr, i64, i64 } } %t192, 0 %t194 = xor i1 %t193, true %t195 = extractvalue { i1, i8, { ptr, i64, i64 } } %t192, 2 br i1 %t194, label %try.failed10924, label %try.ok10925 try.failed10924: %t196 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t195, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t196 try.ok10925: %t197 = call %S.json.Json @finch.json.new_null() %t198 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 %t199 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t198, %S.json.Json %t197, 1 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t199 endif10923: %t200 = load i8, ptr %a5 %t201 = icmp eq i8 %t200, 45 br label %logic.from10926 logic.from10926: br i1 %t201, label %logic.end10928, label %logic.rhs10927 logic.rhs10927: %t202 = load i8, ptr %a5 %t203 = icmp uge i8 %t202, 48 br label %logic.from10929 logic.from10929: br i1 %t203, label %logic.rhs10930, label %logic.end10931 logic.rhs10930: %t204 = load i8, ptr %a5 %t205 = icmp ule i8 %t204, 57 br label %logic.rend10932 logic.rend10932: br label %logic.end10931 logic.end10931: %t206 = phi i1 [ false, %logic.from10929 ], [ %t205, %logic.rend10932 ] br label %logic.rend10933 logic.rend10933: br label %logic.end10928 logic.end10928: %t207 = phi i1 [ true, %logic.from10926 ], [ %t206, %logic.rend10933 ] br i1 %t207, label %then10934, label %endif10936 then10934: %t208 = load ptr, ptr %a1 %t209 = call { i1, %S.json.Json, { ptr, i64, i64 } } @finch.json.read_number(ptr %t208) %t210 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t209, 0 %t211 = xor i1 %t210, true %t212 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t209, 2 %t213 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t209, 1 br i1 %t211, label %try.failed10937, label %try.ok10938 try.failed10937: %t214 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t212, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t214 try.ok10938: %t215 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 %t216 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t215, %S.json.Json %t213, 1 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t216 endif10936: %t217 = load ptr, ptr %a1 %t218 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t217, { ptr, i64, i64 } { ptr @.str.7108, i64 7, i64 0 }) %t219 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t218, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t219 } define internal { i1, %S.json.Json, { ptr, i64, i64 } } @finch.json.parse({ ptr, i64, i64 } %p0) { entry: %a1 = alloca { ptr, i64, i64 }, align 16 %a3 = alloca { ptr, i64, i64 }, align 16 %a4 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca %S.json.Reader, align 16 %a14 = alloca %S.json.Json, align 16 %a24 = alloca %S.json.Json, align 16 %a25 = alloca %S.json.Json, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t2, ptr %a3 call void @finch_str_copy(ptr %a4, ptr %a3) %t5 = load { ptr, i64, i64 }, ptr %a4 %t6 = insertvalue %S.json.Reader zeroinitializer, { ptr, i64, i64 } %t5, 0 store %S.json.Reader %t6, ptr %a7 %t8 = call { i1, %S.json.Json, { ptr, i64, i64 } } @finch.json.read_value(ptr %a7) %t9 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t8, 0 %t10 = xor i1 %t9, true %t11 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t8, 2 %t12 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t8, 1 br i1 %t10, label %try.failed10939, label %try.ok10940 try.failed10939: %t13 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t11, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t13 try.ok10940: store %S.json.Json %t12, ptr %a14 call void @finch.json.skip_space(ptr %a7) %t15 = getelementptr inbounds %S.json.Reader, ptr %a7, i32 0, i32 1 %t16 = load i64, ptr %t15 %t17 = getelementptr inbounds %S.json.Reader, ptr %a7, i32 0, i32 0 %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t17, i32 0, i32 1 %t19 = load i64, ptr %t18 %t20 = icmp slt i64 %t16, %t19 br i1 %t20, label %then10941, label %endif10943 then10941: %t21 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %a7, { ptr, i64, i64 } { ptr @.str.7109, i64 19, i64 0 }) %t22 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t21, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t22 endif10943: %t23 = load %S.json.Json, ptr %a14 store %S.json.Json %t23, ptr %a24 call void @finch.copy.S_json_Json(ptr %a25, ptr %a24) %t26 = load %S.json.Json, ptr %a25 %t27 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 %t28 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t27, %S.json.Json %t26, 1 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t28 } define i32 @main(i32 %argc, ptr %argv) { entry: %args = alloca { ptr, i64, i64 } call void @finch_args(ptr %args, i32 %argc, ptr %argv) %a = load { ptr, i64, i64 }, ptr %args %r = call i64 @finch.main.main({ ptr, i64, i64 } %a) %code = trunc i64 %r to i32 ret i32 %code }