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

; 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.3 = type { i64 }
%union.anon.4 = type { i64 }
%union.anon.5 = type { i64 }
%union.anon.6 = 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_____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
define dso_local { ptr, ptr } @TypeChecker__tryUnifyIntvals__(ptr noundef %0, ptr %1, ptr %2, i32 %3, ptr %4, ptr noundef byval(%struct.tag_____Tag__) align 8 %5, ptr noundef byval(%struct.Node__) align 8 %6) #4 {
  %8 = alloca %struct.tag_____Tag__, align 8
  %9 = alloca %struct.tag_____Tag__, align 8
  %10 = alloca %struct.Node__, align 8
  %11 = alloca ptr, align 8
  %12 = alloca i8, align 1
  %13 = alloca i32, align 4
  %14 = alloca i8, align 1
  %15 = alloca %union.anon.3, align 8
  %16 = alloca %struct.Node__, align 8
  %17 = alloca i8, align 1
  %18 = alloca %struct.Node__, align 8
  %19 = alloca %union.anon.4, align 8
  %20 = alloca %struct.Node__, align 8
  %21 = alloca i8, align 1
  %22 = alloca %union.anon.5, align 8
  %23 = alloca %struct.Node__, align 8
  %24 = alloca i8, align 1
  %25 = alloca %struct.Node__, align 8
  %26 = alloca %union.anon.6, align 8
  %27 = alloca %struct.Node__, align 8
  %28 = getelementptr inbounds { ptr, ptr }, ptr %9, i32 0, i32 0
  store ptr %1, ptr %28, align 8
  %29 = getelementptr inbounds { ptr, ptr }, ptr %9, i32 0, i32 1
  store ptr %2, ptr %29, align 8
  %30 = getelementptr inbounds { i32, ptr }, ptr %10, i32 0, i32 0
  store i32 %3, ptr %30, align 8
  %31 = getelementptr inbounds { i32, ptr }, ptr %10, i32 0, i32 1
  store ptr %4, ptr %31, align 8
  store ptr %0, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %12) #5
  %32 = getelementptr inbounds %struct.tag_____Tag__, ptr %9, i32 0, i32 0
  %33 = load ptr, ptr %32, align 8, !tbaa !9
  %34 = getelementptr inbounds %struct.tag_____Namespace__, ptr %33, i32 0, i32 3
  %35 = load i32, ptr %34, align 4, !tbaa !11
  %36 = and i32 %35, 1
  %37 = icmp eq i32 %36, 0
  %38 = zext i1 %37 to i32
  %39 = trunc i32 %38 to i8
  store i8 %39, ptr %12, align 1, !tbaa !15
  %40 = load i8, ptr %12, align 1, !tbaa !15
  %41 = icmp ne i8 %40, 0
  br i1 %41, label %51, label %42

42:                                               ; preds = %7
  %43 = getelementptr inbounds %struct.tag_____Tag__, ptr %5, i32 0, i32 0
  %44 = load ptr, ptr %43, align 8, !tbaa !9
  %45 = getelementptr inbounds %struct.tag_____Namespace__, ptr %44, i32 0, i32 3
  %46 = load i32, ptr %45, align 4, !tbaa !11
  %47 = and i32 %46, 1
  %48 = icmp eq i32 %47, 0
  %49 = zext i1 %48 to i32
  %50 = trunc i32 %49 to i8
  store i8 %50, ptr %12, align 1, !tbaa !15
  br label %51

51:                                               ; preds = %42, %7
  %52 = load i8, ptr %12, align 1, !tbaa !15
  %53 = icmp ne i8 %52, 0
  br i1 %53, label %54, label %55

54:                                               ; preds = %51
  call void @llvm.memset.p0.i64(ptr align 8 %8, i8 0, i64 16, i1 false)
  store i32 1, ptr %13, align 4
  br label %431

55:                                               ; preds = %51
  %56 = getelementptr inbounds %struct.tag_____Tag__, ptr %9, i32 0, i32 0
  %57 = load ptr, ptr %56, align 8, !tbaa !9
  %58 = getelementptr inbounds %struct.tag_____Namespace__, ptr %57, i32 0, i32 3
  %59 = load i32, ptr %58, align 4, !tbaa !11
  %60 = and i32 %59, 2
  %61 = icmp ne i32 %60, 0
  br i1 %61, label %62, label %149

62:                                               ; preds = %55
  %63 = getelementptr inbounds %struct.tag_____Tag__, ptr %5, i32 0, i32 0
  %64 = load ptr, ptr %63, align 8, !tbaa !9
  %65 = getelementptr inbounds %struct.tag_____Namespace__, ptr %64, i32 0, i32 3
  %66 = load i32, ptr %65, align 4, !tbaa !11
  %67 = and i32 %66, 2
  %68 = icmp ne i32 %67, 0
  br i1 %68, label %69, label %101

69:                                               ; preds = %62
  %70 = getelementptr inbounds %struct.tag_____Tag__, ptr %9, i32 0, i32 0
  %71 = load ptr, ptr %70, align 8, !tbaa !9
  %72 = getelementptr inbounds %struct.tag_____Namespace__, ptr %71, i32 0, i32 13
  %73 = load i32, ptr %72, align 8, !tbaa !16
  %74 = getelementptr inbounds %struct.tag_____Tag__, ptr %5, i32 0, i32 0
  %75 = load ptr, ptr %74, align 8, !tbaa !9
  %76 = getelementptr inbounds %struct.tag_____Namespace__, ptr %75, i32 0, i32 13
  %77 = load i32, ptr %76, align 8, !tbaa !16
  %78 = icmp sge i32 %73, %77
  br i1 %78, label %79, label %90

79:                                               ; preds = %69
  %80 = getelementptr inbounds %struct.tag_____Tag__, ptr %9, i32 0, i32 0
  %81 = load ptr, ptr %80, align 8, !tbaa !9
  %82 = getelementptr inbounds %struct.tag_____Namespace__, ptr %81, i32 0, i32 13
  %83 = load i32, ptr %82, align 8, !tbaa !16
  %84 = icmp sge i32 %83, 4
  br i1 %84, label %85, label %86

85:                                               ; preds = %79
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %8, ptr align 8 %9, i64 16, i1 false), !tbaa.struct !17
  br label %89

86:                                               ; preds = %79
  %87 = load ptr, ptr %11, align 8, !tbaa !5
  %88 = getelementptr inbounds %struct.tag_____CommonTags__, ptr %87, i32 0, i32 5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %8, ptr align 8 %88, i64 16, i1 false), !tbaa.struct !17
  br label %89

89:                                               ; preds = %86, %85
  store i32 1, ptr %13, align 4
  br label %431

