; LLVM IR from ponylang/ponyc :: src/libponyc/expr (lambda)

; 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.pass_opt_t = type { i32, i32, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i32, i64, i8, i8, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, %struct.typecheck_t, ptr, ptr }
%struct.typecheck_t = type { ptr, %struct.typecheck_stats_t, ptr }
%struct.typecheck_stats_t = type { i64, i64, i64, i64 }

@.str.1 = external hidden unnamed_addr constant [75 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [75 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [41 x i8], align 1
@__func__.expr_object = external hidden unnamed_addr constant [12 x i8], align 1

declare void @ponyint_assert_fail(ptr noundef, ptr noundef, i64 noundef, ptr noundef) #0

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

declare void @ast_get_children(ptr noundef, i64 noundef, ptr noundef) #0

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

declare ptr @ast_consumeannotation(ptr noundef) #0

declare i32 @ast_id(ptr noundef) #0

declare void @ast_replace(ptr noundef, ptr noundef) #0

declare ptr @ast_child(ptr noundef) #0

declare ptr @ast_childidx(ptr noundef, i64 noundef) #0

declare ptr @ast_sibling(ptr noundef) #0

declare void @ast_free_unattached(ptr noundef) #0

declare void @ast_error(ptr noundef, ptr noundef, ptr noundef, ...) #0

declare ptr @ast_from(ptr noundef, i32 noundef) #0

declare void @ast_clearflag(ptr noundef, i32 noundef) #0

declare ptr @ast_add(ptr noundef, ptr noundef) #0

declare ptr @ast_add_sibling(ptr noundef, ptr noundef) #0

declare void @ast_scope(ptr noundef) #0

declare void @ast_setannotation(ptr noundef, ptr noundef) #0

declare ptr @ast_from_string(ptr noundef, ptr noundef) #0

declare void @ast_inheritflags(ptr noundef) #0

declare ptr @ast_setdata(ptr noundef, ptr noundef) #0

declare ptr @stringtab(ptr noundef) #0

declare i32 @ast_visit(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef) #0

declare i32 @pass_syntax(ptr noundef, ptr noundef) #0

declare zeroext i1 @ast_passes_subtree(ptr noundef, ptr noundef, i32 noundef) #0

; Function Attrs: nounwind uwtable
define dso_local zeroext i1 @expr_object(ptr noundef %0, ptr noundef %1) #2 {
  %3 = alloca i1, align 1
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca i8, align 1
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca [4 x ptr], align 16
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  %26 = alloca ptr, align 8
  %27 = alloca ptr, align 8
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  %30 = alloca ptr, align 8
  %31 = alloca ptr, align 8
  %32 = alloca ptr, align 8
  %33 = alloca ptr, align 8
  %34 = alloca ptr, align 8
  %35 = alloca ptr, align 8
  %36 = alloca ptr, align 8
  %37 = alloca ptr, align 8
  %38 = alloca ptr, align 8
  %39 = alloca ptr, align 8
  %40 = alloca ptr, align 8
  %41 = alloca ptr, align 8
  %42 = alloca ptr, align 8
  %43 = alloca ptr, align 8
  %44 = alloca ptr, align 8
  %45 = alloca ptr, align 8
  %46 = alloca ptr, align 8
  %47 = alloca ptr, align 8
  %48 = alloca ptr, align 8
  %49 = alloca ptr, align 8
  %50 = alloca ptr, align 8
  %51 = alloca ptr, align 8
  %52 = alloca ptr, align 8
  %53 = alloca ptr, align 8
  %54 = alloca ptr, align 8
  %55 = alloca ptr, align 8
  %56 = alloca ptr, align 8
  %57 = alloca ptr, align 8
  %58 = alloca ptr, align 8
  %59 = alloca ptr, align 8
  %60 = alloca ptr, align 8
  %61 = alloca ptr, align 8
  %62 = alloca ptr, align 8
  %63 = alloca ptr, align 8
  %64 = alloca ptr, align 8
  %65 = alloca ptr, align 8
  %66 = alloca ptr, align 8
  %67 = alloca ptr, align 8
  %68 = alloca ptr, align 8
  %69 = alloca ptr, align 8
  %70 = alloca ptr, align 8
  %71 = alloca ptr, align 8
  %72 = alloca ptr, align 8
  %73 = alloca ptr, align 8
  %74 = alloca ptr, align 8
  %75 = alloca ptr, align 8
  %76 = alloca ptr, align 8
  %77 = alloca ptr, align 8
  %78 = alloca ptr, align 8
  %79 = alloca ptr, align 8
  %80 = alloca i8, align 1
  %81 = alloca i8, align 1
  %82 = alloca ptr, align 8
  %83 = alloca ptr, align 8
  %84 = alloca ptr, align 8
  %85 = alloca ptr, align 8
  %86 = alloca i32, align 4
  %87 = alloca ptr, align 8
  %88 = alloca i32, align 4
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #3
  %89 = load ptr, ptr %5, align 8, !tbaa !5
  %90 = load ptr, ptr %89, align 8, !tbaa !5
  store ptr %90, ptr %6, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %7) #3
  store i8 1, ptr %7, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #3
  call void @llvm.lifetime.start.p0(i64 32, ptr %11) #3
  store ptr %8, ptr %11, align 8, !tbaa !5
  %91 = getelementptr inbounds ptr, ptr %11, i64 1
  store ptr %9, ptr %91, align 8, !tbaa !5
  %92 = getelementptr inbounds ptr, ptr %11, i64 2
  store ptr %10, ptr %92, align 8, !tbaa !5
  %93 = getelementptr inbounds ptr, ptr %11, i64 3
  store ptr null, ptr %93, align 8, !tbaa !5
  %94 = load ptr, ptr %6, align 8, !tbaa !5
  %95 = getelementptr inbounds [4 x ptr], ptr %11, i64 0, i64 0
  call void @ast_get_children(ptr noundef %94, i64 noundef 3, ptr noundef %95)
  call void @llvm.lifetime.end.p0(i64 32, ptr %11) #3
  %96 = load ptr, ptr %8, align 8, !tbaa !5
  call void @ast_clearflag(ptr noundef %96, i32 noundef 8192)
  %97 = load ptr, ptr %9, align 8, !tbaa !5
  call void @ast_clearflag(ptr noundef %97, i32 noundef 8192)
  %98 = load ptr, ptr %10, align 8, !tbaa !5
  call void @ast_clearflag(ptr noundef %98, i32 noundef 8192)
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #3
  %99 = load ptr, ptr %6, align 8, !tbaa !5
  %100 = call ptr @ast_consumeannotation(ptr noundef %99)
  store ptr %100, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #3
  %101 = load ptr, ptr %4, align 8, !tbaa !5
  %102 = getelementptr inbounds %struct.pass_opt_t, ptr %101, i32 0, i32 36
  %103 = call ptr @package_hygienic_id(ptr noundef %102)
  store ptr %103, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #3
  %104 = load ptr, ptr %6, align 8, !tbaa !5
  call void @collect_type_params(ptr noundef %104, ptr noundef %14, ptr noundef %15)
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #3
  %105 = load ptr, ptr %6, align 8, !tbaa !5
  %106 = call ptr @ast_data(ptr noundef %105)
  store ptr %106, ptr %16, align 8, !tbaa !5
  %107 = load ptr, ptr %16, align 8, !tbaa !5
  %108 = icmp eq ptr %107, null
  br i1 %108, label %109, label %110

109:                                              ; preds = %2
  store ptr @.str.16, ptr %16, align 8, !tbaa !5
  br label %110

110:                                              ; preds = %109, %2
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #3
  %111 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %111, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #3
  store ptr null, ptr %19, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #3
  store ptr null, ptr %20, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #3
  store ptr null, ptr %21, align 8, !tbaa !5
  %112 = load ptr, ptr %18, align 8, !tbaa !5
  %113 = call ptr @ast_from(ptr noundef %112, i32 noundef 76)
  store ptr %113, ptr %21, align 8, !tbaa !5
  %114 = load ptr, ptr %19, align 8, !tbaa !5
  %115 = icmp eq ptr %114, null
  br i1 %115, label %116, label %118

116:                                              ; preds = %110
  %117 = load ptr, ptr %21, align 8, !tbaa !5
  store ptr %117, ptr %19, align 8, !tbaa !5
  br label %130

118:                                              ; preds = %110
  %119 = load ptr, ptr %20, align 8, !tbaa !5
  %120 = icmp eq ptr %119, null
  br i1 %120, label %121, label %125

121:                                              ; preds = %118
  %122 = load ptr, ptr %19, align 8, !tbaa !5
  %123 = load ptr, ptr %21, align 8, !tbaa !5
  %124 = call ptr @ast_add(ptr noundef %122, ptr noundef %123)
  store ptr %124, ptr %20, align 8, !tbaa !5
  br label %129

125:                                              ; preds = %118
  %126 = load ptr, ptr %20, align 8, !tbaa !5
  %127 = load ptr, ptr %21, align 8, !tbaa !5
  %128 = call ptr @ast_add_sibling(ptr noundef %126, ptr noundef %127)
  store ptr %128, ptr %20, align 8, !tbaa !5
  br label %129

129:                                              ; preds = %125, %121
  br label %130

130:                                              ; preds = %129, %116
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #3
  %131 = load ptr, ptr %21, align 8, !tbaa !5
  store ptr %131, ptr %22, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #3
  store ptr null, ptr %23, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #3
  store ptr null, ptr %24, align 8, !tbaa !5
  %132 = load ptr, ptr %22, align 8, !tbaa !5
  call void @ast_scope(ptr noundef %132)
  %133 = load ptr, ptr %22, align 8, !tbaa !5
  %134 = load ptr, ptr %12, align 8, !tbaa !5
  call void @ast_setannotation(ptr noundef %133, ptr noundef %134)
  %135 = load ptr, ptr %22, align 8, !tbaa !5
  %136 = icmp eq ptr %135, null
  br i1 %136, label %137, label %144

137:                                              ; preds = %130
  %138 = load ptr, ptr %18, align 8, !tbaa !5
  %139 = load ptr, ptr %13, align 8, !tbaa !5
  %140 = call ptr @ast_from_string(ptr noundef %138, ptr noundef %139)
  %141 = load ptr, ptr %16, align 8, !tbaa !5
  %142 = call ptr @stringtab(ptr noundef %141)
  %143 = call ptr @ast_setdata(ptr noundef %140, ptr noundef %142)
  store ptr %143, ptr %22, align 8, !tbaa !5
  br label %166

144:                                              ; preds = %130
  %145 = load ptr, ptr %23, align 8, !tbaa !5
  %146 = icmp eq ptr %145, null
  br i1 %146, label %147, label %156

147:                                              ; preds = %144
  %148 = load ptr, ptr %22, align 8, !tbaa !5
  %149 = load ptr, ptr %18, align 8, !tbaa !5
  %150 = load ptr, ptr %13, align 8, !tbaa !5
  %151 = call ptr @ast_from_string(ptr noundef %149, ptr noundef %150)
  %152 = load ptr, ptr %16, align 8, !tbaa !5
  %153 = call ptr @stringtab(ptr noundef %152)
  %154 = call ptr @ast_setdata(ptr noundef %151, ptr noundef %153)
  %155 = call ptr @ast_add(ptr noundef %148, ptr noundef %154)
  store ptr %155, ptr %23, align 8, !tbaa !5
  br label %165

156:                                              ; preds = %144
  %157 = load ptr, ptr %23, align 8, !tbaa !5
  %158 = load ptr, ptr %18, align 8, !tbaa !5
  %159 = load ptr, ptr %13, align 8, !tbaa !5
  %160 = call ptr @ast_from_string(ptr noundef %158, ptr noundef %159)
  %161 = load ptr, ptr %16, align 8, !tbaa !5
  %162 = call ptr @stringtab(ptr noundef %161)
  %163 = call ptr @ast_setdata(ptr noundef %160, ptr noundef %162)
  %164 = call ptr @ast_add_sibling(ptr noundef %157, ptr noundef %163)
  store ptr %164, ptr %23, align 8, !tbaa !5
  br label %165

165:                                              ; preds = %156, %147
  br label %166

166:                                              ; preds = %165, %137
  %167 = load ptr, ptr %22, align 8, !tbaa !5
  %168 = icmp eq ptr %167, null
  br i1 %168, label %169, label %171

169:                                              ; preds = %166
  %170 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %170, ptr %22, align 8, !tbaa !5
  br label %183

171:                                              ; preds = %166
  %172 = load ptr, ptr %23, align 8, !tbaa !5
  %173 = icmp eq ptr %172, null
  br i1 %173, label %174, label %178

174:                                              ; preds = %171
  %175 = load ptr, ptr %22, align 8, !tbaa !5
  %176 = load ptr, ptr %14, align 8, !tbaa !5
  %177 = call ptr @ast_add(ptr noundef %175, ptr noundef %176)
  store ptr %177, ptr %23, align 8, !tbaa !5
  br label %182

178:                                              ; preds = %171
  %179 = load ptr, ptr %23, align 8, !tbaa !5
  %180 = load ptr, ptr %14, align 8, !tbaa !5
  %181 = call ptr @ast_add_sibling(ptr noundef %179, ptr noundef %180)
  store ptr %181, ptr %23, align 8, !tbaa !5
  br label %182

182:                                              ; preds = %178, %174
  br label %183

183:                                              ; preds = %182, %169
  %184 = load ptr, ptr %22, align 8, !tbaa !5
  %185 = icmp eq ptr %184, null
  br i1 %185, label %186, label %189

186:                                              ; preds = %183
  %187 = load ptr, ptr %18, align 8, !tbaa !5
  %188 = call ptr @ast_from(ptr noundef %187, i32 noundef 2)
  store ptr %188, ptr %22, align 8, !tbaa !5
  br label %203

189:                                              ; preds = %183
  %190 = load ptr, ptr %23, align 8, !tbaa !5
  %191 = icmp eq ptr %190, null
  br i1 %191, label %192, label %197

192:                                              ; preds = %189
  %193 = load ptr, ptr %22, align 8, !tbaa !5
  %194 = load ptr, ptr %18, align 8, !tbaa !5
  %195 = call ptr @ast_from(ptr noundef %194, i32 noundef 2)
  %196 = call ptr @ast_add(ptr noundef %193, ptr noundef %195)
  store ptr %196, ptr %23, align 8, !tbaa !5
  br label %202

197:                                              ; preds = %189
  %198 = load ptr, ptr %23, align 8, !tbaa !5
  %199 = load ptr, ptr %18, align 8, !tbaa !5
  %200 = call ptr @ast_from(ptr noundef %199, i32 noundef 2)
  %201 = call ptr @ast_add_sibling(ptr noundef %198, ptr noundef %200)
  store ptr %201, ptr %23, align 8, !tbaa !5
  br label %202

202:                                              ; preds = %197, %192
  br label %203

203:                                              ; preds = %202, %186
  %204 = load ptr, ptr %22, align 8, !tbaa !5
  %205 = icmp eq ptr %204, null
  br i1 %205, label %206, label %208

206:                                              ; preds = %203
  %207 = load ptr, ptr %9, align 8, !tbaa !5
  store ptr %207, ptr %22, align 8, !tbaa !5
  br label %220

208:                                              ; preds = %203
  %209 = load ptr, ptr %23, align 8, !tbaa !5
  %210 = icmp eq ptr %209, null
  br i1 %210, label %211, label %215

211:                                              ; preds = %208
  %212 = load ptr, ptr %22, align 8, !tbaa !5
  %213 = load ptr, ptr %9, align 8, !tbaa !5
  %214 = call ptr @ast_add(ptr noundef %212, ptr noundef %213)
  store ptr %214, ptr %23, align 8, !tbaa !5
  br label %219

215:                                              ; preds = %208
  %216 = load ptr, ptr %23, align 8, !tbaa !5
  %217 = load ptr, ptr %9, align 8, !tbaa !5
  %218 = call ptr @ast_add_sibling(ptr noundef %216, ptr noundef %217)
  store ptr %218, ptr %23, align 8, !tbaa !5
  br label %219

219:                                              ; preds = %215, %211
  br label %220

220:                                              ; preds = %219, %206
  %221 = load ptr, ptr %18, align 8, !tbaa !5
  %222 = call ptr @ast_from(ptr noundef %221, i32 noundef 139)
  store ptr %222, ptr %24, align 8, !tbaa !5
  %223 = load ptr, ptr %22, align 8, !tbaa !5
  %224 = icmp eq ptr %223, null
  br i1 %224, label %225, label %227

225:                                              ; preds = %220
  %226 = load ptr, ptr %24, align 8, !tbaa !5
  store ptr %226, ptr %22, align 8, !tbaa !5
  br label %239

227:                                              ; preds = %220
  %228 = load ptr, ptr %23, align 8, !tbaa !5
  %229 = icmp eq ptr %228, null
  br i1 %229, label %230, label %234

230:                                              ; preds = %227
  %231 = load ptr, ptr %22, align 8, !tbaa !5
  %232 = load ptr, ptr %24, align 8, !tbaa !5
  %233 = call ptr @ast_add(ptr noundef %231, ptr noundef %232)
  store ptr %233, ptr %23, align 8, !tbaa !5
  br label %238

234:                                              ; preds = %227
  %235 = load ptr, ptr %23, align 8, !tbaa !5
  %236 = load ptr, ptr %24, align 8, !tbaa !5
  %237 = call ptr @ast_add_sibling(ptr noundef %235, ptr noundef %236)
  store ptr %237, ptr %23, align 8, !tbaa !5
  br label %238

238:                                              ; preds = %234, %230
  br label %239

239:                                              ; preds = %238, %225
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #3
  %240 = load ptr, ptr %24, align 8, !tbaa !5
  store ptr %240, ptr %25, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #3
  store ptr null, ptr %26, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #3
  store ptr null, ptr %27, align 8, !tbaa !5
  %241 = load ptr, ptr %25, align 8, !tbaa !5
  call void @ast_inheritflags(ptr noundef %241)
  %242 = load ptr, ptr %25, align 8, !tbaa !5
  %243 = load ptr, ptr %26, align 8, !tbaa !5
  %244 = load ptr, ptr %27, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #3
  %245 = load ptr, ptr %22, align 8, !tbaa !5
  %246 = icmp eq ptr %245, null
  br i1 %246, label %247, label %250

247:                                              ; preds = %239
  %248 = load ptr, ptr %18, align 8, !tbaa !5
  %249 = call ptr @ast_from(ptr noundef %248, i32 noundef 2)
  store ptr %249, ptr %22, align 8, !tbaa !5
  br label %264

250:                                              ; preds = %239
  %251 = load ptr, ptr %23, align 8, !tbaa !5
  %252 = icmp eq ptr %251, null
  br i1 %252, label %253, label %258

253:                                              ; preds = %250
  %254 = load ptr, ptr %22, align 8, !tbaa !5
  %255 = load ptr, ptr %18, align 8, !tbaa !5
  %256 = call ptr @ast_from(ptr noundef %255, i32 noundef 2)
  %257 = call ptr @ast_add(ptr noundef %254, ptr noundef %256)
  store ptr %257, ptr %23, align 8, !tbaa !5
  br label %263

258:                                              ; preds = %250
  %259 = load ptr, ptr %23, align 8, !tbaa !5
  %260 = load ptr, ptr %18, align 8, !tbaa !5
  %261 = call ptr @ast_from(ptr noundef %260, i32 noundef 2)
  %262 = call ptr @ast_add_sibling(ptr noundef %259, ptr noundef %261)
  store ptr %262, ptr %23, align 8, !tbaa !5
  br label %263

263:                                              ; preds = %258, %253
  br label %264

264:                                              ; preds = %263, %247
  %265 = load ptr, ptr %22, align 8, !tbaa !5
  %266 = icmp eq ptr %265, null
  br i1 %266, label %267, label %270

267:                                              ; preds = %264
  %268 = load ptr, ptr %18, align 8, !tbaa !5
  %269 = call ptr @ast_from(ptr noundef %268, i32 noundef 2)
  store ptr %269, ptr %22, align 8, !tbaa !5
  br label %284

270:                                              ; preds = %264
  %271 = load ptr, ptr %23, align 8, !tbaa !5
  %272 = icmp eq ptr %271, null
  br i1 %272, label %273, label %278

273:                                              ; preds = %270
  %274 = load ptr, ptr %22, align 8, !tbaa !5
  %275 = load ptr, ptr %18, align 8, !tbaa !5
  %276 = call ptr @ast_from(ptr noundef %275, i32 noundef 2)
  %277 = call ptr @ast_add(ptr noundef %274, ptr noundef %276)
  store ptr %277, ptr %23, align 8, !tbaa !5
  br label %283

278:                                              ; preds = %270
  %279 = load ptr, ptr %23, align 8, !tbaa !5
  %280 = load ptr, ptr %18, align 8, !tbaa !5
  %281 = call ptr @ast_from(ptr noundef %280, i32 noundef 2)
  %282 = call ptr @ast_add_sibling(ptr noundef %279, ptr noundef %281)
  store ptr %282, ptr %23, align 8, !tbaa !5
  br label %283

283:                                              ; preds = %278, %273
  br label %284

284:                                              ; preds = %283, %267
  %285 = load ptr, ptr %22, align 8, !tbaa !5
  call void @ast_inheritflags(ptr noundef %285)
  %286 = load ptr, ptr %22, align 8, !tbaa !5
  %287 = load ptr, ptr %23, align 8, !tbaa !5
  %288 = load ptr, ptr %24, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #3
  %289 = load ptr, ptr %19, align 8, !tbaa !5
  store ptr %289, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #3
  %290 = load ptr, ptr %10, align 8, !tbaa !5
  store ptr %290, ptr %29, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #3
  store ptr null, ptr %30, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #3
  store ptr null, ptr %31, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #3
  store ptr null, ptr %32, align 8, !tbaa !5
  %291 = load ptr, ptr %29, align 8, !tbaa !5
  %292 = call ptr @ast_from(ptr noundef %291, i32 noundef 88)
  store ptr %292, ptr %32, align 8, !tbaa !5
  %293 = load ptr, ptr %30, align 8, !tbaa !5
  %294 = icmp eq ptr %293, null
  br i1 %294, label %295, label %297

295:                                              ; preds = %284
  %296 = load ptr, ptr %32, align 8, !tbaa !5
  store ptr %296, ptr %30, align 8, !tbaa !5
  br label %309

297:                                              ; preds = %284
  %298 = load ptr, ptr %31, align 8, !tbaa !5
  %299 = icmp eq ptr %298, null
  br i1 %299, label %300, label %304

300:                                              ; preds = %297
  %301 = load ptr, ptr %30, align 8, !tbaa !5
  %302 = load ptr, ptr %32, align 8, !tbaa !5
  %303 = call ptr @ast_add(ptr noundef %301, ptr noundef %302)
  store ptr %303, ptr %31, align 8, !tbaa !5
  br label %308

304:                                              ; preds = %297
  %305 = load ptr, ptr %31, align 8, !tbaa !5
  %306 = load ptr, ptr %32, align 8, !tbaa !5
  %307 = call ptr @ast_add_sibling(ptr noundef %305, ptr noundef %306)
  store ptr %307, ptr %31, align 8, !tbaa !5
  br label %308

308:                                              ; preds = %304, %300
  br label %309

309:                                              ; preds = %308, %295
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #3
  %310 = load ptr, ptr %32, align 8, !tbaa !5
  store ptr %310, ptr %33, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #3
  store ptr null, ptr %34, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #3
  store ptr null, ptr %35, align 8, !tbaa !5
  %311 = load ptr, ptr %33, align 8, !tbaa !5
  call void @ast_scope(ptr noundef %311)
  %312 = load ptr, ptr %33, align 8, !tbaa !5
  %313 = icmp eq ptr %312, null
  br i1 %313, label %314, label %317

314:                                              ; preds = %309
  %315 = load ptr, ptr %29, align 8, !tbaa !5
  %316 = call ptr @ast_from(ptr noundef %315, i32 noundef 2)
  store ptr %316, ptr %33, align 8, !tbaa !5
  br label %331

317:                                              ; preds = %309
  %318 = load ptr, ptr %34, align 8, !tbaa !5
  %319 = icmp eq ptr %318, null
  br i1 %319, label %320, label %325

320:                                              ; preds = %317
  %321 = load ptr, ptr %33, align 8, !tbaa !5
  %322 = load ptr, ptr %29, align 8, !tbaa !5
  %323 = call ptr @ast_from(ptr noundef %322, i32 noundef 2)
  %324 = call ptr @ast_add(ptr noundef %321, ptr noundef %323)
  store ptr %324, ptr %34, align 8, !tbaa !5
  br label %330

325:                                              ; preds = %317
  %326 = load ptr, ptr %34, align 8, !tbaa !5
  %327 = load ptr, ptr %29, align 8, !tbaa !5
  %328 = call ptr @ast_from(ptr noundef %327, i32 noundef 2)
  %329 = call ptr @ast_add_sibling(ptr noundef %326, ptr noundef %328)
  store ptr %329, ptr %34, align 8, !tbaa !5
  br label %330

330:                                              ; preds = %325, %320
  br label %331

331:                                              ; preds = %330, %314
  %332 = load ptr, ptr %33, align 8, !tbaa !5
  %333 = icmp eq ptr %332, null
  br i1 %333, label %334, label %337

334:                                              ; preds = %331
  %335 = load ptr, ptr %29, align 8, !tbaa !5
  %336 = call ptr @ast_from_string(ptr noundef %335, ptr noundef @.str.17)
  store ptr %336, ptr %33, align 8, !tbaa !5
  br label %351

337:                                              ; preds = %331
  %338 = load ptr, ptr %34, align 8, !tbaa !5
  %339 = icmp eq ptr %338, null
  br i1 %339, label %340, label %345

340:                                              ; preds = %337
  %341 = load ptr, ptr %33, align 8, !tbaa !5
  %342 = load ptr, ptr %29, align 8, !tbaa !5
  %343 = call ptr @ast_from_string(ptr noundef %342, ptr noundef @.str.17)
  %344 = call ptr @ast_add(ptr noundef %341, ptr noundef %343)
  store ptr %344, ptr %34, align 8, !tbaa !5
  br label %350

345:                                              ; preds = %337
  %346 = load ptr, ptr %34, align 8, !tbaa !5
  %347 = load ptr, ptr %29, align 8, !tbaa !5
  %348 = call ptr @ast_from_string(ptr noundef %347, ptr noundef @.str.17)
  %349 = call ptr @ast_add_sibling(ptr noundef %346, ptr noundef %348)
  store ptr %349, ptr %34, align 8, !tbaa !5
  br label %350

350:                                              ; preds = %345, %340
  br label %351

351:                                              ; preds = %350, %334
  %352 = load ptr, ptr %33, align 8, !tbaa !5
  %353 = icmp eq ptr %352, null
  br i1 %353, label %354, label %357

354:                                              ; preds = %351
  %355 = load ptr, ptr %29, align 8, !tbaa !5
  %356 = call ptr @ast_from(ptr noundef %355, i32 noundef 2)
  store ptr %356, ptr %33, align 8, !tbaa !5
  br label %371

357:                                              ; preds = %351
  %358 = load ptr, ptr %34, align 8, !tbaa !5
  %359 = icmp eq ptr %358, null
  br i1 %359, label %360, label %365

360:                                              ; preds = %357
  %361 = load ptr, ptr %33, align 8, !tbaa !5
  %362 = load ptr, ptr %29, align 8, !tbaa !5
  %363 = call ptr @ast_from(ptr noundef %362, i32 noundef 2)
  %364 = call ptr @ast_add(ptr noundef %361, ptr noundef %363)
  store ptr %364, ptr %34, align 8, !tbaa !5
  br label %370

365:                                              ; preds = %357
  %366 = load ptr, ptr %34, align 8, !tbaa !5
  %367 = load ptr, ptr %29, align 8, !tbaa !5
  %368 = call ptr @ast_from(ptr noundef %367, i32 noundef 2)
  %369 = call ptr @ast_add_sibling(ptr noundef %366, ptr noundef %368)
  store ptr %369, ptr %34, align 8, !tbaa !5
  br label %370

370:                                              ; preds = %365, %360
  br label %371

371:                                              ; preds = %370, %354
  %372 = load ptr, ptr %29, align 8, !tbaa !5
  %373 = call ptr @ast_from(ptr noundef %372, i32 noundef 164)
  store ptr %373, ptr %35, align 8, !tbaa !5
  %374 = load ptr, ptr %33, align 8, !tbaa !5
  %375 = icmp eq ptr %374, null
  br i1 %375, label %376, label %378

376:                                              ; preds = %371
  %377 = load ptr, ptr %35, align 8, !tbaa !5
  store ptr %377, ptr %33, align 8, !tbaa !5
  br label %390

378:                                              ; preds = %371
  %379 = load ptr, ptr %34, align 8, !tbaa !5
  %380 = icmp eq ptr %379, null
  br i1 %380, label %381, label %385

381:                                              ; preds = %378
  %382 = load ptr, ptr %33, align 8, !tbaa !5
  %383 = load ptr, ptr %35, align 8, !tbaa !5
  %384 = call ptr @ast_add(ptr noundef %382, ptr noundef %383)
  store ptr %384, ptr %34, align 8, !tbaa !5
  br label %389

385:                                              ; preds = %378
  %386 = load ptr, ptr %34, align 8, !tbaa !5
  %387 = load ptr, ptr %35, align 8, !tbaa !5
  %388 = call ptr @ast_add_sibling(ptr noundef %386, ptr noundef %387)
  store ptr %388, ptr %34, align 8, !tbaa !5
  br label %389

389:                                              ; preds = %385, %381
  br label %390

390:                                              ; preds = %389, %376
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #3
  %391 = load ptr, ptr %35, align 8, !tbaa !5
  store ptr %391, ptr %36, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #3
  store ptr null, ptr %37, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #3
  store ptr null, ptr %38, align 8, !tbaa !5
  %392 = load ptr, ptr %36, align 8, !tbaa !5
  call void @ast_inheritflags(ptr noundef %392)
  %393 = load ptr, ptr %36, align 8, !tbaa !5
  %394 = load ptr, ptr %37, align 8, !tbaa !5
  %395 = load ptr, ptr %38, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #3
  %396 = load ptr, ptr %33, align 8, !tbaa !5
  %397 = icmp eq ptr %396, null
  br i1 %397, label %398, label %401

398:                                              ; preds = %390
  %399 = load ptr, ptr %29, align 8, !tbaa !5
  %400 = call ptr @ast_from(ptr noundef %399, i32 noundef 2)
  store ptr %400, ptr %33, align 8, !tbaa !5
  br label %415

401:                                              ; preds = %390
  %402 = load ptr, ptr %34, align 8, !tbaa !5
  %403 = icmp eq ptr %402, null
  br i1 %403, label %404, label %409

404:                                              ; preds = %401
  %405 = load ptr, ptr %33, align 8, !tbaa !5
  %406 = load ptr, ptr %29, align 8, !tbaa !5
  %407 = call ptr @ast_from(ptr noundef %406, i32 noundef 2)
  %408 = call ptr @ast_add(ptr noundef %405, ptr noundef %407)
  store ptr %408, ptr %34, align 8, !tbaa !5
  br label %414

409:                                              ; preds = %401
  %410 = load ptr, ptr %34, align 8, !tbaa !5
  %411 = load ptr, ptr %29, align 8, !tbaa !5
  %412 = call ptr @ast_from(ptr noundef %411, i32 noundef 2)
  %413 = call ptr @ast_add_sibling(ptr noundef %410, ptr noundef %412)
  store ptr %413, ptr %34, align 8, !tbaa !5
  br label %414

414:                                              ; preds = %409, %404
  br label %415

415:                                              ; preds = %414, %398
  %416 = load ptr, ptr %33, align 8, !tbaa !5
  %417 = icmp eq ptr %416, null
  br i1 %417, label %418, label %421

418:                                              ; preds = %415
  %419 = load ptr, ptr %29, align 8, !tbaa !5
  %420 = call ptr @ast_from(ptr noundef %419, i32 noundef 2)
  store ptr %420, ptr %33, align 8, !tbaa !5
  br label %435

421:                                              ; preds = %415
  %422 = load ptr, ptr %34, align 8, !tbaa !5
  %423 = icmp eq ptr %422, null
  br i1 %423, label %424, label %429

424:                                              ; preds = %421
  %425 = load ptr, ptr %33, align 8, !tbaa !5
  %426 = load ptr, ptr %29, align 8, !tbaa !5
  %427 = call ptr @ast_from(ptr noundef %426, i32 noundef 2)
  %428 = call ptr @ast_add(ptr noundef %425, ptr noundef %427)
  store ptr %428, ptr %34, align 8, !tbaa !5
  br label %434

429:                                              ; preds = %421
  %430 = load ptr, ptr %34, align 8, !tbaa !5
  %431 = load ptr, ptr %29, align 8, !tbaa !5
  %432 = call ptr @ast_from(ptr noundef %431, i32 noundef 2)
  %433 = call ptr @ast_add_sibling(ptr noundef %430, ptr noundef %432)
  store ptr %433, ptr %34, align 8, !tbaa !5
  br label %434

434:                                              ; preds = %429, %424
  br label %435

435:                                              ; preds = %434, %418
  %436 = load ptr, ptr %29, align 8, !tbaa !5
  %437 = call ptr @ast_from(ptr noundef %436, i32 noundef 175)
  store ptr %437, ptr %35, align 8, !tbaa !5
  %438 = load ptr, ptr %33, align 8, !tbaa !5
  %439 = icmp eq ptr %438, null
  br i1 %439, label %440, label %442

440:                                              ; preds = %435
  %441 = load ptr, ptr %35, align 8, !tbaa !5
  store ptr %441, ptr %33, align 8, !tbaa !5
  br label %454

442:                                              ; preds = %435
  %443 = load ptr, ptr %34, align 8, !tbaa !5
  %444 = icmp eq ptr %443, null
  br i1 %444, label %445, label %449

445:                                              ; preds = %442
  %446 = load ptr, ptr %33, align 8, !tbaa !5
  %447 = load ptr, ptr %35, align 8, !tbaa !5
  %448 = call ptr @ast_add(ptr noundef %446, ptr noundef %447)
  store ptr %448, ptr %34, align 8, !tbaa !5
  br label %453

449:                                              ; preds = %442
  %450 = load ptr, ptr %34, align 8, !tbaa !5
  %451 = load ptr, ptr %35, align 8, !tbaa !5
  %452 = call ptr @ast_add_sibling(ptr noundef %450, ptr noundef %451)
  store ptr %452, ptr %34, align 8, !tbaa !5
  br label %453

453:                                              ; preds = %449, %445
  br label %454

454:                                              ; preds = %453, %440
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #3
  %455 = load ptr, ptr %35, align 8, !tbaa !5
  store ptr %455, ptr %39, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #3
  store ptr null, ptr %40, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #3
  store ptr null, ptr %41, align 8, !tbaa !5
  %456 = load ptr, ptr %29, align 8, !tbaa !5
  %457 = call ptr @ast_from(ptr noundef %456, i32 noundef 3)
  store ptr %457, ptr %41, align 8, !tbaa !5
  %458 = load ptr, ptr %39, align 8, !tbaa !5
  %459 = icmp eq ptr %458, null
  br i1 %459, label %460, label %462

460:                                              ; preds = %454
  %461 = load ptr, ptr %41, align 8, !tbaa !5
  store ptr %461, ptr %39, align 8, !tbaa !5
  br label %474

462:                                              ; preds = %454
  %463 = load ptr, ptr %40, align 8, !tbaa !5
  %464 = icmp eq ptr %463, null
  br i1 %464, label %465, label %469

465:                                              ; preds = %462
  %466 = load ptr, ptr %39, align 8, !tbaa !5
  %467 = load ptr, ptr %41, align 8, !tbaa !5
  %468 = call ptr @ast_add(ptr noundef %466, ptr noundef %467)
  store ptr %468, ptr %40, align 8, !tbaa !5
  br label %473

469:                                              ; preds = %462
  %470 = load ptr, ptr %40, align 8, !tbaa !5
  %471 = load ptr, ptr %41, align 8, !tbaa !5
  %472 = call ptr @ast_add_sibling(ptr noundef %470, ptr noundef %471)
  store ptr %472, ptr %40, align 8, !tbaa !5
  br label %473

473:                                              ; preds = %469, %465
  br label %474

474:                                              ; preds = %473, %460
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #3
  %475 = load ptr, ptr %41, align 8, !tbaa !5
  store ptr %475, ptr %42, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #3
  store ptr null, ptr %43, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #3
  store ptr null, ptr %44, align 8, !tbaa !5
  %476 = load ptr, ptr %42, align 8, !tbaa !5
  call void @ast_inheritflags(ptr noundef %476)
  %477 = load ptr, ptr %42, align 8, !tbaa !5
  %478 = load ptr, ptr %43, align 8, !tbaa !5
  %479 = load ptr, ptr %44, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #3
  %480 = load ptr, ptr %39, align 8, !tbaa !5
  call void @ast_inheritflags(ptr noundef %480)
  %481 = load ptr, ptr %39, align 8, !tbaa !5
  %482 = load ptr, ptr %40, align 8, !tbaa !5
  %483 = load ptr, ptr %41, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #3
  %484 = load ptr, ptr %33, align 8, !tbaa !5
  %485 = icmp eq ptr %484, null
  br i1 %485, label %486, label %489

486:                                              ; preds = %474
  %487 = load ptr, ptr %29, align 8, !tbaa !5
  %488 = call ptr @ast_from(ptr noundef %487, i32 noundef 2)
  store ptr %488, ptr %33, align 8, !tbaa !5
  br label %503

489:                                              ; preds = %474
  %490 = load ptr, ptr %34, align 8, !tbaa !5
  %491 = icmp eq ptr %490, null
  br i1 %491, label %492, label %497

492:                                              ; preds = %489
  %493 = load ptr, ptr %33, align 8, !tbaa !5
  %494 = load ptr, ptr %29, align 8, !tbaa !5
  %495 = call ptr @ast_from(ptr noundef %494, i32 noundef 2)
  %496 = call ptr @ast_add(ptr noundef %493, ptr noundef %495)
  store ptr %496, ptr %34, align 8, !tbaa !5
  br label %502

497:                                              ; preds = %489
  %498 = load ptr, ptr %34, align 8, !tbaa !5
  %499 = load ptr, ptr %29, align 8, !tbaa !5
  %500 = call ptr @ast_from(ptr noundef %499, i32 noundef 2)
  %501 = call ptr @ast_add_sibling(ptr noundef %498, ptr noundef %500)
  store ptr %501, ptr %34, align 8, !tbaa !5
  br label %502

502:                                              ; preds = %497, %492
  br label %503

503:                                              ; preds = %502, %486
  %504 = load ptr, ptr %33, align 8, !tbaa !5
  call void @ast_inheritflags(ptr noundef %504)
  %505 = load ptr, ptr %33, align 8, !tbaa !5
  %506 = load ptr, ptr %34, align 8, !tbaa !5
  %507 = load ptr, ptr %35, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #3
  %508 = load ptr, ptr %30, align 8, !tbaa !5
  store ptr %508, ptr %28, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #3
  %509 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %509, ptr %46, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #3
  store ptr null, ptr %47, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #3
  store ptr null, ptr %48, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #3
  store ptr null, ptr %49, align 8, !tbaa !5
  %510 = load ptr, ptr %46, align 8, !tbaa !5
  %511 = call ptr @ast_from(ptr noundef %510, i32 noundef 184)
  store ptr %511, ptr %49, align 8, !tbaa !5
  %512 = load ptr, ptr %47, align 8, !tbaa !5
  %513 = icmp eq ptr %512, null
  br i1 %513, label %514, label %516

514:                                              ; preds = %503
  %515 = load ptr, ptr %49, align 8, !tbaa !5
  store ptr %515, ptr %47, align 8, !tbaa !5
  br label %528

516:                                              ; preds = %503
  %517 = load ptr, ptr %48, align 8, !tbaa !5
  %518 = icmp eq ptr %517, null
  br i1 %518, label %519, label %523

519:                                              ; preds = %516
  %520 = load ptr, ptr %47, align 8, !tbaa !5
  %521 = load ptr, ptr %49, align 8, !tbaa !5
  %522 = call ptr @ast_add(ptr noundef %520, ptr noundef %521)
  store ptr %522, ptr %48, align 8, !tbaa !5
  br label %527

523:                                              ; preds = %516
  %524 = load ptr, ptr %48, align 8, !tbaa !5
  %525 = load ptr, ptr %49, align 8, !tbaa !5
  %526 = call ptr @ast_add_sibling(ptr noundef %524, ptr noundef %525)
  store ptr %526, ptr %48, align 8, !tbaa !5
  br label %527

527:                                              ; preds = %523, %519
  br label %528

528:                                              ; preds = %527, %514
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #3
  %529 = load ptr, ptr %49, align 8, !tbaa !5
  store ptr %529, ptr %50, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #3
  store ptr null, ptr %51, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #3
  store ptr null, ptr %52, align 8, !tbaa !5
  %530 = load ptr, ptr %50, align 8, !tbaa !5
  %531 = icmp eq ptr %530, null
  br i1 %531, label %532, label %536

532:                                              ; preds = %528
  %533 = load ptr, ptr %46, align 8, !tbaa !5
  %534 = load ptr, ptr %13, align 8, !tbaa !5
  %535 = call ptr @ast_from_string(ptr noundef %533, ptr noundef %534)
  store ptr %535, ptr %50, align 8, !tbaa !5
  br label %552

536:                                              ; preds = %528
  %537 = load ptr, ptr %51, align 8, !tbaa !5
  %538 = icmp eq ptr %537, null
  br i1 %538, label %539, label %545

539:                                              ; preds = %536
  %540 = load ptr, ptr %50, align 8, !tbaa !5
  %541 = load ptr, ptr %46, align 8, !tbaa !5
  %542 = load ptr, ptr %13, align 8, !tbaa !5
  %543 = call ptr @ast_from_string(ptr noundef %541, ptr noundef %542)
  %544 = call ptr @ast_add(ptr noundef %540, ptr noundef %543)
  store ptr %544, ptr %51, align 8, !tbaa !5
  br label %551

545:                                              ; preds = %536
  %546 = load ptr, ptr %51, align 8, !tbaa !5
  %547 = load ptr, ptr %46, align 8, !tbaa !5
  %548 = load ptr, ptr %13, align 8, !tbaa !5
  %549 = call ptr @ast_from_string(ptr noundef %547, ptr noundef %548)
  %550 = call ptr @ast_add_sibling(ptr noundef %546, ptr noundef %549)
  store ptr %550, ptr %51, align 8, !tbaa !5
  br label %551

551:                                              ; preds = %545, %539
  br label %552

552:                                              ; preds = %551, %532
  %553 = load ptr, ptr %50, align 8, !tbaa !5
  call void @ast_inheritflags(ptr noundef %553)
  %554 = load ptr, ptr %50, align 8, !tbaa !5
  %555 = load ptr, ptr %51, align 8, !tbaa !5
  %556 = load ptr, ptr %52, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #3
  %557 = load ptr, ptr %47, align 8, !tbaa !5
  store ptr %557, ptr %45, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #3
  %558 = load ptr, ptr %15, align 8, !tbaa !5
  %559 = call i32 @ast_id(ptr noundef %558)
  %560 = icmp ne i32 %559, 2
  br i1 %560, label %561, label %623

561:                                              ; preds = %552
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #3
  %562 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %562, ptr %54, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #3
  store ptr null, ptr %55, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #3
  store ptr null, ptr %56, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %57) #3
  store ptr null, ptr %57, align 8, !tbaa !5
  %563 = load ptr, ptr %54, align 8, !tbaa !5
  %564 = call ptr @ast_from(ptr noundef %563, i32 noundef 176)
  store ptr %564, ptr %57, align 8, !tbaa !5
  %565 = load ptr, ptr %55, align 8, !tbaa !5
  %566 = icmp eq ptr %565, null
  br i1 %566, label %567, label %569

