; LLVM IR from nickmqb/muon :: bootstrap/mu.ll_TypeChecker (canCoerce__)

; 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.tag_____Tag__ = type { ptr, ptr }
%struct.Node__ = type { i32, ptr }
%union.anon.7 = type { i64 }
%union.anon.8 = type { i64 }
%struct.tag_____Namespace__ = type { %struct.string__, ptr, i32, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32 }
%struct.string__ = type { ptr, i32 }
%struct.tag_____TypeCheckerContext__ = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, i32, ptr, i32, i8 }
%struct.tag_____CommonTags__ = type { %struct.tag_____Tag__, %struct.tag_____Tag__, %struct.tag_____Tag__, %struct.tag_____Tag__, %struct.tag_____Tag__, %struct.tag_____Tag__, %struct.tag_____Tag__, %struct.tag_____Tag__, %struct.tag_____Tag__, %struct.tag_____Tag__, %struct.tag_____Tag__, %struct.tag_____Tag__, %struct.tag_____Tag__, %struct.tag_____Tag__, %struct.tag_____Tag__, %struct.tag_____Tag__, %struct.tag_____Tag__, %struct.tag_____Tag__, %struct.tag_____Tag__, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%struct.tag_____NumberExpression__ = type { ptr, %struct.tag_____IntRange__, i32, %struct.tag_____Tag__, i64 }
%struct.tag_____IntRange__ = type { i32, i32 }

@top_____abandonFn__ = external dso_local thread_local global ptr, align 8

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

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

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

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

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

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

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

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

; Function Attrs: nounwind uwtable
define dso_local zeroext i8 @TypeChecker__canCoerce__(ptr noundef %0, ptr %1, ptr %2, i32 %3, ptr %4, ptr noundef byval(%struct.tag_____Tag__) align 8 %5) #4 {
  %7 = alloca i8, align 1
  %8 = alloca %struct.tag_____Tag__, align 8
  %9 = alloca %struct.Node__, align 8
  %10 = alloca ptr, align 8
  %11 = alloca i8, align 1
  %12 = alloca i32, align 4
  %13 = alloca i8, align 1
  %14 = alloca i8, align 1
  %15 = alloca %struct.Node__, align 8
  %16 = alloca ptr, align 8
  %17 = alloca %union.anon.7, align 8
  %18 = alloca i8, align 1
  %19 = alloca i8, align 1
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i8, align 1
  %23 = alloca %struct.Node__, align 8
  %24 = alloca ptr, align 8
  %25 = alloca %union.anon.8, align 8
  %26 = alloca i8, align 1
  %27 = getelementptr inbounds { ptr, ptr }, ptr %8, i32 0, i32 0
  store ptr %1, ptr %27, align 8
  %28 = getelementptr inbounds { ptr, ptr }, ptr %8, i32 0, i32 1
  store ptr %2, ptr %28, align 8
  %29 = getelementptr inbounds { i32, ptr }, ptr %9, i32 0, i32 0
  store i32 %3, ptr %29, align 8
  %30 = getelementptr inbounds { i32, ptr }, ptr %9, i32 0, i32 1
  store ptr %4, ptr %30, align 8
  store ptr %0, ptr %10, align 8, !tbaa !5
  %31 = getelementptr inbounds %struct.tag_____Tag__, ptr %5, i32 0, i32 0
  %32 = load ptr, ptr %31, align 8, !tbaa !9
  %33 = getelementptr inbounds %struct.tag_____Namespace__, ptr %32, i32 0, i32 3
  %34 = load i32, ptr %33, align 4, !tbaa !11
  %35 = and i32 %34, 8
  %36 = icmp ne i32 %35, 0
  br i1 %36, label %37, label %46

37:                                               ; preds = %6
  %38 = getelementptr inbounds %struct.tag_____Tag__, ptr %8, i32 0, i32 0
  %39 = load ptr, ptr %38, align 8, !tbaa !9
  %40 = getelementptr inbounds %struct.tag_____Namespace__, ptr %39, i32 0, i32 3
  %41 = load i32, ptr %40, align 4, !tbaa !11
  %42 = and i32 %41, 8
  %43 = icmp ne i32 %42, 0
  %44 = zext i1 %43 to i32
  %45 = trunc i32 %44 to i8
  store i8 %45, ptr %7, align 1
  br label %358

46:                                               ; preds = %6
  %47 = getelementptr inbounds %struct.tag_____Tag__, ptr %5, i32 0, i32 0
  %48 = load ptr, ptr %47, align 8, !tbaa !9
  %49 = getelementptr inbounds %struct.tag_____Namespace__, ptr %48, i32 0, i32 3
  %50 = load i32, ptr %49, align 4, !tbaa !11
  %51 = and i32 %50, 64
  %52 = icmp ne i32 %51, 0
  br i1 %52, label %53, label %59

53:                                               ; preds = %46
  %54 = getelementptr inbounds %struct.Node__, ptr %9, i32 0, i32 0
  %55 = load i32, ptr %54, align 8, !tbaa !15
  %56 = icmp eq i32 %55, 20
  %57 = zext i1 %56 to i32
  %58 = trunc i32 %57 to i8
  store i8 %58, ptr %7, align 1
  br label %358

59:                                               ; preds = %46
  %60 = getelementptr inbounds %struct.tag_____Tag__, ptr %5, i32 0, i32 0
  %61 = load ptr, ptr %60, align 8, !tbaa !9
  %62 = getelementptr inbounds %struct.tag_____Namespace__, ptr %61, i32 0, i32 3
  %63 = load i32, ptr %62, align 4, !tbaa !11
  %64 = and i32 %63, 4
  %65 = icmp ne i32 %64, 0
  br i1 %65, label %66, label %103

66:                                               ; preds = %59
  %67 = getelementptr inbounds %struct.tag_____Tag__, ptr %8, i32 0, i32 0
  %68 = load ptr, ptr %67, align 8, !tbaa !9
  %69 = getelementptr inbounds %struct.tag_____Namespace__, ptr %68, i32 0, i32 3
  %70 = load i32, ptr %69, align 4, !tbaa !11
  %71 = and i32 %70, 1
  %72 = icmp ne i32 %71, 0
  br i1 %72, label %73, label %74

73:                                               ; preds = %66
  store i8 1, ptr %7, align 1
  br label %358

74:                                               ; preds = %66
  call void @llvm.lifetime.start.p0(i64 1, ptr %11) #5
  %75 = getelementptr inbounds %struct.tag_____Tag__, ptr %8, i32 0, i32 0
  %76 = load ptr, ptr %75, align 8, !tbaa !9
  %77 = getelementptr inbounds %struct.tag_____Namespace__, ptr %76, i32 0, i32 3
  %78 = load i32, ptr %77, align 4, !tbaa !11
  %79 = and i32 %78, 4
  %80 = icmp ne i32 %79, 0
  %81 = zext i1 %80 to i32
  %82 = trunc i32 %81 to i8
  store i8 %82, ptr %11, align 1, !tbaa !17
  %83 = load i8, ptr %11, align 1, !tbaa !17
  %84 = icmp ne i8 %83, 0
  br i1 %84, label %85, label %97

85:                                               ; preds = %74
  %86 = getelementptr inbounds %struct.tag_____Tag__, ptr %5, i32 0, i32 0
  %87 = load ptr, ptr %86, align 8, !tbaa !9
  %88 = getelementptr inbounds %struct.tag_____Namespace__, ptr %87, i32 0, i32 13
  %89 = load i32, ptr %88, align 8, !tbaa !18
  %90 = getelementptr inbounds %struct.tag_____Tag__, ptr %8, i32 0, i32 0
  %91 = load ptr, ptr %90, align 8, !tbaa !9
  %92 = getelementptr inbounds %struct.tag_____Namespace__, ptr %91, i32 0, i32 13
  %93 = load i32, ptr %92, align 8, !tbaa !18
  %94 = icmp sge i32 %89, %93
  %95 = zext i1 %94 to i32
  %96 = trunc i32 %95 to i8
  store i8 %96, ptr %11, align 1, !tbaa !17
  br label %97

97:                                               ; preds = %85, %74
  %98 = load i8, ptr %11, align 1, !tbaa !17
  %99 = icmp ne i8 %98, 0
  br i1 %99, label %100, label %101

100:                                              ; preds = %97
  store i8 1, ptr %7, align 1
  store i32 1, ptr %12, align 4
  br label %102

101:                                              ; preds = %97
  store i8 0, ptr %7, align 1
  store i32 1, ptr %12, align 4
  br label %102

102:                                              ; preds = %101, %100
  call void @llvm.lifetime.end.p0(i64 1, ptr %11) #5
  br label %358

103:                                              ; preds = %59
  %104 = getelementptr inbounds %struct.tag_____Tag__, ptr %5, i32 0, i32 0
  %105 = load ptr, ptr %104, align 8, !tbaa !9
  %106 = getelementptr inbounds %struct.tag_____Namespace__, ptr %105, i32 0, i32 3
  %107 = load i32, ptr %106, align 4, !tbaa !11
  %108 = and i32 %107, 2
  %109 = icmp ne i32 %108, 0
  br i1 %109, label %110, label %201

110:                                              ; preds = %103
  %111 = getelementptr inbounds %struct.tag_____Tag__, ptr %8, i32 0, i32 0
  %112 = load ptr, ptr %111, align 8, !tbaa !9
  %113 = getelementptr inbounds %struct.tag_____Namespace__, ptr %112, i32 0, i32 3
  %114 = load i32, ptr %113, align 4, !tbaa !11
  %115 = and i32 %114, 1
  %116 = icmp eq i32 %115, 0
  br i1 %116, label %117, label %118

117:                                              ; preds = %110
  store i8 0, ptr %7, align 1
  br label %358

118:                                              ; preds = %110
  call void @llvm.lifetime.start.p0(i64 1, ptr %13) #5
  %119 = getelementptr inbounds %struct.tag_____Tag__, ptr %8, i32 0, i32 0
  %120 = load ptr, ptr %119, align 8, !tbaa !9
  %121 = getelementptr inbounds %struct.tag_____Namespace__, ptr %120, i32 0, i32 3
  %122 = load i32, ptr %121, align 4, !tbaa !11
  %123 = and i32 %122, 2
  %124 = icmp ne i32 %123, 0
  %125 = zext i1 %124 to i32
  %126 = trunc i32 %125 to i8
  store i8 %126, ptr %13, align 1, !tbaa !17
  %127 = load i8, ptr %13, align 1, !tbaa !17
  %128 = icmp ne i8 %127, 0
  br i1 %128, label %129, label %141

129:                                              ; preds = %118
  %130 = getelementptr inbounds %struct.tag_____Tag__, ptr %5, i32 0, i32 0
  %131 = load ptr, ptr %130, align 8, !tbaa !9
  %132 = getelementptr inbounds %struct.tag_____Namespace__, ptr %131, i32 0, i32 13
  %133 = load i32, ptr %132, align 8, !tbaa !18
  %134 = getelementptr inbounds %struct.tag_____Tag__, ptr %8, i32 0, i32 0
  %135 = load ptr, ptr %134, align 8, !tbaa !9
  %136 = getelementptr inbounds %struct.tag_____Namespace__, ptr %135, i32 0, i32 13
  %137 = load i32, ptr %136, align 8, !tbaa !18
  %138 = icmp sge i32 %133, %137
  %139 = zext i1 %138 to i32
  %140 = trunc i32 %139 to i8
  store i8 %140, ptr %13, align 1, !tbaa !17
  br label %141

141:                                              ; preds = %129, %118
  %142 = load i8, ptr %13, align 1, !tbaa !17
  %143 = icmp ne i8 %142, 0
  br i1 %143, label %144, label %145

144:                                              ; preds = %141
  store i8 1, ptr %7, align 1
  store i32 1, ptr %12, align 4
  br label %200

145:                                              ; preds = %141
  call void @llvm.lifetime.start.p0(i64 1, ptr %14) #5
  %146 = getelementptr inbounds %struct.Node__, ptr %9, i32 0, i32 0
  %147 = load i32, ptr %146, align 8, !tbaa !15
  %148 = icmp eq i32 %147, 19
  %149 = zext i1 %148 to i32
  %150 = trunc i32 %149 to i8
  store i8 %150, ptr %14, align 1, !tbaa !17
  %151 = load i8, ptr %14, align 1, !tbaa !17
  %152 = icmp ne i8 %151, 0
  br i1 %152, label %153, label %165

153:                                              ; preds = %145
  %154 = getelementptr inbounds %struct.tag_____Tag__, ptr %8, i32 0, i32 0
  %155 = load ptr, ptr %154, align 8, !tbaa !9
  %156 = load ptr, ptr %10, align 8, !tbaa !5
  %157 = getelementptr inbounds %struct.tag_____TypeCheckerContext__, ptr %156, i32 0, i32 4
  %158 = load ptr, ptr %157, align 8, !tbaa !19
  %159 = getelementptr inbounds %struct.tag_____CommonTags__, ptr %158, i32 0, i32 5
  %160 = getelementptr inbounds %struct.tag_____Tag__, ptr %159, i32 0, i32 0
  %161 = load ptr, ptr %160, align 8, !tbaa !21
  %162 = icmp eq ptr %155, %161
  %163 = zext i1 %162 to i32
  %164 = trunc i32 %163 to i8
  store i8 %164, ptr %14, align 1, !tbaa !17
  br label %165

165:                                              ; preds = %153, %145
  %166 = load i8, ptr %14, align 1, !tbaa !17
  %167 = icmp ne i8 %166, 0
  br i1 %167, label %168, label %198

168:                                              ; preds = %165
  call void @llvm.lifetime.start.p0(i64 16, ptr %15) #5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %15, ptr align 8 %9, i64 16, i1 false), !tbaa.struct !23
  %169 = getelementptr inbounds %struct.Node__, ptr %15, i32 0, i32 0
  %170 = load i32, ptr %169, align 8, !tbaa !15
  %171 = icmp eq i32 %170, 19
  br i1 %171, label %175, label %172

172:                                              ; preds = %168
  %173 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @top_____abandonFn__)
  %174 = load ptr, ptr %173, align 8, !tbaa !5
  call void %174(i32 noundef -4)
  br label %175