90:                                               ; preds = %69
  %91 = getelementptr inbounds %struct.tag_____Tag__, ptr %5, i32 0, i32 0
  %92 = load ptr, ptr %91, align 8, !tbaa !9
  %93 = getelementptr inbounds %struct.tag_____Namespace__, ptr %92, i32 0, i32 13
  %94 = load i32, ptr %93, align 8, !tbaa !16
  %95 = icmp sge i32 %94, 4
  br i1 %95, label %96, label %97

96:                                               ; preds = %90
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %8, ptr align 8 %5, i64 16, i1 false), !tbaa.struct !17
  br label %100

97:                                               ; preds = %90
  %98 = load ptr, ptr %11, align 8, !tbaa !5
  %99 = getelementptr inbounds %struct.tag_____CommonTags__, ptr %98, i32 0, i32 5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %8, ptr align 8 %99, i64 16, i1 false), !tbaa.struct !17
  br label %100

100:                                              ; preds = %97, %96
  store i32 1, ptr %13, align 4
  br label %431

101:                                              ; preds = %62
  %102 = getelementptr inbounds %struct.tag_____Tag__, ptr %5, i32 0, i32 0
  %103 = load ptr, ptr %102, align 8, !tbaa !9
  %104 = getelementptr inbounds %struct.tag_____Namespace__, ptr %103, i32 0, i32 13
  %105 = load i32, ptr %104, align 8, !tbaa !16
  %106 = icmp eq i32 %105, 6
  br i1 %106, label %107, label %115

107:                                              ; preds = %101
  %108 = getelementptr inbounds %struct.tag_____Tag__, ptr %9, i32 0, i32 0
  %109 = load ptr, ptr %108, align 8, !tbaa !9
  %110 = getelementptr inbounds %struct.tag_____Namespace__, ptr %109, i32 0, i32 13
  %111 = load i32, ptr %110, align 8, !tbaa !16
  %112 = icmp slt i32 %111, 4
  br i1 %112, label %113, label %114

113:                                              ; preds = %107
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %8, ptr align 8 %5, i64 16, i1 false), !tbaa.struct !17
  store i32 1, ptr %13, align 4
  br label %431

114:                                              ; preds = %107
  br label %147

115:                                              ; preds = %101
  %116 = getelementptr inbounds %struct.tag_____Tag__, ptr %9, i32 0, i32 0
  %117 = load ptr, ptr %116, align 8, !tbaa !9
  %118 = getelementptr inbounds %struct.tag_____Namespace__, ptr %117, i32 0, i32 13
  %119 = load i32, ptr %118, align 8, !tbaa !16
  %120 = getelementptr inbounds %struct.tag_____Tag__, ptr %5, i32 0, i32 0
  %121 = load ptr, ptr %120, align 8, !tbaa !9
  %122 = getelementptr inbounds %struct.tag_____Namespace__, ptr %121, i32 0, i32 13
  %123 = load i32, ptr %122, align 8, !tbaa !16
  %124 = icmp slt i32 %119, %123
  br i1 %124, label %125, label %136

125:                                              ; preds = %115
  %126 = getelementptr inbounds %struct.tag_____Tag__, ptr %5, i32 0, i32 0
  %127 = load ptr, ptr %126, align 8, !tbaa !9
  %128 = getelementptr inbounds %struct.tag_____Namespace__, ptr %127, i32 0, i32 13
  %129 = load i32, ptr %128, align 8, !tbaa !16
  %130 = icmp sge i32 %129, 4
  br i1 %130, label %131, label %132

131:                                              ; preds = %125
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %8, ptr align 8 %5, i64 16, i1 false), !tbaa.struct !17
  br label %135

132:                                              ; preds = %125
  %133 = load ptr, ptr %11, align 8, !tbaa !5
  %134 = getelementptr inbounds %struct.tag_____CommonTags__, ptr %133, i32 0, i32 5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %8, ptr align 8 %134, i64 16, i1 false), !tbaa.struct !17
  br label %135

135:                                              ; preds = %132, %131
  store i32 1, ptr %13, align 4
  br label %431

136:                                              ; preds = %115
  %137 = getelementptr inbounds %struct.tag_____Tag__, ptr %9, i32 0, i32 0
  %138 = load ptr, ptr %137, align 8, !tbaa !9
  %139 = getelementptr inbounds %struct.tag_____Namespace__, ptr %138, i32 0, i32 13
  %140 = load i32, ptr %139, align 8, !tbaa !16
  %141 = icmp slt i32 %140, 4
  br i1 %141, label %142, label %145

142:                                              ; preds = %136
  %143 = load ptr, ptr %11, align 8, !tbaa !5
  %144 = getelementptr inbounds %struct.tag_____CommonTags__, ptr %143, i32 0, i32 5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %8, ptr align 8 %144, i64 16, i1 false), !tbaa.struct !17
  store i32 1, ptr %13, align 4
  br label %431

145:                                              ; preds = %136
  br label %146

146:                                              ; preds = %145
  br label %147

147:                                              ; preds = %146, %114
  br label %148

148:                                              ; preds = %147
  br label %236

149:                                              ; preds = %55
  %150 = getelementptr inbounds %struct.tag_____Tag__, ptr %5, i32 0, i32 0
  %151 = load ptr, ptr %150, align 8, !tbaa !9
  %152 = getelementptr inbounds %struct.tag_____Namespace__, ptr %151, i32 0, i32 3
  %153 = load i32, ptr %152, align 4, !tbaa !11
  %154 = and i32 %153, 2
  %155 = icmp ne i32 %154, 0
  br i1 %155, label %156, label %203

156:                                              ; preds = %149
  %157 = getelementptr inbounds %struct.tag_____Tag__, ptr %9, i32 0, i32 0
  %158 = load ptr, ptr %157, align 8, !tbaa !9
  %159 = getelementptr inbounds %struct.tag_____Namespace__, ptr %158, i32 0, i32 13
  %160 = load i32, ptr %159, align 8, !tbaa !16
  %161 = icmp eq i32 %160, 6
  br i1 %161, label %162, label %170

162:                                              ; preds = %156
  %163 = getelementptr inbounds %struct.tag_____Tag__, ptr %5, i32 0, i32 0
  %164 = load ptr, ptr %163, align 8, !tbaa !9
  %165 = getelementptr inbounds %struct.tag_____Namespace__, ptr %164, i32 0, i32 13
  %166 = load i32, ptr %165, align 8, !tbaa !16
  %167 = icmp slt i32 %166, 4
  br i1 %167, label %168, label %169

168:                                              ; preds = %162
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %8, ptr align 8 %9, i64 16, i1 false), !tbaa.struct !17
  store i32 1, ptr %13, align 4
  br label %431

169:                                              ; preds = %162
  br label %202

