; LLVM IR from fcimeson/cbTSP :: cbLKH/SRC (MergeWithTour)

; 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.Node = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, double, double, double, double, double, double, i8, i8, i8 }

@FirstNode = external dso_local global ptr, align 8
@C = external dso_local global ptr, align 8
@Precision = external dso_local global i32, align 4
@Hash = external dso_local global i32, align 4
@Rand = external dso_local global ptr, align 8

; Function Attrs: nounwind uwtable
define dso_local i64 @MergeWithTour() #0 {
  %1 = alloca i64, align 8
  %2 = alloca i32, align 4
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i64, align 8
  %14 = alloca i64, align 8
  %15 = alloca i64, align 8
  %16 = alloca i64, align 8
  %17 = alloca i64, align 8
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  %26 = alloca i32, align 4
  call void @llvm.lifetime.start.p0(i64 4, ptr %2) #2
  store i32 0, ptr %2, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %3) #2
  store i32 0, ptr %3, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #2
  store i32 0, ptr %4, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #2
  store i32 0, ptr %8, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #2
  store i32 3, ptr %11, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #2
  store i32 0, ptr %12, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #2
  store i64 0, ptr %13, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #2
  store i64 0, ptr %14, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #2
  store i64 0, ptr %17, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #2
  store ptr null, ptr %24, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #2
  %27 = load ptr, ptr @FirstNode, align 8, !tbaa !11
  store ptr %27, ptr %18, align 8, !tbaa !11
  br label %28

28:                                               ; preds = %38, %0
  %29 = load ptr, ptr %18, align 8, !tbaa !11
  %30 = load ptr, ptr %18, align 8, !tbaa !11
  %31 = getelementptr inbounds %struct.Node, ptr %30, i32 0, i32 23
  %32 = load ptr, ptr %31, align 8, !tbaa !13
  %33 = getelementptr inbounds %struct.Node, ptr %32, i32 0, i32 24
  store ptr %29, ptr %33, align 8, !tbaa !16
  %34 = load ptr, ptr %18, align 8, !tbaa !11
  %35 = getelementptr inbounds %struct.Node, ptr %34, i32 0, i32 16
  %36 = load ptr, ptr %35, align 8, !tbaa !17
  %37 = getelementptr inbounds %struct.Node, ptr %36, i32 0, i32 15
  store ptr %29, ptr %37, align 8, !tbaa !18
  br label %38

38:                                               ; preds = %28
  %39 = load ptr, ptr %18, align 8, !tbaa !11
  %40 = getelementptr inbounds %struct.Node, ptr %39, i32 0, i32 16
  %41 = load ptr, ptr %40, align 8, !tbaa !17
  store ptr %41, ptr %18, align 8, !tbaa !11
  %42 = load ptr, ptr @FirstNode, align 8, !tbaa !11
  %43 = icmp ne ptr %41, %42
  br i1 %43, label %28, label %44, !llvm.loop !19

44:                                               ; preds = %38
  br label %45

45:                                               ; preds = %108, %44
  %46 = load ptr, ptr @C, align 8, !tbaa !11
  %47 = load ptr, ptr %18, align 8, !tbaa !11
  %48 = load ptr, ptr %18, align 8, !tbaa !11
  %49 = getelementptr inbounds %struct.Node, ptr %48, i32 0, i32 16
  %50 = load ptr, ptr %49, align 8, !tbaa !17
  %51 = call i32 %46(ptr noundef %47, ptr noundef %50)
  %52 = load ptr, ptr %18, align 8, !tbaa !11
  %53 = getelementptr inbounds %struct.Node, ptr %52, i32 0, i32 9
  %54 = load i32, ptr %53, align 4, !tbaa !21
  %55 = sub nsw i32 %51, %54
  %56 = load ptr, ptr %18, align 8, !tbaa !11
  %57 = getelementptr inbounds %struct.Node, ptr %56, i32 0, i32 16
  %58 = load ptr, ptr %57, align 8, !tbaa !17
  %59 = getelementptr inbounds %struct.Node, ptr %58, i32 0, i32 9
  %60 = load i32, ptr %59, align 4, !tbaa !21
  %61 = sub nsw i32 %55, %60
  %62 = load ptr, ptr %18, align 8, !tbaa !11
  %63 = getelementptr inbounds %struct.Node, ptr %62, i32 0, i32 5
  store i32 %61, ptr %63, align 4, !tbaa !22
  %64 = sext i32 %61 to i64
  %65 = load i64, ptr %13, align 8, !tbaa !9
  %66 = add nsw i64 %65, %64
  store i64 %66, ptr %13, align 8, !tbaa !9
  %67 = load ptr, ptr %18, align 8, !tbaa !11
  %68 = getelementptr inbounds %struct.Node, ptr %67, i32 0, i32 16
  %69 = load ptr, ptr %68, align 8, !tbaa !17
  %70 = load ptr, ptr %18, align 8, !tbaa !11
  %71 = getelementptr inbounds %struct.Node, ptr %70, i32 0, i32 24
  %72 = load ptr, ptr %71, align 8, !tbaa !16
  %73 = icmp eq ptr %69, %72
  br i1 %73, label %82, label %74

74:                                               ; preds = %45
  %75 = load ptr, ptr %18, align 8, !tbaa !11
  %76 = getelementptr inbounds %struct.Node, ptr %75, i32 0, i32 16
  %77 = load ptr, ptr %76, align 8, !tbaa !17
  %78 = load ptr, ptr %18, align 8, !tbaa !11
  %79 = getelementptr inbounds %struct.Node, ptr %78, i32 0, i32 23
  %80 = load ptr, ptr %79, align 8, !tbaa !13
  %81 = icmp eq ptr %77, %80
  br i1 %81, label %82, label %101

82:                                               ; preds = %74, %45
  %83 = load ptr, ptr %18, align 8, !tbaa !11
  %84 = getelementptr inbounds %struct.Node, ptr %83, i32 0, i32 15
  %85 = load ptr, ptr %84, align 8, !tbaa !18
  %86 = load ptr, ptr %18, align 8, !tbaa !11
  %87 = getelementptr inbounds %struct.Node, ptr %86, i32 0, i32 24
  %88 = load ptr, ptr %87, align 8, !tbaa !16
  %89 = icmp eq ptr %85, %88
  br i1 %89, label %98, label %90

90:                                               ; preds = %82
  %91 = load ptr, ptr %18, align 8, !tbaa !11
  %92 = getelementptr inbounds %struct.Node, ptr %91, i32 0, i32 15
  %93 = load ptr, ptr %92, align 8, !tbaa !18
  %94 = load ptr, ptr %18, align 8, !tbaa !11
  %95 = getelementptr inbounds %struct.Node, ptr %94, i32 0, i32 23
  %96 = load ptr, ptr %95, align 8, !tbaa !13
  %97 = icmp eq ptr %93, %96
  br i1 %97, label %98, label %101

98:                                               ; preds = %90, %82
  %99 = load ptr, ptr %18, align 8, !tbaa !11
  %100 = getelementptr inbounds %struct.Node, ptr %99, i32 0, i32 3
  store i32 0, ptr %100, align 4, !tbaa !23
  br label %107

101:                                              ; preds = %90, %74
  %102 = load ptr, ptr %18, align 8, !tbaa !11
  %103 = getelementptr inbounds %struct.Node, ptr %102, i32 0, i32 3
  store i32 1, ptr %103, align 4, !tbaa !23
  %104 = load i32, ptr %8, align 4, !tbaa !5
  %105 = add nsw i32 %104, 1
  store i32 %105, ptr %8, align 4, !tbaa !5
  %106 = load ptr, ptr %18, align 8, !tbaa !11
  store ptr %106, ptr %24, align 8, !tbaa !11
  br label %107

107:                                              ; preds = %101, %98
  br label %108

108:                                              ; preds = %107
  %109 = load ptr, ptr %18, align 8, !tbaa !11
  %110 = getelementptr inbounds %struct.Node, ptr %109, i32 0, i32 16
  %111 = load ptr, ptr %110, align 8, !tbaa !17
  store ptr %111, ptr %18, align 8, !tbaa !11
  %112 = load ptr, ptr @FirstNode, align 8, !tbaa !11
  %113 = icmp ne ptr %111, %112
  br i1 %113, label %45, label %114, !llvm.loop !24

114:                                              ; preds = %108
  %115 = load i32, ptr %8, align 4, !tbaa !5
  %116 = icmp eq i32 %115, 0
  br i1 %116, label %117, label %122

117:                                              ; preds = %114
  %118 = load i64, ptr %13, align 8, !tbaa !9
  %119 = load i32, ptr @Precision, align 4, !tbaa !5
  %120 = sext i32 %119 to i64
  %121 = sdiv i64 %118, %120
  store i64 %121, ptr %1, align 8
  store i32 1, ptr %26, align 4
  br label %834

122:                                              ; preds = %114
  br label %123

123:                                              ; preds = %175, %122
  %124 = load ptr, ptr %18, align 8, !tbaa !11
  %125 = getelementptr inbounds %struct.Node, ptr %124, i32 0, i32 23
  %126 = load ptr, ptr %125, align 8, !tbaa !13
  %127 = load ptr, ptr %18, align 8, !tbaa !11
  %128 = getelementptr inbounds %struct.Node, ptr %127, i32 0, i32 15
  %129 = load ptr, ptr %128, align 8, !tbaa !18
  %130 = icmp eq ptr %126, %129
  br i1 %130, label %131, label %137

131:                                              ; preds = %123
  %132 = load ptr, ptr %18, align 8, !tbaa !11
  %133 = getelementptr inbounds %struct.Node, ptr %132, i32 0, i32 15
  %134 = load ptr, ptr %133, align 8, !tbaa !18
  %135 = getelementptr inbounds %struct.Node, ptr %134, i32 0, i32 5
  %136 = load i32, ptr %135, align 4, !tbaa !22
  br label %168

137:                                              ; preds = %123
  %138 = load ptr, ptr %18, align 8, !tbaa !11
  %139 = getelementptr inbounds %struct.Node, ptr %138, i32 0, i32 23
  %140 = load ptr, ptr %139, align 8, !tbaa !13
  %141 = load ptr, ptr %18, align 8, !tbaa !11
  %142 = getelementptr inbounds %struct.Node, ptr %141, i32 0, i32 16
  %143 = load ptr, ptr %142, align 8, !tbaa !17
  %144 = icmp eq ptr %140, %143
  br i1 %144, label %145, label %149

145:                                              ; preds = %137
  %146 = load ptr, ptr %18, align 8, !tbaa !11
  %147 = getelementptr inbounds %struct.Node, ptr %146, i32 0, i32 5
  %148 = load i32, ptr %147, align 4, !tbaa !22
  br label %166

149:                                              ; preds = %137
  %150 = load ptr, ptr @C, align 8, !tbaa !11
  %151 = load ptr, ptr %18, align 8, !tbaa !11
  %152 = load ptr, ptr %18, align 8, !tbaa !11
  %153 = getelementptr inbounds %struct.Node, ptr %152, i32 0, i32 23
  %154 = load ptr, ptr %153, align 8, !tbaa !13
  %155 = call i32 %150(ptr noundef %151, ptr noundef %154)
  %156 = load ptr, ptr %18, align 8, !tbaa !11
  %157 = getelementptr inbounds %struct.Node, ptr %156, i32 0, i32 9
  %158 = load i32, ptr %157, align 4, !tbaa !21
  %159 = sub nsw i32 %155, %158
  %160 = load ptr, ptr %18, align 8, !tbaa !11
  %161 = getelementptr inbounds %struct.Node, ptr %160, i32 0, i32 23
  %162 = load ptr, ptr %161, align 8, !tbaa !13
  %163 = getelementptr inbounds %struct.Node, ptr %162, i32 0, i32 9
  %164 = load i32, ptr %163, align 4, !tbaa !21
  %165 = sub nsw i32 %159, %164
  br label %166

166:                                              ; preds = %149, %145
  %167 = phi i32 [ %148, %145 ], [ %165, %149 ]
  br label %168

168:                                              ; preds = %166, %131
  %169 = phi i32 [ %136, %131 ], [ %167, %166 ]
  %170 = load ptr, ptr %18, align 8, !tbaa !11
  %171 = getelementptr inbounds %struct.Node, ptr %170, i32 0, i32 6
  store i32 %169, ptr %171, align 8, !tbaa !25
  %172 = sext i32 %169 to i64
  %173 = load i64, ptr %14, align 8, !tbaa !9
  %174 = add nsw i64 %173, %172
  store i64 %174, ptr %14, align 8, !tbaa !9
  br label %175

175:                                              ; preds = %168
  %176 = load ptr, ptr %18, align 8, !tbaa !11
  %177 = getelementptr inbounds %struct.Node, ptr %176, i32 0, i32 16
  %178 = load ptr, ptr %177, align 8, !tbaa !17
  store ptr %178, ptr %18, align 8, !tbaa !11
  %179 = load ptr, ptr @FirstNode, align 8, !tbaa !11
  %180 = icmp ne ptr %178, %179
  br i1 %180, label %123, label %181, !llvm.loop !26

181:                                              ; preds = %175
  %182 = load i64, ptr %13, align 8, !tbaa !9
  store i64 %182, ptr %16, align 8, !tbaa !9
  %183 = load ptr, ptr %24, align 8, !tbaa !11
  store ptr %183, ptr %18, align 8, !tbaa !11
  store ptr null, ptr %25, align 8, !tbaa !11
  br label %184

184:                                              ; preds = %214, %181
  %185 = load ptr, ptr %18, align 8, !tbaa !11
  %186 = getelementptr inbounds %struct.Node, ptr %185, i32 0, i32 3
  %187 = load i32, ptr %186, align 4, !tbaa !23
  %188 = icmp ne i32 %187, 0
  br i1 %188, label %189, label %213

189:                                              ; preds = %184
  %190 = load i32, ptr %2, align 4, !tbaa !5
  %191 = add nsw i32 %190, 1
  store i32 %191, ptr %2, align 4, !tbaa !5
  %192 = load ptr, ptr %18, align 8, !tbaa !11
  %193 = getelementptr inbounds %struct.Node, ptr %192, i32 0, i32 2
  store i32 %191, ptr %193, align 8, !tbaa !27
  %194 = load ptr, ptr %25, align 8, !tbaa !11
  %195 = icmp ne ptr %194, null
  br i1 %195, label %196, label %211

