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

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

@TraceLevel = external dso_local global i32, align 4
@.str = external hidden unnamed_addr constant [27 x i8], align 1
@FirstNode = external dso_local global ptr, align 8
@.str.1 = external hidden unnamed_addr constant [83 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [79 x i8], align 1
@__PRETTY_FUNCTION__.GenerateCandidates = external hidden unnamed_addr constant [44 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [34 x i8], align 1
@c = external dso_local global ptr, align 8
@D = external dso_local global ptr, align 8
@.str.4 = external hidden unnamed_addr constant [6 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local void @GenerateCandidates(i32 noundef %0, i64 noundef %1, i32 noundef %2) #0 {
  %4 = alloca i32, align 4
  %5 = alloca i64, align 8
  %6 = alloca i32, align 4
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  store i32 %0, ptr %4, align 4, !tbaa !5
  store i64 %1, ptr %5, align 8, !tbaa !9
  store i32 %2, ptr %6, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #6
  %15 = load i32, ptr @TraceLevel, align 4, !tbaa !5
  %16 = icmp sge i32 %15, 2
  br i1 %16, label %17, label %18

17:                                               ; preds = %3
  call void (ptr, ...) @printff(ptr noundef @.str)
  br label %18

18:                                               ; preds = %17, %3
  %19 = load i64, ptr %5, align 8, !tbaa !9
  %20 = icmp slt i64 %19, 0
  br i1 %20, label %24, label %21

21:                                               ; preds = %18
  %22 = load i64, ptr %5, align 8, !tbaa !9
  %23 = icmp sgt i64 %22, 2147483647
  br i1 %23, label %24, label %25

24:                                               ; preds = %21, %18
  store i64 2147483647, ptr %5, align 8, !tbaa !9
  br label %25

25:                                               ; preds = %24, %21
  call void @FreeCandidateSets()
  %26 = load ptr, ptr @FirstNode, align 8, !tbaa !11
  store ptr %26, ptr %7, align 8, !tbaa !11
  br label %27

27:                                               ; preds = %30, %25
  %28 = load ptr, ptr %7, align 8, !tbaa !11
  %29 = getelementptr inbounds %struct.Node, ptr %28, i32 0, i32 25
  store ptr null, ptr %29, align 8, !tbaa !13
  br label %30

30:                                               ; preds = %27
  %31 = load ptr, ptr %7, align 8, !tbaa !11
  %32 = getelementptr inbounds %struct.Node, ptr %31, i32 0, i32 16
  %33 = load ptr, ptr %32, align 8, !tbaa !16
  store ptr %33, ptr %7, align 8, !tbaa !11
  %34 = load ptr, ptr @FirstNode, align 8, !tbaa !11
  %35 = icmp ne ptr %33, %34
  br i1 %35, label %27, label %36, !llvm.loop !17

36:                                               ; preds = %30
  %37 = load i32, ptr %4, align 4, !tbaa !5
  %38 = icmp sgt i32 %37, 0
  br i1 %38, label %39, label %64

39:                                               ; preds = %36
  br label %40

40:                                               ; preds = %57, %39
  %41 = load i32, ptr %4, align 4, !tbaa !5
  %42 = add nsw i32 %41, 1
  %43 = sext i32 %42 to i64
  %44 = mul i64 %43, 16
  %45 = call noalias ptr @malloc(i64 noundef %44) #7
  %46 = load ptr, ptr %7, align 8, !tbaa !11
  %47 = getelementptr inbounds %struct.Node, ptr %46, i32 0, i32 43
  store ptr %45, ptr %47, align 8, !tbaa !19
  %48 = icmp ne ptr %45, null
  br i1 %48, label %49, label %50

49:                                               ; preds = %40
  br label %51

50:                                               ; preds = %40
  call void @__assert_fail(ptr noundef @.str.1, ptr noundef @.str.2, i32 noundef 59, ptr noundef @__PRETTY_FUNCTION__.GenerateCandidates) #8
  unreachable

51:                                               ; preds = %49
  %52 = load ptr, ptr %7, align 8, !tbaa !11
  %53 = getelementptr inbounds %struct.Node, ptr %52, i32 0, i32 43
  %54 = load ptr, ptr %53, align 8, !tbaa !19
  %55 = getelementptr inbounds %struct.Candidate, ptr %54, i64 0
  %56 = getelementptr inbounds %struct.Candidate, ptr %55, i32 0, i32 0
  store ptr null, ptr %56, align 8, !tbaa !20
  br label %57

57:                                               ; preds = %51
  %58 = load ptr, ptr %7, align 8, !tbaa !11
  %59 = getelementptr inbounds %struct.Node, ptr %58, i32 0, i32 16
  %60 = load ptr, ptr %59, align 8, !tbaa !16
  store ptr %60, ptr %7, align 8, !tbaa !11
  %61 = load ptr, ptr @FirstNode, align 8, !tbaa !11
  %62 = icmp ne ptr %60, %61
  br i1 %62, label %40, label %63, !llvm.loop !22

63:                                               ; preds = %57
  br label %79

64:                                               ; preds = %36
  call void @AddTourCandidates()
  br label %65

65:                                               ; preds = %72, %64
  %66 = load ptr, ptr %7, align 8, !tbaa !11
  %67 = getelementptr inbounds %struct.Node, ptr %66, i32 0, i32 43
  %68 = load ptr, ptr %67, align 8, !tbaa !19
  %69 = icmp ne ptr %68, null
  br i1 %69, label %71, label %70

70:                                               ; preds = %65
  call void (ptr, ...) @eprintf(ptr noundef @.str.3)
  br label %71

71:                                               ; preds = %70, %65
  br label %72

72:                                               ; preds = %71
  %73 = load ptr, ptr %7, align 8, !tbaa !11
  %74 = getelementptr inbounds %struct.Node, ptr %73, i32 0, i32 16
  %75 = load ptr, ptr %74, align 8, !tbaa !16
  store ptr %75, ptr %7, align 8, !tbaa !11
  %76 = load ptr, ptr @FirstNode, align 8, !tbaa !11
  %77 = icmp ne ptr %75, %76
  br i1 %77, label %65, label %78, !llvm.loop !23

78:                                               ; preds = %72
  store i32 1, ptr %14, align 4
  br label %490

79:                                               ; preds = %63
  br label %80

80:                                               ; preds = %475, %79
  %81 = load ptr, ptr %7, align 8, !tbaa !11
  %82 = getelementptr inbounds %struct.Node, ptr %81, i32 0, i32 43
  %83 = load ptr, ptr %82, align 8, !tbaa !19
  store ptr %83, ptr %9, align 8, !tbaa !11
  %84 = load ptr, ptr %7, align 8, !tbaa !11
  %85 = load ptr, ptr @FirstNode, align 8, !tbaa !11
  %86 = icmp ne ptr %84, %85
  br i1 %86, label %87, label %147

87:                                               ; preds = %80
  %88 = load ptr, ptr %7, align 8, !tbaa !11
  %89 = getelementptr inbounds %struct.Node, ptr %88, i32 0, i32 11
  store i32 -2147483648, ptr %89, align 4, !tbaa !24
  %90 = load ptr, ptr %7, align 8, !tbaa !11
  store ptr %90, ptr %8, align 8, !tbaa !11
  br label %91

91:                                               ; preds = %142, %87
  %92 = load ptr, ptr %8, align 8, !tbaa !11
  %93 = getelementptr inbounds %struct.Node, ptr %92, i32 0, i32 21
  %94 = load ptr, ptr %93, align 8, !tbaa !25
  %95 = icmp ne ptr %94, null
  br i1 %95, label %96, label %146

96:                                               ; preds = %91
  %97 = load ptr, ptr %8, align 8, !tbaa !11
  %98 = getelementptr inbounds %struct.Node, ptr %97, i32 0, i32 26
  %99 = load ptr, ptr %98, align 8, !tbaa !26
  %100 = load ptr, ptr %8, align 8, !tbaa !11
  %101 = getelementptr inbounds %struct.Node, ptr %100, i32 0, i32 21
  %102 = load ptr, ptr %101, align 8, !tbaa !25
  %103 = icmp eq ptr %99, %102
  br i1 %103, label %127, label %104

104:                                              ; preds = %96
  %105 = load ptr, ptr %8, align 8, !tbaa !11
  %106 = getelementptr inbounds %struct.Node, ptr %105, i32 0, i32 27
  %107 = load ptr, ptr %106, align 8, !tbaa !27
  %108 = load ptr, ptr %8, align 8, !tbaa !11
  %109 = getelementptr inbounds %struct.Node, ptr %108, i32 0, i32 21
  %110 = load ptr, ptr %109, align 8, !tbaa !25
  %111 = icmp eq ptr %107, %110
  br i1 %111, label %127, label %112

112:                                              ; preds = %104
  %113 = load ptr, ptr %8, align 8, !tbaa !11
  %114 = load ptr, ptr %8, align 8, !tbaa !11
  %115 = getelementptr inbounds %struct.Node, ptr %114, i32 0, i32 21
  %116 = load ptr, ptr %115, align 8, !tbaa !25
  %117 = call i32 @IsCommonEdge(ptr noundef %113, ptr noundef %116)
  %118 = icmp ne i32 %117, 0
  br i1 %118, label %127, label %119

119:                                              ; preds = %112
  %120 = load ptr, ptr %8, align 8, !tbaa !11
  %121 = getelementptr inbounds %struct.Node, ptr %120, i32 0, i32 11
  %122 = load i32, ptr %121, align 4, !tbaa !24
  %123 = load ptr, ptr %8, align 8, !tbaa !11
  %124 = getelementptr inbounds %struct.Node, ptr %123, i32 0, i32 5
  %125 = load i32, ptr %124, align 4, !tbaa !28
  %126 = call i32 @Max(i32 noundef %122, i32 noundef %125)
  br label %131

127:                                              ; preds = %112, %104, %96
  %128 = load ptr, ptr %8, align 8, !tbaa !11
  %129 = getelementptr inbounds %struct.Node, ptr %128, i32 0, i32 11
  %130 = load i32, ptr %129, align 4, !tbaa !24
  br label %131

131:                                              ; preds = %127, %119
  %132 = phi i32 [ %126, %119 ], [ %130, %127 ]
  %133 = load ptr, ptr %8, align 8, !tbaa !11
  %134 = getelementptr inbounds %struct.Node, ptr %133, i32 0, i32 21
  %135 = load ptr, ptr %134, align 8, !tbaa !25
  %136 = getelementptr inbounds %struct.Node, ptr %135, i32 0, i32 11
  store i32 %132, ptr %136, align 4, !tbaa !24
  %137 = load ptr, ptr %7, align 8, !tbaa !11
  %138 = load ptr, ptr %8, align 8, !tbaa !11
  %139 = getelementptr inbounds %struct.Node, ptr %138, i32 0, i32 21
  %140 = load ptr, ptr %139, align 8, !tbaa !25
  %141 = getelementptr inbounds %struct.Node, ptr %140, i32 0, i32 25
  store ptr %137, ptr %141, align 8, !tbaa !13
  br label %142

142:                                              ; preds = %131
  %143 = load ptr, ptr %8, align 8, !tbaa !11
  %144 = getelementptr inbounds %struct.Node, ptr %143, i32 0, i32 21
  %145 = load ptr, ptr %144, align 8, !tbaa !25
  store ptr %145, ptr %8, align 8, !tbaa !11
  br label %91, !llvm.loop !29

146:                                              ; preds = %91
  br label %147

147:                                              ; preds = %146, %80
  store i32 0, ptr %13, align 4, !tbaa !5
  %148 = load ptr, ptr @FirstNode, align 8, !tbaa !11
  store ptr %148, ptr %8, align 8, !tbaa !11
  br label %149

149:                                              ; preds = %468, %147
  %150 = load ptr, ptr %8, align 8, !tbaa !11
  %151 = load ptr, ptr %7, align 8, !tbaa !11
  %152 = icmp eq ptr %150, %151
  br i1 %152, label %153, label %154

153:                                              ; preds = %149
  br label %468

154:                                              ; preds = %149
  %155 = load ptr, ptr @c, align 8, !tbaa !11
  %156 = icmp ne ptr %155, null
  br i1 %156, label %157, label %179

157:                                              ; preds = %154
  %158 = load ptr, ptr %7, align 8, !tbaa !11
  %159 = getelementptr inbounds %struct.Node, ptr %158, i32 0, i32 26
  %160 = load ptr, ptr %159, align 8, !tbaa !26
  %161 = load ptr, ptr %8, align 8, !tbaa !11
  %162 = icmp eq ptr %160, %161
  br i1 %162, label %179, label %163

163:                                              ; preds = %157
  %164 = load ptr, ptr %7, align 8, !tbaa !11
  %165 = getelementptr inbounds %struct.Node, ptr %164, i32 0, i32 27
  %166 = load ptr, ptr %165, align 8, !tbaa !27
  %167 = load ptr, ptr %8, align 8, !tbaa !11
  %168 = icmp eq ptr %166, %167
  br i1 %168, label %179, label %169

169:                                              ; preds = %163
  %170 = load ptr, ptr %7, align 8, !tbaa !11
  %171 = load ptr, ptr %8, align 8, !tbaa !11
  %172 = call i32 @IsCommonEdge(ptr noundef %170, ptr noundef %171)
  %173 = icmp ne i32 %172, 0
  br i1 %173, label %179, label %174

174:                                              ; preds = %169
  %175 = load ptr, ptr @c, align 8, !tbaa !11
  %176 = load ptr, ptr %7, align 8, !tbaa !11
  %177 = load ptr, ptr %8, align 8, !tbaa !11
  %178 = call i32 %175(ptr noundef %176, ptr noundef %177)
  br label %184

179:                                              ; preds = %169, %163, %157, %154
  %180 = load ptr, ptr @D, align 8, !tbaa !11
  %181 = load ptr, ptr %7, align 8, !tbaa !11
  %182 = load ptr, ptr %8, align 8, !tbaa !11
  %183 = call i32 %180(ptr noundef %181, ptr noundef %182)
  br label %184

184:                                              ; preds = %179, %174
  %185 = phi i32 [ %178, %174 ], [ %183, %179 ]
  store i32 %185, ptr %12, align 4, !tbaa !5
  %186 = load ptr, ptr %7, align 8, !tbaa !11
  %187 = load ptr, ptr @FirstNode, align 8, !tbaa !11
  %188 = icmp eq ptr %186, %187
  br i1 %188, label %189, label %204

189:                                              ; preds = %184
  %190 = load ptr, ptr %8, align 8, !tbaa !11
  %191 = load ptr, ptr %7, align 8, !tbaa !11
  %192 = getelementptr inbounds %struct.Node, ptr %191, i32 0, i32 21
  %193 = load ptr, ptr %192, align 8, !tbaa !25
  %194 = icmp eq ptr %190, %193
  br i1 %194, label %195, label %196

195:                                              ; preds = %189
  br label %202

196:                                              ; preds = %189
  %197 = load i32, ptr %12, align 4, !tbaa !5
  %198 = load ptr, ptr %7, align 8, !tbaa !11
  %199 = getelementptr inbounds %struct.Node, ptr %198, i32 0, i32 6
  %200 = load i32, ptr %199, align 8, !tbaa !30
  %201 = sub nsw i32 %197, %200
  br label %202

202:                                              ; preds = %196, %195
  %203 = phi i32 [ 0, %195 ], [ %201, %196 ]
  store i32 %203, ptr %11, align 4, !tbaa !5
  br label %279

204:                                              ; preds = %184
  %205 = load ptr, ptr %8, align 8, !tbaa !11
  %206 = load ptr, ptr @FirstNode, align 8, !tbaa !11
  %207 = icmp eq ptr %205, %206
  br i1 %207, label %208, label %223

208:                                              ; preds = %204
  %209 = load ptr, ptr %7, align 8, !tbaa !11
  %210 = load ptr, ptr %8, align 8, !tbaa !11
  %211 = getelementptr inbounds %struct.Node, ptr %210, i32 0, i32 21
  %212 = load ptr, ptr %211, align 8, !tbaa !25
  %213 = icmp eq ptr %209, %212
  br i1 %213, label %214, label %215

214:                                              ; preds = %208
  br label %221

215:                                              ; preds = %208
  %216 = load i32, ptr %12, align 4, !tbaa !5
  %217 = load ptr, ptr %8, align 8, !tbaa !11
  %218 = getelementptr inbounds %struct.Node, ptr %217, i32 0, i32 6
  %219 = load i32, ptr %218, align 8, !tbaa !30
  %220 = sub nsw i32 %216, %219
  br label %221

221:                                              ; preds = %215, %214
  %222 = phi i32 [ 0, %214 ], [ %220, %215 ]
  store i32 %222, ptr %11, align 4, !tbaa !5
  br label %278

223:                                              ; preds = %204
  %224 = load ptr, ptr %8, align 8, !tbaa !11
  %225 = getelementptr inbounds %struct.Node, ptr %224, i32 0, i32 25
  %226 = load ptr, ptr %225, align 8, !tbaa !13
  %227 = load ptr, ptr %7, align 8, !tbaa !11
  %228 = icmp ne ptr %226, %227
  br i1 %228, label %229, label %272

229:                                              ; preds = %223
  %230 = load ptr, ptr %8, align 8, !tbaa !11
  %231 = getelementptr inbounds %struct.Node, ptr %230, i32 0, i32 26
  %232 = load ptr, ptr %231, align 8, !tbaa !26
  %233 = load ptr, ptr %8, align 8, !tbaa !11
  %234 = getelementptr inbounds %struct.Node, ptr %233, i32 0, i32 21
  %235 = load ptr, ptr %234, align 8, !tbaa !25
  %236 = icmp eq ptr %232, %235
  br i1 %236, label %262, label %237

237:                                              ; preds = %229
  %238 = load ptr, ptr %8, align 8, !tbaa !11
  %239 = getelementptr inbounds %struct.Node, ptr %238, i32 0, i32 27
  %240 = load ptr, ptr %239, align 8, !tbaa !27
  %241 = load ptr, ptr %8, align 8, !tbaa !11
  %242 = getelementptr inbounds %struct.Node, ptr %241, i32 0, i32 21
  %243 = load ptr, ptr %242, align 8, !tbaa !25
  %244 = icmp eq ptr %240, %243
  br i1 %244, label %262, label %245

245:                                              ; preds = %237
  %246 = load ptr, ptr %8, align 8, !tbaa !11
  %247 = load ptr, ptr %8, align 8, !tbaa !11
  %248 = getelementptr inbounds %struct.Node, ptr %247, i32 0, i32 21
  %249 = load ptr, ptr %248, align 8, !tbaa !25
  %250 = call i32 @IsCommonEdge(ptr noundef %246, ptr noundef %249)
  %251 = icmp ne i32 %250, 0
  br i1 %251, label %262, label %252

252:                                              ; preds = %245
  %253 = load ptr, ptr %8, align 8, !tbaa !11
  %254 = getelementptr inbounds %struct.Node, ptr %253, i32 0, i32 21
  %255 = load ptr, ptr %254, align 8, !tbaa !25
  %256 = getelementptr inbounds %struct.Node, ptr %255, i32 0, i32 11
  %257 = load i32, ptr %256, align 4, !tbaa !24
  %258 = load ptr, ptr %8, align 8, !tbaa !11
  %259 = getelementptr inbounds %struct.Node, ptr %258, i32 0, i32 5
  %260 = load i32, ptr %259, align 4, !tbaa !28
  %261 = call i32 @Max(i32 noundef %257, i32 noundef %260)
  br label %268

262:                                              ; preds = %245, %237, %229
  %263 = load ptr, ptr %8, align 8, !tbaa !11
  %264 = getelementptr inbounds %struct.Node, ptr %263, i32 0, i32 21
  %265 = load ptr, ptr %264, align 8, !tbaa !25
  %266 = getelementptr inbounds %struct.Node, ptr %265, i32 0, i32 11
  %267 = load i32, ptr %266, align 4, !tbaa !24
  br label %268

268:                                              ; preds = %262, %252
  %269 = phi i32 [ %261, %252 ], [ %267, %262 ]
  %270 = load ptr, ptr %8, align 8, !tbaa !11
  %271 = getelementptr inbounds %struct.Node, ptr %270, i32 0, i32 11
  store i32 %269, ptr %271, align 4, !tbaa !24
  br label %272

272:                                              ; preds = %268, %223
  %273 = load i32, ptr %12, align 4, !tbaa !5
  %274 = load ptr, ptr %8, align 8, !tbaa !11
  %275 = getelementptr inbounds %struct.Node, ptr %274, i32 0, i32 11
  %276 = load i32, ptr %275, align 4, !tbaa !24
  %277 = sub nsw i32 %273, %276
  store i32 %277, ptr %11, align 4, !tbaa !5
  br label %278

278:                                              ; preds = %272, %221
  br label %279

279:                                              ; preds = %278, %202
  %280 = load ptr, ptr %7, align 8, !tbaa !11
  %281 = getelementptr inbounds %struct.Node, ptr %280, i32 0, i32 26
  %282 = load ptr, ptr %281, align 8, !tbaa !26
  %283 = load ptr, ptr %8, align 8, !tbaa !11
  %284 = icmp eq ptr %282, %283
  br i1 %284, label %296, label %285

285:                                              ; preds = %279
  %286 = load ptr, ptr %7, align 8, !tbaa !11
  %287 = getelementptr inbounds %struct.Node, ptr %286, i32 0, i32 27
  %288 = load ptr, ptr %287, align 8, !tbaa !27
  %289 = load ptr, ptr %8, align 8, !tbaa !11
  %290 = icmp eq ptr %288, %289
  br i1 %290, label %296, label %291

291:                                              ; preds = %285
  %292 = load ptr, ptr %7, align 8, !tbaa !11
  %293 = load ptr, ptr %8, align 8, !tbaa !11
  %294 = call i32 @IsCommonEdge(ptr noundef %292, ptr noundef %293)
  %295 = icmp ne i32 %294, 0
  br i1 %295, label %296, label %297

296:                                              ; preds = %291, %285, %279
  store i32 -2147483648, ptr %11, align 4, !tbaa !5
  br label %402

297:                                              ; preds = %291
  %298 = load ptr, ptr %7, align 8, !tbaa !11
  %299 = getelementptr inbounds %struct.Node, ptr %298, i32 0, i32 27
  %300 = load ptr, ptr %299, align 8, !tbaa !27
  %301 = icmp ne ptr %300, null
  br i1 %301, label %312, label %302

302:                                              ; preds = %297
  %303 = load ptr, ptr %8, align 8, !tbaa !11
  %304 = getelementptr inbounds %struct.Node, ptr %303, i32 0, i32 27
  %305 = load ptr, ptr %304, align 8, !tbaa !27
  %306 = icmp ne ptr %305, null
  br i1 %306, label %312, label %307

307:                                              ; preds = %302
  %308 = load ptr, ptr %7, align 8, !tbaa !11
  %309 = load ptr, ptr %8, align 8, !tbaa !11
  %310 = call i32 @Forbidden(ptr noundef %308, ptr noundef %309)
  %311 = icmp ne i32 %310, 0
  br i1 %311, label %312, label %313

312:                                              ; preds = %307, %302, %297
  br label %468

313:                                              ; preds = %307
  %314 = load ptr, ptr %7, align 8, !tbaa !11
  %315 = getelementptr inbounds %struct.Node, ptr %314, i32 0, i32 32
  %316 = load ptr, ptr %315, align 8, !tbaa !31
  %317 = load ptr, ptr %8, align 8, !tbaa !11
  %318 = icmp eq ptr %316, %317
  br i1 %318, label %325, label %319

319:                                              ; preds = %313
  %320 = load ptr, ptr %8, align 8, !tbaa !11
  %321 = getelementptr inbounds %struct.Node, ptr %320, i32 0, i32 32
  %322 = load ptr, ptr %321, align 8, !tbaa !31
  %323 = load ptr, ptr %7, align 8, !tbaa !11
  %324 = icmp eq ptr %322, %323
  br i1 %324, label %325, label %334

325:                                              ; preds = %319, %313
  store i32 0, ptr %11, align 4, !tbaa !5
  %326 = load ptr, ptr @c, align 8, !tbaa !11
  %327 = icmp ne ptr %326, null
  br i1 %327, label %328, label %333

328:                                              ; preds = %325
  %329 = load ptr, ptr @D, align 8, !tbaa !11
  %330 = load ptr, ptr %7, align 8, !tbaa !11
  %331 = load ptr, ptr %8, align 8, !tbaa !11
  %332 = call i32 %329(ptr noundef %330, ptr noundef %331)
  store i32 %332, ptr %12, align 4, !tbaa !5
  br label %333

333:                                              ; preds = %328, %325
  br label %401

334:                                              ; preds = %319
  %335 = load ptr, ptr @c, align 8, !tbaa !11
  %336 = icmp ne ptr %335, null
  br i1 %336, label %337, label %400

337:                                              ; preds = %334
  %338 = load i32, ptr %11, align 4, !tbaa !5
  %339 = sext i32 %338 to i64
  %340 = load i64, ptr %5, align 8, !tbaa !9
  %341 = icmp sgt i64 %339, %340
  br i1 %341, label %367, label %342

342:                                              ; preds = %337
  %343 = load i32, ptr %13, align 4, !tbaa !5
  %344 = load i32, ptr %4, align 4, !tbaa !5
  %345 = icmp eq i32 %343, %344
  br i1 %345, label %346, label %368

346:                                              ; preds = %342
  %347 = load i32, ptr %11, align 4, !tbaa !5
  %348 = load ptr, ptr %9, align 8, !tbaa !11
  %349 = getelementptr inbounds %struct.Candidate, ptr %348, i64 -1
  %350 = getelementptr inbounds %struct.Candidate, ptr %349, i32 0, i32 2
  %351 = load i32, ptr %350, align 4, !tbaa !32
  %352 = icmp sgt i32 %347, %351
  br i1 %352, label %367, label %353

353:                                              ; preds = %346
  %354 = load i32, ptr %11, align 4, !tbaa !5
  %355 = load ptr, ptr %9, align 8, !tbaa !11
  %356 = getelementptr inbounds %struct.Candidate, ptr %355, i64 -1
  %357 = getelementptr inbounds %struct.Candidate, ptr %356, i32 0, i32 2
  %358 = load i32, ptr %357, align 4, !tbaa !32
  %359 = icmp eq i32 %354, %358
  br i1 %359, label %360, label %368

360:                                              ; preds = %353
  %361 = load i32, ptr %12, align 4, !tbaa !5
  %362 = load ptr, ptr %9, align 8, !tbaa !11
  %363 = getelementptr inbounds %struct.Candidate, ptr %362, i64 -1
  %364 = getelementptr inbounds %struct.Candidate, ptr %363, i32 0, i32 1
  %365 = load i32, ptr %364, align 8, !tbaa !33
  %366 = icmp sge i32 %361, %365
  br i1 %366, label %367, label %368

367:                                              ; preds = %360, %346, %337
  br label %468

368:                                              ; preds = %360, %353, %342
  %369 = load ptr, ptr %8, align 8, !tbaa !11
  %370 = load ptr, ptr %7, align 8, !tbaa !11
  %371 = getelementptr inbounds %struct.Node, ptr %370, i32 0, i32 21
  %372 = load ptr, ptr %371, align 8, !tbaa !25
  %373 = icmp eq ptr %369, %372
  br i1 %373, label %374, label %378

374:                                              ; preds = %368
  %375 = load ptr, ptr %7, align 8, !tbaa !11
  %376 = getelementptr inbounds %struct.Node, ptr %375, i32 0, i32 5
  %377 = load i32, ptr %376, align 4, !tbaa !28
  store i32 %377, ptr %12, align 4, !tbaa !5
  store i32 0, ptr %11, align 4, !tbaa !5
  br label %399

378:                                              ; preds = %368
  %379 = load ptr, ptr %7, align 8, !tbaa !11
  %380 = load ptr, ptr %8, align 8, !tbaa !11
  %381 = getelementptr inbounds %struct.Node, ptr %380, i32 0, i32 21
  %382 = load ptr, ptr %381, align 8, !tbaa !25
  %383 = icmp eq ptr %379, %382
  br i1 %383, label %384, label %388

384:                                              ; preds = %378
  %385 = load ptr, ptr %8, align 8, !tbaa !11
  %386 = getelementptr inbounds %struct.Node, ptr %385, i32 0, i32 5
  %387 = load i32, ptr %386, align 4, !tbaa !28
  store i32 %387, ptr %12, align 4, !tbaa !5
  store i32 0, ptr %11, align 4, !tbaa !5
  br label %398

388:                                              ; preds = %378
  %389 = load i32, ptr %12, align 4, !tbaa !5
  %390 = load i32, ptr %11, align 4, !tbaa !5
  %391 = sub nsw i32 %390, %389
  store i32 %391, ptr %11, align 4, !tbaa !5
  %392 = load ptr, ptr @D, align 8, !tbaa !11
  %393 = load ptr, ptr %7, align 8, !tbaa !11
  %394 = load ptr, ptr %8, align 8, !tbaa !11
  %395 = call i32 %392(ptr noundef %393, ptr noundef %394)
  store i32 %395, ptr %12, align 4, !tbaa !5
  %396 = load i32, ptr %11, align 4, !tbaa !5
  %397 = add nsw i32 %396, %395
  store i32 %397, ptr %11, align 4, !tbaa !5
  br label %398

398:                                              ; preds = %388, %384
  br label %399

399:                                              ; preds = %398, %374
  br label %400

400:                                              ; preds = %399, %334
  br label %401

401:                                              ; preds = %400, %333
  br label %402

402:                                              ; preds = %401, %296
  %403 = load i32, ptr %11, align 4, !tbaa !5
  %404 = sext i32 %403 to i64
  %405 = load i64, ptr %5, align 8, !tbaa !9
  %406 = icmp sle i64 %404, %405
  br i1 %406, label %407, label %467

407:                                              ; preds = %402
  %408 = load ptr, ptr %7, align 8, !tbaa !11
  %409 = load ptr, ptr %8, align 8, !tbaa !11
  %410 = call i32 @IsPossibleCandidate(ptr noundef %408, ptr noundef %409)
  %411 = icmp ne i32 %410, 0
  br i1 %411, label %412, label %467

412:                                              ; preds = %407
  %413 = load ptr, ptr %9, align 8, !tbaa !11
  store ptr %413, ptr %10, align 8, !tbaa !11
  br label %414

414:                                              ; preds = %440, %412
  %415 = load ptr, ptr %10, align 8, !tbaa !11
  %416 = getelementptr inbounds %struct.Candidate, ptr %415, i32 -1
  store ptr %416, ptr %10, align 8, !tbaa !11
  %417 = load ptr, ptr %7, align 8, !tbaa !11
  %418 = getelementptr inbounds %struct.Node, ptr %417, i32 0, i32 43
  %419 = load ptr, ptr %418, align 8, !tbaa !19
  %420 = icmp uge ptr %416, %419
  br i1 %420, label %421, label %444

421:                                              ; preds = %414
  %422 = load i32, ptr %11, align 4, !tbaa !5
  %423 = load ptr, ptr %10, align 8, !tbaa !11
  %424 = getelementptr inbounds %struct.Candidate, ptr %423, i32 0, i32 2
  %425 = load i32, ptr %424, align 4, !tbaa !32
  %426 = icmp sgt i32 %422, %425
  br i1 %426, label %439, label %427

427:                                              ; preds = %421
  %428 = load i32, ptr %11, align 4, !tbaa !5
  %429 = load ptr, ptr %10, align 8, !tbaa !11
  %430 = getelementptr inbounds %struct.Candidate, ptr %429, i32 0, i32 2
  %431 = load i32, ptr %430, align 4, !tbaa !32
  %432 = icmp eq i32 %428, %431
  br i1 %432, label %433, label %440

433:                                              ; preds = %427
  %434 = load i32, ptr %12, align 4, !tbaa !5
  %435 = load ptr, ptr %10, align 8, !tbaa !11
  %436 = getelementptr inbounds %struct.Candidate, ptr %435, i32 0, i32 1
  %437 = load i32, ptr %436, align 8, !tbaa !33
  %438 = icmp sge i32 %434, %437
  br i1 %438, label %439, label %440

439:                                              ; preds = %433, %421
  br label %444

440:                                              ; preds = %433, %427
  %441 = load ptr, ptr %10, align 8, !tbaa !11
  %442 = getelementptr inbounds %struct.Candidate, ptr %441, i64 1
  %443 = load ptr, ptr %10, align 8, !tbaa !11
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %442, ptr align 8 %443, i64 16, i1 false), !tbaa.struct !34
  br label %414, !llvm.loop !35

444:                                              ; preds = %439, %414
  %445 = load ptr, ptr %10, align 8, !tbaa !11
  %446 = getelementptr inbounds %struct.Candidate, ptr %445, i32 1
  store ptr %446, ptr %10, align 8, !tbaa !11
  %447 = load ptr, ptr %8, align 8, !tbaa !11
  %448 = load ptr, ptr %10, align 8, !tbaa !11
  %449 = getelementptr inbounds %struct.Candidate, ptr %448, i32 0, i32 0
  store ptr %447, ptr %449, align 8, !tbaa !20
  %450 = load i32, ptr %12, align 4, !tbaa !5
  %451 = load ptr, ptr %10, align 8, !tbaa !11
  %452 = getelementptr inbounds %struct.Candidate, ptr %451, i32 0, i32 1
  store i32 %450, ptr %452, align 8, !tbaa !33
  %453 = load i32, ptr %11, align 4, !tbaa !5
  %454 = load ptr, ptr %10, align 8, !tbaa !11
  %455 = getelementptr inbounds %struct.Candidate, ptr %454, i32 0, i32 2
  store i32 %453, ptr %455, align 4, !tbaa !32
  %456 = load i32, ptr %13, align 4, !tbaa !5
  %457 = load i32, ptr %4, align 4, !tbaa !5
  %458 = icmp slt i32 %456, %457
  br i1 %458, label %459, label %464

459:                                              ; preds = %444
  %460 = load i32, ptr %13, align 4, !tbaa !5
  %461 = add nsw i32 %460, 1
  store i32 %461, ptr %13, align 4, !tbaa !5
  %462 = load ptr, ptr %9, align 8, !tbaa !11
  %463 = getelementptr inbounds %struct.Candidate, ptr %462, i32 1
  store ptr %463, ptr %9, align 8, !tbaa !11
  br label %464

464:                                              ; preds = %459, %444
  %465 = load ptr, ptr %9, align 8, !tbaa !11
  %466 = getelementptr inbounds %struct.Candidate, ptr %465, i32 0, i32 0
  store ptr null, ptr %466, align 8, !tbaa !20
  br label %467

467:                                              ; preds = %464, %407, %402
  br label %468

468:                                              ; preds = %467, %367, %312, %153
  %469 = load ptr, ptr %8, align 8, !tbaa !11
  %470 = getelementptr inbounds %struct.Node, ptr %469, i32 0, i32 16
  %471 = load ptr, ptr %470, align 8, !tbaa !16
  store ptr %471, ptr %8, align 8, !tbaa !11
  %472 = load ptr, ptr @FirstNode, align 8, !tbaa !11
  %473 = icmp ne ptr %471, %472
  br i1 %473, label %149, label %474, !llvm.loop !36

474:                                              ; preds = %468
  br label %475

475:                                              ; preds = %474
  %476 = load ptr, ptr %7, align 8, !tbaa !11
  %477 = getelementptr inbounds %struct.Node, ptr %476, i32 0, i32 16
  %478 = load ptr, ptr %477, align 8, !tbaa !16
  store ptr %478, ptr %7, align 8, !tbaa !11
  %479 = load ptr, ptr @FirstNode, align 8, !tbaa !11
  %480 = icmp ne ptr %478, %479
  br i1 %480, label %80, label %481, !llvm.loop !37

481:                                              ; preds = %475
  call void @AddTourCandidates()
  %482 = load i32, ptr %6, align 4, !tbaa !5
  %483 = icmp ne i32 %482, 0
  br i1 %483, label %484, label %485

484:                                              ; preds = %481
  call void @SymmetrizeCandidateSet()
  br label %485

485:                                              ; preds = %484, %481
  %486 = load i32, ptr @TraceLevel, align 4, !tbaa !5
  %487 = icmp sge i32 %486, 2
  br i1 %487, label %488, label %489

488:                                              ; preds = %485
  call void (ptr, ...) @printff(ptr noundef @.str.4)
  br label %489

489:                                              ; preds = %488, %485
  store i32 0, ptr %14, align 4
  br label %490

490:                                              ; preds = %489, %78
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #6
  %491 = load i32, ptr %14, align 4
  switch i32 %491, label %493 [
    i32 0, label %492
    i32 1, label %492
  ]

492:                                              ; preds = %490, %490
  ret void

493:                                              ; preds = %490
  unreachable
}

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

declare void @printff(ptr noundef, ...) #2

declare void @FreeCandidateSets() #2

; Function Attrs: nounwind allocsize(0)
declare noalias ptr @malloc(i64 noundef) #3

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) #4