567:                                              ; preds = %561
  %568 = load ptr, ptr %57, align 8, !tbaa !5
  store ptr %568, ptr %55, align 8, !tbaa !5
  br label %581

569:                                              ; preds = %561
  %570 = load ptr, ptr %56, align 8, !tbaa !5
  %571 = icmp eq ptr %570, null
  br i1 %571, label %572, label %576

572:                                              ; preds = %569
  %573 = load ptr, ptr %55, align 8, !tbaa !5
  %574 = load ptr, ptr %57, align 8, !tbaa !5
  %575 = call ptr @ast_add(ptr noundef %573, ptr noundef %574)
  store ptr %575, ptr %56, align 8, !tbaa !5
  br label %580

576:                                              ; preds = %569
  %577 = load ptr, ptr %56, align 8, !tbaa !5
  %578 = load ptr, ptr %57, align 8, !tbaa !5
  %579 = call ptr @ast_add_sibling(ptr noundef %577, ptr noundef %578)
  store ptr %579, ptr %56, align 8, !tbaa !5
  br label %580

580:                                              ; preds = %576, %572
  br label %581

581:                                              ; preds = %580, %567
  call void @llvm.lifetime.start.p0(i64 8, ptr %58) #3
  %582 = load ptr, ptr %57, align 8, !tbaa !5
  store ptr %582, ptr %58, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #3
  store ptr null, ptr %59, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #3
  store ptr null, ptr %60, align 8, !tbaa !5
  %583 = load ptr, ptr %58, align 8, !tbaa !5
  %584 = icmp eq ptr %583, null
  br i1 %584, label %585, label %587