196:                                              ; preds = %189
  %197 = load ptr, ptr %25, align 8, !tbaa !11
  %198 = load ptr, ptr %18, align 8, !tbaa !11
  %199 = load ptr, ptr %25, align 8, !tbaa !11
  %200 = getelementptr inbounds %struct.Node, ptr %199, i32 0, i32 18
  store ptr %198, ptr %200, align 8, !tbaa !28
  %201 = getelementptr inbounds %struct.Node, ptr %198, i32 0, i32 17
  store ptr %197, ptr %201, align 8, !tbaa !29
  %202 = load ptr, ptr %25, align 8, !tbaa !11
  %203 = load ptr, ptr %18, align 8, !tbaa !11
  %204 = getelementptr inbounds %struct.Node, ptr %203, i32 0, i32 15
  %205 = load ptr, ptr %204, align 8, !tbaa !18
  %206 = icmp ne ptr %202, %205
  br i1 %206, label %207, label %210

207:                                              ; preds = %196
  %208 = load ptr, ptr %25, align 8, !tbaa !11
  %209 = getelementptr inbounds %struct.Node, ptr %208, i32 0, i32 5
  store i32 0, ptr %209, align 4, !tbaa !22
  br label %210

210:                                              ; preds = %207, %196
  br label %211

211:                                              ; preds = %210, %189
  %212 = load ptr, ptr %18, align 8, !tbaa !11
  store ptr %212, ptr %25, align 8, !tbaa !11
  br label %213

213:                                              ; preds = %211, %184
  br label %214

214:                                              ; preds = %213
  %215 = load ptr, ptr %18, align 8, !tbaa !11
  %216 = getelementptr inbounds %struct.Node, ptr %215, i32 0, i32 16
  %217 = load ptr, ptr %216, align 8, !tbaa !17
  store ptr %217, ptr %18, align 8, !tbaa !11
  %218 = load ptr, ptr %24, align 8, !tbaa !11
  %219 = icmp ne ptr %217, %218
  br i1 %219, label %184, label %220, !llvm.loop !30

220:                                              ; preds = %214
  %221 = load ptr, ptr %25, align 8, !tbaa !11
  %222 = load ptr, ptr %24, align 8, !tbaa !11
  %223 = load ptr, ptr %25, align 8, !tbaa !11
  %224 = getelementptr inbounds %struct.Node, ptr %223, i32 0, i32 18
  store ptr %222, ptr %224, align 8, !tbaa !28
  %225 = getelementptr inbounds %struct.Node, ptr %222, i32 0, i32 17
  store ptr %221, ptr %225, align 8, !tbaa !29
  %226 = load ptr, ptr %25, align 8, !tbaa !11
  %227 = load ptr, ptr %24, align 8, !tbaa !11
  %228 = getelementptr inbounds %struct.Node, ptr %227, i32 0, i32 15
  %229 = load ptr, ptr %228, align 8, !tbaa !18
  %230 = icmp ne ptr %226, %229
  br i1 %230, label %231, label %234

231:                                              ; preds = %220
  %232 = load ptr, ptr %25, align 8, !tbaa !11
  %233 = getelementptr inbounds %struct.Node, ptr %232, i32 0, i32 5
  store i32 0, ptr %233, align 4, !tbaa !22
  br label %234

234:                                              ; preds = %231, %220
  %235 = load ptr, ptr %24, align 8, !tbaa !11
  store ptr %235, ptr %18, align 8, !tbaa !11
  store ptr null, ptr %25, align 8, !tbaa !11
  br label %236

236:                                              ; preds = %263, %234
  %237 = load ptr, ptr %18, align 8, !tbaa !11
  %238 = getelementptr inbounds %struct.Node, ptr %237, i32 0, i32 3
  %239 = load i32, ptr %238, align 4, !tbaa !23
  %240 = icmp ne i32 %239, 0
  br i1 %240, label %241, label %262

241:                                              ; preds = %236
  %242 = load ptr, ptr %25, align 8, !tbaa !11
  %243 = icmp ne ptr %242, null
  br i1 %243, label %244, label %260

244:                                              ; preds = %241
  %245 = load ptr, ptr %18, align 8, !tbaa !11
  %246 = load ptr, ptr %25, align 8, !tbaa !11
  %247 = getelementptr inbounds %struct.Node, ptr %246, i32 0, i32 23
  store ptr %245, ptr %247, align 8, !tbaa !13
  %248 = load ptr, ptr %25, align 8, !tbaa !11
  %249 = load ptr, ptr %18, align 8, !tbaa !11
  %250 = getelementptr inbounds %struct.Node, ptr %249, i32 0, i32 24
  %251 = load ptr, ptr %250, align 8, !tbaa !16
  %252 = icmp ne ptr %248, %251
  br i1 %252, label %253, label %259

253:                                              ; preds = %244
  %254 = load ptr, ptr %25, align 8, !tbaa !11
  %255 = load ptr, ptr %18, align 8, !tbaa !11
  %256 = getelementptr inbounds %struct.Node, ptr %255, i32 0, i32 24
  store ptr %254, ptr %256, align 8, !tbaa !16
  %257 = load ptr, ptr %25, align 8, !tbaa !11
  %258 = getelementptr inbounds %struct.Node, ptr %257, i32 0, i32 6
  store i32 0, ptr %258, align 8, !tbaa !25
  br label %259

259:                                              ; preds = %253, %244
  br label %260

260:                                              ; preds = %259, %241
  %261 = load ptr, ptr %18, align 8, !tbaa !11
  store ptr %261, ptr %25, align 8, !tbaa !11
  br label %262

262:                                              ; preds = %260, %236
  br label %263

263:                                              ; preds = %262
  %264 = load ptr, ptr %18, align 8, !tbaa !11
  %265 = getelementptr inbounds %struct.Node, ptr %264, i32 0, i32 23
  %266 = load ptr, ptr %265, align 8, !tbaa !13
  store ptr %266, ptr %18, align 8, !tbaa !11
  %267 = load ptr, ptr %24, align 8, !tbaa !11
  %268 = icmp ne ptr %266, %267
  br i1 %268, label %236, label %269, !llvm.loop !31

269:                                              ; preds = %263
  %270 = load ptr, ptr %24, align 8, !tbaa !11
  %271 = load ptr, ptr %25, align 8, !tbaa !11
  %272 = getelementptr inbounds %struct.Node, ptr %271, i32 0, i32 23
  store ptr %270, ptr %272, align 8, !tbaa !13
  %273 = load ptr, ptr %25, align 8, !tbaa !11
  %274 = load ptr, ptr %24, align 8, !tbaa !11
  %275 = getelementptr inbounds %struct.Node, ptr %274, i32 0, i32 24
  %276 = load ptr, ptr %275, align 8, !tbaa !16
  %277 = icmp ne ptr %273, %276
  br i1 %277, label %278, label %284

278:                                              ; preds = %269
  %279 = load ptr, ptr %25, align 8, !tbaa !11
  %280 = load ptr, ptr %24, align 8, !tbaa !11
  %281 = getelementptr inbounds %struct.Node, ptr %280, i32 0, i32 24
  store ptr %279, ptr %281, align 8, !tbaa !16
  %282 = load ptr, ptr %25, align 8, !tbaa !11
  %283 = getelementptr inbounds %struct.Node, ptr %282, i32 0, i32 6
  store i32 0, ptr %283, align 8, !tbaa !25
  br label %284

284:                                              ; preds = %278, %269
  br label %285

285:                                              ; preds = %620, %284
  store ptr null, ptr %23, align 8, !tbaa !11
  store ptr null, ptr %22, align 8, !tbaa !11
  %286 = load i32, ptr %8, align 4, !tbaa !5
  %287 = sdiv i32 %286, 2
  store i32 %287, ptr %10, align 4, !tbaa !5
  %288 = load ptr, ptr %24, align 8, !tbaa !11
  store ptr %288, ptr %20, align 8, !tbaa !11
  br label %289

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

290:                                              ; preds = %316, %289
  %291 = load ptr, ptr %20, align 8, !tbaa !11
  %292 = getelementptr inbounds %struct.Node, ptr %291, i32 0, i32 18
  %293 = load ptr, ptr %292, align 8, !tbaa !28
  %294 = load ptr, ptr %24, align 8, !tbaa !11
  %295 = icmp ne ptr %293, %294
  br i1 %295, label %296, label %314

296:                                              ; preds = %290
  %297 = load ptr, ptr %20, align 8, !tbaa !11
  %298 = getelementptr inbounds %struct.Node, ptr %297, i32 0, i32 18
  %299 = load ptr, ptr %298, align 8, !tbaa !28
  %300 = load ptr, ptr %20, align 8, !tbaa !11
  %301 = getelementptr inbounds %struct.Node, ptr %300, i32 0, i32 23
  %302 = load ptr, ptr %301, align 8, !tbaa !13
  %303 = icmp eq ptr %299, %302
  br i1 %303, label %312, label %304

304:                                              ; preds = %296
  %305 = load ptr, ptr %20, align 8, !tbaa !11
  %306 = getelementptr inbounds %struct.Node, ptr %305, i32 0, i32 18
  %307 = load ptr, ptr %306, align 8, !tbaa !28
  %308 = load ptr, ptr %20, align 8, !tbaa !11
  %309 = getelementptr inbounds %struct.Node, ptr %308, i32 0, i32 24
  %310 = load ptr, ptr %309, align 8, !tbaa !16
  %311 = icmp eq ptr %307, %310
  br label %312

312:                                              ; preds = %304, %296
  %313 = phi i1 [ true, %296 ], [ %311, %304 ]
  br label %314

314:                                              ; preds = %312, %290
  %315 = phi i1 [ false, %290 ], [ %313, %312 ]
  br i1 %315, label %316, label %320

316:                                              ; preds = %314
  %317 = load ptr, ptr %20, align 8, !tbaa !11
  %318 = getelementptr inbounds %struct.Node, ptr %317, i32 0, i32 18
  %319 = load ptr, ptr %318, align 8, !tbaa !28
  store ptr %319, ptr %20, align 8, !tbaa !11
  br label %290, !llvm.loop !32

320:                                              ; preds = %314
  %321 = load ptr, ptr %20, align 8, !tbaa !11
  %322 = getelementptr inbounds %struct.Node, ptr %321, i32 0, i32 18
  %323 = load ptr, ptr %322, align 8, !tbaa !28
  %324 = load ptr, ptr %24, align 8, !tbaa !11
  %325 = icmp eq ptr %323, %324
  br i1 %325, label %326, label %343

326:                                              ; preds = %320
  %327 = load ptr, ptr %20, align 8, !tbaa !11
  %328 = getelementptr inbounds %struct.Node, ptr %327, i32 0, i32 18
  %329 = load ptr, ptr %328, align 8, !tbaa !28
  %330 = load ptr, ptr %20, align 8, !tbaa !11
  %331 = getelementptr inbounds %struct.Node, ptr %330, i32 0, i32 23
  %332 = load ptr, ptr %331, align 8, !tbaa !13
  %333 = icmp eq ptr %329, %332
  br i1 %333, label %342, label %334

334:                                              ; preds = %326
  %335 = load ptr, ptr %20, align 8, !tbaa !11
  %336 = getelementptr inbounds %struct.Node, ptr %335, i32 0, i32 18
  %337 = load ptr, ptr %336, align 8, !tbaa !28
  %338 = load ptr, ptr %20, align 8, !tbaa !11
  %339 = getelementptr inbounds %struct.Node, ptr %338, i32 0, i32 24
  %340 = load ptr, ptr %339, align 8, !tbaa !16
  %341 = icmp eq ptr %337, %340
  br i1 %341, label %342, label %343

342:                                              ; preds = %334, %326
  br label %479

343:                                              ; preds = %334, %320
  store i32 1, ptr %9, align 4, !tbaa !5
  %344 = load ptr, ptr %20, align 8, !tbaa !11
  %345 = getelementptr inbounds %struct.Node, ptr %344, i32 0, i32 23
  %346 = load ptr, ptr %345, align 8, !tbaa !13
  store ptr %346, ptr %21, align 8, !tbaa !11
  br label %347

347:                                              ; preds = %460, %343
  %348 = load i32, ptr %9, align 4, !tbaa !5
  %349 = icmp sge i32 %348, 0
  br i1 %349, label %350, label %466

350:                                              ; preds = %347
  %351 = load ptr, ptr %21, align 8, !tbaa !11
  %352 = load ptr, ptr %20, align 8, !tbaa !11
  %353 = getelementptr inbounds %struct.Node, ptr %352, i32 0, i32 18
  %354 = load ptr, ptr %353, align 8, !tbaa !28
  %355 = icmp eq ptr %351, %354
  br i1 %355, label %362, label %356

356:                                              ; preds = %350
  %357 = load ptr, ptr %21, align 8, !tbaa !11
  %358 = load ptr, ptr %20, align 8, !tbaa !11
  %359 = getelementptr inbounds %struct.Node, ptr %358, i32 0, i32 17
  %360 = load ptr, ptr %359, align 8, !tbaa !29
  %361 = icmp eq ptr %357, %360
  br i1 %361, label %362, label %363

362:                                              ; preds = %356, %350
  br label %460

363:                                              ; preds = %356
  store i32 0, ptr %7, align 4, !tbaa !5
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %364

364:                                              ; preds = %455, %363
  %365 = load i32, ptr %6, align 4, !tbaa !5
  %366 = add nsw i32 %365, 1
  store i32 %366, ptr %6, align 4, !tbaa !5
  %367 = load i32, ptr %10, align 4, !tbaa !5
  %368 = icmp sge i32 %366, %367
  br i1 %368, label %369, label %370

369:                                              ; preds = %364
  br label %459

370:                                              ; preds = %364
  %371 = load ptr, ptr %21, align 8, !tbaa !11
  %372 = getelementptr inbounds %struct.Node, ptr %371, i32 0, i32 2
  %373 = load i32, ptr %372, align 8, !tbaa !27
  %374 = load ptr, ptr %20, align 8, !tbaa !11
  %375 = getelementptr inbounds %struct.Node, ptr %374, i32 0, i32 2
  %376 = load i32, ptr %375, align 8, !tbaa !27
  %377 = sub nsw i32 %373, %376
  store i32 %377, ptr %5, align 4, !tbaa !5
  %378 = icmp slt i32 %377, 0
  br i1 %378, label %379, label %383

379:                                              ; preds = %370
  %380 = load i32, ptr %8, align 4, !tbaa !5
  %381 = load i32, ptr %5, align 4, !tbaa !5
  %382 = add nsw i32 %381, %380
  store i32 %382, ptr %5, align 4, !tbaa !5
  br label %383

383:                                              ; preds = %379, %370
  %384 = load i32, ptr %5, align 4, !tbaa !5
  %385 = load i32, ptr %10, align 4, !tbaa !5
  %386 = icmp sge i32 %384, %385
  br i1 %386, label %387, label %388