170:                                              ; preds = %156
  %171 = getelementptr inbounds %struct.tag_____Tag__, ptr %5, i32 0, i32 0
  %172 = load ptr, ptr %171, align 8, !tbaa !9
  %173 = getelementptr inbounds %struct.tag_____Namespace__, ptr %172, i32 0, i32 13
  %174 = load i32, ptr %173, align 8, !tbaa !16
  %175 = getelementptr inbounds %struct.tag_____Tag__, ptr %9, i32 0, i32 0
  %176 = load ptr, ptr %175, align 8, !tbaa !9
  %177 = getelementptr inbounds %struct.tag_____Namespace__, ptr %176, i32 0, i32 13
  %178 = load i32, ptr %177, align 8, !tbaa !16
  %179 = icmp slt i32 %174, %178
  br i1 %179, label %180, label %191

180:                                              ; preds = %170
  %181 = getelementptr inbounds %struct.tag_____Tag__, ptr %9, i32 0, i32 0
  %182 = load ptr, ptr %181, align 8, !tbaa !9
  %183 = getelementptr inbounds %struct.tag_____Namespace__, ptr %182, i32 0, i32 13
  %184 = load i32, ptr %183, align 8, !tbaa !16
  %185 = icmp sge i32 %184, 4
  br i1 %185, label %186, label %187

186:                                              ; preds = %180
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %8, ptr align 8 %9, i64 16, i1 false), !tbaa.struct !17
  br label %190

187:                                              ; preds = %180
  %188 = load ptr, ptr %11, align 8, !tbaa !5
  %189 = getelementptr inbounds %struct.tag_____CommonTags__, ptr %188, i32 0, i32 5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %8, ptr align 8 %189, i64 16, i1 false), !tbaa.struct !17
  br label %190

190:                                              ; preds = %187, %186
  store i32 1, ptr %13, align 4
  br label %431

191:                                              ; preds = %170
  %192 = getelementptr inbounds %struct.tag_____Tag__, ptr %5, i32 0, i32 0
  %193 = load ptr, ptr %192, align 8, !tbaa !9
  %194 = getelementptr inbounds %struct.tag_____Namespace__, ptr %193, i32 0, i32 13
  %195 = load i32, ptr %194, align 8, !tbaa !16
  %196 = icmp slt i32 %195, 4
  br i1 %196, label %197, label %200

197:                                              ; preds = %191
  %198 = load ptr, ptr %11, align 8, !tbaa !5
  %199 = getelementptr inbounds %struct.tag_____CommonTags__, ptr %198, i32 0, i32 5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %8, ptr align 8 %199, i64 16, i1 false), !tbaa.struct !17
  store i32 1, ptr %13, align 4
  br label %431

200:                                              ; preds = %191
  br label %201

201:                                              ; preds = %200
  br label %202

202:                                              ; preds = %201, %169
  br label %235

203:                                              ; preds = %149
  %204 = getelementptr inbounds %struct.tag_____Tag__, ptr %9, i32 0, i32 0
  %205 = load ptr, ptr %204, align 8, !tbaa !9
  %206 = getelementptr inbounds %struct.tag_____Namespace__, ptr %205, i32 0, i32 13
  %207 = load i32, ptr %206, align 8, !tbaa !16
  %208 = getelementptr inbounds %struct.tag_____Tag__, ptr %5, i32 0, i32 0
  %209 = load ptr, ptr %208, align 8, !tbaa !9
  %210 = getelementptr inbounds %struct.tag_____Namespace__, ptr %209, i32 0, i32 13
  %211 = load i32, ptr %210, align 8, !tbaa !16
  %212 = icmp sge i32 %207, %211
  br i1 %212, label %213, label %224

213:                                              ; preds = %203
  %214 = getelementptr inbounds %struct.tag_____Tag__, ptr %9, i32 0, i32 0
  %215 = load ptr, ptr %214, align 8, !tbaa !9
  %216 = getelementptr inbounds %struct.tag_____Namespace__, ptr %215, i32 0, i32 13
  %217 = load i32, ptr %216, align 8, !tbaa !16
  %218 = icmp sge i32 %217, 4
  br i1 %218, label %219, label %220

219:                                              ; preds = %213
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %8, ptr align 8 %9, i64 16, i1 false), !tbaa.struct !17
  br label %223

220:                                              ; preds = %213
  %221 = load ptr, ptr %11, align 8, !tbaa !5
  %222 = getelementptr inbounds %struct.tag_____CommonTags__, ptr %221, i32 0, i32 5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %8, ptr align 8 %222, i64 16, i1 false), !tbaa.struct !17
  br label %223

223:                                              ; preds = %220, %219
  store i32 1, ptr %13, align 4
  br label %431

224:                                              ; preds = %203
  %225 = getelementptr inbounds %struct.tag_____Tag__, ptr %5, i32 0, i32 0
  %226 = load ptr, ptr %225, align 8, !tbaa !9
  %227 = getelementptr inbounds %struct.tag_____Namespace__, ptr %226, i32 0, i32 13
  %228 = load i32, ptr %227, align 8, !tbaa !16
  %229 = icmp sge i32 %228, 4
  br i1 %229, label %230, label %231

230:                                              ; preds = %224
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %8, ptr align 8 %5, i64 16, i1 false), !tbaa.struct !17
  br label %234

231:                                              ; preds = %224
  %232 = load ptr, ptr %11, align 8, !tbaa !5
  %233 = getelementptr inbounds %struct.tag_____CommonTags__, ptr %232, i32 0, i32 5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %8, ptr align 8 %233, i64 16, i1 false), !tbaa.struct !17
  br label %234

234:                                              ; preds = %231, %230
  store i32 1, ptr %13, align 4
  br label %431

235:                                              ; preds = %202
  br label %236

236:                                              ; preds = %235, %148
  call void @llvm.lifetime.start.p0(i64 1, ptr %14) #5
  %237 = getelementptr inbounds %struct.tag_____Tag__, ptr %5, i32 0, i32 0
  %238 = load ptr, ptr %237, align 8, !tbaa !9
  %239 = load ptr, ptr %11, align 8, !tbaa !5
  %240 = getelementptr inbounds %struct.tag_____CommonTags__, ptr %239, i32 0, i32 5
  %241 = getelementptr inbounds %struct.tag_____Tag__, ptr %240, i32 0, i32 0
  %242 = load ptr, ptr %241, align 8, !tbaa !18
  %243 = icmp eq ptr %238, %242
  %244 = zext i1 %243 to i32
  %245 = trunc i32 %244 to i8
  store i8 %245, ptr %14, align 1, !tbaa !15
  %246 = load i8, ptr %14, align 1, !tbaa !15
  %247 = icmp ne i8 %246, 0
  br i1 %247, label %248, label %254

