; LLVM IR from nickmqb/muon :: bootstrap/mu.ll_Parser (parseExpressionTail__)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct.string__ = type { ptr, i32 }
%struct.tag_____IAllocator__ = type { ptr, ptr, ptr, ptr }
%struct.Node__ = type { i32, ptr }
%struct.tag_____CallExpression__ = type { %struct.Node__, ptr, ptr, ptr, ptr, ptr }
%struct.tag_____List__Node____ = type { ptr, i32, i32 }
%struct.tag_____IndexExpression__ = type { %struct.Node__, ptr, %struct.Node__, ptr }
%struct.tag_____StructInitializerExpression__ = type { %struct.Node__, ptr, ptr, ptr, ptr }
%struct.tag_____List__Ptr__FieldInitializerExpression______ = type { ptr, i32, i32 }
%struct.tag_____TernaryOperatorExpression__ = type { %struct.Node__, ptr, %struct.Node__, ptr, %struct.Node__ }
%struct.tag_____PostfixUnaryOperatorExpression__ = type { %struct.Node__, ptr }
%struct.tag_____DotExpression__ = type { ptr, %struct.Node__, ptr }
%struct.tag_____BinaryOperatorExpression__ = type { ptr, %struct.Node__, %struct.Node__ }
%struct.tag_____ParserState__ = type { %struct.string__, i32, ptr, ptr, i32, i32, i32, i32, i32, ptr, %struct.tag_____IntRange__, i32, i32, ptr, i32, ptr, ptr, ptr }
%struct.tag_____IntRange__ = type { i32, i32 }
%struct.tag_____Token__ = type { i32, %struct.string__, %struct.tag_____IntRange__, %struct.tag_____IntRange__, i32 }

@mu_____string304 = external dso_local global %struct.string__, align 8
@mu_____string297 = external dso_local global %struct.string__, align 8
@mu_____string306 = external dso_local global %struct.string__, align 8
@mu_____string72 = external dso_local global %struct.string__, align 8
@mu_____string308 = external dso_local global %struct.string__, align 8
@mu_____string71 = external dso_local global %struct.string__, align 8
@mu_____string77 = external dso_local global %struct.string__, align 8
@mu_____string305 = external dso_local global %struct.string__, align 8
@mu_____string303 = external dso_local global %struct.string__, align 8
@mu_____string307 = external dso_local global %struct.string__, align 8
@mu_____string204 = external dso_local global %struct.string__, align 8
@mu_____string302 = external dso_local global %struct.string__, align 8
@top_____currentAllocator__ = external dso_local thread_local global %struct.tag_____IAllocator__, align 8
@top_____abandonFn__ = external dso_local thread_local global ptr, align 8

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #0

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare nonnull ptr @llvm.threadlocal.address.p0(ptr nonnull) #1

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #0

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #2

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #3

; Function Attrs: nounwind uwtable
declare dso_local zeroext i8 @string__equals__(ptr, i32, ptr, i32) #4

; Function Attrs: nounwind uwtable
declare dso_local void @List__add__Ptr__FieldInitializerExpression______(ptr noundef, ptr noundef) #4

; Function Attrs: nounwind uwtable
declare dso_local void @List__add__Node____(ptr noundef, i32, ptr) #4

; Function Attrs: nounwind uwtable
declare dso_local void @Parser__readToken__(ptr noundef) #4

; Function Attrs: nounwind uwtable
declare dso_local { i32, ptr } @Parser__tryParseExpression__(ptr noundef, i32 noundef, i8 noundef zeroext) #4

; Function Attrs: nounwind uwtable
declare dso_local void @Parser__badToken__(ptr noundef, ptr, i32) #4

; Function Attrs: nounwind uwtable
declare dso_local void @Parser__expected__(ptr noundef, ptr, i32) #4

; Function Attrs: nounwind uwtable
define dso_local { i32, ptr } @Parser__parseExpressionTail__(ptr noundef %0, i32 %1, ptr %2, i32 noundef %3, i8 noundef zeroext %4) #4 {
  %6 = alloca %struct.Node__, align 8
  %7 = alloca %struct.Node__, align 8
  %8 = alloca ptr, align 8
  %9 = alloca i32, align 4
  %10 = alloca i8, align 1
  %11 = alloca i8, align 1
  %12 = alloca ptr, align 8
  %13 = alloca %struct.tag_____CallExpression__, align 8
  %14 = alloca ptr, align 8
  %15 = alloca %struct.tag_____List__Node____, align 8
  %16 = alloca ptr, align 8
  %17 = alloca %struct.tag_____List__Node____, align 8
  %18 = alloca ptr, align 8
  %19 = alloca i32, align 4
  %20 = alloca i8, align 1
  %21 = alloca i32, align 4
  %22 = alloca %struct.Node__, align 8
  %23 = alloca %struct.Node__, align 8
  %24 = alloca %struct.Node__, align 8
  %25 = alloca i8, align 1
  %26 = alloca %struct.Node__, align 8
  %27 = alloca i8, align 1
  %28 = alloca ptr, align 8
  %29 = alloca %struct.tag_____IndexExpression__, align 8
  %30 = alloca ptr, align 8
  %31 = alloca %struct.Node__, align 8
  %32 = alloca i8, align 1
  %33 = alloca %struct.Node__, align 8
  %34 = alloca i8, align 1
  %35 = alloca i8, align 1
  %36 = alloca %struct.Node__, align 8
  %37 = alloca i8, align 1
  %38 = alloca i8, align 1
  %39 = alloca %struct.Node__, align 8
  %40 = alloca i8, align 1
  %41 = alloca i8, align 1
  %42 = alloca i8, align 1
  %43 = alloca %struct.Node__, align 8
  %44 = alloca i8, align 1
  %45 = alloca i8, align 1
  %46 = alloca ptr, align 8
  %47 = alloca %struct.tag_____StructInitializerExpression__, align 8
  %48 = alloca ptr, align 8
  %49 = alloca %struct.tag_____List__Ptr__FieldInitializerExpression______, align 8
  %50 = alloca ptr, align 8
  %51 = alloca %struct.tag_____List__Node____, align 8
  %52 = alloca ptr, align 8
  %53 = alloca i32, align 4
  %54 = alloca i8, align 1
  %55 = alloca ptr, align 8
  %56 = alloca %struct.Node__, align 8
  %57 = alloca %struct.Node__, align 8
  %58 = alloca %struct.Node__, align 8
  %59 = alloca i8, align 1
  %60 = alloca %struct.Node__, align 8
  %61 = alloca i32, align 4
  %62 = alloca ptr, align 8
  %63 = alloca %struct.tag_____TernaryOperatorExpression__, align 8
  %64 = alloca ptr, align 8
  %65 = alloca %struct.Node__, align 8
  %66 = alloca i8, align 1
  %67 = alloca %struct.Node__, align 8
  %68 = alloca %struct.Node__, align 8
  %69 = alloca ptr, align 8
  %70 = alloca %struct.tag_____PostfixUnaryOperatorExpression__, align 8
  %71 = alloca ptr, align 8
  %72 = alloca %struct.Node__, align 8
  %73 = alloca ptr, align 8
  %74 = alloca %struct.tag_____DotExpression__, align 8
  %75 = alloca ptr, align 8
  %76 = alloca i8, align 1
  %77 = alloca %struct.Node__, align 8
  %78 = alloca ptr, align 8
  %79 = alloca %struct.tag_____BinaryOperatorExpression__, align 8
  %80 = alloca ptr, align 8
  %81 = alloca %struct.Node__, align 8
  %82 = alloca %struct.Node__, align 8
  %83 = getelementptr inbounds { i32, ptr }, ptr %7, i32 0, i32 0
  store i32 %1, ptr %83, align 8
  %84 = getelementptr inbounds { i32, ptr }, ptr %7, i32 0, i32 1
  store ptr %2, ptr %84, align 8
  store ptr %0, ptr %8, align 8, !tbaa !5
  store i32 %3, ptr %9, align 4, !tbaa !9
  store i8 %4, ptr %10, align 1, !tbaa !11
  br label %85

85:                                               ; preds = %1085, %5
  %86 = load ptr, ptr %8, align 8, !tbaa !5
  %87 = getelementptr inbounds %struct.tag_____ParserState__, ptr %86, i32 0, i32 3
  %88 = load ptr, ptr %87, align 8, !tbaa !12
  %89 = getelementptr inbounds %struct.tag_____Token__, ptr %88, i32 0, i32 4
  %90 = load i32, ptr %89, align 8, !tbaa !16
  %91 = load ptr, ptr %8, align 8, !tbaa !5
  %92 = getelementptr inbounds %struct.tag_____ParserState__, ptr %91, i32 0, i32 5
  %93 = load i32, ptr %92, align 4, !tbaa !18
  %94 = icmp sle i32 %90, %93
  br i1 %94, label %95, label %96

95:                                               ; preds = %85
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %6, ptr align 8 %7, i64 16, i1 false), !tbaa.struct !19
  br label %1086

96:                                               ; preds = %85
  call void @llvm.lifetime.start.p0(i64 1, ptr %11) #5
  %97 = load ptr, ptr %8, align 8, !tbaa !5
  %98 = getelementptr inbounds %struct.tag_____ParserState__, ptr %97, i32 0, i32 3
  %99 = load ptr, ptr %98, align 8, !tbaa !12
  %100 = getelementptr inbounds %struct.tag_____Token__, ptr %99, i32 0, i32 0
  %101 = load i32, ptr %100, align 8, !tbaa !20
  %102 = icmp eq i32 %101, 5
  %103 = zext i1 %102 to i32
  %104 = trunc i32 %103 to i8
  store i8 %104, ptr %11, align 1, !tbaa !11
  %105 = load i8, ptr %11, align 1, !tbaa !11
  %106 = icmp ne i8 %105, 0
  br i1 %106, label %107, label %112

107:                                              ; preds = %96
  %108 = load i32, ptr %9, align 4, !tbaa !9
  %109 = icmp sle i32 %108, 25
  %110 = zext i1 %109 to i32
  %111 = trunc i32 %110 to i8
  store i8 %111, ptr %11, align 1, !tbaa !11
  br label %112

112:                                              ; preds = %107, %96
  %113 = load i8, ptr %11, align 1, !tbaa !11
  %114 = icmp ne i8 %113, 0
  br i1 %114, label %115, label %317

115:                                              ; preds = %112
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #5
  %116 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @top_____currentAllocator__)
  %117 = getelementptr inbounds %struct.tag_____IAllocator__, ptr %116, i32 0, i32 1
  %118 = load ptr, ptr %117, align 8, !tbaa !21
  %119 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @top_____currentAllocator__)
  %120 = getelementptr inbounds %struct.tag_____IAllocator__, ptr %119, i32 0, i32 0
  %121 = load ptr, ptr %120, align 8, !tbaa !23
  %122 = call ptr %118(ptr noundef %121, i64 noundef 56)
  store ptr %122, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 56, ptr %13) #5
  call void @llvm.memset.p0.i64(ptr align 8 %13, i8 0, i64 56, i1 false)
  %123 = getelementptr inbounds %struct.tag_____CallExpression__, ptr %13, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %123, ptr align 8 %7, i64 16, i1 false), !tbaa.struct !19
  %124 = load ptr, ptr %8, align 8, !tbaa !5
  %125 = getelementptr inbounds %struct.tag_____ParserState__, ptr %124, i32 0, i32 3
  %126 = load ptr, ptr %125, align 8, !tbaa !12
  %127 = getelementptr inbounds %struct.tag_____CallExpression__, ptr %13, i32 0, i32 1
  store ptr %126, ptr %127, align 8, !tbaa !24
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #5
  %128 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @top_____currentAllocator__)
  %129 = getelementptr inbounds %struct.tag_____IAllocator__, ptr %128, i32 0, i32 1
  %130 = load ptr, ptr %129, align 8, !tbaa !21
  %131 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @top_____currentAllocator__)
  %132 = getelementptr inbounds %struct.tag_____IAllocator__, ptr %131, i32 0, i32 0
  %133 = load ptr, ptr %132, align 8, !tbaa !23
  %134 = call ptr %130(ptr noundef %133, i64 noundef 16)
  store ptr %134, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %15) #5
  call void @llvm.memset.p0.i64(ptr align 8 %15, i8 0, i64 16, i1 false)
  %135 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %135, ptr align 8 %15, i64 16, i1 false), !tbaa.struct !27
  %136 = load ptr, ptr %14, align 8, !tbaa !5
  %137 = getelementptr inbounds %struct.tag_____CallExpression__, ptr %13, i32 0, i32 2
  store ptr %136, ptr %137, align 8, !tbaa !28
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #5
  %138 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @top_____currentAllocator__)
  %139 = getelementptr inbounds %struct.tag_____IAllocator__, ptr %138, i32 0, i32 1
  %140 = load ptr, ptr %139, align 8, !tbaa !21
  %141 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @top_____currentAllocator__)
  %142 = getelementptr inbounds %struct.tag_____IAllocator__, ptr %141, i32 0, i32 0
  %143 = load ptr, ptr %142, align 8, !tbaa !23
  %144 = call ptr %140(ptr noundef %143, i64 noundef 16)
  store ptr %144, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %17) #5
  call void @llvm.memset.p0.i64(ptr align 8 %17, i8 0, i64 16, i1 false)
  %145 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %145, ptr align 8 %17, i64 16, i1 false), !tbaa.struct !27
  %146 = load ptr, ptr %16, align 8, !tbaa !5
  %147 = getelementptr inbounds %struct.tag_____CallExpression__, ptr %13, i32 0, i32 3
  store ptr %146, ptr %147, align 8, !tbaa !29
  %148 = load ptr, ptr %12, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %148, ptr align 8 %13, i64 56, i1 false), !tbaa.struct !30
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #5
  %149 = load ptr, ptr %12, align 8, !tbaa !5
  store ptr %149, ptr %18, align 8, !tbaa !5
  %150 = load ptr, ptr %8, align 8, !tbaa !5
  call void @Parser__readToken__(ptr noundef %150)
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #5
  store i32 0, ptr %19, align 4, !tbaa !9
  br label %151

151:                                              ; preds = %263, %115
  br label %152

152:                                              ; preds = %151
  call void @llvm.lifetime.start.p0(i64 1, ptr %20) #5
  %153 = load ptr, ptr %8, align 8, !tbaa !5
  %154 = getelementptr inbounds %struct.tag_____ParserState__, ptr %153, i32 0, i32 3
  %155 = load ptr, ptr %154, align 8, !tbaa !12
  %156 = getelementptr inbounds %struct.tag_____Token__, ptr %155, i32 0, i32 4
  %157 = load i32, ptr %156, align 8, !tbaa !16
  %158 = load ptr, ptr %8, align 8, !tbaa !5
  %159 = getelementptr inbounds %struct.tag_____ParserState__, ptr %158, i32 0, i32 5
  %160 = load i32, ptr %159, align 4, !tbaa !18
  %161 = icmp sgt i32 %157, %160
  %162 = zext i1 %161 to i32
  %163 = trunc i32 %162 to i8
  store i8 %163, ptr %20, align 1, !tbaa !11
  %164 = load i8, ptr %20, align 1, !tbaa !11
  %165 = icmp ne i8 %164, 0
  br i1 %165, label %166, label %175

166:                                              ; preds = %152
  %167 = load ptr, ptr %8, align 8, !tbaa !5
  %168 = getelementptr inbounds %struct.tag_____ParserState__, ptr %167, i32 0, i32 3
  %169 = load ptr, ptr %168, align 8, !tbaa !12
  %170 = getelementptr inbounds %struct.tag_____Token__, ptr %169, i32 0, i32 0
  %171 = load i32, ptr %170, align 8, !tbaa !20
  %172 = icmp ne i32 %171, 6
  %173 = zext i1 %172 to i32
  %174 = trunc i32 %173 to i8
  store i8 %174, ptr %20, align 1, !tbaa !11
  br label %175

175:                                              ; preds = %166, %152
  %176 = load i8, ptr %20, align 1, !tbaa !11
  %177 = icmp ne i8 %176, 0
  br i1 %177, label %179, label %178

178:                                              ; preds = %175
  store i32 5, ptr %21, align 4
  br label %261

179:                                              ; preds = %175
  %180 = load i32, ptr %19, align 4, !tbaa !9
  %181 = icmp ne i32 %180, 2
  br i1 %181, label %182, label %229

182:                                              ; preds = %179
  call void @llvm.lifetime.start.p0(i64 16, ptr %22) #5
  %183 = load ptr, ptr %8, align 8, !tbaa !5
  %184 = call { i32, ptr } @Parser__tryParseExpression__(ptr noundef %183, i32 noundef 0, i8 noundef zeroext 1)
  %185 = getelementptr inbounds { i32, ptr }, ptr %22, i32 0, i32 0
  %186 = extractvalue { i32, ptr } %184, 0
  store i32 %186, ptr %185, align 8
  %187 = getelementptr inbounds { i32, ptr }, ptr %22, i32 0, i32 1
  %188 = extractvalue { i32, ptr } %184, 1
  store ptr %188, ptr %187, align 8
  %189 = getelementptr inbounds %struct.Node__, ptr %22, i32 0, i32 1
  %190 = load ptr, ptr %189, align 8, !tbaa !31
  %191 = icmp ne ptr %190, null
  br i1 %191, label %192, label %207

192:                                              ; preds = %182
  %193 = load ptr, ptr %18, align 8, !tbaa !5
  %194 = getelementptr inbounds %struct.tag_____CallExpression__, ptr %193, i32 0, i32 2
  %195 = load ptr, ptr %194, align 8, !tbaa !28
  %196 = getelementptr inbounds { i32, ptr }, ptr %22, i32 0, i32 0
  %197 = load i32, ptr %196, align 8
  %198 = getelementptr inbounds { i32, ptr }, ptr %22, i32 0, i32 1
  %199 = load ptr, ptr %198, align 8
  call void @List__add__Node____(ptr noundef %195, i32 %197, ptr %199)
  %200 = load ptr, ptr %18, align 8, !tbaa !5
  %201 = getelementptr inbounds %struct.tag_____CallExpression__, ptr %200, i32 0, i32 3
  %202 = load ptr, ptr %201, align 8, !tbaa !29
  %203 = getelementptr inbounds { i32, ptr }, ptr %22, i32 0, i32 0
  %204 = load i32, ptr %203, align 8
  %205 = getelementptr inbounds { i32, ptr }, ptr %22, i32 0, i32 1
  %206 = load ptr, ptr %205, align 8
  call void @List__add__Node____(ptr noundef %202, i32 %204, ptr %206)
  store i32 2, ptr %19, align 4, !tbaa !9
  br label %228