585:                                              ; preds = %581
  %586 = load ptr, ptr %45, align 8, !tbaa !5
  store ptr %586, ptr %58, align 8, !tbaa !5
  br label %599

587:                                              ; preds = %581
  %588 = load ptr, ptr %59, align 8, !tbaa !5
  %589 = icmp eq ptr %588, null
  br i1 %589, label %590, label %594

590:                                              ; preds = %587
  %591 = load ptr, ptr %58, align 8, !tbaa !5
  %592 = load ptr, ptr %45, align 8, !tbaa !5
  %593 = call ptr @ast_add(ptr noundef %591, ptr noundef %592)
  store ptr %593, ptr %59, align 8, !tbaa !5
  br label %598

594:                                              ; preds = %587
  %595 = load ptr, ptr %59, align 8, !tbaa !5
  %596 = load ptr, ptr %45, align 8, !tbaa !5
  %597 = call ptr @ast_add_sibling(ptr noundef %595, ptr noundef %596)
  store ptr %597, ptr %59, align 8, !tbaa !5
  br label %598

598:                                              ; preds = %594, %590
  br label %599

599:                                              ; preds = %598, %585
  %600 = load ptr, ptr %58, align 8, !tbaa !5
  %601 = icmp eq ptr %600, null
  br i1 %601, label %602, label %604