387:                                              ; preds = %383
  br label %459

388:                                              ; preds = %383
  %389 = load i32, ptr %5, align 4, !tbaa !5
  %390 = load i32, ptr %7, align 4, !tbaa !5
  %391 = icmp sgt i32 %389, %390
  br i1 %391, label %392, label %443

392:                                              ; preds = %388
  %393 = load i32, ptr %5, align 4, !tbaa !5
  %394 = load i32, ptr %6, align 4, !tbaa !5
  %395 = icmp eq i32 %393, %394
  br i1 %395, label %396, label %441

396:                                              ; preds = %392
  %397 = load ptr, ptr %20, align 8, !tbaa !11
  store ptr %397, ptr %18, align 8, !tbaa !11
  store i64 0, ptr %15, align 8, !tbaa !9
  br label %398

398:                                              ; preds = %413, %396
  %399 = load ptr, ptr %18, align 8, !tbaa !11
  %400 = load ptr, ptr %21, align 8, !tbaa !11
  %401 = icmp ne ptr %399, %400
  br i1 %401, label %402, label %417

402:                                              ; preds = %398
  %403 = load ptr, ptr %18, align 8, !tbaa !11
  %404 = getelementptr inbounds %struct.Node, ptr %403, i32 0, i32 5
  %405 = load i32, ptr %404, align 4, !tbaa !22
  %406 = load ptr, ptr %18, align 8, !tbaa !11
  %407 = getelementptr inbounds %struct.Node, ptr %406, i32 0, i32 6
  %408 = load i32, ptr %407, align 8, !tbaa !25
  %409 = sub nsw i32 %405, %408
  %410 = sext i32 %409 to i64
  %411 = load i64, ptr %15, align 8, !tbaa !9
  %412 = add nsw i64 %411, %410
  store i64 %412, ptr %15, align 8, !tbaa !9
  br label %413

413:                                              ; preds = %402
  %414 = load ptr, ptr %18, align 8, !tbaa !11
  %415 = getelementptr inbounds %struct.Node, ptr %414, i32 0, i32 18
  %416 = load ptr, ptr %415, align 8, !tbaa !28
  store ptr %416, ptr %18, align 8, !tbaa !11
  br label %398, !llvm.loop !33

417:                                              ; preds = %398
  %418 = load i32, ptr %9, align 4, !tbaa !5
  %419 = icmp ne i32 %418, 0
  br i1 %419, label %431, label %420

420:                                              ; preds = %417
  %421 = load ptr, ptr %20, align 8, !tbaa !11
  %422 = getelementptr inbounds %struct.Node, ptr %421, i32 0, i32 6
  %423 = load i32, ptr %422, align 8, !tbaa !25
  %424 = load ptr, ptr %21, align 8, !tbaa !11
  %425 = getelementptr inbounds %struct.Node, ptr %424, i32 0, i32 6
  %426 = load i32, ptr %425, align 8, !tbaa !25
  %427 = sub nsw i32 %423, %426
  %428 = sext i32 %427 to i64
  %429 = load i64, ptr %15, align 8, !tbaa !9
  %430 = add nsw i64 %429, %428
  store i64 %430, ptr %15, align 8, !tbaa !9
  br label %431

431:                                              ; preds = %420, %417
  %432 = load i64, ptr %15, align 8, !tbaa !9
  %433 = icmp ne i64 %432, 0
  br i1 %433, label %434, label %440

434:                                              ; preds = %431
  %435 = load i32, ptr %5, align 4, !tbaa !5
  store i32 %435, ptr %10, align 4, !tbaa !5
  %436 = load ptr, ptr %20, align 8, !tbaa !11
  store ptr %436, ptr %22, align 8, !tbaa !11
  %437 = load ptr, ptr %21, align 8, !tbaa !11
  store ptr %437, ptr %23, align 8, !tbaa !11
  %438 = load i64, ptr %15, align 8, !tbaa !9
  store i64 %438, ptr %17, align 8, !tbaa !9
  %439 = load i32, ptr %9, align 4, !tbaa !5
  store i32 %439, ptr %12, align 4, !tbaa !5
  br label %440

440:                                              ; preds = %434, %431
  br label %459

441:                                              ; preds = %392
  %442 = load i32, ptr %5, align 4, !tbaa !5
  store i32 %442, ptr %7, align 4, !tbaa !5
  br label %443

443:                                              ; preds = %441, %388
  br label %444

444:                                              ; preds = %443
  %445 = load i32, ptr %9, align 4, !tbaa !5
  %446 = icmp ne i32 %445, 0
  br i1 %446, label %447, label %451

447:                                              ; preds = %444
  %448 = load ptr, ptr %21, align 8, !tbaa !11
  %449 = getelementptr inbounds %struct.Node, ptr %448, i32 0, i32 23
  %450 = load ptr, ptr %449, align 8, !tbaa !13
  br label %455

451:                                              ; preds = %444
  %452 = load ptr, ptr %21, align 8, !tbaa !11
  %453 = getelementptr inbounds %struct.Node, ptr %452, i32 0, i32 24
  %454 = load ptr, ptr %453, align 8, !tbaa !16
  br label %455

455:                                              ; preds = %451, %447
  %456 = phi ptr [ %450, %447 ], [ %454, %451 ]
  store ptr %456, ptr %21, align 8, !tbaa !11
  %457 = load ptr, ptr %20, align 8, !tbaa !11
  %458 = icmp ne ptr %456, %457
  br i1 %458, label %364, label %459, !llvm.loop !34

459:                                              ; preds = %455, %440, %387, %369
  br label %460

460:                                              ; preds = %459, %362
  %461 = load i32, ptr %9, align 4, !tbaa !5
  %462 = add nsw i32 %461, -1
  store i32 %462, ptr %9, align 4, !tbaa !5
  %463 = load ptr, ptr %20, align 8, !tbaa !11
  %464 = getelementptr inbounds %struct.Node, ptr %463, i32 0, i32 24
  %465 = load ptr, ptr %464, align 8, !tbaa !16
  store ptr %465, ptr %21, align 8, !tbaa !11
  br label %347, !llvm.loop !35

466:                                              ; preds = %347
  br label %467

467:                                              ; preds = %466
  %468 = load ptr, ptr %20, align 8, !tbaa !11
  %469 = getelementptr inbounds %struct.Node, ptr %468, i32 0, i32 18
  %470 = load ptr, ptr %469, align 8, !tbaa !28
  store ptr %470, ptr %20, align 8, !tbaa !11
  %471 = load ptr, ptr %24, align 8, !tbaa !11
  %472 = icmp ne ptr %470, %471
  br i1 %472, label %473, label %477

473:                                              ; preds = %467
  %474 = load i32, ptr %10, align 4, !tbaa !5
  %475 = load i32, ptr %11, align 4, !tbaa !5
  %476 = icmp ne i32 %474, %475
  br label %477

477:                                              ; preds = %473, %467
  %478 = phi i1 [ false, %467 ], [ %476, %473 ]
  br i1 %478, label %289, label %479, !llvm.loop !36

479:                                              ; preds = %477, %342
  %480 = load ptr, ptr %22, align 8, !tbaa !11
  %481 = icmp ne ptr %480, null
  br i1 %481, label %482, label %619

482:                                              ; preds = %479
  %483 = load i32, ptr %10, align 4, !tbaa !5
  store i32 %483, ptr %11, align 4, !tbaa !5
  %484 = load i64, ptr %17, align 8, !tbaa !9
  %485 = icmp sgt i64 %484, 0
  br i1 %485, label %486, label %542

486:                                              ; preds = %482
  store i32 1, ptr %3, align 4, !tbaa !5
  %487 = load i64, ptr %17, align 8, !tbaa !9
  %488 = load i64, ptr %13, align 8, !tbaa !9
  %489 = sub nsw i64 %488, %487
  store i64 %489, ptr %13, align 8, !tbaa !9
  %490 = load ptr, ptr %22, align 8, !tbaa !11
  %491 = getelementptr inbounds %struct.Node, ptr %490, i32 0, i32 2
  %492 = load i32, ptr %491, align 8, !tbaa !27
  store i32 %492, ptr %2, align 4, !tbaa !5
  %493 = load ptr, ptr %22, align 8, !tbaa !11
  store ptr %493, ptr %18, align 8, !tbaa !11
  br label %494

494:                                              ; preds = %539, %486
  %495 = load ptr, ptr %18, align 8, !tbaa !11
  %496 = load ptr, ptr %23, align 8, !tbaa !11
  %497 = icmp ne ptr %495, %496
  br i1 %497, label %498, label %541

498:                                              ; preds = %494
  %499 = load i32, ptr %12, align 4, !tbaa !5
  %500 = icmp ne i32 %499, 0
  br i1 %500, label %501, label %505

501:                                              ; preds = %498
  %502 = load ptr, ptr %18, align 8, !tbaa !11
  %503 = getelementptr inbounds %struct.Node, ptr %502, i32 0, i32 23
  %504 = load ptr, ptr %503, align 8, !tbaa !13
  br label %509

505:                                              ; preds = %498
  %506 = load ptr, ptr %18, align 8, !tbaa !11
  %507 = getelementptr inbounds %struct.Node, ptr %506, i32 0, i32 24
  %508 = load ptr, ptr %507, align 8, !tbaa !16
  br label %509

509:                                              ; preds = %505, %501
  %510 = phi ptr [ %504, %501 ], [ %508, %505 ]
  store ptr %510, ptr %19, align 8, !tbaa !11
  %511 = load ptr, ptr %18, align 8, !tbaa !11
  %512 = load ptr, ptr %19, align 8, !tbaa !11
  %513 = load ptr, ptr %18, align 8, !tbaa !11
  %514 = getelementptr inbounds %struct.Node, ptr %513, i32 0, i32 18
  store ptr %512, ptr %514, align 8, !tbaa !28
  %515 = getelementptr inbounds %struct.Node, ptr %512, i32 0, i32 17
  store ptr %511, ptr %515, align 8, !tbaa !29
  %516 = load i32, ptr %2, align 4, !tbaa !5
  %517 = load ptr, ptr %18, align 8, !tbaa !11
  %518 = getelementptr inbounds %struct.Node, ptr %517, i32 0, i32 2
  store i32 %516, ptr %518, align 8, !tbaa !27
  %519 = load i32, ptr %12, align 4, !tbaa !5
  %520 = icmp ne i32 %519, 0
  br i1 %520, label %521, label %525

521:                                              ; preds = %509
  %522 = load ptr, ptr %18, align 8, !tbaa !11
  %523 = getelementptr inbounds %struct.Node, ptr %522, i32 0, i32 6
  %524 = load i32, ptr %523, align 8, !tbaa !25
  br label %529

525:                                              ; preds = %509
  %526 = load ptr, ptr %19, align 8, !tbaa !11
  %527 = getelementptr inbounds %struct.Node, ptr %526, i32 0, i32 6
  %528 = load i32, ptr %527, align 8, !tbaa !25
  br label %529

529:                                              ; preds = %525, %521
  %530 = phi i32 [ %524, %521 ], [ %528, %525 ]
  %531 = load ptr, ptr %18, align 8, !tbaa !11
  %532 = getelementptr inbounds %struct.Node, ptr %531, i32 0, i32 5
  store i32 %530, ptr %532, align 4, !tbaa !22
  %533 = load i32, ptr %2, align 4, !tbaa !5
  %534 = add nsw i32 %533, 1
  store i32 %534, ptr %2, align 4, !tbaa !5
  %535 = load i32, ptr %8, align 4, !tbaa !5
  %536 = icmp sgt i32 %534, %535
  br i1 %536, label %537, label %538

537:                                              ; preds = %529
  store i32 1, ptr %2, align 4, !tbaa !5
  br label %538

538:                                              ; preds = %537, %529
  br label %539

539:                                              ; preds = %538
  %540 = load ptr, ptr %19, align 8, !tbaa !11
  store ptr %540, ptr %18, align 8, !tbaa !11
  br label %494, !llvm.loop !37

541:                                              ; preds = %494
  br label %610

542:                                              ; preds = %482
  store i32 1, ptr %4, align 4, !tbaa !5
  %543 = load i64, ptr %17, align 8, !tbaa !9
  %544 = load i64, ptr %14, align 8, !tbaa !9
  %545 = add nsw i64 %544, %543
  store i64 %545, ptr %14, align 8, !tbaa !9
  %546 = load ptr, ptr %22, align 8, !tbaa !11
  store ptr %546, ptr %18, align 8, !tbaa !11
  br label %547

547:                                              ; preds = %583, %542
  %548 = load ptr, ptr %18, align 8, !tbaa !11
  %549 = load ptr, ptr %23, align 8, !tbaa !11
  %550 = icmp ne ptr %548, %549
  br i1 %550, label %551, label %587

551:                                              ; preds = %547
  %552 = load i32, ptr %12, align 4, !tbaa !5
  %553 = icmp ne i32 %552, 0
  br i1 %553, label %554, label %567

554:                                              ; preds = %551
  %555 = load ptr, ptr %18, align 8, !tbaa !11
  %556 = load ptr, ptr %18, align 8, !tbaa !11
  %557 = getelementptr inbounds %struct.Node, ptr %556, i32 0, i32 18
  %558 = load ptr, ptr %557, align 8, !tbaa !28
  %559 = load ptr, ptr %18, align 8, !tbaa !11
  %560 = getelementptr inbounds %struct.Node, ptr %559, i32 0, i32 23
  store ptr %558, ptr %560, align 8, !tbaa !13
  %561 = getelementptr inbounds %struct.Node, ptr %558, i32 0, i32 24
  store ptr %555, ptr %561, align 8, !tbaa !16
  %562 = load ptr, ptr %18, align 8, !tbaa !11
  %563 = getelementptr inbounds %struct.Node, ptr %562, i32 0, i32 5
  %564 = load i32, ptr %563, align 4, !tbaa !22
  %565 = load ptr, ptr %18, align 8, !tbaa !11
  %566 = getelementptr inbounds %struct.Node, ptr %565, i32 0, i32 6
  store i32 %564, ptr %566, align 8, !tbaa !25
  br label %582