207:                                              ; preds = %182
  call void @llvm.lifetime.start.p0(i64 16, ptr %23) #5
  %208 = load ptr, ptr %8, align 8, !tbaa !5
  %209 = getelementptr inbounds %struct.tag_____ParserState__, ptr %208, i32 0, i32 3
  %210 = load ptr, ptr %209, align 8, !tbaa !12
  %211 = getelementptr inbounds %struct.Node__, ptr %23, i32 0, i32 1
  store ptr %210, ptr %211, align 8, !tbaa !31
  %212 = getelementptr inbounds %struct.Node__, ptr %23, i32 0, i32 1
  %213 = load ptr, ptr %212, align 8, !tbaa !31
  %214 = icmp ne ptr %213, null
  %215 = zext i1 %214 to i64
  %216 = select i1 %214, i32 21, i32 0
  %217 = getelementptr inbounds %struct.Node__, ptr %23, i32 0, i32 0
  store i32 %216, ptr %217, align 8, !tbaa !32
  %218 = load ptr, ptr %18, align 8, !tbaa !5
  %219 = getelementptr inbounds %struct.tag_____CallExpression__, ptr %218, i32 0, i32 3
  %220 = load ptr, ptr %219, align 8, !tbaa !29
  %221 = getelementptr inbounds { i32, ptr }, ptr %23, i32 0, i32 0
  %222 = load i32, ptr %221, align 8
  %223 = getelementptr inbounds { i32, ptr }, ptr %23, i32 0, i32 1
  %224 = load ptr, ptr %223, align 8
  call void @List__add__Node____(ptr noundef %220, i32 %222, ptr %224)
  %225 = load ptr, ptr %8, align 8, !tbaa !5
  %226 = load ptr, ptr @mu_____string304, align 8
  %227 = load i32, ptr getelementptr inbounds ({ ptr, i32 }, ptr @mu_____string304, i32 0, i32 1), align 8
  call void @Parser__badToken__(ptr noundef %225, ptr %226, i32 %227)
  call void @llvm.lifetime.end.p0(i64 16, ptr %23) #5
  br label %228

228:                                              ; preds = %207, %192
  call void @llvm.lifetime.end.p0(i64 16, ptr %22) #5
  br label %260

229:                                              ; preds = %179
  %230 = load ptr, ptr %8, align 8, !tbaa !5
  %231 = getelementptr inbounds %struct.tag_____ParserState__, ptr %230, i32 0, i32 3
  %232 = load ptr, ptr %231, align 8, !tbaa !12
  %233 = getelementptr inbounds %struct.tag_____Token__, ptr %232, i32 0, i32 0
  %234 = load i32, ptr %233, align 8, !tbaa !20
  %235 = icmp eq i32 %234, 13
  br i1 %235, label %236, label %255

236:                                              ; preds = %229
  call void @llvm.lifetime.start.p0(i64 16, ptr %24) #5
  %237 = load ptr, ptr %8, align 8, !tbaa !5
  %238 = getelementptr inbounds %struct.tag_____ParserState__, ptr %237, i32 0, i32 3
  %239 = load ptr, ptr %238, align 8, !tbaa !12
  %240 = getelementptr inbounds %struct.Node__, ptr %24, i32 0, i32 1
  store ptr %239, ptr %240, align 8, !tbaa !31
  %241 = getelementptr inbounds %struct.Node__, ptr %24, i32 0, i32 1
  %242 = load ptr, ptr %241, align 8, !tbaa !31
  %243 = icmp ne ptr %242, null
  %244 = zext i1 %243 to i64
  %245 = select i1 %243, i32 21, i32 0
  %246 = getelementptr inbounds %struct.Node__, ptr %24, i32 0, i32 0
  store i32 %245, ptr %246, align 8, !tbaa !32
  %247 = load ptr, ptr %18, align 8, !tbaa !5
  %248 = getelementptr inbounds %struct.tag_____CallExpression__, ptr %247, i32 0, i32 3
  %249 = load ptr, ptr %248, align 8, !tbaa !29
  %250 = getelementptr inbounds { i32, ptr }, ptr %24, i32 0, i32 0
  %251 = load i32, ptr %250, align 8
  %252 = getelementptr inbounds { i32, ptr }, ptr %24, i32 0, i32 1
  %253 = load ptr, ptr %252, align 8
  call void @List__add__Node____(ptr noundef %249, i32 %251, ptr %253)
  %254 = load ptr, ptr %8, align 8, !tbaa !5
  call void @Parser__readToken__(ptr noundef %254)
  call void @llvm.lifetime.end.p0(i64 16, ptr %24) #5
  br label %259

255:                                              ; preds = %229
  %256 = load ptr, ptr %8, align 8, !tbaa !5
  %257 = load ptr, ptr @mu_____string77, align 8
  %258 = load i32, ptr getelementptr inbounds ({ ptr, i32 }, ptr @mu_____string77, i32 0, i32 1), align 8
  call void @Parser__expected__(ptr noundef %256, ptr %257, i32 %258)
  br label %259

259:                                              ; preds = %255, %236
  store i32 1, ptr %19, align 4, !tbaa !9
  br label %260

260:                                              ; preds = %259, %228
  store i32 0, ptr %21, align 4
  br label %261

261:                                              ; preds = %260, %178
  call void @llvm.lifetime.end.p0(i64 1, ptr %20) #5
  %262 = load i32, ptr %21, align 4
  switch i32 %262, label %1088 [
    i32 0, label %263
    i32 5, label %264
  ]

263:                                              ; preds = %261
  br label %151

264:                                              ; preds = %261
  %265 = load i32, ptr %19, align 4, !tbaa !9
  %266 = icmp eq i32 %265, 1
  br i1 %266, label %267, label %271

267:                                              ; preds = %264
  %268 = load ptr, ptr %8, align 8, !tbaa !5
  %269 = load ptr, ptr @mu_____string302, align 8
  %270 = load i32, ptr getelementptr inbounds ({ ptr, i32 }, ptr @mu_____string302, i32 0, i32 1), align 8
  call void @Parser__expected__(ptr noundef %268, ptr %269, i32 %270)
  br label %271

271:                                              ; preds = %267, %264
  call void @llvm.lifetime.start.p0(i64 1, ptr %25) #5
  %272 = load ptr, ptr %8, align 8, !tbaa !5
  %273 = getelementptr inbounds %struct.tag_____ParserState__, ptr %272, i32 0, i32 3
  %274 = load ptr, ptr %273, align 8, !tbaa !12
  %275 = getelementptr inbounds %struct.tag_____Token__, ptr %274, i32 0, i32 4
  %276 = load i32, ptr %275, align 8, !tbaa !16
  %277 = load ptr, ptr %8, align 8, !tbaa !5
  %278 = getelementptr inbounds %struct.tag_____ParserState__, ptr %277, i32 0, i32 5
  %279 = load i32, ptr %278, align 4, !tbaa !18
  %280 = icmp sge i32 %276, %279
  %281 = zext i1 %280 to i32
  %282 = trunc i32 %281 to i8
  store i8 %282, ptr %25, align 1, !tbaa !11
  %283 = load i8, ptr %25, align 1, !tbaa !11
  %284 = icmp ne i8 %283, 0
  br i1 %284, label %285, label %294

285:                                              ; preds = %271
  %286 = load ptr, ptr %8, align 8, !tbaa !5
  %287 = getelementptr inbounds %struct.tag_____ParserState__, ptr %286, i32 0, i32 3
  %288 = load ptr, ptr %287, align 8, !tbaa !12
  %289 = getelementptr inbounds %struct.tag_____Token__, ptr %288, i32 0, i32 0
  %290 = load i32, ptr %289, align 8, !tbaa !20
  %291 = icmp eq i32 %290, 6
  %292 = zext i1 %291 to i32
  %293 = trunc i32 %292 to i8
  store i8 %293, ptr %25, align 1, !tbaa !11
  br label %294

294:                                              ; preds = %285, %271
  %295 = load i8, ptr %25, align 1, !tbaa !11
  %296 = icmp ne i8 %295, 0
  br i1 %296, label %297, label %304

297:                                              ; preds = %294
  %298 = load ptr, ptr %8, align 8, !tbaa !5
  %299 = getelementptr inbounds %struct.tag_____ParserState__, ptr %298, i32 0, i32 3
  %300 = load ptr, ptr %299, align 8, !tbaa !12
  %301 = load ptr, ptr %18, align 8, !tbaa !5
  %302 = getelementptr inbounds %struct.tag_____CallExpression__, ptr %301, i32 0, i32 4
  store ptr %300, ptr %302, align 8, !tbaa !33
  %303 = load ptr, ptr %8, align 8, !tbaa !5
  call void @Parser__readToken__(ptr noundef %303)
  br label %308

304:                                              ; preds = %294
  %305 = load ptr, ptr %8, align 8, !tbaa !5
  %306 = load ptr, ptr @mu_____string303, align 8
  %307 = load i32, ptr getelementptr inbounds ({ ptr, i32 }, ptr @mu_____string303, i32 0, i32 1), align 8
  call void @Parser__expected__(ptr noundef %305, ptr %306, i32 %307)
  br label %308

308:                                              ; preds = %304, %297
  call void @llvm.lifetime.start.p0(i64 16, ptr %26) #5
  %309 = load ptr, ptr %18, align 8, !tbaa !5
  %310 = getelementptr inbounds %struct.Node__, ptr %26, i32 0, i32 1
  store ptr %309, ptr %310, align 8, !tbaa !31
  %311 = getelementptr inbounds %struct.Node__, ptr %26, i32 0, i32 1
  %312 = load ptr, ptr %311, align 8, !tbaa !31
  %313 = icmp ne ptr %312, null
  %314 = zext i1 %313 to i64
  %315 = select i1 %313, i32 14, i32 0
  %316 = getelementptr inbounds %struct.Node__, ptr %26, i32 0, i32 0
  store i32 %315, ptr %316, align 8, !tbaa !32
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %7, ptr align 8 %26, i64 16, i1 false), !tbaa.struct !19
  call void @llvm.lifetime.end.p0(i64 16, ptr %26) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %25) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %17) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #5
  call void @llvm.lifetime.end.p0(i64 56, ptr %13) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #5
  br label %1082

317:                                              ; preds = %112
  call void @llvm.lifetime.start.p0(i64 1, ptr %27) #5
  %318 = load ptr, ptr %8, align 8, !tbaa !5
  %319 = getelementptr inbounds %struct.tag_____ParserState__, ptr %318, i32 0, i32 3
  %320 = load ptr, ptr %319, align 8, !tbaa !12
  %321 = getelementptr inbounds %struct.tag_____Token__, ptr %320, i32 0, i32 0
  %322 = load i32, ptr %321, align 8, !tbaa !20
  %323 = icmp eq i32 %322, 9
  %324 = zext i1 %323 to i32
  %325 = trunc i32 %324 to i8
  store i8 %325, ptr %27, align 1, !tbaa !11
  %326 = load i8, ptr %27, align 1, !tbaa !11
  %327 = icmp ne i8 %326, 0
  br i1 %327, label %328, label %333

328:                                              ; preds = %317
  %329 = load i32, ptr %9, align 4, !tbaa !9
  %330 = icmp sle i32 %329, 25
  %331 = zext i1 %330 to i32
  %332 = trunc i32 %331 to i8
  store i8 %332, ptr %27, align 1, !tbaa !11
  br label %333

333:                                              ; preds = %328, %317
  %334 = load i8, ptr %27, align 1, !tbaa !11
  %335 = icmp ne i8 %334, 0
  br i1 %335, label %336, label %415

336:                                              ; preds = %333
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #5
  %337 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @top_____currentAllocator__)
  %338 = getelementptr inbounds %struct.tag_____IAllocator__, ptr %337, i32 0, i32 1
  %339 = load ptr, ptr %338, align 8, !tbaa !21
  %340 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @top_____currentAllocator__)
  %341 = getelementptr inbounds %struct.tag_____IAllocator__, ptr %340, i32 0, i32 0
  %342 = load ptr, ptr %341, align 8, !tbaa !23
  %343 = call ptr %339(ptr noundef %342, i64 noundef 48)
  store ptr %343, ptr %28, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 48, ptr %29) #5
  call void @llvm.memset.p0.i64(ptr align 8 %29, i8 0, i64 48, i1 false)
  %344 = getelementptr inbounds %struct.tag_____IndexExpression__, ptr %29, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %344, ptr align 8 %7, i64 16, i1 false), !tbaa.struct !19
  %345 = load ptr, ptr %8, align 8, !tbaa !5
  %346 = getelementptr inbounds %struct.tag_____ParserState__, ptr %345, i32 0, i32 3
  %347 = load ptr, ptr %346, align 8, !tbaa !12
  %348 = getelementptr inbounds %struct.tag_____IndexExpression__, ptr %29, i32 0, i32 1
  store ptr %347, ptr %348, align 8, !tbaa !34
  %349 = load ptr, ptr %28, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %349, ptr align 8 %29, i64 48, i1 false), !tbaa.struct !36
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #5
  %350 = load ptr, ptr %28, align 8, !tbaa !5
  store ptr %350, ptr %30, align 8, !tbaa !5
  %351 = load ptr, ptr %8, align 8, !tbaa !5
  call void @Parser__readToken__(ptr noundef %351)
  %352 = load ptr, ptr %30, align 8, !tbaa !5
  %353 = getelementptr inbounds %struct.tag_____IndexExpression__, ptr %352, i32 0, i32 2
  call void @llvm.lifetime.start.p0(i64 16, ptr %31) #5
  %354 = load ptr, ptr %8, align 8, !tbaa !5
  %355 = call { i32, ptr } @Parser__tryParseExpression__(ptr noundef %354, i32 noundef 0, i8 noundef zeroext 1)
  %356 = getelementptr inbounds { i32, ptr }, ptr %31, i32 0, i32 0
  %357 = extractvalue { i32, ptr } %355, 0
  store i32 %357, ptr %356, align 8
  %358 = getelementptr inbounds { i32, ptr }, ptr %31, i32 0, i32 1
  %359 = extractvalue { i32, ptr } %355, 1
  store ptr %359, ptr %358, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %353, ptr align 8 %31, i64 16, i1 false), !tbaa.struct !19
  call void @llvm.lifetime.end.p0(i64 16, ptr %31) #5
  %360 = load ptr, ptr %30, align 8, !tbaa !5
  %361 = getelementptr inbounds %struct.tag_____IndexExpression__, ptr %360, i32 0, i32 2
  %362 = getelementptr inbounds %struct.Node__, ptr %361, i32 0, i32 1
  %363 = load ptr, ptr %362, align 8, !tbaa !37
  %364 = icmp eq ptr %363, null
  br i1 %364, label %365, label %369

365:                                              ; preds = %336
  %366 = load ptr, ptr %8, align 8, !tbaa !5
  %367 = load ptr, ptr @mu_____string302, align 8
  %368 = load i32, ptr getelementptr inbounds ({ ptr, i32 }, ptr @mu_____string302, i32 0, i32 1), align 8
  call void @Parser__expected__(ptr noundef %366, ptr %367, i32 %368)
  br label %369

369:                                              ; preds = %365, %336
  call void @llvm.lifetime.start.p0(i64 1, ptr %32) #5
  %370 = load ptr, ptr %8, align 8, !tbaa !5
  %371 = getelementptr inbounds %struct.tag_____ParserState__, ptr %370, i32 0, i32 3
  %372 = load ptr, ptr %371, align 8, !tbaa !12
  %373 = getelementptr inbounds %struct.tag_____Token__, ptr %372, i32 0, i32 4
  %374 = load i32, ptr %373, align 8, !tbaa !16
  %375 = load ptr, ptr %8, align 8, !tbaa !5
  %376 = getelementptr inbounds %struct.tag_____ParserState__, ptr %375, i32 0, i32 5
  %377 = load i32, ptr %376, align 4, !tbaa !18
  %378 = icmp sge i32 %374, %377
  %379 = zext i1 %378 to i32
  %380 = trunc i32 %379 to i8
  store i8 %380, ptr %32, align 1, !tbaa !11
  %381 = load i8, ptr %32, align 1, !tbaa !11
  %382 = icmp ne i8 %381, 0
  br i1 %382, label %383, label %392

383:                                              ; preds = %369
  %384 = load ptr, ptr %8, align 8, !tbaa !5
  %385 = getelementptr inbounds %struct.tag_____ParserState__, ptr %384, i32 0, i32 3
  %386 = load ptr, ptr %385, align 8, !tbaa !12
  %387 = getelementptr inbounds %struct.tag_____Token__, ptr %386, i32 0, i32 0
  %388 = load i32, ptr %387, align 8, !tbaa !20
  %389 = icmp eq i32 %388, 10
  %390 = zext i1 %389 to i32
  %391 = trunc i32 %390 to i8
  store i8 %391, ptr %32, align 1, !tbaa !11
  br label %392

392:                                              ; preds = %383, %369
  %393 = load i8, ptr %32, align 1, !tbaa !11
  %394 = icmp ne i8 %393, 0
  br i1 %394, label %395, label %402

395:                                              ; preds = %392
  %396 = load ptr, ptr %8, align 8, !tbaa !5
  %397 = getelementptr inbounds %struct.tag_____ParserState__, ptr %396, i32 0, i32 3
  %398 = load ptr, ptr %397, align 8, !tbaa !12
  %399 = load ptr, ptr %30, align 8, !tbaa !5
  %400 = getelementptr inbounds %struct.tag_____IndexExpression__, ptr %399, i32 0, i32 3
  store ptr %398, ptr %400, align 8, !tbaa !38
  %401 = load ptr, ptr %8, align 8, !tbaa !5
  call void @Parser__readToken__(ptr noundef %401)
  br label %406

402:                                              ; preds = %392
  %403 = load ptr, ptr %8, align 8, !tbaa !5
  %404 = load ptr, ptr @mu_____string305, align 8
  %405 = load i32, ptr getelementptr inbounds ({ ptr, i32 }, ptr @mu_____string305, i32 0, i32 1), align 8
  call void @Parser__expected__(ptr noundef %403, ptr %404, i32 %405)
  br label %406

406:                                              ; preds = %402, %395
  call void @llvm.lifetime.start.p0(i64 16, ptr %33) #5
  %407 = load ptr, ptr %30, align 8, !tbaa !5
  %408 = getelementptr inbounds %struct.Node__, ptr %33, i32 0, i32 1
  store ptr %407, ptr %408, align 8, !tbaa !31
  %409 = getelementptr inbounds %struct.Node__, ptr %33, i32 0, i32 1
  %410 = load ptr, ptr %409, align 8, !tbaa !31
  %411 = icmp ne ptr %410, null
  %412 = zext i1 %411 to i64
  %413 = select i1 %411, i32 17, i32 0
  %414 = getelementptr inbounds %struct.Node__, ptr %33, i32 0, i32 0
  store i32 %413, ptr %414, align 8, !tbaa !32
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %7, ptr align 8 %33, i64 16, i1 false), !tbaa.struct !19
  call void @llvm.lifetime.end.p0(i64 16, ptr %33) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %32) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #5
  call void @llvm.lifetime.end.p0(i64 48, ptr %29) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #5
  br label %1078