602:                                              ; preds = %599
  %603 = load ptr, ptr %15, align 8, !tbaa !5
  store ptr %603, ptr %58, align 8, !tbaa !5
  br label %616

604:                                              ; preds = %599
  %605 = load ptr, ptr %59, align 8, !tbaa !5
  %606 = icmp eq ptr %605, null
  br i1 %606, label %607, label %611

607:                                              ; preds = %604
  %608 = load ptr, ptr %58, align 8, !tbaa !5
  %609 = load ptr, ptr %15, align 8, !tbaa !5
  %610 = call ptr @ast_add(ptr noundef %608, ptr noundef %609)
  store ptr %610, ptr %59, align 8, !tbaa !5
  br label %615

611:                                              ; preds = %604
  %612 = load ptr, ptr %59, align 8, !tbaa !5
  %613 = load ptr, ptr %15, align 8, !tbaa !5
  %614 = call ptr @ast_add_sibling(ptr noundef %612, ptr noundef %613)
  store ptr %614, ptr %59, align 8, !tbaa !5
  br label %615

615:                                              ; preds = %611, %607
  br label %616

616:                                              ; preds = %615, %602
  %617 = load ptr, ptr %58, align 8, !tbaa !5
  call void @ast_inheritflags(ptr noundef %617)
  %618 = load ptr, ptr %58, align 8, !tbaa !5
  %619 = load ptr, ptr %59, align 8, !tbaa !5
  %620 = load ptr, ptr %60, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #3
  %621 = load ptr, ptr %55, align 8, !tbaa !5
  store ptr %621, ptr %53, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #3
  %622 = load ptr, ptr %53, align 8, !tbaa !5
  store ptr %622, ptr %45, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #3
  br label %623

623:                                              ; preds = %616, %552
  %624 = load ptr, ptr %15, align 8, !tbaa !5
  call void @ast_free_unattached(ptr noundef %624)
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %62) #3
  %625 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %625, ptr %62, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #3
  store ptr null, ptr %63, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #3
  store ptr null, ptr %64, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %65) #3
  store ptr null, ptr %65, align 8, !tbaa !5
  %626 = load ptr, ptr %62, align 8, !tbaa !5
  %627 = call ptr @ast_from(ptr noundef %626, i32 noundef 177)
  store ptr %627, ptr %65, align 8, !tbaa !5
  %628 = load ptr, ptr %63, align 8, !tbaa !5
  %629 = icmp eq ptr %628, null
  br i1 %629, label %630, label %632

630:                                              ; preds = %623
  %631 = load ptr, ptr %65, align 8, !tbaa !5
  store ptr %631, ptr %63, align 8, !tbaa !5
  br label %644

632:                                              ; preds = %623
  %633 = load ptr, ptr %64, align 8, !tbaa !5
  %634 = icmp eq ptr %633, null
  br i1 %634, label %635, label %639

635:                                              ; preds = %632
  %636 = load ptr, ptr %63, align 8, !tbaa !5
  %637 = load ptr, ptr %65, align 8, !tbaa !5
  %638 = call ptr @ast_add(ptr noundef %636, ptr noundef %637)
  store ptr %638, ptr %64, align 8, !tbaa !5
  br label %643

639:                                              ; preds = %632
  %640 = load ptr, ptr %64, align 8, !tbaa !5
  %641 = load ptr, ptr %65, align 8, !tbaa !5
  %642 = call ptr @ast_add_sibling(ptr noundef %640, ptr noundef %641)
  store ptr %642, ptr %64, align 8, !tbaa !5
  br label %643

643:                                              ; preds = %639, %635
  br label %644

644:                                              ; preds = %643, %630
  call void @llvm.lifetime.start.p0(i64 8, ptr %66) #3
  %645 = load ptr, ptr %65, align 8, !tbaa !5
  store ptr %645, ptr %66, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %67) #3
  store ptr null, ptr %67, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %68) #3
  store ptr null, ptr %68, align 8, !tbaa !5
  %646 = load ptr, ptr %62, align 8, !tbaa !5
  %647 = call ptr @ast_from(ptr noundef %646, i32 noundef 19)
  store ptr %647, ptr %68, align 8, !tbaa !5
  %648 = load ptr, ptr %66, align 8, !tbaa !5
  %649 = icmp eq ptr %648, null
  br i1 %649, label %650, label %652

650:                                              ; preds = %644
  %651 = load ptr, ptr %68, align 8, !tbaa !5
  store ptr %651, ptr %66, align 8, !tbaa !5
  br label %664

652:                                              ; preds = %644
  %653 = load ptr, ptr %67, align 8, !tbaa !5
  %654 = icmp eq ptr %653, null
  br i1 %654, label %655, label %659

655:                                              ; preds = %652
  %656 = load ptr, ptr %66, align 8, !tbaa !5
  %657 = load ptr, ptr %68, align 8, !tbaa !5
  %658 = call ptr @ast_add(ptr noundef %656, ptr noundef %657)
  store ptr %658, ptr %67, align 8, !tbaa !5
  br label %663

659:                                              ; preds = %652
  %660 = load ptr, ptr %67, align 8, !tbaa !5
  %661 = load ptr, ptr %68, align 8, !tbaa !5
  %662 = call ptr @ast_add_sibling(ptr noundef %660, ptr noundef %661)
  store ptr %662, ptr %67, align 8, !tbaa !5
  br label %663

663:                                              ; preds = %659, %655
  br label %664

664:                                              ; preds = %663, %650
  call void @llvm.lifetime.start.p0(i64 8, ptr %69) #3
  %665 = load ptr, ptr %68, align 8, !tbaa !5
  store ptr %665, ptr %69, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %70) #3
  store ptr null, ptr %70, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %71) #3
  store ptr null, ptr %71, align 8, !tbaa !5
  %666 = load ptr, ptr %69, align 8, !tbaa !5
  %667 = icmp eq ptr %666, null
  br i1 %667, label %668, label %670

668:                                              ; preds = %664
  %669 = load ptr, ptr %45, align 8, !tbaa !5
  store ptr %669, ptr %69, align 8, !tbaa !5
  br label %682

670:                                              ; preds = %664
  %671 = load ptr, ptr %70, align 8, !tbaa !5
  %672 = icmp eq ptr %671, null
  br i1 %672, label %673, label %677

673:                                              ; preds = %670
  %674 = load ptr, ptr %69, align 8, !tbaa !5
  %675 = load ptr, ptr %45, align 8, !tbaa !5
  %676 = call ptr @ast_add(ptr noundef %674, ptr noundef %675)
  store ptr %676, ptr %70, align 8, !tbaa !5
  br label %681

677:                                              ; preds = %670
  %678 = load ptr, ptr %70, align 8, !tbaa !5
  %679 = load ptr, ptr %45, align 8, !tbaa !5
  %680 = call ptr @ast_add_sibling(ptr noundef %678, ptr noundef %679)
  store ptr %680, ptr %70, align 8, !tbaa !5
  br label %681

681:                                              ; preds = %677, %673
  br label %682

682:                                              ; preds = %681, %668
  %683 = load ptr, ptr %69, align 8, !tbaa !5
  %684 = icmp eq ptr %683, null
  br i1 %684, label %685, label %688

685:                                              ; preds = %682
  %686 = load ptr, ptr %62, align 8, !tbaa !5
  %687 = call ptr @ast_from_string(ptr noundef %686, ptr noundef @.str.17)
  store ptr %687, ptr %69, align 8, !tbaa !5
  br label %702

688:                                              ; preds = %682
  %689 = load ptr, ptr %70, align 8, !tbaa !5
  %690 = icmp eq ptr %689, null
  br i1 %690, label %691, label %696

691:                                              ; preds = %688
  %692 = load ptr, ptr %69, align 8, !tbaa !5
  %693 = load ptr, ptr %62, align 8, !tbaa !5
  %694 = call ptr @ast_from_string(ptr noundef %693, ptr noundef @.str.17)
  %695 = call ptr @ast_add(ptr noundef %692, ptr noundef %694)
  store ptr %695, ptr %70, align 8, !tbaa !5
  br label %701

696:                                              ; preds = %688
  %697 = load ptr, ptr %70, align 8, !tbaa !5
  %698 = load ptr, ptr %62, align 8, !tbaa !5
  %699 = call ptr @ast_from_string(ptr noundef %698, ptr noundef @.str.17)
  %700 = call ptr @ast_add_sibling(ptr noundef %697, ptr noundef %699)
  store ptr %700, ptr %70, align 8, !tbaa !5
  br label %701

701:                                              ; preds = %696, %691
  br label %702

702:                                              ; preds = %701, %685
  %703 = load ptr, ptr %69, align 8, !tbaa !5
  call void @ast_inheritflags(ptr noundef %703)
  %704 = load ptr, ptr %69, align 8, !tbaa !5
  %705 = load ptr, ptr %70, align 8, !tbaa !5
  %706 = load ptr, ptr %71, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #3
  %707 = load ptr, ptr %62, align 8, !tbaa !5
  %708 = call ptr @ast_from(ptr noundef %707, i32 noundef 169)
  store ptr %708, ptr %68, align 8, !tbaa !5
  %709 = load ptr, ptr %66, align 8, !tbaa !5
  %710 = icmp eq ptr %709, null
  br i1 %710, label %711, label %713

711:                                              ; preds = %702
  %712 = load ptr, ptr %68, align 8, !tbaa !5
  store ptr %712, ptr %66, align 8, !tbaa !5
  br label %725

713:                                              ; preds = %702
  %714 = load ptr, ptr %67, align 8, !tbaa !5
  %715 = icmp eq ptr %714, null
  br i1 %715, label %716, label %720

716:                                              ; preds = %713
  %717 = load ptr, ptr %66, align 8, !tbaa !5
  %718 = load ptr, ptr %68, align 8, !tbaa !5
  %719 = call ptr @ast_add(ptr noundef %717, ptr noundef %718)
  store ptr %719, ptr %67, align 8, !tbaa !5
  br label %724

720:                                              ; preds = %713
  %721 = load ptr, ptr %67, align 8, !tbaa !5
  %722 = load ptr, ptr %68, align 8, !tbaa !5
  %723 = call ptr @ast_add_sibling(ptr noundef %721, ptr noundef %722)
  store ptr %723, ptr %67, align 8, !tbaa !5
  br label %724

724:                                              ; preds = %720, %716
  br label %725

725:                                              ; preds = %724, %711
  call void @llvm.lifetime.start.p0(i64 8, ptr %72) #3
  %726 = load ptr, ptr %68, align 8, !tbaa !5
  store ptr %726, ptr %72, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %73) #3
  store ptr null, ptr %73, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %74) #3
  store ptr null, ptr %74, align 8, !tbaa !5
  %727 = load ptr, ptr %72, align 8, !tbaa !5
  call void @ast_inheritflags(ptr noundef %727)
  %728 = load ptr, ptr %72, align 8, !tbaa !5
  %729 = load ptr, ptr %73, align 8, !tbaa !5
  %730 = load ptr, ptr %74, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #3
  %731 = load ptr, ptr %66, align 8, !tbaa !5
  %732 = icmp eq ptr %731, null
  br i1 %732, label %733, label %736

733:                                              ; preds = %725
  %734 = load ptr, ptr %62, align 8, !tbaa !5
  %735 = call ptr @ast_from(ptr noundef %734, i32 noundef 2)
  store ptr %735, ptr %66, align 8, !tbaa !5
  br label %750

736:                                              ; preds = %725
  %737 = load ptr, ptr %67, align 8, !tbaa !5
  %738 = icmp eq ptr %737, null
  br i1 %738, label %739, label %744

739:                                              ; preds = %736
  %740 = load ptr, ptr %66, align 8, !tbaa !5
  %741 = load ptr, ptr %62, align 8, !tbaa !5
  %742 = call ptr @ast_from(ptr noundef %741, i32 noundef 2)
  %743 = call ptr @ast_add(ptr noundef %740, ptr noundef %742)
  store ptr %743, ptr %67, align 8, !tbaa !5
  br label %749

744:                                              ; preds = %736
  %745 = load ptr, ptr %67, align 8, !tbaa !5
  %746 = load ptr, ptr %62, align 8, !tbaa !5
  %747 = call ptr @ast_from(ptr noundef %746, i32 noundef 2)
  %748 = call ptr @ast_add_sibling(ptr noundef %745, ptr noundef %747)
  store ptr %748, ptr %67, align 8, !tbaa !5
  br label %749