248:                                              ; preds = %236
  %249 = getelementptr inbounds %struct.Node__, ptr %6, i32 0, i32 0
  %250 = load i32, ptr %249, align 8, !tbaa !20
  %251 = icmp eq i32 %250, 19
  %252 = zext i1 %251 to i32
  %253 = trunc i32 %252 to i8
  store i8 %253, ptr %14, align 1, !tbaa !15
  br label %254

254:                                              ; preds = %248, %236
  %255 = load i8, ptr %14, align 1, !tbaa !15
  %256 = icmp ne i8 %255, 0
  br i1 %256, label %257, label %332

257:                                              ; preds = %254
  %258 = getelementptr inbounds %struct.tag_____Tag__, ptr %9, i32 0, i32 0
  %259 = load ptr, ptr %258, align 8, !tbaa !9
  %260 = getelementptr inbounds %struct.tag_____Namespace__, ptr %259, i32 0, i32 3
  %261 = load i32, ptr %260, align 4, !tbaa !11
  %262 = and i32 %261, 2
  %263 = icmp ne i32 %262, 0
  br i1 %263, label %264, label %307

264:                                              ; preds = %257
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #5
  call void @llvm.memset.p0.i64(ptr align 8 %15, i8 0, i64 8, i1 false)
  call void @llvm.lifetime.start.p0(i64 16, ptr %16) #5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %16, ptr align 8 %6, i64 16, i1 false), !tbaa.struct !22
  %265 = getelementptr inbounds %struct.Node__, ptr %16, i32 0, i32 0
  %266 = load i32, ptr %265, align 8, !tbaa !20
  %267 = icmp eq i32 %266, 19
  br i1 %267, label %271, label %268

268:                                              ; preds = %264
  %269 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @top_____abandonFn__)
  %270 = load ptr, ptr %269, align 8, !tbaa !5
  call void %270(i32 noundef -4)
  br label %271

271:                                              ; preds = %268, %264
  %272 = getelementptr inbounds %struct.Node__, ptr %16, i32 0, i32 1
  %273 = load ptr, ptr %272, align 8, !tbaa !24
  %274 = getelementptr inbounds %struct.tag_____NumberExpression__, ptr %273, i32 0, i32 4
  %275 = load i64, ptr %274, align 8, !tbaa !25
  store i64 %275, ptr %15, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 1, ptr %17) #5
  %276 = load i64, ptr %15, align 8, !tbaa !15
  %277 = icmp sge i64 %276, 0
  %278 = zext i1 %277 to i32
  %279 = trunc i32 %278 to i8
  store i8 %279, ptr %17, align 1, !tbaa !15
  %280 = load i8, ptr %17, align 1, !tbaa !15
  %281 = icmp ne i8 %280, 0
  br i1 %281, label %282, label %299

282:                                              ; preds = %271
  call void @llvm.lifetime.start.p0(i64 16, ptr %18) #5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %18, ptr align 8 %6, i64 16, i1 false), !tbaa.struct !22
  %283 = getelementptr inbounds %struct.Node__, ptr %18, i32 0, i32 0
  %284 = load i32, ptr %283, align 8, !tbaa !20
  %285 = icmp eq i32 %284, 19
  br i1 %285, label %289, label %286

286:                                              ; preds = %282
  %287 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @top_____abandonFn__)
  %288 = load ptr, ptr %287, align 8, !tbaa !5
  call void %288(i32 noundef -4)
  br label %289

289:                                              ; preds = %286, %282
  %290 = getelementptr inbounds %struct.Node__, ptr %18, i32 0, i32 1
  %291 = load ptr, ptr %290, align 8, !tbaa !24
  %292 = getelementptr inbounds %struct.tag_____NumberExpression__, ptr %291, i32 0, i32 4
  %293 = load i64, ptr %292, align 8, !tbaa !25
  %294 = getelementptr inbounds { ptr, ptr }, ptr %9, i32 0, i32 0
  %295 = load ptr, ptr %294, align 8
  %296 = getelementptr inbounds { ptr, ptr }, ptr %9, i32 0, i32 1
  %297 = load ptr, ptr %296, align 8
  %298 = call zeroext i8 @TypeChecker__canFitUnsigned__(i64 noundef %293, ptr %295, ptr %297)
  store i8 %298, ptr %17, align 1, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 16, ptr %18) #5
  br label %299

299:                                              ; preds = %289, %271
  %300 = load i8, ptr %17, align 1, !tbaa !15
  %301 = icmp ne i8 %300, 0
  br i1 %301, label %302, label %303

302:                                              ; preds = %299
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %8, ptr align 8 %9, i64 16, i1 false), !tbaa.struct !17
  store i32 1, ptr %13, align 4
  br label %304

303:                                              ; preds = %299
  store i32 0, ptr %13, align 4
  br label %304

304:                                              ; preds = %303, %302
  call void @llvm.lifetime.end.p0(i64 1, ptr %17) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #5
  %305 = load i32, ptr %13, align 4
  switch i32 %305, label %430 [
    i32 0, label %306
  ]

306:                                              ; preds = %304
  br label %331

307:                                              ; preds = %257
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #5
  call void @llvm.memset.p0.i64(ptr align 8 %19, i8 0, i64 8, i1 false)
  call void @llvm.lifetime.start.p0(i64 16, ptr %20) #5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %20, ptr align 8 %6, i64 16, i1 false), !tbaa.struct !22
  %308 = getelementptr inbounds %struct.Node__, ptr %20, i32 0, i32 0
  %309 = load i32, ptr %308, align 8, !tbaa !20
  %310 = icmp eq i32 %309, 19
  br i1 %310, label %314, label %311

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

314:                                              ; preds = %311, %307
  %315 = getelementptr inbounds %struct.Node__, ptr %20, i32 0, i32 1
  %316 = load ptr, ptr %315, align 8, !tbaa !24
  %317 = getelementptr inbounds %struct.tag_____NumberExpression__, ptr %316, i32 0, i32 4
  %318 = load i64, ptr %317, align 8, !tbaa !25
  store i64 %318, ptr %19, align 8, !tbaa !15
  %319 = load i64, ptr %19, align 8, !tbaa !15
  %320 = getelementptr inbounds { ptr, ptr }, ptr %9, i32 0, i32 0
  %321 = load ptr, ptr %320, align 8
  %322 = getelementptr inbounds { ptr, ptr }, ptr %9, i32 0, i32 1
  %323 = load ptr, ptr %322, align 8
  %324 = call zeroext i8 @TypeChecker__canFitSigned__(i64 noundef %319, ptr %321, ptr %323)
  %325 = icmp ne i8 %324, 0
  br i1 %325, label %326, label %327