declare void @AddTourCandidates() #2

declare void @eprintf(ptr noundef, ...) #2

declare i32 @IsCommonEdge(ptr noundef, ptr noundef) #2

; Function Attrs: nounwind uwtable
declare hidden i32 @Max(i32 noundef, i32 noundef) #0

declare i32 @Forbidden(ptr noundef, ptr noundef) #2

declare i32 @IsPossibleCandidate(ptr noundef, ptr noundef) #2

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

declare void @SymmetrizeCandidateSet() #2

; 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 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nounwind allocsize(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 #4 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #6 = { nounwind }
attributes #7 = { nounwind allocsize(0) }
attributes #8 = { noreturn 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 144}
!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 72}
!17 = distinct !{!17, !18}
!18 = !{!"llvm.loop.mustprogress"}
!19 = !{!14, !12, i64 288}
!20 = !{!21, !12, i64 0}
!21 = !{!"Candidate", !12, i64 0, !6, i64 8, !6, i64 12}
!22 = distinct !{!22, !18}
!23 = distinct !{!23, !18}
!24 = !{!14, !6, i64 44}
!25 = !{!14, !12, i64 112}
!26 = !{!14, !12, i64 152}
!27 = !{!14, !12, i64 160}
!28 = !{!14, !6, i64 20}
!29 = distinct !{!29, !18}
!30 = !{!14, !6, i64 24}
!31 = !{!14, !12, i64 200}
!32 = !{!21, !6, i64 12}
!33 = !{!21, !6, i64 8}
!34 = !{i64 0, i64 8, !11, i64 8, i64 4, !5, i64 12, i64 4, !5}
!35 = distinct !{!35, !18}
!36 = distinct !{!36, !18}
!37 = distinct !{!37, !18}


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