567:                                              ; preds = %551
  %568 = load ptr, ptr %18, align 8, !tbaa !11
  %569 = load ptr, ptr %18, align 8, !tbaa !11
  %570 = getelementptr inbounds %struct.Node, ptr %569, i32 0, i32 18
  %571 = load ptr, ptr %570, align 8, !tbaa !28
  %572 = load ptr, ptr %18, align 8, !tbaa !11
  %573 = getelementptr inbounds %struct.Node, ptr %572, i32 0, i32 24
  store ptr %571, ptr %573, align 8, !tbaa !16
  %574 = getelementptr inbounds %struct.Node, ptr %571, i32 0, i32 23
  store ptr %568, ptr %574, align 8, !tbaa !13
  %575 = load ptr, ptr %18, align 8, !tbaa !11
  %576 = getelementptr inbounds %struct.Node, ptr %575, i32 0, i32 5
  %577 = load i32, ptr %576, align 4, !tbaa !22
  %578 = load ptr, ptr %18, align 8, !tbaa !11
  %579 = getelementptr inbounds %struct.Node, ptr %578, i32 0, i32 24
  %580 = load ptr, ptr %579, align 8, !tbaa !16
  %581 = getelementptr inbounds %struct.Node, ptr %580, i32 0, i32 6
  store i32 %577, ptr %581, align 8, !tbaa !25
  br label %582

582:                                              ; preds = %567, %554
  br label %583

583:                                              ; preds = %582
  %584 = load ptr, ptr %18, align 8, !tbaa !11
  %585 = getelementptr inbounds %struct.Node, ptr %584, i32 0, i32 18
  %586 = load ptr, ptr %585, align 8, !tbaa !28
  store ptr %586, ptr %18, align 8, !tbaa !11
  br label %547, !llvm.loop !38

587:                                              ; preds = %547
  %588 = load i32, ptr %12, align 4, !tbaa !5
  %589 = icmp ne i32 %588, 0
  br i1 %589, label %590, label %596

590:                                              ; preds = %587
  %591 = load ptr, ptr %18, align 8, !tbaa !11
  %592 = getelementptr inbounds %struct.Node, ptr %591, i32 0, i32 17
  %593 = load ptr, ptr %592, align 8, !tbaa !29
  %594 = load ptr, ptr %23, align 8, !tbaa !11
  %595 = getelementptr inbounds %struct.Node, ptr %594, i32 0, i32 24
  store ptr %593, ptr %595, align 8, !tbaa !16
  br label %609

596:                                              ; preds = %587
  %597 = load ptr, ptr %18, align 8, !tbaa !11
  %598 = getelementptr inbounds %struct.Node, ptr %597, i32 0, i32 17
  %599 = load ptr, ptr %598, align 8, !tbaa !29
  %600 = load ptr, ptr %23, align 8, !tbaa !11
  %601 = getelementptr inbounds %struct.Node, ptr %600, i32 0, i32 23
  store ptr %599, ptr %601, align 8, !tbaa !13
  %602 = load ptr, ptr %18, align 8, !tbaa !11
  %603 = getelementptr inbounds %struct.Node, ptr %602, i32 0, i32 17
  %604 = load ptr, ptr %603, align 8, !tbaa !29
  %605 = getelementptr inbounds %struct.Node, ptr %604, i32 0, i32 5
  %606 = load i32, ptr %605, align 4, !tbaa !22
  %607 = load ptr, ptr %23, align 8, !tbaa !11
  %608 = getelementptr inbounds %struct.Node, ptr %607, i32 0, i32 6
  store i32 %606, ptr %608, align 8, !tbaa !25
  br label %609

609:                                              ; preds = %596, %590
  br label %610

610:                                              ; preds = %609, %541
  %611 = load i32, ptr %12, align 4, !tbaa !5
  %612 = icmp ne i32 %611, 0
  br i1 %612, label %613, label %615

613:                                              ; preds = %610
  %614 = load ptr, ptr %23, align 8, !tbaa !11
  br label %617

615:                                              ; preds = %610
  %616 = load ptr, ptr %22, align 8, !tbaa !11
  br label %617

617:                                              ; preds = %615, %613
  %618 = phi ptr [ %614, %613 ], [ %616, %615 ]
  store ptr %618, ptr %24, align 8, !tbaa !11
  br label %619

619:                                              ; preds = %617, %479
  br label %620

620:                                              ; preds = %619
  %621 = load ptr, ptr %22, align 8, !tbaa !11
  %622 = icmp ne ptr %621, null
  br i1 %622, label %285, label %623, !llvm.loop !39

623:                                              ; preds = %620
  %624 = load i64, ptr %13, align 8, !tbaa !9
  %625 = load i64, ptr %14, align 8, !tbaa !9
  %626 = icmp slt i64 %624, %625
  br i1 %626, label %627, label %630

627:                                              ; preds = %623
  %628 = load i32, ptr %3, align 4, !tbaa !5
  %629 = icmp ne i32 %628, 0
  br i1 %629, label %648, label %643

630:                                              ; preds = %623
  %631 = load i64, ptr %14, align 8, !tbaa !9
  %632 = load i64, ptr %13, align 8, !tbaa !9
  %633 = icmp slt i64 %631, %632
  br i1 %633, label %634, label %637

634:                                              ; preds = %630
  %635 = load i32, ptr %4, align 4, !tbaa !5
  %636 = icmp ne i32 %635, 0
  br i1 %636, label %648, label %643

637:                                              ; preds = %630
  %638 = load i32, ptr %3, align 4, !tbaa !5
  %639 = icmp ne i32 %638, 0
  br i1 %639, label %640, label %643

640:                                              ; preds = %637
  %641 = load i32, ptr %4, align 4, !tbaa !5
  %642 = icmp ne i32 %641, 0
  br i1 %642, label %648, label %643

643:                                              ; preds = %640, %637, %634, %627
  %644 = load i64, ptr %16, align 8, !tbaa !9
  %645 = load i32, ptr @Precision, align 4, !tbaa !5
  %646 = sext i32 %645 to i64
  %647 = sdiv i64 %644, %646
  store i64 %647, ptr %1, align 8
  store i32 1, ptr %26, align 4
  br label %834

648:                                              ; preds = %640, %634, %627
  %649 = load ptr, ptr @FirstNode, align 8, !tbaa !11
  store ptr %649, ptr %18, align 8, !tbaa !11
  br label %650

650:                                              ; preds = %653, %648
  %651 = load ptr, ptr %18, align 8, !tbaa !11
  %652 = getelementptr inbounds %struct.Node, ptr %651, i32 0, i32 25
  store ptr null, ptr %652, align 8, !tbaa !40
  br label %653

653:                                              ; preds = %650
  %654 = load ptr, ptr %18, align 8, !tbaa !11
  %655 = getelementptr inbounds %struct.Node, ptr %654, i32 0, i32 16
  %656 = load ptr, ptr %655, align 8, !tbaa !17
  store ptr %656, ptr %18, align 8, !tbaa !11
  %657 = load ptr, ptr @FirstNode, align 8, !tbaa !11
  %658 = icmp ne ptr %656, %657
  br i1 %658, label %650, label %659, !llvm.loop !41

659:                                              ; preds = %653
  %660 = load ptr, ptr %24, align 8, !tbaa !11
  store ptr %660, ptr %18, align 8, !tbaa !11
  %661 = load ptr, ptr %18, align 8, !tbaa !11
  %662 = load ptr, ptr %18, align 8, !tbaa !11
  %663 = getelementptr inbounds %struct.Node, ptr %662, i32 0, i32 25
  store ptr %661, ptr %663, align 8, !tbaa !40
  br label %664

664:                                              ; preds = %781, %659
  %665 = load ptr, ptr %18, align 8, !tbaa !11
  %666 = getelementptr inbounds %struct.Node, ptr %665, i32 0, i32 16
  %667 = load ptr, ptr %666, align 8, !tbaa !17
  %668 = getelementptr inbounds %struct.Node, ptr %667, i32 0, i32 25
  %669 = load ptr, ptr %668, align 8, !tbaa !40
  %670 = icmp ne ptr %669, null
  br i1 %670, label %689, label %671

671:                                              ; preds = %664
  %672 = load ptr, ptr %18, align 8, !tbaa !11
  %673 = getelementptr inbounds %struct.Node, ptr %672, i32 0, i32 3
  %674 = load i32, ptr %673, align 4, !tbaa !23
  %675 = icmp ne i32 %674, 0
  br i1 %675, label %676, label %683

676:                                              ; preds = %671
  %677 = load ptr, ptr %18, align 8, !tbaa !11
  %678 = getelementptr inbounds %struct.Node, ptr %677, i32 0, i32 16
  %679 = load ptr, ptr %678, align 8, !tbaa !17
  %680 = getelementptr inbounds %struct.Node, ptr %679, i32 0, i32 3
  %681 = load i32, ptr %680, align 4, !tbaa !23
  %682 = icmp ne i32 %681, 0
  br i1 %682, label %689, label %683

683:                                              ; preds = %676, %671
  %684 = load ptr, ptr %18, align 8, !tbaa !11
  %685 = getelementptr inbounds %struct.Node, ptr %684, i32 0, i32 16
  %686 = load ptr, ptr %685, align 8, !tbaa !17
  %687 = load ptr, ptr %18, align 8, !tbaa !11
  %688 = getelementptr inbounds %struct.Node, ptr %687, i32 0, i32 18
  store ptr %686, ptr %688, align 8, !tbaa !28
  br label %777

689:                                              ; preds = %676, %664
  %690 = load ptr, ptr %18, align 8, !tbaa !11
  %691 = getelementptr inbounds %struct.Node, ptr %690, i32 0, i32 15
  %692 = load ptr, ptr %691, align 8, !tbaa !18
  %693 = getelementptr inbounds %struct.Node, ptr %692, i32 0, i32 25
  %694 = load ptr, ptr %693, align 8, !tbaa !40
  %695 = icmp ne ptr %694, null
  br i1 %695, label %714, label %696

696:                                              ; preds = %689
  %697 = load ptr, ptr %18, align 8, !tbaa !11
  %698 = getelementptr inbounds %struct.Node, ptr %697, i32 0, i32 3
  %699 = load i32, ptr %698, align 4, !tbaa !23
  %700 = icmp ne i32 %699, 0
  br i1 %700, label %701, label %708

701:                                              ; preds = %696
  %702 = load ptr, ptr %18, align 8, !tbaa !11
  %703 = getelementptr inbounds %struct.Node, ptr %702, i32 0, i32 15
  %704 = load ptr, ptr %703, align 8, !tbaa !18
  %705 = getelementptr inbounds %struct.Node, ptr %704, i32 0, i32 3
  %706 = load i32, ptr %705, align 4, !tbaa !23
  %707 = icmp ne i32 %706, 0
  br i1 %707, label %714, label %708

708:                                              ; preds = %701, %696
  %709 = load ptr, ptr %18, align 8, !tbaa !11
  %710 = getelementptr inbounds %struct.Node, ptr %709, i32 0, i32 15
  %711 = load ptr, ptr %710, align 8, !tbaa !18
  %712 = load ptr, ptr %18, align 8, !tbaa !11
  %713 = getelementptr inbounds %struct.Node, ptr %712, i32 0, i32 18
  store ptr %711, ptr %713, align 8, !tbaa !28
  br label %776

714:                                              ; preds = %701, %689
  %715 = load i64, ptr %13, align 8, !tbaa !9
  %716 = load i64, ptr %14, align 8, !tbaa !9
  %717 = icmp sle i64 %715, %716
  br i1 %717, label %718, label %743

718:                                              ; preds = %714
  %719 = load ptr, ptr %18, align 8, !tbaa !11
  %720 = getelementptr inbounds %struct.Node, ptr %719, i32 0, i32 18
  %721 = load ptr, ptr %720, align 8, !tbaa !28
  %722 = getelementptr inbounds %struct.Node, ptr %721, i32 0, i32 25
  %723 = load ptr, ptr %722, align 8, !tbaa !40
  %724 = icmp ne ptr %723, null
  br i1 %724, label %725, label %742

725:                                              ; preds = %718
  %726 = load ptr, ptr %18, align 8, !tbaa !11
  %727 = getelementptr inbounds %struct.Node, ptr %726, i32 0, i32 17
  %728 = load ptr, ptr %727, align 8, !tbaa !29
  %729 = getelementptr inbounds %struct.Node, ptr %728, i32 0, i32 25
  %730 = load ptr, ptr %729, align 8, !tbaa !40
  %731 = icmp ne ptr %730, null
  br i1 %731, label %736, label %732

732:                                              ; preds = %725
  %733 = load ptr, ptr %18, align 8, !tbaa !11
  %734 = getelementptr inbounds %struct.Node, ptr %733, i32 0, i32 17
  %735 = load ptr, ptr %734, align 8, !tbaa !29
  br label %738

736:                                              ; preds = %725
  %737 = load ptr, ptr %24, align 8, !tbaa !11
  br label %738

738:                                              ; preds = %736, %732
  %739 = phi ptr [ %735, %732 ], [ %737, %736 ]
  %740 = load ptr, ptr %18, align 8, !tbaa !11
  %741 = getelementptr inbounds %struct.Node, ptr %740, i32 0, i32 18
  store ptr %739, ptr %741, align 8, !tbaa !28
  br label %742

742:                                              ; preds = %738, %718
  br label %775

743:                                              ; preds = %714
  %744 = load ptr, ptr %18, align 8, !tbaa !11
  %745 = getelementptr inbounds %struct.Node, ptr %744, i32 0, i32 23
  %746 = load ptr, ptr %745, align 8, !tbaa !13
  %747 = getelementptr inbounds %struct.Node, ptr %746, i32 0, i32 25
  %748 = load ptr, ptr %747, align 8, !tbaa !40
  %749 = icmp ne ptr %748, null
  br i1 %749, label %756, label %750

750:                                              ; preds = %743
  %751 = load ptr, ptr %18, align 8, !tbaa !11
  %752 = getelementptr inbounds %struct.Node, ptr %751, i32 0, i32 23
  %753 = load ptr, ptr %752, align 8, !tbaa !13
  %754 = load ptr, ptr %18, align 8, !tbaa !11
  %755 = getelementptr inbounds %struct.Node, ptr %754, i32 0, i32 18
  store ptr %753, ptr %755, align 8, !tbaa !28
  br label %774

756:                                              ; preds = %743
  %757 = load ptr, ptr %18, align 8, !tbaa !11
  %758 = getelementptr inbounds %struct.Node, ptr %757, i32 0, i32 24
  %759 = load ptr, ptr %758, align 8, !tbaa !16
  %760 = getelementptr inbounds %struct.Node, ptr %759, i32 0, i32 25
  %761 = load ptr, ptr %760, align 8, !tbaa !40
  %762 = icmp ne ptr %761, null
  br i1 %762, label %769, label %763