415:                                              ; preds = %333
  call void @llvm.lifetime.start.p0(i64 1, ptr %34) #5
  %416 = load ptr, ptr %8, align 8, !tbaa !5
  %417 = getelementptr inbounds %struct.tag_____ParserState__, ptr %416, i32 0, i32 3
  %418 = load ptr, ptr %417, align 8, !tbaa !12
  %419 = getelementptr inbounds %struct.tag_____Token__, ptr %418, i32 0, i32 0
  %420 = load i32, ptr %419, align 8, !tbaa !20
  %421 = icmp eq i32 %420, 11
  %422 = zext i1 %421 to i32
  %423 = trunc i32 %422 to i8
  store i8 %423, ptr %34, align 1, !tbaa !11
  %424 = load i8, ptr %34, align 1, !tbaa !11
  %425 = icmp ne i8 %424, 0
  br i1 %425, label %426, label %431

426:                                              ; preds = %415
  %427 = load i32, ptr %9, align 4, !tbaa !9
  %428 = icmp sle i32 %427, 25
  %429 = zext i1 %428 to i32
  %430 = trunc i32 %429 to i8
  store i8 %430, ptr %34, align 1, !tbaa !11
  br label %431

431:                                              ; preds = %426, %415
  %432 = load i8, ptr %34, align 1, !tbaa !11
  %433 = icmp ne i8 %432, 0
  br i1 %433, label %434, label %497

434:                                              ; preds = %431
  call void @llvm.lifetime.start.p0(i64 1, ptr %35) #5
  %435 = getelementptr inbounds %struct.Node__, ptr %7, i32 0, i32 0
  %436 = load i32, ptr %435, align 8, !tbaa !32
  %437 = icmp eq i32 %436, 21
  %438 = zext i1 %437 to i32
  %439 = trunc i32 %438 to i8
  store i8 %439, ptr %35, align 1, !tbaa !11
  %440 = load i8, ptr %35, align 1, !tbaa !11
  %441 = icmp ne i8 %440, 0
  br i1 %441, label %442, label %457

442:                                              ; preds = %434
  call void @llvm.lifetime.start.p0(i64 16, ptr %36) #5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %36, ptr align 8 %7, i64 16, i1 false), !tbaa.struct !19
  %443 = getelementptr inbounds %struct.Node__, ptr %36, i32 0, i32 0
  %444 = load i32, ptr %443, align 8, !tbaa !32
  %445 = icmp eq i32 %444, 21
  br i1 %445, label %449, label %446

446:                                              ; preds = %442
  %447 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @top_____abandonFn__)
  %448 = load ptr, ptr %447, align 8, !tbaa !5
  call void %448(i32 noundef -4)
  br label %449

449:                                              ; preds = %446, %442
  %450 = getelementptr inbounds %struct.Node__, ptr %36, i32 0, i32 1
  %451 = load ptr, ptr %450, align 8, !tbaa !31
  %452 = getelementptr inbounds %struct.tag_____Token__, ptr %451, i32 0, i32 0
  %453 = load i32, ptr %452, align 8, !tbaa !20
  %454 = icmp eq i32 %453, 0
  %455 = zext i1 %454 to i32
  %456 = trunc i32 %455 to i8
  store i8 %456, ptr %35, align 1, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 16, ptr %36) #5
  br label %457

457:                                              ; preds = %449, %434
  call void @llvm.lifetime.start.p0(i64 1, ptr %37) #5
  %458 = load i8, ptr %35, align 1, !tbaa !11
  store i8 %458, ptr %37, align 1, !tbaa !11
  %459 = load i8, ptr %37, align 1, !tbaa !11
  %460 = icmp ne i8 %459, 0
  br i1 %460, label %467, label %461

461:                                              ; preds = %457
  %462 = getelementptr inbounds %struct.Node__, ptr %7, i32 0, i32 0
  %463 = load i32, ptr %462, align 8, !tbaa !32
  %464 = icmp eq i32 %463, 11
  %465 = zext i1 %464 to i32
  %466 = trunc i32 %465 to i8
  store i8 %466, ptr %37, align 1, !tbaa !11
  br label %467

467:                                              ; preds = %461, %457
  call void @llvm.lifetime.start.p0(i64 1, ptr %38) #5
  %468 = load i8, ptr %37, align 1, !tbaa !11
  store i8 %468, ptr %38, align 1, !tbaa !11
  %469 = load i8, ptr %38, align 1, !tbaa !11
  %470 = icmp ne i8 %469, 0
  br i1 %470, label %471, label %474

471:                                              ; preds = %467
  %472 = load ptr, ptr %8, align 8, !tbaa !5
  %473 = call zeroext i8 @Parser__canParseTypeArgsExpressionTail__(ptr noundef %472)
  store i8 %473, ptr %38, align 1, !tbaa !11
  br label %474

474:                                              ; preds = %471, %467
  %475 = load i8, ptr %38, align 1, !tbaa !11
  %476 = icmp ne i8 %475, 0
  br i1 %476, label %477, label %491

477:                                              ; preds = %474
  call void @llvm.lifetime.start.p0(i64 16, ptr %39) #5
  %478 = load ptr, ptr %8, align 8, !tbaa !5
  %479 = getelementptr inbounds { i32, ptr }, ptr %7, i32 0, i32 0
  %480 = load i32, ptr %479, align 8
  %481 = getelementptr inbounds { i32, ptr }, ptr %7, i32 0, i32 1
  %482 = load ptr, ptr %481, align 8
  %483 = call ptr @Parser__parseTypeArgsExpressionTail__(ptr noundef %478, i32 %480, ptr %482)
  %484 = getelementptr inbounds %struct.Node__, ptr %39, i32 0, i32 1
  store ptr %483, ptr %484, align 8, !tbaa !31
  %485 = getelementptr inbounds %struct.Node__, ptr %39, i32 0, i32 1
  %486 = load ptr, ptr %485, align 8, !tbaa !31
  %487 = icmp ne ptr %486, null
  %488 = zext i1 %487 to i64
  %489 = select i1 %487, i32 4, i32 0
  %490 = getelementptr inbounds %struct.Node__, ptr %39, i32 0, i32 0
  store i32 %489, ptr %490, align 8, !tbaa !32
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %7, ptr align 8 %39, i64 16, i1 false), !tbaa.struct !19
  call void @llvm.lifetime.end.p0(i64 16, ptr %39) #5
  br label %496

491:                                              ; preds = %474
  %492 = load ptr, ptr %8, align 8, !tbaa !5
  %493 = getelementptr inbounds %struct.tag_____ParserState__, ptr %492, i32 0, i32 3
  %494 = load ptr, ptr %493, align 8, !tbaa !12
  %495 = getelementptr inbounds %struct.tag_____Token__, ptr %494, i32 0, i32 0
  store i32 4, ptr %495, align 8, !tbaa !20
  br label %496

496:                                              ; preds = %491, %477
  call void @llvm.lifetime.end.p0(i64 1, ptr %38) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %37) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %35) #5
  br label %1074

497:                                              ; preds = %431
  call void @llvm.lifetime.start.p0(i64 1, ptr %40) #5
  %498 = load ptr, ptr %8, align 8, !tbaa !5
  %499 = getelementptr inbounds %struct.tag_____ParserState__, ptr %498, i32 0, i32 3
  %500 = load ptr, ptr %499, align 8, !tbaa !12
  %501 = getelementptr inbounds %struct.tag_____Token__, ptr %500, i32 0, i32 0
  %502 = load i32, ptr %501, align 8, !tbaa !20
  %503 = icmp eq i32 %502, 7
  %504 = zext i1 %503 to i32
  %505 = trunc i32 %504 to i8
  store i8 %505, ptr %40, align 1, !tbaa !11
  %506 = load i8, ptr %40, align 1, !tbaa !11
  %507 = icmp ne i8 %506, 0
  br i1 %507, label %508, label %513

508:                                              ; preds = %497
  %509 = load i32, ptr %9, align 4, !tbaa !9
  %510 = icmp sle i32 %509, 25
  %511 = zext i1 %510 to i32
  %512 = trunc i32 %511 to i8
  store i8 %512, ptr %40, align 1, !tbaa !11
  br label %513

513:                                              ; preds = %508, %497
  call void @llvm.lifetime.start.p0(i64 1, ptr %41) #5
  %514 = load i8, ptr %40, align 1, !tbaa !11
  store i8 %514, ptr %41, align 1, !tbaa !11
  %515 = load i8, ptr %41, align 1, !tbaa !11
  %516 = icmp ne i8 %515, 0
  br i1 %516, label %517, label %519

517:                                              ; preds = %513
  %518 = load i8, ptr %10, align 1, !tbaa !11
  store i8 %518, ptr %41, align 1, !tbaa !11
  br label %519

519:                                              ; preds = %517, %513
  %520 = load i8, ptr %41, align 1, !tbaa !11
  %521 = icmp ne i8 %520, 0
  br i1 %521, label %522, label %772

522:                                              ; preds = %519
  call void @llvm.lifetime.start.p0(i64 1, ptr %42) #5
  %523 = getelementptr inbounds %struct.Node__, ptr %7, i32 0, i32 0
  %524 = load i32, ptr %523, align 8, !tbaa !32
  %525 = icmp eq i32 %524, 21
  %526 = zext i1 %525 to i32
  %527 = trunc i32 %526 to i8
  store i8 %527, ptr %42, align 1, !tbaa !11
  %528 = load i8, ptr %42, align 1, !tbaa !11
  %529 = icmp ne i8 %528, 0
  br i1 %529, label %530, label %545

530:                                              ; preds = %522
  call void @llvm.lifetime.start.p0(i64 16, ptr %43) #5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %43, ptr align 8 %7, i64 16, i1 false), !tbaa.struct !19
  %531 = getelementptr inbounds %struct.Node__, ptr %43, i32 0, i32 0
  %532 = load i32, ptr %531, align 8, !tbaa !32
  %533 = icmp eq i32 %532, 21
  br i1 %533, label %537, label %534

534:                                              ; preds = %530
  %535 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @top_____abandonFn__)
  %536 = load ptr, ptr %535, align 8, !tbaa !5
  call void %536(i32 noundef -4)
  br label %537

537:                                              ; preds = %534, %530
  %538 = getelementptr inbounds %struct.Node__, ptr %43, i32 0, i32 1
  %539 = load ptr, ptr %538, align 8, !tbaa !31
  %540 = getelementptr inbounds %struct.tag_____Token__, ptr %539, i32 0, i32 0
  %541 = load i32, ptr %540, align 8, !tbaa !20
  %542 = icmp eq i32 %541, 0
  %543 = zext i1 %542 to i32
  %544 = trunc i32 %543 to i8
  store i8 %544, ptr %42, align 1, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 16, ptr %43) #5
  br label %545

545:                                              ; preds = %537, %522
  call void @llvm.lifetime.start.p0(i64 1, ptr %44) #5
  %546 = load i8, ptr %42, align 1, !tbaa !11
  store i8 %546, ptr %44, align 1, !tbaa !11
  %547 = load i8, ptr %44, align 1, !tbaa !11
  %548 = icmp ne i8 %547, 0
  br i1 %548, label %555, label %549

549:                                              ; preds = %545
  %550 = getelementptr inbounds %struct.Node__, ptr %7, i32 0, i32 0
  %551 = load i32, ptr %550, align 8, !tbaa !32
  %552 = icmp eq i32 %551, 3
  %553 = zext i1 %552 to i32
  %554 = trunc i32 %553 to i8
  store i8 %554, ptr %44, align 1, !tbaa !11
  br label %555

555:                                              ; preds = %549, %545
  call void @llvm.lifetime.start.p0(i64 1, ptr %45) #5
  %556 = load i8, ptr %44, align 1, !tbaa !11
  store i8 %556, ptr %45, align 1, !tbaa !11
  %557 = load i8, ptr %45, align 1, !tbaa !11
  %558 = icmp ne i8 %557, 0
  br i1 %558, label %565, label %559

559:                                              ; preds = %555
  %560 = getelementptr inbounds %struct.Node__, ptr %7, i32 0, i32 0
  %561 = load i32, ptr %560, align 8, !tbaa !32
  %562 = icmp eq i32 %561, 4
  %563 = zext i1 %562 to i32
  %564 = trunc i32 %563 to i8
  store i8 %564, ptr %45, align 1, !tbaa !11
  br label %565

565:                                              ; preds = %559, %555
  %566 = load i8, ptr %45, align 1, !tbaa !11
  %567 = icmp ne i8 %566, 0
  br i1 %567, label %568, label %767

568:                                              ; preds = %565
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #5
  %569 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @top_____currentAllocator__)
  %570 = getelementptr inbounds %struct.tag_____IAllocator__, ptr %569, i32 0, i32 1
  %571 = load ptr, ptr %570, align 8, !tbaa !21
  %572 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @top_____currentAllocator__)
  %573 = getelementptr inbounds %struct.tag_____IAllocator__, ptr %572, i32 0, i32 0
  %574 = load ptr, ptr %573, align 8, !tbaa !23
  %575 = call ptr %571(ptr noundef %574, i64 noundef 48)
  store ptr %575, ptr %46, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 48, ptr %47) #5
  call void @llvm.memset.p0.i64(ptr align 8 %47, i8 0, i64 48, i1 false)
  %576 = getelementptr inbounds %struct.tag_____StructInitializerExpression__, ptr %47, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %576, ptr align 8 %7, i64 16, i1 false), !tbaa.struct !19
  %577 = load ptr, ptr %8, align 8, !tbaa !5
  %578 = getelementptr inbounds %struct.tag_____ParserState__, ptr %577, i32 0, i32 3
  %579 = load ptr, ptr %578, align 8, !tbaa !12
  %580 = getelementptr inbounds %struct.tag_____StructInitializerExpression__, ptr %47, i32 0, i32 1
  store ptr %579, ptr %580, align 8, !tbaa !39
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #5
  %581 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @top_____currentAllocator__)
  %582 = getelementptr inbounds %struct.tag_____IAllocator__, ptr %581, i32 0, i32 1
  %583 = load ptr, ptr %582, align 8, !tbaa !21
  %584 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @top_____currentAllocator__)
  %585 = getelementptr inbounds %struct.tag_____IAllocator__, ptr %584, i32 0, i32 0
  %586 = load ptr, ptr %585, align 8, !tbaa !23
  %587 = call ptr %583(ptr noundef %586, i64 noundef 16)
  store ptr %587, ptr %48, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %49) #5
  call void @llvm.memset.p0.i64(ptr align 8 %49, i8 0, i64 16, i1 false)
  %588 = load ptr, ptr %48, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %588, ptr align 8 %49, i64 16, i1 false), !tbaa.struct !27
  %589 = load ptr, ptr %48, align 8, !tbaa !5
  %590 = getelementptr inbounds %struct.tag_____StructInitializerExpression__, ptr %47, i32 0, i32 2
  store ptr %589, ptr %590, align 8, !tbaa !41
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #5
  %591 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @top_____currentAllocator__)
  %592 = getelementptr inbounds %struct.tag_____IAllocator__, ptr %591, i32 0, i32 1
  %593 = load ptr, ptr %592, align 8, !tbaa !21
  %594 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @top_____currentAllocator__)
  %595 = getelementptr inbounds %struct.tag_____IAllocator__, ptr %594, i32 0, i32 0
  %596 = load ptr, ptr %595, align 8, !tbaa !23
  %597 = call ptr %593(ptr noundef %596, i64 noundef 16)
  store ptr %597, ptr %50, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %51) #5
  call void @llvm.memset.p0.i64(ptr align 8 %51, i8 0, i64 16, i1 false)
  %598 = load ptr, ptr %50, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %598, ptr align 8 %51, i64 16, i1 false), !tbaa.struct !27
  %599 = load ptr, ptr %50, align 8, !tbaa !5
  %600 = getelementptr inbounds %struct.tag_____StructInitializerExpression__, ptr %47, i32 0, i32 3
  store ptr %599, ptr %600, align 8, !tbaa !42
  %601 = load ptr, ptr %46, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %601, ptr align 8 %47, i64 48, i1 false), !tbaa.struct !43
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #5
  %602 = load ptr, ptr %46, align 8, !tbaa !5
  store ptr %602, ptr %52, align 8, !tbaa !5
  %603 = load ptr, ptr %8, align 8, !tbaa !5
  call void @Parser__readToken__(ptr noundef %603)
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #5
  store i32 0, ptr %53, align 4, !tbaa !9
  br label %604

604:                                              ; preds = %720, %568
  br label %605

605:                                              ; preds = %604
  call void @llvm.lifetime.start.p0(i64 1, ptr %54) #5
  %606 = load ptr, ptr %8, align 8, !tbaa !5
  %607 = getelementptr inbounds %struct.tag_____ParserState__, ptr %606, i32 0, i32 3
  %608 = load ptr, ptr %607, align 8, !tbaa !12
  %609 = getelementptr inbounds %struct.tag_____Token__, ptr %608, i32 0, i32 4
  %610 = load i32, ptr %609, align 8, !tbaa !16
  %611 = load ptr, ptr %8, align 8, !tbaa !5
  %612 = getelementptr inbounds %struct.tag_____ParserState__, ptr %611, i32 0, i32 5
  %613 = load i32, ptr %612, align 4, !tbaa !18
  %614 = icmp sgt i32 %610, %613
  %615 = zext i1 %614 to i32
  %616 = trunc i32 %615 to i8
  store i8 %616, ptr %54, align 1, !tbaa !11
  %617 = load i8, ptr %54, align 1, !tbaa !11
  %618 = icmp ne i8 %617, 0
  br i1 %618, label %619, label %628

619:                                              ; preds = %605
  %620 = load ptr, ptr %8, align 8, !tbaa !5
  %621 = getelementptr inbounds %struct.tag_____ParserState__, ptr %620, i32 0, i32 3
  %622 = load ptr, ptr %621, align 8, !tbaa !12
  %623 = getelementptr inbounds %struct.tag_____Token__, ptr %622, i32 0, i32 0
  %624 = load i32, ptr %623, align 8, !tbaa !20
  %625 = icmp ne i32 %624, 8
  %626 = zext i1 %625 to i32
  %627 = trunc i32 %626 to i8
  store i8 %627, ptr %54, align 1, !tbaa !11
  br label %628

628:                                              ; preds = %619, %605
  %629 = load i8, ptr %54, align 1, !tbaa !11
  %630 = icmp ne i8 %629, 0
  br i1 %630, label %632, label %631

