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

; 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 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [74 x i8], align 1
@__func__.expr_array = external hidden unnamed_addr constant [11 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [90 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [67 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [5 x i8], align 1

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

declare i32 @ast_id(ptr noundef) #1

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

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

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

declare zeroext i1 @is_subtype(ptr noundef, ptr noundef, ptr noundef, ptr noundef) #1

declare void @ast_free_unattached(ptr noundef) #1

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

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

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

declare void @ast_inheritflags(ptr noundef) #1

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

; Function Attrs: nounwind uwtable
define dso_local zeroext i1 @expr_array(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 ptr, align 8
  %8 = alloca i8, align 1
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca [3 x ptr], align 16
  %12 = alloca i64, align 8
  %13 = alloca i32, align 4
  %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 ptr, align 8
  %81 = alloca ptr, align 8
  %82 = alloca ptr, align 8
  %83 = alloca ptr, align 8
  %84 = alloca ptr, align 8
  %85 = alloca ptr, align 8
  %86 = alloca ptr, align 8
  %87 = alloca ptr, align 8
  %88 = alloca ptr, align 8
  %89 = alloca ptr, align 8
  %90 = alloca ptr, align 8
  %91 = alloca ptr, align 8
  %92 = alloca ptr, align 8
  %93 = alloca ptr, align 8
  %94 = alloca ptr, align 8
  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
  %95 = load ptr, ptr %5, align 8, !tbaa !5
  %96 = load ptr, ptr %95, align 8, !tbaa !5
  store ptr %96, ptr %6, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #3
  store ptr null, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %8) #3
  store i8 0, ptr %8, align 1, !tbaa !9
  %97 = load ptr, ptr %6, align 8, !tbaa !5
  %98 = call i32 @ast_id(ptr noundef %97)
  %99 = icmp eq i32 %98, 179
  br i1 %99, label %100, label %101

100:                                              ; preds = %2
  br label %102

101:                                              ; preds = %2
  call void @ponyint_assert_fail(ptr noundef @.str, ptr noundef @.str.1, i64 noundef 417, ptr noundef @__func__.expr_array)
  br label %102

102:                                              ; preds = %101, %100
  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 24, ptr %11) #3
  store ptr %9, ptr %11, align 8, !tbaa !5
  %103 = getelementptr inbounds ptr, ptr %11, i64 1
  store ptr %10, ptr %103, align 8, !tbaa !5
  %104 = getelementptr inbounds ptr, ptr %11, i64 2
  store ptr null, ptr %104, align 8, !tbaa !5
  %105 = load ptr, ptr %6, align 8, !tbaa !5
  %106 = getelementptr inbounds [3 x ptr], ptr %11, i64 0, i64 0
  call void @ast_get_children(ptr noundef %105, i64 noundef 2, ptr noundef %106)
  call void @llvm.lifetime.end.p0(i64 24, ptr %11) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #3
  %107 = load ptr, ptr %10, align 8, !tbaa !5
  %108 = call i64 @ast_childcount(ptr noundef %107)
  store i64 %108, ptr %12, align 8, !tbaa !11
  %109 = load ptr, ptr %9, align 8, !tbaa !5
  %110 = call i32 @ast_id(ptr noundef %109)
  %111 = icmp ne i32 %110, 2
  br i1 %111, label %112, label %114

112:                                              ; preds = %102
  %113 = load ptr, ptr %9, align 8, !tbaa !5
  store ptr %113, ptr %7, align 8, !tbaa !5
  store i8 1, ptr %8, align 1, !tbaa !9
  br label %114

114:                                              ; preds = %112, %102
  %115 = load i8, ptr %8, align 1, !tbaa !9, !range !13, !noundef !14
  %116 = trunc i8 %115 to i1
  br i1 %116, label %126, label %117

117:                                              ; preds = %114
  %118 = load i64, ptr %12, align 8, !tbaa !11
  %119 = icmp eq i64 %118, 0
  br i1 %119, label %120, label %126

120:                                              ; preds = %117
  %121 = load ptr, ptr %4, align 8, !tbaa !5
  %122 = getelementptr inbounds %struct.pass_opt_t, ptr %121, i32 0, i32 36
  %123 = getelementptr inbounds %struct.typecheck_t, ptr %122, i32 0, i32 2
  %124 = load ptr, ptr %123, align 8, !tbaa !15
  %125 = load ptr, ptr %6, align 8, !tbaa !5
  call void (ptr, ptr, ptr, ...) @ast_error(ptr noundef %124, ptr noundef %125, ptr noundef @.str.2)
  store i1 false, ptr %3, align 1
  store i32 1, ptr %13, align 4
  br label %883

126:                                              ; preds = %117, %114
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #3
  %127 = load ptr, ptr %10, align 8, !tbaa !5
  %128 = call ptr @ast_child(ptr noundef %127)
  store ptr %128, ptr %14, align 8, !tbaa !5
  br label %129

129:                                              ; preds = %211, %126
  %130 = load ptr, ptr %14, align 8, !tbaa !5
  %131 = icmp ne ptr %130, null
  br i1 %131, label %133, label %132

132:                                              ; preds = %129
  store i32 2, ptr %13, align 4
  br label %214

133:                                              ; preds = %129
  %134 = load ptr, ptr %14, align 8, !tbaa !5
  %135 = call i32 @ast_checkflag(ptr noundef %134, i32 noundef 1048576)
  %136 = icmp ne i32 %135, 0
  br i1 %136, label %137, label %144

137:                                              ; preds = %133
  %138 = load ptr, ptr %4, align 8, !tbaa !5
  %139 = getelementptr inbounds %struct.pass_opt_t, ptr %138, i32 0, i32 36
  %140 = getelementptr inbounds %struct.typecheck_t, ptr %139, i32 0, i32 2
  %141 = load ptr, ptr %140, align 8, !tbaa !15
  %142 = load ptr, ptr %14, align 8, !tbaa !5
  call void (ptr, ptr, ptr, ...) @ast_error(ptr noundef %141, ptr noundef %142, ptr noundef @.str.3)
  %143 = load ptr, ptr %7, align 8, !tbaa !5
  call void @ast_free_unattached(ptr noundef %143)
  store i1 false, ptr %3, align 1
  store i32 1, ptr %13, align 4
  br label %214

144:                                              ; preds = %133
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #3
  %145 = load ptr, ptr %14, align 8, !tbaa !5
  %146 = call ptr @ast_type(ptr noundef %145)
  store ptr %146, ptr %15, align 8, !tbaa !5
  %147 = load ptr, ptr %15, align 8, !tbaa !5
  %148 = call zeroext i1 @is_typecheck_error(ptr noundef %147)
  br i1 %148, label %149, label %150

149:                                              ; preds = %144
  store i1 false, ptr %3, align 1
  store i32 1, ptr %13, align 4
  br label %208

150:                                              ; preds = %144
  %151 = load i8, ptr %8, align 1, !tbaa !9, !range !13, !noundef !14
  %152 = trunc i8 %151 to i1
  br i1 %152, label %153, label %196

153:                                              ; preds = %150
  %154 = load ptr, ptr %7, align 8, !tbaa !5
  %155 = load ptr, ptr %4, align 8, !tbaa !5
  %156 = call zeroext i1 @coerce_literals(ptr noundef %14, ptr noundef %154, ptr noundef %155)
  br i1 %156, label %158, label %157

157:                                              ; preds = %153
  store i1 false, ptr %3, align 1
  store i32 1, ptr %13, align 4
  br label %208

158:                                              ; preds = %153
  %159 = load ptr, ptr %14, align 8, !tbaa !5
  %160 = call ptr @ast_type(ptr noundef %159)
  store ptr %160, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #3
  %161 = load ptr, ptr %7, align 8, !tbaa !5
  %162 = call ptr @consume_type(ptr noundef %161, i32 noundef 2, i1 noundef zeroext false)
  store ptr %162, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #3
  store ptr null, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #3
  store ptr null, ptr %18, align 8, !tbaa !5
  %163 = load ptr, ptr %16, align 8, !tbaa !5
  %164 = icmp eq ptr %163, null
  br i1 %164, label %165, label %173

165:                                              ; preds = %158
  %166 = load ptr, ptr %14, align 8, !tbaa !5
  %167 = load ptr, ptr %7, align 8, !tbaa !5
  %168 = call ptr @ast_print_type(ptr noundef %167)
  call void (ptr, ptr, ptr, ...) @ast_error_frame(ptr noundef %18, ptr noundef %166, ptr noundef @.str.4, ptr noundef %168)
  call void @errorframe_append(ptr noundef %18, ptr noundef %17)
  %169 = load ptr, ptr %4, align 8, !tbaa !5
  %170 = getelementptr inbounds %struct.pass_opt_t, ptr %169, i32 0, i32 36
  %171 = getelementptr inbounds %struct.typecheck_t, ptr %170, i32 0, i32 2
  %172 = load ptr, ptr %171, align 8, !tbaa !15
  call void @errorframe_report(ptr noundef %18, ptr noundef %172)
  store i1 false, ptr %3, align 1
  store i32 1, ptr %13, align 4
  br label %193

173:                                              ; preds = %158
  %174 = load ptr, ptr %15, align 8, !tbaa !5
  %175 = load ptr, ptr %16, align 8, !tbaa !5
  %176 = load ptr, ptr %4, align 8, !tbaa !5
  %177 = call zeroext i1 @is_subtype(ptr noundef %174, ptr noundef %175, ptr noundef %17, ptr noundef %176)
  br i1 %177, label %191, label %178

178:                                              ; preds = %173
  %179 = load ptr, ptr %14, align 8, !tbaa !5
  call void (ptr, ptr, ptr, ...) @ast_error_frame(ptr noundef %18, ptr noundef %179, ptr noundef @.str.5)
  %180 = load ptr, ptr %9, align 8, !tbaa !5
  %181 = load ptr, ptr %7, align 8, !tbaa !5
  %182 = call ptr @ast_print_type(ptr noundef %181)
  call void (ptr, ptr, ptr, ...) @ast_error_frame(ptr noundef %18, ptr noundef %180, ptr noundef @.str.6, ptr noundef %182)
  %183 = load ptr, ptr %15, align 8, !tbaa !5
  %184 = load ptr, ptr %15, align 8, !tbaa !5
  %185 = call ptr @ast_print_type(ptr noundef %184)
  call void (ptr, ptr, ptr, ...) @ast_error_frame(ptr noundef %18, ptr noundef %183, ptr noundef @.str.7, ptr noundef %185)
  call void @errorframe_append(ptr noundef %18, ptr noundef %17)
  %186 = load ptr, ptr %4, align 8, !tbaa !5
  %187 = getelementptr inbounds %struct.pass_opt_t, ptr %186, i32 0, i32 36
  %188 = getelementptr inbounds %struct.typecheck_t, ptr %187, i32 0, i32 2
  %189 = load ptr, ptr %188, align 8, !tbaa !15
  call void @errorframe_report(ptr noundef %18, ptr noundef %189)
  %190 = load ptr, ptr %16, align 8, !tbaa !5
  call void @ast_free_unattached(ptr noundef %190)
  store i1 false, ptr %3, align 1
  store i32 1, ptr %13, align 4
  br label %193

191:                                              ; preds = %173
  br label %192

192:                                              ; preds = %191
  store i32 0, ptr %13, align 4
  br label %193

193:                                              ; preds = %192, %178, %165
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #3
  %194 = load i32, ptr %13, align 4
  switch i32 %194, label %208 [
    i32 0, label %195
  ]

195:                                              ; preds = %193
  br label %207

196:                                              ; preds = %150
  %197 = load ptr, ptr %15, align 8, !tbaa !5
  %198 = call zeroext i1 @is_type_literal(ptr noundef %197)
  br i1 %198, label %199, label %202

199:                                              ; preds = %196
  %200 = load ptr, ptr %7, align 8, !tbaa !5
  call void @ast_free_unattached(ptr noundef %200)
  %201 = load ptr, ptr %6, align 8, !tbaa !5
  call void @make_literal_type(ptr noundef %201)
  store i1 true, ptr %3, align 1
  store i32 1, ptr %13, align 4
  br label %208

202:                                              ; preds = %196
  %203 = load ptr, ptr %4, align 8, !tbaa !5
  %204 = load ptr, ptr %7, align 8, !tbaa !5
  %205 = load ptr, ptr %15, align 8, !tbaa !5
  %206 = call ptr @type_union(ptr noundef %203, ptr noundef %204, ptr noundef %205)
  store ptr %206, ptr %7, align 8, !tbaa !5
  br label %207

207:                                              ; preds = %202, %195
  store i32 0, ptr %13, align 4
  br label %208

208:                                              ; preds = %207, %199, %193, %157, %149
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #3
  %209 = load i32, ptr %13, align 4
  switch i32 %209, label %214 [
    i32 0, label %210
  ]

210:                                              ; preds = %208
  br label %211

211:                                              ; preds = %210
  %212 = load ptr, ptr %14, align 8, !tbaa !5
  %213 = call ptr @ast_sibling(ptr noundef %212)
  store ptr %213, ptr %14, align 8, !tbaa !5
  br label %129, !llvm.loop !20

214:                                              ; preds = %208, %137, %132
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #3
  %215 = load i32, ptr %13, align 4
  switch i32 %215, label %883 [
    i32 2, label %216
  ]

216:                                              ; preds = %214
  %217 = load i8, ptr %8, align 1, !tbaa !9, !range !13, !noundef !14
  %218 = trunc i8 %217 to i1
  br i1 %218, label %224, label %219

219:                                              ; preds = %216
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #3
  %220 = load ptr, ptr %7, align 8, !tbaa !5
  store ptr %220, ptr %19, align 8, !tbaa !5
  %221 = load ptr, ptr %19, align 8, !tbaa !5
  %222 = call ptr @alias(ptr noundef %221)
  store ptr %222, ptr %7, align 8, !tbaa !5
  %223 = load ptr, ptr %19, align 8, !tbaa !5
  call void @ast_free_unattached(ptr noundef %223)
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #3
  br label %224

224:                                              ; preds = %219, %216
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #3
  %225 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %225, ptr %21, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #3
  store ptr null, 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
  %226 = load ptr, ptr %21, align 8, !tbaa !5
  %227 = call ptr @ast_from(ptr noundef %226, i32 noundef 184)
  store ptr %227, ptr %24, align 8, !tbaa !5
  %228 = load ptr, ptr %22, align 8, !tbaa !5
  %229 = icmp eq ptr %228, null
  br i1 %229, label %230, label %232

230:                                              ; preds = %224
  %231 = load ptr, ptr %24, align 8, !tbaa !5
  store ptr %231, ptr %22, align 8, !tbaa !5
  br label %244

232:                                              ; preds = %224
  %233 = load ptr, ptr %23, align 8, !tbaa !5
  %234 = icmp eq ptr %233, null
  br i1 %234, label %235, label %239

235:                                              ; preds = %232
  %236 = load ptr, ptr %22, align 8, !tbaa !5
  %237 = load ptr, ptr %24, align 8, !tbaa !5
  %238 = call ptr @ast_add(ptr noundef %236, ptr noundef %237)
  store ptr %238, ptr %23, align 8, !tbaa !5
  br label %243

239:                                              ; preds = %232
  %240 = load ptr, ptr %23, align 8, !tbaa !5
  %241 = load ptr, ptr %24, align 8, !tbaa !5
  %242 = call ptr @ast_add_sibling(ptr noundef %240, ptr noundef %241)
  store ptr %242, ptr %23, align 8, !tbaa !5
  br label %243

243:                                              ; preds = %239, %235
  br label %244

244:                                              ; preds = %243, %230
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #3
  %245 = load ptr, ptr %24, align 8, !tbaa !5
  store ptr %245, 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
  %246 = load ptr, ptr %25, align 8, !tbaa !5
  %247 = icmp eq ptr %246, null
  br i1 %247, label %248, label %251

248:                                              ; preds = %244
  %249 = load ptr, ptr %21, align 8, !tbaa !5
  %250 = call ptr @ast_from_string(ptr noundef %249, ptr noundef @.str.8)
  store ptr %250, ptr %25, align 8, !tbaa !5
  br label %265

251:                                              ; preds = %244
  %252 = load ptr, ptr %26, align 8, !tbaa !5
  %253 = icmp eq ptr %252, null
  br i1 %253, label %254, label %259

254:                                              ; preds = %251
  %255 = load ptr, ptr %25, align 8, !tbaa !5
  %256 = load ptr, ptr %21, align 8, !tbaa !5
  %257 = call ptr @ast_from_string(ptr noundef %256, ptr noundef @.str.8)
  %258 = call ptr @ast_add(ptr noundef %255, ptr noundef %257)
  store ptr %258, ptr %26, align 8, !tbaa !5
  br label %264

259:                                              ; preds = %251
  %260 = load ptr, ptr %26, align 8, !tbaa !5
  %261 = load ptr, ptr %21, align 8, !tbaa !5
  %262 = call ptr @ast_from_string(ptr noundef %261, ptr noundef @.str.8)
  %263 = call ptr @ast_add_sibling(ptr noundef %260, ptr noundef %262)
  store ptr %263, ptr %26, align 8, !tbaa !5
  br label %264

264:                                              ; preds = %259, %254
  br label %265

265:                                              ; preds = %264, %248
  %266 = load ptr, ptr %25, align 8, !tbaa !5
  call void @ast_inheritflags(ptr noundef %266)
  %267 = load ptr, ptr %25, align 8, !tbaa !5
  %268 = load ptr, ptr %26, align 8, !tbaa !5
  %269 = 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
  %270 = load ptr, ptr %22, align 8, !tbaa !5
  store ptr %270, ptr %20, 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
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #3
  %271 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %271, 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
  %272 = load ptr, ptr %29, align 8, !tbaa !5
  %273 = call ptr @ast_from(ptr noundef %272, i32 noundef 176)
  store ptr %273, ptr %32, align 8, !tbaa !5
  %274 = load ptr, ptr %30, align 8, !tbaa !5
  %275 = icmp eq ptr %274, null
  br i1 %275, label %276, label %278

276:                                              ; preds = %265
  %277 = load ptr, ptr %32, align 8, !tbaa !5
  store ptr %277, ptr %30, align 8, !tbaa !5
  br label %290

278:                                              ; preds = %265
  %279 = load ptr, ptr %31, align 8, !tbaa !5
  %280 = icmp eq ptr %279, null
  br i1 %280, label %281, label %285

281:                                              ; preds = %278
  %282 = load ptr, ptr %30, align 8, !tbaa !5
  %283 = load ptr, ptr %32, align 8, !tbaa !5
  %284 = call ptr @ast_add(ptr noundef %282, ptr noundef %283)
  store ptr %284, ptr %31, align 8, !tbaa !5
  br label %289

285:                                              ; preds = %278
  %286 = load ptr, ptr %31, align 8, !tbaa !5
  %287 = load ptr, ptr %32, align 8, !tbaa !5
  %288 = call ptr @ast_add_sibling(ptr noundef %286, ptr noundef %287)
  store ptr %288, ptr %31, align 8, !tbaa !5
  br label %289

289:                                              ; preds = %285, %281
  br label %290

290:                                              ; preds = %289, %276
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #3
  %291 = load ptr, ptr %32, align 8, !tbaa !5
  store ptr %291, 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
  %292 = load ptr, ptr %33, align 8, !tbaa !5
  %293 = icmp eq ptr %292, null
  br i1 %293, label %294, label %296

294:                                              ; preds = %290
  %295 = load ptr, ptr %20, align 8, !tbaa !5
  store ptr %295, ptr %33, align 8, !tbaa !5
  br label %308

296:                                              ; preds = %290
  %297 = load ptr, ptr %34, align 8, !tbaa !5
  %298 = icmp eq ptr %297, null
  br i1 %298, label %299, label %303

299:                                              ; preds = %296
  %300 = load ptr, ptr %33, align 8, !tbaa !5
  %301 = load ptr, ptr %20, align 8, !tbaa !5
  %302 = call ptr @ast_add(ptr noundef %300, ptr noundef %301)
  store ptr %302, ptr %34, align 8, !tbaa !5
  br label %307

303:                                              ; preds = %296
  %304 = load ptr, ptr %34, align 8, !tbaa !5
  %305 = load ptr, ptr %20, align 8, !tbaa !5
  %306 = call ptr @ast_add_sibling(ptr noundef %304, ptr noundef %305)
  store ptr %306, ptr %34, align 8, !tbaa !5
  br label %307

307:                                              ; preds = %303, %299
  br label %308

308:                                              ; preds = %307, %294
  %309 = load ptr, ptr %29, align 8, !tbaa !5
  %310 = call ptr @ast_from(ptr noundef %309, i32 noundef 166)
  store ptr %310, ptr %35, align 8, !tbaa !5
  %311 = load ptr, ptr %33, align 8, !tbaa !5
  %312 = icmp eq ptr %311, null
  br i1 %312, label %313, label %315

313:                                              ; preds = %308
  %314 = load ptr, ptr %35, align 8, !tbaa !5
  store ptr %314, ptr %33, align 8, !tbaa !5
  br label %327

315:                                              ; preds = %308
  %316 = load ptr, ptr %34, align 8, !tbaa !5
  %317 = icmp eq ptr %316, null
  br i1 %317, label %318, label %322

318:                                              ; preds = %315
  %319 = load ptr, ptr %33, align 8, !tbaa !5
  %320 = load ptr, ptr %35, align 8, !tbaa !5
  %321 = call ptr @ast_add(ptr noundef %319, ptr noundef %320)
  store ptr %321, ptr %34, align 8, !tbaa !5
  br label %326

322:                                              ; preds = %315
  %323 = load ptr, ptr %34, align 8, !tbaa !5
  %324 = load ptr, ptr %35, align 8, !tbaa !5
  %325 = call ptr @ast_add_sibling(ptr noundef %323, ptr noundef %324)
  store ptr %325, ptr %34, align 8, !tbaa !5
  br label %326

326:                                              ; preds = %322, %318
  br label %327

327:                                              ; preds = %326, %313
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #3
  %328 = load ptr, ptr %35, align 8, !tbaa !5
  store ptr %328, 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
  %329 = load ptr, ptr %36, align 8, !tbaa !5
  %330 = icmp eq ptr %329, null
  br i1 %330, label %331, label %333

331:                                              ; preds = %327
  %332 = load ptr, ptr %7, align 8, !tbaa !5
  store ptr %332, ptr %36, align 8, !tbaa !5
  br label %345

333:                                              ; preds = %327
  %334 = load ptr, ptr %37, align 8, !tbaa !5
  %335 = icmp eq ptr %334, null
  br i1 %335, label %336, label %340

336:                                              ; preds = %333
  %337 = load ptr, ptr %36, align 8, !tbaa !5
  %338 = load ptr, ptr %7, align 8, !tbaa !5
  %339 = call ptr @ast_add(ptr noundef %337, ptr noundef %338)
  store ptr %339, ptr %37, align 8, !tbaa !5
  br label %344

340:                                              ; preds = %333
  %341 = load ptr, ptr %37, align 8, !tbaa !5
  %342 = load ptr, ptr %7, align 8, !tbaa !5
  %343 = call ptr @ast_add_sibling(ptr noundef %341, ptr noundef %342)
  store ptr %343, ptr %37, align 8, !tbaa !5
  br label %344

344:                                              ; preds = %340, %336
  br label %345

345:                                              ; preds = %344, %331
  %346 = load ptr, ptr %36, align 8, !tbaa !5
  call void @ast_inheritflags(ptr noundef %346)
  %347 = load ptr, ptr %36, align 8, !tbaa !5
  %348 = load ptr, ptr %37, align 8, !tbaa !5
  %349 = 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
  %350 = load ptr, ptr %33, align 8, !tbaa !5
  call void @ast_inheritflags(ptr noundef %350)
  %351 = load ptr, ptr %33, align 8, !tbaa !5
  %352 = load ptr, ptr %34, align 8, !tbaa !5
  %353 = 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
  %354 = load ptr, ptr %30, align 8, !tbaa !5
  store ptr %354, 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 %39) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #3
  %355 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %355, 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
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #3
  store ptr null, 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
  %356 = load ptr, ptr %40, align 8, !tbaa !5
  %357 = call ptr @ast_from(ptr noundef %356, i32 noundef 19)
  store ptr %357, ptr %43, align 8, !tbaa !5
  %358 = load ptr, ptr %41, align 8, !tbaa !5
  %359 = icmp eq ptr %358, null
  br i1 %359, label %360, label %362

360:                                              ; preds = %345
  %361 = load ptr, ptr %43, align 8, !tbaa !5
  store ptr %361, ptr %41, align 8, !tbaa !5
  br label %374

362:                                              ; preds = %345
  %363 = load ptr, ptr %42, align 8, !tbaa !5
  %364 = icmp eq ptr %363, null
  br i1 %364, label %365, label %369

365:                                              ; preds = %362
  %366 = load ptr, ptr %41, align 8, !tbaa !5
  %367 = load ptr, ptr %43, align 8, !tbaa !5
  %368 = call ptr @ast_add(ptr noundef %366, ptr noundef %367)
  store ptr %368, ptr %42, align 8, !tbaa !5
  br label %373

369:                                              ; preds = %362
  %370 = load ptr, ptr %42, align 8, !tbaa !5
  %371 = load ptr, ptr %43, align 8, !tbaa !5
  %372 = call ptr @ast_add_sibling(ptr noundef %370, ptr noundef %371)
  store ptr %372, ptr %42, align 8, !tbaa !5
  br label %373

373:                                              ; preds = %369, %365
  br label %374

374:                                              ; preds = %373, %360
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #3
  %375 = load ptr, ptr %43, align 8, !tbaa !5
  store ptr %375, ptr %44, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #3
  store ptr null, ptr %45, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #3
  store ptr null, ptr %46, align 8, !tbaa !5
  %376 = load ptr, ptr %44, align 8, !tbaa !5
  %377 = icmp eq ptr %376, null
  br i1 %377, label %378, label %380

378:                                              ; preds = %374
  %379 = load ptr, ptr %28, align 8, !tbaa !5
  store ptr %379, ptr %44, align 8, !tbaa !5
  br label %392

380:                                              ; preds = %374
  %381 = load ptr, ptr %45, align 8, !tbaa !5
  %382 = icmp eq ptr %381, null
  br i1 %382, label %383, label %387

383:                                              ; preds = %380
  %384 = load ptr, ptr %44, align 8, !tbaa !5
  %385 = load ptr, ptr %28, align 8, !tbaa !5
  %386 = call ptr @ast_add(ptr noundef %384, ptr noundef %385)
  store ptr %386, ptr %45, align 8, !tbaa !5
  br label %391

387:                                              ; preds = %380
  %388 = load ptr, ptr %45, align 8, !tbaa !5
  %389 = load ptr, ptr %28, align 8, !tbaa !5
  %390 = call ptr @ast_add_sibling(ptr noundef %388, ptr noundef %389)
  store ptr %390, ptr %45, align 8, !tbaa !5
  br label %391

391:                                              ; preds = %387, %383
  br label %392

392:                                              ; preds = %391, %378
  %393 = load ptr, ptr %44, align 8, !tbaa !5
  %394 = icmp eq ptr %393, null
  br i1 %394, label %395, label %398

395:                                              ; preds = %392
  %396 = load ptr, ptr %40, align 8, !tbaa !5
  %397 = call ptr @ast_from_string(ptr noundef %396, ptr noundef @.str.9)
  store ptr %397, ptr %44, align 8, !tbaa !5
  br label %412

398:                                              ; preds = %392
  %399 = load ptr, ptr %45, align 8, !tbaa !5
  %400 = icmp eq ptr %399, null
  br i1 %400, label %401, label %406

401:                                              ; preds = %398
  %402 = load ptr, ptr %44, align 8, !tbaa !5
  %403 = load ptr, ptr %40, align 8, !tbaa !5
  %404 = call ptr @ast_from_string(ptr noundef %403, ptr noundef @.str.9)
  %405 = call ptr @ast_add(ptr noundef %402, ptr noundef %404)
  store ptr %405, ptr %45, align 8, !tbaa !5
  br label %411

406:                                              ; preds = %398
  %407 = load ptr, ptr %45, align 8, !tbaa !5
  %408 = load ptr, ptr %40, align 8, !tbaa !5
  %409 = call ptr @ast_from_string(ptr noundef %408, ptr noundef @.str.9)
  %410 = call ptr @ast_add_sibling(ptr noundef %407, ptr noundef %409)
  store ptr %410, ptr %45, align 8, !tbaa !5
  br label %411

411:                                              ; preds = %406, %401
  br label %412

412:                                              ; preds = %411, %395
  %413 = load ptr, ptr %44, align 8, !tbaa !5
  call void @ast_inheritflags(ptr noundef %413)
  %414 = load ptr, ptr %44, align 8, !tbaa !5
  %415 = load ptr, ptr %45, align 8, !tbaa !5
  %416 = load ptr, ptr %46, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #3
  %417 = load ptr, ptr %41, align 8, !tbaa !5
  store ptr %417, ptr %39, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #3
  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.start.p0(i64 8, ptr %47) #3
  %418 = load ptr, ptr %6, align 8, !tbaa !5
  %419 = load i64, ptr %12, align 8, !tbaa !11
  %420 = call ptr @ast_from_int(ptr noundef %418, i64 noundef %419)
  store ptr %420, ptr %47, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #3
  %421 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %421, ptr %49, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #3
  store ptr null, 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
  %422 = load ptr, ptr %49, align 8, !tbaa !5
  %423 = call ptr @ast_from(ptr noundef %422, i32 noundef 175)
  store ptr %423, ptr %52, align 8, !tbaa !5
  %424 = load ptr, ptr %50, align 8, !tbaa !5
  %425 = icmp eq ptr %424, null
  br i1 %425, label %426, label %428

426:                                              ; preds = %412
  %427 = load ptr, ptr %52, align 8, !tbaa !5
  store ptr %427, ptr %50, align 8, !tbaa !5
  br label %440

428:                                              ; preds = %412
  %429 = load ptr, ptr %51, align 8, !tbaa !5
  %430 = icmp eq ptr %429, null
  br i1 %430, label %431, label %435

431:                                              ; preds = %428
  %432 = load ptr, ptr %50, align 8, !tbaa !5
  %433 = load ptr, ptr %52, align 8, !tbaa !5
  %434 = call ptr @ast_add(ptr noundef %432, ptr noundef %433)
  store ptr %434, ptr %51, align 8, !tbaa !5
  br label %439

435:                                              ; preds = %428
  %436 = load ptr, ptr %51, align 8, !tbaa !5
  %437 = load ptr, ptr %52, align 8, !tbaa !5
  %438 = call ptr @ast_add_sibling(ptr noundef %436, ptr noundef %437)
  store ptr %438, ptr %51, align 8, !tbaa !5
  br label %439

439:                                              ; preds = %435, %431
  br label %440

440:                                              ; preds = %439, %426
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #3
  %441 = load ptr, ptr %52, align 8, !tbaa !5
  store ptr %441, ptr %53, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #3
  store ptr null, 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
  %442 = load ptr, ptr %53, align 8, !tbaa !5
  %443 = icmp eq ptr %442, null
  br i1 %443, label %444, label %446

444:                                              ; preds = %440
  %445 = load ptr, ptr %47, align 8, !tbaa !5
  store ptr %445, ptr %53, align 8, !tbaa !5
  br label %458

446:                                              ; preds = %440
  %447 = load ptr, ptr %54, align 8, !tbaa !5
  %448 = icmp eq ptr %447, null
  br i1 %448, label %449, label %453

449:                                              ; preds = %446
  %450 = load ptr, ptr %53, align 8, !tbaa !5
  %451 = load ptr, ptr %47, align 8, !tbaa !5
  %452 = call ptr @ast_add(ptr noundef %450, ptr noundef %451)
  store ptr %452, ptr %54, align 8, !tbaa !5
  br label %457

453:                                              ; preds = %446
  %454 = load ptr, ptr %54, align 8, !tbaa !5
  %455 = load ptr, ptr %47, align 8, !tbaa !5
  %456 = call ptr @ast_add_sibling(ptr noundef %454, ptr noundef %455)
  store ptr %456, ptr %54, align 8, !tbaa !5
  br label %457

457:                                              ; preds = %453, %449
  br label %458

458:                                              ; preds = %457, %444
  %459 = load ptr, ptr %53, align 8, !tbaa !5
  call void @ast_inheritflags(ptr noundef %459)
  %460 = load ptr, ptr %53, align 8, !tbaa !5
  %461 = load ptr, ptr %54, align 8, !tbaa !5
  %462 = load ptr, ptr %55, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #3
  %463 = load ptr, ptr %50, align 8, !tbaa !5
  store ptr %463, ptr %48, 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
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #3
  %464 = load ptr, ptr %47, align 8, !tbaa !5
  %465 = load ptr, ptr %4, align 8, !tbaa !5
  %466 = load ptr, ptr %6, align 8, !tbaa !5
  %467 = call ptr @type_builtin(ptr noundef %465, ptr noundef %466, ptr noundef @.str.10)
  call void @ast_settype(ptr noundef %464, ptr noundef %467)
  %468 = load ptr, ptr %48, align 8, !tbaa !5
  %469 = load ptr, ptr %4, align 8, !tbaa !5
  %470 = load ptr, ptr %6, align 8, !tbaa !5
  %471 = call ptr @type_builtin(ptr noundef %469, ptr noundef %470, ptr noundef @.str.10)
  call void @ast_settype(ptr noundef %468, ptr noundef %471)
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %57) #3
  %472 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %472, ptr %57, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %58) #3
  store ptr null, 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
  %473 = load ptr, ptr %57, align 8, !tbaa !5
  %474 = call ptr @ast_from(ptr noundef %473, i32 noundef 177)
  store ptr %474, ptr %60, align 8, !tbaa !5
  %475 = load ptr, ptr %58, align 8, !tbaa !5
  %476 = icmp eq ptr %475, null
  br i1 %476, label %477, label %479