763:                                              ; preds = %756
  %764 = load ptr, ptr %18, align 8, !tbaa !11
  %765 = getelementptr inbounds %struct.Node, ptr %764, i32 0, i32 24
  %766 = load ptr, ptr %765, align 8, !tbaa !16
  %767 = load ptr, ptr %18, align 8, !tbaa !11
  %768 = getelementptr inbounds %struct.Node, ptr %767, i32 0, i32 18
  store ptr %766, ptr %768, align 8, !tbaa !28
  br label %773

769:                                              ; preds = %756
  %770 = load ptr, ptr %24, align 8, !tbaa !11
  %771 = load ptr, ptr %18, align 8, !tbaa !11
  %772 = getelementptr inbounds %struct.Node, ptr %771, i32 0, i32 18
  store ptr %770, ptr %772, align 8, !tbaa !28
  br label %773

773:                                              ; preds = %769, %763
  br label %774

774:                                              ; preds = %773, %750
  br label %775

775:                                              ; preds = %774, %742
  br label %776

776:                                              ; preds = %775, %708
  br label %777

777:                                              ; preds = %776, %683
  %778 = load ptr, ptr %18, align 8, !tbaa !11
  %779 = load ptr, ptr %18, align 8, !tbaa !11
  %780 = getelementptr inbounds %struct.Node, ptr %779, i32 0, i32 25
  store ptr %778, ptr %780, align 8, !tbaa !40
  br label %781

781:                                              ; preds = %777
  %782 = load ptr, ptr %18, align 8, !tbaa !11
  %783 = getelementptr inbounds %struct.Node, ptr %782, i32 0, i32 18
  %784 = load ptr, ptr %783, align 8, !tbaa !28
  store ptr %784, ptr %18, align 8, !tbaa !11
  %785 = load ptr, ptr %24, align 8, !tbaa !11
  %786 = icmp ne ptr %784, %785
  br i1 %786, label %664, label %787, !llvm.loop !42

787:                                              ; preds = %781
  store i32 0, ptr @Hash, align 4, !tbaa !5
  br label %788

788:                                              ; preds = %813, %787
  %789 = load ptr, ptr %18, align 8, !tbaa !11
  %790 = load ptr, ptr %18, align 8, !tbaa !11
  %791 = getelementptr inbounds %struct.Node, ptr %790, i32 0, i32 18
  %792 = load ptr, ptr %791, align 8, !tbaa !28
  %793 = getelementptr inbounds %struct.Node, ptr %792, i32 0, i32 15
  store ptr %789, ptr %793, align 8, !tbaa !18
  %794 = load ptr, ptr @Rand, align 8, !tbaa !11
  %795 = load ptr, ptr %18, align 8, !tbaa !11
  %796 = getelementptr inbounds %struct.Node, ptr %795, i32 0, i32 0
  %797 = load i32, ptr %796, align 8, !tbaa !43
  %798 = sext i32 %797 to i64
  %799 = getelementptr inbounds i32, ptr %794, i64 %798
  %800 = load i32, ptr %799, align 4, !tbaa !5
  %801 = load ptr, ptr @Rand, align 8, !tbaa !11
  %802 = load ptr, ptr %18, align 8, !tbaa !11
  %803 = getelementptr inbounds %struct.Node, ptr %802, i32 0, i32 18
  %804 = load ptr, ptr %803, align 8, !tbaa !28
  %805 = getelementptr inbounds %struct.Node, ptr %804, i32 0, i32 0
  %806 = load i32, ptr %805, align 8, !tbaa !43
  %807 = sext i32 %806 to i64
  %808 = getelementptr inbounds i32, ptr %801, i64 %807
  %809 = load i32, ptr %808, align 4, !tbaa !5
  %810 = mul i32 %800, %809
  %811 = load i32, ptr @Hash, align 4, !tbaa !5
  %812 = xor i32 %811, %810
  store i32 %812, ptr @Hash, align 4, !tbaa !5
  br label %813

813:                                              ; preds = %788
  %814 = load ptr, ptr %18, align 8, !tbaa !11
  %815 = getelementptr inbounds %struct.Node, ptr %814, i32 0, i32 18
  %816 = load ptr, ptr %815, align 8, !tbaa !28
  %817 = load ptr, ptr %18, align 8, !tbaa !11
  %818 = getelementptr inbounds %struct.Node, ptr %817, i32 0, i32 16
  store ptr %816, ptr %818, align 8, !tbaa !17
  store ptr %816, ptr %18, align 8, !tbaa !11
  %819 = load ptr, ptr %24, align 8, !tbaa !11
  %820 = icmp ne ptr %816, %819
  br i1 %820, label %788, label %821, !llvm.loop !44

821:                                              ; preds = %813
  %822 = load i64, ptr %13, align 8, !tbaa !9
  %823 = load i64, ptr %14, align 8, !tbaa !9
  %824 = icmp sle i64 %822, %823
  br i1 %824, label %825, label %827

825:                                              ; preds = %821
  %826 = load i64, ptr %13, align 8, !tbaa !9
  br label %829

827:                                              ; preds = %821
  %828 = load i64, ptr %14, align 8, !tbaa !9
  br label %829

829:                                              ; preds = %827, %825
  %830 = phi i64 [ %826, %825 ], [ %828, %827 ]
  %831 = load i32, ptr @Precision, align 4, !tbaa !5
  %832 = sext i32 %831 to i64
  %833 = sdiv i64 %830, %832
  store i64 %833, ptr %1, align 8
  store i32 1, ptr %26, align 4
  br label %834

834:                                              ; preds = %829, %643, %117
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %2) #2
  %835 = load i64, ptr %1, align 8
  ret i64 %835
}

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

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

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" }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { 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 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"long long", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"any pointer", !7, i64 0}
!13 = !{!14, !12, i64 128}
!14 = !{!"Node", !6, i64 0, !6, i64 4, !6, i64 8, !6, i64 12, !6, i64 16, !6, i64 20, !6, i64 24, !6, i64 28, !6, i64 32, !6, i64 36, !6, i64 40, !6, i64 44, !6, i64 48, !6, i64 52, !12, i64 56, !12, i64 64, !12, i64 72, !12, i64 80, !12, i64 88, !12, i64 96, !12, i64 104, !12, i64 112, !12, i64 120, !12, i64 128, !12, i64 136, !12, i64 144, !12, i64 152, !12, i64 160, !12, i64 168, !12, i64 176, !12, i64 184, !12, i64 192, !12, i64 200, !12, i64 208, !12, i64 216, !12, i64 224, !12, i64 232, !12, i64 240, !12, i64 248, !12, i64 256, !12, i64 264, !12, i64 272, !12, i64 280, !12, i64 288, !12, i64 296, !12, i64 304, !15, i64 312, !15, i64 320, !15, i64 328, !15, i64 336, !15, i64 344, !15, i64 352, !7, i64 360, !7, i64 361, !7, i64 362}
!15 = !{!"double", !7, i64 0}
!16 = !{!14, !12, i64 136}
!17 = !{!14, !12, i64 72}
!18 = !{!14, !12, i64 64}
!19 = distinct !{!19, !20}
!20 = !{!"llvm.loop.mustprogress"}
!21 = !{!14, !6, i64 36}
!22 = !{!14, !6, i64 20}
!23 = !{!14, !6, i64 12}
!24 = distinct !{!24, !20}
!25 = !{!14, !6, i64 24}
!26 = distinct !{!26, !20}
!27 = !{!14, !6, i64 8}
!28 = !{!14, !12, i64 88}
!29 = !{!14, !12, i64 80}
!30 = distinct !{!30, !20}
!31 = distinct !{!31, !20}
!32 = distinct !{!32, !20}
!33 = distinct !{!33, !20}
!34 = distinct !{!34, !20}
!35 = distinct !{!35, !20}
!36 = distinct !{!36, !20}
!37 = distinct !{!37, !20}
!38 = distinct !{!38, !20}
!39 = distinct !{!39, !20}
!40 = !{!14, !12, i64 144}
!41 = distinct !{!41, !20}
!42 = distinct !{!42, !20}
!43 = !{!14, !6, i64 0}
!44 = distinct !{!44, !20}


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

@FirstNode = external dso_local local_unnamed_addr global ptr, align 8
@C = external dso_local local_unnamed_addr global ptr, align 8
@Precision = external dso_local local_unnamed_addr global i32, align 4
@Hash = external dso_local local_unnamed_addr global i32, align 4
@Rand = external dso_local local_unnamed_addr global ptr, align 8

; Function Attrs: nounwind uwtable
define dso_local i64 @MergeWithTour() local_unnamed_addr #0 {
  %1 = load ptr, ptr @FirstNode, align 8, !tbaa !5
  br label %2

2:                                                ; preds = %2, %0
  %.0266 = phi ptr [ %1, %0 ], [ %7, %2 ]
  %3 = getelementptr inbounds i8, ptr %.0266, i64 128
  %4 = load ptr, ptr %3, align 8, !tbaa !9
  %5 = getelementptr inbounds i8, ptr %4, i64 136
  store ptr %.0266, ptr %5, align 8, !tbaa !13
  %6 = getelementptr inbounds i8, ptr %.0266, i64 72
  %7 = load ptr, ptr %6, align 8, !tbaa !14
  %8 = getelementptr inbounds i8, ptr %7, i64 64
  store ptr %.0266, ptr %8, align 8, !tbaa !15
  %.not = icmp eq ptr %7, %1
  br i1 %.not, label %.preheader398, label %2, !llvm.loop !16

.preheader398:                                    ; preds = %2, %43
  %.0300 = phi i32 [ %.1301, %43 ], [ 0, %2 ]
  %.0284 = phi i64 [ %22, %43 ], [ 0, %2 ]
  %.1267 = phi ptr [ %15, %43 ], [ %7, %2 ]
  %.0249 = phi ptr [ %.1250, %43 ], [ null, %2 ]
  %9 = load ptr, ptr @C, align 8, !tbaa !5
  %10 = getelementptr inbounds i8, ptr %.1267, i64 72
  %11 = load ptr, ptr %10, align 8, !tbaa !14
  %12 = tail call i32 %9(ptr noundef nonnull %.1267, ptr noundef %11) #2
  %13 = getelementptr inbounds i8, ptr %.1267, i64 36
  %14 = load i32, ptr %13, align 4, !tbaa !18
  %15 = load ptr, ptr %10, align 8, !tbaa !14
  %16 = getelementptr inbounds i8, ptr %15, i64 36
  %17 = load i32, ptr %16, align 4, !tbaa !18
  %18 = add i32 %14, %17
  %19 = sub i32 %12, %18
  %20 = getelementptr inbounds i8, ptr %.1267, i64 20
  store i32 %19, ptr %20, align 4, !tbaa !19
  %21 = sext i32 %19 to i64
  %22 = add nsw i64 %.0284, %21
  %23 = getelementptr inbounds i8, ptr %.1267, i64 136
  %24 = load ptr, ptr %23, align 8, !tbaa !13
  %25 = icmp eq ptr %15, %24
  br i1 %25, label %30, label %26

26:                                               ; preds = %.preheader398
  %27 = getelementptr inbounds i8, ptr %.1267, i64 128
  %28 = load ptr, ptr %27, align 8, !tbaa !9
  %29 = icmp eq ptr %15, %28
  br i1 %29, label %30, label %40

30:                                               ; preds = %26, %.preheader398
  %31 = getelementptr inbounds i8, ptr %.1267, i64 64
  %32 = load ptr, ptr %31, align 8, !tbaa !15
  %33 = icmp eq ptr %32, %24
  br i1 %33, label %38, label %34

34:                                               ; preds = %30
  %35 = getelementptr inbounds i8, ptr %.1267, i64 128
  %36 = load ptr, ptr %35, align 8, !tbaa !9
  %37 = icmp eq ptr %32, %36
  br i1 %37, label %38, label %40

38:                                               ; preds = %34, %30
  %39 = getelementptr inbounds i8, ptr %.1267, i64 12
  store i32 0, ptr %39, align 4, !tbaa !20
  br label %43

40:                                               ; preds = %34, %26
  %41 = getelementptr inbounds i8, ptr %.1267, i64 12
  store i32 1, ptr %41, align 4, !tbaa !20
  %42 = add nsw i32 %.0300, 1
  br label %43

43:                                               ; preds = %38, %40
  %.1301 = phi i32 [ %.0300, %38 ], [ %42, %40 ]
  %.1250 = phi ptr [ %.0249, %38 ], [ %.1267, %40 ]
  %44 = load ptr, ptr @FirstNode, align 8, !tbaa !5
  %.not331 = icmp eq ptr %15, %44
  br i1 %.not331, label %45, label %.preheader398, !llvm.loop !21

45:                                               ; preds = %43
  %46 = icmp eq i32 %.1301, 0
  br i1 %46, label %354, label %.preheader397

.preheader397:                                    ; preds = %45, %73
  %47 = phi ptr [ %74, %73 ], [ %44, %45 ]
  %.0280 = phi i64 [ %78, %73 ], [ 0, %45 ]
  %.2268 = phi ptr [ %80, %73 ], [ %15, %45 ]
  %48 = getelementptr inbounds i8, ptr %.2268, i64 128
  %49 = load ptr, ptr %48, align 8, !tbaa !9
  %50 = getelementptr inbounds i8, ptr %.2268, i64 64
  %51 = load ptr, ptr %50, align 8, !tbaa !15
  %52 = icmp eq ptr %49, %51
  br i1 %52, label %53, label %56

53:                                               ; preds = %.preheader397
  %54 = getelementptr inbounds i8, ptr %51, i64 20
  %55 = load i32, ptr %54, align 4, !tbaa !19
  br label %73

56:                                               ; preds = %.preheader397
  %57 = getelementptr inbounds i8, ptr %.2268, i64 72
  %58 = load ptr, ptr %57, align 8, !tbaa !14
  %59 = icmp eq ptr %49, %58
  br i1 %59, label %60, label %63

60:                                               ; preds = %56
  %61 = getelementptr inbounds i8, ptr %.2268, i64 20
  %62 = load i32, ptr %61, align 4, !tbaa !19
  br label %73

63:                                               ; preds = %56
  %64 = load ptr, ptr @C, align 8, !tbaa !5
  %65 = tail call i32 %64(ptr noundef nonnull %.2268, ptr noundef %49) #2
  %66 = getelementptr inbounds i8, ptr %.2268, i64 36
  %67 = load i32, ptr %66, align 4, !tbaa !18
  %68 = load ptr, ptr %48, align 8, !tbaa !9
  %69 = getelementptr inbounds i8, ptr %68, i64 36
  %70 = load i32, ptr %69, align 4, !tbaa !18
  %71 = add i32 %67, %70
  %72 = sub i32 %65, %71
  %.pre = load ptr, ptr @FirstNode, align 8, !tbaa !5
  br label %73