631:                                              ; preds = %628
  store i32 7, ptr %21, align 4
  br label %718

632:                                              ; preds = %628
  %633 = load i32, ptr %53, align 4, !tbaa !9
  %634 = icmp ne i32 %633, 2
  br i1 %634, label %635, label %686

635:                                              ; preds = %632
  %636 = load ptr, ptr %8, align 8, !tbaa !5
  %637 = getelementptr inbounds %struct.tag_____ParserState__, ptr %636, i32 0, i32 3
  %638 = load ptr, ptr %637, align 8, !tbaa !12
  %639 = getelementptr inbounds %struct.tag_____Token__, ptr %638, i32 0, i32 0
  %640 = load i32, ptr %639, align 8, !tbaa !20
  %641 = icmp eq i32 %640, 0
  br i1 %641, label %642, label %664

642:                                              ; preds = %635
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #5
  %643 = load ptr, ptr %8, align 8, !tbaa !5
  %644 = call ptr @Parser__parseFieldInitializerExpression__(ptr noundef %643)
  store ptr %644, ptr %55, align 8, !tbaa !5
  %645 = load ptr, ptr %52, align 8, !tbaa !5
  %646 = getelementptr inbounds %struct.tag_____StructInitializerExpression__, ptr %645, i32 0, i32 2
  %647 = load ptr, ptr %646, align 8, !tbaa !41
  %648 = load ptr, ptr %55, align 8, !tbaa !5
  call void @List__add__Ptr__FieldInitializerExpression______(ptr noundef %647, ptr noundef %648)
  call void @llvm.lifetime.start.p0(i64 16, ptr %56) #5
  %649 = load ptr, ptr %55, align 8, !tbaa !5
  %650 = getelementptr inbounds %struct.Node__, ptr %56, i32 0, i32 1
  store ptr %649, ptr %650, align 8, !tbaa !31
  %651 = getelementptr inbounds %struct.Node__, ptr %56, i32 0, i32 1
  %652 = load ptr, ptr %651, align 8, !tbaa !31
  %653 = icmp ne ptr %652, null
  %654 = zext i1 %653 to i64
  %655 = select i1 %653, i32 16, i32 0
  %656 = getelementptr inbounds %struct.Node__, ptr %56, i32 0, i32 0
  store i32 %655, ptr %656, align 8, !tbaa !32
  %657 = load ptr, ptr %52, align 8, !tbaa !5
  %658 = getelementptr inbounds %struct.tag_____StructInitializerExpression__, ptr %657, i32 0, i32 3
  %659 = load ptr, ptr %658, align 8, !tbaa !42
  %660 = getelementptr inbounds { i32, ptr }, ptr %56, i32 0, i32 0
  %661 = load i32, ptr %660, align 8
  %662 = getelementptr inbounds { i32, ptr }, ptr %56, i32 0, i32 1
  %663 = load ptr, ptr %662, align 8
  call void @List__add__Node____(ptr noundef %659, i32 %661, ptr %663)
  store i32 2, ptr %53, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 16, ptr %56) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #5
  br label %685

664:                                              ; preds = %635
  call void @llvm.lifetime.start.p0(i64 16, ptr %57) #5
  %665 = load ptr, ptr %8, align 8, !tbaa !5
  %666 = getelementptr inbounds %struct.tag_____ParserState__, ptr %665, i32 0, i32 3
  %667 = load ptr, ptr %666, align 8, !tbaa !12
  %668 = getelementptr inbounds %struct.Node__, ptr %57, i32 0, i32 1
  store ptr %667, ptr %668, align 8, !tbaa !31
  %669 = getelementptr inbounds %struct.Node__, ptr %57, i32 0, i32 1
  %670 = load ptr, ptr %669, align 8, !tbaa !31
  %671 = icmp ne ptr %670, null
  %672 = zext i1 %671 to i64
  %673 = select i1 %671, i32 21, i32 0
  %674 = getelementptr inbounds %struct.Node__, ptr %57, i32 0, i32 0
  store i32 %673, ptr %674, align 8, !tbaa !32
  %675 = load ptr, ptr %52, align 8, !tbaa !5
  %676 = getelementptr inbounds %struct.tag_____StructInitializerExpression__, ptr %675, i32 0, i32 3
  %677 = load ptr, ptr %676, align 8, !tbaa !42
  %678 = getelementptr inbounds { i32, ptr }, ptr %57, i32 0, i32 0
  %679 = load i32, ptr %678, align 8
  %680 = getelementptr inbounds { i32, ptr }, ptr %57, i32 0, i32 1
  %681 = load ptr, ptr %680, align 8
  call void @List__add__Node____(ptr noundef %677, i32 %679, ptr %681)
  %682 = load ptr, ptr %8, align 8, !tbaa !5
  %683 = load ptr, ptr @mu_____string307, align 8
  %684 = load i32, ptr getelementptr inbounds ({ ptr, i32 }, ptr @mu_____string307, i32 0, i32 1), align 8
  call void @Parser__badToken__(ptr noundef %682, ptr %683, i32 %684)
  call void @llvm.lifetime.end.p0(i64 16, ptr %57) #5
  br label %685

685:                                              ; preds = %664, %642
  br label %717

686:                                              ; preds = %632
  %687 = load ptr, ptr %8, align 8, !tbaa !5
  %688 = getelementptr inbounds %struct.tag_____ParserState__, ptr %687, i32 0, i32 3
  %689 = load ptr, ptr %688, align 8, !tbaa !12
  %690 = getelementptr inbounds %struct.tag_____Token__, ptr %689, i32 0, i32 0
  %691 = load i32, ptr %690, align 8, !tbaa !20
  %692 = icmp eq i32 %691, 13
  br i1 %692, label %693, label %712

693:                                              ; preds = %686
  call void @llvm.lifetime.start.p0(i64 16, ptr %58) #5
  %694 = load ptr, ptr %8, align 8, !tbaa !5
  %695 = getelementptr inbounds %struct.tag_____ParserState__, ptr %694, i32 0, i32 3
  %696 = load ptr, ptr %695, align 8, !tbaa !12
  %697 = getelementptr inbounds %struct.Node__, ptr %58, i32 0, i32 1
  store ptr %696, ptr %697, align 8, !tbaa !31
  %698 = getelementptr inbounds %struct.Node__, ptr %58, i32 0, i32 1
  %699 = load ptr, ptr %698, align 8, !tbaa !31
  %700 = icmp ne ptr %699, null
  %701 = zext i1 %700 to i64
  %702 = select i1 %700, i32 21, i32 0
  %703 = getelementptr inbounds %struct.Node__, ptr %58, i32 0, i32 0
  store i32 %702, ptr %703, align 8, !tbaa !32
  %704 = load ptr, ptr %52, align 8, !tbaa !5
  %705 = getelementptr inbounds %struct.tag_____StructInitializerExpression__, ptr %704, i32 0, i32 3
  %706 = load ptr, ptr %705, align 8, !tbaa !42
  %707 = getelementptr inbounds { i32, ptr }, ptr %58, i32 0, i32 0
  %708 = load i32, ptr %707, align 8
  %709 = getelementptr inbounds { i32, ptr }, ptr %58, i32 0, i32 1
  %710 = load ptr, ptr %709, align 8
  call void @List__add__Node____(ptr noundef %706, i32 %708, ptr %710)
  %711 = load ptr, ptr %8, align 8, !tbaa !5
  call void @Parser__readToken__(ptr noundef %711)
  call void @llvm.lifetime.end.p0(i64 16, ptr %58) #5
  br label %716

712:                                              ; preds = %686
  %713 = load ptr, ptr %8, align 8, !tbaa !5
  %714 = load ptr, ptr @mu_____string77, align 8
  %715 = load i32, ptr getelementptr inbounds ({ ptr, i32 }, ptr @mu_____string77, i32 0, i32 1), align 8
  call void @Parser__expected__(ptr noundef %713, ptr %714, i32 %715)
  br label %716

716:                                              ; preds = %712, %693
  store i32 1, ptr %53, align 4, !tbaa !9
  br label %717

717:                                              ; preds = %716, %685
  store i32 0, ptr %21, align 4
  br label %718

718:                                              ; preds = %717, %631
  call void @llvm.lifetime.end.p0(i64 1, ptr %54) #5
  %719 = load i32, ptr %21, align 4
  switch i32 %719, label %1088 [
    i32 0, label %720
    i32 7, label %721
  ]

720:                                              ; preds = %718
  br label %604

721:                                              ; preds = %718
  call void @llvm.lifetime.start.p0(i64 1, ptr %59) #5
  %722 = load ptr, ptr %8, align 8, !tbaa !5
  %723 = getelementptr inbounds %struct.tag_____ParserState__, ptr %722, i32 0, i32 3
  %724 = load ptr, ptr %723, align 8, !tbaa !12
  %725 = getelementptr inbounds %struct.tag_____Token__, ptr %724, i32 0, i32 4
  %726 = load i32, ptr %725, align 8, !tbaa !16
  %727 = load ptr, ptr %8, align 8, !tbaa !5
  %728 = getelementptr inbounds %struct.tag_____ParserState__, ptr %727, i32 0, i32 5
  %729 = load i32, ptr %728, align 4, !tbaa !18
  %730 = icmp sge i32 %726, %729
  %731 = zext i1 %730 to i32
  %732 = trunc i32 %731 to i8
  store i8 %732, ptr %59, align 1, !tbaa !11
  %733 = load i8, ptr %59, align 1, !tbaa !11
  %734 = icmp ne i8 %733, 0
  br i1 %734, label %735, label %744

735:                                              ; preds = %721
  %736 = load ptr, ptr %8, align 8, !tbaa !5
  %737 = getelementptr inbounds %struct.tag_____ParserState__, ptr %736, i32 0, i32 3
  %738 = load ptr, ptr %737, align 8, !tbaa !12
  %739 = getelementptr inbounds %struct.tag_____Token__, ptr %738, i32 0, i32 0
  %740 = load i32, ptr %739, align 8, !tbaa !20
  %741 = icmp eq i32 %740, 8
  %742 = zext i1 %741 to i32
  %743 = trunc i32 %742 to i8
  store i8 %743, ptr %59, align 1, !tbaa !11
  br label %744

744:                                              ; preds = %735, %721
  %745 = load i8, ptr %59, align 1, !tbaa !11
  %746 = icmp ne i8 %745, 0
  br i1 %746, label %747, label %754

747:                                              ; preds = %744
  %748 = load ptr, ptr %8, align 8, !tbaa !5
  %749 = getelementptr inbounds %struct.tag_____ParserState__, ptr %748, i32 0, i32 3
  %750 = load ptr, ptr %749, align 8, !tbaa !12
  %751 = load ptr, ptr %52, align 8, !tbaa !5
  %752 = getelementptr inbounds %struct.tag_____StructInitializerExpression__, ptr %751, i32 0, i32 4
  store ptr %750, ptr %752, align 8, !tbaa !44
  %753 = load ptr, ptr %8, align 8, !tbaa !5
  call void @Parser__readToken__(ptr noundef %753)
  br label %758

754:                                              ; preds = %744
  %755 = load ptr, ptr %8, align 8, !tbaa !5
  %756 = load ptr, ptr @mu_____string308, align 8
  %757 = load i32, ptr getelementptr inbounds ({ ptr, i32 }, ptr @mu_____string308, i32 0, i32 1), align 8
  call void @Parser__expected__(ptr noundef %755, ptr %756, i32 %757)
  br label %758

758:                                              ; preds = %754, %747
  call void @llvm.lifetime.start.p0(i64 16, ptr %60) #5
  %759 = load ptr, ptr %52, align 8, !tbaa !5
  %760 = getelementptr inbounds %struct.Node__, ptr %60, i32 0, i32 1
  store ptr %759, ptr %760, align 8, !tbaa !31
  %761 = getelementptr inbounds %struct.Node__, ptr %60, i32 0, i32 1
  %762 = load ptr, ptr %761, align 8, !tbaa !31
  %763 = icmp ne ptr %762, null
  %764 = zext i1 %763 to i64
  %765 = select i1 %763, i32 15, i32 0
  %766 = getelementptr inbounds %struct.Node__, ptr %60, i32 0, i32 0
  store i32 %765, ptr %766, align 8, !tbaa !32
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %7, ptr align 8 %60, i64 16, i1 false), !tbaa.struct !19
  call void @llvm.lifetime.end.p0(i64 16, ptr %60) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %59) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %51) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %49) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #5
  call void @llvm.lifetime.end.p0(i64 48, ptr %47) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #5
  br label %768

767:                                              ; preds = %565
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %6, ptr align 8 %7, i64 16, i1 false), !tbaa.struct !19
  store i32 1, ptr %21, align 4
  br label %769

768:                                              ; preds = %758
  store i32 0, ptr %21, align 4
  br label %769

769:                                              ; preds = %768, %767
  call void @llvm.lifetime.end.p0(i64 1, ptr %45) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %44) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %42) #5
  %770 = load i32, ptr %21, align 4
  switch i32 %770, label %1071 [
    i32 0, label %771
  ]

771:                                              ; preds = %769
  br label %1070

772:                                              ; preds = %519
  %773 = load ptr, ptr %8, align 8, !tbaa !5
  %774 = getelementptr inbounds %struct.tag_____ParserState__, ptr %773, i32 0, i32 3
  %775 = load ptr, ptr %774, align 8, !tbaa !12
  %776 = getelementptr inbounds %struct.tag_____Token__, ptr %775, i32 0, i32 0
  %777 = load i32, ptr %776, align 8, !tbaa !20
  %778 = icmp eq i32 %777, 4
  br i1 %778, label %779, label %1068

779:                                              ; preds = %772
  call void @llvm.lifetime.start.p0(i64 4, ptr %61) #5
  %780 = load ptr, ptr %8, align 8, !tbaa !5
  %781 = getelementptr inbounds %struct.tag_____ParserState__, ptr %780, i32 0, i32 3
  %782 = load ptr, ptr %781, align 8, !tbaa !12
  %783 = getelementptr inbounds %struct.tag_____Token__, ptr %782, i32 0, i32 1
  %784 = getelementptr inbounds { ptr, i32 }, ptr %783, i32 0, i32 0
  %785 = load ptr, ptr %784, align 8
  %786 = getelementptr inbounds { ptr, i32 }, ptr %783, i32 0, i32 1
  %787 = load i32, ptr %786, align 8
  %788 = call i32 @Parser__getBindingLevel__(ptr %785, i32 %787)
  store i32 %788, ptr %61, align 4, !tbaa !9
  %789 = load i32, ptr %61, align 4, !tbaa !9
  %790 = load i32, ptr %9, align 4, !tbaa !9
  %791 = icmp slt i32 %789, %790
  br i1 %791, label %792, label %793

792:                                              ; preds = %779
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %6, ptr align 8 %7, i64 16, i1 false), !tbaa.struct !19
  store i32 1, ptr %21, align 4
  br label %1065

793:                                              ; preds = %779
  %794 = load ptr, ptr %8, align 8, !tbaa !5
  %795 = getelementptr inbounds %struct.tag_____ParserState__, ptr %794, i32 0, i32 3
  %796 = load ptr, ptr %795, align 8, !tbaa !12
  %797 = getelementptr inbounds %struct.tag_____Token__, ptr %796, i32 0, i32 1
  %798 = getelementptr inbounds { ptr, i32 }, ptr %797, i32 0, i32 0
  %799 = load ptr, ptr %798, align 8
  %800 = getelementptr inbounds { ptr, i32 }, ptr %797, i32 0, i32 1
  %801 = load i32, ptr %800, align 8
  %802 = load ptr, ptr @mu_____string72, align 8
  %803 = load i32, ptr getelementptr inbounds ({ ptr, i32 }, ptr @mu_____string72, i32 0, i32 1), align 8
  %804 = call zeroext i8 @string__equals__(ptr %799, i32 %801, ptr %802, i32 %803)
  %805 = icmp ne i8 %804, 0
  br i1 %805, label %806, label %906

806:                                              ; preds = %793
  call void @llvm.lifetime.start.p0(i64 8, ptr %62) #5
  %807 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @top_____currentAllocator__)
  %808 = getelementptr inbounds %struct.tag_____IAllocator__, ptr %807, i32 0, i32 1
  %809 = load ptr, ptr %808, align 8, !tbaa !21
  %810 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @top_____currentAllocator__)
  %811 = getelementptr inbounds %struct.tag_____IAllocator__, ptr %810, i32 0, i32 0
  %812 = load ptr, ptr %811, align 8, !tbaa !23
  %813 = call ptr %809(ptr noundef %812, i64 noundef 64)
  store ptr %813, ptr %62, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 64, ptr %63) #5
  call void @llvm.memset.p0.i64(ptr align 8 %63, i8 0, i64 64, i1 false)
  %814 = getelementptr inbounds %struct.tag_____TernaryOperatorExpression__, ptr %63, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %814, ptr align 8 %7, i64 16, i1 false), !tbaa.struct !19
  %815 = load ptr, ptr %8, align 8, !tbaa !5
  %816 = getelementptr inbounds %struct.tag_____ParserState__, ptr %815, i32 0, i32 3
  %817 = load ptr, ptr %816, align 8, !tbaa !12
  %818 = getelementptr inbounds %struct.tag_____TernaryOperatorExpression__, ptr %63, i32 0, i32 1
  store ptr %817, ptr %818, align 8, !tbaa !45
  %819 = load ptr, ptr %62, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %819, ptr align 8 %63, i64 64, i1 false), !tbaa.struct !47
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #5
  %820 = load ptr, ptr %62, align 8, !tbaa !5
  store ptr %820, ptr %64, align 8, !tbaa !5
  %821 = load ptr, ptr %8, align 8, !tbaa !5
  call void @Parser__readToken__(ptr noundef %821)
  %822 = load ptr, ptr %64, align 8, !tbaa !5
  %823 = getelementptr inbounds %struct.tag_____TernaryOperatorExpression__, ptr %822, i32 0, i32 2
  call void @llvm.lifetime.start.p0(i64 16, ptr %65) #5
  %824 = load ptr, ptr %8, align 8, !tbaa !5
  %825 = load i8, ptr %10, align 1, !tbaa !11
  %826 = call { i32, ptr } @Parser__tryParseExpression__(ptr noundef %824, i32 noundef 10, i8 noundef zeroext %825)
  %827 = getelementptr inbounds { i32, ptr }, ptr %65, i32 0, i32 0
  %828 = extractvalue { i32, ptr } %826, 0
  store i32 %828, ptr %827, align 8
  %829 = getelementptr inbounds { i32, ptr }, ptr %65, i32 0, i32 1
  %830 = extractvalue { i32, ptr } %826, 1
  store ptr %830, ptr %829, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %823, ptr align 8 %65, i64 16, i1 false), !tbaa.struct !19
  call void @llvm.lifetime.end.p0(i64 16, ptr %65) #5
  %831 = load ptr, ptr %64, align 8, !tbaa !5
  %832 = getelementptr inbounds %struct.tag_____TernaryOperatorExpression__, ptr %831, i32 0, i32 2
  %833 = getelementptr inbounds %struct.Node__, ptr %832, i32 0, i32 1
  %834 = load ptr, ptr %833, align 8, !tbaa !48
  %835 = icmp ne ptr %834, null
  br i1 %835, label %836, label %893