477:                                              ; preds = %458
  %478 = load ptr, ptr %60, align 8, !tbaa !5
  store ptr %478, ptr %58, align 8, !tbaa !5
  br label %491

479:                                              ; preds = %458
  %480 = load ptr, ptr %59, align 8, !tbaa !5
  %481 = icmp eq ptr %480, null
  br i1 %481, label %482, label %486

482:                                              ; preds = %479
  %483 = load ptr, ptr %58, align 8, !tbaa !5
  %484 = load ptr, ptr %60, align 8, !tbaa !5
  %485 = call ptr @ast_add(ptr noundef %483, ptr noundef %484)
  store ptr %485, ptr %59, align 8, !tbaa !5
  br label %490

486:                                              ; preds = %479
  %487 = load ptr, ptr %59, align 8, !tbaa !5
  %488 = load ptr, ptr %60, align 8, !tbaa !5
  %489 = call ptr @ast_add_sibling(ptr noundef %487, ptr noundef %488)
  store ptr %489, ptr %59, align 8, !tbaa !5
  br label %490

490:                                              ; preds = %486, %482
  br label %491

491:                                              ; preds = %490, %477
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #3
  %492 = load ptr, ptr %60, align 8, !tbaa !5
  store ptr %492, ptr %61, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %62) #3
  store ptr null, 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
  %493 = load ptr, ptr %61, align 8, !tbaa !5
  %494 = icmp eq ptr %493, null
  br i1 %494, label %495, label %497