73:                                               ; preds = %60, %63, %53
  %74 = phi ptr [ %47, %53 ], [ %47, %60 ], [ %.pre, %63 ]
  %75 = phi i32 [ %55, %53 ], [ %62, %60 ], [ %72, %63 ]
  %76 = getelementptr inbounds i8, ptr %.2268, i64 24
  store i32 %75, ptr %76, align 8, !tbaa !22
  %77 = sext i32 %75 to i64
  %78 = add nsw i64 %.0280, %77
  %79 = getelementptr inbounds i8, ptr %.2268, i64 72
  %80 = load ptr, ptr %79, align 8, !tbaa !14
  %.not332 = icmp eq ptr %80, %74
  br i1 %.not332, label %.preheader396, label %.preheader397, !llvm.loop !23

.preheader396:                                    ; preds = %73, %93
  %.0275 = phi i32 [ %.1276, %93 ], [ 0, %73 ]
  %.3269 = phi ptr [ %95, %93 ], [ %.1250, %73 ]
  %.0 = phi ptr [ %.1, %93 ], [ null, %73 ]
  %81 = getelementptr inbounds i8, ptr %.3269, i64 12
  %82 = load i32, ptr %81, align 4, !tbaa !20
  %.not333 = icmp eq i32 %82, 0
  br i1 %.not333, label %93, label %83

83:                                               ; preds = %.preheader396
  %84 = add nsw i32 %.0275, 1
  %85 = getelementptr inbounds i8, ptr %.3269, i64 8
  store i32 %84, ptr %85, align 8, !tbaa !24
  %.not334 = icmp eq ptr %.0, null
  br i1 %.not334, label %93, label %86

86:                                               ; preds = %83
  %87 = getelementptr inbounds i8, ptr %.0, i64 88
  store ptr %.3269, ptr %87, align 8, !tbaa !25
  %88 = getelementptr inbounds i8, ptr %.3269, i64 80
  store ptr %.0, ptr %88, align 8, !tbaa !26
  %89 = getelementptr inbounds i8, ptr %.3269, i64 64
  %90 = load ptr, ptr %89, align 8, !tbaa !15
  %.not335 = icmp eq ptr %.0, %90
  br i1 %.not335, label %93, label %91

91:                                               ; preds = %86
  %92 = getelementptr inbounds i8, ptr %.0, i64 20
  store i32 0, ptr %92, align 4, !tbaa !19
  br label %93

93:                                               ; preds = %83, %91, %86, %.preheader396
  %.1276 = phi i32 [ %.0275, %.preheader396 ], [ %84, %86 ], [ %84, %91 ], [ %84, %83 ]
  %.1 = phi ptr [ %.0, %.preheader396 ], [ %.3269, %86 ], [ %.3269, %91 ], [ %.3269, %83 ]
  %94 = getelementptr inbounds i8, ptr %.3269, i64 72
  %95 = load ptr, ptr %94, align 8, !tbaa !14
  %.not336 = icmp eq ptr %95, %.1250
  br i1 %.not336, label %96, label %.preheader396, !llvm.loop !27

96:                                               ; preds = %93
  %97 = getelementptr inbounds i8, ptr %.1, i64 88
  store ptr %.1250, ptr %97, align 8, !tbaa !25
  %98 = getelementptr inbounds i8, ptr %.1250, i64 80
  store ptr %.1, ptr %98, align 8, !tbaa !26
  %99 = getelementptr inbounds i8, ptr %.1250, i64 64
  %100 = load ptr, ptr %99, align 8, !tbaa !15
  %.not337 = icmp eq ptr %.1, %100
  br i1 %.not337, label %.preheader537, label %101

101:                                              ; preds = %96
  %102 = getelementptr inbounds i8, ptr %.1, i64 20
  store i32 0, ptr %102, align 4, !tbaa !19
  br label %.preheader537

.preheader537:                                    ; preds = %101, %96
  br label %103

103:                                              ; preds = %.preheader537, %113
  %.4 = phi ptr [ %115, %113 ], [ %.1250, %.preheader537 ]
  %.2 = phi ptr [ %.3, %113 ], [ null, %.preheader537 ]
  %104 = getelementptr inbounds i8, ptr %.4, i64 12
  %105 = load i32, ptr %104, align 4, !tbaa !20
  %.not338 = icmp eq i32 %105, 0
  br i1 %.not338, label %113, label %106

106:                                              ; preds = %103
  %.not339 = icmp eq ptr %.2, null
  br i1 %.not339, label %113, label %107

107:                                              ; preds = %106
  %108 = getelementptr inbounds i8, ptr %.2, i64 128
  store ptr %.4, ptr %108, align 8, !tbaa !9
  %109 = getelementptr inbounds i8, ptr %.4, i64 136
  %110 = load ptr, ptr %109, align 8, !tbaa !13
  %.not340 = icmp eq ptr %.2, %110
  br i1 %.not340, label %113, label %111

111:                                              ; preds = %107
  store ptr %.2, ptr %109, align 8, !tbaa !13
  %112 = getelementptr inbounds i8, ptr %.2, i64 24
  store i32 0, ptr %112, align 8, !tbaa !22
  br label %113

113:                                              ; preds = %106, %111, %107, %103
  %.3 = phi ptr [ %.2, %103 ], [ %.4, %107 ], [ %.4, %111 ], [ %.4, %106 ]
  %114 = getelementptr inbounds i8, ptr %.4, i64 128
  %115 = load ptr, ptr %114, align 8, !tbaa !9
  %.not341 = icmp eq ptr %115, %.1250
  br i1 %.not341, label %116, label %103, !llvm.loop !28

116:                                              ; preds = %113
  %117 = getelementptr inbounds i8, ptr %.3, i64 128
  store ptr %.1250, ptr %117, align 8, !tbaa !9
  %118 = getelementptr inbounds i8, ptr %.1250, i64 136
  %119 = load ptr, ptr %118, align 8, !tbaa !13
  %.not342 = icmp eq ptr %.3, %119
  br i1 %.not342, label %122, label %120

120:                                              ; preds = %116
  store ptr %.3, ptr %118, align 8, !tbaa !13
  %121 = getelementptr inbounds i8, ptr %.3, i64 24
  store i32 0, ptr %121, align 8, !tbaa !22
  br label %122

122:                                              ; preds = %120, %116
  %123 = sdiv i32 %.1301, 2
  br label %124

124:                                              ; preds = %.loopexit395, %122
  %.0309 = phi i32 [ 0, %122 ], [ %.1310, %.loopexit395 ]
  %.0306 = phi i32 [ 0, %122 ], [ %.1307, %.loopexit395 ]
  %.0293 = phi i32 [ 3, %122 ], [ %.3298, %.loopexit395 ]
  %.0288 = phi i32 [ 0, %122 ], [ %.4292.fr, %.loopexit395 ]
  %.1285 = phi i64 [ %22, %122 ], [ %.2286, %.loopexit395 ]
  %.1281 = phi i64 [ %78, %122 ], [ %.2282, %.loopexit395 ]
  %.0270 = phi i64 [ 0, %122 ], [ %.4274, %.loopexit395 ]
  %.2251 = phi ptr [ %.1250, %122 ], [ %264, %.loopexit395 ]
  br label %125

125:                                              ; preds = %.loopexit.1, %124
  %.0295 = phi i32 [ %123, %124 ], [ %.2297.1, %.loopexit.1 ]
  %.1289 = phi i32 [ %.0288, %124 ], [ %.3291.1, %.loopexit.1 ]
  %.1271 = phi i64 [ %.0270, %124 ], [ %.3273.1, %.loopexit.1 ]
  %.0263 = phi ptr [ %.2251, %124 ], [ %145, %.loopexit.1 ]
  %.0257 = phi ptr [ null, %124 ], [ %.2259.1, %.loopexit.1 ]
  %.0253 = phi ptr [ null, %124 ], [ %.2255.1, %.loopexit.1 ]
  %126 = getelementptr inbounds i8, ptr %.0263, i64 88
  %127 = load ptr, ptr %126, align 8, !tbaa !25
  %.not343409 = icmp eq ptr %127, %.2251
  br i1 %.not343409, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %125, %.critedge2
  %128 = phi ptr [ %137, %.critedge2 ], [ %127, %125 ]
  %.1264410 = phi ptr [ %128, %.critedge2 ], [ %.0263, %125 ]
  %129 = getelementptr inbounds i8, ptr %.1264410, i64 128
  %130 = load ptr, ptr %129, align 8, !tbaa !5
  %131 = icmp eq ptr %128, %130
  br i1 %131, label %.critedge2, label %132

132:                                              ; preds = %.lr.ph
  %133 = getelementptr inbounds i8, ptr %.1264410, i64 136
  %134 = load ptr, ptr %133, align 8, !tbaa !5
  %135 = icmp eq ptr %128, %134
  br i1 %135, label %.critedge2, label %.critedge

.critedge2:                                       ; preds = %.lr.ph, %132
  %136 = getelementptr inbounds i8, ptr %128, i64 88
  %137 = load ptr, ptr %136, align 8, !tbaa !25
  %.not343 = icmp eq ptr %137, %.2251
  br i1 %.not343, label %._crit_edge, label %.lr.ph, !llvm.loop !29

._crit_edge:                                      ; preds = %.critedge2, %125
  %.1264.lcssa = phi ptr [ %.0263, %125 ], [ %128, %.critedge2 ]
  %.lcssa399 = phi ptr [ %127, %125 ], [ %137, %.critedge2 ]
  %138 = getelementptr inbounds i8, ptr %.1264.lcssa, i64 128
  %139 = load ptr, ptr %138, align 8, !tbaa !5
  %140 = icmp eq ptr %.lcssa399, %139
  br i1 %140, label %218, label %141

141:                                              ; preds = %._crit_edge
  %142 = getelementptr inbounds i8, ptr %.1264.lcssa, i64 136
  %143 = load ptr, ptr %142, align 8, !tbaa !5
  %144 = icmp eq ptr %.lcssa399, %143
  br i1 %144, label %218, label %.critedge

.critedge:                                        ; preds = %132, %141
  %.0261 = phi ptr [ %143, %141 ], [ %134, %132 ]
  %.0261418 = phi ptr [ %139, %141 ], [ %130, %132 ]
  %.1264402 = phi ptr [ %.1264.lcssa, %141 ], [ %.1264410, %132 ]
  %145 = phi ptr [ %.lcssa399, %141 ], [ %128, %132 ]
  %146 = getelementptr inbounds i8, ptr %.1264402, i64 80
  %147 = getelementptr inbounds i8, ptr %.1264402, i64 8
  %148 = getelementptr inbounds i8, ptr %.1264402, i64 24
  %149 = icmp eq ptr %.0261418, %145
  br i1 %149, label %.loopexit, label %150

150:                                              ; preds = %.critedge
  %151 = load ptr, ptr %146, align 8, !tbaa !26
  %152 = icmp eq ptr %.0261418, %151
  br i1 %152, label %.loopexit, label %.preheader394

.preheader394:                                    ; preds = %150
  %smax = tail call i32 @llvm.smax.i32(i32 %.0295, i32 1)
  %153 = add nsw i32 %smax, -1
  br label %154

154:                                              ; preds = %.preheader394, %177
  %.0304 = phi i32 [ %155, %177 ], [ 0, %.preheader394 ]
  %.0302 = phi i32 [ %.1303, %177 ], [ 0, %.preheader394 ]
  %.1262 = phi ptr [ %178, %177 ], [ %.0261418, %.preheader394 ]
  %155 = add nuw nsw i32 %.0304, 1
  %exitcond.not = icmp eq i32 %.0304, %153
  br i1 %exitcond.not, label %.loopexit, label %156

156:                                              ; preds = %154
  %157 = getelementptr inbounds i8, ptr %.1262, i64 8
  %158 = load i32, ptr %157, align 8, !tbaa !24
  %159 = load i32, ptr %147, align 8, !tbaa !24
  %160 = sub nsw i32 %158, %159
  %161 = icmp slt i32 %160, 0
  %162 = select i1 %161, i32 %.1301, i32 0
  %spec.select = add nsw i32 %162, %160
  %.not345 = icmp slt i32 %spec.select, %.0295
  br i1 %.not345, label %163, label %.loopexit

163:                                              ; preds = %156
  %164 = icmp sgt i32 %spec.select, %.0302
  br i1 %164, label %165, label %177

165:                                              ; preds = %163
  %166 = icmp eq i32 %spec.select, %155
  br i1 %166, label %.preheader, label %177

.preheader:                                       ; preds = %165
  %.not348412 = icmp eq ptr %.1264402, %.1262
  br i1 %.not348412, label %.loopexit, label %.lr.ph415

.lr.ph415:                                        ; preds = %.preheader, %.lr.ph415
  %.5414 = phi ptr [ %175, %.lr.ph415 ], [ %.1264402, %.preheader ]
  %.0278413 = phi i64 [ %173, %.lr.ph415 ], [ 0, %.preheader ]
  %167 = getelementptr inbounds i8, ptr %.5414, i64 20
  %168 = load i32, ptr %167, align 4, !tbaa !19
  %169 = getelementptr inbounds i8, ptr %.5414, i64 24
  %170 = load i32, ptr %169, align 8, !tbaa !22
  %171 = sub nsw i32 %168, %170
  %172 = sext i32 %171 to i64
  %173 = add nsw i64 %.0278413, %172
  %174 = getelementptr inbounds i8, ptr %.5414, i64 88
  %175 = load ptr, ptr %174, align 8, !tbaa !25
  %.not348 = icmp eq ptr %175, %.1262
  br i1 %.not348, label %._crit_edge416, label %.lr.ph415, !llvm.loop !30

._crit_edge416:                                   ; preds = %.lr.ph415
  %.not350 = icmp eq i64 %173, 0
  br i1 %.not350, label %.loopexit, label %176

176:                                              ; preds = %._crit_edge416
  br label %.loopexit

177:                                              ; preds = %165, %163
  %.1303 = phi i32 [ %.0302, %163 ], [ %spec.select, %165 ]
  %.in = getelementptr inbounds i8, ptr %.1262, i64 128
  %178 = load ptr, ptr %.in, align 8, !tbaa !5
  %.not347 = icmp eq ptr %178, %.1264402
  br i1 %.not347, label %.loopexit, label %154, !llvm.loop !31