836:                                              ; preds = %806
  call void @llvm.lifetime.start.p0(i64 1, ptr %66) #5
  %837 = load ptr, ptr %8, align 8, !tbaa !5
  %838 = getelementptr inbounds %struct.tag_____ParserState__, ptr %837, i32 0, i32 3
  %839 = load ptr, ptr %838, align 8, !tbaa !12
  %840 = getelementptr inbounds %struct.tag_____Token__, ptr %839, i32 0, i32 4
  %841 = load i32, ptr %840, align 8, !tbaa !16
  %842 = load ptr, ptr %8, align 8, !tbaa !5
  %843 = getelementptr inbounds %struct.tag_____ParserState__, ptr %842, i32 0, i32 5
  %844 = load i32, ptr %843, align 4, !tbaa !18
  %845 = icmp sgt i32 %841, %844
  %846 = zext i1 %845 to i32
  %847 = trunc i32 %846 to i8
  store i8 %847, ptr %66, align 1, !tbaa !11
  %848 = load i8, ptr %66, align 1, !tbaa !11
  %849 = icmp ne i8 %848, 0
  br i1 %849, label %850, label %859

850:                                              ; preds = %836
  %851 = load ptr, ptr %8, align 8, !tbaa !5
  %852 = getelementptr inbounds %struct.tag_____ParserState__, ptr %851, i32 0, i32 3
  %853 = load ptr, ptr %852, align 8, !tbaa !12
  %854 = getelementptr inbounds %struct.tag_____Token__, ptr %853, i32 0, i32 0
  %855 = load i32, ptr %854, align 8, !tbaa !20
  %856 = icmp eq i32 %855, 15
  %857 = zext i1 %856 to i32
  %858 = trunc i32 %857 to i8
  store i8 %858, ptr %66, align 1, !tbaa !11
  br label %859

859:                                              ; preds = %850, %836
  %860 = load i8, ptr %66, align 1, !tbaa !11
  %861 = icmp ne i8 %860, 0
  br i1 %861, label %862, label %888

862:                                              ; preds = %859
  %863 = load ptr, ptr %8, align 8, !tbaa !5
  %864 = getelementptr inbounds %struct.tag_____ParserState__, ptr %863, i32 0, i32 3
  %865 = load ptr, ptr %864, align 8, !tbaa !12
  %866 = load ptr, ptr %64, align 8, !tbaa !5
  %867 = getelementptr inbounds %struct.tag_____TernaryOperatorExpression__, ptr %866, i32 0, i32 3
  store ptr %865, ptr %867, align 8, !tbaa !49
  %868 = load ptr, ptr %8, align 8, !tbaa !5
  call void @Parser__readToken__(ptr noundef %868)
  %869 = load ptr, ptr %64, align 8, !tbaa !5
  %870 = getelementptr inbounds %struct.tag_____TernaryOperatorExpression__, ptr %869, i32 0, i32 4
  call void @llvm.lifetime.start.p0(i64 16, ptr %67) #5
  %871 = load ptr, ptr %8, align 8, !tbaa !5
  %872 = load i8, ptr %10, align 1, !tbaa !11
  %873 = call { i32, ptr } @Parser__tryParseExpression__(ptr noundef %871, i32 noundef 10, i8 noundef zeroext %872)
  %874 = getelementptr inbounds { i32, ptr }, ptr %67, i32 0, i32 0
  %875 = extractvalue { i32, ptr } %873, 0
  store i32 %875, ptr %874, align 8
  %876 = getelementptr inbounds { i32, ptr }, ptr %67, i32 0, i32 1
  %877 = extractvalue { i32, ptr } %873, 1
  store ptr %877, ptr %876, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %870, ptr align 8 %67, i64 16, i1 false), !tbaa.struct !19
  call void @llvm.lifetime.end.p0(i64 16, ptr %67) #5
  %878 = load ptr, ptr %64, align 8, !tbaa !5
  %879 = getelementptr inbounds %struct.tag_____TernaryOperatorExpression__, ptr %878, i32 0, i32 4
  %880 = getelementptr inbounds %struct.Node__, ptr %879, i32 0, i32 1
  %881 = load ptr, ptr %880, align 8, !tbaa !50
  %882 = icmp eq ptr %881, null
  br i1 %882, label %883, label %887

883:                                              ; preds = %862
  %884 = load ptr, ptr %8, align 8, !tbaa !5
  %885 = load ptr, ptr @mu_____string302, align 8
  %886 = load i32, ptr getelementptr inbounds ({ ptr, i32 }, ptr @mu_____string302, i32 0, i32 1), align 8
  call void @Parser__expected__(ptr noundef %884, ptr %885, i32 %886)
  br label %887

887:                                              ; preds = %883, %862
  br label %892

888:                                              ; preds = %859
  %889 = load ptr, ptr %8, align 8, !tbaa !5
  %890 = load ptr, ptr @mu_____string306, align 8
  %891 = load i32, ptr getelementptr inbounds ({ ptr, i32 }, ptr @mu_____string306, i32 0, i32 1), align 8
  call void @Parser__expected__(ptr noundef %889, ptr %890, i32 %891)
  br label %892

892:                                              ; preds = %888, %887
  call void @llvm.lifetime.end.p0(i64 1, ptr %66) #5
  br label %897

893:                                              ; preds = %806
  %894 = load ptr, ptr %8, align 8, !tbaa !5
  %895 = load ptr, ptr @mu_____string302, align 8
  %896 = load i32, ptr getelementptr inbounds ({ ptr, i32 }, ptr @mu_____string302, i32 0, i32 1), align 8
  call void @Parser__expected__(ptr noundef %894, ptr %895, i32 %896)
  br label %897

897:                                              ; preds = %893, %892
  call void @llvm.lifetime.start.p0(i64 16, ptr %68) #5
  %898 = load ptr, ptr %64, align 8, !tbaa !5
  %899 = getelementptr inbounds %struct.Node__, ptr %68, i32 0, i32 1
  store ptr %898, ptr %899, align 8, !tbaa !31
  %900 = getelementptr inbounds %struct.Node__, ptr %68, i32 0, i32 1
  %901 = load ptr, ptr %900, align 8, !tbaa !31
  %902 = icmp ne ptr %901, null
  %903 = zext i1 %902 to i64
  %904 = select i1 %902, i32 13, i32 0
  %905 = getelementptr inbounds %struct.Node__, ptr %68, i32 0, i32 0
  store i32 %904, ptr %905, align 8, !tbaa !32
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %7, ptr align 8 %68, i64 16, i1 false), !tbaa.struct !19
  call void @llvm.lifetime.end.p0(i64 16, ptr %68) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #5
  call void @llvm.lifetime.end.p0(i64 64, ptr %63) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #5
  br label %1064

906:                                              ; preds = %793
  %907 = load ptr, ptr %8, align 8, !tbaa !5
  %908 = getelementptr inbounds %struct.tag_____ParserState__, ptr %907, i32 0, i32 3
  %909 = load ptr, ptr %908, align 8, !tbaa !12
  %910 = getelementptr inbounds %struct.tag_____Token__, ptr %909, i32 0, i32 1
  %911 = getelementptr inbounds { ptr, i32 }, ptr %910, i32 0, i32 0
  %912 = load ptr, ptr %911, align 8
  %913 = getelementptr inbounds { ptr, i32 }, ptr %910, i32 0, i32 1
  %914 = load i32, ptr %913, align 8
  %915 = load ptr, ptr @mu_____string204, align 8
  %916 = load i32, ptr getelementptr inbounds ({ ptr, i32 }, ptr @mu_____string204, i32 0, i32 1), align 8
  %917 = call zeroext i8 @string__equals__(ptr %912, i32 %914, ptr %915, i32 %916)
  %918 = icmp ne i8 %917, 0
  br i1 %918, label %919, label %943

919:                                              ; preds = %906
  call void @llvm.lifetime.start.p0(i64 8, ptr %69) #5
  %920 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @top_____currentAllocator__)
  %921 = getelementptr inbounds %struct.tag_____IAllocator__, ptr %920, i32 0, i32 1
  %922 = load ptr, ptr %921, align 8, !tbaa !21
  %923 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @top_____currentAllocator__)
  %924 = getelementptr inbounds %struct.tag_____IAllocator__, ptr %923, i32 0, i32 0
  %925 = load ptr, ptr %924, align 8, !tbaa !23
  %926 = call ptr %922(ptr noundef %925, i64 noundef 24)
  store ptr %926, ptr %69, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr %70) #5
  call void @llvm.memset.p0.i64(ptr align 8 %70, i8 0, i64 24, i1 false)
  %927 = getelementptr inbounds %struct.tag_____PostfixUnaryOperatorExpression__, ptr %70, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %927, ptr align 8 %7, i64 16, i1 false), !tbaa.struct !19
  %928 = load ptr, ptr %8, align 8, !tbaa !5
  %929 = getelementptr inbounds %struct.tag_____ParserState__, ptr %928, i32 0, i32 3
  %930 = load ptr, ptr %929, align 8, !tbaa !12
  %931 = getelementptr inbounds %struct.tag_____PostfixUnaryOperatorExpression__, ptr %70, i32 0, i32 1
  store ptr %930, ptr %931, align 8, !tbaa !51
  %932 = load ptr, ptr %69, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %932, ptr align 8 %70, i64 24, i1 false), !tbaa.struct !53
  call void @llvm.lifetime.start.p0(i64 8, ptr %71) #5
  %933 = load ptr, ptr %69, align 8, !tbaa !5
  store ptr %933, ptr %71, align 8, !tbaa !5
  %934 = load ptr, ptr %8, align 8, !tbaa !5
  call void @Parser__readToken__(ptr noundef %934)
  call void @llvm.lifetime.start.p0(i64 16, ptr %72) #5
  %935 = load ptr, ptr %71, align 8, !tbaa !5
  %936 = getelementptr inbounds %struct.Node__, ptr %72, i32 0, i32 1
  store ptr %935, ptr %936, align 8, !tbaa !31
  %937 = getelementptr inbounds %struct.Node__, ptr %72, i32 0, i32 1
  %938 = load ptr, ptr %937, align 8, !tbaa !31
  %939 = icmp ne ptr %938, null
  %940 = zext i1 %939 to i64
  %941 = select i1 %939, i32 10, i32 0
  %942 = getelementptr inbounds %struct.Node__, ptr %72, i32 0, i32 0
  store i32 %941, ptr %942, align 8, !tbaa !32
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %7, ptr align 8 %72, i64 16, i1 false), !tbaa.struct !19
  call void @llvm.lifetime.end.p0(i64 16, ptr %72) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %70) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #5
  br label %1063

943:                                              ; preds = %906
  %944 = load ptr, ptr %8, align 8, !tbaa !5
  %945 = getelementptr inbounds %struct.tag_____ParserState__, ptr %944, i32 0, i32 3
  %946 = load ptr, ptr %945, align 8, !tbaa !12
  %947 = getelementptr inbounds %struct.tag_____Token__, ptr %946, i32 0, i32 1
  %948 = getelementptr inbounds { ptr, i32 }, ptr %947, i32 0, i32 0
  %949 = load ptr, ptr %948, align 8
  %950 = getelementptr inbounds { ptr, i32 }, ptr %947, i32 0, i32 1
  %951 = load i32, ptr %950, align 8
  %952 = load ptr, ptr @mu_____string71, align 8
  %953 = load i32, ptr getelementptr inbounds ({ ptr, i32 }, ptr @mu_____string71, i32 0, i32 1), align 8
  %954 = call zeroext i8 @string__equals__(ptr %949, i32 %951, ptr %952, i32 %953)
  %955 = icmp ne i8 %954, 0
  br i1 %955, label %956, label %1017

956:                                              ; preds = %943
  call void @llvm.lifetime.start.p0(i64 8, ptr %73) #5
  %957 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @top_____currentAllocator__)
  %958 = getelementptr inbounds %struct.tag_____IAllocator__, ptr %957, i32 0, i32 1
  %959 = load ptr, ptr %958, align 8, !tbaa !21
  %960 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @top_____currentAllocator__)
  %961 = getelementptr inbounds %struct.tag_____IAllocator__, ptr %960, i32 0, i32 0
  %962 = load ptr, ptr %961, align 8, !tbaa !23
  %963 = call ptr %959(ptr noundef %962, i64 noundef 32)
  store ptr %963, ptr %73, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %74) #5
  call void @llvm.memset.p0.i64(ptr align 8 %74, i8 0, i64 32, i1 false)
  %964 = getelementptr inbounds %struct.tag_____DotExpression__, ptr %74, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %964, ptr align 8 %7, i64 16, i1 false), !tbaa.struct !19
  %965 = load ptr, ptr %8, align 8, !tbaa !5
  %966 = getelementptr inbounds %struct.tag_____ParserState__, ptr %965, i32 0, i32 3
  %967 = load ptr, ptr %966, align 8, !tbaa !12
  %968 = getelementptr inbounds %struct.tag_____DotExpression__, ptr %74, i32 0, i32 0
  store ptr %967, ptr %968, align 8, !tbaa !54
  %969 = load ptr, ptr %73, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %969, ptr align 8 %74, i64 32, i1 false), !tbaa.struct !56
  call void @llvm.lifetime.start.p0(i64 8, ptr %75) #5
  %970 = load ptr, ptr %73, align 8, !tbaa !5
  store ptr %970, ptr %75, align 8, !tbaa !5
  %971 = load ptr, ptr %8, align 8, !tbaa !5
  call void @Parser__readToken__(ptr noundef %971)
  call void @llvm.lifetime.start.p0(i64 1, ptr %76) #5
  %972 = load ptr, ptr %8, align 8, !tbaa !5
  %973 = getelementptr inbounds %struct.tag_____ParserState__, ptr %972, i32 0, i32 3
  %974 = load ptr, ptr %973, align 8, !tbaa !12
  %975 = getelementptr inbounds %struct.tag_____Token__, ptr %974, i32 0, i32 4
  %976 = load i32, ptr %975, align 8, !tbaa !16
  %977 = load ptr, ptr %8, align 8, !tbaa !5
  %978 = getelementptr inbounds %struct.tag_____ParserState__, ptr %977, i32 0, i32 5
  %979 = load i32, ptr %978, align 4, !tbaa !18
  %980 = icmp sgt i32 %976, %979
  %981 = zext i1 %980 to i32
  %982 = trunc i32 %981 to i8
  store i8 %982, ptr %76, align 1, !tbaa !11
  %983 = load i8, ptr %76, align 1, !tbaa !11
  %984 = icmp ne i8 %983, 0
  br i1 %984, label %985, label %994

985:                                              ; preds = %956
  %986 = load ptr, ptr %8, align 8, !tbaa !5
  %987 = getelementptr inbounds %struct.tag_____ParserState__, ptr %986, i32 0, i32 3
  %988 = load ptr, ptr %987, align 8, !tbaa !12
  %989 = getelementptr inbounds %struct.tag_____Token__, ptr %988, i32 0, i32 0
  %990 = load i32, ptr %989, align 8, !tbaa !20
  %991 = icmp eq i32 %990, 0
  %992 = zext i1 %991 to i32
  %993 = trunc i32 %992 to i8
  store i8 %993, ptr %76, align 1, !tbaa !11
  br label %994

994:                                              ; preds = %985, %956
  %995 = load i8, ptr %76, align 1, !tbaa !11
  %996 = icmp ne i8 %995, 0
  br i1 %996, label %997, label %1004

997:                                              ; preds = %994
  %998 = load ptr, ptr %8, align 8, !tbaa !5
  %999 = getelementptr inbounds %struct.tag_____ParserState__, ptr %998, i32 0, i32 3
  %1000 = load ptr, ptr %999, align 8, !tbaa !12
  %1001 = load ptr, ptr %75, align 8, !tbaa !5
  %1002 = getelementptr inbounds %struct.tag_____DotExpression__, ptr %1001, i32 0, i32 2
  store ptr %1000, ptr %1002, align 8, !tbaa !57
  %1003 = load ptr, ptr %8, align 8, !tbaa !5
  call void @Parser__readToken__(ptr noundef %1003)
  br label %1008

1004:                                             ; preds = %994
  %1005 = load ptr, ptr %8, align 8, !tbaa !5
  %1006 = load ptr, ptr @mu_____string297, align 8
  %1007 = load i32, ptr getelementptr inbounds ({ ptr, i32 }, ptr @mu_____string297, i32 0, i32 1), align 8
  call void @Parser__expected__(ptr noundef %1005, ptr %1006, i32 %1007)
  br label %1008

1008:                                             ; preds = %1004, %997
  call void @llvm.lifetime.start.p0(i64 16, ptr %77) #5
  %1009 = load ptr, ptr %75, align 8, !tbaa !5
  %1010 = getelementptr inbounds %struct.Node__, ptr %77, i32 0, i32 1
  store ptr %1009, ptr %1010, align 8, !tbaa !31
  %1011 = getelementptr inbounds %struct.Node__, ptr %77, i32 0, i32 1
  %1012 = load ptr, ptr %1011, align 8, !tbaa !31
  %1013 = icmp ne ptr %1012, null
  %1014 = zext i1 %1013 to i64
  %1015 = select i1 %1013, i32 11, i32 0
  %1016 = getelementptr inbounds %struct.Node__, ptr %77, i32 0, i32 0
  store i32 %1015, ptr %1016, align 8, !tbaa !32
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %7, ptr align 8 %77, i64 16, i1 false), !tbaa.struct !19
  call void @llvm.lifetime.end.p0(i64 16, ptr %77) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %76) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr %74) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #5
  br label %1062