495:                                              ; preds = %491
  %496 = load ptr, ptr %39, align 8, !tbaa !5
  store ptr %496, ptr %61, align 8, !tbaa !5
  br label %509

497:                                              ; preds = %491
  %498 = load ptr, ptr %62, align 8, !tbaa !5
  %499 = icmp eq ptr %498, null
  br i1 %499, label %500, label %504

500:                                              ; preds = %497
  %501 = load ptr, ptr %61, align 8, !tbaa !5
  %502 = load ptr, ptr %39, align 8, !tbaa !5
  %503 = call ptr @ast_add(ptr noundef %501, ptr noundef %502)
  store ptr %503, ptr %62, align 8, !tbaa !5
  br label %508

504:                                              ; preds = %497
  %505 = load ptr, ptr %62, align 8, !tbaa !5
  %506 = load ptr, ptr %39, align 8, !tbaa !5
  %507 = call ptr @ast_add_sibling(ptr noundef %505, ptr noundef %506)
  store ptr %507, ptr %62, align 8, !tbaa !5
  br label %508

508:                                              ; preds = %504, %500
  br label %509

509:                                              ; preds = %508, %495
  %510 = load ptr, ptr %57, align 8, !tbaa !5
  %511 = call ptr @ast_from(ptr noundef %510, i32 noundef 169)
  store ptr %511, ptr %63, align 8, !tbaa !5
  %512 = load ptr, ptr %61, align 8, !tbaa !5
  %513 = icmp eq ptr %512, null
  br i1 %513, label %514, label %516

514:                                              ; preds = %509
  %515 = load ptr, ptr %63, align 8, !tbaa !5
  store ptr %515, ptr %61, align 8, !tbaa !5
  br label %528

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

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

523:                                              ; preds = %516
  %524 = load ptr, ptr %62, align 8, !tbaa !5
  %525 = load ptr, ptr %63, align 8, !tbaa !5
  %526 = call ptr @ast_add_sibling(ptr noundef %524, ptr noundef %525)
  store ptr %526, ptr %62, 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 %64) #3
  %529 = load ptr, ptr %63, align 8, !tbaa !5
  store ptr %529, 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
  call void @llvm.lifetime.start.p0(i64 8, ptr %66) #3
  store ptr null, ptr %66, align 8, !tbaa !5
  %530 = load ptr, ptr %64, align 8, !tbaa !5
  %531 = icmp eq ptr %530, null
  br i1 %531, label %532, label %534

532:                                              ; preds = %528
  %533 = load ptr, ptr %48, align 8, !tbaa !5
  store ptr %533, ptr %64, align 8, !tbaa !5
  br label %546

534:                                              ; preds = %528
  %535 = load ptr, ptr %65, align 8, !tbaa !5
  %536 = icmp eq ptr %535, null
  br i1 %536, label %537, label %541

537:                                              ; preds = %534
  %538 = load ptr, ptr %64, align 8, !tbaa !5
  %539 = load ptr, ptr %48, align 8, !tbaa !5
  %540 = call ptr @ast_add(ptr noundef %538, ptr noundef %539)
  store ptr %540, ptr %65, align 8, !tbaa !5
  br label %545