326:                                              ; preds = %314
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %8, ptr align 8 %9, i64 16, i1 false), !tbaa.struct !17
  store i32 1, ptr %13, align 4
  br label %328

327:                                              ; preds = %314
  store i32 0, ptr %13, align 4
  br label %328

328:                                              ; preds = %327, %326
  call void @llvm.lifetime.end.p0(i64 16, ptr %20) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #5
  %329 = load i32, ptr %13, align 4
  switch i32 %329, label %430 [
    i32 0, label %330
  ]

330:                                              ; preds = %328
  br label %331

331:                                              ; preds = %330, %306
  br label %332

332:                                              ; preds = %331, %254
  call void @llvm.lifetime.start.p0(i64 1, ptr %21) #5
  %333 = getelementptr inbounds %struct.tag_____Tag__, ptr %9, i32 0, i32 0
  %334 = load ptr, ptr %333, align 8, !tbaa !9
  %335 = load ptr, ptr %11, align 8, !tbaa !5
  %336 = getelementptr inbounds %struct.tag_____CommonTags__, ptr %335, i32 0, i32 5
  %337 = getelementptr inbounds %struct.tag_____Tag__, ptr %336, i32 0, i32 0
  %338 = load ptr, ptr %337, align 8, !tbaa !18
  %339 = icmp eq ptr %334, %338
  %340 = zext i1 %339 to i32
  %341 = trunc i32 %340 to i8
  store i8 %341, ptr %21, align 1, !tbaa !15
  %342 = load i8, ptr %21, align 1, !tbaa !15
  %343 = icmp ne i8 %342, 0
  br i1 %343, label %344, label %350

344:                                              ; preds = %332
  %345 = getelementptr inbounds %struct.Node__, ptr %10, i32 0, i32 0
  %346 = load i32, ptr %345, align 8, !tbaa !20
  %347 = icmp eq i32 %346, 19
  %348 = zext i1 %347 to i32
  %349 = trunc i32 %348 to i8
  store i8 %349, ptr %21, align 1, !tbaa !15
  br label %350

350:                                              ; preds = %344, %332
  %351 = load i8, ptr %21, align 1, !tbaa !15
  %352 = icmp ne i8 %351, 0
  br i1 %352, label %353, label %428

353:                                              ; preds = %350
  %354 = getelementptr inbounds %struct.tag_____Tag__, ptr %5, i32 0, i32 0
  %355 = load ptr, ptr %354, align 8, !tbaa !9
  %356 = getelementptr inbounds %struct.tag_____Namespace__, ptr %355, i32 0, i32 3
  %357 = load i32, ptr %356, align 4, !tbaa !11
  %358 = and i32 %357, 2
  %359 = icmp ne i32 %358, 0
  br i1 %359, label %360, label %403

360:                                              ; preds = %353
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #5
  call void @llvm.memset.p0.i64(ptr align 8 %22, i8 0, i64 8, i1 false)
  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 %10, i64 16, i1 false), !tbaa.struct !22
  %361 = getelementptr inbounds %struct.Node__, ptr %23, i32 0, i32 0
  %362 = load i32, ptr %361, align 8, !tbaa !20
  %363 = icmp eq i32 %362, 19
  br i1 %363, label %367, label %364

364:                                              ; preds = %360
  %365 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @top_____abandonFn__)
  %366 = load ptr, ptr %365, align 8, !tbaa !5
  call void %366(i32 noundef -4)
  br label %367

367:                                              ; preds = %364, %360
  %368 = getelementptr inbounds %struct.Node__, ptr %23, i32 0, i32 1
  %369 = load ptr, ptr %368, align 8, !tbaa !24
  %370 = getelementptr inbounds %struct.tag_____NumberExpression__, ptr %369, i32 0, i32 4
  %371 = load i64, ptr %370, align 8, !tbaa !25
  store i64 %371, ptr %22, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 1, ptr %24) #5
  %372 = load i64, ptr %22, align 8, !tbaa !15
  %373 = icmp sge i64 %372, 0
  %374 = zext i1 %373 to i32
  %375 = trunc i32 %374 to i8
  store i8 %375, ptr %24, align 1, !tbaa !15
  %376 = load i8, ptr %24, align 1, !tbaa !15
  %377 = icmp ne i8 %376, 0
  br i1 %377, label %378, label %395

378:                                              ; preds = %367
  call void @llvm.lifetime.start.p0(i64 16, ptr %25) #5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %25, ptr align 8 %10, i64 16, i1 false), !tbaa.struct !22
  %379 = getelementptr inbounds %struct.Node__, ptr %25, i32 0, i32 0
  %380 = load i32, ptr %379, align 8, !tbaa !20
  %381 = icmp eq i32 %380, 19
  br i1 %381, label %385, label %382

382:                                              ; preds = %378
  %383 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @top_____abandonFn__)
  %384 = load ptr, ptr %383, align 8, !tbaa !5
  call void %384(i32 noundef -4)
  br label %385

385:                                              ; preds = %382, %378
  %386 = getelementptr inbounds %struct.Node__, ptr %25, i32 0, i32 1
  %387 = load ptr, ptr %386, align 8, !tbaa !24
  %388 = getelementptr inbounds %struct.tag_____NumberExpression__, ptr %387, i32 0, i32 4
  %389 = load i64, ptr %388, align 8, !tbaa !25
  %390 = getelementptr inbounds { ptr, ptr }, ptr %5, i32 0, i32 0
  %391 = load ptr, ptr %390, align 8
  %392 = getelementptr inbounds { ptr, ptr }, ptr %5, i32 0, i32 1
  %393 = load ptr, ptr %392, align 8
  %394 = call zeroext i8 @TypeChecker__canFitUnsigned__(i64 noundef %389, ptr %391, ptr %393)
  store i8 %394, ptr %24, align 1, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 16, ptr %25) #5
  br label %395

395:                                              ; preds = %385, %367
  %396 = load i8, ptr %24, align 1, !tbaa !15
  %397 = icmp ne i8 %396, 0
  br i1 %397, label %398, label %399

398:                                              ; preds = %395
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %8, ptr align 8 %5, i64 16, i1 false), !tbaa.struct !17
  store i32 1, ptr %13, align 4
  br label %400

399:                                              ; preds = %395
  store i32 0, ptr %13, align 4
  br label %400

400:                                              ; preds = %399, %398
  call void @llvm.lifetime.end.p0(i64 1, ptr %24) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %23) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #5
  %401 = load i32, ptr %13, align 4
  switch i32 %401, label %429 [
    i32 0, label %402
  ]

402:                                              ; preds = %400
  br label %427