749:                                              ; preds = %744, %739
  br label %750

750:                                              ; preds = %749, %733
  %751 = load ptr, ptr %66, align 8, !tbaa !5
  %752 = icmp eq ptr %751, null
  br i1 %752, label %753, label %756

753:                                              ; preds = %750
  %754 = load ptr, ptr %62, align 8, !tbaa !5
  %755 = call ptr @ast_from(ptr noundef %754, i32 noundef 2)
  store ptr %755, ptr %66, align 8, !tbaa !5
  br label %770

756:                                              ; preds = %750
  %757 = load ptr, ptr %67, align 8, !tbaa !5
  %758 = icmp eq ptr %757, null
  br i1 %758, label %759, label %764

759:                                              ; preds = %756
  %760 = load ptr, ptr %66, align 8, !tbaa !5
  %761 = load ptr, ptr %62, align 8, !tbaa !5
  %762 = call ptr @ast_from(ptr noundef %761, i32 noundef 2)
  %763 = call ptr @ast_add(ptr noundef %760, ptr noundef %762)
  store ptr %763, ptr %67, align 8, !tbaa !5
  br label %769

764:                                              ; preds = %756
  %765 = load ptr, ptr %67, align 8, !tbaa !5
  %766 = load ptr, ptr %62, align 8, !tbaa !5
  %767 = call ptr @ast_from(ptr noundef %766, i32 noundef 2)
  %768 = call ptr @ast_add_sibling(ptr noundef %765, ptr noundef %767)
  store ptr %768, ptr %67, align 8, !tbaa !5
  br label %769

769:                                              ; preds = %764, %759
  br label %770

770:                                              ; preds = %769, %753
  %771 = load ptr, ptr %66, align 8, !tbaa !5
  call void @ast_inheritflags(ptr noundef %771)
  %772 = load ptr, ptr %66, align 8, !tbaa !5
  %773 = load ptr, ptr %67, align 8, !tbaa !5
  %774 = load ptr, ptr %68, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #3
  %775 = load ptr, ptr %63, align 8, !tbaa !5
  store ptr %775, ptr %61, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %75) #3
  %776 = load ptr, ptr %28, align 8, !tbaa !5
  %777 = call ptr @ast_childidx(ptr noundef %776, i64 noundef 3)
  store ptr %777, ptr %75, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %76) #3
  %778 = load ptr, ptr %28, align 8, !tbaa !5
  %779 = call ptr @ast_childidx(ptr noundef %778, i64 noundef 6)
  store ptr %779, ptr %76, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %77) #3
  %780 = load ptr, ptr %61, align 8, !tbaa !5
  %781 = call ptr @ast_childidx(ptr noundef %780, i64 noundef 1)
  store ptr %781, ptr %77, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %78) #3
  %782 = load ptr, ptr %17, align 8, !tbaa !5
  %783 = call ptr @ast_childidx(ptr noundef %782, i64 noundef 4)
  store ptr %783, ptr %78, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %79) #3
  %784 = load ptr, ptr %10, align 8, !tbaa !5
  %785 = call ptr @ast_child(ptr noundef %784)
  store ptr %785, ptr %79, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %80) #3
  store i8 0, ptr %80, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %81) #3
  store i8 0, ptr %81, align 1, !tbaa !9
  br label %786

786:                                              ; preds = %807, %770
  %787 = load ptr, ptr %79, align 8, !tbaa !5
  %788 = icmp ne ptr %787, null
  br i1 %788, label %789, label %810

789:                                              ; preds = %786
  %790 = load ptr, ptr %79, align 8, !tbaa !5
  %791 = call i32 @ast_id(ptr noundef %790)
  switch i32 %791, label %803 [
    i32 140, label %792
    i32 141, label %792
    i32 86, label %792
    i32 90, label %799
  ]

792:                                              ; preds = %789, %789, %789
  %793 = load ptr, ptr %4, align 8, !tbaa !5
  %794 = load ptr, ptr %79, align 8, !tbaa !5
  %795 = load ptr, ptr %78, align 8, !tbaa !5
  %796 = load ptr, ptr %75, align 8, !tbaa !5
  %797 = load ptr, ptr %76, align 8, !tbaa !5
  %798 = load ptr, ptr %77, align 8, !tbaa !5
  call void @add_field_to_object(ptr noundef %793, ptr noundef %794, ptr noundef %795, ptr noundef %796, ptr noundef %797, ptr noundef %798)
  store i8 1, ptr %80, align 1, !tbaa !9
  br label %807

799:                                              ; preds = %789
  %800 = load ptr, ptr %78, align 8, !tbaa !5
  %801 = load ptr, ptr %79, align 8, !tbaa !5
  %802 = call ptr @ast_append(ptr noundef %800, ptr noundef %801)
  store i8 1, ptr %81, align 1, !tbaa !9
  br label %807

803:                                              ; preds = %789
  %804 = load ptr, ptr %78, align 8, !tbaa !5
  %805 = load ptr, ptr %79, align 8, !tbaa !5
  %806 = call ptr @ast_append(ptr noundef %804, ptr noundef %805)
  br label %807

807:                                              ; preds = %803, %799, %792
  %808 = load ptr, ptr %79, align 8, !tbaa !5
  %809 = call ptr @ast_sibling(ptr noundef %808)
  store ptr %809, ptr %79, align 8, !tbaa !5
  br label %786, !llvm.loop !11

810:                                              ; preds = %786
  %811 = load ptr, ptr %78, align 8, !tbaa !5
  %812 = load ptr, ptr %28, align 8, !tbaa !5
  %813 = call ptr @ast_append(ptr noundef %811, ptr noundef %812)
  call void @llvm.lifetime.start.p0(i64 8, ptr %82) #3
  %814 = load ptr, ptr %6, align 8, !tbaa !5
  %815 = call ptr @ast_nearest(ptr noundef %814, i32 noundef 138)
  store ptr %815, ptr %82, align 8, !tbaa !5
  %816 = load ptr, ptr %82, align 8, !tbaa !5
  %817 = load ptr, ptr %17, align 8, !tbaa !5
  %818 = call ptr @ast_append(ptr noundef %816, ptr noundef %817)
  call void @llvm.lifetime.start.p0(i64 8, ptr %83) #3
  %819 = load ptr, ptr %6, align 8, !tbaa !5
  %820 = call ptr @ast_from(ptr noundef %819, i32 noundef 139)
  store ptr %820, ptr %83, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %84) #3
  store ptr null, ptr %84, align 8, !tbaa !5
  %821 = load ptr, ptr %4, align 8, !tbaa !5
  %822 = load ptr, ptr %5, align 8, !tbaa !5
  %823 = load ptr, ptr %822, align 8, !tbaa !5
  %824 = load ptr, ptr %83, align 8, !tbaa !5
  %825 = call zeroext i1 @capture_from_type(ptr noundef %821, ptr noundef %823, ptr noundef %17, ptr noundef %824, ptr noundef %84)
  br i1 %825, label %827, label %826

826:                                              ; preds = %810
  store i8 0, ptr %7, align 1, !tbaa !9
  br label %827

827:                                              ; preds = %826, %810
  call void @llvm.lifetime.start.p0(i64 8, ptr %85) #3
  %828 = load ptr, ptr %83, align 8, !tbaa !5
  %829 = call ptr @ast_child(ptr noundef %828)
  store ptr %829, ptr %85, align 8, !tbaa !5
  br label %830

830:                                              ; preds = %841, %827
  %831 = load ptr, ptr %85, align 8, !tbaa !5
  %832 = icmp ne ptr %831, null
  br i1 %832, label %834, label %833

833:                                              ; preds = %830
  call void @llvm.lifetime.end.p0(i64 8, ptr %85) #3
  br label %844

834:                                              ; preds = %830
  %835 = load ptr, ptr %4, align 8, !tbaa !5
  %836 = load ptr, ptr %85, align 8, !tbaa !5
  %837 = load ptr, ptr %78, align 8, !tbaa !5
  %838 = load ptr, ptr %75, align 8, !tbaa !5
  %839 = load ptr, ptr %76, align 8, !tbaa !5
  %840 = load ptr, ptr %77, align 8, !tbaa !5
  call void @add_field_to_object(ptr noundef %835, ptr noundef %836, ptr noundef %837, ptr noundef %838, ptr noundef %839, ptr noundef %840)
  store i8 1, ptr %80, align 1, !tbaa !9
  br label %841

841:                                              ; preds = %834
  %842 = load ptr, ptr %85, align 8, !tbaa !5
  %843 = call ptr @ast_sibling(ptr noundef %842)
  store ptr %843, ptr %85, align 8, !tbaa !5
  br label %830, !llvm.loop !13

844:                                              ; preds = %833
  %845 = load ptr, ptr %83, align 8, !tbaa !5
  call void @ast_free_unattached(ptr noundef %845)
  %846 = load ptr, ptr %17, align 8, !tbaa !5
  call void @ast_resetpass(ptr noundef %846, i32 noundef 2)
  call void @llvm.lifetime.start.p0(i64 4, ptr %86) #3
  %847 = load ptr, ptr %8, align 8, !tbaa !5
  %848 = call i32 @ast_id(ptr noundef %847)
  store i32 %848, ptr %86, align 4, !tbaa !14
  %849 = load i8, ptr %81, align 1, !tbaa !9, !range !16, !noundef !17
  %850 = trunc i8 %849 to i1
  br i1 %850, label %851, label %866

851:                                              ; preds = %844
  %852 = load ptr, ptr %17, align 8, !tbaa !5
  %853 = call ptr @ast_setid(ptr noundef %852, i32 noundef 77)
  %854 = load i32, ptr %86, align 4, !tbaa !14
  %855 = icmp ne i32 %854, 2
  br i1 %855, label %856, label %865

856:                                              ; preds = %851
  %857 = load i32, ptr %86, align 4, !tbaa !14
  %858 = icmp ne i32 %857, 96
  br i1 %858, label %859, label %865

859:                                              ; preds = %856
  %860 = load ptr, ptr %4, align 8, !tbaa !5
  %861 = getelementptr inbounds %struct.pass_opt_t, ptr %860, i32 0, i32 36
  %862 = getelementptr inbounds %struct.typecheck_t, ptr %861, i32 0, i32 2
  %863 = load ptr, ptr %862, align 8, !tbaa !18
  %864 = load ptr, ptr %8, align 8, !tbaa !5
  call void (ptr, ptr, ptr, ...) @ast_error(ptr noundef %863, ptr noundef %864, ptr noundef @.str.18)
  store i8 0, ptr %7, align 1, !tbaa !9
  br label %865

865:                                              ; preds = %859, %856, %851
  store i32 96, ptr %86, align 4, !tbaa !14
  br label %885

866:                                              ; preds = %844
  %867 = load i8, ptr %80, align 1, !tbaa !9, !range !16, !noundef !17
  %868 = trunc i8 %867 to i1
  br i1 %868, label %884, label %869

869:                                              ; preds = %866
  %870 = load i32, ptr %86, align 4, !tbaa !14
  %871 = icmp eq i32 %870, 2
  br i1 %871, label %881, label %872

872:                                              ; preds = %869
  %873 = load i32, ptr %86, align 4, !tbaa !14
  %874 = icmp eq i32 %873, 96
  br i1 %874, label %881, label %875

875:                                              ; preds = %872
  %876 = load i32, ptr %86, align 4, !tbaa !14
  %877 = icmp eq i32 %876, 95
  br i1 %877, label %881, label %878

878:                                              ; preds = %875
  %879 = load i32, ptr %86, align 4, !tbaa !14
  %880 = icmp eq i32 %879, 94
  br i1 %880, label %881, label %884

881:                                              ; preds = %878, %875, %872, %869
  %882 = load ptr, ptr %17, align 8, !tbaa !5
  %883 = call ptr @ast_setid(ptr noundef %882, i32 noundef 74)
  store i32 94, ptr %86, align 4, !tbaa !14
  br label %884

884:                                              ; preds = %881, %878, %866
  br label %885

885:                                              ; preds = %884, %865
  %886 = load ptr, ptr %17, align 8, !tbaa !5
  %887 = call i32 @ast_id(ptr noundef %886)
  %888 = icmp ne i32 %887, 74
  br i1 %888, label %889, label %895

889:                                              ; preds = %885
  %890 = load ptr, ptr %17, align 8, !tbaa !5
  %891 = call zeroext i1 @ast_has_annotation(ptr noundef %890, ptr noundef @.str.15)
  br i1 %891, label %893, label %892

892:                                              ; preds = %889
  br label %894

893:                                              ; preds = %889
  call void @ponyint_assert_fail(ptr noundef @.str.19, ptr noundef @.str.1, i64 noundef 823, ptr noundef @__func__.expr_object)
  br label %894

894:                                              ; preds = %893, %892
  br label %895

895:                                              ; preds = %894, %885
  %896 = load ptr, ptr %28, align 8, !tbaa !5
  %897 = call ptr @ast_child(ptr noundef %896)
  %898 = load i32, ptr %86, align 4, !tbaa !14
  %899 = call ptr @ast_setid(ptr noundef %897, i32 noundef %898)
  call void @llvm.lifetime.start.p0(i64 8, ptr %87) #3
  %900 = load ptr, ptr %28, align 8, !tbaa !5
  %901 = call ptr @ast_childidx(ptr noundef %900, i64 noundef 4)
  store ptr %901, ptr %87, align 8, !tbaa !5
  %902 = load ptr, ptr %4, align 8, !tbaa !5
  %903 = load ptr, ptr %17, align 8, !tbaa !5
  %904 = load ptr, ptr %87, align 8, !tbaa !5
  %905 = load i32, ptr %86, align 4, !tbaa !14
  %906 = call ptr @type_for_class(ptr noundef %902, ptr noundef %903, ptr noundef %904, i32 noundef %905, i32 noundef 57, i1 noundef zeroext false)
  call void @ast_replace(ptr noundef %87, ptr noundef %906)
  %907 = load ptr, ptr %4, align 8, !tbaa !5
  %908 = load ptr, ptr %9, align 8, !tbaa !5
  %909 = call zeroext i1 @catch_up_provides(ptr noundef %907, ptr noundef %908)
  br i1 %909, label %911, label %910

910:                                              ; preds = %895
  store i1 false, ptr %3, align 1
  store i32 1, ptr %88, align 4
  br label %931

911:                                              ; preds = %895
  %912 = load ptr, ptr %4, align 8, !tbaa !5
  %913 = call zeroext i1 @ast_passes_type(ptr noundef %17, ptr noundef %912, i32 noundef 10)
  br i1 %913, label %915, label %914

914:                                              ; preds = %911
  store i1 false, ptr %3, align 1
  store i32 1, ptr %88, align 4
  br label %931