541:                                              ; preds = %534
  %542 = load ptr, ptr %65, align 8, !tbaa !5
  %543 = load ptr, ptr %48, align 8, !tbaa !5
  %544 = call ptr @ast_add_sibling(ptr noundef %542, ptr noundef %543)
  store ptr %544, ptr %65, align 8, !tbaa !5
  br label %545

545:                                              ; preds = %541, %537
  br label %546

546:                                              ; preds = %545, %532
  %547 = load ptr, ptr %64, align 8, !tbaa !5
  call void @ast_inheritflags(ptr noundef %547)
  %548 = load ptr, ptr %64, align 8, !tbaa !5
  %549 = load ptr, ptr %65, align 8, !tbaa !5
  %550 = load ptr, ptr %66, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #3
  %551 = load ptr, ptr %61, align 8, !tbaa !5
  %552 = icmp eq ptr %551, null
  br i1 %552, label %553, label %556

553:                                              ; preds = %546
  %554 = load ptr, ptr %57, align 8, !tbaa !5
  %555 = call ptr @ast_from(ptr noundef %554, i32 noundef 2)
  store ptr %555, ptr %61, align 8, !tbaa !5
  br label %570

556:                                              ; preds = %546
  %557 = load ptr, ptr %62, align 8, !tbaa !5
  %558 = icmp eq ptr %557, null
  br i1 %558, label %559, label %564

559:                                              ; preds = %556
  %560 = load ptr, ptr %61, align 8, !tbaa !5
  %561 = load ptr, ptr %57, align 8, !tbaa !5
  %562 = call ptr @ast_from(ptr noundef %561, i32 noundef 2)
  %563 = call ptr @ast_add(ptr noundef %560, ptr noundef %562)
  store ptr %563, ptr %62, align 8, !tbaa !5
  br label %569

564:                                              ; preds = %556
  %565 = load ptr, ptr %62, align 8, !tbaa !5
  %566 = load ptr, ptr %57, align 8, !tbaa !5
  %567 = call ptr @ast_from(ptr noundef %566, i32 noundef 2)
  %568 = call ptr @ast_add_sibling(ptr noundef %565, ptr noundef %567)
  store ptr %568, ptr %62, align 8, !tbaa !5
  br label %569

569:                                              ; preds = %564, %559
  br label %570

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

573:                                              ; preds = %570
  %574 = load ptr, ptr %57, align 8, !tbaa !5
  %575 = call ptr @ast_from(ptr noundef %574, i32 noundef 2)
  store ptr %575, ptr %61, align 8, !tbaa !5
  br label %590

576:                                              ; preds = %570
  %577 = load ptr, ptr %62, align 8, !tbaa !5
  %578 = icmp eq ptr %577, null
  br i1 %578, label %579, label %584

579:                                              ; preds = %576
  %580 = load ptr, ptr %61, align 8, !tbaa !5
  %581 = load ptr, ptr %57, align 8, !tbaa !5
  %582 = call ptr @ast_from(ptr noundef %581, i32 noundef 2)
  %583 = call ptr @ast_add(ptr noundef %580, ptr noundef %582)
  store ptr %583, ptr %62, align 8, !tbaa !5
  br label %589

584:                                              ; preds = %576
  %585 = load ptr, ptr %62, align 8, !tbaa !5
  %586 = load ptr, ptr %57, align 8, !tbaa !5
  %587 = call ptr @ast_from(ptr noundef %586, i32 noundef 2)
  %588 = call ptr @ast_add_sibling(ptr noundef %585, ptr noundef %587)
  store ptr %588, ptr %62, align 8, !tbaa !5
  br label %589

589:                                              ; preds = %584, %579
  br label %590

590:                                              ; preds = %589, %573
  %591 = load ptr, ptr %61, align 8, !tbaa !5
  call void @ast_inheritflags(ptr noundef %591)
  %592 = load ptr, ptr %61, align 8, !tbaa !5
  %593 = load ptr, ptr %62, align 8, !tbaa !5
  %594 = load ptr, ptr %63, align 8, !tbaa !5
  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.end.p0(i64 8, ptr %61) #3
  %595 = load ptr, ptr %58, align 8, !tbaa !5
  store ptr %595, ptr %56, 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
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #3
  %596 = load ptr, ptr %4, align 8, !tbaa !5
  %597 = call zeroext i1 @refer_reference(ptr noundef %596, ptr noundef %20)
  br i1 %597, label %598, label %611

598:                                              ; preds = %590
  %599 = load ptr, ptr %4, align 8, !tbaa !5
  %600 = load ptr, ptr %28, align 8, !tbaa !5
  %601 = call zeroext i1 @refer_qualify(ptr noundef %599, ptr noundef %600)
  br i1 %601, label %602, label %611

602:                                              ; preds = %598
  %603 = load ptr, ptr %4, align 8, !tbaa !5
  %604 = call zeroext i1 @expr_typeref(ptr noundef %603, ptr noundef %28)
  br i1 %604, label %605, label %611

605:                                              ; preds = %602
  %606 = load ptr, ptr %4, align 8, !tbaa !5
  %607 = call zeroext i1 @expr_dot(ptr noundef %606, ptr noundef %39)
  br i1 %607, label %608, label %611

608:                                              ; preds = %605
  %609 = load ptr, ptr %4, align 8, !tbaa !5
  %610 = call zeroext i1 @expr_call(ptr noundef %609, ptr noundef %56)
  br i1 %610, label %612, label %611

611:                                              ; preds = %608, %605, %602, %598, %590
  store i1 false, ptr %3, align 1
  store i32 1, ptr %13, align 4
  br label %882

612:                                              ; preds = %608
  %613 = load ptr, ptr %6, align 8, !tbaa !5
  %614 = load ptr, ptr %56, align 8, !tbaa !5
  call void @ast_swap(ptr noundef %613, ptr noundef %614)
  %615 = load ptr, ptr %56, align 8, !tbaa !5
  %616 = load ptr, ptr %5, align 8, !tbaa !5
  store ptr %615, ptr %616, align 8, !tbaa !5
  %617 = load ptr, ptr %6, align 8, !tbaa !5
  %618 = call ptr @ast_childidx(ptr noundef %617, i64 noundef 1)
  store ptr %618, ptr %10, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %67) #3
  %619 = load ptr, ptr %10, align 8, !tbaa !5
  %620 = call ptr @ast_child(ptr noundef %619)
  store ptr %620, ptr %67, align 8, !tbaa !5
  br label %621

621:                                              ; preds = %875, %612
  %622 = load ptr, ptr %67, align 8, !tbaa !5
  %623 = icmp ne ptr %622, null
  br i1 %623, label %625, label %624

624:                                              ; preds = %621
  store i32 5, ptr %13, align 4
  br label %878

625:                                              ; preds = %621
  call void @llvm.lifetime.start.p0(i64 8, ptr %68) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %69) #3
  %626 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %626, 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
  call void @llvm.lifetime.start.p0(i64 8, ptr %72) #3
  store ptr null, ptr %72, align 8, !tbaa !5
  %627 = load ptr, ptr %69, align 8, !tbaa !5
  %628 = call ptr @ast_from(ptr noundef %627, i32 noundef 21)
  store ptr %628, ptr %72, align 8, !tbaa !5
  %629 = load ptr, ptr %70, align 8, !tbaa !5
  %630 = icmp eq ptr %629, null
  br i1 %630, label %631, label %633

631:                                              ; preds = %625
  %632 = load ptr, ptr %72, align 8, !tbaa !5
  store ptr %632, ptr %70, align 8, !tbaa !5
  br label %645

633:                                              ; preds = %625
  %634 = load ptr, ptr %71, align 8, !tbaa !5
  %635 = icmp eq ptr %634, null
  br i1 %635, label %636, label %640

636:                                              ; preds = %633
  %637 = load ptr, ptr %70, align 8, !tbaa !5
  %638 = load ptr, ptr %72, align 8, !tbaa !5
  %639 = call ptr @ast_add(ptr noundef %637, ptr noundef %638)
  store ptr %639, ptr %71, align 8, !tbaa !5
  br label %644

640:                                              ; preds = %633
  %641 = load ptr, ptr %71, align 8, !tbaa !5
  %642 = load ptr, ptr %72, align 8, !tbaa !5
  %643 = call ptr @ast_add_sibling(ptr noundef %641, ptr noundef %642)
  store ptr %643, ptr %71, align 8, !tbaa !5
  br label %644

644:                                              ; preds = %640, %636
  br label %645

645:                                              ; preds = %644, %631
  call void @llvm.lifetime.start.p0(i64 8, ptr %73) #3
  %646 = load ptr, ptr %72, align 8, !tbaa !5
  store ptr %646, 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
  call void @llvm.lifetime.start.p0(i64 8, ptr %75) #3
  store ptr null, ptr %75, align 8, !tbaa !5
  %647 = load ptr, ptr %73, align 8, !tbaa !5
  %648 = icmp eq ptr %647, null
  br i1 %648, label %649, label %652

649:                                              ; preds = %645
  %650 = load ptr, ptr %5, align 8, !tbaa !5
  %651 = load ptr, ptr %650, align 8, !tbaa !5
  store ptr %651, ptr %73, align 8, !tbaa !5
  br label %666

652:                                              ; preds = %645
  %653 = load ptr, ptr %74, align 8, !tbaa !5
  %654 = icmp eq ptr %653, null
  br i1 %654, label %655, label %660

655:                                              ; preds = %652
  %656 = load ptr, ptr %73, align 8, !tbaa !5
  %657 = load ptr, ptr %5, align 8, !tbaa !5
  %658 = load ptr, ptr %657, align 8, !tbaa !5
  %659 = call ptr @ast_add(ptr noundef %656, ptr noundef %658)
  store ptr %659, ptr %74, align 8, !tbaa !5
  br label %665

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

665:                                              ; preds = %660, %655
  br label %666

666:                                              ; preds = %665, %649
  %667 = load ptr, ptr %73, align 8, !tbaa !5
  %668 = icmp eq ptr %667, null
  br i1 %668, label %669, label %672

669:                                              ; preds = %666
  %670 = load ptr, ptr %69, align 8, !tbaa !5
  %671 = call ptr @ast_from_string(ptr noundef %670, ptr noundef @.str.11)
  store ptr %671, ptr %73, align 8, !tbaa !5
  br label %686

672:                                              ; preds = %666
  %673 = load ptr, ptr %74, align 8, !tbaa !5
  %674 = icmp eq ptr %673, null
  br i1 %674, label %675, label %680

675:                                              ; preds = %672
  %676 = load ptr, ptr %73, align 8, !tbaa !5
  %677 = load ptr, ptr %69, align 8, !tbaa !5
  %678 = call ptr @ast_from_string(ptr noundef %677, ptr noundef @.str.11)
  %679 = call ptr @ast_add(ptr noundef %676, ptr noundef %678)
  store ptr %679, ptr %74, align 8, !tbaa !5
  br label %685

680:                                              ; preds = %672
  %681 = load ptr, ptr %74, align 8, !tbaa !5
  %682 = load ptr, ptr %69, align 8, !tbaa !5
  %683 = call ptr @ast_from_string(ptr noundef %682, ptr noundef @.str.11)
  %684 = call ptr @ast_add_sibling(ptr noundef %681, ptr noundef %683)
  store ptr %684, ptr %74, align 8, !tbaa !5
  br label %685

685:                                              ; preds = %680, %675
  br label %686

686:                                              ; preds = %685, %669
  %687 = load ptr, ptr %73, align 8, !tbaa !5
  call void @ast_inheritflags(ptr noundef %687)
  %688 = load ptr, ptr %73, align 8, !tbaa !5
  %689 = load ptr, ptr %74, align 8, !tbaa !5
  %690 = load ptr, ptr %75, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #3
  %691 = load ptr, ptr %70, align 8, !tbaa !5
  store ptr %691, ptr %68, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #3
  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
  call void @llvm.lifetime.start.p0(i64 8, ptr %76) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %77) #3
  %692 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %692, ptr %77, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %78) #3
  store ptr null, ptr %78, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %79) #3
  store ptr null, ptr %79, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %80) #3
  store ptr null, ptr %80, align 8, !tbaa !5
  %693 = load ptr, ptr %77, align 8, !tbaa !5
  %694 = call ptr @ast_from(ptr noundef %693, i32 noundef 175)
  store ptr %694, ptr %80, align 8, !tbaa !5
  %695 = load ptr, ptr %78, align 8, !tbaa !5
  %696 = icmp eq ptr %695, null
  br i1 %696, label %697, label %699

697:                                              ; preds = %686
  %698 = load ptr, ptr %80, align 8, !tbaa !5
  store ptr %698, ptr %78, align 8, !tbaa !5
  br label %711

699:                                              ; preds = %686
  %700 = load ptr, ptr %79, align 8, !tbaa !5
  %701 = icmp eq ptr %700, null
  br i1 %701, label %702, label %706