@TraceLevel = external dso_local local_unnamed_addr global i32, align 4
@.str = external hidden unnamed_addr constant [27 x i8], align 1
@FirstNode = external dso_local local_unnamed_addr global ptr, align 8
@.str.1 = external hidden unnamed_addr constant [83 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [79 x i8], align 1
@__PRETTY_FUNCTION__.GenerateCandidates = external hidden unnamed_addr constant [44 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [34 x i8], align 1
@c = external dso_local local_unnamed_addr global ptr, align 8
@D = external dso_local local_unnamed_addr global ptr, align 8
@.str.4 = external hidden unnamed_addr constant [6 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local void @GenerateCandidates(i32 noundef %0, i64 noundef %1, i32 noundef %2) local_unnamed_addr #0 {
  %4 = load i32, ptr @TraceLevel, align 4, !tbaa !5
  %5 = icmp sgt i32 %4, 1
  br i1 %5, label %6, label %7

6:                                                ; preds = %3
  tail call void (ptr, ...) @printff(ptr noundef nonnull @.str) #6
  br label %7

7:                                                ; preds = %6, %3
  tail call void @FreeCandidateSets() #6
  %8 = load ptr, ptr @FirstNode, align 8, !tbaa !9
  br label %9

9:                                                ; preds = %9, %7
  %.0141 = phi ptr [ %8, %7 ], [ %12, %9 ]
  %10 = getelementptr inbounds i8, ptr %.0141, i64 144
  store ptr null, ptr %10, align 8, !tbaa !11
  %11 = getelementptr inbounds i8, ptr %.0141, i64 72
  %12 = load ptr, ptr %11, align 8, !tbaa !14
  %.not = icmp eq ptr %12, %8
  br i1 %.not, label %13, label %9, !llvm.loop !15

13:                                               ; preds = %9
  %spec.store.select = tail call i64 @llvm.umin.i64(i64 %1, i64 2147483647)
  %14 = icmp sgt i32 %0, 0
  br i1 %14, label %.preheader184, label %25

.preheader184:                                    ; preds = %13
  %15 = add nuw nsw i32 %0, 1
  %16 = zext nneg i32 %15 to i64
  %17 = shl nuw nsw i64 %16, 4
  br label %18

18:                                               ; preds = %.preheader184, %22
  %.1142 = phi ptr [ %24, %22 ], [ %12, %.preheader184 ]
  %19 = tail call noalias ptr @malloc(i64 noundef %17) #7
  %20 = getelementptr inbounds i8, ptr %.1142, i64 288
  store ptr %19, ptr %20, align 8, !tbaa !17
  %.not160 = icmp eq ptr %19, null
  br i1 %.not160, label %21, label %22

21:                                               ; preds = %18
  tail call void @__assert_fail(ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.2, i32 noundef 59, ptr noundef nonnull @__PRETTY_FUNCTION__.GenerateCandidates) #8
  unreachable

22:                                               ; preds = %18
  store ptr null, ptr %19, align 8, !tbaa !18
  %23 = getelementptr inbounds i8, ptr %.1142, i64 72
  %24 = load ptr, ptr %23, align 8, !tbaa !14
  %.not161 = icmp eq ptr %24, %8
  br i1 %.not161, label %.preheader183, label %18, !llvm.loop !20

25:                                               ; preds = %13
  tail call void @AddTourCandidates() #6
  br label %26

26:                                               ; preds = %30, %25
  %.2143 = phi ptr [ %12, %25 ], [ %32, %30 ]
  %27 = getelementptr inbounds i8, ptr %.2143, i64 288
  %28 = load ptr, ptr %27, align 8, !tbaa !17
  %.not158 = icmp eq ptr %28, null
  br i1 %.not158, label %29, label %30

29:                                               ; preds = %26
  tail call void (ptr, ...) @eprintf(ptr noundef nonnull @.str.3) #6
  br label %30

30:                                               ; preds = %26, %29
  %31 = getelementptr inbounds i8, ptr %.2143, i64 72
  %32 = load ptr, ptr %31, align 8, !tbaa !14
  %33 = load ptr, ptr @FirstNode, align 8, !tbaa !9
  %.not159 = icmp eq ptr %32, %33
  br i1 %.not159, label %.loopexit185, label %26, !llvm.loop !21

.preheader183:                                    ; preds = %22, %227
  %34 = phi ptr [ %226, %227 ], [ %8, %22 ]
  %.3 = phi ptr [ %229, %227 ], [ %24, %22 ]
  %35 = getelementptr inbounds i8, ptr %.3, i64 288
  %36 = load ptr, ptr %35, align 8, !tbaa !17
  %.not162 = icmp eq ptr %.3, %34
  br i1 %.not162, label %.loopexit, label %37

37:                                               ; preds = %.preheader183
  %38 = getelementptr inbounds i8, ptr %.3, i64 44
  store i32 -2147483648, ptr %38, align 4, !tbaa !22
  %39 = getelementptr inbounds i8, ptr %.3, i64 112
  %40 = load ptr, ptr %39, align 8, !tbaa !23
  %.not163188 = icmp eq ptr %40, null
  br i1 %.not163188, label %.loopexit, label %.lr.ph

.lr.ph:                                           ; preds = %37, %._crit_edge199
  %41 = phi i32 [ %59, %._crit_edge199 ], [ -2147483648, %37 ]
  %42 = phi ptr [ %64, %._crit_edge199 ], [ %40, %37 ]
  %43 = phi ptr [ %63, %._crit_edge199 ], [ %39, %37 ]
  %.0139189 = phi ptr [ %60, %._crit_edge199 ], [ %.3, %37 ]
  %44 = getelementptr inbounds i8, ptr %.0139189, i64 152
  %45 = load ptr, ptr %44, align 8, !tbaa !24
  %46 = icmp eq ptr %45, %42
  br i1 %46, label %._crit_edge199, label %47

47:                                               ; preds = %.lr.ph
  %48 = getelementptr inbounds i8, ptr %.0139189, i64 160
  %49 = load ptr, ptr %48, align 8, !tbaa !25
  %50 = icmp eq ptr %49, %42
  br i1 %50, label %._crit_edge199, label %51

51:                                               ; preds = %47
  %52 = tail call i32 @IsCommonEdge(ptr noundef nonnull %.0139189, ptr noundef nonnull %42) #6
  %.not182 = icmp eq i32 %52, 0
  %53 = getelementptr inbounds i8, ptr %.0139189, i64 44
  %54 = load i32, ptr %53, align 4, !tbaa !22
  br i1 %.not182, label %55, label %._crit_edge199

55:                                               ; preds = %51
  %56 = getelementptr inbounds i8, ptr %.0139189, i64 20
  %57 = load i32, ptr %56, align 4, !tbaa !26
  %58 = tail call i32 @Max(i32 noundef %54, i32 noundef %57)
  br label %._crit_edge199

._crit_edge199:                                   ; preds = %51, %.lr.ph, %47, %55
  %59 = phi i32 [ %58, %55 ], [ %41, %47 ], [ %41, %.lr.ph ], [ %54, %51 ]
  %60 = load ptr, ptr %43, align 8, !tbaa !23
  %61 = getelementptr inbounds i8, ptr %60, i64 44
  store i32 %59, ptr %61, align 4, !tbaa !22
  %62 = getelementptr inbounds i8, ptr %60, i64 144
  store ptr %.3, ptr %62, align 8, !tbaa !11
  %63 = getelementptr inbounds i8, ptr %60, i64 112
  %64 = load ptr, ptr %63, align 8, !tbaa !23
  %.not163 = icmp eq ptr %64, null
  br i1 %.not163, label %.loopexit.loopexit, label %.lr.ph, !llvm.loop !27

.loopexit.loopexit:                               ; preds = %._crit_edge199
  %.pre200 = load ptr, ptr @FirstNode, align 8, !tbaa !9
  br label %.loopexit

.loopexit:                                        ; preds = %.loopexit.loopexit, %37, %.preheader183
  %65 = phi ptr [ %.pre200, %.loopexit.loopexit ], [ %34, %37 ], [ %34, %.preheader183 ]
  %66 = getelementptr inbounds i8, ptr %.3, i64 152
  %67 = getelementptr inbounds i8, ptr %.3, i64 160
  %68 = getelementptr inbounds i8, ptr %.3, i64 112
  %69 = getelementptr inbounds i8, ptr %.3, i64 24
  %70 = getelementptr inbounds i8, ptr %.3, i64 200
  %71 = getelementptr inbounds i8, ptr %.3, i64 20
  br label %72

72:                                               ; preds = %223, %.loopexit
  %.1140 = phi ptr [ %65, %.loopexit ], [ %225, %223 ]
  %.0136 = phi ptr [ %36, %.loopexit ], [ %.2138, %223 ]
  %.0 = phi i32 [ 0, %.loopexit ], [ %.2, %223 ]
  %73 = icmp eq ptr %.1140, %.3
  br i1 %73, label %223, label %74

74:                                               ; preds = %72
  %75 = load ptr, ptr @c, align 8, !tbaa !9
  %.not164 = icmp eq ptr %75, null
  br i1 %.not164, label %87, label %76

76:                                               ; preds = %74
  %77 = load ptr, ptr %66, align 8, !tbaa !24
  %78 = icmp eq ptr %77, %.1140
  br i1 %78, label %87, label %79

79:                                               ; preds = %76
  %80 = load ptr, ptr %67, align 8, !tbaa !25
  %81 = icmp eq ptr %80, %.1140
  br i1 %81, label %87, label %82

82:                                               ; preds = %79
  %83 = tail call i32 @IsCommonEdge(ptr noundef nonnull %.3, ptr noundef %.1140) #6
  %.not165 = icmp eq i32 %83, 0
  br i1 %.not165, label %84, label %87

84:                                               ; preds = %82
  %85 = load ptr, ptr @c, align 8, !tbaa !9
  %86 = tail call i32 %85(ptr noundef nonnull %.3, ptr noundef %.1140) #6
  br label %90

87:                                               ; preds = %82, %79, %76, %74
  %88 = load ptr, ptr @D, align 8, !tbaa !9
  %89 = tail call i32 %88(ptr noundef %.3, ptr noundef %.1140) #6
  br label %90

90:                                               ; preds = %87, %84
  %91 = phi i32 [ %86, %84 ], [ %89, %87 ]
  %92 = load ptr, ptr @FirstNode, align 8, !tbaa !9
  %93 = icmp eq ptr %.3, %92
  br i1 %93, label %94, label %100

94:                                               ; preds = %90
  %95 = load ptr, ptr %68, align 8, !tbaa !23
  %96 = icmp eq ptr %.1140, %95
  br i1 %96, label %141, label %97

97:                                               ; preds = %94
  %98 = load i32, ptr %69, align 8, !tbaa !28
  %99 = sub nsw i32 %91, %98
  br label %141

100:                                              ; preds = %90
  %101 = icmp eq ptr %.1140, %92
  br i1 %101, label %102, label %110

102:                                              ; preds = %100
  %103 = getelementptr inbounds i8, ptr %.1140, i64 112
  %104 = load ptr, ptr %103, align 8, !tbaa !23
  %105 = icmp eq ptr %.3, %104
  br i1 %105, label %141, label %106

106:                                              ; preds = %102
  %107 = getelementptr inbounds i8, ptr %.1140, i64 24
  %108 = load i32, ptr %107, align 8, !tbaa !28
  %109 = sub nsw i32 %91, %108
  br label %141

110:                                              ; preds = %100
  %111 = getelementptr inbounds i8, ptr %.1140, i64 144
  %112 = load ptr, ptr %111, align 8, !tbaa !11
  %.not166 = icmp eq ptr %112, %.3
  br i1 %.not166, label %._crit_edge202, label %113

._crit_edge202:                                   ; preds = %110
  %.phi.trans.insert203 = getelementptr inbounds i8, ptr %.1140, i64 44
  %.pre204 = load i32, ptr %.phi.trans.insert203, align 4, !tbaa !22
  br label %138

113:                                              ; preds = %110
  %114 = getelementptr inbounds i8, ptr %.1140, i64 152
  %115 = load ptr, ptr %114, align 8, !tbaa !24
  %116 = getelementptr inbounds i8, ptr %.1140, i64 112
  %117 = load ptr, ptr %116, align 8, !tbaa !23
  %118 = icmp eq ptr %115, %117
  br i1 %118, label %131, label %119

119:                                              ; preds = %113
  %120 = getelementptr inbounds i8, ptr %.1140, i64 160
  %121 = load ptr, ptr %120, align 8, !tbaa !25
  %122 = icmp eq ptr %121, %117
  br i1 %122, label %131, label %123

123:                                              ; preds = %119
  %124 = tail call i32 @IsCommonEdge(ptr noundef nonnull %.1140, ptr noundef %117) #6
  %.not167 = icmp eq i32 %124, 0
  %.pre201 = load ptr, ptr %116, align 8, !tbaa !23
  br i1 %.not167, label %125, label %131

125:                                              ; preds = %123
  %126 = getelementptr inbounds i8, ptr %.pre201, i64 44
  %127 = load i32, ptr %126, align 4, !tbaa !22
  %128 = getelementptr inbounds i8, ptr %.1140, i64 20
  %129 = load i32, ptr %128, align 4, !tbaa !26
  %130 = tail call i32 @Max(i32 noundef %127, i32 noundef %129)
  br label %135

131:                                              ; preds = %123, %119, %113
  %132 = phi ptr [ %.pre201, %123 ], [ %117, %119 ], [ %117, %113 ]
  %133 = getelementptr inbounds i8, ptr %132, i64 44
  %134 = load i32, ptr %133, align 4, !tbaa !22
  br label %135

135:                                              ; preds = %131, %125
  %136 = phi i32 [ %130, %125 ], [ %134, %131 ]
  %137 = getelementptr inbounds i8, ptr %.1140, i64 44
  store i32 %136, ptr %137, align 4, !tbaa !22
  br label %138

138:                                              ; preds = %._crit_edge202, %135
  %139 = phi i32 [ %.pre204, %._crit_edge202 ], [ %136, %135 ]
  %140 = sub nsw i32 %91, %139
  br label %141

141:                                              ; preds = %106, %102, %97, %94, %138
  %.0133 = phi i32 [ %140, %138 ], [ %99, %97 ], [ 0, %94 ], [ %109, %106 ], [ 0, %102 ]
  %142 = load ptr, ptr %66, align 8, !tbaa !24
  %143 = icmp eq ptr %142, %.1140
  br i1 %143, label %201, label %144

144:                                              ; preds = %141
  %145 = load ptr, ptr %67, align 8, !tbaa !25
  %146 = icmp eq ptr %145, %.1140
  br i1 %146, label %201, label %147

147:                                              ; preds = %144
  %148 = tail call i32 @IsCommonEdge(ptr noundef nonnull %.3, ptr noundef %.1140) #6
  %.not168 = icmp eq i32 %148, 0
  br i1 %.not168, label %149, label %201

149:                                              ; preds = %147
  %150 = load ptr, ptr %67, align 8, !tbaa !25
  %.not169 = icmp eq ptr %150, null
  br i1 %.not169, label %151, label %223

151:                                              ; preds = %149
  %152 = getelementptr inbounds i8, ptr %.1140, i64 160
  %153 = load ptr, ptr %152, align 8, !tbaa !25
  %.not170 = icmp eq ptr %153, null
  br i1 %.not170, label %154, label %223

154:                                              ; preds = %151
  %155 = tail call i32 @Forbidden(ptr noundef nonnull %.3, ptr noundef nonnull %.1140) #6
  %.not171 = icmp eq i32 %155, 0
  br i1 %.not171, label %156, label %223

156:                                              ; preds = %154
  %157 = load ptr, ptr %70, align 8, !tbaa !29
  %158 = icmp eq ptr %157, %.1140
  br i1 %158, label %163, label %159

159:                                              ; preds = %156
  %160 = getelementptr inbounds i8, ptr %.1140, i64 200
  %161 = load ptr, ptr %160, align 8, !tbaa !29
  %162 = icmp eq ptr %161, %.3
  br i1 %162, label %163, label %168

163:                                              ; preds = %159, %156
  %164 = load ptr, ptr @c, align 8, !tbaa !9
  %.not174 = icmp eq ptr %164, null
  br i1 %.not174, label %201, label %165

165:                                              ; preds = %163
  %166 = load ptr, ptr @D, align 8, !tbaa !9
  %167 = tail call i32 %166(ptr noundef nonnull %.3, ptr noundef nonnull %.1140) #6
  br label %201

168:                                              ; preds = %159
  %169 = load ptr, ptr @c, align 8, !tbaa !9
  %.not172 = icmp eq ptr %169, null
  br i1 %.not172, label %201, label %170

170:                                              ; preds = %168
  %171 = sext i32 %.0133 to i64
  %172 = icmp slt i64 %spec.store.select, %171
  br i1 %172, label %223, label %173

173:                                              ; preds = %170
  %174 = icmp eq i32 %.0, %0
  br i1 %174, label %175, label %184

175:                                              ; preds = %173
  %176 = getelementptr inbounds i8, ptr %.0136, i64 -4
  %177 = load i32, ptr %176, align 4, !tbaa !30
  %178 = icmp sgt i32 %.0133, %177
  br i1 %178, label %223, label %179

179:                                              ; preds = %175
  %180 = icmp eq i32 %.0133, %177
  br i1 %180, label %181, label %184

181:                                              ; preds = %179
  %182 = getelementptr inbounds i8, ptr %.0136, i64 -8
  %183 = load i32, ptr %182, align 8, !tbaa !31
  %.not173 = icmp slt i32 %91, %183
  br i1 %.not173, label %184, label %223

184:                                              ; preds = %181, %179, %173
  %185 = load ptr, ptr %68, align 8, !tbaa !23
  %186 = icmp eq ptr %.1140, %185
  br i1 %186, label %187, label %189

187:                                              ; preds = %184
  %188 = load i32, ptr %71, align 4, !tbaa !26
  br label %201

189:                                              ; preds = %184
  %190 = getelementptr inbounds i8, ptr %.1140, i64 112
  %191 = load ptr, ptr %190, align 8, !tbaa !23
  %192 = icmp eq ptr %.3, %191
  br i1 %192, label %193, label %196

193:                                              ; preds = %189
  %194 = getelementptr inbounds i8, ptr %.1140, i64 20
  %195 = load i32, ptr %194, align 4, !tbaa !26
  br label %201

196:                                              ; preds = %189
  %197 = sub i32 %.0133, %91
  %198 = load ptr, ptr @D, align 8, !tbaa !9
  %199 = tail call i32 %198(ptr noundef nonnull %.3, ptr noundef nonnull %.1140) #6
  %200 = add nsw i32 %197, %199
  br label %201

201:                                              ; preds = %141, %144, %147, %165, %163, %187, %196, %193, %168
  %.1134 = phi i32 [ 0, %165 ], [ 0, %163 ], [ 0, %187 ], [ 0, %193 ], [ %200, %196 ], [ %.0133, %168 ], [ -2147483648, %147 ], [ -2147483648, %144 ], [ -2147483648, %141 ]
  %.0132 = phi i32 [ %167, %165 ], [ %91, %163 ], [ %188, %187 ], [ %195, %193 ], [ %199, %196 ], [ %91, %168 ], [ %91, %147 ], [ %91, %144 ], [ %91, %141 ]
  %202 = sext i32 %.1134 to i64
  %.not175 = icmp slt i64 %spec.store.select, %202
  br i1 %.not175, label %223, label %203

203:                                              ; preds = %201
  %204 = tail call i32 @IsPossibleCandidate(ptr noundef %.3, ptr noundef %.1140) #6
  %.not176 = icmp eq i32 %204, 0
  br i1 %.not176, label %223, label %.preheader

.preheader:                                       ; preds = %203
  %205 = getelementptr inbounds i8, ptr %.0136, i64 -16
  %206 = load ptr, ptr %35, align 8, !tbaa !17
  %.not177190 = icmp ult ptr %205, %206
  br i1 %.not177190, label %._crit_edge, label %.lr.ph192

.lr.ph192:                                        ; preds = %.preheader, %216
  %207 = phi ptr [ %217, %216 ], [ %205, %.preheader ]
  %.0135191 = phi ptr [ %207, %216 ], [ %.0136, %.preheader ]
  %208 = getelementptr inbounds i8, ptr %.0135191, i64 -4
  %209 = load i32, ptr %208, align 4, !tbaa !30
  %210 = icmp sgt i32 %.1134, %209
  br i1 %210, label %._crit_edge, label %211

211:                                              ; preds = %.lr.ph192
  %212 = icmp eq i32 %.1134, %209
  br i1 %212, label %213, label %216

213:                                              ; preds = %211
  %214 = getelementptr inbounds i8, ptr %.0135191, i64 -8
  %215 = load i32, ptr %214, align 8, !tbaa !31
  %.not178 = icmp slt i32 %.0132, %215
  br i1 %.not178, label %216, label %._crit_edge

216:                                              ; preds = %213, %211
  tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %.0135191, ptr noundef nonnull align 8 dereferenceable(16) %207, i64 16, i1 false), !tbaa.struct !32
  %217 = getelementptr inbounds i8, ptr %207, i64 -16
  %218 = load ptr, ptr %35, align 8, !tbaa !17
  %.not177 = icmp ult ptr %217, %218
  br i1 %.not177, label %._crit_edge, label %.lr.ph192, !llvm.loop !33

._crit_edge:                                      ; preds = %216, %213, %.lr.ph192, %.preheader
  %.0135.lcssa = phi ptr [ %.0136, %.preheader ], [ %.0135191, %.lr.ph192 ], [ %.0135191, %213 ], [ %207, %216 ]
  store ptr %.1140, ptr %.0135.lcssa, align 8, !tbaa !18
  %219 = getelementptr inbounds i8, ptr %.0135.lcssa, i64 8
  store i32 %.0132, ptr %219, align 8, !tbaa !31
  %220 = getelementptr inbounds i8, ptr %.0135.lcssa, i64 12
  store i32 %.1134, ptr %220, align 4, !tbaa !30
  %221 = icmp slt i32 %.0, %0
  %.1137.idx = select i1 %221, i64 16, i64 0
  %.1137 = getelementptr inbounds i8, ptr %.0136, i64 %.1137.idx
  %222 = zext i1 %221 to i32
  %.1 = add nsw i32 %.0, %222
  store ptr null, ptr %.1137, align 8, !tbaa !18
  br label %223

223:                                              ; preds = %201, %203, %._crit_edge, %170, %175, %181, %149, %151, %154, %72
  %.2138 = phi ptr [ %.0136, %72 ], [ %.1137, %._crit_edge ], [ %.0136, %203 ], [ %.0136, %201 ], [ %.0136, %149 ], [ %.0136, %151 ], [ %.0136, %154 ], [ %.0136, %170 ], [ %.0136, %175 ], [ %.0136, %181 ]
  %.2 = phi i32 [ %.0, %72 ], [ %.1, %._crit_edge ], [ %.0, %203 ], [ %.0, %201 ], [ %.0, %149 ], [ %.0, %151 ], [ %.0, %154 ], [ %.0, %170 ], [ %0, %175 ], [ %0, %181 ]
  %224 = getelementptr inbounds i8, ptr %.1140, i64 72
  %225 = load ptr, ptr %224, align 8, !tbaa !14
  %226 = load ptr, ptr @FirstNode, align 8, !tbaa !9
  %.not179 = icmp eq ptr %225, %226
  br i1 %.not179, label %227, label %72, !llvm.loop !34

227:                                              ; preds = %223
  %228 = getelementptr inbounds i8, ptr %.3, i64 72
  %229 = load ptr, ptr %228, align 8, !tbaa !14
  %.not180 = icmp eq ptr %229, %225
  br i1 %.not180, label %230, label %.preheader183, !llvm.loop !35

230:                                              ; preds = %227
  tail call void @AddTourCandidates() #6
  %.not181 = icmp eq i32 %2, 0
  br i1 %.not181, label %232, label %231

231:                                              ; preds = %230
  tail call void @SymmetrizeCandidateSet() #6
  br label %232

232:                                              ; preds = %231, %230
  %233 = load i32, ptr @TraceLevel, align 4, !tbaa !5
  %234 = icmp sgt i32 %233, 1
  br i1 %234, label %235, label %.loopexit185

235:                                              ; preds = %232
  tail call void (ptr, ...) @printff(ptr noundef nonnull @.str.4) #6
  br label %.loopexit185

.loopexit185:                                     ; preds = %30, %232, %235
  ret void
}

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

declare void @FreeCandidateSets() local_unnamed_addr #1

; Function Attrs: mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite)
declare noalias noundef ptr @malloc(i64 noundef) local_unnamed_addr #2

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #3