175:                                              ; preds = %172, %168
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #5
  %176 = getelementptr inbounds %struct.Node__, ptr %15, i32 0, i32 1
  %177 = load ptr, ptr %176, align 8, !tbaa !25
  store ptr %177, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #5
  call void @llvm.memset.p0.i64(ptr align 8 %17, i8 0, i64 8, i1 false)
  %178 = load ptr, ptr %16, align 8, !tbaa !5
  %179 = getelementptr inbounds %struct.tag_____NumberExpression__, ptr %178, i32 0, i32 4
  %180 = load i64, ptr %179, align 8, !tbaa !26
  store i64 %180, ptr %17, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 1, ptr %18) #5
  %181 = load i64, ptr %17, align 8, !tbaa !17
  %182 = icmp sge i64 %181, 0
  %183 = zext i1 %182 to i32
  %184 = trunc i32 %183 to i8
  store i8 %184, ptr %18, align 1, !tbaa !17
  %185 = load i8, ptr %18, align 1, !tbaa !17
  %186 = icmp ne i8 %185, 0
  br i1 %186, label %187, label %196

187:                                              ; preds = %175
  %188 = load ptr, ptr %16, align 8, !tbaa !5
  %189 = getelementptr inbounds %struct.tag_____NumberExpression__, ptr %188, i32 0, i32 4
  %190 = load i64, ptr %189, align 8, !tbaa !26
  %191 = getelementptr inbounds { ptr, ptr }, ptr %5, i32 0, i32 0
  %192 = load ptr, ptr %191, align 8
  %193 = getelementptr inbounds { ptr, ptr }, ptr %5, i32 0, i32 1
  %194 = load ptr, ptr %193, align 8
  %195 = call zeroext i8 @TypeChecker__canFitUnsigned__(i64 noundef %190, ptr %192, ptr %194)
  store i8 %195, ptr %18, align 1, !tbaa !17
  br label %196