702:                                              ; preds = %699
  %703 = load ptr, ptr %78, align 8, !tbaa !5
  %704 = load ptr, ptr %80, align 8, !tbaa !5
  %705 = call ptr @ast_add(ptr noundef %703, ptr noundef %704)
  store ptr %705, ptr %79, align 8, !tbaa !5
  br label %710

706:                                              ; preds = %699
  %707 = load ptr, ptr %79, align 8, !tbaa !5
  %708 = load ptr, ptr %80, align 8, !tbaa !5
  %709 = call ptr @ast_add_sibling(ptr noundef %707, ptr noundef %708)
  store ptr %709, ptr %79, align 8, !tbaa !5
  br label %710

710:                                              ; preds = %706, %702
  br label %711

711:                                              ; preds = %710, %697
  call void @llvm.lifetime.start.p0(i64 8, ptr %81) #3
  %712 = load ptr, ptr %80, align 8, !tbaa !5
  store ptr %712, ptr %81, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %82) #3
  store ptr null, ptr %82, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %83) #3
  store ptr null, ptr %83, align 8, !tbaa !5
  %713 = load ptr, ptr %81, align 8, !tbaa !5
  %714 = icmp eq ptr %713, null
  br i1 %714, label %715, label %717

715:                                              ; preds = %711
  %716 = load ptr, ptr %67, align 8, !tbaa !5
  store ptr %716, ptr %81, align 8, !tbaa !5
  br label %729

717:                                              ; preds = %711
  %718 = load ptr, ptr %82, align 8, !tbaa !5
  %719 = icmp eq ptr %718, null
  br i1 %719, label %720, label %724

720:                                              ; preds = %717
  %721 = load ptr, ptr %81, align 8, !tbaa !5
  %722 = load ptr, ptr %67, align 8, !tbaa !5
  %723 = call ptr @ast_add(ptr noundef %721, ptr noundef %722)
  store ptr %723, ptr %82, align 8, !tbaa !5
  br label %728

724:                                              ; preds = %717
  %725 = load ptr, ptr %82, align 8, !tbaa !5
  %726 = load ptr, ptr %67, align 8, !tbaa !5
  %727 = call ptr @ast_add_sibling(ptr noundef %725, ptr noundef %726)
  store ptr %727, ptr %82, align 8, !tbaa !5
  br label %728

728:                                              ; preds = %724, %720
  br label %729

729:                                              ; preds = %728, %715
  %730 = load ptr, ptr %81, align 8, !tbaa !5
  call void @ast_inheritflags(ptr noundef %730)
  %731 = load ptr, ptr %81, align 8, !tbaa !5
  %732 = load ptr, ptr %82, align 8, !tbaa !5
  %733 = load ptr, ptr %83, align 8, !tbaa !5
  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 8, ptr %81) #3
  %734 = load ptr, ptr %78, align 8, !tbaa !5
  store ptr %734, ptr %76, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, 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.start.p0(i64 8, ptr %84) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %85) #3
  %735 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %735, ptr %85, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %86) #3
  store ptr null, ptr %86, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %87) #3
  store ptr null, ptr %87, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %88) #3
  store ptr null, ptr %88, align 8, !tbaa !5
  %736 = load ptr, ptr %85, align 8, !tbaa !5
  %737 = call ptr @ast_from(ptr noundef %736, i32 noundef 177)
  store ptr %737, ptr %88, align 8, !tbaa !5
  %738 = load ptr, ptr %86, align 8, !tbaa !5
  %739 = icmp eq ptr %738, null
  br i1 %739, label %740, label %742

740:                                              ; preds = %729
  %741 = load ptr, ptr %88, align 8, !tbaa !5
  store ptr %741, ptr %86, align 8, !tbaa !5
  br label %754

742:                                              ; preds = %729
  %743 = load ptr, ptr %87, align 8, !tbaa !5
  %744 = icmp eq ptr %743, null
  br i1 %744, label %745, label %749

745:                                              ; preds = %742
  %746 = load ptr, ptr %86, align 8, !tbaa !5
  %747 = load ptr, ptr %88, align 8, !tbaa !5
  %748 = call ptr @ast_add(ptr noundef %746, ptr noundef %747)
  store ptr %748, ptr %87, align 8, !tbaa !5
  br label %753

749:                                              ; preds = %742
  %750 = load ptr, ptr %87, align 8, !tbaa !5
  %751 = load ptr, ptr %88, align 8, !tbaa !5
  %752 = call ptr @ast_add_sibling(ptr noundef %750, ptr noundef %751)
  store ptr %752, ptr %87, align 8, !tbaa !5
  br label %753

753:                                              ; preds = %749, %745
  br label %754

754:                                              ; preds = %753, %740
  call void @llvm.lifetime.start.p0(i64 8, ptr %89) #3
  %755 = load ptr, ptr %88, align 8, !tbaa !5
  store ptr %755, ptr %89, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %90) #3
  store ptr null, ptr %90, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %91) #3
  store ptr null, ptr %91, align 8, !tbaa !5
  %756 = load ptr, ptr %89, align 8, !tbaa !5
  %757 = icmp eq ptr %756, null
  br i1 %757, label %758, label %760

758:                                              ; preds = %754
  %759 = load ptr, ptr %68, align 8, !tbaa !5
  store ptr %759, ptr %89, align 8, !tbaa !5
  br label %772

760:                                              ; preds = %754
  %761 = load ptr, ptr %90, align 8, !tbaa !5
  %762 = icmp eq ptr %761, null
  br i1 %762, label %763, label %767

763:                                              ; preds = %760
  %764 = load ptr, ptr %89, align 8, !tbaa !5
  %765 = load ptr, ptr %68, align 8, !tbaa !5
  %766 = call ptr @ast_add(ptr noundef %764, ptr noundef %765)
  store ptr %766, ptr %90, align 8, !tbaa !5
  br label %771

767:                                              ; preds = %760
  %768 = load ptr, ptr %90, align 8, !tbaa !5
  %769 = load ptr, ptr %68, align 8, !tbaa !5
  %770 = call ptr @ast_add_sibling(ptr noundef %768, ptr noundef %769)
  store ptr %770, ptr %90, align 8, !tbaa !5
  br label %771

771:                                              ; preds = %767, %763
  br label %772

772:                                              ; preds = %771, %758
  %773 = load ptr, ptr %85, align 8, !tbaa !5
  %774 = call ptr @ast_from(ptr noundef %773, i32 noundef 169)
  store ptr %774, ptr %91, align 8, !tbaa !5
  %775 = load ptr, ptr %89, align 8, !tbaa !5
  %776 = icmp eq ptr %775, null
  br i1 %776, label %777, label %779

777:                                              ; preds = %772
  %778 = load ptr, ptr %91, align 8, !tbaa !5
  store ptr %778, ptr %89, align 8, !tbaa !5
  br label %791

779:                                              ; preds = %772
  %780 = load ptr, ptr %90, align 8, !tbaa !5
  %781 = icmp eq ptr %780, null
  br i1 %781, label %782, label %786

782:                                              ; preds = %779
  %783 = load ptr, ptr %89, align 8, !tbaa !5
  %784 = load ptr, ptr %91, align 8, !tbaa !5
  %785 = call ptr @ast_add(ptr noundef %783, ptr noundef %784)
  store ptr %785, ptr %90, align 8, !tbaa !5
  br label %790

786:                                              ; preds = %779
  %787 = load ptr, ptr %90, align 8, !tbaa !5
  %788 = load ptr, ptr %91, align 8, !tbaa !5
  %789 = call ptr @ast_add_sibling(ptr noundef %787, ptr noundef %788)
  store ptr %789, ptr %90, align 8, !tbaa !5
  br label %790

790:                                              ; preds = %786, %782
  br label %791

791:                                              ; preds = %790, %777
  call void @llvm.lifetime.start.p0(i64 8, ptr %92) #3
  %792 = load ptr, ptr %91, align 8, !tbaa !5
  store ptr %792, ptr %92, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %93) #3
  store ptr null, ptr %93, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %94) #3
  store ptr null, ptr %94, align 8, !tbaa !5
  %793 = load ptr, ptr %92, align 8, !tbaa !5
  %794 = icmp eq ptr %793, null
  br i1 %794, label %795, label %797

795:                                              ; preds = %791
  %796 = load ptr, ptr %76, align 8, !tbaa !5
  store ptr %796, ptr %92, align 8, !tbaa !5
  br label %809

797:                                              ; preds = %791
  %798 = load ptr, ptr %93, align 8, !tbaa !5
  %799 = icmp eq ptr %798, null
  br i1 %799, label %800, label %804

800:                                              ; preds = %797
  %801 = load ptr, ptr %92, align 8, !tbaa !5
  %802 = load ptr, ptr %76, align 8, !tbaa !5
  %803 = call ptr @ast_add(ptr noundef %801, ptr noundef %802)
  store ptr %803, ptr %93, align 8, !tbaa !5
  br label %808

804:                                              ; preds = %797
  %805 = load ptr, ptr %93, align 8, !tbaa !5
  %806 = load ptr, ptr %76, align 8, !tbaa !5
  %807 = call ptr @ast_add_sibling(ptr noundef %805, ptr noundef %806)
  store ptr %807, ptr %93, align 8, !tbaa !5
  br label %808

808:                                              ; preds = %804, %800
  br label %809

809:                                              ; preds = %808, %795
  %810 = load ptr, ptr %92, align 8, !tbaa !5
  call void @ast_inheritflags(ptr noundef %810)
  %811 = load ptr, ptr %92, align 8, !tbaa !5
  %812 = load ptr, ptr %93, align 8, !tbaa !5
  %813 = load ptr, ptr %94, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %94) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %93) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %92) #3
  %814 = load ptr, ptr %89, align 8, !tbaa !5
  %815 = icmp eq ptr %814, null
  br i1 %815, label %816, label %819

816:                                              ; preds = %809
  %817 = load ptr, ptr %85, align 8, !tbaa !5
  %818 = call ptr @ast_from(ptr noundef %817, i32 noundef 2)
  store ptr %818, ptr %89, align 8, !tbaa !5
  br label %833

819:                                              ; preds = %809
  %820 = load ptr, ptr %90, align 8, !tbaa !5
  %821 = icmp eq ptr %820, null
  br i1 %821, label %822, label %827

822:                                              ; preds = %819
  %823 = load ptr, ptr %89, align 8, !tbaa !5
  %824 = load ptr, ptr %85, align 8, !tbaa !5
  %825 = call ptr @ast_from(ptr noundef %824, i32 noundef 2)
  %826 = call ptr @ast_add(ptr noundef %823, ptr noundef %825)
  store ptr %826, ptr %90, align 8, !tbaa !5
  br label %832

827:                                              ; preds = %819
  %828 = load ptr, ptr %90, align 8, !tbaa !5
  %829 = load ptr, ptr %85, align 8, !tbaa !5
  %830 = call ptr @ast_from(ptr noundef %829, i32 noundef 2)
  %831 = call ptr @ast_add_sibling(ptr noundef %828, ptr noundef %830)
  store ptr %831, ptr %90, align 8, !tbaa !5
  br label %832

832:                                              ; preds = %827, %822
  br label %833

833:                                              ; preds = %832, %816
  %834 = load ptr, ptr %89, align 8, !tbaa !5
  %835 = icmp eq ptr %834, null
  br i1 %835, label %836, label %839

836:                                              ; preds = %833
  %837 = load ptr, ptr %85, align 8, !tbaa !5
  %838 = call ptr @ast_from(ptr noundef %837, i32 noundef 2)
  store ptr %838, ptr %89, align 8, !tbaa !5
  br label %853

839:                                              ; preds = %833
  %840 = load ptr, ptr %90, align 8, !tbaa !5
  %841 = icmp eq ptr %840, null
  br i1 %841, label %842, label %847

842:                                              ; preds = %839
  %843 = load ptr, ptr %89, align 8, !tbaa !5
  %844 = load ptr, ptr %85, align 8, !tbaa !5
  %845 = call ptr @ast_from(ptr noundef %844, i32 noundef 2)
  %846 = call ptr @ast_add(ptr noundef %843, ptr noundef %845)
  store ptr %846, ptr %90, align 8, !tbaa !5
  br label %852

847:                                              ; preds = %839
  %848 = load ptr, ptr %90, align 8, !tbaa !5
  %849 = load ptr, ptr %85, align 8, !tbaa !5
  %850 = call ptr @ast_from(ptr noundef %849, i32 noundef 2)
  %851 = call ptr @ast_add_sibling(ptr noundef %848, ptr noundef %850)
  store ptr %851, ptr %90, align 8, !tbaa !5
  br label %852

852:                                              ; preds = %847, %842
  br label %853