403:                                              ; preds = %353
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #5
  call void @llvm.memset.p0.i64(ptr align 8 %26, i8 0, i64 8, i1 false)
  call void @llvm.lifetime.start.p0(i64 16, ptr %27) #5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %27, ptr align 8 %10, i64 16, i1 false), !tbaa.struct !22
  %404 = getelementptr inbounds %struct.Node__, ptr %27, i32 0, i32 0
  %405 = load i32, ptr %404, align 8, !tbaa !20
  %406 = icmp eq i32 %405, 19
  br i1 %406, label %410, label %407

407:                                              ; preds = %403
  %408 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @top_____abandonFn__)
  %409 = load ptr, ptr %408, align 8, !tbaa !5
  call void %409(i32 noundef -4)
  br label %410

410:                                              ; preds = %407, %403
  %411 = getelementptr inbounds %struct.Node__, ptr %27, i32 0, i32 1
  %412 = load ptr, ptr %411, align 8, !tbaa !24
  %413 = getelementptr inbounds %struct.tag_____NumberExpression__, ptr %412, i32 0, i32 4
  %414 = load i64, ptr %413, align 8, !tbaa !25
  store i64 %414, ptr %26, align 8, !tbaa !15
  %415 = load i64, ptr %26, align 8, !tbaa !15
  %416 = getelementptr inbounds { ptr, ptr }, ptr %5, i32 0, i32 0
  %417 = load ptr, ptr %416, align 8
  %418 = getelementptr inbounds { ptr, ptr }, ptr %5, i32 0, i32 1
  %419 = load ptr, ptr %418, align 8
  %420 = call zeroext i8 @TypeChecker__canFitSigned__(i64 noundef %415, ptr %417, ptr %419)
  %421 = icmp ne i8 %420, 0
  br i1 %421, label %422, label %423

422:                                              ; preds = %410
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %8, ptr align 8 %5, i64 16, i1 false), !tbaa.struct !17
  store i32 1, ptr %13, align 4
  br label %424

423:                                              ; preds = %410
  store i32 0, ptr %13, align 4
  br label %424

424:                                              ; preds = %423, %422
  call void @llvm.lifetime.end.p0(i64 16, ptr %27) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #5
  %425 = load i32, ptr %13, align 4
  switch i32 %425, label %429 [
    i32 0, label %426
  ]

426:                                              ; preds = %424
  br label %427

427:                                              ; preds = %426, %402
  br label %428

428:                                              ; preds = %427, %350
  call void @llvm.memset.p0.i64(ptr align 8 %8, i8 0, i64 16, i1 false)
  store i32 1, ptr %13, align 4
  br label %429

429:                                              ; preds = %428, %424, %400
  call void @llvm.lifetime.end.p0(i64 1, ptr %21) #5
  br label %430

430:                                              ; preds = %429, %328, %304
  call void @llvm.lifetime.end.p0(i64 1, ptr %14) #5
  br label %431

431:                                              ; preds = %430, %234, %223, %197, %190, %168, %142, %135, %113, %100, %89, %54
  call void @llvm.lifetime.end.p0(i64 1, ptr %12) #5
  %432 = load { ptr, ptr }, ptr %8, align 8
  ret { ptr, ptr } %432
}

; 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

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 = !{!7, !7, i64 0}
!16 = !{!12, !14, i64 104}
!17 = !{i64 0, i64 8, !5, i64 8, i64 8, !5}
!18 = !{!19, !6, i64 80}
!19 = !{!"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}
!20 = !{!21, !14, i64 0}
!21 = !{!"", !14, i64 0, !6, i64 8}
!22 = !{i64 0, i64 4, !23, i64 8, i64 8, !5}
!23 = !{!14, !14, i64 0}
!24 = !{!21, !6, i64 8}
!25 = !{!26, !28, i64 40}
!26 = !{!"tag_____NumberExpression__", !6, i64 0, !27, i64 8, !14, i64 16, !10, i64 24, !28, i64 40}
!27 = !{!"tag_____IntRange__", !14, i64 0, !14, i64 4}
!28 = !{!"long", !7, i64 0}


; 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 }
%struct.Node__ = type { i32, ptr }

; Function Attrs: nounwind uwtable
define dso_local { ptr, ptr } @TypeChecker__tryUnifyIntvals__(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, ptr nocapture noundef readonly byval(%struct.Node__) align 8 %6) local_unnamed_addr #0 {
  %8 = getelementptr inbounds i8, ptr %1, i64 28
  %9 = load i32, ptr %8, align 4, !tbaa !5
  %10 = and i32 %9, 1
  %.not.not = icmp eq i32 %10, 0
  br i1 %.not.not, label %.thread, label %11

11:                                               ; preds = %7
  %12 = load ptr, ptr %5, align 8
  %13 = getelementptr inbounds i8, ptr %12, i64 28
  %14 = load i32, ptr %13, align 4, !tbaa !5
  %15 = and i32 %14, 1
  %.not.not178 = icmp eq i32 %15, 0
  br i1 %.not.not178, label %.thread, label %16

16:                                               ; preds = %11
  %17 = and i32 %9, 2
  %.not145 = icmp eq i32 %17, 0
  %18 = and i32 %14, 2
  %.not146 = icmp eq i32 %18, 0
  br i1 %.not145, label %56, label %19

19:                                               ; preds = %16
  br i1 %.not146, label %35, label %20

20:                                               ; preds = %19
  %21 = getelementptr inbounds i8, ptr %1, i64 104
  %22 = load i32, ptr %21, align 8, !tbaa !12
  %23 = getelementptr inbounds i8, ptr %12, i64 104
  %24 = load i32, ptr %23, align 8, !tbaa !12
  %.not157 = icmp slt i32 %22, %24
  br i1 %.not157, label %29, label %25

25:                                               ; preds = %20
  %26 = icmp sgt i32 %22, 3
  br i1 %26, label %.thread, label %27

27:                                               ; preds = %25
  %28 = getelementptr inbounds i8, ptr %0, i64 80
  %.sroa.084.0.copyload = load ptr, ptr %28, align 8, !tbaa !13
  %.sroa.2398.0..sroa_idx = getelementptr inbounds i8, ptr %0, i64 88
  %.sroa.2398.0.copyload = load ptr, ptr %.sroa.2398.0..sroa_idx, align 8, !tbaa !13
  br label %.thread

29:                                               ; preds = %20
  %30 = icmp sgt i32 %24, 3
  br i1 %30, label %31, label %32

31:                                               ; preds = %29
  %.sroa.2398.0..sroa_idx99 = getelementptr inbounds i8, ptr %5, i64 8
  br label %34

32:                                               ; preds = %29
  %33 = getelementptr inbounds i8, ptr %0, i64 80
  %.sroa.084.0.copyload86 = load ptr, ptr %33, align 8, !tbaa !13
  %.sroa.2398.0..sroa_idx101 = getelementptr inbounds i8, ptr %0, i64 88
  br label %34