915:                                              ; preds = %911
  %916 = load ptr, ptr %5, align 8, !tbaa !5
  %917 = load ptr, ptr %61, align 8, !tbaa !5
  call void @ast_replace(ptr noundef %916, ptr noundef %917)
  %918 = load ptr, ptr %5, align 8, !tbaa !5
  %919 = load ptr, ptr %4, align 8, !tbaa !5
  %920 = call i32 @ast_visit(ptr noundef %918, ptr noundef @pass_syntax, ptr noundef null, ptr noundef %919, i32 noundef 1)
  %921 = icmp ne i32 %920, 0
  br i1 %921, label %922, label %923

922:                                              ; preds = %915
  store i1 false, ptr %3, align 1
  store i32 1, ptr %88, align 4
  br label %931

923:                                              ; preds = %915
  %924 = load ptr, ptr %5, align 8, !tbaa !5
  %925 = load ptr, ptr %4, align 8, !tbaa !5
  %926 = call zeroext i1 @ast_passes_subtree(ptr noundef %924, ptr noundef %925, i32 noundef 10)
  br i1 %926, label %928, label %927

927:                                              ; preds = %923
  store i1 false, ptr %3, align 1
  store i32 1, ptr %88, align 4
  br label %931

928:                                              ; preds = %923
  %929 = load i8, ptr %7, align 1, !tbaa !9, !range !16, !noundef !17
  %930 = trunc i8 %929 to i1
  store i1 %930, ptr %3, align 1
  store i32 1, ptr %88, align 4
  br label %931

931:                                              ; preds = %928, %927, %922, %914, %910
  call void @llvm.lifetime.end.p0(i64 8, ptr %87) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %86) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %84) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %83) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %82) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %81) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %80) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %79) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %76) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %7) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #3
  %932 = load i1, ptr %3, align 1
  ret i1 %932
}

declare ptr @package_hygienic_id(ptr noundef) #0

declare void @collect_type_params(ptr noundef, ptr noundef, ptr noundef) #0

declare ptr @ast_data(ptr noundef) #0