.loopexit:                                        ; preds = %177, %154, %156, %.preheader, %176, %._crit_edge416, %.critedge, %150
  %.2297 = phi i32 [ %.0295, %.critedge ], [ %.0295, %150 ], [ %155, %176 ], [ %.0295, %._crit_edge416 ], [ %.0295, %.preheader ], [ %.0295, %156 ], [ %.0295, %154 ], [ %.0295, %177 ]
  %.3291 = phi i32 [ %.1289, %.critedge ], [ %.1289, %150 ], [ 1, %176 ], [ %.1289, %._crit_edge416 ], [ %.1289, %.preheader ], [ %.1289, %156 ], [ %.1289, %154 ], [ %.1289, %177 ]
  %.3273 = phi i64 [ %.1271, %.critedge ], [ %.1271, %150 ], [ %173, %176 ], [ %.1271, %._crit_edge416 ], [ %.1271, %.preheader ], [ %.1271, %156 ], [ %.1271, %154 ], [ %.1271, %177 ]
  %.2259 = phi ptr [ %.0257, %.critedge ], [ %.0257, %150 ], [ %.1264402, %176 ], [ %.0257, %._crit_edge416 ], [ %.0257, %.preheader ], [ %.0257, %156 ], [ %.0257, %154 ], [ %.0257, %177 ]
  %.2255 = phi ptr [ %.0253, %.critedge ], [ %.0253, %150 ], [ %.1262, %176 ], [ %.0253, %._crit_edge416 ], [ %.0253, %.preheader ], [ %.0253, %156 ], [ %.0253, %154 ], [ %.0253, %177 ]
  %179 = icmp eq ptr %.0261, %145
  br i1 %179, label %.loopexit.1, label %180

180:                                              ; preds = %.loopexit
  %181 = load ptr, ptr %146, align 8, !tbaa !26
  %182 = icmp eq ptr %.0261, %181
  br i1 %182, label %.loopexit.1, label %.preheader394.1

.preheader394.1:                                  ; preds = %180
  %smax.1 = tail call i32 @llvm.smax.i32(i32 %.2297, i32 1)
  %183 = add nsw i32 %smax.1, -1
  br label %184

184:                                              ; preds = %197, %.preheader394.1
  %.0304.1 = phi i32 [ %185, %197 ], [ 0, %.preheader394.1 ]
  %.0302.1 = phi i32 [ %.1303.1, %197 ], [ 0, %.preheader394.1 ]
  %.1262.1 = phi ptr [ %198, %197 ], [ %.0261, %.preheader394.1 ]
  %185 = add nuw nsw i32 %.0304.1, 1
  %exitcond.1.not = icmp eq i32 %.0304.1, %183
  br i1 %exitcond.1.not, label %.loopexit.1, label %186

186:                                              ; preds = %184
  %187 = getelementptr inbounds i8, ptr %.1262.1, i64 8
  %188 = load i32, ptr %187, align 8, !tbaa !24
  %189 = load i32, ptr %147, align 8, !tbaa !24
  %190 = sub nsw i32 %188, %189
  %191 = icmp slt i32 %190, 0
  %192 = select i1 %191, i32 %.1301, i32 0
  %spec.select.1 = add nsw i32 %192, %190
  %.not345.1 = icmp slt i32 %spec.select.1, %.2297
  br i1 %.not345.1, label %193, label %.loopexit.1

193:                                              ; preds = %186
  %194 = icmp sgt i32 %spec.select.1, %.0302.1
  br i1 %194, label %195, label %197

195:                                              ; preds = %193
  %196 = icmp eq i32 %spec.select.1, %185
  br i1 %196, label %.preheader.1, label %197

197:                                              ; preds = %195, %193
  %.1303.1 = phi i32 [ %.0302.1, %193 ], [ %spec.select.1, %195 ]
  %.in.1 = getelementptr inbounds i8, ptr %.1262.1, i64 136
  %198 = load ptr, ptr %.in.1, align 8, !tbaa !5
  %.not347.1 = icmp eq ptr %198, %.1264402
  br i1 %.not347.1, label %.loopexit.1, label %184, !llvm.loop !31

.preheader.1:                                     ; preds = %195
  %.not348412.1 = icmp eq ptr %.1264402, %.1262.1
  br i1 %.not348412.1, label %.loopexit460, label %.lr.ph415.1

.lr.ph415.1:                                      ; preds = %.preheader.1, %.lr.ph415.1
  %.5414.1 = phi ptr [ %207, %.lr.ph415.1 ], [ %.1264402, %.preheader.1 ]
  %.0278413.1 = phi i64 [ %205, %.lr.ph415.1 ], [ 0, %.preheader.1 ]
  %199 = getelementptr inbounds i8, ptr %.5414.1, i64 20
  %200 = load i32, ptr %199, align 4, !tbaa !19
  %201 = getelementptr inbounds i8, ptr %.5414.1, i64 24
  %202 = load i32, ptr %201, align 8, !tbaa !22
  %203 = sub nsw i32 %200, %202
  %204 = sext i32 %203 to i64
  %205 = add nsw i64 %.0278413.1, %204
  %206 = getelementptr inbounds i8, ptr %.5414.1, i64 88
  %207 = load ptr, ptr %206, align 8, !tbaa !25
  %.not348.1 = icmp eq ptr %207, %.1262.1
  br i1 %.not348.1, label %.loopexit460, label %.lr.ph415.1, !llvm.loop !30

.loopexit460:                                     ; preds = %.lr.ph415.1, %.preheader.1
  %.0278.lcssa.1 = phi i64 [ 0, %.preheader.1 ], [ %205, %.lr.ph415.1 ]
  %208 = load i32, ptr %148, align 8, !tbaa !22
  %209 = getelementptr inbounds i8, ptr %.1262.1, i64 24
  %210 = load i32, ptr %209, align 8, !tbaa !22
  %211 = sub nsw i32 %208, %210
  %212 = sext i32 %211 to i64
  %213 = add nsw i64 %.0278.lcssa.1, %212
  %.not350.1 = icmp eq i64 %213, 0
  br i1 %.not350.1, label %.loopexit.1, label %214

214:                                              ; preds = %.loopexit460
  br label %.loopexit.1

.loopexit.1:                                      ; preds = %184, %186, %197, %214, %.loopexit460, %180, %.loopexit
  %.2297.1 = phi i32 [ %.2297, %.loopexit ], [ %.2297, %180 ], [ %185, %214 ], [ %.2297, %.loopexit460 ], [ %.2297, %197 ], [ %.2297, %186 ], [ %.2297, %184 ]
  %.3291.1 = phi i32 [ %.3291, %.loopexit ], [ %.3291, %180 ], [ 0, %214 ], [ %.3291, %.loopexit460 ], [ %.3291, %197 ], [ %.3291, %186 ], [ %.3291, %184 ]
  %.3273.1 = phi i64 [ %.3273, %.loopexit ], [ %.3273, %180 ], [ %213, %214 ], [ %.3273, %.loopexit460 ], [ %.3273, %197 ], [ %.3273, %186 ], [ %.3273, %184 ]
  %.2259.1 = phi ptr [ %.2259, %.loopexit ], [ %.2259, %180 ], [ %.1264402, %214 ], [ %.2259, %.loopexit460 ], [ %.2259, %197 ], [ %.2259, %186 ], [ %.2259, %184 ]
  %.2255.1 = phi ptr [ %.2255, %.loopexit ], [ %.2255, %180 ], [ %.1262.1, %214 ], [ %.2255, %.loopexit460 ], [ %.2255, %197 ], [ %.2255, %186 ], [ %.2255, %184 ]
  %215 = icmp ne ptr %145, %.2251
  %216 = icmp ne i32 %.2297.1, %.0293
  %217 = select i1 %215, i1 %216, i1 false
  br i1 %217, label %125, label %218, !llvm.loop !32

218:                                              ; preds = %._crit_edge, %141, %.loopexit.1
  %.3298 = phi i32 [ %.0295, %._crit_edge ], [ %.0295, %141 ], [ %.2297.1, %.loopexit.1 ]
  %.4292 = phi i32 [ %.1289, %._crit_edge ], [ %.1289, %141 ], [ %.3291.1, %.loopexit.1 ]
  %.4274 = phi i64 [ %.1271, %._crit_edge ], [ %.1271, %141 ], [ %.3273.1, %.loopexit.1 ]
  %.3260 = phi ptr [ %.0257, %._crit_edge ], [ %.0257, %141 ], [ %.2259.1, %.loopexit.1 ]
  %.3256 = phi ptr [ %.0253, %._crit_edge ], [ %.0253, %141 ], [ %.2255.1, %.loopexit.1 ]
  %.4292.fr = freeze i32 %.4292
  %.not351 = icmp eq ptr %.3260, null
  br i1 %.not351, label %.thread, label %219

219:                                              ; preds = %218
  %220 = icmp sgt i64 %.4274, 0
  %.not355433 = icmp eq ptr %.3260, %.3256
  br i1 %220, label %221, label %239

221:                                              ; preds = %219
  %222 = sub nsw i64 %.1285, %.4274
  br i1 %.not355433, label %.loopexit395, label %.lr.ph437

.lr.ph437:                                        ; preds = %221
  %223 = getelementptr inbounds i8, ptr %.3260, i64 8
  %224 = load i32, ptr %223, align 8, !tbaa !24
  %.not374 = icmp eq i32 %.4292.fr, 0
  %.in375.v = select i1 %.not374, i64 136, i64 128
  br i1 %.not374, label %.lr.ph437.split.us, label %.lr.ph437.split

.lr.ph437.split.us:                               ; preds = %.lr.ph437, %.lr.ph437.split.us
  %.6435.us = phi ptr [ %225, %.lr.ph437.split.us ], [ %.3260, %.lr.ph437 ]
  %.2277434.us = phi i32 [ %spec.store.select.us, %.lr.ph437.split.us ], [ %224, %.lr.ph437 ]
  %.in375.us = getelementptr inbounds i8, ptr %.6435.us, i64 %.in375.v
  %225 = load ptr, ptr %.in375.us, align 8, !tbaa !5
  %226 = getelementptr inbounds i8, ptr %.6435.us, i64 88
  store ptr %225, ptr %226, align 8, !tbaa !25
  %227 = getelementptr inbounds i8, ptr %225, i64 80
  store ptr %.6435.us, ptr %227, align 8, !tbaa !26
  %228 = getelementptr inbounds i8, ptr %.6435.us, i64 8
  store i32 %.2277434.us, ptr %228, align 8, !tbaa !24
  %.in376.us = getelementptr inbounds i8, ptr %225, i64 24
  %229 = load i32, ptr %.in376.us, align 8, !tbaa !22
  %230 = getelementptr inbounds i8, ptr %.6435.us, i64 20
  store i32 %229, ptr %230, align 4, !tbaa !19
  %231 = add nsw i32 %.2277434.us, 1
  %.not377.us = icmp slt i32 %.2277434.us, %.1301
  %spec.store.select.us = select i1 %.not377.us, i32 %231, i32 1
  %.not355.us = icmp eq ptr %225, %.3256
  br i1 %.not355.us, label %.loopexit395, label %.lr.ph437.split.us, !llvm.loop !33

.lr.ph437.split:                                  ; preds = %.lr.ph437, %.lr.ph437.split
  %.6435 = phi ptr [ %232, %.lr.ph437.split ], [ %.3260, %.lr.ph437 ]
  %.2277434 = phi i32 [ %spec.store.select, %.lr.ph437.split ], [ %224, %.lr.ph437 ]
  %.in375 = getelementptr inbounds i8, ptr %.6435, i64 %.in375.v
  %232 = load ptr, ptr %.in375, align 8, !tbaa !5
  %233 = getelementptr inbounds i8, ptr %.6435, i64 88
  store ptr %232, ptr %233, align 8, !tbaa !25
  %234 = getelementptr inbounds i8, ptr %232, i64 80
  store ptr %.6435, ptr %234, align 8, !tbaa !26
  %235 = getelementptr inbounds i8, ptr %.6435, i64 8
  store i32 %.2277434, ptr %235, align 8, !tbaa !24
  %.in376 = getelementptr inbounds i8, ptr %.6435, i64 24
  %236 = load i32, ptr %.in376, align 8, !tbaa !22
  %237 = getelementptr inbounds i8, ptr %.6435, i64 20
  store i32 %236, ptr %237, align 4, !tbaa !19
  %238 = add nsw i32 %.2277434, 1
  %.not377 = icmp slt i32 %.2277434, %.1301
  %spec.store.select = select i1 %.not377, i32 %238, i32 1
  %.not355 = icmp eq ptr %232, %.3256
  br i1 %.not355, label %.loopexit395, label %.lr.ph437.split, !llvm.loop !33

239:                                              ; preds = %219
  %240 = add nsw i64 %.4274, %.1281
  br i1 %.not355433, label %._crit_edge431, label %.lr.ph430

.lr.ph430:                                        ; preds = %239
  %.not354 = icmp eq i32 %.4292.fr, 0
  br i1 %.not354, label %.lr.ph430.split.us, label %.lr.ph430.split

.lr.ph430.split.us:                               ; preds = %.lr.ph430, %.lr.ph430.split.us
  %.7428.us = phi ptr [ %242, %.lr.ph430.split.us ], [ %.3260, %.lr.ph430 ]
  %241 = getelementptr inbounds i8, ptr %.7428.us, i64 88
  %242 = load ptr, ptr %241, align 8, !tbaa !25
  %243 = getelementptr inbounds i8, ptr %.7428.us, i64 136
  store ptr %242, ptr %243, align 8, !tbaa !13
  %244 = getelementptr inbounds i8, ptr %242, i64 128
  store ptr %.7428.us, ptr %244, align 8, !tbaa !9
  %245 = getelementptr inbounds i8, ptr %.7428.us, i64 20
  %246 = load i32, ptr %245, align 4, !tbaa !19
  %247 = getelementptr inbounds i8, ptr %242, i64 24
  store i32 %246, ptr %247, align 8, !tbaa !22
  %.not352.us = icmp eq ptr %242, %.3256
  br i1 %.not352.us, label %._crit_edge431, label %.lr.ph430.split.us, !llvm.loop !34

.lr.ph430.split:                                  ; preds = %.lr.ph430, %.lr.ph430.split
  %.7428 = phi ptr [ %249, %.lr.ph430.split ], [ %.3260, %.lr.ph430 ]
  %248 = getelementptr inbounds i8, ptr %.7428, i64 88
  %249 = load ptr, ptr %248, align 8, !tbaa !25
  %250 = getelementptr inbounds i8, ptr %.7428, i64 128
  store ptr %249, ptr %250, align 8, !tbaa !9
  %251 = getelementptr inbounds i8, ptr %249, i64 136
  store ptr %.7428, ptr %251, align 8, !tbaa !13
  %252 = getelementptr inbounds i8, ptr %.7428, i64 20
  %253 = load i32, ptr %252, align 4, !tbaa !19
  %254 = getelementptr inbounds i8, ptr %.7428, i64 24
  store i32 %253, ptr %254, align 8, !tbaa !22
  %.not352 = icmp eq ptr %249, %.3256
  br i1 %.not352, label %._crit_edge431, label %.lr.ph430.split, !llvm.loop !34