196:                                              ; preds = %187, %175
  %197 = load i8, ptr %18, align 1, !tbaa !17
  store i8 %197, ptr %7, align 1
  store i32 1, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %18) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %15) #5
  br label %199

198:                                              ; preds = %165
  store i8 0, ptr %7, align 1
  store i32 1, ptr %12, align 4
  br label %199

199:                                              ; preds = %198, %196
  call void @llvm.lifetime.end.p0(i64 1, ptr %14) #5
  br label %200

200:                                              ; preds = %199, %144
  call void @llvm.lifetime.end.p0(i64 1, ptr %13) #5
  br label %358

201:                                              ; preds = %103
  %202 = getelementptr inbounds %struct.tag_____Tag__, ptr %5, i32 0, i32 0
  %203 = load ptr, ptr %202, align 8, !tbaa !9
  %204 = getelementptr inbounds %struct.tag_____Namespace__, ptr %203, i32 0, i32 3
  %205 = load i32, ptr %204, align 4, !tbaa !11
  %206 = and i32 %205, 1
  %207 = icmp ne i32 %206, 0
  br i1 %207, label %208, label %328

208:                                              ; preds = %201
  %209 = getelementptr inbounds %struct.tag_____Tag__, ptr %8, i32 0, i32 0
  %210 = load ptr, ptr %209, align 8, !tbaa !9
  %211 = getelementptr inbounds %struct.tag_____Namespace__, ptr %210, i32 0, i32 3
  %212 = load i32, ptr %211, align 4, !tbaa !11
  %213 = and i32 %212, 1
  %214 = icmp eq i32 %213, 0
  br i1 %214, label %215, label %216