; Function Attrs: nounwind uwtable
declare hidden void @add_field_to_object(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

declare ptr @ast_append(ptr noundef, ptr noundef) #0

declare ptr @ast_nearest(ptr noundef, i32 noundef) #0

; Function Attrs: nounwind uwtable
declare hidden zeroext i1 @capture_from_type(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

declare void @ast_resetpass(ptr noundef, i32 noundef) #0

declare ptr @ast_setid(ptr noundef, i32 noundef) #0

declare zeroext i1 @ast_has_annotation(ptr noundef, ptr noundef) #0

declare ptr @type_for_class(ptr noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef, i1 noundef zeroext) #0

; Function Attrs: nounwind uwtable
declare hidden zeroext i1 @catch_up_provides(ptr noundef, ptr noundef) #2

declare zeroext i1 @ast_passes_type(ptr noundef, ptr noundef, i32 noundef) #0

attributes #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 #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
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, !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 = !{!"_Bool", !7, i64 0}
!11 = distinct !{!11, !12}
!12 = !{!"llvm.loop.mustprogress"}
!13 = distinct !{!13, !12}
!14 = !{!15, !15, i64 0}
!15 = !{!"int", !7, i64 0}
!16 = !{i8 0, i8 2}
!17 = !{}
!18 = !{!19, !6, i64 216}
!19 = !{!"pass_opt_t", !15, i64 0, !15, i64 4, !10, i64 8, !10, i64 9, !10, i64 10, !10, i64 11, !10, i64 12, !10, i64 13, !10, i64 14, !10, i64 15, !10, i64 16, !10, i64 17, !10, i64 18, !10, i64 19, !10, i64 20, !10, i64 21, !15, i64 24, !20, i64 32, !10, i64 40, !10, i64 41, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !6, i64 104, !6, i64 112, !6, i64 120, !6, i64 128, !6, i64 136, !6, i64 144, !6, i64 152, !6, i64 160, !6, i64 168, !21, i64 176, !6, i64 224, !6, i64 232}
!20 = !{!"long", !7, i64 0}
!21 = !{!"typecheck_t", !6, i64 0, !22, i64 8, !6, i64 40}
!22 = !{!"typecheck_stats_t", !20, i64 0, !20, i64 8, !20, i64 16, !20, i64 24}


; 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"

@.str.1 = external hidden unnamed_addr constant [75 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [75 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [41 x i8], align 1
@__func__.expr_object = external hidden unnamed_addr constant [12 x i8], align 1

declare void @ponyint_assert_fail(ptr noundef, ptr noundef, i64 noundef, ptr noundef) local_unnamed_addr #0

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

declare void @ast_get_children(ptr noundef, i64 noundef, ptr noundef) local_unnamed_addr #0

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

declare ptr @ast_consumeannotation(ptr noundef) local_unnamed_addr #0

declare i32 @ast_id(ptr noundef) local_unnamed_addr #0

declare void @ast_replace(ptr noundef, ptr noundef) local_unnamed_addr #0

declare ptr @ast_child(ptr noundef) local_unnamed_addr #0

declare ptr @ast_childidx(ptr noundef, i64 noundef) local_unnamed_addr #0

declare ptr @ast_sibling(ptr noundef) local_unnamed_addr #0

declare void @ast_free_unattached(ptr noundef) local_unnamed_addr #0

declare void @ast_error(ptr noundef, ptr noundef, ptr noundef, ...) local_unnamed_addr #0

declare ptr @ast_from(ptr noundef, i32 noundef) local_unnamed_addr #0

declare void @ast_clearflag(ptr noundef, i32 noundef) local_unnamed_addr #0

declare ptr @ast_add(ptr noundef, ptr noundef) local_unnamed_addr #0

declare ptr @ast_add_sibling(ptr noundef, ptr noundef) local_unnamed_addr #0

declare void @ast_scope(ptr noundef) local_unnamed_addr #0

declare void @ast_setannotation(ptr noundef, ptr noundef) local_unnamed_addr #0

declare ptr @ast_from_string(ptr noundef, ptr noundef) local_unnamed_addr #0

declare void @ast_inheritflags(ptr noundef) local_unnamed_addr #0

declare ptr @ast_setdata(ptr noundef, ptr noundef) local_unnamed_addr #0

declare ptr @stringtab(ptr noundef) local_unnamed_addr #0

declare i32 @ast_visit(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #0

declare i32 @pass_syntax(ptr noundef, ptr noundef) #0

declare zeroext i1 @ast_passes_subtree(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
define dso_local zeroext i1 @expr_object(ptr noundef %0, ptr noundef %1) local_unnamed_addr #2 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca [4 x ptr], align 16
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = load ptr, ptr %1, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %3) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #3
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %6) #3
  store ptr %3, ptr %6, align 16, !tbaa !5
  %13 = getelementptr inbounds i8, ptr %6, i64 8
  store ptr %4, ptr %13, align 8, !tbaa !5
  %14 = getelementptr inbounds i8, ptr %6, i64 16
  store ptr %5, ptr %14, align 16, !tbaa !5
  %15 = getelementptr inbounds i8, ptr %6, i64 24
  store ptr null, ptr %15, align 8, !tbaa !5
  call void @ast_get_children(ptr noundef %12, i64 noundef 3, ptr noundef nonnull %6) #3
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %6) #3
  %16 = load ptr, ptr %3, align 8, !tbaa !5
  call void @ast_clearflag(ptr noundef %16, i32 noundef 8192) #3
  %17 = load ptr, ptr %4, align 8, !tbaa !5
  call void @ast_clearflag(ptr noundef %17, i32 noundef 8192) #3
  %18 = load ptr, ptr %5, align 8, !tbaa !5
  call void @ast_clearflag(ptr noundef %18, i32 noundef 8192) #3
  %19 = call ptr @ast_consumeannotation(ptr noundef %12) #3
  %20 = getelementptr inbounds i8, ptr %0, i64 176
  %21 = call ptr @package_hygienic_id(ptr noundef nonnull %20) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #3
  call void @collect_type_params(ptr noundef %12, ptr noundef nonnull %7, ptr noundef nonnull %8) #3
  %22 = call ptr @ast_data(ptr noundef %12) #3
  %23 = icmp eq ptr %22, null
  %spec.store.select = select i1 %23, ptr @.str.16, ptr %22
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #3
  %24 = call ptr @ast_from(ptr noundef %12, i32 noundef 76) #3
  call void @ast_scope(ptr noundef %24) #3
  call void @ast_setannotation(ptr noundef %24, ptr noundef %19) #3
  %25 = icmp eq ptr %24, null
  %26 = call ptr @ast_from_string(ptr noundef %12, ptr noundef %21) #3
  %27 = call ptr @stringtab(ptr noundef nonnull %spec.store.select) #3
  %28 = call ptr @ast_setdata(ptr noundef %26, ptr noundef %27) #3
  br i1 %25, label %29, label %31

29:                                               ; preds = %2
  %30 = icmp eq ptr %28, null
  br i1 %30, label %39, label %.thread438

31:                                               ; preds = %2
  %32 = call ptr @ast_add(ptr noundef nonnull %24, ptr noundef %28) #3
  %33 = icmp eq ptr %32, null
  br i1 %33, label %.thread438, label %36

.thread438:                                       ; preds = %29, %31
  %.0371437441 = phi ptr [ %24, %31 ], [ %28, %29 ]
  %34 = load ptr, ptr %7, align 8, !tbaa !5
  %35 = call ptr @ast_add(ptr noundef nonnull %.0371437441, ptr noundef %34) #3
  br label %42

36:                                               ; preds = %31
  %37 = load ptr, ptr %7, align 8, !tbaa !5
  %38 = call ptr @ast_add_sibling(ptr noundef nonnull %32, ptr noundef %37) #3
  br label %42

39:                                               ; preds = %29
  %40 = load ptr, ptr %7, align 8, !tbaa !5
  %41 = icmp eq ptr %40, null
  br i1 %41, label %49, label %.thread447

42:                                               ; preds = %.thread438, %36
  %.1375.ph = phi ptr [ %38, %36 ], [ %35, %.thread438 ]
  %.1372.ph = phi ptr [ %24, %36 ], [ %.0371437441, %.thread438 ]
  %43 = icmp eq ptr %.1375.ph, null
  br i1 %43, label %.thread447, label %46

.thread447:                                       ; preds = %39, %42
  %.1372446450 = phi ptr [ %.1372.ph, %42 ], [ %40, %39 ]
  %44 = call ptr @ast_from(ptr noundef %12, i32 noundef 2) #3
  %45 = call ptr @ast_add(ptr noundef nonnull %.1372446450, ptr noundef %44) #3
  br label %52

46:                                               ; preds = %42
  %47 = call ptr @ast_from(ptr noundef %12, i32 noundef 2) #3
  %48 = call ptr @ast_add_sibling(ptr noundef nonnull %.1375.ph, ptr noundef %47) #3
  br label %52

49:                                               ; preds = %39
  %50 = call ptr @ast_from(ptr noundef %12, i32 noundef 2) #3
  %51 = icmp eq ptr %50, null
  br i1 %51, label %59, label %.thread457

52:                                               ; preds = %.thread447, %46
  %.2376.ph = phi ptr [ %48, %46 ], [ %45, %.thread447 ]
  %.2373.ph = phi ptr [ %.1372.ph, %46 ], [ %.1372446450, %.thread447 ]
  %53 = icmp eq ptr %.2376.ph, null
  br i1 %53, label %.thread457, label %56

.thread457:                                       ; preds = %49, %52
  %.2373456460 = phi ptr [ %.2373.ph, %52 ], [ %50, %49 ]
  %54 = load ptr, ptr %4, align 8, !tbaa !5
  %55 = call ptr @ast_add(ptr noundef nonnull %.2373456460, ptr noundef %54) #3
  br label %63

56:                                               ; preds = %52
  %57 = load ptr, ptr %4, align 8, !tbaa !5
  %58 = call ptr @ast_add_sibling(ptr noundef nonnull %.2376.ph, ptr noundef %57) #3
  br label %63

59:                                               ; preds = %49
  %60 = load ptr, ptr %4, align 8, !tbaa !5
  %61 = call ptr @ast_from(ptr noundef %12, i32 noundef 139) #3
  %62 = icmp eq ptr %60, null
  br i1 %62, label %70, label %.thread467

63:                                               ; preds = %.thread457, %56
  %.3377.ph = phi ptr [ %58, %56 ], [ %55, %.thread457 ]
  %.3.ph = phi ptr [ %.2373.ph, %56 ], [ %.2373456460, %.thread457 ]
  %64 = call ptr @ast_from(ptr noundef %12, i32 noundef 139) #3
  %65 = icmp eq ptr %.3377.ph, null
  br i1 %65, label %.thread467, label %68

.thread467:                                       ; preds = %59, %63
  %.3466470 = phi ptr [ %.3.ph, %63 ], [ %60, %59 ]
  %66 = phi ptr [ %64, %63 ], [ %61, %59 ]
  %67 = call ptr @ast_add(ptr noundef nonnull %.3466470, ptr noundef %66) #3
  br label %72

68:                                               ; preds = %63
  %69 = call ptr @ast_add_sibling(ptr noundef nonnull %.3377.ph, ptr noundef %64) #3
  br label %72

70:                                               ; preds = %59
  call void @ast_inheritflags(ptr noundef %61) #3
  %71 = icmp eq ptr %61, null
  br i1 %71, label %79, label %.thread477

72:                                               ; preds = %.thread467, %68
  %.ph = phi ptr [ %64, %68 ], [ %66, %.thread467 ]
  %.4378.ph = phi ptr [ %69, %68 ], [ %67, %.thread467 ]
  %.4.ph = phi ptr [ %.3.ph, %68 ], [ %.3466470, %.thread467 ]
  call void @ast_inheritflags(ptr noundef %.ph) #3
  %73 = icmp eq ptr %.4378.ph, null
  br i1 %73, label %.thread477, label %76

.thread477:                                       ; preds = %70, %72
  %.4476480 = phi ptr [ %.4.ph, %72 ], [ %61, %70 ]
  %74 = call ptr @ast_from(ptr noundef %12, i32 noundef 2) #3
  %75 = call ptr @ast_add(ptr noundef nonnull %.4476480, ptr noundef %74) #3
  br label %84

76:                                               ; preds = %72
  %77 = call ptr @ast_from(ptr noundef %12, i32 noundef 2) #3
  %78 = call ptr @ast_add_sibling(ptr noundef nonnull %.4378.ph, ptr noundef %77) #3
  br label %84

79:                                               ; preds = %70
  %80 = call ptr @ast_from(ptr noundef %12, i32 noundef 2) #3
  %81 = icmp eq ptr %80, null
  br i1 %81, label %82, label %.thread487

82:                                               ; preds = %79
  %83 = call ptr @ast_from(ptr noundef %12, i32 noundef 2) #3
  br label %91

84:                                               ; preds = %.thread477, %76
  %.5379.ph = phi ptr [ %78, %76 ], [ %75, %.thread477 ]
  %.5.ph = phi ptr [ %.4.ph, %76 ], [ %.4476480, %.thread477 ]
  %85 = icmp eq ptr %.5379.ph, null
  br i1 %85, label %.thread487, label %88

.thread487:                                       ; preds = %79, %84
  %.5486490 = phi ptr [ %.5.ph, %84 ], [ %80, %79 ]
  %86 = call ptr @ast_from(ptr noundef %12, i32 noundef 2) #3
  %87 = call ptr @ast_add(ptr noundef nonnull %.5486490, ptr noundef %86) #3
  br label %91

88:                                               ; preds = %84
  %89 = call ptr @ast_from(ptr noundef %12, i32 noundef 2) #3
  %90 = call ptr @ast_add_sibling(ptr noundef nonnull %.5379.ph, ptr noundef %89) #3
  br label %91

91:                                               ; preds = %.thread487, %88, %82
  %.6 = phi ptr [ %83, %82 ], [ %.5486490, %.thread487 ], [ %.5.ph, %88 ]
  call void @ast_inheritflags(ptr noundef %.6) #3
  store ptr %24, ptr %9, align 8, !tbaa !5
  %92 = load ptr, ptr %5, align 8, !tbaa !5
  %93 = call ptr @ast_from(ptr noundef %92, i32 noundef 88) #3
  call void @ast_scope(ptr noundef %93) #3
  %94 = icmp eq ptr %93, null
  %95 = call ptr @ast_from(ptr noundef %92, i32 noundef 2) #3
  br i1 %94, label %96, label %98

96:                                               ; preds = %91
  %97 = icmp eq ptr %95, null
  br i1 %97, label %106, label %.thread496

98:                                               ; preds = %91
  %99 = call ptr @ast_add(ptr noundef nonnull %93, ptr noundef %95) #3
  %100 = icmp eq ptr %99, null
  br i1 %100, label %.thread496, label %103

.thread496:                                       ; preds = %96, %98
  %.0395495499 = phi ptr [ %93, %98 ], [ %95, %96 ]
  %101 = call ptr @ast_from_string(ptr noundef %92, ptr noundef nonnull @.str.17) #3
  %102 = call ptr @ast_add(ptr noundef nonnull %.0395495499, ptr noundef %101) #3
  br label %109

103:                                              ; preds = %98
  %104 = call ptr @ast_from_string(ptr noundef %92, ptr noundef nonnull @.str.17) #3
  %105 = call ptr @ast_add_sibling(ptr noundef nonnull %99, ptr noundef %104) #3
  br label %109

106:                                              ; preds = %96
  %107 = call ptr @ast_from_string(ptr noundef %92, ptr noundef nonnull @.str.17) #3
  %108 = icmp eq ptr %107, null
  br i1 %108, label %116, label %.thread506

109:                                              ; preds = %.thread496, %103
  %.1408.ph = phi ptr [ %105, %103 ], [ %102, %.thread496 ]
  %.1396.ph = phi ptr [ %93, %103 ], [ %.0395495499, %.thread496 ]
  %110 = icmp eq ptr %.1408.ph, null
  br i1 %110, label %.thread506, label %113

.thread506:                                       ; preds = %106, %109
  %.1396505509 = phi ptr [ %.1396.ph, %109 ], [ %107, %106 ]
  %111 = call ptr @ast_from(ptr noundef %92, i32 noundef 2) #3
  %112 = call ptr @ast_add(ptr noundef nonnull %.1396505509, ptr noundef %111) #3
  br label %120

113:                                              ; preds = %109
  %114 = call ptr @ast_from(ptr noundef %92, i32 noundef 2) #3
  %115 = call ptr @ast_add_sibling(ptr noundef nonnull %.1408.ph, ptr noundef %114) #3
  br label %120

116:                                              ; preds = %106
  %117 = call ptr @ast_from(ptr noundef %92, i32 noundef 2) #3
  %118 = call ptr @ast_from(ptr noundef %92, i32 noundef 164) #3
  %119 = icmp eq ptr %117, null
  br i1 %119, label %127, label %.thread516

120:                                              ; preds = %.thread506, %113
  %.2409.ph = phi ptr [ %115, %113 ], [ %112, %.thread506 ]
  %.2397.ph = phi ptr [ %.1396.ph, %113 ], [ %.1396505509, %.thread506 ]
  %121 = call ptr @ast_from(ptr noundef %92, i32 noundef 164) #3
  %122 = icmp eq ptr %.2409.ph, null
  br i1 %122, label %.thread516, label %125

.thread516:                                       ; preds = %116, %120
  %.2397515519 = phi ptr [ %.2397.ph, %120 ], [ %117, %116 ]
  %123 = phi ptr [ %121, %120 ], [ %118, %116 ]
  %124 = call ptr @ast_add(ptr noundef nonnull %.2397515519, ptr noundef %123) #3
  br label %129

125:                                              ; preds = %120
  %126 = call ptr @ast_add_sibling(ptr noundef nonnull %.2409.ph, ptr noundef %121) #3
  br label %129

127:                                              ; preds = %116
  call void @ast_inheritflags(ptr noundef %118) #3
  %128 = icmp eq ptr %118, null
  br i1 %128, label %136, label %.thread527

129:                                              ; preds = %.thread516, %125
  %.ph521 = phi ptr [ %121, %125 ], [ %123, %.thread516 ]
  %.3410.ph = phi ptr [ %126, %125 ], [ %124, %.thread516 ]
  %.3398.ph = phi ptr [ %.2397.ph, %125 ], [ %.2397515519, %.thread516 ]
  call void @ast_inheritflags(ptr noundef %.ph521) #3
  %130 = icmp eq ptr %.3410.ph, null
  br i1 %130, label %.thread527, label %133

.thread527:                                       ; preds = %127, %129
  %.3398526530 = phi ptr [ %.3398.ph, %129 ], [ %118, %127 ]
  %131 = call ptr @ast_from(ptr noundef %92, i32 noundef 2) #3
  %132 = call ptr @ast_add(ptr noundef nonnull %.3398526530, ptr noundef %131) #3
  br label %139

133:                                              ; preds = %129
  %134 = call ptr @ast_from(ptr noundef %92, i32 noundef 2) #3
  %135 = call ptr @ast_add_sibling(ptr noundef nonnull %.3410.ph, ptr noundef %134) #3
  br label %139

136:                                              ; preds = %127
  %137 = call ptr @ast_from(ptr noundef %92, i32 noundef 2) #3
  %138 = icmp eq ptr %137, null
  br i1 %138, label %146, label %.thread537

139:                                              ; preds = %.thread527, %133
  %.4411.ph = phi ptr [ %135, %133 ], [ %132, %.thread527 ]
  %.4399.ph = phi ptr [ %.3398.ph, %133 ], [ %.3398526530, %.thread527 ]
  %140 = icmp eq ptr %.4411.ph, null
  br i1 %140, label %.thread537, label %143

.thread537:                                       ; preds = %136, %139
  %.4399536540 = phi ptr [ %.4399.ph, %139 ], [ %137, %136 ]
  %141 = call ptr @ast_from(ptr noundef %92, i32 noundef 2) #3
  %142 = call ptr @ast_add(ptr noundef nonnull %.4399536540, ptr noundef %141) #3
  br label %150

143:                                              ; preds = %139
  %144 = call ptr @ast_from(ptr noundef %92, i32 noundef 2) #3
  %145 = call ptr @ast_add_sibling(ptr noundef nonnull %.4411.ph, ptr noundef %144) #3
  br label %150

146:                                              ; preds = %136
  %147 = call ptr @ast_from(ptr noundef %92, i32 noundef 2) #3
  %148 = call ptr @ast_from(ptr noundef %92, i32 noundef 175) #3
  %149 = icmp eq ptr %147, null
  br i1 %149, label %157, label %.thread547

150:                                              ; preds = %.thread537, %143
  %.5412.ph = phi ptr [ %145, %143 ], [ %142, %.thread537 ]
  %.5400.ph = phi ptr [ %.4399.ph, %143 ], [ %.4399536540, %.thread537 ]
  %151 = call ptr @ast_from(ptr noundef %92, i32 noundef 175) #3
  %152 = icmp eq ptr %.5412.ph, null
  br i1 %152, label %.thread547, label %155

.thread547:                                       ; preds = %146, %150
  %.5400546550 = phi ptr [ %.5400.ph, %150 ], [ %147, %146 ]
  %153 = phi ptr [ %151, %150 ], [ %148, %146 ]
  %154 = call ptr @ast_add(ptr noundef nonnull %.5400546550, ptr noundef %153) #3
  br label %157

155:                                              ; preds = %150
  %156 = call ptr @ast_add_sibling(ptr noundef nonnull %.5412.ph, ptr noundef %151) #3
  br label %157

157:                                              ; preds = %146, %.thread547, %155
  %158 = phi ptr [ %153, %.thread547 ], [ %151, %155 ], [ %148, %146 ]
  %.6413 = phi ptr [ %154, %.thread547 ], [ %156, %155 ], [ null, %146 ]
  %.6401 = phi ptr [ %.5400546550, %.thread547 ], [ %.5400.ph, %155 ], [ %148, %146 ]
  %159 = call ptr @ast_from(ptr noundef %92, i32 noundef 3) #3
  %160 = icmp eq ptr %158, null
  br i1 %160, label %163, label %161

161:                                              ; preds = %157
  %162 = call ptr @ast_add(ptr noundef nonnull %158, ptr noundef %159) #3
  br label %163

163:                                              ; preds = %157, %161
  %.0415 = phi ptr [ %158, %161 ], [ %159, %157 ]
  call void @ast_inheritflags(ptr noundef %159) #3
  call void @ast_inheritflags(ptr noundef %.0415) #3
  %164 = icmp eq ptr %.6401, null
  br i1 %164, label %165, label %167

165:                                              ; preds = %163
  %166 = call ptr @ast_from(ptr noundef %92, i32 noundef 2) #3
  br label %174

167:                                              ; preds = %163
  %168 = icmp eq ptr %.6413, null
  %169 = call ptr @ast_from(ptr noundef %92, i32 noundef 2) #3
  br i1 %168, label %170, label %172

170:                                              ; preds = %167
  %171 = call ptr @ast_add(ptr noundef nonnull %.6401, ptr noundef %169) #3
  br label %174

172:                                              ; preds = %167
  %173 = call ptr @ast_add_sibling(ptr noundef nonnull %.6413, ptr noundef %169) #3
  br label %174

174:                                              ; preds = %170, %172, %165
  %.7 = phi ptr [ %166, %165 ], [ %.6401, %170 ], [ %.6401, %172 ]
  call void @ast_inheritflags(ptr noundef %.7) #3
  %175 = call ptr @ast_from(ptr noundef %12, i32 noundef 184) #3
  %176 = icmp eq ptr %175, null
  %177 = call ptr @ast_from_string(ptr noundef %12, ptr noundef %21) #3
  br i1 %176, label %180, label %178

178:                                              ; preds = %174
  %179 = call ptr @ast_add(ptr noundef nonnull %175, ptr noundef %177) #3
  br label %180

180:                                              ; preds = %174, %178
  %.0417 = phi ptr [ %175, %178 ], [ %177, %174 ]
  call void @ast_inheritflags(ptr noundef %.0417) #3
  %181 = load ptr, ptr %8, align 8, !tbaa !5
  %182 = call i32 @ast_id(ptr noundef %181) #3
  %.not = icmp eq i32 %182, 2
  br i1 %.not, label %198, label %183

183:                                              ; preds = %180
  %184 = call ptr @ast_from(ptr noundef %12, i32 noundef 176) #3
  %185 = icmp eq ptr %184, null
  br i1 %185, label %186, label %189

186:                                              ; preds = %183
  br i1 %176, label %187, label %.thread556

187:                                              ; preds = %186
  %188 = load ptr, ptr %8, align 8, !tbaa !5
  br label %197

189:                                              ; preds = %183
  %190 = call ptr @ast_add(ptr noundef nonnull %184, ptr noundef %175) #3
  %191 = icmp eq ptr %190, null
  br i1 %191, label %.thread556, label %194

.thread556:                                       ; preds = %186, %189
  %.0404554559 = phi ptr [ %184, %189 ], [ %175, %186 ]
  %192 = load ptr, ptr %8, align 8, !tbaa !5
  %193 = call ptr @ast_add(ptr noundef nonnull %.0404554559, ptr noundef %192) #3
  br label %197

194:                                              ; preds = %189
  %195 = load ptr, ptr %8, align 8, !tbaa !5
  %196 = call ptr @ast_add_sibling(ptr noundef nonnull %190, ptr noundef %195) #3
  br label %197

197:                                              ; preds = %.thread556, %194, %187
  %.1405 = phi ptr [ %188, %187 ], [ %.0404554559, %.thread556 ], [ %184, %194 ]
  call void @ast_inheritflags(ptr noundef %.1405) #3
  br label %198

198:                                              ; preds = %197, %180
  %.0420 = phi ptr [ %184, %197 ], [ %175, %180 ]
  %199 = load ptr, ptr %8, align 8, !tbaa !5
  call void @ast_free_unattached(ptr noundef %199) #3
  %200 = call ptr @ast_from(ptr noundef %12, i32 noundef 177) #3
  %201 = call ptr @ast_from(ptr noundef %12, i32 noundef 19) #3
  %202 = icmp eq ptr %200, null
  br i1 %202, label %205, label %203

203:                                              ; preds = %198
  %204 = call ptr @ast_add(ptr noundef nonnull %200, ptr noundef %201) #3
  br label %205

205:                                              ; preds = %198, %203
  %.0390 = phi ptr [ %200, %203 ], [ %201, %198 ]
  %.0386 = phi ptr [ %204, %203 ], [ null, %198 ]
  %206 = icmp eq ptr %201, null
  br i1 %206, label %207, label %211

207:                                              ; preds = %205
  %208 = icmp eq ptr %.0420, null
  br i1 %208, label %209, label %.thread565

209:                                              ; preds = %207
  %210 = call ptr @ast_from_string(ptr noundef %12, ptr noundef nonnull @.str.17) #3
  br label %219

211:                                              ; preds = %205
  %212 = call ptr @ast_add(ptr noundef nonnull %201, ptr noundef %.0420) #3
  %213 = icmp eq ptr %212, null
  br i1 %213, label %.thread565, label %216

.thread565:                                       ; preds = %207, %211
  %.0384563568 = phi ptr [ %201, %211 ], [ %.0420, %207 ]
  %214 = call ptr @ast_from_string(ptr noundef %12, ptr noundef nonnull @.str.17) #3
  %215 = call ptr @ast_add(ptr noundef nonnull %.0384563568, ptr noundef %214) #3
  br label %219

216:                                              ; preds = %211
  %217 = call ptr @ast_from_string(ptr noundef %12, ptr noundef nonnull @.str.17) #3
  %218 = call ptr @ast_add_sibling(ptr noundef nonnull %212, ptr noundef %217) #3
  br label %219

219:                                              ; preds = %.thread565, %216, %209
  %.1385 = phi ptr [ %210, %209 ], [ %.0384563568, %.thread565 ], [ %201, %216 ]
  call void @ast_inheritflags(ptr noundef %.1385) #3
  %220 = call ptr @ast_from(ptr noundef %12, i32 noundef 169) #3
  %221 = icmp eq ptr %.0390, null
  br i1 %221, label %228, label %222

222:                                              ; preds = %219
  %223 = icmp eq ptr %.0386, null
  br i1 %223, label %224, label %226

224:                                              ; preds = %222
  %225 = call ptr @ast_add(ptr noundef nonnull %.0390, ptr noundef %220) #3
  br label %.thread570

226:                                              ; preds = %222
  %227 = call ptr @ast_add_sibling(ptr noundef nonnull %.0386, ptr noundef %220) #3
  br label %.thread570

.thread570:                                       ; preds = %224, %226
  %.1387.ph = phi ptr [ %227, %226 ], [ %225, %224 ]
  call void @ast_inheritflags(ptr noundef %220) #3
  br label %230

228:                                              ; preds = %219
  call void @ast_inheritflags(ptr noundef %220) #3
  %229 = icmp eq ptr %220, null
  br i1 %229, label %237, label %230

230:                                              ; preds = %.thread570, %228
  %.1387574 = phi ptr [ %.1387.ph, %.thread570 ], [ %.0386, %228 ]
  %.1391573 = phi ptr [ %.0390, %.thread570 ], [ %220, %228 ]
  %231 = icmp eq ptr %.1387574, null
  %232 = call ptr @ast_from(ptr noundef %12, i32 noundef 2) #3
  br i1 %231, label %233, label %235

233:                                              ; preds = %230
  %234 = call ptr @ast_add(ptr noundef nonnull %.1391573, ptr noundef %232) #3
  br label %.thread576

235:                                              ; preds = %230
  %236 = call ptr @ast_add_sibling(ptr noundef nonnull %.1387574, ptr noundef %232) #3
  br label %.thread576

237:                                              ; preds = %228
  %238 = call ptr @ast_from(ptr noundef %12, i32 noundef 2) #3
  %239 = icmp eq ptr %238, null
  br i1 %239, label %240, label %.thread576

240:                                              ; preds = %237
  %241 = call ptr @ast_from(ptr noundef %12, i32 noundef 2) #3
  br label %248

.thread576:                                       ; preds = %235, %233, %237
  %.2388580 = phi ptr [ %.0386, %237 ], [ %236, %235 ], [ %234, %233 ]
  %.2392579 = phi ptr [ %238, %237 ], [ %.1391573, %235 ], [ %.1391573, %233 ]
  %242 = icmp eq ptr %.2388580, null
  %243 = call ptr @ast_from(ptr noundef %12, i32 noundef 2) #3
  br i1 %242, label %244, label %246

244:                                              ; preds = %.thread576
  %245 = call ptr @ast_add(ptr noundef nonnull %.2392579, ptr noundef %243) #3
  br label %248

246:                                              ; preds = %.thread576
  %247 = call ptr @ast_add_sibling(ptr noundef nonnull %.2388580, ptr noundef %243) #3
  br label %248

248:                                              ; preds = %244, %246, %240
  %.3393 = phi ptr [ %241, %240 ], [ %.2392579, %244 ], [ %.2392579, %246 ]
  call void @ast_inheritflags(ptr noundef %.3393) #3
  %249 = call ptr @ast_childidx(ptr noundef %93, i64 noundef 3) #3
  %250 = call ptr @ast_childidx(ptr noundef %93, i64 noundef 6) #3
  %251 = call ptr @ast_childidx(ptr noundef %200, i64 noundef 1) #3
  %252 = load ptr, ptr %9, align 8, !tbaa !5
  %253 = call ptr @ast_childidx(ptr noundef %252, i64 noundef 4) #3
  %254 = load ptr, ptr %5, align 8, !tbaa !5
  %255 = call ptr @ast_child(ptr noundef %254) #3
  %.not429581 = icmp eq ptr %255, null
  br i1 %.not429581, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %248, %262
  %.0364584 = phi i1 [ %.1365, %262 ], [ false, %248 ]
  %.0366583 = phi i1 [ %.1367, %262 ], [ false, %248 ]
  %.0369582 = phi ptr [ %263, %262 ], [ %255, %248 ]
  %256 = call i32 @ast_id(ptr noundef nonnull %.0369582) #3
  switch i32 %256, label %260 [
    i32 140, label %257
    i32 141, label %257
    i32 86, label %257
    i32 90, label %258
  ]

257:                                              ; preds = %.lr.ph, %.lr.ph, %.lr.ph
  call void @add_field_to_object(ptr noundef %0, ptr noundef nonnull %.0369582, ptr noundef %253, ptr noundef %249, ptr noundef %250, ptr noundef %251)
  br label %262

258:                                              ; preds = %.lr.ph
  %259 = call ptr @ast_append(ptr noundef %253, ptr noundef nonnull %.0369582) #3
  br label %262

260:                                              ; preds = %.lr.ph
  %261 = call ptr @ast_append(ptr noundef %253, ptr noundef nonnull %.0369582) #3
  br label %262

262:                                              ; preds = %260, %258, %257
  %.1367 = phi i1 [ %.0366583, %260 ], [ %.0366583, %258 ], [ true, %257 ]
  %.1365 = phi i1 [ %.0364584, %260 ], [ true, %258 ], [ %.0364584, %257 ]
  %263 = call ptr @ast_sibling(ptr noundef nonnull %.0369582) #3
  %.not429 = icmp eq ptr %263, null
  br i1 %.not429, label %._crit_edge, label %.lr.ph, !llvm.loop !9

._crit_edge:                                      ; preds = %262, %248
  %.0366.lcssa = phi i1 [ false, %248 ], [ %.1367, %262 ]
  %.0364.lcssa = phi i1 [ false, %248 ], [ %.1365, %262 ]
  %264 = call ptr @ast_append(ptr noundef %253, ptr noundef %93) #3
  %265 = call ptr @ast_nearest(ptr noundef %12, i32 noundef 138) #3
  %266 = call ptr @ast_append(ptr noundef %265, ptr noundef %252) #3
  %267 = call ptr @ast_from(ptr noundef %12, i32 noundef 139) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #3
  store ptr null, ptr %10, align 8, !tbaa !5
  %268 = load ptr, ptr %1, align 8, !tbaa !5
  %269 = call zeroext i1 @capture_from_type(ptr noundef %0, ptr noundef %268, ptr noundef nonnull %9, ptr noundef %267, ptr noundef nonnull %10)
  %270 = call ptr @ast_child(ptr noundef %267) #3
  %.not430586 = icmp eq ptr %270, null
  br i1 %.not430586, label %._crit_edge590, label %.lr.ph589

._crit_edge590:                                   ; preds = %.lr.ph589, %._crit_edge
  %.2368.lcssa = phi i1 [ %.0366.lcssa, %._crit_edge ], [ true, %.lr.ph589 ]
  call void @ast_free_unattached(ptr noundef %267) #3
  %271 = load ptr, ptr %9, align 8, !tbaa !5
  call void @ast_resetpass(ptr noundef %271, i32 noundef 2) #3
  %272 = load ptr, ptr %3, align 8, !tbaa !5
  %273 = call i32 @ast_id(ptr noundef %272) #3
  br i1 %.0364.lcssa, label %275, label %282

.lr.ph589:                                        ; preds = %._crit_edge, %.lr.ph589
  %.0361587 = phi ptr [ %274, %.lr.ph589 ], [ %270, %._crit_edge ]
  call void @add_field_to_object(ptr noundef %0, ptr noundef nonnull %.0361587, ptr noundef %253, ptr noundef %249, ptr noundef %250, ptr noundef %251)
  %274 = call ptr @ast_sibling(ptr noundef nonnull %.0361587) #3
  %.not430 = icmp eq ptr %274, null
  br i1 %.not430, label %._crit_edge590, label %.lr.ph589, !llvm.loop !11

275:                                              ; preds = %._crit_edge590
  %276 = load ptr, ptr %9, align 8, !tbaa !5
  %277 = call ptr @ast_setid(ptr noundef %276, i32 noundef 77) #3
  switch i32 %273, label %278 [
    i32 96, label %287
    i32 2, label %287
  ]

278:                                              ; preds = %275
  %279 = getelementptr inbounds i8, ptr %0, i64 216
  %280 = load ptr, ptr %279, align 8, !tbaa !12
  %281 = load ptr, ptr %3, align 8, !tbaa !5
  call void (ptr, ptr, ptr, ...) @ast_error(ptr noundef %280, ptr noundef %281, ptr noundef nonnull @.str.18) #3
  br label %287

282:                                              ; preds = %._crit_edge590
  br i1 %.2368.lcssa, label %287, label %283

283:                                              ; preds = %282
  switch i32 %273, label %287 [
    i32 96, label %284
    i32 95, label %284
    i32 94, label %284
    i32 2, label %284
  ]

284:                                              ; preds = %283, %283, %283, %283
  %285 = load ptr, ptr %9, align 8, !tbaa !5
  %286 = call ptr @ast_setid(ptr noundef %285, i32 noundef 74) #3
  br label %287

287:                                              ; preds = %283, %278, %275, %275, %282, %284
  %.2.shrunk = phi i1 [ %269, %282 ], [ %269, %284 ], [ %269, %283 ], [ false, %278 ], [ %269, %275 ], [ %269, %275 ]
  %.0 = phi i32 [ %273, %282 ], [ 94, %284 ], [ %273, %283 ], [ 96, %278 ], [ 96, %275 ], [ 96, %275 ]
  %288 = load ptr, ptr %9, align 8, !tbaa !5
  %289 = call i32 @ast_id(ptr noundef %288) #3
  %.not431 = icmp eq i32 %289, 74
  br i1 %.not431, label %294, label %290

290:                                              ; preds = %287
  %291 = load ptr, ptr %9, align 8, !tbaa !5
  %292 = call zeroext i1 @ast_has_annotation(ptr noundef %291, ptr noundef nonnull @.str.15) #3
  br i1 %292, label %293, label %294

293:                                              ; preds = %290
  call void @ponyint_assert_fail(ptr noundef nonnull @.str.19, ptr noundef nonnull @.str.1, i64 noundef 823, ptr noundef nonnull @__func__.expr_object) #3
  br label %294

294:                                              ; preds = %293, %290, %287
  %295 = call ptr @ast_child(ptr noundef %93) #3
  %296 = call ptr @ast_setid(ptr noundef %295, i32 noundef %.0) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #3
  %297 = call ptr @ast_childidx(ptr noundef %93, i64 noundef 4) #3
  store ptr %297, ptr %11, align 8, !tbaa !5
  %298 = load ptr, ptr %9, align 8, !tbaa !5
  %299 = call ptr @type_for_class(ptr noundef %0, ptr noundef %298, ptr noundef %297, i32 noundef %.0, i32 noundef 57, i1 noundef zeroext false) #3
  call void @ast_replace(ptr noundef nonnull %11, ptr noundef %299) #3
  %300 = load ptr, ptr %4, align 8, !tbaa !5
  %301 = call zeroext i1 @catch_up_provides(ptr noundef %0, ptr noundef %300)
  br i1 %301, label %302, label %308

302:                                              ; preds = %294
  %303 = call zeroext i1 @ast_passes_type(ptr noundef nonnull %9, ptr noundef %0, i32 noundef 10) #3
  br i1 %303, label %304, label %308

304:                                              ; preds = %302
  call void @ast_replace(ptr noundef nonnull %1, ptr noundef %200) #3
  %305 = call i32 @ast_visit(ptr noundef nonnull %1, ptr noundef nonnull @pass_syntax, ptr noundef null, ptr noundef %0, i32 noundef 1) #3
  %.not432 = icmp eq i32 %305, 0
  br i1 %.not432, label %306, label %308

306:                                              ; preds = %304
  %307 = call zeroext i1 @ast_passes_subtree(ptr noundef nonnull %1, ptr noundef %0, i32 noundef 10) #3
  %spec.select433 = select i1 %307, i1 %.2.shrunk, i1 false
  br label %308

308:                                              ; preds = %306, %304, %302, %294
  %.0362 = phi i1 [ false, %294 ], [ false, %302 ], [ false, %304 ], [ %spec.select433, %306 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #3
  ret i1 %.0362
}

declare ptr @package_hygienic_id(ptr noundef) local_unnamed_addr #0

declare void @collect_type_params(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #0

declare ptr @ast_data(ptr noundef) local_unnamed_addr #0

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

declare ptr @ast_append(ptr noundef, ptr noundef) local_unnamed_addr #0

declare ptr @ast_nearest(ptr noundef, i32 noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare hidden zeroext i1 @capture_from_type(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

declare void @ast_resetpass(ptr noundef, i32 noundef) local_unnamed_addr #0

declare ptr @ast_setid(ptr noundef, i32 noundef) local_unnamed_addr #0

declare zeroext i1 @ast_has_annotation(ptr noundef, ptr noundef) local_unnamed_addr #0

declare ptr @type_for_class(ptr noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef, i1 noundef zeroext) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare hidden zeroext i1 @catch_up_provides(ptr noundef, ptr noundef) local_unnamed_addr #2

declare zeroext i1 @ast_passes_type(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #0

attributes #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 #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
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, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = distinct !{!9, !10}
!10 = !{!"llvm.loop.mustprogress"}
!11 = distinct !{!11, !10}
!12 = !{!13, !6, i64 216}
!13 = !{!"pass_opt_t", !14, i64 0, !14, i64 4, !15, i64 8, !15, i64 9, !15, i64 10, !15, i64 11, !15, i64 12, !15, i64 13, !15, i64 14, !15, i64 15, !15, i64 16, !15, i64 17, !15, i64 18, !15, i64 19, !15, i64 20, !15, i64 21, !14, i64 24, !16, i64 32, !15, i64 40, !15, i64 41, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !6, i64 104, !6, i64 112, !6, i64 120, !6, i64 128, !6, i64 136, !6, i64 144, !6, i64 152, !6, i64 160, !6, i64 168, !17, i64 176, !6, i64 224, !6, i64 232}
!14 = !{!"int", !7, i64 0}
!15 = !{!"_Bool", !7, i64 0}
!16 = !{!"long", !7, i64 0}
!17 = !{!"typecheck_t", !6, i64 0, !18, i64 8, !6, i64 40}
!18 = !{!"typecheck_stats_t", !16, i64 0, !16, i64 8, !16, i64 16, !16, i64 24}


; Effective O3 passes: AggressiveInstCombinePass,CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,SROAPass,SimplifyCFGPass