._crit_edge431:                                   ; preds = %.lr.ph430.split, %.lr.ph430.split.us, %239
  %.7.lcssa = phi ptr [ %.3260, %239 ], [ %242, %.lr.ph430.split.us ], [ %249, %.lr.ph430.split ]
  %.not353 = icmp eq i32 %.4292.fr, 0
  %255 = getelementptr inbounds i8, ptr %.7.lcssa, i64 80
  %256 = load ptr, ptr %255, align 8, !tbaa !26
  br i1 %.not353, label %259, label %257

257:                                              ; preds = %._crit_edge431
  %258 = getelementptr inbounds i8, ptr %.3256, i64 136
  store ptr %256, ptr %258, align 8, !tbaa !13
  br label %.loopexit395

259:                                              ; preds = %._crit_edge431
  %260 = getelementptr inbounds i8, ptr %.3256, i64 128
  store ptr %256, ptr %260, align 8, !tbaa !9
  %261 = getelementptr inbounds i8, ptr %256, i64 20
  %262 = load i32, ptr %261, align 4, !tbaa !19
  %263 = getelementptr inbounds i8, ptr %.3256, i64 24
  store i32 %262, ptr %263, align 8, !tbaa !22
  br label %.loopexit395

.loopexit395:                                     ; preds = %.lr.ph437.split, %.lr.ph437.split.us, %221, %259, %257
  %.1310 = phi i32 [ %.0309, %257 ], [ %.0309, %259 ], [ 1, %221 ], [ 1, %.lr.ph437.split.us ], [ 1, %.lr.ph437.split ]
  %.1307 = phi i32 [ 1, %257 ], [ 1, %259 ], [ %.0306, %221 ], [ %.0306, %.lr.ph437.split.us ], [ %.0306, %.lr.ph437.split ]
  %.2286 = phi i64 [ %.1285, %257 ], [ %.1285, %259 ], [ %222, %221 ], [ %222, %.lr.ph437.split.us ], [ %222, %.lr.ph437.split ]
  %.2282 = phi i64 [ %240, %257 ], [ %240, %259 ], [ %.1281, %221 ], [ %.1281, %.lr.ph437.split.us ], [ %.1281, %.lr.ph437.split ]
  %.not356 = icmp eq i32 %.4292.fr, 0
  %264 = select i1 %.not356, ptr %.3260, ptr %.3256
  br label %124

.thread:                                          ; preds = %218
  %265 = icmp slt i64 %.1285, %.1281
  br i1 %265, label %266, label %267

266:                                              ; preds = %.thread
  %.not358 = icmp eq i32 %.0309, 0
  br i1 %.not358, label %354, label %.preheader517

267:                                              ; preds = %.thread
  %268 = icmp slt i64 %.1281, %.1285
  br i1 %268, label %269, label %270

269:                                              ; preds = %267
  %.not357 = icmp eq i32 %.0306, 0
  br i1 %.not357, label %354, label %.preheader517

270:                                              ; preds = %267
  %271 = icmp ne i32 %.0309, 0
  %272 = icmp ne i32 %.0306, 0
  %or.cond = select i1 %271, i1 %272, i1 false
  br i1 %or.cond, label %.preheader517, label %354

.preheader517:                                    ; preds = %270, %269, %266
  br label %273

273:                                              ; preds = %.preheader517, %273
  %.8 = phi ptr [ %276, %273 ], [ %74, %.preheader517 ]
  %274 = getelementptr inbounds i8, ptr %.8, i64 144
  store ptr null, ptr %274, align 8, !tbaa !35
  %275 = getelementptr inbounds i8, ptr %.8, i64 72
  %276 = load ptr, ptr %275, align 8, !tbaa !14
  %.not359 = icmp eq ptr %276, %74
  br i1 %.not359, label %277, label %273, !llvm.loop !36

277:                                              ; preds = %273
  %278 = getelementptr inbounds i8, ptr %.2251, i64 144
  store ptr %.2251, ptr %278, align 8, !tbaa !35
  %.not366 = icmp sgt i64 %.1285, %.1281
  br label %279

279:                                              ; preds = %331, %277
  %.9 = phi ptr [ %.2251, %277 ], [ %332, %331 ]
  %280 = getelementptr inbounds i8, ptr %.9, i64 72
  %281 = load ptr, ptr %280, align 8, !tbaa !14
  %282 = getelementptr inbounds i8, ptr %281, i64 144
  %283 = load ptr, ptr %282, align 8, !tbaa !35
  %.not360 = icmp eq ptr %283, null
  br i1 %.not360, label %284, label %292

284:                                              ; preds = %279
  %285 = getelementptr inbounds i8, ptr %.9, i64 12
  %286 = load i32, ptr %285, align 4, !tbaa !20
  %.not361 = icmp eq i32 %286, 0
  br i1 %.not361, label %290, label %287

287:                                              ; preds = %284
  %288 = getelementptr inbounds i8, ptr %281, i64 12
  %289 = load i32, ptr %288, align 4, !tbaa !20
  %.not362 = icmp eq i32 %289, 0
  br i1 %.not362, label %290, label %292

290:                                              ; preds = %287, %284
  %291 = getelementptr inbounds i8, ptr %.9, i64 88
  store ptr %281, ptr %291, align 8, !tbaa !25
  br label %331

292:                                              ; preds = %287, %279
  %293 = getelementptr inbounds i8, ptr %.9, i64 64
  %294 = load ptr, ptr %293, align 8, !tbaa !15
  %295 = getelementptr inbounds i8, ptr %294, i64 144
  %296 = load ptr, ptr %295, align 8, !tbaa !35
  %.not363 = icmp eq ptr %296, null
  br i1 %.not363, label %297, label %305

297:                                              ; preds = %292
  %298 = getelementptr inbounds i8, ptr %.9, i64 12
  %299 = load i32, ptr %298, align 4, !tbaa !20
  %.not364 = icmp eq i32 %299, 0
  br i1 %.not364, label %303, label %300

300:                                              ; preds = %297
  %301 = getelementptr inbounds i8, ptr %294, i64 12
  %302 = load i32, ptr %301, align 4, !tbaa !20
  %.not365 = icmp eq i32 %302, 0
  br i1 %.not365, label %303, label %305

303:                                              ; preds = %300, %297
  %304 = getelementptr inbounds i8, ptr %.9, i64 88
  store ptr %294, ptr %304, align 8, !tbaa !25
  br label %331

305:                                              ; preds = %300, %292
  br i1 %.not366, label %316, label %306

306:                                              ; preds = %305
  %307 = getelementptr inbounds i8, ptr %.9, i64 88
  %308 = load ptr, ptr %307, align 8, !tbaa !25
  %309 = getelementptr inbounds i8, ptr %308, i64 144
  %310 = load ptr, ptr %309, align 8, !tbaa !35
  %.not369 = icmp eq ptr %310, null
  br i1 %.not369, label %331, label %311

311:                                              ; preds = %306
  %312 = getelementptr inbounds i8, ptr %.9, i64 80
  %313 = load ptr, ptr %312, align 8, !tbaa !26
  %314 = getelementptr inbounds i8, ptr %313, i64 144
  %315 = load ptr, ptr %314, align 8, !tbaa !35
  %.not370 = icmp eq ptr %315, null
  %..3252 = select i1 %.not370, ptr %313, ptr %.2251
  store ptr %..3252, ptr %307, align 8, !tbaa !25
  br label %331

316:                                              ; preds = %305
  %317 = getelementptr inbounds i8, ptr %.9, i64 128
  %318 = load ptr, ptr %317, align 8, !tbaa !9
  %319 = getelementptr inbounds i8, ptr %318, i64 144
  %320 = load ptr, ptr %319, align 8, !tbaa !35
  %.not367 = icmp eq ptr %320, null
  br i1 %.not367, label %321, label %323

321:                                              ; preds = %316
  %322 = getelementptr inbounds i8, ptr %.9, i64 88
  store ptr %318, ptr %322, align 8, !tbaa !25
  br label %331

323:                                              ; preds = %316
  %324 = getelementptr inbounds i8, ptr %.9, i64 136
  %325 = load ptr, ptr %324, align 8, !tbaa !13
  %326 = getelementptr inbounds i8, ptr %325, i64 144
  %327 = load ptr, ptr %326, align 8, !tbaa !35
  %.not368 = icmp eq ptr %327, null
  %328 = getelementptr inbounds i8, ptr %.9, i64 88
  br i1 %.not368, label %329, label %.thread457

329:                                              ; preds = %323
  store ptr %325, ptr %328, align 8, !tbaa !25
  br label %331

.thread457:                                       ; preds = %323
  store ptr %.2251, ptr %328, align 8, !tbaa !25
  %330 = getelementptr inbounds i8, ptr %.9, i64 144
  store ptr %.9, ptr %330, align 8, !tbaa !35
  br label %.loopexit459

331:                                              ; preds = %303, %321, %329, %306, %311, %290
  %332 = phi ptr [ %294, %303 ], [ %318, %321 ], [ %325, %329 ], [ %308, %306 ], [ %..3252, %311 ], [ %281, %290 ]
  %333 = getelementptr inbounds i8, ptr %.9, i64 144
  store ptr %.9, ptr %333, align 8, !tbaa !35
  %.not371 = icmp eq ptr %332, %.2251
  br i1 %.not371, label %.loopexit459, label %279, !llvm.loop !37

.loopexit459:                                     ; preds = %331, %.thread457
  %334 = phi ptr [ %.2251, %.thread457 ], [ %332, %331 ]
  store i32 0, ptr @Hash, align 4, !tbaa !38
  %335 = load ptr, ptr @Rand, align 8, !tbaa !5
  br label %336

336:                                              ; preds = %336, %.loopexit459
  %337 = phi i32 [ 0, %.loopexit459 ], [ %350, %336 ]
  %.10 = phi ptr [ %334, %.loopexit459 ], [ %339, %336 ]
  %338 = getelementptr inbounds i8, ptr %.10, i64 88
  %339 = load ptr, ptr %338, align 8, !tbaa !25
  %340 = getelementptr inbounds i8, ptr %339, i64 64
  store ptr %.10, ptr %340, align 8, !tbaa !15
  %341 = load i32, ptr %.10, align 8, !tbaa !39
  %342 = sext i32 %341 to i64
  %343 = getelementptr inbounds i32, ptr %335, i64 %342
  %344 = load i32, ptr %343, align 4, !tbaa !38
  %345 = load i32, ptr %339, align 8, !tbaa !39
  %346 = sext i32 %345 to i64
  %347 = getelementptr inbounds i32, ptr %335, i64 %346
  %348 = load i32, ptr %347, align 4, !tbaa !38
  %349 = mul i32 %348, %344
  %350 = xor i32 %337, %349
  store i32 %350, ptr @Hash, align 4, !tbaa !38
  %351 = getelementptr inbounds i8, ptr %.10, i64 72
  store ptr %339, ptr %351, align 8, !tbaa !14
  %.not372 = icmp eq ptr %339, %.2251
  br i1 %.not372, label %352, label %336, !llvm.loop !40

352:                                              ; preds = %336
  %353 = tail call i64 @llvm.smin.i64(i64 %.1285, i64 %.1281)
  br label %354

354:                                              ; preds = %266, %269, %270, %45, %352
  %.sink = phi i64 [ %353, %352 ], [ %22, %45 ], [ %22, %270 ], [ %22, %269 ], [ %22, %266 ]
  %355 = load i32, ptr @Precision, align 4, !tbaa !38
  %356 = sext i32 %355 to i64
  %357 = sdiv i64 %.sink, %356
  ret i64 %357
}

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i64 @llvm.smin.i64(i64, i64) #1

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.smax.i32(i32, i32) #1

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" }
attributes #1 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #2 = { 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 128}
!10 = !{!"Node", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !11, i64 16, !11, i64 20, !11, i64 24, !11, i64 28, !11, i64 32, !11, i64 36, !11, i64 40, !11, i64 44, !11, i64 48, !11, i64 52, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !6, i64 104, !6, i64 112, !6, i64 120, !6, i64 128, !6, i64 136, !6, i64 144, !6, i64 152, !6, i64 160, !6, i64 168, !6, i64 176, !6, i64 184, !6, i64 192, !6, i64 200, !6, i64 208, !6, i64 216, !6, i64 224, !6, i64 232, !6, i64 240, !6, i64 248, !6, i64 256, !6, i64 264, !6, i64 272, !6, i64 280, !6, i64 288, !6, i64 296, !6, i64 304, !12, i64 312, !12, i64 320, !12, i64 328, !12, i64 336, !12, i64 344, !12, i64 352, !7, i64 360, !7, i64 361, !7, i64 362}
!11 = !{!"int", !7, i64 0}
!12 = !{!"double", !7, i64 0}
!13 = !{!10, !6, i64 136}
!14 = !{!10, !6, i64 72}
!15 = !{!10, !6, i64 64}
!16 = distinct !{!16, !17}
!17 = !{!"llvm.loop.mustprogress"}
!18 = !{!10, !11, i64 36}
!19 = !{!10, !11, i64 20}
!20 = !{!10, !11, i64 12}
!21 = distinct !{!21, !17}
!22 = !{!10, !11, i64 24}
!23 = distinct !{!23, !17}
!24 = !{!10, !11, i64 8}
!25 = !{!10, !6, i64 88}
!26 = !{!10, !6, i64 80}
!27 = distinct !{!27, !17}
!28 = distinct !{!28, !17}
!29 = distinct !{!29, !17}
!30 = distinct !{!30, !17}
!31 = distinct !{!31, !17}
!32 = distinct !{!32, !17}
!33 = distinct !{!33, !17}
!34 = distinct !{!34, !17}
!35 = !{!10, !6, i64 144}
!36 = distinct !{!36, !17}
!37 = distinct !{!37, !17}
!38 = !{!11, !11, i64 0}
!39 = !{!10, !11, i64 0}
!40 = distinct !{!40, !17}


; Effective O3 passes: BDCEPass,ConstraintEliminationPass,CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopInstSimplifyPass,LoopRotatePass,LoopSimplifyCFGPass,LoopSimplifyPass,LoopUnrollPass,ReassociatePass,SCCPPass,SROAPass,SimplifyCFGPass,TailCallElimPass