1017:                                             ; preds = %943
  call void @llvm.lifetime.start.p0(i64 8, ptr %78) #5
  %1018 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @top_____currentAllocator__)
  %1019 = getelementptr inbounds %struct.tag_____IAllocator__, ptr %1018, i32 0, i32 1
  %1020 = load ptr, ptr %1019, align 8, !tbaa !21
  %1021 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @top_____currentAllocator__)
  %1022 = getelementptr inbounds %struct.tag_____IAllocator__, ptr %1021, i32 0, i32 0
  %1023 = load ptr, ptr %1022, align 8, !tbaa !23
  %1024 = call ptr %1020(ptr noundef %1023, i64 noundef 40)
  store ptr %1024, ptr %78, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 40, ptr %79) #5
  call void @llvm.memset.p0.i64(ptr align 8 %79, i8 0, i64 40, i1 false)
  %1025 = getelementptr inbounds %struct.tag_____BinaryOperatorExpression__, ptr %79, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %1025, ptr align 8 %7, i64 16, i1 false), !tbaa.struct !19
  %1026 = load ptr, ptr %8, align 8, !tbaa !5
  %1027 = getelementptr inbounds %struct.tag_____ParserState__, ptr %1026, i32 0, i32 3
  %1028 = load ptr, ptr %1027, align 8, !tbaa !12
  %1029 = getelementptr inbounds %struct.tag_____BinaryOperatorExpression__, ptr %79, i32 0, i32 0
  store ptr %1028, ptr %1029, align 8, !tbaa !58
  %1030 = load ptr, ptr %78, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %1030, ptr align 8 %79, i64 40, i1 false), !tbaa.struct !60
  call void @llvm.lifetime.start.p0(i64 8, ptr %80) #5
  %1031 = load ptr, ptr %78, align 8, !tbaa !5
  store ptr %1031, ptr %80, align 8, !tbaa !5
  %1032 = load ptr, ptr %8, align 8, !tbaa !5
  call void @Parser__readToken__(ptr noundef %1032)
  %1033 = load ptr, ptr %80, align 8, !tbaa !5
  %1034 = getelementptr inbounds %struct.tag_____BinaryOperatorExpression__, ptr %1033, i32 0, i32 2
  call void @llvm.lifetime.start.p0(i64 16, ptr %81) #5
  %1035 = load ptr, ptr %8, align 8, !tbaa !5
  %1036 = load i32, ptr %61, align 4, !tbaa !9
  %1037 = add nsw i32 %1036, 1
  %1038 = load i8, ptr %10, align 1, !tbaa !11
  %1039 = call { i32, ptr } @Parser__tryParseExpression__(ptr noundef %1035, i32 noundef %1037, i8 noundef zeroext %1038)
  %1040 = getelementptr inbounds { i32, ptr }, ptr %81, i32 0, i32 0
  %1041 = extractvalue { i32, ptr } %1039, 0
  store i32 %1041, ptr %1040, align 8
  %1042 = getelementptr inbounds { i32, ptr }, ptr %81, i32 0, i32 1
  %1043 = extractvalue { i32, ptr } %1039, 1
  store ptr %1043, ptr %1042, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %1034, ptr align 8 %81, i64 16, i1 false), !tbaa.struct !19
  call void @llvm.lifetime.end.p0(i64 16, ptr %81) #5
  %1044 = load ptr, ptr %80, align 8, !tbaa !5
  %1045 = getelementptr inbounds %struct.tag_____BinaryOperatorExpression__, ptr %1044, i32 0, i32 2
  %1046 = getelementptr inbounds %struct.Node__, ptr %1045, i32 0, i32 1
  %1047 = load ptr, ptr %1046, align 8, !tbaa !61
  %1048 = icmp eq ptr %1047, null
  br i1 %1048, label %1049, label %1053

1049:                                             ; preds = %1017
  %1050 = load ptr, ptr %8, align 8, !tbaa !5
  %1051 = load ptr, ptr @mu_____string302, align 8
  %1052 = load i32, ptr getelementptr inbounds ({ ptr, i32 }, ptr @mu_____string302, i32 0, i32 1), align 8
  call void @Parser__expected__(ptr noundef %1050, ptr %1051, i32 %1052)
  br label %1053

1053:                                             ; preds = %1049, %1017
  call void @llvm.lifetime.start.p0(i64 16, ptr %82) #5
  %1054 = load ptr, ptr %80, align 8, !tbaa !5
  %1055 = getelementptr inbounds %struct.Node__, ptr %82, i32 0, i32 1
  store ptr %1054, ptr %1055, align 8, !tbaa !31
  %1056 = getelementptr inbounds %struct.Node__, ptr %82, i32 0, i32 1
  %1057 = load ptr, ptr %1056, align 8, !tbaa !31
  %1058 = icmp ne ptr %1057, null
  %1059 = zext i1 %1058 to i64
  %1060 = select i1 %1058, i32 12, i32 0
  %1061 = getelementptr inbounds %struct.Node__, ptr %82, i32 0, i32 0
  store i32 %1060, ptr %1061, align 8, !tbaa !32
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %7, ptr align 8 %82, i64 16, i1 false), !tbaa.struct !19
  call void @llvm.lifetime.end.p0(i64 16, ptr %82) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %80) #5
  call void @llvm.lifetime.end.p0(i64 40, ptr %79) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #5
  br label %1062

1062:                                             ; preds = %1053, %1008
  br label %1063

1063:                                             ; preds = %1062, %919
  br label %1064

1064:                                             ; preds = %1063, %897
  store i32 0, ptr %21, align 4
  br label %1065

1065:                                             ; preds = %1064, %792
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #5
  %1066 = load i32, ptr %21, align 4
  switch i32 %1066, label %1071 [
    i32 0, label %1067
  ]

1067:                                             ; preds = %1065
  br label %1069

1068:                                             ; preds = %772
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %6, ptr align 8 %7, i64 16, i1 false), !tbaa.struct !19
  store i32 1, ptr %21, align 4
  br label %1071

1069:                                             ; preds = %1067
  br label %1070

1070:                                             ; preds = %1069, %771
  store i32 0, ptr %21, align 4
  br label %1071

1071:                                             ; preds = %1070, %1068, %1065, %769
  call void @llvm.lifetime.end.p0(i64 1, ptr %41) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %40) #5
  %1072 = load i32, ptr %21, align 4
  switch i32 %1072, label %1075 [
    i32 0, label %1073
  ]

1073:                                             ; preds = %1071
  br label %1074

1074:                                             ; preds = %1073, %496
  store i32 0, ptr %21, align 4
  br label %1075

1075:                                             ; preds = %1074, %1071
  call void @llvm.lifetime.end.p0(i64 1, ptr %34) #5
  %1076 = load i32, ptr %21, align 4
  switch i32 %1076, label %1079 [
    i32 0, label %1077
  ]

1077:                                             ; preds = %1075
  br label %1078

1078:                                             ; preds = %1077, %406
  store i32 0, ptr %21, align 4
  br label %1079

1079:                                             ; preds = %1078, %1075
  call void @llvm.lifetime.end.p0(i64 1, ptr %27) #5
  %1080 = load i32, ptr %21, align 4
  switch i32 %1080, label %1083 [
    i32 0, label %1081
  ]

1081:                                             ; preds = %1079
  br label %1082

1082:                                             ; preds = %1081, %308
  store i32 0, ptr %21, align 4
  br label %1083

1083:                                             ; preds = %1082, %1079
  call void @llvm.lifetime.end.p0(i64 1, ptr %11) #5
  %1084 = load i32, ptr %21, align 4
  switch i32 %1084, label %1088 [
    i32 0, label %1085
    i32 1, label %1086
  ]

1085:                                             ; preds = %1083
  br label %85

1086:                                             ; preds = %1083, %95
  %1087 = load { i32, ptr }, ptr %6, align 8
  ret { i32, ptr } %1087

1088:                                             ; preds = %1083, %718, %261
  unreachable
}

; Function Attrs: nounwind uwtable
declare dso_local ptr @Parser__parseFieldInitializerExpression__(ptr noundef) #4

; Function Attrs: nounwind uwtable
declare dso_local ptr @Parser__parseTypeArgsExpressionTail__(ptr noundef, i32, ptr) #4

; Function Attrs: nounwind uwtable
declare dso_local zeroext i8 @Parser__canParseTypeArgsExpressionTail__(ptr noundef) #4

; Function Attrs: nounwind uwtable
declare dso_local i32 @Parser__getBindingLevel__(ptr, i32) #4

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #2 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #3 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #4 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { nounwind }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!7, !7, i64 0}
!12 = !{!13, !6, i64 32}
!13 = !{!"tag_____ParserState__", !14, i64 0, !10, i64 16, !6, i64 24, !6, i64 32, !10, i64 40, !10, i64 44, !10, i64 48, !10, i64 52, !10, i64 56, !6, i64 64, !15, i64 72, !10, i64 80, !10, i64 84, !6, i64 88, !10, i64 96, !6, i64 104, !6, i64 112, !6, i64 120}
!14 = !{!"", !6, i64 0, !10, i64 8}
!15 = !{!"tag_____IntRange__", !10, i64 0, !10, i64 4}
!16 = !{!17, !10, i64 40}
!17 = !{!"tag_____Token__", !10, i64 0, !14, i64 8, !15, i64 24, !15, i64 32, !10, i64 40}
!18 = !{!13, !10, i64 44}
!19 = !{i64 0, i64 4, !9, i64 8, i64 8, !5}
!20 = !{!17, !10, i64 0}
!21 = !{!22, !6, i64 8}
!22 = !{!"tag_____IAllocator__", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!23 = !{!22, !6, i64 0}
!24 = !{!25, !6, i64 16}
!25 = !{!"tag_____CallExpression__", !26, i64 0, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48}
!26 = !{!"", !10, i64 0, !6, i64 8}
!27 = !{i64 0, i64 8, !5, i64 8, i64 4, !9, i64 12, i64 4, !9}
!28 = !{!25, !6, i64 24}
!29 = !{!25, !6, i64 32}
!30 = !{i64 0, i64 4, !9, i64 8, i64 8, !5, i64 16, i64 8, !5, i64 24, i64 8, !5, i64 32, i64 8, !5, i64 40, i64 8, !5, i64 48, i64 8, !5}
!31 = !{!26, !6, i64 8}
!32 = !{!26, !10, i64 0}
!33 = !{!25, !6, i64 40}
!34 = !{!35, !6, i64 16}
!35 = !{!"tag_____IndexExpression__", !26, i64 0, !6, i64 16, !26, i64 24, !6, i64 40}
!36 = !{i64 0, i64 4, !9, i64 8, i64 8, !5, i64 16, i64 8, !5, i64 24, i64 4, !9, i64 32, i64 8, !5, i64 40, i64 8, !5}
!37 = !{!35, !6, i64 32}
!38 = !{!35, !6, i64 40}
!39 = !{!40, !6, i64 16}
!40 = !{!"tag_____StructInitializerExpression__", !26, i64 0, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40}
!41 = !{!40, !6, i64 24}
!42 = !{!40, !6, i64 32}
!43 = !{i64 0, i64 4, !9, i64 8, i64 8, !5, i64 16, i64 8, !5, i64 24, i64 8, !5, i64 32, i64 8, !5, i64 40, i64 8, !5}
!44 = !{!40, !6, i64 40}
!45 = !{!46, !6, i64 16}
!46 = !{!"tag_____TernaryOperatorExpression__", !26, i64 0, !6, i64 16, !26, i64 24, !6, i64 40, !26, i64 48}
!47 = !{i64 0, i64 4, !9, i64 8, i64 8, !5, i64 16, i64 8, !5, i64 24, i64 4, !9, i64 32, i64 8, !5, i64 40, i64 8, !5, i64 48, i64 4, !9, i64 56, i64 8, !5}
!48 = !{!46, !6, i64 32}
!49 = !{!46, !6, i64 40}
!50 = !{!46, !6, i64 56}
!51 = !{!52, !6, i64 16}
!52 = !{!"tag_____PostfixUnaryOperatorExpression__", !26, i64 0, !6, i64 16}
!53 = !{i64 0, i64 4, !9, i64 8, i64 8, !5, i64 16, i64 8, !5}
!54 = !{!55, !6, i64 0}
!55 = !{!"tag_____DotExpression__", !6, i64 0, !26, i64 8, !6, i64 24}
!56 = !{i64 0, i64 8, !5, i64 8, i64 4, !9, i64 16, i64 8, !5, i64 24, i64 8, !5}
!57 = !{!55, !6, i64 24}
!58 = !{!59, !6, i64 0}
!59 = !{!"tag_____BinaryOperatorExpression__", !6, i64 0, !26, i64 8, !26, i64 24}
!60 = !{i64 0, i64 8, !5, i64 8, i64 4, !9, i64 16, i64 8, !5, i64 24, i64 4, !9, i64 32, i64 8, !5}
!61 = !{!59, !6, i64 32}


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct.string__ = type { ptr, i32 }
%struct.tag_____IAllocator__ = type { ptr, ptr, ptr, ptr }

@mu_____string304 = external dso_local local_unnamed_addr global %struct.string__, align 8
@mu_____string297 = external dso_local local_unnamed_addr global %struct.string__, align 8
@mu_____string306 = external dso_local local_unnamed_addr global %struct.string__, align 8
@mu_____string72 = external dso_local local_unnamed_addr global %struct.string__, align 8
@mu_____string308 = external dso_local local_unnamed_addr global %struct.string__, align 8
@mu_____string71 = external dso_local local_unnamed_addr global %struct.string__, align 8
@mu_____string77 = external dso_local local_unnamed_addr global %struct.string__, align 8
@mu_____string305 = external dso_local local_unnamed_addr global %struct.string__, align 8
@mu_____string303 = external dso_local local_unnamed_addr global %struct.string__, align 8
@mu_____string307 = external dso_local local_unnamed_addr global %struct.string__, align 8
@mu_____string204 = external dso_local local_unnamed_addr global %struct.string__, align 8
@mu_____string302 = external dso_local local_unnamed_addr global %struct.string__, align 8
@top_____currentAllocator__ = external dso_local thread_local local_unnamed_addr global %struct.tag_____IAllocator__, align 8

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare nonnull ptr @llvm.threadlocal.address.p0(ptr nonnull) #0

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #1

; Function Attrs: nounwind uwtable
declare dso_local zeroext i8 @string__equals__(ptr, i32, ptr, i32) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local void @List__add__Ptr__FieldInitializerExpression______(ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local void @List__add__Node____(ptr noundef, i32, ptr) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local void @Parser__readToken__(ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local { i32, ptr } @Parser__tryParseExpression__(ptr noundef, i32 noundef, i8 noundef zeroext) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local void @Parser__badToken__(ptr noundef, ptr, i32) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local void @Parser__expected__(ptr noundef, ptr, i32) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
define dso_local { i32, ptr } @Parser__parseExpressionTail__(ptr noundef %0, i32 %1, ptr %2, i32 noundef %3, i8 noundef zeroext %4) local_unnamed_addr #2 {
  %6 = getelementptr inbounds i8, ptr %0, i64 32
  %7 = getelementptr inbounds i8, ptr %0, i64 44
  %8 = load ptr, ptr %6, align 8, !tbaa !5
  %9 = getelementptr inbounds i8, ptr %8, i64 40
  %10 = load i32, ptr %9, align 8, !tbaa !13
  %11 = load i32, ptr %7, align 4, !tbaa !15
  %.not622 = icmp sgt i32 %10, %11
  br i1 %.not622, label %.lr.ph650, label %.thread566

.lr.ph650:                                        ; preds = %5
  %12 = icmp slt i32 %3, 26
  %.not374608 = icmp ne i8 %4, 0
  %13 = tail call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @top_____currentAllocator__)
  %14 = getelementptr inbounds i8, ptr %13, i64 8
  br label %15

15:                                               ; preds = %.lr.ph650, %.thread473
  %16 = phi ptr [ %8, %.lr.ph650 ], [ %269, %.thread473 ]
  %.sroa.38.0632 = phi ptr [ %2, %.lr.ph650 ], [ %.sroa.38.12, %.thread473 ]
  %.sroa.0287.0631 = phi i32 [ %1, %.lr.ph650 ], [ %.sroa.0287.12, %.thread473 ]
  %17 = load i32, ptr %16, align 8, !tbaa !16
  %18 = icmp eq i32 %17, 5
  %.not370.not = and i1 %12, %18
  br i1 %.not370.not, label %19, label %80

19:                                               ; preds = %15
  %20 = load ptr, ptr %14, align 8, !tbaa !17
  %21 = load ptr, ptr %13, align 8, !tbaa !19
  %22 = tail call ptr %20(ptr noundef %21, i64 noundef 56) #3
  %23 = load ptr, ptr %6, align 8, !tbaa !5
  %24 = load ptr, ptr %14, align 8, !tbaa !17
  %25 = load ptr, ptr %13, align 8, !tbaa !19
  %26 = tail call ptr %24(ptr noundef %25, i64 noundef 16) #3
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %26, i8 0, i64 16, i1 false)
  %27 = load ptr, ptr %14, align 8, !tbaa !17
  %28 = load ptr, ptr %13, align 8, !tbaa !19
  %29 = tail call ptr %27(ptr noundef %28, i64 noundef 16) #3
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %29, i8 0, i64 16, i1 false)
  store i32 %.sroa.0287.0631, ptr %22, align 8, !tbaa !20
  %.sroa.0181.sroa.6.0..0.186.sroa_idx = getelementptr inbounds i8, ptr %22, i64 8
  store ptr %.sroa.38.0632, ptr %.sroa.0181.sroa.6.0..0.186.sroa_idx, align 8, !tbaa !21
  %.sroa.5182.0..sroa_idx = getelementptr inbounds i8, ptr %22, i64 16
  store ptr %23, ptr %.sroa.5182.0..sroa_idx, align 8, !tbaa !21
  %.sroa.6183.0..sroa_idx = getelementptr inbounds i8, ptr %22, i64 24
  store ptr %26, ptr %.sroa.6183.0..sroa_idx, align 8, !tbaa !21
  %.sroa.7184.0..sroa_idx = getelementptr inbounds i8, ptr %22, i64 32
  store ptr %29, ptr %.sroa.7184.0..sroa_idx, align 8, !tbaa !21
  %.sroa.8185.0..sroa_idx = getelementptr inbounds i8, ptr %22, i64 40
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %.sroa.8185.0..sroa_idx, i8 0, i64 16, i1 false)
  tail call void @Parser__readToken__(ptr noundef nonnull %0)
  %30 = load ptr, ptr %6, align 8, !tbaa !5
  %31 = getelementptr inbounds i8, ptr %30, i64 40
  %32 = load i32, ptr %31, align 8, !tbaa !13
  %33 = load i32, ptr %7, align 4, !tbaa !15
  %34 = icmp sgt i32 %32, %33
  br i1 %34, label %.lr.ph619.preheader, label %.thread.thread

.lr.ph619.preheader:                              ; preds = %19
  %35 = load i32, ptr %30, align 8, !tbaa !16
  %.not600685 = icmp eq i32 %35, 6
  br i1 %.not600685, label %.thread, label %.lr.ph687

.lr.ph619:                                        ; preds = %59
  %36 = load i32, ptr %60, align 8, !tbaa !16
  %.not600 = icmp eq i32 %36, 6
  br i1 %.not600, label %.thread, label %.lr.ph687