215:                                              ; preds = %208
  store i8 0, ptr %7, align 1
  br label %358

216:                                              ; preds = %208
  call void @llvm.lifetime.start.p0(i64 1, ptr %19) #5
  %217 = getelementptr inbounds %struct.tag_____Tag__, ptr %8, i32 0, i32 0
  %218 = load ptr, ptr %217, align 8, !tbaa !9
  %219 = getelementptr inbounds %struct.tag_____Namespace__, ptr %218, i32 0, i32 3
  %220 = load i32, ptr %219, align 4, !tbaa !11
  %221 = and i32 %220, 2
  %222 = icmp eq i32 %221, 0
  %223 = zext i1 %222 to i32
  %224 = trunc i32 %223 to i8
  store i8 %224, ptr %19, align 1, !tbaa !17
  %225 = load i8, ptr %19, align 1, !tbaa !17
  %226 = icmp ne i8 %225, 0
  br i1 %226, label %227, label %239

227:                                              ; preds = %216
  %228 = getelementptr inbounds %struct.tag_____Tag__, ptr %5, i32 0, i32 0
  %229 = load ptr, ptr %228, align 8, !tbaa !9
  %230 = getelementptr inbounds %struct.tag_____Namespace__, ptr %229, i32 0, i32 13
  %231 = load i32, ptr %230, align 8, !tbaa !18
  %232 = getelementptr inbounds %struct.tag_____Tag__, ptr %8, i32 0, i32 0
  %233 = load ptr, ptr %232, align 8, !tbaa !9
  %234 = getelementptr inbounds %struct.tag_____Namespace__, ptr %233, i32 0, i32 13
  %235 = load i32, ptr %234, align 8, !tbaa !18
  %236 = icmp sgt i32 %231, %235
  %237 = zext i1 %236 to i32
  %238 = trunc i32 %237 to i8
  store i8 %238, ptr %19, align 1, !tbaa !17
  br label %239

239:                                              ; preds = %227, %216
  %240 = load i8, ptr %19, align 1, !tbaa !17
  %241 = icmp ne i8 %240, 0
  br i1 %241, label %242, label %243

242:                                              ; preds = %239
  store i8 1, ptr %7, align 1
  store i32 1, ptr %12, align 4
  br label %327

243:                                              ; preds = %239
  %244 = getelementptr inbounds %struct.tag_____Tag__, ptr %8, i32 0, i32 0
  %245 = load ptr, ptr %244, align 8, !tbaa !9
  %246 = getelementptr inbounds %struct.tag_____Namespace__, ptr %245, i32 0, i32 3
  %247 = load i32, ptr %246, align 4, !tbaa !11
  %248 = and i32 %247, 2
  %249 = icmp ne i32 %248, 0
  br i1 %249, label %250, label %283

250:                                              ; preds = %243
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #5
  %251 = getelementptr inbounds %struct.tag_____Tag__, ptr %5, i32 0, i32 0
  %252 = load ptr, ptr %251, align 8, !tbaa !9
  %253 = getelementptr inbounds %struct.tag_____Namespace__, ptr %252, i32 0, i32 13
  %254 = load i32, ptr %253, align 8, !tbaa !18
  %255 = icmp eq i32 %254, 6
  br i1 %255, label %256, label %257

256:                                              ; preds = %250
  store i32 4, ptr %20, align 4, !tbaa !24
  br label %262

257:                                              ; preds = %250
  %258 = getelementptr inbounds %struct.tag_____Tag__, ptr %5, i32 0, i32 0
  %259 = load ptr, ptr %258, align 8, !tbaa !9
  %260 = getelementptr inbounds %struct.tag_____Namespace__, ptr %259, i32 0, i32 13
  %261 = load i32, ptr %260, align 8, !tbaa !18
  store i32 %261, ptr %20, align 4, !tbaa !24
  br label %262

262:                                              ; preds = %257, %256
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #5
  %263 = getelementptr inbounds %struct.tag_____Tag__, ptr %8, i32 0, i32 0
  %264 = load ptr, ptr %263, align 8, !tbaa !9
  %265 = getelementptr inbounds %struct.tag_____Namespace__, ptr %264, i32 0, i32 13
  %266 = load i32, ptr %265, align 8, !tbaa !18
  %267 = icmp eq i32 %266, 6
  br i1 %267, label %268, label %269