34:                                               ; preds = %32, %31
  %.sroa.2398.1.in = phi ptr [ %.sroa.2398.0..sroa_idx99, %31 ], [ %.sroa.2398.0..sroa_idx101, %32 ]
  %.sroa.084.1 = phi ptr [ %12, %31 ], [ %.sroa.084.0.copyload86, %32 ]
  %.sroa.2398.1 = load ptr, ptr %.sroa.2398.1.in, align 8, !tbaa !13
  br label %.thread

35:                                               ; preds = %19
  %36 = getelementptr inbounds i8, ptr %12, i64 104
  %37 = load i32, ptr %36, align 8, !tbaa !12
  %38 = icmp eq i32 %37, 6
  %39 = getelementptr inbounds i8, ptr %1, i64 104
  %40 = load i32, ptr %39, align 8, !tbaa !12
  br i1 %38, label %41, label %44

41:                                               ; preds = %35
  %42 = icmp slt i32 %40, 4
  br i1 %42, label %43, label %88

43:                                               ; preds = %41
  %.sroa.2398.0..sroa_idx103 = getelementptr inbounds i8, ptr %5, i64 8
  %.sroa.2398.0.copyload104 = load ptr, ptr %.sroa.2398.0..sroa_idx103, align 8, !tbaa !13
  br label %.thread

44:                                               ; preds = %35
  %45 = icmp slt i32 %40, %37
  br i1 %45, label %46, label %52

46:                                               ; preds = %44
  %47 = icmp sgt i32 %37, 3
  br i1 %47, label %48, label %49

48:                                               ; preds = %46
  %.sroa.2398.0..sroa_idx105 = getelementptr inbounds i8, ptr %5, i64 8
  br label %51

49:                                               ; preds = %46
  %50 = getelementptr inbounds i8, ptr %0, i64 80
  %.sroa.084.0.copyload89 = load ptr, ptr %50, align 8, !tbaa !13
  %.sroa.2398.0..sroa_idx107 = getelementptr inbounds i8, ptr %0, i64 88
  br label %51

51:                                               ; preds = %49, %48
  %.sroa.2398.2.in = phi ptr [ %.sroa.2398.0..sroa_idx105, %48 ], [ %.sroa.2398.0..sroa_idx107, %49 ]
  %.sroa.084.2 = phi ptr [ %12, %48 ], [ %.sroa.084.0.copyload89, %49 ]
  %.sroa.2398.2 = load ptr, ptr %.sroa.2398.2.in, align 8, !tbaa !13
  br label %.thread

52:                                               ; preds = %44
  %53 = icmp slt i32 %40, 4
  br i1 %53, label %54, label %88

54:                                               ; preds = %52
  %55 = getelementptr inbounds i8, ptr %0, i64 80
  %.sroa.084.0.copyload90 = load ptr, ptr %55, align 8, !tbaa !13
  %.sroa.2398.0..sroa_idx109 = getelementptr inbounds i8, ptr %0, i64 88
  %.sroa.2398.0.copyload110 = load ptr, ptr %.sroa.2398.0..sroa_idx109, align 8, !tbaa !13
  br label %.thread

56:                                               ; preds = %16
  %57 = getelementptr inbounds i8, ptr %1, i64 104
  %58 = load i32, ptr %57, align 8, !tbaa !12
  br i1 %.not146, label %75, label %59

59:                                               ; preds = %56
  %60 = icmp eq i32 %58, 6
  %61 = getelementptr inbounds i8, ptr %12, i64 104
  %62 = load i32, ptr %61, align 8, !tbaa !12
  br i1 %60, label %63, label %65

63:                                               ; preds = %59
  %64 = icmp slt i32 %62, 4
  br i1 %64, label %.thread, label %88

65:                                               ; preds = %59
  %66 = icmp slt i32 %62, %58
  br i1 %66, label %67, label %71

67:                                               ; preds = %65
  %68 = icmp sgt i32 %58, 3
  br i1 %68, label %.thread, label %69

69:                                               ; preds = %67
  %70 = getelementptr inbounds i8, ptr %0, i64 80
  %.sroa.084.0.copyload91 = load ptr, ptr %70, align 8, !tbaa !13
  %.sroa.2398.0..sroa_idx111 = getelementptr inbounds i8, ptr %0, i64 88
  %.sroa.2398.0.copyload112 = load ptr, ptr %.sroa.2398.0..sroa_idx111, align 8, !tbaa !13
  br label %.thread

71:                                               ; preds = %65
  %72 = icmp slt i32 %62, 4
  br i1 %72, label %73, label %88

73:                                               ; preds = %71
  %74 = getelementptr inbounds i8, ptr %0, i64 80
  %.sroa.084.0.copyload92 = load ptr, ptr %74, align 8, !tbaa !13
  %.sroa.2398.0..sroa_idx113 = getelementptr inbounds i8, ptr %0, i64 88
  %.sroa.2398.0.copyload114 = load ptr, ptr %.sroa.2398.0..sroa_idx113, align 8, !tbaa !13
  br label %.thread

75:                                               ; preds = %56
  %76 = getelementptr inbounds i8, ptr %12, i64 104
  %77 = load i32, ptr %76, align 8, !tbaa !12
  %.not147 = icmp slt i32 %58, %77
  br i1 %.not147, label %82, label %78

78:                                               ; preds = %75
  %79 = icmp sgt i32 %58, 3
  br i1 %79, label %.thread, label %80

80:                                               ; preds = %78
  %81 = getelementptr inbounds i8, ptr %0, i64 80
  %.sroa.084.0.copyload93 = load ptr, ptr %81, align 8, !tbaa !13
  %.sroa.2398.0..sroa_idx115 = getelementptr inbounds i8, ptr %0, i64 88
  %.sroa.2398.0.copyload116 = load ptr, ptr %.sroa.2398.0..sroa_idx115, align 8, !tbaa !13
  br label %.thread

82:                                               ; preds = %75
  %83 = icmp sgt i32 %77, 3
  br i1 %83, label %84, label %85

84:                                               ; preds = %82
  %.sroa.2398.0..sroa_idx117 = getelementptr inbounds i8, ptr %5, i64 8
  br label %87

85:                                               ; preds = %82
  %86 = getelementptr inbounds i8, ptr %0, i64 80
  %.sroa.084.0.copyload95 = load ptr, ptr %86, align 8, !tbaa !13
  %.sroa.2398.0..sroa_idx119 = getelementptr inbounds i8, ptr %0, i64 88
  br label %87