.lr.ph687:                                        ; preds = %.lr.ph619.preheader, %.lr.ph619
  %37 = phi i32 [ %36, %.lr.ph619 ], [ %35, %.lr.ph619.preheader ]
  %.0332618686 = phi i32 [ %.3, %.lr.ph619 ], [ 0, %.lr.ph619.preheader ]
  %38 = phi ptr [ %60, %.lr.ph619 ], [ %30, %.lr.ph619.preheader ]
  %.not397 = icmp eq i32 %.0332618686, 2
  br i1 %.not397, label %52, label %39

39:                                               ; preds = %.lr.ph687
  %40 = tail call { i32, ptr } @Parser__tryParseExpression__(ptr noundef %0, i32 noundef 0, i8 noundef zeroext 1)
  %41 = extractvalue { i32, ptr } %40, 1
  %.not398 = icmp eq ptr %41, null
  br i1 %.not398, label %46, label %42

42:                                               ; preds = %39
  %43 = extractvalue { i32, ptr } %40, 0
  %44 = load ptr, ptr %.sroa.6183.0..sroa_idx, align 8, !tbaa !22
  tail call void @List__add__Node____(ptr noundef %44, i32 %43, ptr nonnull %41)
  %45 = load ptr, ptr %.sroa.7184.0..sroa_idx, align 8, !tbaa !25
  tail call void @List__add__Node____(ptr noundef %45, i32 %43, ptr nonnull %41)
  br label %59

46:                                               ; preds = %39
  %47 = load ptr, ptr %6, align 8, !tbaa !5
  %.not399 = icmp eq ptr %47, null
  %48 = select i1 %.not399, i32 0, i32 21
  %49 = load ptr, ptr %.sroa.7184.0..sroa_idx, align 8, !tbaa !25
  tail call void @List__add__Node____(ptr noundef %49, i32 %48, ptr %47)
  %50 = load ptr, ptr @mu_____string304, align 8
  %51 = load i32, ptr getelementptr inbounds (i8, ptr @mu_____string304, i64 8), align 8
  tail call void @Parser__badToken__(ptr noundef %0, ptr %50, i32 %51)
  br label %59

52:                                               ; preds = %.lr.ph687
  %53 = icmp eq i32 %37, 13
  br i1 %53, label %54, label %56

54:                                               ; preds = %52
  %55 = load ptr, ptr %.sroa.7184.0..sroa_idx, align 8, !tbaa !25
  tail call void @List__add__Node____(ptr noundef %55, i32 21, ptr nonnull %38)
  tail call void @Parser__readToken__(ptr noundef %0)
  br label %59

56:                                               ; preds = %52
  %57 = load ptr, ptr @mu_____string77, align 8
  %58 = load i32, ptr getelementptr inbounds (i8, ptr @mu_____string77, i64 8), align 8
  tail call void @Parser__expected__(ptr noundef %0, ptr %57, i32 %58)
  br label %59

59:                                               ; preds = %46, %42, %56, %54
  %.3 = phi i32 [ 2, %42 ], [ %.0332618686, %46 ], [ 1, %56 ], [ 1, %54 ]
  %60 = load ptr, ptr %6, align 8, !tbaa !5
  %61 = getelementptr inbounds i8, ptr %60, i64 40
  %62 = load i32, ptr %61, align 8, !tbaa !13
  %63 = load i32, ptr %7, align 4, !tbaa !15
  %64 = icmp sgt i32 %62, %63
  br i1 %64, label %.lr.ph619, label %.thread

.thread:                                          ; preds = %59, %.lr.ph619, %.lr.ph619.preheader
  %65 = phi i32 [ %33, %.lr.ph619.preheader ], [ %63, %.lr.ph619 ], [ %63, %59 ]
  %66 = phi ptr [ %30, %.lr.ph619.preheader ], [ %60, %.lr.ph619 ], [ %60, %59 ]
  %.0332.lcssa = phi i32 [ 0, %.lr.ph619.preheader ], [ %.3, %.lr.ph619 ], [ %.3, %59 ]
  %67 = icmp eq i32 %.0332.lcssa, 1
  br i1 %67, label %68, label %.thread.thread

68:                                               ; preds = %.thread
  %69 = load ptr, ptr @mu_____string302, align 8
  %70 = load i32, ptr getelementptr inbounds (i8, ptr @mu_____string302, i64 8), align 8
  tail call void @Parser__expected__(ptr noundef nonnull %0, ptr %69, i32 %70)
  %.pre663 = load ptr, ptr %6, align 8, !tbaa !5
  %.pre664 = load i32, ptr %7, align 4, !tbaa !15
  br label %.thread.thread

.thread.thread:                                   ; preds = %19, %68, %.thread
  %71 = phi i32 [ %.pre664, %68 ], [ %65, %.thread ], [ %33, %19 ]
  %72 = phi ptr [ %.pre663, %68 ], [ %66, %.thread ], [ %30, %19 ]
  %73 = getelementptr inbounds i8, ptr %72, i64 40
  %74 = load i32, ptr %73, align 8, !tbaa !13
  %.not400 = icmp slt i32 %74, %71
  br i1 %.not400, label %.thread415, label %75

75:                                               ; preds = %.thread.thread
  %76 = load i32, ptr %72, align 8, !tbaa !16
  %.not601 = icmp eq i32 %76, 6
  br i1 %.not601, label %77, label %.thread415

77:                                               ; preds = %75
  store ptr %72, ptr %.sroa.8185.0..sroa_idx, align 8, !tbaa !26
  tail call void @Parser__readToken__(ptr noundef nonnull %0)
  br label %.thread473

.thread415:                                       ; preds = %.thread.thread, %75
  %78 = load ptr, ptr @mu_____string303, align 8
  %79 = load i32, ptr getelementptr inbounds (i8, ptr @mu_____string303, i64 8), align 8
  tail call void @Parser__expected__(ptr noundef nonnull %0, ptr %78, i32 %79)
  br label %.thread473

80:                                               ; preds = %15
  %81 = icmp eq i32 %17, 9
  %.not371.not = and i1 %12, %81
  br i1 %.not371.not, label %82, label %105

82:                                               ; preds = %80
  %83 = load ptr, ptr %14, align 8, !tbaa !17
  %84 = load ptr, ptr %13, align 8, !tbaa !19
  %85 = tail call ptr %83(ptr noundef %84, i64 noundef 48) #3
  %86 = load ptr, ptr %6, align 8, !tbaa !5
  store i32 %.sroa.0287.0631, ptr %85, align 8, !tbaa !20
  %.sroa.0133.sroa.6.0..0.136.sroa_idx = getelementptr inbounds i8, ptr %85, i64 8
  store ptr %.sroa.38.0632, ptr %.sroa.0133.sroa.6.0..0.136.sroa_idx, align 8, !tbaa !21
  %.sroa.5134.0..sroa_idx = getelementptr inbounds i8, ptr %85, i64 16
  store ptr %86, ptr %.sroa.5134.0..sroa_idx, align 8, !tbaa !21
  %.sroa.6135.0..sroa_idx = getelementptr inbounds i8, ptr %85, i64 24
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %.sroa.6135.0..sroa_idx, i8 0, i64 24, i1 false)
  tail call void @Parser__readToken__(ptr noundef nonnull %0)
  %87 = tail call { i32, ptr } @Parser__tryParseExpression__(ptr noundef nonnull %0, i32 noundef 0, i8 noundef zeroext 1)
  %88 = extractvalue { i32, ptr } %87, 0
  %89 = extractvalue { i32, ptr } %87, 1
  store i32 %88, ptr %.sroa.6135.0..sroa_idx, align 8, !tbaa !20
  %.sroa.4128.0..sroa_idx = getelementptr inbounds i8, ptr %85, i64 32
  store ptr %89, ptr %.sroa.4128.0..sroa_idx, align 8, !tbaa !21
  %90 = icmp eq ptr %89, null
  br i1 %90, label %91, label %94

91:                                               ; preds = %82
  %92 = load ptr, ptr @mu_____string302, align 8
  %93 = load i32, ptr getelementptr inbounds (i8, ptr @mu_____string302, i64 8), align 8
  tail call void @Parser__expected__(ptr noundef nonnull %0, ptr %92, i32 %93)
  br label %94

94:                                               ; preds = %91, %82
  %95 = load ptr, ptr %6, align 8, !tbaa !5
  %96 = getelementptr inbounds i8, ptr %95, i64 40
  %97 = load i32, ptr %96, align 8, !tbaa !13
  %98 = load i32, ptr %7, align 4, !tbaa !15
  %.not394 = icmp slt i32 %97, %98
  br i1 %.not394, label %.thread418, label %99

99:                                               ; preds = %94
  %100 = load i32, ptr %95, align 8, !tbaa !16
  %.not604 = icmp eq i32 %100, 10
  br i1 %.not604, label %101, label %.thread418

101:                                              ; preds = %99
  %102 = getelementptr inbounds i8, ptr %85, i64 40
  store ptr %95, ptr %102, align 8, !tbaa !27
  tail call void @Parser__readToken__(ptr noundef nonnull %0)
  br label %.thread473

.thread418:                                       ; preds = %94, %99
  %103 = load ptr, ptr @mu_____string305, align 8
  %104 = load i32, ptr getelementptr inbounds (i8, ptr @mu_____string305, i64 8), align 8
  tail call void @Parser__expected__(ptr noundef nonnull %0, ptr %103, i32 %104)
  br label %.thread473

105:                                              ; preds = %80
  %106 = icmp eq i32 %17, 11
  %.not372.not = and i1 %12, %106
  br i1 %.not372.not, label %107, label %115

107:                                              ; preds = %105
  switch i32 %.sroa.0287.0631, label %.thread427 [
    i32 21, label %108
    i32 11, label %.thread425
  ]

108:                                              ; preds = %107
  %109 = load i32, ptr %.sroa.38.0632, align 8, !tbaa !16
  %.fr = freeze i32 %109
  %.not607 = icmp eq i32 %.fr, 0
  br i1 %.not607, label %.thread425, label %.thread427

.thread425:                                       ; preds = %107, %108
  %110 = tail call zeroext i8 @Parser__canParseTypeArgsExpressionTail__(ptr noundef %0)
  %.not392 = icmp eq i8 %110, 0
  br i1 %.not392, label %.thread425..thread427_crit_edge, label %111

.thread425..thread427_crit_edge:                  ; preds = %.thread425
  %.pre662 = load ptr, ptr %6, align 8, !tbaa !5
  br label %.thread427

111:                                              ; preds = %.thread425
  %112 = tail call ptr @Parser__parseTypeArgsExpressionTail__(ptr noundef %0, i32 %.sroa.0287.0631, ptr %.sroa.38.0632)
  %.not393 = icmp eq ptr %112, null
  %113 = select i1 %.not393, i32 0, i32 4
  br label %.thread473

.thread427:                                       ; preds = %107, %108, %.thread425..thread427_crit_edge
  %114 = phi ptr [ %.pre662, %.thread425..thread427_crit_edge ], [ %16, %108 ], [ %16, %107 ]
  store i32 4, ptr %114, align 8, !tbaa !16
  br label %.thread473

115:                                              ; preds = %105
  %116 = icmp eq i32 %17, 7
  %117 = and i1 %.not374608, %116
  %.not374.not = and i1 %12, %117
  br i1 %.not374.not, label %118, label %178

118:                                              ; preds = %115
  %119 = icmp eq i32 %.sroa.0287.0631, 21
  br i1 %119, label %122, label %.thread431

.thread431:                                       ; preds = %118
  %120 = icmp eq i32 %.sroa.0287.0631, 3
  %121 = zext i1 %120 to i8
  br label %124

122:                                              ; preds = %118
  %123 = load i32, ptr %.sroa.38.0632, align 8, !tbaa !16
  %.fr609 = freeze i32 %123
  %.not610 = icmp eq i32 %.fr609, 0
  br i1 %.not610, label %.thread440, label %124

124:                                              ; preds = %122, %.thread431
  %125 = phi i8 [ %121, %.thread431 ], [ 0, %122 ]
  %.fr611 = freeze i8 %125
  %.not383 = icmp eq i8 %.fr611, 0
  %126 = icmp ne i32 %.sroa.0287.0631, 4
  %or.cond = select i1 %.not383, i1 %126, i1 false
  br i1 %or.cond, label %.thread566, label %.thread440

.thread440:                                       ; preds = %122, %124
  %127 = load ptr, ptr %14, align 8, !tbaa !17
  %128 = load ptr, ptr %13, align 8, !tbaa !19
  %129 = tail call ptr %127(ptr noundef %128, i64 noundef 48) #3
  %130 = load ptr, ptr %6, align 8, !tbaa !5
  %131 = load ptr, ptr %14, align 8, !tbaa !17
  %132 = load ptr, ptr %13, align 8, !tbaa !19
  %133 = tail call ptr %131(ptr noundef %132, i64 noundef 16) #3
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %133, i8 0, i64 16, i1 false)
  %134 = load ptr, ptr %14, align 8, !tbaa !17
  %135 = load ptr, ptr %13, align 8, !tbaa !19
  %136 = tail call ptr %134(ptr noundef %135, i64 noundef 16) #3
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %136, i8 0, i64 16, i1 false)
  store i32 %.sroa.0287.0631, ptr %129, align 8, !tbaa !20
  %.sroa.089.sroa.6.0..0.92.sroa_idx = getelementptr inbounds i8, ptr %129, i64 8
  store ptr %.sroa.38.0632, ptr %.sroa.089.sroa.6.0..0.92.sroa_idx, align 8, !tbaa !21
  %.sroa.590.0..sroa_idx = getelementptr inbounds i8, ptr %129, i64 16
  store ptr %130, ptr %.sroa.590.0..sroa_idx, align 8, !tbaa !21
  %.sroa.691.0..sroa_idx = getelementptr inbounds i8, ptr %129, i64 24
  store ptr %133, ptr %.sroa.691.0..sroa_idx, align 8, !tbaa !21
  %.sroa.7.0..sroa_idx = getelementptr inbounds i8, ptr %129, i64 32
  store ptr %136, ptr %.sroa.7.0..sroa_idx, align 8, !tbaa !21
  %.sroa.8.0..sroa_idx = getelementptr inbounds i8, ptr %129, i64 40
  store ptr null, ptr %.sroa.8.0..sroa_idx, align 8, !tbaa !21
  tail call void @Parser__readToken__(ptr noundef nonnull %0)
  %137 = load ptr, ptr %6, align 8, !tbaa !5
  %138 = getelementptr inbounds i8, ptr %137, i64 40
  %139 = load i32, ptr %138, align 8, !tbaa !13
  %140 = load i32, ptr %7, align 4, !tbaa !15
  %141 = icmp sgt i32 %139, %140
  br i1 %141, label %.lr.ph.preheader, label %.thread444

.lr.ph.preheader:                                 ; preds = %.thread440
  %142 = load i32, ptr %137, align 8, !tbaa !16
  %.not612677 = icmp eq i32 %142, 8
  br i1 %.not612677, label %.thread444, label %.lr.ph679

.lr.ph:                                           ; preds = %164
  %143 = load i32, ptr %165, align 8, !tbaa !16
  %.not612 = icmp eq i32 %143, 8
  br i1 %.not612, label %.thread444, label %.lr.ph679

.lr.ph679:                                        ; preds = %.lr.ph.preheader, %.lr.ph
  %144 = phi i32 [ %143, %.lr.ph ], [ %142, %.lr.ph.preheader ]
  %.0349616678 = phi i32 [ %.2351, %.lr.ph ], [ 0, %.lr.ph.preheader ]
  %145 = phi ptr [ %165, %.lr.ph ], [ %137, %.lr.ph.preheader ]
  %.not386 = icmp eq i32 %.0349616678, 2
  br i1 %.not386, label %157, label %146

146:                                              ; preds = %.lr.ph679
  %147 = icmp eq i32 %144, 0
  br i1 %147, label %148, label %153

148:                                              ; preds = %146
  %149 = tail call ptr @Parser__parseFieldInitializerExpression__(ptr noundef %0)
  %150 = load ptr, ptr %.sroa.691.0..sroa_idx, align 8, !tbaa !29
  tail call void @List__add__Ptr__FieldInitializerExpression______(ptr noundef %150, ptr noundef %149)
  %.not387 = icmp eq ptr %149, null
  %151 = select i1 %.not387, i32 0, i32 16
  %152 = load ptr, ptr %.sroa.7.0..sroa_idx, align 8, !tbaa !31
  tail call void @List__add__Node____(ptr noundef %152, i32 %151, ptr %149)
  br label %164

153:                                              ; preds = %146
  %154 = load ptr, ptr %.sroa.7.0..sroa_idx, align 8, !tbaa !31
  tail call void @List__add__Node____(ptr noundef %154, i32 21, ptr nonnull %145)
  %155 = load ptr, ptr @mu_____string307, align 8
  %156 = load i32, ptr getelementptr inbounds (i8, ptr @mu_____string307, i64 8), align 8
  tail call void @Parser__badToken__(ptr noundef %0, ptr %155, i32 %156)
  br label %164

157:                                              ; preds = %.lr.ph679
  %158 = icmp eq i32 %144, 13
  br i1 %158, label %159, label %161

159:                                              ; preds = %157
  %160 = load ptr, ptr %.sroa.7.0..sroa_idx, align 8, !tbaa !31
  tail call void @List__add__Node____(ptr noundef %160, i32 21, ptr nonnull %145)
  tail call void @Parser__readToken__(ptr noundef %0)
  br label %164

161:                                              ; preds = %157
  %162 = load ptr, ptr @mu_____string77, align 8
  %163 = load i32, ptr getelementptr inbounds (i8, ptr @mu_____string77, i64 8), align 8
  tail call void @Parser__expected__(ptr noundef %0, ptr %162, i32 %163)
  br label %164

164:                                              ; preds = %153, %148, %161, %159
  %.2351 = phi i32 [ 2, %148 ], [ %.0349616678, %153 ], [ 1, %161 ], [ 1, %159 ]
  %165 = load ptr, ptr %6, align 8, !tbaa !5
  %166 = getelementptr inbounds i8, ptr %165, i64 40
  %167 = load i32, ptr %166, align 8, !tbaa !13
  %168 = load i32, ptr %7, align 4, !tbaa !15
  %169 = icmp sgt i32 %167, %168
  br i1 %169, label %.lr.ph, label %.thread444

.thread444:                                       ; preds = %164, %.lr.ph, %.lr.ph.preheader, %.thread440
  %170 = phi i32 [ %140, %.thread440 ], [ %140, %.lr.ph.preheader ], [ %168, %.lr.ph ], [ %168, %164 ]
  %171 = phi i32 [ %139, %.thread440 ], [ %139, %.lr.ph.preheader ], [ %167, %.lr.ph ], [ %167, %164 ]
  %172 = phi ptr [ %137, %.thread440 ], [ %137, %.lr.ph.preheader ], [ %165, %.lr.ph ], [ %165, %164 ]
  %.not388 = icmp slt i32 %171, %170
  br i1 %.not388, label %.thread452, label %173