268:                                              ; preds = %262
  store i32 8, ptr %21, align 4, !tbaa !24
  br label %274

269:                                              ; preds = %262
  %270 = getelementptr inbounds %struct.tag_____Tag__, ptr %8, i32 0, i32 0
  %271 = load ptr, ptr %270, align 8, !tbaa !9
  %272 = getelementptr inbounds %struct.tag_____Namespace__, ptr %271, i32 0, i32 13
  %273 = load i32, ptr %272, align 8, !tbaa !18
  store i32 %273, ptr %21, align 4, !tbaa !24
  br label %274

274:                                              ; preds = %269, %268
  %275 = load i32, ptr %20, align 4, !tbaa !24
  %276 = load i32, ptr %21, align 4, !tbaa !24
  %277 = icmp sgt i32 %275, %276
  br i1 %277, label %278, label %279

278:                                              ; preds = %274
  store i8 1, ptr %7, align 1
  store i32 1, ptr %12, align 4
  br label %280

279:                                              ; preds = %274
  store i32 0, ptr %12, align 4
  br label %280

280:                                              ; preds = %279, %278
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #5
  %281 = load i32, ptr %12, align 4
  switch i32 %281, label %327 [
    i32 0, label %282
  ]

282:                                              ; preds = %280
  br label %283

283:                                              ; preds = %282, %243
  call void @llvm.lifetime.start.p0(i64 1, ptr %22) #5
  %284 = getelementptr inbounds %struct.Node__, ptr %9, i32 0, i32 0
  %285 = load i32, ptr %284, align 8, !tbaa !15
  %286 = icmp eq i32 %285, 19
  %287 = zext i1 %286 to i32
  %288 = trunc i32 %287 to i8
  store i8 %288, ptr %22, align 1, !tbaa !17
  %289 = load i8, ptr %22, align 1, !tbaa !17
  %290 = icmp ne i8 %289, 0
  br i1 %290, label %291, label %303

291:                                              ; preds = %283
  %292 = getelementptr inbounds %struct.tag_____Tag__, ptr %8, i32 0, i32 0
  %293 = load ptr, ptr %292, align 8, !tbaa !9
  %294 = load ptr, ptr %10, align 8, !tbaa !5
  %295 = getelementptr inbounds %struct.tag_____TypeCheckerContext__, ptr %294, i32 0, i32 4
  %296 = load ptr, ptr %295, align 8, !tbaa !19
  %297 = getelementptr inbounds %struct.tag_____CommonTags__, ptr %296, i32 0, i32 5
  %298 = getelementptr inbounds %struct.tag_____Tag__, ptr %297, i32 0, i32 0
  %299 = load ptr, ptr %298, align 8, !tbaa !21
  %300 = icmp eq ptr %293, %299
  %301 = zext i1 %300 to i32
  %302 = trunc i32 %301 to i8
  store i8 %302, ptr %22, align 1, !tbaa !17
  br label %303

303:                                              ; preds = %291, %283
  %304 = load i8, ptr %22, align 1, !tbaa !17
  %305 = icmp ne i8 %304, 0
  br i1 %305, label %306, label %325

306:                                              ; preds = %303
  call void @llvm.lifetime.start.p0(i64 16, ptr %23) #5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %23, ptr align 8 %9, i64 16, i1 false), !tbaa.struct !23
  %307 = getelementptr inbounds %struct.Node__, ptr %23, i32 0, i32 0
  %308 = load i32, ptr %307, align 8, !tbaa !15
  %309 = icmp eq i32 %308, 19
  br i1 %309, label %313, label %310

310:                                              ; preds = %306
  %311 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @top_____abandonFn__)
  %312 = load ptr, ptr %311, align 8, !tbaa !5
  call void %312(i32 noundef -4)
  br label %313

313:                                              ; preds = %310, %306
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #5
  %314 = getelementptr inbounds %struct.Node__, ptr %23, i32 0, i32 1
  %315 = load ptr, ptr %314, align 8, !tbaa !25
  store ptr %315, ptr %24, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #5
  call void @llvm.memset.p0.i64(ptr align 8 %25, i8 0, i64 8, i1 false)
  %316 = load ptr, ptr %24, align 8, !tbaa !5
  %317 = getelementptr inbounds %struct.tag_____NumberExpression__, ptr %316, i32 0, i32 4
  %318 = load i64, ptr %317, align 8, !tbaa !26
  store i64 %318, ptr %25, align 8, !tbaa !17
  %319 = load i64, ptr %25, align 8, !tbaa !17
  %320 = getelementptr inbounds { ptr, ptr }, ptr %5, i32 0, i32 0
  %321 = load ptr, ptr %320, align 8
  %322 = getelementptr inbounds { ptr, ptr }, ptr %5, i32 0, i32 1
  %323 = load ptr, ptr %322, align 8
  %324 = call zeroext i8 @TypeChecker__canFitSigned__(i64 noundef %319, ptr %321, ptr %323)
  store i8 %324, ptr %7, align 1
  store i32 1, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %23) #5
  br label %326

325:                                              ; preds = %303
  store i8 0, ptr %7, align 1
  store i32 1, ptr %12, align 4
  br label %326

326:                                              ; preds = %325, %313
  call void @llvm.lifetime.end.p0(i64 1, ptr %22) #5
  br label %327

327:                                              ; preds = %326, %280, %242
  call void @llvm.lifetime.end.p0(i64 1, ptr %19) #5
  br label %358