853:                                              ; preds = %852, %836
  %854 = load ptr, ptr %89, align 8, !tbaa !5
  call void @ast_inheritflags(ptr noundef %854)
  %855 = load ptr, ptr %89, align 8, !tbaa !5
  %856 = load ptr, ptr %90, align 8, !tbaa !5
  %857 = load ptr, ptr %91, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %91) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %90) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %89) #3
  %858 = load ptr, ptr %86, align 8, !tbaa !5
  store ptr %858, ptr %84, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %88) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %87) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %86) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %85) #3
  %859 = load ptr, ptr %5, align 8, !tbaa !5
  %860 = load ptr, ptr %84, align 8, !tbaa !5
  call void @ast_replace(ptr noundef %859, ptr noundef %860)
  %861 = load ptr, ptr %4, align 8, !tbaa !5
  %862 = call zeroext i1 @expr_chain(ptr noundef %861, ptr noundef %68)
  br i1 %862, label %863, label %870

863:                                              ; preds = %853
  %864 = load ptr, ptr %4, align 8, !tbaa !5
  %865 = load ptr, ptr %76, align 8, !tbaa !5
  %866 = call zeroext i1 @expr_seq(ptr noundef %864, ptr noundef %865)
  br i1 %866, label %867, label %870

867:                                              ; preds = %863
  %868 = load ptr, ptr %4, align 8, !tbaa !5
  %869 = call zeroext i1 @expr_call(ptr noundef %868, ptr noundef %84)
  br i1 %869, label %871, label %870

870:                                              ; preds = %867, %863, %853
  store i1 false, ptr %3, align 1
  store i32 1, ptr %13, align 4
  br label %872

871:                                              ; preds = %867
  store i32 0, ptr %13, align 4
  br label %872

872:                                              ; preds = %871, %870
  call void @llvm.lifetime.end.p0(i64 8, ptr %84) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %76) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #3
  %873 = load i32, ptr %13, align 4
  switch i32 %873, label %878 [
    i32 0, label %874
  ]

874:                                              ; preds = %872
  br label %875

875:                                              ; preds = %874
  %876 = load ptr, ptr %67, align 8, !tbaa !5
  %877 = call ptr @ast_sibling(ptr noundef %876)
  store ptr %877, ptr %67, align 8, !tbaa !5
  br label %621, !llvm.loop !22

878:                                              ; preds = %872, %624
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #3
  %879 = load i32, ptr %13, align 4
  switch i32 %879, label %882 [
    i32 5, label %880
  ]

880:                                              ; preds = %878
  %881 = load ptr, ptr %6, align 8, !tbaa !5
  call void @ast_free_unattached(ptr noundef %881)
  store i1 true, ptr %3, align 1
  store i32 1, ptr %13, align 4
  br label %882

882:                                              ; preds = %880, %878, %611
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #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 %39) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #3
  br label %883

883:                                              ; preds = %882, %214, %120
  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 1, ptr %8) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #3
  %884 = load i1, ptr %3, align 1
  ret i1 %884
}

declare i64 @ast_childcount(ptr noundef) #1

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

declare ptr @ast_child(ptr noundef) #1

declare i32 @ast_checkflag(ptr noundef, i32 noundef) #1

declare ptr @ast_type(ptr noundef) #1

declare zeroext i1 @is_typecheck_error(ptr noundef) #1

declare zeroext i1 @coerce_literals(ptr noundef, ptr noundef, ptr noundef) #1

declare ptr @consume_type(ptr noundef, i32 noundef, i1 noundef zeroext) #1

declare void @ast_error_frame(ptr noundef, ptr noundef, ptr noundef, ...) #1

declare ptr @ast_print_type(ptr noundef) #1

declare void @errorframe_append(ptr noundef, ptr noundef) #1

declare void @errorframe_report(ptr noundef, ptr noundef) #1

declare zeroext i1 @is_type_literal(ptr noundef) #1

declare void @make_literal_type(ptr noundef) #1

declare ptr @type_union(ptr noundef, ptr noundef, ptr noundef) #1

declare ptr @ast_sibling(ptr noundef) #1

declare ptr @alias(ptr noundef) #1

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

declare ptr @ast_from_int(ptr noundef, i64 noundef) #1

declare void @ast_settype(ptr noundef, ptr noundef) #1

declare ptr @type_builtin(ptr noundef, ptr noundef, ptr noundef) #1

declare zeroext i1 @refer_reference(ptr noundef, ptr noundef) #1

declare zeroext i1 @refer_qualify(ptr noundef, ptr noundef) #1

declare zeroext i1 @expr_typeref(ptr noundef, ptr noundef) #1

declare zeroext i1 @expr_dot(ptr noundef, ptr noundef) #1

declare zeroext i1 @expr_call(ptr noundef, ptr noundef) #1

declare void @ast_swap(ptr noundef, ptr noundef) #1

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

declare zeroext i1 @expr_chain(ptr noundef, ptr noundef) #1