87:                                               ; preds = %85, %84
  %.sroa.2398.5.in = phi ptr [ %.sroa.2398.0..sroa_idx117, %84 ], [ %.sroa.2398.0..sroa_idx119, %85 ]
  %.sroa.084.5 = phi ptr [ %12, %84 ], [ %.sroa.084.0.copyload95, %85 ]
  %.sroa.2398.5 = load ptr, ptr %.sroa.2398.5.in, align 8, !tbaa !13
  br label %.thread

88:                                               ; preds = %71, %63, %52, %41
  %89 = getelementptr inbounds i8, ptr %0, i64 80
  %90 = load ptr, ptr %89, align 8, !tbaa !14
  %91 = icmp ne ptr %12, %90
  %92 = load i32, ptr %6, align 8
  %93 = icmp ne i32 %92, 19
  %narrow.not = select i1 %91, i1 true, i1 %93
  br i1 %narrow.not, label %.critedge, label %94

94:                                               ; preds = %88
  %.sroa.418.0..sroa_idx = getelementptr inbounds i8, ptr %6, i64 8
  %.sroa.418.0.copyload = load ptr, ptr %.sroa.418.0..sroa_idx, align 8, !tbaa !13
  %95 = getelementptr inbounds i8, ptr %.sroa.418.0.copyload, i64 40
  %96 = load i64, ptr %95, align 8, !tbaa !17
  br i1 %.not145, label %102, label %97

97:                                               ; preds = %94
  %98 = icmp sgt i64 %96, -1
  br i1 %98, label %99, label %.critedge

99:                                               ; preds = %97
  %100 = tail call zeroext i8 @TypeChecker__canFitUnsigned__(i64 noundef %96, ptr nonnull %1, ptr %2)
  %101 = icmp eq i8 %100, 0
  br i1 %101, label %.critedge, label %.thread

102:                                              ; preds = %94
  %103 = tail call zeroext i8 @TypeChecker__canFitSigned__(i64 noundef %96, ptr nonnull %1, ptr %2)
  %.not151 = icmp eq i8 %103, 0
  br i1 %.not151, label %.critedge, label %.thread

.critedge:                                        ; preds = %97, %99, %102, %88
  %104 = load ptr, ptr %89, align 8, !tbaa !14
  %105 = icmp ne ptr %104, %1
  %106 = icmp ne i32 %3, 19
  %spec.select = select i1 %105, i1 true, i1 %106
  br i1 %spec.select, label %.thread176, label %107

107:                                              ; preds = %.critedge
  %108 = load i32, ptr %13, align 4, !tbaa !5
  %109 = and i32 %108, 2
  %.not154 = icmp eq i32 %109, 0
  %110 = getelementptr inbounds i8, ptr %4, i64 40
  %111 = load i64, ptr %110, align 8, !tbaa !17
  br i1 %.not154, label %119, label %112

112:                                              ; preds = %107
  %113 = icmp sgt i64 %111, -1
  br i1 %113, label %114, label %.thread176

114:                                              ; preds = %112
  %115 = getelementptr inbounds i8, ptr %5, i64 8
  %116 = load ptr, ptr %115, align 8
  %117 = tail call zeroext i8 @TypeChecker__canFitUnsigned__(i64 noundef %111, ptr nonnull %12, ptr %116)
  %118 = icmp eq i8 %117, 0
  br i1 %118, label %.thread176, label %.thread

119:                                              ; preds = %107
  %120 = getelementptr inbounds i8, ptr %5, i64 8
  %121 = load ptr, ptr %120, align 8
  %122 = tail call zeroext i8 @TypeChecker__canFitSigned__(i64 noundef %111, ptr nonnull %12, ptr %121)
  %.not155 = icmp eq i8 %122, 0
  br i1 %.not155, label %.thread176, label %.thread

.thread176:                                       ; preds = %114, %112, %119, %.critedge
  br label %.thread

.thread:                                          ; preds = %7, %114, %102, %99, %119, %.thread176, %80, %78, %69, %67, %63, %27, %25, %11, %87, %73, %54, %51, %43, %34
  %.sroa.2398.14 = phi ptr [ %.sroa.2398.1, %34 ], [ %.sroa.2398.0.copyload104, %43 ], [ %.sroa.2398.2, %51 ], [ %.sroa.2398.0.copyload110, %54 ], [ %.sroa.2398.0.copyload114, %73 ], [ %.sroa.2398.5, %87 ], [ null, %11 ], [ %.sroa.2398.0.copyload, %27 ], [ %2, %25 ], [ %2, %63 ], [ %.sroa.2398.0.copyload112, %69 ], [ %2, %67 ], [ %.sroa.2398.0.copyload116, %80 ], [ %2, %78 ], [ %2, %99 ], [ %2, %102 ], [ null, %.thread176 ], [ %121, %119 ], [ %116, %114 ], [ null, %7 ]
  %.sroa.084.14 = phi ptr [ %.sroa.084.1, %34 ], [ %12, %43 ], [ %.sroa.084.2, %51 ], [ %.sroa.084.0.copyload90, %54 ], [ %.sroa.084.0.copyload92, %73 ], [ %.sroa.084.5, %87 ], [ null, %11 ], [ %.sroa.084.0.copyload, %27 ], [ %1, %25 ], [ %1, %63 ], [ %.sroa.084.0.copyload91, %69 ], [ %1, %67 ], [ %.sroa.084.0.copyload93, %80 ], [ %1, %78 ], [ %1, %99 ], [ %1, %102 ], [ null, %.thread176 ], [ %12, %119 ], [ %12, %114 ], [ null, %7 ]
  %.fca.0.insert = insertvalue { ptr, ptr } poison, ptr %.sroa.084.14, 0
  %.fca.1.insert = insertvalue { ptr, ptr } %.fca.0.insert, ptr %.sroa.2398.14, 1
  ret { ptr, ptr } %.fca.1.insert
}

; 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

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 = !{!8, !8, i64 0}
!14 = !{!15, !8, i64 80}
!15 = !{!"tag_____CommonTags__", !16, i64 0, !16, i64 16, !16, i64 32, !16, i64 48, !16, i64 64, !16, i64 80, !16, i64 96, !16, i64 112, !16, i64 128, !16, i64 144, !16, i64 160, !16, i64 176, !16, i64 192, !16, i64 208, !16, i64 224, !16, i64 240, !16, i64 256, !16, i64 272, !16, 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}
!16 = !{!"tag_____Tag__", !8, i64 0, !8, i64 8}
!17 = !{!18, !20, i64 40}
!18 = !{!"tag_____NumberExpression__", !8, i64 0, !19, i64 8, !11, i64 16, !16, i64 24, !20, i64 40}
!19 = !{!"tag_____IntRange__", !11, i64 0, !11, i64 4}
!20 = !{!"long", !9, i64 0}


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