328:                                              ; preds = %201
  %329 = getelementptr inbounds %struct.tag_____Tag__, ptr %5, i32 0, i32 0
  %330 = load ptr, ptr %329, align 8, !tbaa !9
  %331 = getelementptr inbounds %struct.tag_____Namespace__, ptr %330, i32 0, i32 8
  %332 = load ptr, ptr %331, align 8, !tbaa !30
  %333 = icmp ne ptr %332, null
  br i1 %333, label %334, label %357

334:                                              ; preds = %328
  call void @llvm.lifetime.start.p0(i64 1, ptr %26) #5
  %335 = getelementptr inbounds %struct.tag_____Tag__, ptr %8, i32 0, i32 0
  %336 = load ptr, ptr %335, align 8, !tbaa !9
  %337 = getelementptr inbounds %struct.tag_____Namespace__, ptr %336, i32 0, i32 3
  %338 = load i32, ptr %337, align 4, !tbaa !11
  %339 = and i32 %338, 204992
  %340 = icmp ne i32 %339, 0
  %341 = zext i1 %340 to i32
  %342 = trunc i32 %341 to i8
  store i8 %342, ptr %26, align 1, !tbaa !17
  %343 = load i8, ptr %26, align 1, !tbaa !17
  %344 = icmp ne i8 %343, 0
  br i1 %344, label %345, label %355

345:                                              ; preds = %334
  %346 = getelementptr inbounds %struct.tag_____Tag__, ptr %5, i32 0, i32 0
  %347 = load ptr, ptr %346, align 8, !tbaa !9
  %348 = getelementptr inbounds %struct.tag_____Namespace__, ptr %347, i32 0, i32 8
  %349 = load ptr, ptr %348, align 8, !tbaa !30
  %350 = getelementptr inbounds { ptr, ptr }, ptr %8, i32 0, i32 0
  %351 = load ptr, ptr %350, align 8
  %352 = getelementptr inbounds { ptr, ptr }, ptr %8, i32 0, i32 1
  %353 = load ptr, ptr %352, align 8
  %354 = call zeroext i8 @Set__contains__Tag____(ptr noundef %349, ptr %351, ptr %353)
  store i8 %354, ptr %26, align 1, !tbaa !17
  br label %355

355:                                              ; preds = %345, %334
  %356 = load i8, ptr %26, align 1, !tbaa !17
  store i8 %356, ptr %7, align 1
  store i32 1, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %26) #5
  br label %358

357:                                              ; preds = %328
  store i8 0, ptr %7, align 1
  br label %358

358:                                              ; preds = %357, %355, %327, %215, %200, %117, %102, %73, %53, %37
  %359 = load i8, ptr %7, align 1
  ret i8 %359
}

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !6, i64 0}
!10 = !{!"tag_____Tag__", !6, i64 0, !6, i64 8}
!11 = !{!12, !14, i64 28}
!12 = !{!"tag_____Namespace__", !13, i64 0, !6, i64 16, !14, i64 24, !14, i64 28, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !14, i64 104}
!13 = !{!"", !6, i64 0, !14, i64 8}
!14 = !{!"int", !7, i64 0}
!15 = !{!16, !14, i64 0}
!16 = !{!"", !14, i64 0, !6, i64 8}
!17 = !{!7, !7, i64 0}
!18 = !{!12, !14, i64 104}
!19 = !{!20, !6, i64 32}
!20 = !{!"tag_____TypeCheckerContext__", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !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, !14, i64 120, !14, i64 124, !6, i64 128, !14, i64 136, !7, i64 140}
!21 = !{!22, !6, i64 80}
!22 = !{!"tag_____CommonTags__", !10, i64 0, !10, i64 16, !10, i64 32, !10, i64 48, !10, i64 64, !10, i64 80, !10, i64 96, !10, i64 112, !10, i64 128, !10, i64 144, !10, i64 160, !10, i64 176, !10, i64 192, !10, i64 208, !10, i64 224, !10, i64 240, !10, i64 256, !10, i64 272, !10, i64 288, !6, i64 304, !6, i64 312, !6, i64 320, !6, i64 328, !6, i64 336, !6, i64 344, !6, i64 352, !6, i64 360, !6, i64 368, !6, i64 376}
!23 = !{i64 0, i64 4, !24, i64 8, i64 8, !5}
!24 = !{!14, !14, i64 0}
!25 = !{!16, !6, i64 8}
!26 = !{!27, !29, i64 40}
!27 = !{!"tag_____NumberExpression__", !6, i64 0, !28, i64 8, !14, i64 16, !10, i64 24, !29, i64 40}
!28 = !{!"tag_____IntRange__", !14, i64 0, !14, i64 4}
!29 = !{!"long", !7, i64 0}
!30 = !{!12, !6, i64 64}


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

%struct.tag_____Tag__ = type { ptr, ptr }

; Function Attrs: nounwind uwtable
declare dso_local zeroext i8 @TypeChecker__canFitUnsigned__(i64 noundef, ptr, ptr) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare dso_local zeroext i8 @TypeChecker__canFitSigned__(i64 noundef, ptr, ptr) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare dso_local zeroext i8 @Set__contains__Tag____(ptr noundef, ptr, ptr) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
define dso_local zeroext i8 @TypeChecker__canCoerce__(ptr nocapture noundef readonly %0, ptr %1, ptr %2, i32 %3, ptr nocapture readonly %4, ptr nocapture noundef readonly byval(%struct.tag_____Tag__) align 8 %5) local_unnamed_addr #0 {
  %7 = load ptr, ptr %5, align 8
  %8 = getelementptr inbounds i8, ptr %7, i64 28
  %9 = load i32, ptr %8, align 4, !tbaa !5
  %10 = and i32 %9, 8
  %.not = icmp eq i32 %10, 0
  br i1 %.not, label %17, label %11

11:                                               ; preds = %6
  %12 = getelementptr inbounds i8, ptr %1, i64 28
  %13 = load i32, ptr %12, align 4, !tbaa !5
  %14 = trunc i32 %13 to i8
  %15 = lshr i8 %14, 3
  %16 = and i8 %15, 1
  br label %.critedge90

17:                                               ; preds = %6
  %18 = and i32 %9, 64
  %.not71 = icmp eq i32 %18, 0
  br i1 %.not71, label %22, label %19

19:                                               ; preds = %17
  %20 = icmp eq i32 %3, 20
  %21 = zext i1 %20 to i8
  br label %.critedge90

22:                                               ; preds = %17
  %23 = and i32 %9, 4
  %.not72 = icmp eq i32 %23, 0
  br i1 %.not72, label %35, label %24

24:                                               ; preds = %22
  %25 = getelementptr inbounds i8, ptr %1, i64 28
  %26 = load i32, ptr %25, align 4, !tbaa !5
  %27 = and i32 %26, 1
  %.not85 = icmp eq i32 %27, 0
  br i1 %.not85, label %28, label %.critedge90

28:                                               ; preds = %24
  %29 = and i32 %26, 4
  %.not86 = icmp eq i32 %29, 0
  br i1 %.not86, label %.thread, label %30

30:                                               ; preds = %28
  %31 = getelementptr inbounds i8, ptr %7, i64 104
  %32 = load i32, ptr %31, align 8, !tbaa !12
  %33 = getelementptr inbounds i8, ptr %1, i64 104
  %34 = load i32, ptr %33, align 8, !tbaa !12
  %.not88 = icmp slt i32 %32, %34
  %cond.fr = freeze i1 %.not88
  br i1 %cond.fr, label %.thread, label %.critedge90

.thread:                                          ; preds = %28, %30
  br label %.critedge90

35:                                               ; preds = %22
  %36 = and i32 %9, 2
  %.not73 = icmp eq i32 %36, 0
  br i1 %.not73, label %63, label %37

37:                                               ; preds = %35
  %38 = getelementptr inbounds i8, ptr %1, i64 28
  %39 = load i32, ptr %38, align 4, !tbaa !5
  %40 = and i32 %39, 1
  %41 = icmp eq i32 %40, 0
  br i1 %41, label %.critedge90, label %42

42:                                               ; preds = %37
  %43 = and i32 %39, 2
  %.not81 = icmp eq i32 %43, 0
  br i1 %.not81, label %.critedge, label %44

44:                                               ; preds = %42
  %45 = getelementptr inbounds i8, ptr %7, i64 104
  %46 = load i32, ptr %45, align 8, !tbaa !12
  %47 = getelementptr inbounds i8, ptr %1, i64 104
  %48 = load i32, ptr %47, align 8, !tbaa !12
  %.not83 = icmp slt i32 %46, %48
  br i1 %.not83, label %.critedge, label %.critedge90

.critedge:                                        ; preds = %42, %44
  %49 = icmp eq i32 %3, 19
  br i1 %49, label %50, label %.critedge90

50:                                               ; preds = %.critedge
  %51 = getelementptr inbounds i8, ptr %0, i64 32
  %52 = load ptr, ptr %51, align 8, !tbaa !13
  %53 = getelementptr inbounds i8, ptr %52, i64 80
  %54 = load ptr, ptr %53, align 8, !tbaa !15
  %.not98 = icmp eq ptr %54, %1
  br i1 %.not98, label %55, label %.critedge90

55:                                               ; preds = %50
  %56 = getelementptr inbounds i8, ptr %4, i64 40
  %57 = load i64, ptr %56, align 8, !tbaa !18
  %58 = icmp sgt i64 %57, -1
  br i1 %58, label %59, label %.critedge90

59:                                               ; preds = %55
  %60 = getelementptr inbounds i8, ptr %5, i64 8
  %61 = load ptr, ptr %60, align 8
  %62 = tail call zeroext i8 @TypeChecker__canFitUnsigned__(i64 noundef %57, ptr nonnull %7, ptr %61)
  br label %.critedge90

63:                                               ; preds = %35
  %64 = and i32 %9, 1
  %.not74 = icmp eq i32 %64, 0
  br i1 %.not74, label %94, label %65

65:                                               ; preds = %63
  %66 = getelementptr inbounds i8, ptr %1, i64 28
  %67 = load i32, ptr %66, align 4, !tbaa !5
  %68 = and i32 %67, 1
  %69 = icmp eq i32 %68, 0
  br i1 %69, label %.critedge90, label %70

70:                                               ; preds = %65
  %71 = and i32 %67, 2
  %72 = icmp eq i32 %71, 0
  %73 = getelementptr inbounds i8, ptr %7, i64 104
  %74 = load i32, ptr %73, align 8, !tbaa !12
  br i1 %72, label %75, label %.critedge92

75:                                               ; preds = %70
  %76 = getelementptr inbounds i8, ptr %1, i64 104
  %77 = load i32, ptr %76, align 8, !tbaa !12
  %.not99 = icmp sgt i32 %74, %77
  br i1 %.not99, label %.critedge90, label %.critedge92.thread