declare zeroext i1 @expr_seq(ptr noundef, ptr noundef) #1

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { "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 #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 = !{!12, !12, i64 0}
!12 = !{!"long", !7, i64 0}
!13 = !{i8 0, i8 2}
!14 = !{}
!15 = !{!16, !6, i64 216}
!16 = !{!"pass_opt_t", !17, i64 0, !17, 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, !17, i64 24, !12, 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, !18, i64 176, !6, i64 224, !6, i64 232}
!17 = !{!"int", !7, i64 0}
!18 = !{!"typecheck_t", !6, i64 0, !19, i64 8, !6, i64 40}
!19 = !{!"typecheck_stats_t", !12, i64 0, !12, i64 8, !12, i64 16, !12, i64 24}
!20 = distinct !{!20, !21}
!21 = !{!"llvm.loop.mustprogress"}
!22 = distinct !{!22, !21}


; 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 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [74 x i8], align 1
@__func__.expr_array = external hidden unnamed_addr constant [11 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [90 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [67 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [5 x i8], align 1

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

declare i32 @ast_id(ptr noundef) local_unnamed_addr #1

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

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

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

declare zeroext i1 @is_subtype(ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

declare void @ast_free_unattached(ptr noundef) local_unnamed_addr #1

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

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

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

declare void @ast_inheritflags(ptr noundef) local_unnamed_addr #1

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

; Function Attrs: nounwind uwtable
define dso_local noundef zeroext i1 @expr_array(ptr noundef %0, ptr noundef %1) local_unnamed_addr #2 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca [3 x ptr], align 16
  %6 = alloca ptr, align 8
  %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 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = load ptr, ptr %1, align 8, !tbaa !5
  %16 = tail call i32 @ast_id(ptr noundef %15) #3
  %17 = icmp eq i32 %16, 179
  br i1 %17, label %19, label %18

18:                                               ; preds = %2
  tail call void @ponyint_assert_fail(ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i64 noundef 417, ptr noundef nonnull @__func__.expr_array) #3
  br label %19

19:                                               ; preds = %2, %18
  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 24, ptr nonnull %5) #3
  store ptr %3, ptr %5, align 16, !tbaa !5
  %20 = getelementptr inbounds i8, ptr %5, i64 8
  store ptr %4, ptr %20, align 8, !tbaa !5
  %21 = getelementptr inbounds i8, ptr %5, i64 16
  store ptr null, ptr %21, align 16, !tbaa !5
  call void @ast_get_children(ptr noundef %15, i64 noundef 2, ptr noundef nonnull %5) #3
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #3
  %22 = load ptr, ptr %4, align 8, !tbaa !5
  %23 = call i64 @ast_childcount(ptr noundef %22) #3
  %24 = load ptr, ptr %3, align 8, !tbaa !5
  %25 = call i32 @ast_id(ptr noundef %24) #3
  %.fr = freeze i32 %25
  %.not409.not = icmp eq i32 %.fr, 2
  %26 = icmp eq i64 %23, 0
  %or.cond = select i1 %.not409.not, i1 %26, i1 false
  br i1 %or.cond, label %27, label %30

27:                                               ; preds = %19
  %28 = getelementptr inbounds i8, ptr %0, i64 216
  %29 = load ptr, ptr %28, align 8, !tbaa !9
  call void (ptr, ptr, ptr, ...) @ast_error(ptr noundef %29, ptr noundef %15, ptr noundef nonnull @.str.2) #3
  br label %252

30:                                               ; preds = %19
  %31 = load ptr, ptr %3, align 8
  %spec.select = select i1 %.not409.not, ptr null, ptr %31
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #3
  %32 = load ptr, ptr %4, align 8, !tbaa !5
  %33 = call ptr @ast_child(ptr noundef %32) #3
  store ptr %33, ptr %6, align 8, !tbaa !5
  %.not503 = icmp eq ptr %33, null
  br i1 %.not503, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %30
  br i1 %.not409.not, label %.lr.ph.split.us, label %.lr.ph.split

.lr.ph.split.us:                                  ; preds = %.lr.ph, %.thread418.us
  %.1347505.us = phi ptr [ %41, %.thread418.us ], [ null, %.lr.ph ]
  %storemerge504.us = phi ptr [ %43, %.thread418.us ], [ %33, %.lr.ph ]
  %34 = call i32 @ast_checkflag(ptr noundef nonnull %storemerge504.us, i32 noundef 1048576) #3
  %.not410.us = icmp eq i32 %34, 0
  br i1 %.not410.us, label %35, label %.split.us

35:                                               ; preds = %.lr.ph.split.us
  %36 = load ptr, ptr %6, align 8, !tbaa !5
  %37 = call ptr @ast_type(ptr noundef %36) #3
  %38 = call zeroext i1 @is_typecheck_error(ptr noundef %37) #3
  br i1 %38, label %.thread429, label %39

39:                                               ; preds = %35
  %40 = call zeroext i1 @is_type_literal(ptr noundef %37) #3
  br i1 %40, label %.split507.us, label %.thread418.us

.thread418.us:                                    ; preds = %39
  %41 = call ptr @type_union(ptr noundef %0, ptr noundef %.1347505.us, ptr noundef %37) #3
  %42 = load ptr, ptr %6, align 8, !tbaa !5
  %43 = call ptr @ast_sibling(ptr noundef %42) #3
  store ptr %43, ptr %6, align 8, !tbaa !5
  %.not.us = icmp eq ptr %43, null
  br i1 %.not.us, label %._crit_edge, label %.lr.ph.split.us, !llvm.loop !16

.lr.ph.split:                                     ; preds = %.lr.ph, %73
  %storemerge504 = phi ptr [ %75, %73 ], [ %33, %.lr.ph ]
  %44 = call i32 @ast_checkflag(ptr noundef nonnull %storemerge504, i32 noundef 1048576) #3
  %.not410 = icmp eq i32 %44, 0
  br i1 %.not410, label %48, label %.split.us

.split.us:                                        ; preds = %.lr.ph.split, %.lr.ph.split.us
  %.us-phi = phi ptr [ %.1347505.us, %.lr.ph.split.us ], [ %spec.select, %.lr.ph.split ]
  %45 = getelementptr inbounds i8, ptr %0, i64 216
  %46 = load ptr, ptr %45, align 8, !tbaa !9
  %47 = load ptr, ptr %6, align 8, !tbaa !5
  call void (ptr, ptr, ptr, ...) @ast_error(ptr noundef %46, ptr noundef %47, ptr noundef nonnull @.str.3) #3
  call void @ast_free_unattached(ptr noundef %.us-phi) #3
  br label %.thread429

48:                                               ; preds = %.lr.ph.split
  %49 = load ptr, ptr %6, align 8, !tbaa !5
  %50 = call ptr @ast_type(ptr noundef %49) #3
  %51 = call zeroext i1 @is_typecheck_error(ptr noundef %50) #3
  br i1 %51, label %.thread429, label %52

52:                                               ; preds = %48
  %53 = call zeroext i1 @coerce_literals(ptr noundef nonnull %6, ptr noundef %spec.select, ptr noundef %0) #3
  br i1 %53, label %54, label %.thread429

54:                                               ; preds = %52
  %55 = load ptr, ptr %6, align 8, !tbaa !5
  %56 = call ptr @ast_type(ptr noundef %55) #3
  %57 = call ptr @consume_type(ptr noundef %spec.select, i32 noundef 2, i1 noundef zeroext false) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #3
  store ptr null, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #3
  store ptr null, ptr %8, align 8, !tbaa !5
  %58 = icmp eq ptr %57, null
  br i1 %58, label %59, label %64

59:                                               ; preds = %54
  %60 = load ptr, ptr %6, align 8, !tbaa !5
  %61 = call ptr @ast_print_type(ptr noundef %spec.select) #3
  call void (ptr, ptr, ptr, ...) @ast_error_frame(ptr noundef nonnull %8, ptr noundef %60, ptr noundef nonnull @.str.4, ptr noundef %61) #3
  call void @errorframe_append(ptr noundef nonnull %8, ptr noundef nonnull %7) #3
  %62 = getelementptr inbounds i8, ptr %0, i64 216
  %63 = load ptr, ptr %62, align 8, !tbaa !9
  call void @errorframe_report(ptr noundef nonnull %8, ptr noundef %63) #3
  br label %.thread425

64:                                               ; preds = %54
  %65 = call zeroext i1 @is_subtype(ptr noundef %56, ptr noundef nonnull %57, ptr noundef nonnull %7, ptr noundef %0) #3
  br i1 %65, label %73, label %66

66:                                               ; preds = %64
  %67 = load ptr, ptr %6, align 8, !tbaa !5
  call void (ptr, ptr, ptr, ...) @ast_error_frame(ptr noundef nonnull %8, ptr noundef %67, ptr noundef nonnull @.str.5) #3
  %68 = load ptr, ptr %3, align 8, !tbaa !5
  %69 = call ptr @ast_print_type(ptr noundef %spec.select) #3
  call void (ptr, ptr, ptr, ...) @ast_error_frame(ptr noundef nonnull %8, ptr noundef %68, ptr noundef nonnull @.str.6, ptr noundef %69) #3
  %70 = call ptr @ast_print_type(ptr noundef %56) #3
  call void (ptr, ptr, ptr, ...) @ast_error_frame(ptr noundef nonnull %8, ptr noundef %56, ptr noundef nonnull @.str.7, ptr noundef %70) #3
  call void @errorframe_append(ptr noundef nonnull %8, ptr noundef nonnull %7) #3
  %71 = getelementptr inbounds i8, ptr %0, i64 216
  %72 = load ptr, ptr %71, align 8, !tbaa !9
  call void @errorframe_report(ptr noundef nonnull %8, ptr noundef %72) #3
  call void @ast_free_unattached(ptr noundef nonnull %57) #3
  br label %.thread425

.split507.us:                                     ; preds = %39
  call void @ast_free_unattached(ptr noundef %.1347505.us) #3
  call void @make_literal_type(ptr noundef %15) #3
  br label %.thread429

.thread425:                                       ; preds = %59, %66
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #3
  br label %.thread429

73:                                               ; preds = %64
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #3
  %74 = load ptr, ptr %6, align 8, !tbaa !5
  %75 = call ptr @ast_sibling(ptr noundef %74) #3
  store ptr %75, ptr %6, align 8, !tbaa !5
  %.not = icmp eq ptr %75, null
  br i1 %.not, label %._crit_edge, label %.lr.ph.split, !llvm.loop !16

.thread429:                                       ; preds = %52, %48, %35, %.thread425, %.split.us, %.split507.us
  %.4.ph = phi i1 [ false, %.thread425 ], [ false, %.split.us ], [ true, %.split507.us ], [ false, %35 ], [ false, %48 ], [ false, %52 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #3
  br label %252

._crit_edge:                                      ; preds = %73, %.thread418.us, %30
  %.1347.lcssa = phi ptr [ %spec.select, %30 ], [ %41, %.thread418.us ], [ %spec.select, %73 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #3
  br i1 %.not409.not, label %76, label %78

76:                                               ; preds = %._crit_edge
  %77 = call ptr @alias(ptr noundef %.1347.lcssa) #3
  call void @ast_free_unattached(ptr noundef %.1347.lcssa) #3
  br label %78

78:                                               ; preds = %76, %._crit_edge
  %.5351 = phi ptr [ %.1347.lcssa, %._crit_edge ], [ %77, %76 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #3
  %79 = call ptr @ast_from(ptr noundef %15, i32 noundef 184) #3
  %80 = icmp eq ptr %79, null
  %81 = call ptr @ast_from_string(ptr noundef %15, ptr noundef nonnull @.str.8) #3
  br i1 %80, label %84, label %82

82:                                               ; preds = %78
  %83 = call ptr @ast_add(ptr noundef nonnull %79, ptr noundef %81) #3
  br label %84

84:                                               ; preds = %78, %82
  %.0379 = phi ptr [ %79, %82 ], [ %81, %78 ]
  call void @ast_inheritflags(ptr noundef %.0379) #3
  store ptr %79, ptr %9, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #3
  %85 = call ptr @ast_from(ptr noundef %15, i32 noundef 176) #3
  %86 = icmp eq ptr %85, null
  %87 = load ptr, ptr %9, align 8, !tbaa !5
  br i1 %86, label %88, label %91

88:                                               ; preds = %84
  %89 = call ptr @ast_from(ptr noundef %15, i32 noundef 166) #3
  %90 = icmp eq ptr %87, null
  br i1 %90, label %99, label %.thread436

91:                                               ; preds = %84
  %92 = call ptr @ast_add(ptr noundef nonnull %85, ptr noundef %87) #3
  %93 = call ptr @ast_from(ptr noundef %15, i32 noundef 166) #3
  %94 = icmp eq ptr %92, null
  br i1 %94, label %.thread436, label %97

.thread436:                                       ; preds = %88, %91
  %.0385435439 = phi ptr [ %85, %91 ], [ %87, %88 ]
  %95 = phi ptr [ %93, %91 ], [ %89, %88 ]
  %96 = call ptr @ast_add(ptr noundef nonnull %.0385435439, ptr noundef %95) #3
  br label %99

97:                                               ; preds = %91
  %98 = call ptr @ast_add_sibling(ptr noundef nonnull %92, ptr noundef %93) #3
  br label %99

99:                                               ; preds = %88, %.thread436, %97
  %100 = phi ptr [ %95, %.thread436 ], [ %93, %97 ], [ %89, %88 ]
  %.1386 = phi ptr [ %.0385435439, %.thread436 ], [ %85, %97 ], [ %89, %88 ]
  %101 = icmp eq ptr %100, null
  br i1 %101, label %104, label %102

102:                                              ; preds = %99
  %103 = call ptr @ast_add(ptr noundef nonnull %100, ptr noundef %.5351) #3
  br label %104

104:                                              ; preds = %99, %102
  %.0395 = phi ptr [ %100, %102 ], [ %.5351, %99 ]
  call void @ast_inheritflags(ptr noundef %.0395) #3
  call void @ast_inheritflags(ptr noundef %.1386) #3
  store ptr %85, ptr %10, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #3
  %105 = call ptr @ast_from(ptr noundef %15, i32 noundef 19) #3
  %106 = icmp eq ptr %105, null
  %107 = load ptr, ptr %10, align 8, !tbaa !5
  br i1 %106, label %108, label %112

108:                                              ; preds = %104
  %109 = icmp eq ptr %107, null
  br i1 %109, label %110, label %.thread445

110:                                              ; preds = %108
  %111 = call ptr @ast_from_string(ptr noundef %15, ptr noundef nonnull @.str.9) #3
  br label %120

112:                                              ; preds = %104
  %113 = call ptr @ast_add(ptr noundef nonnull %105, ptr noundef %107) #3
  %114 = icmp eq ptr %113, null
  br i1 %114, label %.thread445, label %117

.thread445:                                       ; preds = %108, %112
  %.0389443448 = phi ptr [ %105, %112 ], [ %107, %108 ]
  %115 = call ptr @ast_from_string(ptr noundef %15, ptr noundef nonnull @.str.9) #3
  %116 = call ptr @ast_add(ptr noundef nonnull %.0389443448, ptr noundef %115) #3
  br label %120

117:                                              ; preds = %112
  %118 = call ptr @ast_from_string(ptr noundef %15, ptr noundef nonnull @.str.9) #3
  %119 = call ptr @ast_add_sibling(ptr noundef nonnull %113, ptr noundef %118) #3
  br label %120

120:                                              ; preds = %.thread445, %117, %110
  %.1390 = phi ptr [ %111, %110 ], [ %.0389443448, %.thread445 ], [ %105, %117 ]
  call void @ast_inheritflags(ptr noundef %.1390) #3
  store ptr %105, ptr %11, align 8, !tbaa !5
  %121 = call ptr @ast_from_int(ptr noundef %15, i64 noundef %23) #3
  %122 = call ptr @ast_from(ptr noundef %15, i32 noundef 175) #3
  %123 = icmp eq ptr %122, null
  br i1 %123, label %126, label %124

124:                                              ; preds = %120
  %125 = call ptr @ast_add(ptr noundef nonnull %122, ptr noundef %121) #3
  br label %126

126:                                              ; preds = %120, %124
  %.0382 = phi ptr [ %122, %124 ], [ %121, %120 ]
  call void @ast_inheritflags(ptr noundef %.0382) #3
  %127 = call ptr @type_builtin(ptr noundef %0, ptr noundef %15, ptr noundef nonnull @.str.10) #3
  call void @ast_settype(ptr noundef %121, ptr noundef %127) #3
  %128 = call ptr @type_builtin(ptr noundef %0, ptr noundef %15, ptr noundef nonnull @.str.10) #3
  call void @ast_settype(ptr noundef %122, ptr noundef %128) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #3
  %129 = call ptr @ast_from(ptr noundef %15, i32 noundef 177) #3
  %130 = icmp eq ptr %129, null
  %131 = load ptr, ptr %11, align 8, !tbaa !5
  br i1 %130, label %132, label %135

132:                                              ; preds = %126
  %133 = call ptr @ast_from(ptr noundef %15, i32 noundef 169) #3
  %134 = icmp eq ptr %131, null
  br i1 %134, label %143, label %.thread454

135:                                              ; preds = %126
  %136 = call ptr @ast_add(ptr noundef nonnull %129, ptr noundef %131) #3
  %137 = call ptr @ast_from(ptr noundef %15, i32 noundef 169) #3
  %138 = icmp eq ptr %136, null
  br i1 %138, label %.thread454, label %141

.thread454:                                       ; preds = %132, %135
  %.0374452457 = phi ptr [ %129, %135 ], [ %131, %132 ]
  %139 = phi ptr [ %137, %135 ], [ %133, %132 ]
  %140 = call ptr @ast_add(ptr noundef nonnull %.0374452457, ptr noundef %139) #3
  br label %143

141:                                              ; preds = %135
  %142 = call ptr @ast_add_sibling(ptr noundef nonnull %136, ptr noundef %137) #3
  br label %143

143:                                              ; preds = %132, %.thread454, %141
  %144 = phi ptr [ %139, %.thread454 ], [ %137, %141 ], [ %133, %132 ]
  %.1375 = phi ptr [ %.0374452457, %.thread454 ], [ %129, %141 ], [ %133, %132 ]
  %.1371 = phi ptr [ %140, %.thread454 ], [ %142, %141 ], [ null, %132 ]
  %145 = icmp eq ptr %144, null
  br i1 %145, label %148, label %146

146:                                              ; preds = %143
  %147 = call ptr @ast_add(ptr noundef nonnull %144, ptr noundef %122) #3
  br label %148

148:                                              ; preds = %143, %146
  %.0369 = phi ptr [ %144, %146 ], [ %122, %143 ]
  call void @ast_inheritflags(ptr noundef %.0369) #3
  %149 = icmp eq ptr %.1375, null
  br i1 %149, label %157, label %150

150:                                              ; preds = %148
  %151 = icmp eq ptr %.1371, null
  %152 = call ptr @ast_from(ptr noundef %15, i32 noundef 2) #3
  br i1 %151, label %153, label %155

153:                                              ; preds = %150
  %154 = call ptr @ast_add(ptr noundef nonnull %.1375, ptr noundef %152) #3
  br label %.thread459

155:                                              ; preds = %150
  %156 = call ptr @ast_add_sibling(ptr noundef nonnull %.1371, ptr noundef %152) #3
  br label %.thread459

157:                                              ; preds = %148
  %158 = call ptr @ast_from(ptr noundef %15, i32 noundef 2) #3
  %159 = icmp eq ptr %158, null
  br i1 %159, label %160, label %.thread459

160:                                              ; preds = %157
  %161 = call ptr @ast_from(ptr noundef %15, i32 noundef 2) #3
  br label %168

.thread459:                                       ; preds = %155, %153, %157
  %.2372463 = phi ptr [ %.1371, %157 ], [ %156, %155 ], [ %154, %153 ]
  %.2376462 = phi ptr [ %158, %157 ], [ %.1375, %155 ], [ %.1375, %153 ]
  %162 = icmp eq ptr %.2372463, null
  %163 = call ptr @ast_from(ptr noundef %15, i32 noundef 2) #3
  br i1 %162, label %164, label %166

164:                                              ; preds = %.thread459
  %165 = call ptr @ast_add(ptr noundef nonnull %.2376462, ptr noundef %163) #3
  br label %168

166:                                              ; preds = %.thread459
  %167 = call ptr @ast_add_sibling(ptr noundef nonnull %.2372463, ptr noundef %163) #3
  br label %168

168:                                              ; preds = %164, %166, %160
  %.3377 = phi ptr [ %161, %160 ], [ %.2376462, %164 ], [ %.2376462, %166 ]
  call void @ast_inheritflags(ptr noundef %.3377) #3
  store ptr %129, ptr %12, align 8, !tbaa !5
  %169 = call zeroext i1 @refer_reference(ptr noundef %0, ptr noundef nonnull %9) #3
  br i1 %169, label %170, label %.thread493

170:                                              ; preds = %168
  %171 = load ptr, ptr %10, align 8, !tbaa !5
  %172 = call zeroext i1 @refer_qualify(ptr noundef %0, ptr noundef %171) #3
  br i1 %172, label %173, label %.thread493

173:                                              ; preds = %170
  %174 = call zeroext i1 @expr_typeref(ptr noundef %0, ptr noundef nonnull %10) #3
  br i1 %174, label %175, label %.thread493

175:                                              ; preds = %173
  %176 = call zeroext i1 @expr_dot(ptr noundef %0, ptr noundef nonnull %11) #3
  br i1 %176, label %177, label %.thread493

177:                                              ; preds = %175
  %178 = call zeroext i1 @expr_call(ptr noundef %0, ptr noundef nonnull %12) #3
  br i1 %178, label %179, label %.thread493

179:                                              ; preds = %177
  %180 = load ptr, ptr %12, align 8, !tbaa !5
  call void @ast_swap(ptr noundef %15, ptr noundef %180) #3
  %181 = load ptr, ptr %12, align 8, !tbaa !5
  store ptr %181, ptr %1, align 8, !tbaa !5
  %182 = call ptr @ast_childidx(ptr noundef %15, i64 noundef 1) #3
  store ptr %182, ptr %4, align 8, !tbaa !5
  %183 = call ptr @ast_child(ptr noundef %182) #3
  %.not411510 = icmp eq ptr %183, null
  br i1 %.not411510, label %._crit_edge514, label %.lr.ph513

.lr.ph513:                                        ; preds = %179, %250
  %.0367511 = phi ptr [ %251, %250 ], [ %183, %179 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #3
  %184 = call ptr @ast_from(ptr noundef %15, i32 noundef 21) #3
  %185 = icmp eq ptr %184, null
  %186 = load ptr, ptr %1, align 8, !tbaa !5
  br i1 %185, label %187, label %191

187:                                              ; preds = %.lr.ph513
  %188 = icmp eq ptr %186, null
  br i1 %188, label %189, label %.thread469

189:                                              ; preds = %187
  %190 = call ptr @ast_from_string(ptr noundef %15, ptr noundef nonnull @.str.11) #3
  br label %199

191:                                              ; preds = %.lr.ph513
  %192 = call ptr @ast_add(ptr noundef nonnull %184, ptr noundef %186) #3
  %193 = icmp eq ptr %192, null
  br i1 %193, label %.thread469, label %196

.thread469:                                       ; preds = %187, %191
  %.0364467472 = phi ptr [ %184, %191 ], [ %186, %187 ]
  %194 = call ptr @ast_from_string(ptr noundef %15, ptr noundef nonnull @.str.11) #3
  %195 = call ptr @ast_add(ptr noundef nonnull %.0364467472, ptr noundef %194) #3
  br label %199

196:                                              ; preds = %191
  %197 = call ptr @ast_from_string(ptr noundef %15, ptr noundef nonnull @.str.11) #3
  %198 = call ptr @ast_add_sibling(ptr noundef nonnull %192, ptr noundef %197) #3
  br label %199

199:                                              ; preds = %.thread469, %196, %189
  %.1365 = phi ptr [ %190, %189 ], [ %.0364467472, %.thread469 ], [ %184, %196 ]
  call void @ast_inheritflags(ptr noundef %.1365) #3
  store ptr %184, ptr %13, align 8, !tbaa !5
  %200 = call ptr @ast_from(ptr noundef %15, i32 noundef 175) #3
  %201 = icmp eq ptr %200, null
  br i1 %201, label %204, label %202

202:                                              ; preds = %199
  %203 = call ptr @ast_add(ptr noundef nonnull %200, ptr noundef nonnull %.0367511) #3
  br label %204

204:                                              ; preds = %199, %202
  %.0354 = phi ptr [ %200, %202 ], [ %.0367511, %199 ]
  call void @ast_inheritflags(ptr noundef nonnull %.0354) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #3
  %205 = call ptr @ast_from(ptr noundef %15, i32 noundef 177) #3
  %206 = icmp eq ptr %205, null
  %207 = load ptr, ptr %13, align 8, !tbaa !5
  br i1 %206, label %208, label %211

208:                                              ; preds = %204
  %209 = call ptr @ast_from(ptr noundef %15, i32 noundef 169) #3
  %210 = icmp eq ptr %207, null
  br i1 %210, label %219, label %.thread478

211:                                              ; preds = %204
  %212 = call ptr @ast_add(ptr noundef nonnull %205, ptr noundef %207) #3
  %213 = call ptr @ast_from(ptr noundef %15, i32 noundef 169) #3
  %214 = icmp eq ptr %212, null
  br i1 %214, label %.thread478, label %217

.thread478:                                       ; preds = %208, %211
  %.0341476481 = phi ptr [ %205, %211 ], [ %207, %208 ]
  %215 = phi ptr [ %213, %211 ], [ %209, %208 ]
  %216 = call ptr @ast_add(ptr noundef nonnull %.0341476481, ptr noundef %215) #3
  br label %219

217:                                              ; preds = %211
  %218 = call ptr @ast_add_sibling(ptr noundef nonnull %212, ptr noundef %213) #3
  br label %219

219:                                              ; preds = %208, %.thread478, %217
  %220 = phi ptr [ %215, %.thread478 ], [ %213, %217 ], [ %209, %208 ]
  %.1342 = phi ptr [ %.0341476481, %.thread478 ], [ %205, %217 ], [ %209, %208 ]
  %.1338 = phi ptr [ %216, %.thread478 ], [ %218, %217 ], [ null, %208 ]
  %221 = icmp eq ptr %220, null
  br i1 %221, label %224, label %222

222:                                              ; preds = %219
  %223 = call ptr @ast_add(ptr noundef nonnull %220, ptr noundef %200) #3
  br label %224

224:                                              ; preds = %219, %222
  %.0336 = phi ptr [ %220, %222 ], [ %200, %219 ]
  call void @ast_inheritflags(ptr noundef %.0336) #3
  %225 = icmp eq ptr %.1342, null
  br i1 %225, label %233, label %226

226:                                              ; preds = %224
  %227 = icmp eq ptr %.1338, null
  %228 = call ptr @ast_from(ptr noundef %15, i32 noundef 2) #3
  br i1 %227, label %229, label %231

229:                                              ; preds = %226
  %230 = call ptr @ast_add(ptr noundef nonnull %.1342, ptr noundef %228) #3
  br label %.thread483

231:                                              ; preds = %226
  %232 = call ptr @ast_add_sibling(ptr noundef nonnull %.1338, ptr noundef %228) #3
  br label %.thread483

233:                                              ; preds = %224
  %234 = call ptr @ast_from(ptr noundef %15, i32 noundef 2) #3
  %235 = icmp eq ptr %234, null
  br i1 %235, label %236, label %.thread483

236:                                              ; preds = %233
  %237 = call ptr @ast_from(ptr noundef %15, i32 noundef 2) #3
  br label %244

.thread483:                                       ; preds = %231, %229, %233
  %.2339487 = phi ptr [ %.1338, %233 ], [ %232, %231 ], [ %230, %229 ]
  %.2343486 = phi ptr [ %234, %233 ], [ %.1342, %231 ], [ %.1342, %229 ]
  %238 = icmp eq ptr %.2339487, null
  %239 = call ptr @ast_from(ptr noundef %15, i32 noundef 2) #3
  br i1 %238, label %240, label %242

240:                                              ; preds = %.thread483
  %241 = call ptr @ast_add(ptr noundef nonnull %.2343486, ptr noundef %239) #3
  br label %244

242:                                              ; preds = %.thread483
  %243 = call ptr @ast_add_sibling(ptr noundef nonnull %.2339487, ptr noundef %239) #3
  br label %244

244:                                              ; preds = %240, %242, %236
  %.3344 = phi ptr [ %237, %236 ], [ %.2343486, %240 ], [ %.2343486, %242 ]
  call void @ast_inheritflags(ptr noundef %.3344) #3
  store ptr %205, ptr %14, align 8, !tbaa !5
  call void @ast_replace(ptr noundef nonnull %1, ptr noundef %205) #3
  %245 = call zeroext i1 @expr_chain(ptr noundef %0, ptr noundef nonnull %13) #3
  br i1 %245, label %246, label %.thread489

246:                                              ; preds = %244
  %247 = call zeroext i1 @expr_seq(ptr noundef %0, ptr noundef %200) #3
  br i1 %247, label %248, label %.thread489

.thread489:                                       ; preds = %246, %244
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #3
  br label %.thread493

248:                                              ; preds = %246
  %249 = call zeroext i1 @expr_call(ptr noundef %0, ptr noundef nonnull %14) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #3
  br i1 %249, label %250, label %.thread493

250:                                              ; preds = %248
  %251 = call ptr @ast_sibling(ptr noundef nonnull %.0367511) #3
  %.not411 = icmp eq ptr %251, null
  br i1 %.not411, label %._crit_edge514, label %.lr.ph513, !llvm.loop !18

._crit_edge514:                                   ; preds = %250, %179
  call void @ast_free_unattached(ptr noundef %15) #3
  br label %.thread493

.thread493:                                       ; preds = %248, %.thread489, %168, %170, %173, %175, %177, %._crit_edge514
  %.8 = phi i1 [ true, %._crit_edge514 ], [ false, %177 ], [ false, %175 ], [ false, %173 ], [ false, %170 ], [ false, %168 ], [ false, %.thread489 ], [ false, %248 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #3
  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
  br label %252

252:                                              ; preds = %.thread429, %.thread493, %27
  %.9 = phi i1 [ false, %27 ], [ %.8, %.thread493 ], [ %.4.ph, %.thread429 ]
  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 %.9
}

declare i64 @ast_childcount(ptr noundef) local_unnamed_addr #1

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

declare ptr @ast_child(ptr noundef) local_unnamed_addr #1

declare i32 @ast_checkflag(ptr noundef, i32 noundef) local_unnamed_addr #1

declare ptr @ast_type(ptr noundef) local_unnamed_addr #1

declare zeroext i1 @is_typecheck_error(ptr noundef) local_unnamed_addr #1

declare zeroext i1 @coerce_literals(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

declare ptr @consume_type(ptr noundef, i32 noundef, i1 noundef zeroext) local_unnamed_addr #1

declare void @ast_error_frame(ptr noundef, ptr noundef, ptr noundef, ...) local_unnamed_addr #1

declare ptr @ast_print_type(ptr noundef) local_unnamed_addr #1

declare void @errorframe_append(ptr noundef, ptr noundef) local_unnamed_addr #1

declare void @errorframe_report(ptr noundef, ptr noundef) local_unnamed_addr #1

declare zeroext i1 @is_type_literal(ptr noundef) local_unnamed_addr #1

declare void @make_literal_type(ptr noundef) local_unnamed_addr #1

declare ptr @type_union(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

declare ptr @ast_sibling(ptr noundef) local_unnamed_addr #1

declare ptr @alias(ptr noundef) local_unnamed_addr #1

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

declare ptr @ast_from_int(ptr noundef, i64 noundef) local_unnamed_addr #1

declare void @ast_settype(ptr noundef, ptr noundef) local_unnamed_addr #1

declare ptr @type_builtin(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

declare zeroext i1 @refer_reference(ptr noundef, ptr noundef) local_unnamed_addr #1

declare zeroext i1 @refer_qualify(ptr noundef, ptr noundef) local_unnamed_addr #1

declare zeroext i1 @expr_typeref(ptr noundef, ptr noundef) local_unnamed_addr #1

declare zeroext i1 @expr_dot(ptr noundef, ptr noundef) local_unnamed_addr #1

declare zeroext i1 @expr_call(ptr noundef, ptr noundef) local_unnamed_addr #1

declare void @ast_swap(ptr noundef, ptr noundef) local_unnamed_addr #1

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

declare zeroext i1 @expr_chain(ptr noundef, ptr noundef) local_unnamed_addr #1

declare zeroext i1 @expr_seq(ptr noundef, ptr noundef) local_unnamed_addr #1

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { "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 #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, !6, i64 216}
!10 = !{!"pass_opt_t", !11, i64 0, !11, i64 4, !12, i64 8, !12, i64 9, !12, i64 10, !12, i64 11, !12, i64 12, !12, i64 13, !12, i64 14, !12, i64 15, !12, i64 16, !12, i64 17, !12, i64 18, !12, i64 19, !12, i64 20, !12, i64 21, !11, i64 24, !13, i64 32, !12, i64 40, !12, 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, !14, i64 176, !6, i64 224, !6, i64 232}
!11 = !{!"int", !7, i64 0}
!12 = !{!"_Bool", !7, i64 0}
!13 = !{!"long", !7, i64 0}
!14 = !{!"typecheck_t", !6, i64 0, !15, i64 8, !6, i64 40}
!15 = !{!"typecheck_stats_t", !13, i64 0, !13, i64 8, !13, i64 16, !13, i64 24}
!16 = distinct !{!16, !17}
!17 = !{!"llvm.loop.mustprogress"}
!18 = distinct !{!18, !17}


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