declare void @AddTourCandidates() local_unnamed_addr #1

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

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

; Function Attrs: nounwind uwtable
declare hidden i32 @Max(i32 noundef, i32 noundef) local_unnamed_addr #0

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

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

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

declare void @SymmetrizeCandidateSet() local_unnamed_addr #1

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

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 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite) "alloc-family"="malloc" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { noreturn nounwind "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 #4 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #5 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #6 = { nounwind }
attributes #7 = { nounwind allocsize(0) }
attributes #8 = { noreturn 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 = !{!"any pointer", !7, i64 0}
!11 = !{!12, !10, i64 144}
!12 = !{!"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, !10, i64 56, !10, i64 64, !10, i64 72, !10, i64 80, !10, i64 88, !10, i64 96, !10, i64 104, !10, i64 112, !10, i64 120, !10, i64 128, !10, i64 136, !10, i64 144, !10, i64 152, !10, i64 160, !10, i64 168, !10, i64 176, !10, i64 184, !10, i64 192, !10, i64 200, !10, i64 208, !10, i64 216, !10, i64 224, !10, i64 232, !10, i64 240, !10, i64 248, !10, i64 256, !10, i64 264, !10, i64 272, !10, i64 280, !10, i64 288, !10, i64 296, !10, i64 304, !13, i64 312, !13, i64 320, !13, i64 328, !13, i64 336, !13, i64 344, !13, i64 352, !7, i64 360, !7, i64 361, !7, i64 362}
!13 = !{!"double", !7, i64 0}
!14 = !{!12, !10, i64 72}
!15 = distinct !{!15, !16}
!16 = !{!"llvm.loop.mustprogress"}
!17 = !{!12, !10, i64 288}
!18 = !{!19, !10, i64 0}
!19 = !{!"Candidate", !10, i64 0, !6, i64 8, !6, i64 12}
!20 = distinct !{!20, !16}
!21 = distinct !{!21, !16}
!22 = !{!12, !6, i64 44}
!23 = !{!12, !10, i64 112}
!24 = !{!12, !10, i64 152}
!25 = !{!12, !10, i64 160}
!26 = !{!12, !6, i64 20}
!27 = distinct !{!27, !16}
!28 = !{!12, !6, i64 24}
!29 = !{!12, !10, i64 200}
!30 = !{!19, !6, i64 12}
!31 = !{!19, !6, i64 8}
!32 = !{i64 0, i64 8, !9, i64 8, i64 4, !5, i64 12, i64 4, !5}
!33 = distinct !{!33, !16}
!34 = distinct !{!34, !16}
!35 = distinct !{!35, !16}


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