.critedge92:                                      ; preds = %70
  %78 = icmp eq i32 %74, 6
  %.93 = select i1 %78, i32 4, i32 %74
  %79 = getelementptr inbounds i8, ptr %1, i64 104
  %80 = load i32, ptr %79, align 8, !tbaa !12
  %81 = icmp eq i32 %80, 6
  %.055 = select i1 %81, i32 8, i32 %80
  %.not79 = icmp sgt i32 %.93, %.055
  br i1 %.not79, label %.critedge90, label %.critedge92.thread

.critedge92.thread:                               ; preds = %75, %.critedge92
  %82 = icmp eq i32 %3, 19
  br i1 %82, label %83, label %.critedge90

83:                                               ; preds = %.critedge92.thread
  %84 = getelementptr inbounds i8, ptr %0, i64 32
  %85 = load ptr, ptr %84, align 8, !tbaa !13
  %86 = getelementptr inbounds i8, ptr %85, i64 80
  %87 = load ptr, ptr %86, align 8, !tbaa !15
  %.not100 = icmp eq ptr %87, %1
  br i1 %.not100, label %88, label %.critedge90

88:                                               ; preds = %83
  %89 = getelementptr inbounds i8, ptr %4, i64 40
  %90 = load i64, ptr %89, align 8, !tbaa !18
  %91 = getelementptr inbounds i8, ptr %5, i64 8
  %92 = load ptr, ptr %91, align 8
  %93 = tail call zeroext i8 @TypeChecker__canFitSigned__(i64 noundef %90, ptr nonnull %7, ptr %92)
  br label %.critedge90

94:                                               ; preds = %63
  %95 = getelementptr inbounds i8, ptr %7, i64 64
  %96 = load ptr, ptr %95, align 8, !tbaa !22
  %.not75 = icmp eq ptr %96, null
  br i1 %.not75, label %.critedge90, label %97

97:                                               ; preds = %94
  %98 = getelementptr inbounds i8, ptr %1, i64 28
  %99 = load i32, ptr %98, align 4, !tbaa !5
  %100 = and i32 %99, 204992
  %.not76 = icmp eq i32 %100, 0
  br i1 %.not76, label %.critedge90, label %101

101:                                              ; preds = %97
  %102 = tail call zeroext i8 @Set__contains__Tag____(ptr noundef nonnull %96, ptr nonnull %1, ptr %2)
  br label %.critedge90

.critedge90:                                      ; preds = %.thread, %30, %94, %97, %101, %.critedge92, %75, %83, %.critedge92.thread, %88, %65, %44, %50, %.critedge, %55, %59, %37, %24, %19, %11
  %.6 = phi i8 [ %16, %11 ], [ %21, %19 ], [ 1, %24 ], [ 0, %37 ], [ 1, %44 ], [ %62, %59 ], [ 0, %55 ], [ 0, %.critedge ], [ 0, %50 ], [ 0, %65 ], [ 1, %.critedge92 ], [ 1, %75 ], [ %93, %88 ], [ 0, %.critedge92.thread ], [ 0, %83 ], [ %102, %101 ], [ 0, %97 ], [ 0, %94 ], [ 0, %.thread ], [ 1, %30 ]
  ret i8 %.6
}

attributes #0 = { 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" }

!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, !11, i64 28}
!6 = !{!"tag_____Namespace__", !7, i64 0, !8, i64 16, !11, i64 24, !11, i64 28, !8, i64 32, !8, i64 40, !8, i64 48, !8, i64 56, !8, i64 64, !8, i64 72, !8, i64 80, !8, i64 88, !8, i64 96, !11, i64 104}
!7 = !{!"", !8, i64 0, !11, i64 8}
!8 = !{!"any pointer", !9, i64 0}
!9 = !{!"omnipotent char", !10, i64 0}
!10 = !{!"Simple C/C++ TBAA"}
!11 = !{!"int", !9, i64 0}
!12 = !{!6, !11, i64 104}
!13 = !{!14, !8, i64 32}
!14 = !{!"tag_____TypeCheckerContext__", !8, i64 0, !8, i64 8, !8, i64 16, !8, i64 24, !8, i64 32, !8, i64 40, !8, i64 48, !8, i64 56, !8, i64 64, !8, i64 72, !8, i64 80, !8, i64 88, !8, i64 96, !8, i64 104, !8, i64 112, !11, i64 120, !11, i64 124, !8, i64 128, !11, i64 136, !9, i64 140}
!15 = !{!16, !8, i64 80}
!16 = !{!"tag_____CommonTags__", !17, i64 0, !17, i64 16, !17, i64 32, !17, i64 48, !17, i64 64, !17, i64 80, !17, i64 96, !17, i64 112, !17, i64 128, !17, i64 144, !17, i64 160, !17, i64 176, !17, i64 192, !17, i64 208, !17, i64 224, !17, i64 240, !17, i64 256, !17, i64 272, !17, i64 288, !8, i64 304, !8, i64 312, !8, i64 320, !8, i64 328, !8, i64 336, !8, i64 344, !8, i64 352, !8, i64 360, !8, i64 368, !8, i64 376}
!17 = !{!"tag_____Tag__", !8, i64 0, !8, i64 8}
!18 = !{!19, !21, i64 40}
!19 = !{!"tag_____NumberExpression__", !8, i64 0, !20, i64 8, !11, i64 16, !17, i64 24, !21, i64 40}
!20 = !{!"tag_____IntRange__", !11, i64 0, !11, i64 4}
!21 = !{!"long", !9, i64 0}
!22 = !{!6, !8, i64 64}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,PostOrderFunctionAttrsPass,SROAPass,SimplifyCFGPass,TailCallElimPass