173:                                              ; preds = %.thread444
  %174 = load i32, ptr %172, align 8, !tbaa !16
  %.not613 = icmp eq i32 %174, 8
  br i1 %.not613, label %175, label %.thread452

175:                                              ; preds = %173
  store ptr %172, ptr %.sroa.8.0..sroa_idx, align 8, !tbaa !32
  tail call void @Parser__readToken__(ptr noundef nonnull %0)
  br label %.thread473

.thread452:                                       ; preds = %.thread444, %173
  %176 = load ptr, ptr @mu_____string308, align 8
  %177 = load i32, ptr getelementptr inbounds (i8, ptr @mu_____string308, i64 8), align 8
  tail call void @Parser__expected__(ptr noundef nonnull %0, ptr %176, i32 %177)
  br label %.thread473

178:                                              ; preds = %115
  %179 = icmp eq i32 %17, 4
  br i1 %179, label %180, label %.thread566

180:                                              ; preds = %178
  %181 = getelementptr inbounds i8, ptr %16, i64 8
  %182 = load ptr, ptr %181, align 8
  %183 = getelementptr inbounds i8, ptr %16, i64 16
  %184 = load i32, ptr %183, align 8
  %185 = tail call i32 @Parser__getBindingLevel__(ptr %182, i32 %184)
  %.not381 = icmp slt i32 %185, %3
  br i1 %.not381, label %.thread566, label %186

186:                                              ; preds = %180
  %187 = load ptr, ptr %6, align 8, !tbaa !5
  %188 = getelementptr inbounds i8, ptr %187, i64 8
  %189 = load ptr, ptr %188, align 8
  %190 = getelementptr inbounds i8, ptr %187, i64 16
  %191 = load i32, ptr %190, align 8
  %192 = load ptr, ptr @mu_____string72, align 8
  %193 = load i32, ptr getelementptr inbounds (i8, ptr @mu_____string72, i64 8), align 8
  %194 = tail call zeroext i8 @string__equals__(ptr %189, i32 %191, ptr %192, i32 %193)
  %.not375 = icmp eq i8 %194, 0
  br i1 %.not375, label %220, label %195

195:                                              ; preds = %186
  %196 = load ptr, ptr %14, align 8, !tbaa !17
  %197 = load ptr, ptr %13, align 8, !tbaa !19
  %198 = tail call ptr %196(ptr noundef %197, i64 noundef 64) #3
  %199 = load ptr, ptr %6, align 8, !tbaa !5
  store i32 %.sroa.0287.0631, ptr %198, align 8, !tbaa !20
  %.sroa.050.sroa.6.0..0.53.sroa_idx = getelementptr inbounds i8, ptr %198, i64 8
  store ptr %.sroa.38.0632, ptr %.sroa.050.sroa.6.0..0.53.sroa_idx, align 8, !tbaa !21
  %.sroa.551.0..sroa_idx = getelementptr inbounds i8, ptr %198, i64 16
  store ptr %199, ptr %.sroa.551.0..sroa_idx, align 8, !tbaa !21
  %.sroa.652.0..sroa_idx = getelementptr inbounds i8, ptr %198, i64 24
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(40) %.sroa.652.0..sroa_idx, i8 0, i64 40, i1 false)
  tail call void @Parser__readToken__(ptr noundef nonnull %0)
  %200 = tail call { i32, ptr } @Parser__tryParseExpression__(ptr noundef nonnull %0, i32 noundef 10, i8 noundef zeroext %4)
  %201 = extractvalue { i32, ptr } %200, 0
  %202 = extractvalue { i32, ptr } %200, 1
  store i32 %201, ptr %.sroa.652.0..sroa_idx, align 8, !tbaa !20
  %.sroa.443.0..sroa_idx = getelementptr inbounds i8, ptr %198, i64 32
  store ptr %202, ptr %.sroa.443.0..sroa_idx, align 8, !tbaa !21
  %.not379 = icmp eq ptr %202, null
  br i1 %.not379, label %.sink.split, label %203

203:                                              ; preds = %195
  %204 = load ptr, ptr %6, align 8, !tbaa !5
  %205 = getelementptr inbounds i8, ptr %204, i64 40
  %206 = load i32, ptr %205, align 8, !tbaa !13
  %207 = load i32, ptr %7, align 4, !tbaa !15
  %208 = icmp sgt i32 %206, %207
  br i1 %208, label %209, label %.sink.split

209:                                              ; preds = %203
  %210 = load i32, ptr %204, align 8, !tbaa !16
  %.not614 = icmp eq i32 %210, 15
  br i1 %.not614, label %211, label %.sink.split

211:                                              ; preds = %209
  %212 = getelementptr inbounds i8, ptr %198, i64 40
  store ptr %204, ptr %212, align 8, !tbaa !33
  tail call void @Parser__readToken__(ptr noundef nonnull %0)
  %213 = getelementptr inbounds i8, ptr %198, i64 48
  %214 = tail call { i32, ptr } @Parser__tryParseExpression__(ptr noundef nonnull %0, i32 noundef 10, i8 noundef zeroext %4)
  %215 = extractvalue { i32, ptr } %214, 0
  %216 = extractvalue { i32, ptr } %214, 1
  store i32 %215, ptr %213, align 8, !tbaa !20
  %.sroa.438.0..sroa_idx = getelementptr inbounds i8, ptr %198, i64 56
  store ptr %216, ptr %.sroa.438.0..sroa_idx, align 8, !tbaa !21
  %217 = icmp eq ptr %216, null
  br i1 %217, label %.sink.split, label %.thread473

.sink.split:                                      ; preds = %195, %209, %203, %211
  %mu_____string306.sink = phi ptr [ @mu_____string302, %211 ], [ @mu_____string306, %203 ], [ @mu_____string306, %209 ], [ @mu_____string302, %195 ]
  %.sink673 = phi ptr [ getelementptr inbounds (i8, ptr @mu_____string302, i64 8), %211 ], [ getelementptr inbounds (i8, ptr @mu_____string306, i64 8), %203 ], [ getelementptr inbounds (i8, ptr @mu_____string306, i64 8), %209 ], [ getelementptr inbounds (i8, ptr @mu_____string302, i64 8), %195 ]
  %218 = load ptr, ptr %mu_____string306.sink, align 8
  %219 = load i32, ptr %.sink673, align 8
  tail call void @Parser__expected__(ptr noundef nonnull %0, ptr %218, i32 %219)
  br label %.thread473

220:                                              ; preds = %186
  %221 = load ptr, ptr %6, align 8, !tbaa !5
  %222 = getelementptr inbounds i8, ptr %221, i64 8
  %223 = load ptr, ptr %222, align 8
  %224 = getelementptr inbounds i8, ptr %221, i64 16
  %225 = load i32, ptr %224, align 8
  %226 = load ptr, ptr @mu_____string204, align 8
  %227 = load i32, ptr getelementptr inbounds (i8, ptr @mu_____string204, i64 8), align 8
  %228 = tail call zeroext i8 @string__equals__(ptr %223, i32 %225, ptr %226, i32 %227)
  %.not376 = icmp eq i8 %228, 0
  br i1 %.not376, label %234, label %229

229:                                              ; preds = %220
  %230 = load ptr, ptr %14, align 8, !tbaa !17
  %231 = load ptr, ptr %13, align 8, !tbaa !19
  %232 = tail call ptr %230(ptr noundef %231, i64 noundef 24) #3
  %233 = load ptr, ptr %6, align 8, !tbaa !5
  store i32 %.sroa.0287.0631, ptr %232, align 8, !tbaa !20
  %.sroa.029.sroa.6.0..0.31.sroa_idx = getelementptr inbounds i8, ptr %232, i64 8
  store ptr %.sroa.38.0632, ptr %.sroa.029.sroa.6.0..0.31.sroa_idx, align 8, !tbaa !21
  %.sroa.530.0..sroa_idx = getelementptr inbounds i8, ptr %232, i64 16
  store ptr %233, ptr %.sroa.530.0..sroa_idx, align 8, !tbaa !21
  tail call void @Parser__readToken__(ptr noundef nonnull %0)
  br label %.thread473

234:                                              ; preds = %220
  %235 = load ptr, ptr %6, align 8, !tbaa !5
  %236 = getelementptr inbounds i8, ptr %235, i64 8
  %237 = load ptr, ptr %236, align 8
  %238 = getelementptr inbounds i8, ptr %235, i64 16
  %239 = load i32, ptr %238, align 8
  %240 = load ptr, ptr @mu_____string71, align 8
  %241 = load i32, ptr getelementptr inbounds (i8, ptr @mu_____string71, i64 8), align 8
  %242 = tail call zeroext i8 @string__equals__(ptr %237, i32 %239, ptr %240, i32 %241)
  %.not377 = icmp eq i8 %242, 0
  %243 = load ptr, ptr %14, align 8, !tbaa !17
  %244 = load ptr, ptr %13, align 8, !tbaa !19
  br i1 %.not377, label %258, label %245

245:                                              ; preds = %234
  %246 = tail call ptr %243(ptr noundef %244, i64 noundef 32) #3
  %247 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %247, ptr %246, align 8, !tbaa !21
  %.sroa.521.0..sroa_idx = getelementptr inbounds i8, ptr %246, i64 8
  store i32 %.sroa.0287.0631, ptr %.sroa.521.0..sroa_idx, align 8, !tbaa !20
  %.sroa.521.sroa.6.0..sroa.521.0..sroa_idx.sroa_idx = getelementptr inbounds i8, ptr %246, i64 16
  store ptr %.sroa.38.0632, ptr %.sroa.521.sroa.6.0..sroa.521.0..sroa_idx.sroa_idx, align 8, !tbaa !21
  %.sroa.622.0..sroa_idx = getelementptr inbounds i8, ptr %246, i64 24
  store ptr null, ptr %.sroa.622.0..sroa_idx, align 8, !tbaa !21
  tail call void @Parser__readToken__(ptr noundef nonnull %0)
  %248 = load ptr, ptr %6, align 8, !tbaa !5
  %249 = getelementptr inbounds i8, ptr %248, i64 40
  %250 = load i32, ptr %249, align 8, !tbaa !13
  %251 = load i32, ptr %7, align 4, !tbaa !15
  %252 = icmp sgt i32 %250, %251
  br i1 %252, label %253, label %.thread469

253:                                              ; preds = %245
  %254 = load i32, ptr %248, align 8, !tbaa !16
  %.not615 = icmp eq i32 %254, 0
  br i1 %.not615, label %255, label %.thread469

255:                                              ; preds = %253
  store ptr %248, ptr %.sroa.622.0..sroa_idx, align 8, !tbaa !35
  tail call void @Parser__readToken__(ptr noundef nonnull %0)
  br label %.thread473

.thread469:                                       ; preds = %245, %253
  %256 = load ptr, ptr @mu_____string297, align 8
  %257 = load i32, ptr getelementptr inbounds (i8, ptr @mu_____string297, i64 8), align 8
  tail call void @Parser__expected__(ptr noundef nonnull %0, ptr %256, i32 %257)
  br label %.thread473

258:                                              ; preds = %234
  %259 = tail call ptr %243(ptr noundef %244, i64 noundef 40) #3
  %260 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %260, ptr %259, align 8, !tbaa !21
  %.sroa.5.0..sroa_idx = getelementptr inbounds i8, ptr %259, i64 8
  store i32 %.sroa.0287.0631, ptr %.sroa.5.0..sroa_idx, align 8, !tbaa !20
  %.sroa.5.sroa.6.0..sroa.5.0..sroa_idx.sroa_idx = getelementptr inbounds i8, ptr %259, i64 16
  store ptr %.sroa.38.0632, ptr %.sroa.5.sroa.6.0..sroa.5.0..sroa_idx.sroa_idx, align 8, !tbaa !21
  %.sroa.6.0..sroa_idx = getelementptr inbounds i8, ptr %259, i64 24
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %.sroa.6.0..sroa_idx, i8 0, i64 16, i1 false)
  tail call void @Parser__readToken__(ptr noundef nonnull %0)
  %261 = add nsw i32 %185, 1
  %262 = tail call { i32, ptr } @Parser__tryParseExpression__(ptr noundef nonnull %0, i32 noundef %261, i8 noundef zeroext %4)
  %263 = extractvalue { i32, ptr } %262, 0
  %264 = extractvalue { i32, ptr } %262, 1
  store i32 %263, ptr %.sroa.6.0..sroa_idx, align 8, !tbaa !20
  %.sroa.48.0..sroa_idx = getelementptr inbounds i8, ptr %259, i64 32
  store ptr %264, ptr %.sroa.48.0..sroa_idx, align 8, !tbaa !21
  %265 = icmp eq ptr %264, null
  br i1 %265, label %266, label %.thread473

266:                                              ; preds = %258
  %267 = load ptr, ptr @mu_____string302, align 8
  %268 = load i32, ptr getelementptr inbounds (i8, ptr @mu_____string302, i64 8), align 8
  tail call void @Parser__expected__(ptr noundef nonnull %0, ptr %267, i32 %268)
  br label %.thread473

.thread473:                                       ; preds = %.thread452, %175, %77, %.thread415, %211, %.sink.split, %258, %266, %101, %.thread418, %255, %.thread469, %229, %111, %.thread427
  %.sroa.0287.12 = phi i32 [ %113, %111 ], [ %.sroa.0287.0631, %.thread427 ], [ 10, %229 ], [ 11, %.thread469 ], [ 11, %255 ], [ 17, %.thread418 ], [ 17, %101 ], [ 12, %266 ], [ 12, %258 ], [ 13, %.sink.split ], [ 13, %211 ], [ 14, %.thread415 ], [ 14, %77 ], [ 15, %175 ], [ 15, %.thread452 ]
  %.sroa.38.12 = phi ptr [ %112, %111 ], [ %.sroa.38.0632, %.thread427 ], [ %232, %229 ], [ %246, %.thread469 ], [ %246, %255 ], [ %85, %.thread418 ], [ %85, %101 ], [ %259, %266 ], [ %259, %258 ], [ %198, %.sink.split ], [ %198, %211 ], [ %22, %.thread415 ], [ %22, %77 ], [ %129, %175 ], [ %129, %.thread452 ]
  %269 = load ptr, ptr %6, align 8, !tbaa !5
  %270 = getelementptr inbounds i8, ptr %269, i64 40
  %271 = load i32, ptr %270, align 8, !tbaa !13
  %272 = load i32, ptr %7, align 4, !tbaa !15
  %.not = icmp sgt i32 %271, %272
  br i1 %.not, label %15, label %.thread566

.thread566:                                       ; preds = %.thread473, %180, %178, %124, %5
  %.sroa.0287.0.lcssa = phi i32 [ %1, %5 ], [ %.sroa.0287.0631, %124 ], [ %.sroa.0287.0631, %178 ], [ %.sroa.0287.0631, %180 ], [ %.sroa.0287.12, %.thread473 ]
  %.sroa.38.0.lcssa = phi ptr [ %2, %5 ], [ %.sroa.38.0632, %124 ], [ %.sroa.38.0632, %178 ], [ %.sroa.38.0632, %180 ], [ %.sroa.38.12, %.thread473 ]
  %.fca.0.insert = insertvalue { i32, ptr } poison, i32 %.sroa.0287.0.lcssa, 0
  %.fca.1.insert = insertvalue { i32, ptr } %.fca.0.insert, ptr %.sroa.38.0.lcssa, 1
  ret { i32, ptr } %.fca.1.insert
}

; Function Attrs: nounwind uwtable
declare dso_local ptr @Parser__parseFieldInitializerExpression__(ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local ptr @Parser__parseTypeArgsExpressionTail__(ptr noundef, i32, ptr) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local zeroext i8 @Parser__canParseTypeArgsExpressionTail__(ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local i32 @Parser__getBindingLevel__(ptr, i32) local_unnamed_addr #2

attributes #0 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #1 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #2 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nounwind }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !8, i64 32}
!6 = !{!"tag_____ParserState__", !7, i64 0, !11, i64 16, !8, i64 24, !8, i64 32, !11, i64 40, !11, i64 44, !11, i64 48, !11, i64 52, !11, i64 56, !8, i64 64, !12, i64 72, !11, i64 80, !11, i64 84, !8, i64 88, !11, i64 96, !8, i64 104, !8, i64 112, !8, i64 120}
!7 = !{!"", !8, i64 0, !11, i64 8}
!8 = !{!"any pointer", !9, i64 0}
!9 = !{!"omnipotent char", !10, i64 0}
!10 = !{!"Simple C/C++ TBAA"}
!11 = !{!"int", !9, i64 0}
!12 = !{!"tag_____IntRange__", !11, i64 0, !11, i64 4}
!13 = !{!14, !11, i64 40}
!14 = !{!"tag_____Token__", !11, i64 0, !7, i64 8, !12, i64 24, !12, i64 32, !11, i64 40}
!15 = !{!6, !11, i64 44}
!16 = !{!14, !11, i64 0}
!17 = !{!18, !8, i64 8}
!18 = !{!"tag_____IAllocator__", !8, i64 0, !8, i64 8, !8, i64 16, !8, i64 24}
!19 = !{!18, !8, i64 0}
!20 = !{!11, !11, i64 0}
!21 = !{!8, !8, i64 0}
!22 = !{!23, !8, i64 24}
!23 = !{!"tag_____CallExpression__", !24, i64 0, !8, i64 16, !8, i64 24, !8, i64 32, !8, i64 40, !8, i64 48}
!24 = !{!"", !11, i64 0, !8, i64 8}
!25 = !{!23, !8, i64 32}
!26 = !{!23, !8, i64 40}
!27 = !{!28, !8, i64 40}
!28 = !{!"tag_____IndexExpression__", !24, i64 0, !8, i64 16, !24, i64 24, !8, i64 40}
!29 = !{!30, !8, i64 24}
!30 = !{!"tag_____StructInitializerExpression__", !24, i64 0, !8, i64 16, !8, i64 24, !8, i64 32, !8, i64 40}
!31 = !{!30, !8, i64 32}
!32 = !{!30, !8, i64 40}
!33 = !{!34, !8, i64 40}
!34 = !{!"tag_____TernaryOperatorExpression__", !24, i64 0, !8, i64 16, !24, i64 24, !8, i64 40, !24, i64 48}
!35 = !{!36, !8, i64 24}
!36 = !{!"tag_____DotExpression__", !8, i64 0, !24, i64 8, !8, i64 24}


; Effective O3 passes: BDCEPass,CorrelatedValuePropagationPass,DSEPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,MemCpyOptPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass