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

; 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
@Optimum = external dso_local global i64, align 8
@Excess = external dso_local global double, align 8
@AscentCandidates = external dso_local global i32, align 4
@InitialPeriod = external dso_local global i32, align 4
@MaxTrials = external dso_local global i32, align 4
@BestCost = external dso_local global i64, align 8
@SubproblemsCompressed = external dso_local global i32, align 4
@TraceLevel = external dso_local global i32, align 4
@.str = external hidden unnamed_addr constant [50 x i8], align 1
@C = external dso_local global ptr, align 8
@Dimension = external dso_local global i32, align 4
@CacheSig = external dso_local global ptr, align 8
@CacheMask = external dso_local global i32, align 4
@Distance = external dso_local global ptr, align 8
@.str.1 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [58 x i8], align 1
@Run = external dso_local global i32, align 4
@Runs = external dso_local global i32, align 4
@Norm = external dso_local global i32, align 4
@MaxPopulationSize = external dso_local global i32, align 4
@PopulationSize = external dso_local global i32, align 4
@Fitness = external dso_local global ptr, align 8
@OutputTourFileName = external dso_local global ptr, align 8
@ProblemType = external dso_local global i32, align 4
@DimensionSaved = external dso_local global i32, align 4
@BetterTour = external dso_local global ptr, align 8
@TourFileName = external dso_local global ptr, align 8
@BestTour = external dso_local global ptr, align 8
@.str.3 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [1 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [41 x i8], align 1
@Seed = external dso_local global i32, align 4
@NodeSet = external dso_local global ptr, align 8
@Precision = external dso_local global i32, align 4

; Function Attrs: nounwind uwtable
define dso_local i32 @SolveSubproblem(i32 noundef %0, i32 noundef %1, ptr noundef %2) #0 {
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  %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 ptr, align 8
  %12 = alloca i64, align 8
  %13 = alloca i64, align 8
  %14 = alloca i64, align 8
  %15 = alloca i64, align 8
  %16 = alloca double, align 8
  %17 = alloca double, align 8
  %18 = alloca double, align 8
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca ptr, align 8
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  store i32 %0, ptr %5, align 4, !tbaa !5
  store i32 %1, ptr %6, align 4, !tbaa !5
  store ptr %2, ptr %7, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #4
  %32 = load ptr, ptr @FirstNode, align 8, !tbaa !9
  store ptr %32, ptr %8, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #4
  store ptr null, ptr %11, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #4
  %33 = load i64, ptr @Optimum, align 8, !tbaa !11
  store i64 %33, ptr %12, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #4
  %34 = load double, ptr @Excess, align 8, !tbaa !13
  store double %34, ptr %18, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #4
  store i32 0, ptr %19, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #4
  store i32 0, ptr %20, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #4
  store i32 0, ptr %23, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #4
  %35 = load i32, ptr @AscentCandidates, align 4, !tbaa !5
  store i32 %35, ptr %24, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #4
  %36 = load i32, ptr @InitialPeriod, align 4, !tbaa !5
  store i32 %36, ptr %25, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #4
  %37 = load i32, ptr @MaxTrials, align 4, !tbaa !5
  store i32 %37, ptr %26, align 4, !tbaa !5
  store i64 9223372036854775807, ptr @BestCost, align 8, !tbaa !11
  store ptr null, ptr @FirstNode, align 8, !tbaa !9
  %38 = load ptr, ptr %8, align 8, !tbaa !9
  store ptr %38, ptr %9, align 8, !tbaa !9
  br label %39

39:                                               ; preds = %297, %3
  %40 = load ptr, ptr %9, align 8, !tbaa !9
  %41 = getelementptr inbounds %struct.Node, ptr %40, i32 0, i32 12
  %42 = load i32, ptr %41, align 8, !tbaa !15
  %43 = load i32, ptr %5, align 4, !tbaa !5
  %44 = icmp eq i32 %42, %43
  br i1 %44, label %45, label %282

45:                                               ; preds = %39
  %46 = load i32, ptr @SubproblemsCompressed, align 4, !tbaa !5
  %47 = icmp ne i32 %46, 0
  br i1 %47, label %48, label %261

48:                                               ; preds = %45
  %49 = load ptr, ptr %9, align 8, !tbaa !9
  %50 = getelementptr inbounds %struct.Node, ptr %49, i32 0, i32 34
  %51 = load ptr, ptr %50, align 8, !tbaa !17
  %52 = load ptr, ptr %9, align 8, !tbaa !9
  %53 = getelementptr inbounds %struct.Node, ptr %52, i32 0, i32 36
  %54 = load ptr, ptr %53, align 8, !tbaa !18
  %55 = icmp eq ptr %51, %54
  br i1 %55, label %100, label %56

56:                                               ; preds = %48
  %57 = load ptr, ptr %9, align 8, !tbaa !9
  %58 = getelementptr inbounds %struct.Node, ptr %57, i32 0, i32 26
  %59 = load ptr, ptr %58, align 8, !tbaa !19
  %60 = load ptr, ptr %9, align 8, !tbaa !9
  %61 = getelementptr inbounds %struct.Node, ptr %60, i32 0, i32 34
  %62 = load ptr, ptr %61, align 8, !tbaa !17
  %63 = icmp eq ptr %59, %62
  br i1 %63, label %100, label %64

64:                                               ; preds = %56
  %65 = load ptr, ptr %9, align 8, !tbaa !9
  %66 = getelementptr inbounds %struct.Node, ptr %65, i32 0, i32 27
  %67 = load ptr, ptr %66, align 8, !tbaa !20
  %68 = load ptr, ptr %9, align 8, !tbaa !9
  %69 = getelementptr inbounds %struct.Node, ptr %68, i32 0, i32 34
  %70 = load ptr, ptr %69, align 8, !tbaa !17
  %71 = icmp eq ptr %67, %70
  br i1 %71, label %100, label %72

72:                                               ; preds = %64
  %73 = load ptr, ptr %9, align 8, !tbaa !9
  %74 = load ptr, ptr %9, align 8, !tbaa !9
  %75 = getelementptr inbounds %struct.Node, ptr %74, i32 0, i32 34
  %76 = load ptr, ptr %75, align 8, !tbaa !17
  %77 = call i32 @IsCommonEdge(ptr noundef %73, ptr noundef %76)
  %78 = icmp ne i32 %77, 0
  br i1 %78, label %100, label %79

79:                                               ; preds = %72
  %80 = load ptr, ptr %9, align 8, !tbaa !9
  %81 = getelementptr inbounds %struct.Node, ptr %80, i32 0, i32 36
  %82 = load ptr, ptr %81, align 8, !tbaa !18
  %83 = icmp ne ptr %82, null
  br i1 %83, label %84, label %152

84:                                               ; preds = %79
  %85 = load ptr, ptr %9, align 8, !tbaa !9
  %86 = getelementptr inbounds %struct.Node, ptr %85, i32 0, i32 28
  %87 = load ptr, ptr %86, align 8, !tbaa !21
  %88 = load ptr, ptr %9, align 8, !tbaa !9
  %89 = getelementptr inbounds %struct.Node, ptr %88, i32 0, i32 36
  %90 = load ptr, ptr %89, align 8, !tbaa !18
  %91 = icmp eq ptr %87, %90
  br i1 %91, label %100, label %92

92:                                               ; preds = %84
  %93 = load ptr, ptr %9, align 8, !tbaa !9
  %94 = getelementptr inbounds %struct.Node, ptr %93, i32 0, i32 29
  %95 = load ptr, ptr %94, align 8, !tbaa !22
  %96 = load ptr, ptr %9, align 8, !tbaa !9
  %97 = getelementptr inbounds %struct.Node, ptr %96, i32 0, i32 36
  %98 = load ptr, ptr %97, align 8, !tbaa !18
  %99 = icmp eq ptr %95, %98
  br i1 %99, label %100, label %152

100:                                              ; preds = %92, %84, %72, %64, %56, %48
  %101 = load ptr, ptr %9, align 8, !tbaa !9
  %102 = getelementptr inbounds %struct.Node, ptr %101, i32 0, i32 35
  %103 = load ptr, ptr %102, align 8, !tbaa !23
  %104 = load ptr, ptr %9, align 8, !tbaa !9
  %105 = getelementptr inbounds %struct.Node, ptr %104, i32 0, i32 37
  %106 = load ptr, ptr %105, align 8, !tbaa !24
  %107 = icmp eq ptr %103, %106
  br i1 %107, label %256, label %108

108:                                              ; preds = %100
  %109 = load ptr, ptr %9, align 8, !tbaa !9
  %110 = getelementptr inbounds %struct.Node, ptr %109, i32 0, i32 26
  %111 = load ptr, ptr %110, align 8, !tbaa !19
  %112 = load ptr, ptr %9, align 8, !tbaa !9
  %113 = getelementptr inbounds %struct.Node, ptr %112, i32 0, i32 35
  %114 = load ptr, ptr %113, align 8, !tbaa !23
  %115 = icmp eq ptr %111, %114
  br i1 %115, label %256, label %116

116:                                              ; preds = %108
  %117 = load ptr, ptr %9, align 8, !tbaa !9
  %118 = getelementptr inbounds %struct.Node, ptr %117, i32 0, i32 27
  %119 = load ptr, ptr %118, align 8, !tbaa !20
  %120 = load ptr, ptr %9, align 8, !tbaa !9
  %121 = getelementptr inbounds %struct.Node, ptr %120, i32 0, i32 35
  %122 = load ptr, ptr %121, align 8, !tbaa !23
  %123 = icmp eq ptr %119, %122
  br i1 %123, label %256, label %124

124:                                              ; preds = %116
  %125 = load ptr, ptr %9, align 8, !tbaa !9
  %126 = load ptr, ptr %9, align 8, !tbaa !9
  %127 = getelementptr inbounds %struct.Node, ptr %126, i32 0, i32 35
  %128 = load ptr, ptr %127, align 8, !tbaa !23
  %129 = call i32 @IsCommonEdge(ptr noundef %125, ptr noundef %128)
  %130 = icmp ne i32 %129, 0
  br i1 %130, label %256, label %131

131:                                              ; preds = %124
  %132 = load ptr, ptr %9, align 8, !tbaa !9
  %133 = getelementptr inbounds %struct.Node, ptr %132, i32 0, i32 37
  %134 = load ptr, ptr %133, align 8, !tbaa !24
  %135 = icmp ne ptr %134, null
  br i1 %135, label %136, label %152

136:                                              ; preds = %131
  %137 = load ptr, ptr %9, align 8, !tbaa !9
  %138 = getelementptr inbounds %struct.Node, ptr %137, i32 0, i32 28
  %139 = load ptr, ptr %138, align 8, !tbaa !21
  %140 = load ptr, ptr %9, align 8, !tbaa !9
  %141 = getelementptr inbounds %struct.Node, ptr %140, i32 0, i32 37
  %142 = load ptr, ptr %141, align 8, !tbaa !24
  %143 = icmp eq ptr %139, %142
  br i1 %143, label %256, label %144

144:                                              ; preds = %136
  %145 = load ptr, ptr %9, align 8, !tbaa !9
  %146 = getelementptr inbounds %struct.Node, ptr %145, i32 0, i32 29
  %147 = load ptr, ptr %146, align 8, !tbaa !22
  %148 = load ptr, ptr %9, align 8, !tbaa !9
  %149 = getelementptr inbounds %struct.Node, ptr %148, i32 0, i32 37
  %150 = load ptr, ptr %149, align 8, !tbaa !24
  %151 = icmp eq ptr %147, %150
  br i1 %151, label %256, label %152

152:                                              ; preds = %144, %131, %92, %79
  %153 = load ptr, ptr %9, align 8, !tbaa !9
  %154 = getelementptr inbounds %struct.Node, ptr %153, i32 0, i32 34
  %155 = load ptr, ptr %154, align 8, !tbaa !17
  %156 = load ptr, ptr %9, align 8, !tbaa !9
  %157 = getelementptr inbounds %struct.Node, ptr %156, i32 0, i32 37
  %158 = load ptr, ptr %157, align 8, !tbaa !24
  %159 = icmp eq ptr %155, %158
  br i1 %159, label %204, label %160

160:                                              ; preds = %152
  %161 = load ptr, ptr %9, align 8, !tbaa !9
  %162 = getelementptr inbounds %struct.Node, ptr %161, i32 0, i32 26
  %163 = load ptr, ptr %162, align 8, !tbaa !19
  %164 = load ptr, ptr %9, align 8, !tbaa !9
  %165 = getelementptr inbounds %struct.Node, ptr %164, i32 0, i32 34
  %166 = load ptr, ptr %165, align 8, !tbaa !17
  %167 = icmp eq ptr %163, %166
  br i1 %167, label %204, label %168

168:                                              ; preds = %160
  %169 = load ptr, ptr %9, align 8, !tbaa !9
  %170 = getelementptr inbounds %struct.Node, ptr %169, i32 0, i32 27
  %171 = load ptr, ptr %170, align 8, !tbaa !20
  %172 = load ptr, ptr %9, align 8, !tbaa !9
  %173 = getelementptr inbounds %struct.Node, ptr %172, i32 0, i32 34
  %174 = load ptr, ptr %173, align 8, !tbaa !17
  %175 = icmp eq ptr %171, %174
  br i1 %175, label %204, label %176

176:                                              ; preds = %168
  %177 = load ptr, ptr %9, align 8, !tbaa !9
  %178 = load ptr, ptr %9, align 8, !tbaa !9
  %179 = getelementptr inbounds %struct.Node, ptr %178, i32 0, i32 34
  %180 = load ptr, ptr %179, align 8, !tbaa !17
  %181 = call i32 @IsCommonEdge(ptr noundef %177, ptr noundef %180)
  %182 = icmp ne i32 %181, 0
  br i1 %182, label %204, label %183

183:                                              ; preds = %176
  %184 = load ptr, ptr %9, align 8, !tbaa !9
  %185 = getelementptr inbounds %struct.Node, ptr %184, i32 0, i32 37
  %186 = load ptr, ptr %185, align 8, !tbaa !24
  %187 = icmp ne ptr %186, null
  br i1 %187, label %188, label %261

188:                                              ; preds = %183
  %189 = load ptr, ptr %9, align 8, !tbaa !9
  %190 = getelementptr inbounds %struct.Node, ptr %189, i32 0, i32 28
  %191 = load ptr, ptr %190, align 8, !tbaa !21
  %192 = load ptr, ptr %9, align 8, !tbaa !9
  %193 = getelementptr inbounds %struct.Node, ptr %192, i32 0, i32 37
  %194 = load ptr, ptr %193, align 8, !tbaa !24
  %195 = icmp eq ptr %191, %194
  br i1 %195, label %204, label %196

196:                                              ; preds = %188
  %197 = load ptr, ptr %9, align 8, !tbaa !9
  %198 = getelementptr inbounds %struct.Node, ptr %197, i32 0, i32 29
  %199 = load ptr, ptr %198, align 8, !tbaa !22
  %200 = load ptr, ptr %9, align 8, !tbaa !9
  %201 = getelementptr inbounds %struct.Node, ptr %200, i32 0, i32 37
  %202 = load ptr, ptr %201, align 8, !tbaa !24
  %203 = icmp eq ptr %199, %202
  br i1 %203, label %204, label %261

204:                                              ; preds = %196, %188, %176, %168, %160, %152
  %205 = load ptr, ptr %9, align 8, !tbaa !9
  %206 = getelementptr inbounds %struct.Node, ptr %205, i32 0, i32 35
  %207 = load ptr, ptr %206, align 8, !tbaa !23
  %208 = load ptr, ptr %9, align 8, !tbaa !9
  %209 = getelementptr inbounds %struct.Node, ptr %208, i32 0, i32 36
  %210 = load ptr, ptr %209, align 8, !tbaa !18
  %211 = icmp eq ptr %207, %210
  br i1 %211, label %256, label %212

212:                                              ; preds = %204
  %213 = load ptr, ptr %9, align 8, !tbaa !9
  %214 = getelementptr inbounds %struct.Node, ptr %213, i32 0, i32 26
  %215 = load ptr, ptr %214, align 8, !tbaa !19
  %216 = load ptr, ptr %9, align 8, !tbaa !9
  %217 = getelementptr inbounds %struct.Node, ptr %216, i32 0, i32 35
  %218 = load ptr, ptr %217, align 8, !tbaa !23
  %219 = icmp eq ptr %215, %218
  br i1 %219, label %256, label %220

220:                                              ; preds = %212
  %221 = load ptr, ptr %9, align 8, !tbaa !9
  %222 = getelementptr inbounds %struct.Node, ptr %221, i32 0, i32 27
  %223 = load ptr, ptr %222, align 8, !tbaa !20
  %224 = load ptr, ptr %9, align 8, !tbaa !9
  %225 = getelementptr inbounds %struct.Node, ptr %224, i32 0, i32 35
  %226 = load ptr, ptr %225, align 8, !tbaa !23
  %227 = icmp eq ptr %223, %226
  br i1 %227, label %256, label %228

228:                                              ; preds = %220
  %229 = load ptr, ptr %9, align 8, !tbaa !9
  %230 = load ptr, ptr %9, align 8, !tbaa !9
  %231 = getelementptr inbounds %struct.Node, ptr %230, i32 0, i32 35
  %232 = load ptr, ptr %231, align 8, !tbaa !23
  %233 = call i32 @IsCommonEdge(ptr noundef %229, ptr noundef %232)
  %234 = icmp ne i32 %233, 0
  br i1 %234, label %256, label %235

235:                                              ; preds = %228
  %236 = load ptr, ptr %9, align 8, !tbaa !9
  %237 = getelementptr inbounds %struct.Node, ptr %236, i32 0, i32 36
  %238 = load ptr, ptr %237, align 8, !tbaa !18
  %239 = icmp ne ptr %238, null
  br i1 %239, label %240, label %261

240:                                              ; preds = %235
  %241 = load ptr, ptr %9, align 8, !tbaa !9
  %242 = getelementptr inbounds %struct.Node, ptr %241, i32 0, i32 28
  %243 = load ptr, ptr %242, align 8, !tbaa !21
  %244 = load ptr, ptr %9, align 8, !tbaa !9
  %245 = getelementptr inbounds %struct.Node, ptr %244, i32 0, i32 36
  %246 = load ptr, ptr %245, align 8, !tbaa !18
  %247 = icmp eq ptr %243, %246
  br i1 %247, label %256, label %248

248:                                              ; preds = %240
  %249 = load ptr, ptr %9, align 8, !tbaa !9
  %250 = getelementptr inbounds %struct.Node, ptr %249, i32 0, i32 29
  %251 = load ptr, ptr %250, align 8, !tbaa !22
  %252 = load ptr, ptr %9, align 8, !tbaa !9
  %253 = getelementptr inbounds %struct.Node, ptr %252, i32 0, i32 36
  %254 = load ptr, ptr %253, align 8, !tbaa !18
  %255 = icmp eq ptr %251, %254
  br i1 %255, label %256, label %261

256:                                              ; preds = %248, %240, %228, %220, %212, %204, %144, %136, %124, %116, %108, %100
  %257 = load i32, ptr %5, align 4, !tbaa !5
  %258 = sub nsw i32 0, %257
  %259 = load ptr, ptr %9, align 8, !tbaa !9
  %260 = getelementptr inbounds %struct.Node, ptr %259, i32 0, i32 12
  store i32 %258, ptr %260, align 8, !tbaa !15
  br label %269

261:                                              ; preds = %248, %235, %196, %183, %45
  %262 = load ptr, ptr @FirstNode, align 8, !tbaa !9
  %263 = icmp ne ptr %262, null
  br i1 %263, label %266, label %264

264:                                              ; preds = %261
  %265 = load ptr, ptr %9, align 8, !tbaa !9
  store ptr %265, ptr @FirstNode, align 8, !tbaa !9
  br label %266

266:                                              ; preds = %264, %261
  %267 = load i32, ptr %19, align 4, !tbaa !5
  %268 = add nsw i32 %267, 1
  store i32 %268, ptr %19, align 4, !tbaa !5
  br label %269

269:                                              ; preds = %266, %256
  %270 = load ptr, ptr %9, align 8, !tbaa !9
  %271 = getelementptr inbounds %struct.Node, ptr %270, i32 0, i32 31
  store ptr null, ptr %271, align 8, !tbaa !25
  %272 = load ptr, ptr %9, align 8, !tbaa !9
  %273 = getelementptr inbounds %struct.Node, ptr %272, i32 0, i32 30
  store ptr null, ptr %273, align 8, !tbaa !26
  %274 = load ptr, ptr %9, align 8, !tbaa !9
  %275 = getelementptr inbounds %struct.Node, ptr %274, i32 0, i32 37
  %276 = load ptr, ptr %275, align 8, !tbaa !24
  %277 = icmp ne ptr %276, null
  br i1 %277, label %278, label %281

278:                                              ; preds = %269
  %279 = load i32, ptr %20, align 4, !tbaa !5
  %280 = add nsw i32 %279, 1
  store i32 %280, ptr %20, align 4, !tbaa !5
  br label %281

281:                                              ; preds = %278, %269
  br label %282

282:                                              ; preds = %281, %39
  %283 = load ptr, ptr %9, align 8, !tbaa !9
  %284 = getelementptr inbounds %struct.Node, ptr %283, i32 0, i32 37
  store ptr null, ptr %284, align 8, !tbaa !24
  %285 = load ptr, ptr %9, align 8, !tbaa !9
  %286 = getelementptr inbounds %struct.Node, ptr %285, i32 0, i32 36
  store ptr null, ptr %286, align 8, !tbaa !18
  %287 = load ptr, ptr %9, align 8, !tbaa !9
  %288 = getelementptr inbounds %struct.Node, ptr %287, i32 0, i32 26
  %289 = load ptr, ptr %288, align 8, !tbaa !19
  %290 = load ptr, ptr %9, align 8, !tbaa !9
  %291 = getelementptr inbounds %struct.Node, ptr %290, i32 0, i32 28
  store ptr %289, ptr %291, align 8, !tbaa !21
  %292 = load ptr, ptr %9, align 8, !tbaa !9
  %293 = getelementptr inbounds %struct.Node, ptr %292, i32 0, i32 27
  %294 = load ptr, ptr %293, align 8, !tbaa !20
  %295 = load ptr, ptr %9, align 8, !tbaa !9
  %296 = getelementptr inbounds %struct.Node, ptr %295, i32 0, i32 29
  store ptr %294, ptr %296, align 8, !tbaa !22
  br label %297

297:                                              ; preds = %282
  %298 = load ptr, ptr %9, align 8, !tbaa !9
  %299 = getelementptr inbounds %struct.Node, ptr %298, i32 0, i32 35
  %300 = load ptr, ptr %299, align 8, !tbaa !23
  store ptr %300, ptr %9, align 8, !tbaa !9
  %301 = load ptr, ptr %8, align 8, !tbaa !9
  %302 = icmp ne ptr %300, %301
  br i1 %302, label %39, label %303, !llvm.loop !27

303:                                              ; preds = %297
  %304 = load i32, ptr %5, align 4, !tbaa !5
  %305 = load i32, ptr %6, align 4, !tbaa !5
  %306 = srem i32 %304, %305
  store i32 %306, ptr %21, align 4, !tbaa !5
  %307 = icmp eq i32 %306, 0
  br i1 %307, label %308, label %310

308:                                              ; preds = %303
  %309 = load i32, ptr %6, align 4, !tbaa !5
  store i32 %309, ptr %21, align 4, !tbaa !5
  br label %310

310:                                              ; preds = %308, %303
  %311 = load i32, ptr %19, align 4, !tbaa !5
  %312 = icmp sle i32 %311, 3
  br i1 %312, label %317, label %313

313:                                              ; preds = %310
  %314 = load i32, ptr %19, align 4, !tbaa !5
  %315 = load i32, ptr %20, align 4, !tbaa !5
  %316 = icmp eq i32 %314, %315
  br i1 %316, label %317, label %329

317:                                              ; preds = %313, %310
  %318 = load i32, ptr @TraceLevel, align 4, !tbaa !5
  %319 = icmp sge i32 %318, 1
  br i1 %319, label %320, label %327

320:                                              ; preds = %317
  %321 = load i32, ptr %19, align 4, !tbaa !5
  %322 = icmp sle i32 %321, 3
  br i1 %322, label %323, label %327

323:                                              ; preds = %320
  %324 = load i32, ptr %21, align 4, !tbaa !5
  %325 = load i32, ptr %6, align 4, !tbaa !5
  %326 = load i32, ptr %19, align 4, !tbaa !5
  call void (ptr, ...) @printff(ptr noundef @.str, i32 noundef %324, i32 noundef %325, i32 noundef %326)
  br label %327

327:                                              ; preds = %323, %320, %317
  %328 = load ptr, ptr %8, align 8, !tbaa !9
  store ptr %328, ptr @FirstNode, align 8, !tbaa !9
  store i32 0, ptr %4, align 4
  store i32 1, ptr %27, align 4
  br label %1426

329:                                              ; preds = %313
  %330 = load i32, ptr @AscentCandidates, align 4, !tbaa !5
  %331 = load i32, ptr %19, align 4, !tbaa !5
  %332 = sub nsw i32 %331, 1
  %333 = icmp sgt i32 %330, %332
  br i1 %333, label %334, label %337

334:                                              ; preds = %329
  %335 = load i32, ptr %19, align 4, !tbaa !5
  %336 = sub nsw i32 %335, 1
  store i32 %336, ptr @AscentCandidates, align 4, !tbaa !5
  br label %337

337:                                              ; preds = %334, %329
  %338 = load i32, ptr @InitialPeriod, align 4, !tbaa !5
  %339 = icmp slt i32 %338, 0
  br i1 %339, label %340, label %347

340:                                              ; preds = %337
  %341 = load i32, ptr %19, align 4, !tbaa !5
  %342 = sdiv i32 %341, 2
  store i32 %342, ptr @InitialPeriod, align 4, !tbaa !5
  %343 = load i32, ptr @InitialPeriod, align 4, !tbaa !5
  %344 = icmp slt i32 %343, 100
  br i1 %344, label %345, label %346

345:                                              ; preds = %340
  store i32 100, ptr @InitialPeriod, align 4, !tbaa !5
  br label %346

346:                                              ; preds = %345, %340
  br label %347

347:                                              ; preds = %346, %337
  %348 = load double, ptr @Excess, align 8, !tbaa !13
  %349 = fcmp olt double %348, 0.000000e+00
  br i1 %349, label %350, label %354

350:                                              ; preds = %347
  %351 = load i32, ptr %19, align 4, !tbaa !5
  %352 = sitofp i32 %351 to double
  %353 = fdiv double 1.000000e+00, %352
  store double %353, ptr @Excess, align 8, !tbaa !13
  br label %354

354:                                              ; preds = %350, %347
  %355 = load i32, ptr @MaxTrials, align 4, !tbaa !5
  %356 = icmp eq i32 %355, -1
  br i1 %356, label %357, label %359

357:                                              ; preds = %354
  %358 = load i32, ptr %19, align 4, !tbaa !5
  store i32 %358, ptr @MaxTrials, align 4, !tbaa !5
  br label %359

359:                                              ; preds = %357, %354
  %360 = load ptr, ptr @FirstNode, align 8, !tbaa !9
  store ptr %360, ptr %9, align 8, !tbaa !9
  br label %361

361:                                              ; preds = %503, %359
  %362 = load ptr, ptr %9, align 8, !tbaa !9
  %363 = getelementptr inbounds %struct.Node, ptr %362, i32 0, i32 35
  %364 = load ptr, ptr %363, align 8, !tbaa !23
  store ptr %364, ptr %10, align 8, !tbaa !9
  %365 = load ptr, ptr %9, align 8, !tbaa !9
  %366 = getelementptr inbounds %struct.Node, ptr %365, i32 0, i32 12
  %367 = load i32, ptr %366, align 8, !tbaa !15
  %368 = load i32, ptr %5, align 4, !tbaa !5
  %369 = icmp eq i32 %367, %368
  br i1 %369, label %370, label %410

370:                                              ; preds = %361
  %371 = load ptr, ptr %9, align 8, !tbaa !9
  %372 = load ptr, ptr %9, align 8, !tbaa !9
  %373 = getelementptr inbounds %struct.Node, ptr %372, i32 0, i32 16
  store ptr %371, ptr %373, align 8, !tbaa !29
  %374 = load ptr, ptr %9, align 8, !tbaa !9
  %375 = getelementptr inbounds %struct.Node, ptr %374, i32 0, i32 15
  store ptr %371, ptr %375, align 8, !tbaa !30
  %376 = load ptr, ptr %9, align 8, !tbaa !9
  %377 = load ptr, ptr @FirstNode, align 8, !tbaa !9
  %378 = icmp ne ptr %376, %377
  br i1 %378, label %379, label %408

379:                                              ; preds = %370
  %380 = load ptr, ptr %9, align 8, !tbaa !9
  %381 = getelementptr inbounds %struct.Node, ptr %380, i32 0, i32 15
  %382 = load ptr, ptr %381, align 8, !tbaa !30
  %383 = load ptr, ptr %9, align 8, !tbaa !9
  %384 = getelementptr inbounds %struct.Node, ptr %383, i32 0, i32 16
  %385 = load ptr, ptr %384, align 8, !tbaa !29
  %386 = load ptr, ptr %9, align 8, !tbaa !9
  %387 = getelementptr inbounds %struct.Node, ptr %386, i32 0, i32 15
  %388 = load ptr, ptr %387, align 8, !tbaa !30
  %389 = getelementptr inbounds %struct.Node, ptr %388, i32 0, i32 16
  store ptr %385, ptr %389, align 8, !tbaa !29
  %390 = getelementptr inbounds %struct.Node, ptr %385, i32 0, i32 15
  store ptr %382, ptr %390, align 8, !tbaa !30
  %391 = load ptr, ptr %9, align 8, !tbaa !9
  %392 = load ptr, ptr %9, align 8, !tbaa !9
  %393 = load ptr, ptr %9, align 8, !tbaa !9
  %394 = getelementptr inbounds %struct.Node, ptr %393, i32 0, i32 16
  store ptr %392, ptr %394, align 8, !tbaa !29
  %395 = getelementptr inbounds %struct.Node, ptr %392, i32 0, i32 15
  store ptr %391, ptr %395, align 8, !tbaa !30
  %396 = load ptr, ptr %9, align 8, !tbaa !9
  %397 = load ptr, ptr %11, align 8, !tbaa !9
  %398 = getelementptr inbounds %struct.Node, ptr %397, i32 0, i32 16
  %399 = load ptr, ptr %398, align 8, !tbaa !29
  %400 = load ptr, ptr %9, align 8, !tbaa !9
  %401 = getelementptr inbounds %struct.Node, ptr %400, i32 0, i32 16
  store ptr %399, ptr %401, align 8, !tbaa !29
  %402 = getelementptr inbounds %struct.Node, ptr %399, i32 0, i32 15
  store ptr %396, ptr %402, align 8, !tbaa !30
  %403 = load ptr, ptr %11, align 8, !tbaa !9
  %404 = load ptr, ptr %9, align 8, !tbaa !9
  %405 = load ptr, ptr %11, align 8, !tbaa !9
  %406 = getelementptr inbounds %struct.Node, ptr %405, i32 0, i32 16
  store ptr %404, ptr %406, align 8, !tbaa !29
  %407 = getelementptr inbounds %struct.Node, ptr %404, i32 0, i32 15
  store ptr %403, ptr %407, align 8, !tbaa !30
  br label %408

408:                                              ; preds = %379, %370
  %409 = load ptr, ptr %9, align 8, !tbaa !9
  store ptr %409, ptr %11, align 8, !tbaa !9
  br label %502

410:                                              ; preds = %361
  %411 = load ptr, ptr %10, align 8, !tbaa !9
  %412 = getelementptr inbounds %struct.Node, ptr %411, i32 0, i32 12
  %413 = load i32, ptr %412, align 8, !tbaa !15
  %414 = load i32, ptr %5, align 4, !tbaa !5
  %415 = icmp eq i32 %413, %414
  br i1 %415, label %416, label %501

416:                                              ; preds = %410
  %417 = load ptr, ptr %11, align 8, !tbaa !9
  %418 = getelementptr inbounds %struct.Node, ptr %417, i32 0, i32 26
  %419 = load ptr, ptr %418, align 8, !tbaa !19
  %420 = load ptr, ptr %10, align 8, !tbaa !9
  %421 = icmp eq ptr %419, %420
  br i1 %421, label %501, label %422

422:                                              ; preds = %416
  %423 = load ptr, ptr %11, align 8, !tbaa !9
  %424 = getelementptr inbounds %struct.Node, ptr %423, i32 0, i32 27
  %425 = load ptr, ptr %424, align 8, !tbaa !20
  %426 = load ptr, ptr %10, align 8, !tbaa !9
  %427 = icmp eq ptr %425, %426
  br i1 %427, label %501, label %428

428:                                              ; preds = %422
  %429 = load ptr, ptr %11, align 8, !tbaa !9
  %430 = getelementptr inbounds %struct.Node, ptr %429, i32 0, i32 26
  %431 = load ptr, ptr %430, align 8, !tbaa !19
  %432 = icmp ne ptr %431, null
  br i1 %432, label %433, label %441

433:                                              ; preds = %428
  %434 = load ptr, ptr %11, align 8, !tbaa !9
  %435 = getelementptr inbounds %struct.Node, ptr %434, i32 0, i32 26
  %436 = load ptr, ptr %435, align 8, !tbaa !19
  %437 = getelementptr inbounds %struct.Node, ptr %436, i32 0, i32 12
  %438 = load i32, ptr %437, align 8, !tbaa !15
  %439 = load i32, ptr %5, align 4, !tbaa !5
  %440 = icmp ne i32 %438, %439
  br i1 %440, label %441, label %445

441:                                              ; preds = %433, %428
  %442 = load ptr, ptr %10, align 8, !tbaa !9
  %443 = load ptr, ptr %11, align 8, !tbaa !9
  %444 = getelementptr inbounds %struct.Node, ptr %443, i32 0, i32 26
  store ptr %442, ptr %444, align 8, !tbaa !19
  br label %449

445:                                              ; preds = %433
  %446 = load ptr, ptr %10, align 8, !tbaa !9
  %447 = load ptr, ptr %11, align 8, !tbaa !9
  %448 = getelementptr inbounds %struct.Node, ptr %447, i32 0, i32 27
  store ptr %446, ptr %448, align 8, !tbaa !20
  br label %449

449:                                              ; preds = %445, %441
  %450 = load ptr, ptr %10, align 8, !tbaa !9
  %451 = getelementptr inbounds %struct.Node, ptr %450, i32 0, i32 26
  %452 = load ptr, ptr %451, align 8, !tbaa !19
  %453 = icmp ne ptr %452, null
  br i1 %453, label %454, label %462

454:                                              ; preds = %449
  %455 = load ptr, ptr %10, align 8, !tbaa !9
  %456 = getelementptr inbounds %struct.Node, ptr %455, i32 0, i32 26
  %457 = load ptr, ptr %456, align 8, !tbaa !19
  %458 = getelementptr inbounds %struct.Node, ptr %457, i32 0, i32 12
  %459 = load i32, ptr %458, align 8, !tbaa !15
  %460 = load i32, ptr %5, align 4, !tbaa !5
  %461 = icmp ne i32 %459, %460
  br i1 %461, label %462, label %466

462:                                              ; preds = %454, %449
  %463 = load ptr, ptr %11, align 8, !tbaa !9
  %464 = load ptr, ptr %10, align 8, !tbaa !9
  %465 = getelementptr inbounds %struct.Node, ptr %464, i32 0, i32 26
  store ptr %463, ptr %465, align 8, !tbaa !19
  br label %470

466:                                              ; preds = %454
  %467 = load ptr, ptr %11, align 8, !tbaa !9
  %468 = load ptr, ptr %10, align 8, !tbaa !9
  %469 = getelementptr inbounds %struct.Node, ptr %468, i32 0, i32 27
  store ptr %467, ptr %469, align 8, !tbaa !20
  br label %470

470:                                              ; preds = %466, %462
  %471 = load ptr, ptr @C, align 8, !tbaa !9
  %472 = icmp eq ptr %471, @C_EXPLICIT
  br i1 %472, label %473, label %500

473:                                              ; preds = %470
  %474 = load ptr, ptr %11, align 8, !tbaa !9
  %475 = getelementptr inbounds %struct.Node, ptr %474, i32 0, i32 0
  %476 = load i32, ptr %475, align 8, !tbaa !31
  %477 = load ptr, ptr %10, align 8, !tbaa !9
  %478 = getelementptr inbounds %struct.Node, ptr %477, i32 0, i32 0
  %479 = load i32, ptr %478, align 8, !tbaa !31
  %480 = icmp sgt i32 %476, %479
  br i1 %480, label %481, label %490

481:                                              ; preds = %473
  %482 = load ptr, ptr %11, align 8, !tbaa !9
  %483 = getelementptr inbounds %struct.Node, ptr %482, i32 0, i32 14
  %484 = load ptr, ptr %483, align 8, !tbaa !32
  %485 = load ptr, ptr %10, align 8, !tbaa !9
  %486 = getelementptr inbounds %struct.Node, ptr %485, i32 0, i32 0
  %487 = load i32, ptr %486, align 8, !tbaa !31
  %488 = sext i32 %487 to i64
  %489 = getelementptr inbounds i32, ptr %484, i64 %488
  store i32 0, ptr %489, align 4, !tbaa !5
  br label %499

490:                                              ; preds = %473
  %491 = load ptr, ptr %10, align 8, !tbaa !9
  %492 = getelementptr inbounds %struct.Node, ptr %491, i32 0, i32 14
  %493 = load ptr, ptr %492, align 8, !tbaa !32
  %494 = load ptr, ptr %11, align 8, !tbaa !9
  %495 = getelementptr inbounds %struct.Node, ptr %494, i32 0, i32 0
  %496 = load i32, ptr %495, align 8, !tbaa !31
  %497 = sext i32 %496 to i64
  %498 = getelementptr inbounds i32, ptr %493, i64 %497
  store i32 0, ptr %498, align 4, !tbaa !5
  br label %499

499:                                              ; preds = %490, %481
  br label %500

500:                                              ; preds = %499, %470
  br label %501

501:                                              ; preds = %500, %422, %416, %410
  br label %502

502:                                              ; preds = %501, %408
  br label %503

503:                                              ; preds = %502
  %504 = load ptr, ptr %10, align 8, !tbaa !9
  store ptr %504, ptr %9, align 8, !tbaa !9
  %505 = load ptr, ptr @FirstNode, align 8, !tbaa !9
  %506 = icmp ne ptr %504, %505
  br i1 %506, label %361, label %507, !llvm.loop !33

507:                                              ; preds = %503
  %508 = load i32, ptr %19, align 4, !tbaa !5
  store i32 %508, ptr @Dimension, align 4, !tbaa !5
  call void @AllocateSegments()
  call void @InitializeStatistics()
  %509 = load ptr, ptr @CacheSig, align 8, !tbaa !9
  %510 = icmp ne ptr %509, null
  br i1 %510, label %511, label %525

511:                                              ; preds = %507
  store i32 0, ptr %22, align 4, !tbaa !5
  br label %512

512:                                              ; preds = %521, %511
  %513 = load i32, ptr %22, align 4, !tbaa !5
  %514 = load i32, ptr @CacheMask, align 4, !tbaa !5
  %515 = icmp sle i32 %513, %514
  br i1 %515, label %516, label %524

516:                                              ; preds = %512
  %517 = load ptr, ptr @CacheSig, align 8, !tbaa !9
  %518 = load i32, ptr %22, align 4, !tbaa !5
  %519 = sext i32 %518 to i64
  %520 = getelementptr inbounds i32, ptr %517, i64 %519
  store i32 0, ptr %520, align 4, !tbaa !5
  br label %521

521:                                              ; preds = %516
  %522 = load i32, ptr %22, align 4, !tbaa !5
  %523 = add nsw i32 %522, 1
  store i32 %523, ptr %22, align 4, !tbaa !5
  br label %512, !llvm.loop !34

524:                                              ; preds = %512
  br label %525

525:                                              ; preds = %524, %507
  %526 = load i64, ptr @Optimum, align 8, !tbaa !11
  store i64 %526, ptr %12, align 8, !tbaa !11
  store i64 0, ptr @Optimum, align 8, !tbaa !11
  %527 = load ptr, ptr @FirstNode, align 8, !tbaa !9
  store ptr %527, ptr %9, align 8, !tbaa !9
  br label %528

528:                                              ; preds = %622, %525
  %529 = load ptr, ptr %9, align 8, !tbaa !9
  %530 = getelementptr inbounds %struct.Node, ptr %529, i32 0, i32 35
  %531 = load ptr, ptr %530, align 8, !tbaa !23
  %532 = load ptr, ptr %9, align 8, !tbaa !9
  %533 = getelementptr inbounds %struct.Node, ptr %532, i32 0, i32 33
  %534 = load ptr, ptr %533, align 8, !tbaa !35
  %535 = icmp eq ptr %531, %534
  br i1 %535, label %544, label %536

536:                                              ; preds = %528
  %537 = load ptr, ptr %9, align 8, !tbaa !9
  %538 = getelementptr inbounds %struct.Node, ptr %537, i32 0, i32 34
  %539 = load ptr, ptr %538, align 8, !tbaa !17
  %540 = load ptr, ptr %9, align 8, !tbaa !9
  %541 = getelementptr inbounds %struct.Node, ptr %540, i32 0, i32 33
  %542 = load ptr, ptr %541, align 8, !tbaa !35
  %543 = icmp eq ptr %539, %542
  br i1 %543, label %544, label %547

544:                                              ; preds = %536, %528
  %545 = load i32, ptr %23, align 4, !tbaa !5
  %546 = add nsw i32 %545, 1
  store i32 %546, ptr %23, align 4, !tbaa !5
  br label %547

547:                                              ; preds = %544, %536
  %548 = load ptr, ptr %9, align 8, !tbaa !9
  %549 = getelementptr inbounds %struct.Node, ptr %548, i32 0, i32 26
  %550 = load ptr, ptr %549, align 8, !tbaa !19
  %551 = load ptr, ptr %9, align 8, !tbaa !9
  %552 = getelementptr inbounds %struct.Node, ptr %551, i32 0, i32 16
  %553 = load ptr, ptr %552, align 8, !tbaa !29
  %554 = icmp eq ptr %550, %553
  br i1 %554, label %573, label %555

555:                                              ; preds = %547
  %556 = load ptr, ptr %9, align 8, !tbaa !9
  %557 = getelementptr inbounds %struct.Node, ptr %556, i32 0, i32 27
  %558 = load ptr, ptr %557, align 8, !tbaa !20
  %559 = load ptr, ptr %9, align 8, !tbaa !9
  %560 = getelementptr inbounds %struct.Node, ptr %559, i32 0, i32 16
  %561 = load ptr, ptr %560, align 8, !tbaa !29
  %562 = icmp eq ptr %558, %561
  br i1 %562, label %573, label %563

563:                                              ; preds = %555
  %564 = load ptr, ptr @Distance, align 8, !tbaa !9
  %565 = load ptr, ptr %9, align 8, !tbaa !9
  %566 = load ptr, ptr %9, align 8, !tbaa !9
  %567 = getelementptr inbounds %struct.Node, ptr %566, i32 0, i32 16
  %568 = load ptr, ptr %567, align 8, !tbaa !29
  %569 = call i32 %564(ptr noundef %565, ptr noundef %568)
  %570 = sext i32 %569 to i64
  %571 = load i64, ptr @Optimum, align 8, !tbaa !11
  %572 = add nsw i64 %571, %570
  store i64 %572, ptr @Optimum, align 8, !tbaa !11
  br label %573

573:                                              ; preds = %563, %555, %547
  %574 = load ptr, ptr %9, align 8, !tbaa !9
  %575 = getelementptr inbounds %struct.Node, ptr %574, i32 0, i32 26
  %576 = load ptr, ptr %575, align 8, !tbaa !19
  %577 = icmp ne ptr %576, null
  br i1 %577, label %578, label %597

578:                                              ; preds = %573
  %579 = load ptr, ptr %9, align 8, !tbaa !9
  %580 = getelementptr inbounds %struct.Node, ptr %579, i32 0, i32 12
  %581 = load i32, ptr %580, align 8, !tbaa !15
  %582 = load ptr, ptr %9, align 8, !tbaa !9
  %583 = getelementptr inbounds %struct.Node, ptr %582, i32 0, i32 26
  %584 = load ptr, ptr %583, align 8, !tbaa !19
  %585 = getelementptr inbounds %struct.Node, ptr %584, i32 0, i32 12
  %586 = load i32, ptr %585, align 8, !tbaa !15
  %587 = icmp ne i32 %581, %586
  br i1 %587, label %588, label %597

588:                                              ; preds = %578
  %589 = load ptr, ptr %9, align 8, !tbaa !9
  %590 = getelementptr inbounds %struct.Node, ptr %589, i32 0, i32 0
  %591 = load i32, ptr %590, align 8, !tbaa !31
  %592 = load ptr, ptr %9, align 8, !tbaa !9
  %593 = getelementptr inbounds %struct.Node, ptr %592, i32 0, i32 26
  %594 = load ptr, ptr %593, align 8, !tbaa !19
  %595 = getelementptr inbounds %struct.Node, ptr %594, i32 0, i32 0
  %596 = load i32, ptr %595, align 8, !tbaa !31
  call void (ptr, ...) @eprintf(ptr noundef @.str.1, i32 noundef %591, i32 noundef %596)
  br label %597

597:                                              ; preds = %588, %578, %573
  %598 = load ptr, ptr %9, align 8, !tbaa !9
  %599 = getelementptr inbounds %struct.Node, ptr %598, i32 0, i32 27
  %600 = load ptr, ptr %599, align 8, !tbaa !20
  %601 = icmp ne ptr %600, null
  br i1 %601, label %602, label %621

602:                                              ; preds = %597
  %603 = load ptr, ptr %9, align 8, !tbaa !9
  %604 = getelementptr inbounds %struct.Node, ptr %603, i32 0, i32 12
  %605 = load i32, ptr %604, align 8, !tbaa !15
  %606 = load ptr, ptr %9, align 8, !tbaa !9
  %607 = getelementptr inbounds %struct.Node, ptr %606, i32 0, i32 27
  %608 = load ptr, ptr %607, align 8, !tbaa !20
  %609 = getelementptr inbounds %struct.Node, ptr %608, i32 0, i32 12
  %610 = load i32, ptr %609, align 8, !tbaa !15
  %611 = icmp ne i32 %605, %610
  br i1 %611, label %612, label %621

612:                                              ; preds = %602
  %613 = load ptr, ptr %9, align 8, !tbaa !9
  %614 = getelementptr inbounds %struct.Node, ptr %613, i32 0, i32 0
  %615 = load i32, ptr %614, align 8, !tbaa !31
  %616 = load ptr, ptr %9, align 8, !tbaa !9
  %617 = getelementptr inbounds %struct.Node, ptr %616, i32 0, i32 27
  %618 = load ptr, ptr %617, align 8, !tbaa !20
  %619 = getelementptr inbounds %struct.Node, ptr %618, i32 0, i32 0
  %620 = load i32, ptr %619, align 8, !tbaa !31
  call void (ptr, ...) @eprintf(ptr noundef @.str.1, i32 noundef %615, i32 noundef %620)
  br label %621

621:                                              ; preds = %612, %602, %597
  br label %622

622:                                              ; preds = %621
  %623 = load ptr, ptr %9, align 8, !tbaa !9
  %624 = getelementptr inbounds %struct.Node, ptr %623, i32 0, i32 16
  %625 = load ptr, ptr %624, align 8, !tbaa !29
  store ptr %625, ptr %9, align 8, !tbaa !9
  %626 = load ptr, ptr @FirstNode, align 8, !tbaa !9
  %627 = icmp ne ptr %625, %626
  br i1 %627, label %528, label %628, !llvm.loop !36

628:                                              ; preds = %622
  %629 = load i32, ptr @TraceLevel, align 4, !tbaa !5
  %630 = icmp sge i32 %629, 1
  br i1 %630, label %631, label %636

631:                                              ; preds = %628
  %632 = load i32, ptr %21, align 4, !tbaa !5
  %633 = load i32, ptr %6, align 4, !tbaa !5
  %634 = load i32, ptr @Dimension, align 4, !tbaa !5
  %635 = load i64, ptr @Optimum, align 8, !tbaa !11
  call void (ptr, ...) @printff(ptr noundef @.str.2, i32 noundef %632, i32 noundef %633, i32 noundef %634, i64 noundef %635)
  br label %636

636:                                              ; preds = %631, %628
  call void @FreeCandidateSets()
  call void @CreateCandidateSet()
  store i32 1, ptr @Run, align 4, !tbaa !5
  br label %637

637:                                              ; preds = %1165, %636
  %638 = load i32, ptr @Run, align 4, !tbaa !5
  %639 = load i32, ptr @Runs, align 4, !tbaa !5
  %640 = icmp sle i32 %638, %639
  br i1 %640, label %641, label %1168

641:                                              ; preds = %637
  %642 = call double @GetTime()
  store double %642, ptr %16, align 8, !tbaa !13
  %643 = load i32, ptr @Norm, align 4, !tbaa !5
  %644 = icmp ne i32 %643, 0
  br i1 %644, label %645, label %647

645:                                              ; preds = %641
  %646 = call i64 @FindTour()
  br label %649

647:                                              ; preds = %641
  %648 = load i64, ptr @Optimum, align 8, !tbaa !11
  br label %649

649:                                              ; preds = %647, %645
  %650 = phi i64 [ %646, %645 ], [ %648, %647 ]
  store i64 %650, ptr %13, align 8, !tbaa !11
  store ptr null, ptr %11, align 8, !tbaa !9
  %651 = load ptr, ptr @FirstNode, align 8, !tbaa !9
  store ptr %651, ptr %9, align 8, !tbaa !9
  br label %652

652:                                              ; preds = %668, %649
  %653 = load ptr, ptr %9, align 8, !tbaa !9
  %654 = getelementptr inbounds %struct.Node, ptr %653, i32 0, i32 12
  %655 = load i32, ptr %654, align 8, !tbaa !15
  %656 = load i32, ptr %5, align 4, !tbaa !5
  %657 = icmp eq i32 %655, %656
  br i1 %657, label %658, label %667

658:                                              ; preds = %652
  %659 = load ptr, ptr %11, align 8, !tbaa !9
  %660 = icmp ne ptr %659, null
  br i1 %660, label %661, label %665

661:                                              ; preds = %658
  %662 = load ptr, ptr %9, align 8, !tbaa !9
  %663 = load ptr, ptr %11, align 8, !tbaa !9
  %664 = getelementptr inbounds %struct.Node, ptr %663, i32 0, i32 23
  store ptr %662, ptr %664, align 8, !tbaa !37
  br label %665

665:                                              ; preds = %661, %658
  %666 = load ptr, ptr %9, align 8, !tbaa !9
  store ptr %666, ptr %11, align 8, !tbaa !9
  br label %667

667:                                              ; preds = %665, %652
  br label %668

668:                                              ; preds = %667
  %669 = load ptr, ptr %9, align 8, !tbaa !9
  %670 = getelementptr inbounds %struct.Node, ptr %669, i32 0, i32 35
  %671 = load ptr, ptr %670, align 8, !tbaa !23
  store ptr %671, ptr %9, align 8, !tbaa !9
  %672 = load ptr, ptr @FirstNode, align 8, !tbaa !9
  %673 = icmp ne ptr %671, %672
  br i1 %673, label %652, label %674, !llvm.loop !38

674:                                              ; preds = %668
  %675 = load ptr, ptr @FirstNode, align 8, !tbaa !9
  %676 = load ptr, ptr %11, align 8, !tbaa !9
  %677 = getelementptr inbounds %struct.Node, ptr %676, i32 0, i32 23
  store ptr %675, ptr %677, align 8, !tbaa !37
  %678 = call i64 @MergeWithTour()
  store i64 %678, ptr %13, align 8, !tbaa !11
  %679 = load i32, ptr @MaxPopulationSize, align 4, !tbaa !5
  %680 = icmp sgt i32 %679, 1
  br i1 %680, label %681, label %726

681:                                              ; preds = %674
  store i32 0, ptr %22, align 4, !tbaa !5
  br label %682

682:                                              ; preds = %689, %681
  %683 = load i32, ptr %22, align 4, !tbaa !5
  %684 = load i32, ptr @PopulationSize, align 4, !tbaa !5
  %685 = icmp slt i32 %683, %684
  br i1 %685, label %686, label %692

686:                                              ; preds = %682
  %687 = load i32, ptr %22, align 4, !tbaa !5
  %688 = call i64 @MergeTourWithIndividual(i32 noundef %687)
  store i64 %688, ptr %13, align 8, !tbaa !11
  br label %689

689:                                              ; preds = %686
  %690 = load i32, ptr %22, align 4, !tbaa !5
  %691 = add nsw i32 %690, 1
  store i32 %691, ptr %22, align 4, !tbaa !5
  br label %682, !llvm.loop !39

692:                                              ; preds = %682
  %693 = load i64, ptr %13, align 8, !tbaa !11
  %694 = call i32 @HasFitness(i64 noundef %693)
  %695 = icmp ne i32 %694, 0
  br i1 %695, label %725, label %696

696:                                              ; preds = %692
  %697 = load i32, ptr @PopulationSize, align 4, !tbaa !5
  %698 = load i32, ptr @MaxPopulationSize, align 4, !tbaa !5
  %699 = icmp slt i32 %697, %698
  br i1 %699, label %700, label %706

700:                                              ; preds = %696
  %701 = load i64, ptr %13, align 8, !tbaa !11
  call void @AddToPopulation(i64 noundef %701)
  %702 = load i32, ptr @TraceLevel, align 4, !tbaa !5
  %703 = icmp sge i32 %702, 1
  br i1 %703, label %704, label %705

704:                                              ; preds = %700
  call void (...) @PrintPopulation()
  br label %705

705:                                              ; preds = %704, %700
  br label %724

706:                                              ; preds = %696
  %707 = load i64, ptr %13, align 8, !tbaa !11
  %708 = load ptr, ptr @Fitness, align 8, !tbaa !9
  %709 = load i32, ptr @PopulationSize, align 4, !tbaa !5
  %710 = sub nsw i32 %709, 1
  %711 = sext i32 %710 to i64
  %712 = getelementptr inbounds i64, ptr %708, i64 %711
  %713 = load i64, ptr %712, align 8, !tbaa !11
  %714 = icmp slt i64 %707, %713
  br i1 %714, label %715, label %723

715:                                              ; preds = %706
  %716 = load i32, ptr @PopulationSize, align 4, !tbaa !5
  %717 = sub nsw i32 %716, 1
  %718 = load i64, ptr %13, align 8, !tbaa !11
  call void @ReplaceIndividualWithTour(i32 noundef %717, i64 noundef %718)
  %719 = load i32, ptr @TraceLevel, align 4, !tbaa !5
  %720 = icmp sge i32 %719, 1
  br i1 %720, label %721, label %722

721:                                              ; preds = %715
  call void (...) @PrintPopulation()
  br label %722

722:                                              ; preds = %721, %715
  br label %723

723:                                              ; preds = %722, %706
  br label %724

724:                                              ; preds = %723, %705
  br label %725

725:                                              ; preds = %724, %692
  br label %726

726:                                              ; preds = %725, %674
  %727 = load i64, ptr %13, align 8, !tbaa !11
  %728 = load i64, ptr @BestCost, align 8, !tbaa !11
  %729 = icmp slt i64 %727, %728
  br i1 %729, label %730, label %751

730:                                              ; preds = %726
  %731 = load ptr, ptr @FirstNode, align 8, !tbaa !9
  store ptr %731, ptr %9, align 8, !tbaa !9
  br label %732

732:                                              ; preds = %743, %730
  %733 = load ptr, ptr %9, align 8, !tbaa !9
  %734 = getelementptr inbounds %struct.Node, ptr %733, i32 0, i32 15
  %735 = load ptr, ptr %734, align 8, !tbaa !30
  %736 = load ptr, ptr %9, align 8, !tbaa !9
  %737 = getelementptr inbounds %struct.Node, ptr %736, i32 0, i32 36
  store ptr %735, ptr %737, align 8, !tbaa !18
  %738 = load ptr, ptr %9, align 8, !tbaa !9
  %739 = getelementptr inbounds %struct.Node, ptr %738, i32 0, i32 16
  %740 = load ptr, ptr %739, align 8, !tbaa !29
  %741 = load ptr, ptr %9, align 8, !tbaa !9
  %742 = getelementptr inbounds %struct.Node, ptr %741, i32 0, i32 37
  store ptr %740, ptr %742, align 8, !tbaa !24
  br label %743

743:                                              ; preds = %732
  %744 = load ptr, ptr %9, align 8, !tbaa !9
  %745 = getelementptr inbounds %struct.Node, ptr %744, i32 0, i32 16
  %746 = load ptr, ptr %745, align 8, !tbaa !29
  store ptr %746, ptr %9, align 8, !tbaa !9
  %747 = load ptr, ptr @FirstNode, align 8, !tbaa !9
  %748 = icmp ne ptr %746, %747
  br i1 %748, label %732, label %749, !llvm.loop !40

749:                                              ; preds = %743
  %750 = load i64, ptr %13, align 8, !tbaa !11
  store i64 %750, ptr @BestCost, align 8, !tbaa !11
  br label %751

751:                                              ; preds = %749, %726
  %752 = load i64, ptr %13, align 8, !tbaa !11
  %753 = load i64, ptr @Optimum, align 8, !tbaa !11
  %754 = icmp slt i64 %752, %753
  br i1 %754, label %762, label %755

755:                                              ; preds = %751
  %756 = load i64, ptr %13, align 8, !tbaa !11
  %757 = load i64, ptr @Optimum, align 8, !tbaa !11
  %758 = icmp ne i64 %756, %757
  br i1 %758, label %759, label %1083

759:                                              ; preds = %755
  %760 = load ptr, ptr @OutputTourFileName, align 8, !tbaa !9
  %761 = icmp ne ptr %760, null
  br i1 %761, label %762, label %1083

762:                                              ; preds = %759, %751
  %763 = load i64, ptr @Optimum, align 8, !tbaa !11
  %764 = load i64, ptr %13, align 8, !tbaa !11
  %765 = sub nsw i64 %763, %764
  store i64 %765, ptr %14, align 8, !tbaa !11
  %766 = load i64, ptr %14, align 8, !tbaa !11
  %767 = icmp sgt i64 %766, 0
  br i1 %767, label %768, label %774

768:                                              ; preds = %762
  %769 = load i64, ptr %14, align 8, !tbaa !11
  %770 = load ptr, ptr %7, align 8, !tbaa !9
  %771 = load i64, ptr %770, align 8, !tbaa !11
  %772 = sub nsw i64 %771, %769
  store i64 %772, ptr %770, align 8, !tbaa !11
  store i64 %772, ptr %15, align 8, !tbaa !11
  store i64 %772, ptr @BestCost, align 8, !tbaa !11
  %773 = load i64, ptr %13, align 8, !tbaa !11
  store i64 %773, ptr @Optimum, align 8, !tbaa !11
  br label %779

774:                                              ; preds = %762
  %775 = load ptr, ptr %7, align 8, !tbaa !9
  %776 = load i64, ptr %775, align 8, !tbaa !11
  %777 = load i64, ptr %14, align 8, !tbaa !11
  %778 = sub nsw i64 %776, %777
  store i64 %778, ptr %15, align 8, !tbaa !11
  br label %779

779:                                              ; preds = %774, %768
  %780 = load ptr, ptr @FirstNode, align 8, !tbaa !9
  store ptr %780, ptr %9, align 8, !tbaa !9
  br label %781

781:                                              ; preds = %784, %779
  %782 = load ptr, ptr %9, align 8, !tbaa !9
  %783 = getelementptr inbounds %struct.Node, ptr %782, i32 0, i32 25
  store ptr null, ptr %783, align 8, !tbaa !41
  br label %784

784:                                              ; preds = %781
  %785 = load ptr, ptr %9, align 8, !tbaa !9
  %786 = getelementptr inbounds %struct.Node, ptr %785, i32 0, i32 35
  %787 = load ptr, ptr %786, align 8, !tbaa !23
  store ptr %787, ptr %9, align 8, !tbaa !9
  %788 = load ptr, ptr @FirstNode, align 8, !tbaa !9
  %789 = icmp ne ptr %787, %788
  br i1 %789, label %781, label %790, !llvm.loop !42

790:                                              ; preds = %784
  br label %791

791:                                              ; preds = %882, %790
  %792 = load ptr, ptr %9, align 8, !tbaa !9
  %793 = load ptr, ptr %9, align 8, !tbaa !9
  %794 = getelementptr inbounds %struct.Node, ptr %793, i32 0, i32 25
  store ptr %792, ptr %794, align 8, !tbaa !41
  %795 = load ptr, ptr %9, align 8, !tbaa !9
  %796 = getelementptr inbounds %struct.Node, ptr %795, i32 0, i32 35
  %797 = load ptr, ptr %796, align 8, !tbaa !23
  %798 = getelementptr inbounds %struct.Node, ptr %797, i32 0, i32 25
  %799 = load ptr, ptr %798, align 8, !tbaa !41
  %800 = icmp ne ptr %799, null
  br i1 %800, label %821, label %801

801:                                              ; preds = %791
  %802 = load ptr, ptr %9, align 8, !tbaa !9
  %803 = getelementptr inbounds %struct.Node, ptr %802, i32 0, i32 12
  %804 = load i32, ptr %803, align 8, !tbaa !15
  %805 = load i32, ptr %5, align 4, !tbaa !5
  %806 = icmp ne i32 %804, %805
  br i1 %806, label %815, label %807

807:                                              ; preds = %801
  %808 = load ptr, ptr %9, align 8, !tbaa !9
  %809 = getelementptr inbounds %struct.Node, ptr %808, i32 0, i32 35
  %810 = load ptr, ptr %809, align 8, !tbaa !23
  %811 = getelementptr inbounds %struct.Node, ptr %810, i32 0, i32 12
  %812 = load i32, ptr %811, align 8, !tbaa !15
  %813 = load i32, ptr %5, align 4, !tbaa !5
  %814 = icmp ne i32 %812, %813
  br i1 %814, label %815, label %821

815:                                              ; preds = %807, %801
  %816 = load ptr, ptr %9, align 8, !tbaa !9
  %817 = getelementptr inbounds %struct.Node, ptr %816, i32 0, i32 35
  %818 = load ptr, ptr %817, align 8, !tbaa !23
  %819 = load ptr, ptr %9, align 8, !tbaa !9
  %820 = getelementptr inbounds %struct.Node, ptr %819, i32 0, i32 19
  store ptr %818, ptr %820, align 8, !tbaa !43
  br label %881

821:                                              ; preds = %807, %791
  %822 = load ptr, ptr %9, align 8, !tbaa !9
  %823 = getelementptr inbounds %struct.Node, ptr %822, i32 0, i32 34
  %824 = load ptr, ptr %823, align 8, !tbaa !17
  %825 = getelementptr inbounds %struct.Node, ptr %824, i32 0, i32 25
  %826 = load ptr, ptr %825, align 8, !tbaa !41
  %827 = icmp ne ptr %826, null
  br i1 %827, label %848, label %828

828:                                              ; preds = %821
  %829 = load ptr, ptr %9, align 8, !tbaa !9
  %830 = getelementptr inbounds %struct.Node, ptr %829, i32 0, i32 12
  %831 = load i32, ptr %830, align 8, !tbaa !15
  %832 = load i32, ptr %5, align 4, !tbaa !5
  %833 = icmp ne i32 %831, %832
  br i1 %833, label %842, label %834

834:                                              ; preds = %828
  %835 = load ptr, ptr %9, align 8, !tbaa !9
  %836 = getelementptr inbounds %struct.Node, ptr %835, i32 0, i32 34
  %837 = load ptr, ptr %836, align 8, !tbaa !17
  %838 = getelementptr inbounds %struct.Node, ptr %837, i32 0, i32 12
  %839 = load i32, ptr %838, align 8, !tbaa !15
  %840 = load i32, ptr %5, align 4, !tbaa !5
  %841 = icmp ne i32 %839, %840
  br i1 %841, label %842, label %848

842:                                              ; preds = %834, %828
  %843 = load ptr, ptr %9, align 8, !tbaa !9
  %844 = getelementptr inbounds %struct.Node, ptr %843, i32 0, i32 34
  %845 = load ptr, ptr %844, align 8, !tbaa !17
  %846 = load ptr, ptr %9, align 8, !tbaa !9
  %847 = getelementptr inbounds %struct.Node, ptr %846, i32 0, i32 19
  store ptr %845, ptr %847, align 8, !tbaa !43
  br label %880

848:                                              ; preds = %834, %821
  %849 = load ptr, ptr %9, align 8, !tbaa !9
  %850 = getelementptr inbounds %struct.Node, ptr %849, i32 0, i32 16
  %851 = load ptr, ptr %850, align 8, !tbaa !29
  %852 = getelementptr inbounds %struct.Node, ptr %851, i32 0, i32 25
  %853 = load ptr, ptr %852, align 8, !tbaa !41
  %854 = icmp ne ptr %853, null
  br i1 %854, label %861, label %855

855:                                              ; preds = %848
  %856 = load ptr, ptr %9, align 8, !tbaa !9
  %857 = getelementptr inbounds %struct.Node, ptr %856, i32 0, i32 16
  %858 = load ptr, ptr %857, align 8, !tbaa !29
  %859 = load ptr, ptr %9, align 8, !tbaa !9
  %860 = getelementptr inbounds %struct.Node, ptr %859, i32 0, i32 19
  store ptr %858, ptr %860, align 8, !tbaa !43
  br label %879

861:                                              ; preds = %848
  %862 = load ptr, ptr %9, align 8, !tbaa !9
  %863 = getelementptr inbounds %struct.Node, ptr %862, i32 0, i32 15
  %864 = load ptr, ptr %863, align 8, !tbaa !30
  %865 = getelementptr inbounds %struct.Node, ptr %864, i32 0, i32 25
  %866 = load ptr, ptr %865, align 8, !tbaa !41
  %867 = icmp ne ptr %866, null
  br i1 %867, label %874, label %868

868:                                              ; preds = %861
  %869 = load ptr, ptr %9, align 8, !tbaa !9
  %870 = getelementptr inbounds %struct.Node, ptr %869, i32 0, i32 15
  %871 = load ptr, ptr %870, align 8, !tbaa !30
  %872 = load ptr, ptr %9, align 8, !tbaa !9
  %873 = getelementptr inbounds %struct.Node, ptr %872, i32 0, i32 19
  store ptr %871, ptr %873, align 8, !tbaa !43
  br label %878

874:                                              ; preds = %861
  %875 = load ptr, ptr @FirstNode, align 8, !tbaa !9
  %876 = load ptr, ptr %9, align 8, !tbaa !9
  %877 = getelementptr inbounds %struct.Node, ptr %876, i32 0, i32 19
  store ptr %875, ptr %877, align 8, !tbaa !43
  br label %878

878:                                              ; preds = %874, %868
  br label %879

879:                                              ; preds = %878, %855
  br label %880

880:                                              ; preds = %879, %842
  br label %881

881:                                              ; preds = %880, %815
  br label %882

882:                                              ; preds = %881
  %883 = load ptr, ptr %9, align 8, !tbaa !9
  %884 = getelementptr inbounds %struct.Node, ptr %883, i32 0, i32 19
  %885 = load ptr, ptr %884, align 8, !tbaa !43
  store ptr %885, ptr %9, align 8, !tbaa !9
  %886 = load ptr, ptr @FirstNode, align 8, !tbaa !9
  %887 = icmp ne ptr %885, %886
  br i1 %887, label %791, label %888, !llvm.loop !44

888:                                              ; preds = %882
  %889 = load i32, ptr @ProblemType, align 4, !tbaa !5
  %890 = icmp ne i32 %889, 1
  br i1 %890, label %891, label %893

891:                                              ; preds = %888
  %892 = load i32, ptr @DimensionSaved, align 4, !tbaa !5
  br label %896

893:                                              ; preds = %888
  %894 = load i32, ptr @DimensionSaved, align 4, !tbaa !5
  %895 = mul nsw i32 2, %894
  br label %896

896:                                              ; preds = %893, %891
  %897 = phi i32 [ %892, %891 ], [ %895, %893 ]
  store i32 %897, ptr @Dimension, align 4, !tbaa !5
  store i32 0, ptr %22, align 4, !tbaa !5
  br label %898

898:                                              ; preds = %955, %896
  %899 = load i32, ptr @ProblemType, align 4, !tbaa !5
  %900 = icmp ne i32 %899, 1
  br i1 %900, label %901, label %910

901:                                              ; preds = %898
  %902 = load ptr, ptr %9, align 8, !tbaa !9
  %903 = getelementptr inbounds %struct.Node, ptr %902, i32 0, i32 0
  %904 = load i32, ptr %903, align 8, !tbaa !31
  %905 = load ptr, ptr @BetterTour, align 8, !tbaa !9
  %906 = load i32, ptr %22, align 4, !tbaa !5
  %907 = add nsw i32 %906, 1
  store i32 %907, ptr %22, align 4, !tbaa !5
  %908 = sext i32 %907 to i64
  %909 = getelementptr inbounds i32, ptr %905, i64 %908
  store i32 %904, ptr %909, align 4, !tbaa !5
  br label %954

910:                                              ; preds = %898
  %911 = load ptr, ptr %9, align 8, !tbaa !9
  %912 = getelementptr inbounds %struct.Node, ptr %911, i32 0, i32 0
  %913 = load i32, ptr %912, align 8, !tbaa !31
  %914 = load i32, ptr @Dimension, align 4, !tbaa !5
  %915 = sdiv i32 %914, 2
  %916 = icmp sle i32 %913, %915
  br i1 %916, label %917, label %953

917:                                              ; preds = %910
  %918 = load i32, ptr %22, align 4, !tbaa !5
  %919 = add nsw i32 %918, 1
  store i32 %919, ptr %22, align 4, !tbaa !5
  %920 = load ptr, ptr %9, align 8, !tbaa !9
  %921 = getelementptr inbounds %struct.Node, ptr %920, i32 0, i32 19
  %922 = load ptr, ptr %921, align 8, !tbaa !43
  %923 = getelementptr inbounds %struct.Node, ptr %922, i32 0, i32 0
  %924 = load i32, ptr %923, align 8, !tbaa !31
  %925 = load ptr, ptr %9, align 8, !tbaa !9
  %926 = getelementptr inbounds %struct.Node, ptr %925, i32 0, i32 0
  %927 = load i32, ptr %926, align 8, !tbaa !31
  %928 = load i32, ptr @Dimension, align 4, !tbaa !5
  %929 = sdiv i32 %928, 2
  %930 = add nsw i32 %927, %929
  %931 = icmp ne i32 %924, %930
  br i1 %931, label %932, label %940

932:                                              ; preds = %917
  %933 = load ptr, ptr %9, align 8, !tbaa !9
  %934 = getelementptr inbounds %struct.Node, ptr %933, i32 0, i32 0
  %935 = load i32, ptr %934, align 8, !tbaa !31
  %936 = load ptr, ptr @BetterTour, align 8, !tbaa !9
  %937 = load i32, ptr %22, align 4, !tbaa !5
  %938 = sext i32 %937 to i64
  %939 = getelementptr inbounds i32, ptr %936, i64 %938
  store i32 %935, ptr %939, align 4, !tbaa !5
  br label %952

940:                                              ; preds = %917
  %941 = load ptr, ptr %9, align 8, !tbaa !9
  %942 = getelementptr inbounds %struct.Node, ptr %941, i32 0, i32 0
  %943 = load i32, ptr %942, align 8, !tbaa !31
  %944 = load ptr, ptr @BetterTour, align 8, !tbaa !9
  %945 = load i32, ptr @Dimension, align 4, !tbaa !5
  %946 = sdiv i32 %945, 2
  %947 = load i32, ptr %22, align 4, !tbaa !5
  %948 = sub nsw i32 %946, %947
  %949 = add nsw i32 %948, 1
  %950 = sext i32 %949 to i64
  %951 = getelementptr inbounds i32, ptr %944, i64 %950
  store i32 %943, ptr %951, align 4, !tbaa !5
  br label %952

952:                                              ; preds = %940, %932
  br label %953

953:                                              ; preds = %952, %910
  br label %954

954:                                              ; preds = %953, %901
  br label %955

955:                                              ; preds = %954
  %956 = load ptr, ptr %9, align 8, !tbaa !9
  %957 = getelementptr inbounds %struct.Node, ptr %956, i32 0, i32 19
  %958 = load ptr, ptr %957, align 8, !tbaa !43
  store ptr %958, ptr %9, align 8, !tbaa !9
  %959 = load ptr, ptr @FirstNode, align 8, !tbaa !9
  %960 = icmp ne ptr %958, %959
  br i1 %960, label %898, label %961, !llvm.loop !45

961:                                              ; preds = %955
  %962 = load ptr, ptr @BetterTour, align 8, !tbaa !9
  %963 = load i32, ptr @ProblemType, align 4, !tbaa !5
  %964 = icmp ne i32 %963, 1
  br i1 %964, label %965, label %967

965:                                              ; preds = %961
  %966 = load i32, ptr @Dimension, align 4, !tbaa !5
  br label %970

967:                                              ; preds = %961
  %968 = load i32, ptr @Dimension, align 4, !tbaa !5
  %969 = sdiv i32 %968, 2
  br label %970

970:                                              ; preds = %967, %965
  %971 = phi i32 [ %966, %965 ], [ %969, %967 ]
  %972 = sext i32 %971 to i64
  %973 = getelementptr inbounds i32, ptr %962, i64 %972
  %974 = load i32, ptr %973, align 4, !tbaa !5
  %975 = load ptr, ptr @BetterTour, align 8, !tbaa !9
  %976 = getelementptr inbounds i32, ptr %975, i64 0
  store i32 %974, ptr %976, align 4, !tbaa !5
  %977 = load ptr, ptr @OutputTourFileName, align 8, !tbaa !9
  %978 = load ptr, ptr @BetterTour, align 8, !tbaa !9
  %979 = load i64, ptr %15, align 8, !tbaa !11
  call void @WriteTour(ptr noundef %977, ptr noundef %978, i64 noundef %979)
  %980 = load i64, ptr %14, align 8, !tbaa !11
  %981 = icmp sgt i64 %980, 0
  br i1 %981, label %982, label %1044

982:                                              ; preds = %970
  br label %983

983:                                              ; preds = %991, %982
  %984 = load ptr, ptr %9, align 8, !tbaa !9
  %985 = getelementptr inbounds %struct.Node, ptr %984, i32 0, i32 12
  %986 = load i32, ptr %985, align 8, !tbaa !15
  %987 = load i32, ptr %5, align 4, !tbaa !5
  %988 = icmp ne i32 %986, %987
  br i1 %988, label %989, label %990

989:                                              ; preds = %983
  br label %997

990:                                              ; preds = %983
  br label %991

991:                                              ; preds = %990
  %992 = load ptr, ptr %9, align 8, !tbaa !9
  %993 = getelementptr inbounds %struct.Node, ptr %992, i32 0, i32 34
  %994 = load ptr, ptr %993, align 8, !tbaa !17
  store ptr %994, ptr %9, align 8, !tbaa !9
  %995 = load ptr, ptr @FirstNode, align 8, !tbaa !9
  %996 = icmp ne ptr %994, %995
  br i1 %996, label %983, label %997, !llvm.loop !46

997:                                              ; preds = %991, %989
  %998 = load ptr, ptr %9, align 8, !tbaa !9
  %999 = getelementptr inbounds %struct.Node, ptr %998, i32 0, i32 35
  %1000 = load ptr, ptr %999, align 8, !tbaa !23
  %1001 = load ptr, ptr %9, align 8, !tbaa !9
  %1002 = getelementptr inbounds %struct.Node, ptr %1001, i32 0, i32 19
  %1003 = load ptr, ptr %1002, align 8, !tbaa !43
  %1004 = icmp eq ptr %1000, %1003
  br i1 %1004, label %1005, label %1023

1005:                                             ; preds = %997
  %1006 = load ptr, ptr @FirstNode, align 8, !tbaa !9
  store ptr %1006, ptr %9, align 8, !tbaa !9
  br label %1007

1007:                                             ; preds = %1018, %1005
  %1008 = load ptr, ptr %9, align 8, !tbaa !9
  %1009 = load ptr, ptr %9, align 8, !tbaa !9
  %1010 = getelementptr inbounds %struct.Node, ptr %1009, i32 0, i32 19
  %1011 = load ptr, ptr %1010, align 8, !tbaa !43
  %1012 = getelementptr inbounds %struct.Node, ptr %1011, i32 0, i32 34
  store ptr %1008, ptr %1012, align 8, !tbaa !17
  %1013 = load ptr, ptr %9, align 8, !tbaa !9
  %1014 = getelementptr inbounds %struct.Node, ptr %1013, i32 0, i32 19
  %1015 = load ptr, ptr %1014, align 8, !tbaa !43
  %1016 = load ptr, ptr %9, align 8, !tbaa !9
  %1017 = getelementptr inbounds %struct.Node, ptr %1016, i32 0, i32 35
  store ptr %1015, ptr %1017, align 8, !tbaa !23
  store ptr %1015, ptr %9, align 8, !tbaa !9
  br label %1018

1018:                                             ; preds = %1007
  %1019 = load ptr, ptr %9, align 8, !tbaa !9
  %1020 = load ptr, ptr @FirstNode, align 8, !tbaa !9
  %1021 = icmp ne ptr %1019, %1020
  br i1 %1021, label %1007, label %1022, !llvm.loop !47

1022:                                             ; preds = %1018
  br label %1040

1023:                                             ; preds = %997
  %1024 = load ptr, ptr @FirstNode, align 8, !tbaa !9
  store ptr %1024, ptr %9, align 8, !tbaa !9
  br label %1025

1025:                                             ; preds = %1033, %1023
  %1026 = load ptr, ptr %9, align 8, !tbaa !9
  %1027 = load ptr, ptr %9, align 8, !tbaa !9
  %1028 = getelementptr inbounds %struct.Node, ptr %1027, i32 0, i32 19
  %1029 = load ptr, ptr %1028, align 8, !tbaa !43
  %1030 = load ptr, ptr %9, align 8, !tbaa !9
  %1031 = getelementptr inbounds %struct.Node, ptr %1030, i32 0, i32 34
  store ptr %1029, ptr %1031, align 8, !tbaa !17
  %1032 = getelementptr inbounds %struct.Node, ptr %1029, i32 0, i32 35
  store ptr %1026, ptr %1032, align 8, !tbaa !23
  br label %1033

1033:                                             ; preds = %1025
  %1034 = load ptr, ptr %9, align 8, !tbaa !9
  %1035 = getelementptr inbounds %struct.Node, ptr %1034, i32 0, i32 19
  %1036 = load ptr, ptr %1035, align 8, !tbaa !43
  store ptr %1036, ptr %9, align 8, !tbaa !9
  %1037 = load ptr, ptr @FirstNode, align 8, !tbaa !9
  %1038 = icmp ne ptr %1036, %1037
  br i1 %1038, label %1025, label %1039, !llvm.loop !48

1039:                                             ; preds = %1033
  br label %1040

1040:                                             ; preds = %1039, %1022
  call void @RecordBestTour()
  %1041 = load ptr, ptr @TourFileName, align 8, !tbaa !9
  %1042 = load ptr, ptr @BestTour, align 8, !tbaa !9
  %1043 = load i64, ptr %15, align 8, !tbaa !11
  call void @WriteTour(ptr noundef %1041, ptr noundef %1042, i64 noundef %1043)
  br label %1044

1044:                                             ; preds = %1040, %970
  %1045 = load i32, ptr %19, align 4, !tbaa !5
  store i32 %1045, ptr @Dimension, align 4, !tbaa !5
  %1046 = load i32, ptr @TraceLevel, align 4, !tbaa !5
  %1047 = icmp sge i32 %1046, 1
  br i1 %1047, label %1048, label %1082

1048:                                             ; preds = %1044
  %1049 = load i32, ptr %21, align 4, !tbaa !5
  %1050 = load i64, ptr %15, align 8, !tbaa !11
  call void (ptr, ...) @printff(ptr noundef @.str.3, i32 noundef %1049, i64 noundef %1050)
  %1051 = load i64, ptr %12, align 8, !tbaa !11
  %1052 = icmp ne i64 %1051, -9223372036854775808
  br i1 %1052, label %1053, label %1065

1053:                                             ; preds = %1048
  %1054 = load i64, ptr %12, align 8, !tbaa !11
  %1055 = icmp ne i64 %1054, 0
  br i1 %1055, label %1056, label %1065

1056:                                             ; preds = %1053
  %1057 = load i64, ptr %15, align 8, !tbaa !11
  %1058 = load i64, ptr %12, align 8, !tbaa !11
  %1059 = sub nsw i64 %1057, %1058
  %1060 = sitofp i64 %1059 to double
  %1061 = fmul double 1.000000e+02, %1060
  %1062 = load i64, ptr %12, align 8, !tbaa !11
  %1063 = sitofp i64 %1062 to double
  %1064 = fdiv double %1061, %1063
  call void (ptr, ...) @printff(ptr noundef @.str.4, double noundef %1064)
  br label %1065

1065:                                             ; preds = %1056, %1053, %1048
  %1066 = call double @GetTime()
  %1067 = load double, ptr %16, align 8, !tbaa !13
  %1068 = fsub double %1066, %1067
  %1069 = call double @llvm.fabs.f64(double %1068)
  %1070 = load i64, ptr %15, align 8, !tbaa !11
  %1071 = load i64, ptr %12, align 8, !tbaa !11
  %1072 = icmp slt i64 %1070, %1071
  br i1 %1072, label %1073, label %1074

1073:                                             ; preds = %1065
  br label %1080

1074:                                             ; preds = %1065
  %1075 = load i64, ptr %15, align 8, !tbaa !11
  %1076 = load i64, ptr %12, align 8, !tbaa !11
  %1077 = icmp eq i64 %1075, %1076
  %1078 = zext i1 %1077 to i64
  %1079 = select i1 %1077, ptr @.str.7, ptr @.str.8
  br label %1080

1080:                                             ; preds = %1074, %1073
  %1081 = phi ptr [ @.str.6, %1073 ], [ %1079, %1074 ]
  call void (ptr, ...) @printff(ptr noundef @.str.5, double noundef %1069, ptr noundef %1081)
  br label %1082

1082:                                             ; preds = %1080, %1044
  br label %1083

1083:                                             ; preds = %1082, %759, %755
  %1084 = call double @GetTime()
  %1085 = load double, ptr %16, align 8, !tbaa !13
  %1086 = fsub double %1084, %1085
  %1087 = call double @llvm.fabs.f64(double %1086)
  store double %1087, ptr %17, align 8, !tbaa !13
  %1088 = load i64, ptr %13, align 8, !tbaa !11
  %1089 = load double, ptr %17, align 8, !tbaa !13
  call void @UpdateStatistics(i64 noundef %1088, double noundef %1089)
  %1090 = load i32, ptr @TraceLevel, align 4, !tbaa !5
  %1091 = icmp sge i32 %1090, 1
  br i1 %1091, label %1092, label %1099

1092:                                             ; preds = %1083
  %1093 = load i64, ptr %13, align 8, !tbaa !11
  %1094 = icmp ne i64 %1093, 9223372036854775807
  br i1 %1094, label %1095, label %1099

1095:                                             ; preds = %1092
  %1096 = load i32, ptr @Run, align 4, !tbaa !5
  %1097 = load i64, ptr %13, align 8, !tbaa !11
  %1098 = load double, ptr %17, align 8, !tbaa !13
  call void (ptr, ...) @printff(ptr noundef @.str.9, i32 noundef %1096, i64 noundef %1097, double noundef %1098)
  br label %1099

1099:                                             ; preds = %1095, %1092, %1083
  %1100 = load i32, ptr @PopulationSize, align 4, !tbaa !5
  %1101 = icmp sge i32 %1100, 2
  br i1 %1101, label %1102, label %1158

1102:                                             ; preds = %1099
  %1103 = load i32, ptr @PopulationSize, align 4, !tbaa !5
  %1104 = load i32, ptr @MaxPopulationSize, align 4, !tbaa !5
  %1105 = icmp eq i32 %1103, %1104
  br i1 %1105, label %1111, label %1106

1106:                                             ; preds = %1102
  %1107 = load i32, ptr @Run, align 4, !tbaa !5
  %1108 = load i32, ptr @MaxPopulationSize, align 4, !tbaa !5
  %1109 = mul nsw i32 2, %1108
  %1110 = icmp sge i32 %1107, %1109
  br i1 %1110, label %1111, label %1158

1111:                                             ; preds = %1106, %1102
  %1112 = load i32, ptr @Run, align 4, !tbaa !5
  %1113 = load i32, ptr @Runs, align 4, !tbaa !5
  %1114 = icmp slt i32 %1112, %1113
  br i1 %1114, label %1115, label %1158

1115:                                             ; preds = %1111
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #4
  %1116 = load i32, ptr @PopulationSize, align 4, !tbaa !5
  %1117 = call i32 @LinearSelection(i32 noundef %1116, double noundef 1.250000e+00)
  store i32 %1117, ptr %29, align 4, !tbaa !5
  br label %1118

1118:                                             ; preds = %1121, %1115
  %1119 = load i32, ptr @PopulationSize, align 4, !tbaa !5
  %1120 = call i32 @LinearSelection(i32 noundef %1119, double noundef 1.250000e+00)
  store i32 %1120, ptr %30, align 4, !tbaa !5
  br label %1121

1121:                                             ; preds = %1118
  %1122 = load i32, ptr %29, align 4, !tbaa !5
  %1123 = load i32, ptr %30, align 4, !tbaa !5
  %1124 = icmp eq i32 %1122, %1123
  br i1 %1124, label %1118, label %1125, !llvm.loop !49

1125:                                             ; preds = %1121
  %1126 = load i32, ptr %29, align 4, !tbaa !5
  %1127 = load i32, ptr %30, align 4, !tbaa !5
  call void @ApplyCrossover(i32 noundef %1126, i32 noundef %1127)
  %1128 = load ptr, ptr @FirstNode, align 8, !tbaa !9
  store ptr %1128, ptr %28, align 8, !tbaa !9
  br label %1129

1129:                                             ; preds = %1153, %1125
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #4
  %1130 = load ptr, ptr @C, align 8, !tbaa !9
  %1131 = load ptr, ptr %28, align 8, !tbaa !9
  %1132 = load ptr, ptr %28, align 8, !tbaa !9
  %1133 = getelementptr inbounds %struct.Node, ptr %1132, i32 0, i32 16
  %1134 = load ptr, ptr %1133, align 8, !tbaa !29
  %1135 = call i32 %1130(ptr noundef %1131, ptr noundef %1134)
  store i32 %1135, ptr %31, align 4, !tbaa !5
  %1136 = load ptr, ptr %28, align 8, !tbaa !9
  %1137 = load ptr, ptr %28, align 8, !tbaa !9
  %1138 = getelementptr inbounds %struct.Node, ptr %1137, i32 0, i32 16
  %1139 = load ptr, ptr %1138, align 8, !tbaa !29
  %1140 = load i32, ptr %31, align 4, !tbaa !5
  %1141 = call i32 @AddCandidate(ptr noundef %1136, ptr noundef %1139, i32 noundef %1140, i32 noundef 2147483647)
  %1142 = load ptr, ptr %28, align 8, !tbaa !9
  %1143 = getelementptr inbounds %struct.Node, ptr %1142, i32 0, i32 16
  %1144 = load ptr, ptr %1143, align 8, !tbaa !29
  %1145 = load ptr, ptr %28, align 8, !tbaa !9
  %1146 = load i32, ptr %31, align 4, !tbaa !5
  %1147 = call i32 @AddCandidate(ptr noundef %1144, ptr noundef %1145, i32 noundef %1146, i32 noundef 2147483647)
  %1148 = load ptr, ptr %28, align 8, !tbaa !9
  %1149 = getelementptr inbounds %struct.Node, ptr %1148, i32 0, i32 16
  %1150 = load ptr, ptr %1149, align 8, !tbaa !29
  %1151 = load ptr, ptr %28, align 8, !tbaa !9
  %1152 = getelementptr inbounds %struct.Node, ptr %1151, i32 0, i32 33
  store ptr %1150, ptr %1152, align 8, !tbaa !35
  store ptr %1150, ptr %28, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #4
  br label %1153

1153:                                             ; preds = %1129
  %1154 = load ptr, ptr %28, align 8, !tbaa !9
  %1155 = load ptr, ptr @FirstNode, align 8, !tbaa !9
  %1156 = icmp ne ptr %1154, %1155
  br i1 %1156, label %1129, label %1157, !llvm.loop !50

1157:                                             ; preds = %1153
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #4
  br label %1158

1158:                                             ; preds = %1157, %1111, %1106, %1099
  %1159 = load i32, ptr @Seed, align 4, !tbaa !5
  %1160 = add i32 %1159, 1
  store i32 %1160, ptr @Seed, align 4, !tbaa !5
  call void @SRandom(i32 noundef %1160)
  %1161 = load i32, ptr @Norm, align 4, !tbaa !5
  %1162 = icmp eq i32 %1161, 0
  br i1 %1162, label %1163, label %1164

1163:                                             ; preds = %1158
  br label %1168

1164:                                             ; preds = %1158
  br label %1165

1165:                                             ; preds = %1164
  %1166 = load i32, ptr @Run, align 4, !tbaa !5
  %1167 = add nsw i32 %1166, 1
  store i32 %1167, ptr @Run, align 4, !tbaa !5
  br label %637, !llvm.loop !51

1168:                                             ; preds = %1163, %637
  %1169 = load i32, ptr @TraceLevel, align 4, !tbaa !5
  %1170 = icmp sge i32 %1169, 1
  br i1 %1170, label %1171, label %1172

1171:                                             ; preds = %1168
  call void @PrintStatistics()
  br label %1172

1172:                                             ; preds = %1171, %1168
  %1173 = load ptr, ptr @C, align 8, !tbaa !9
  %1174 = icmp eq ptr %1173, @C_EXPLICIT
  br i1 %1174, label %1175, label %1339

1175:                                             ; preds = %1172
  %1176 = load ptr, ptr @FirstNode, align 8, !tbaa !9
  store ptr %1176, ptr %9, align 8, !tbaa !9
  br label %1177

1177:                                             ; preds = %1332, %1175
  store i32 1, ptr %22, align 4, !tbaa !5
  br label %1178

1178:                                             ; preds = %1212, %1177
  %1179 = load i32, ptr %22, align 4, !tbaa !5
  %1180 = load ptr, ptr %9, align 8, !tbaa !9
  %1181 = getelementptr inbounds %struct.Node, ptr %1180, i32 0, i32 0
  %1182 = load i32, ptr %1181, align 8, !tbaa !31
  %1183 = icmp slt i32 %1179, %1182
  br i1 %1183, label %1184, label %1215

1184:                                             ; preds = %1178
  %1185 = load ptr, ptr %9, align 8, !tbaa !9
  %1186 = getelementptr inbounds %struct.Node, ptr %1185, i32 0, i32 9
  %1187 = load i32, ptr %1186, align 4, !tbaa !52
  %1188 = load ptr, ptr @NodeSet, align 8, !tbaa !9
  %1189 = load i32, ptr %22, align 4, !tbaa !5
  %1190 = sext i32 %1189 to i64
  %1191 = getelementptr inbounds %struct.Node, ptr %1188, i64 %1190
  %1192 = getelementptr inbounds %struct.Node, ptr %1191, i32 0, i32 9
  %1193 = load i32, ptr %1192, align 4, !tbaa !52
  %1194 = add nsw i32 %1187, %1193
  %1195 = load ptr, ptr %9, align 8, !tbaa !9
  %1196 = getelementptr inbounds %struct.Node, ptr %1195, i32 0, i32 14
  %1197 = load ptr, ptr %1196, align 8, !tbaa !32
  %1198 = load i32, ptr %22, align 4, !tbaa !5
  %1199 = sext i32 %1198 to i64
  %1200 = getelementptr inbounds i32, ptr %1197, i64 %1199
  %1201 = load i32, ptr %1200, align 4, !tbaa !5
  %1202 = sub nsw i32 %1201, %1194
  store i32 %1202, ptr %1200, align 4, !tbaa !5
  %1203 = load i32, ptr @Precision, align 4, !tbaa !5
  %1204 = load ptr, ptr %9, align 8, !tbaa !9
  %1205 = getelementptr inbounds %struct.Node, ptr %1204, i32 0, i32 14
  %1206 = load ptr, ptr %1205, align 8, !tbaa !32
  %1207 = load i32, ptr %22, align 4, !tbaa !5
  %1208 = sext i32 %1207 to i64
  %1209 = getelementptr inbounds i32, ptr %1206, i64 %1208
  %1210 = load i32, ptr %1209, align 4, !tbaa !5
  %1211 = sdiv i32 %1210, %1203
  store i32 %1211, ptr %1209, align 4, !tbaa !5
  br label %1212

1212:                                             ; preds = %1184
  %1213 = load i32, ptr %22, align 4, !tbaa !5
  %1214 = add nsw i32 %1213, 1
  store i32 %1214, ptr %22, align 4, !tbaa !5
  br label %1178, !llvm.loop !53

1215:                                             ; preds = %1178
  %1216 = load ptr, ptr %9, align 8, !tbaa !9
  %1217 = getelementptr inbounds %struct.Node, ptr %1216, i32 0, i32 26
  %1218 = load ptr, ptr %1217, align 8, !tbaa !19
  %1219 = icmp ne ptr %1218, null
  br i1 %1219, label %1220, label %1273

1220:                                             ; preds = %1215
  %1221 = load ptr, ptr %9, align 8, !tbaa !9
  %1222 = getelementptr inbounds %struct.Node, ptr %1221, i32 0, i32 26
  %1223 = load ptr, ptr %1222, align 8, !tbaa !19
  %1224 = load ptr, ptr %9, align 8, !tbaa !9
  %1225 = getelementptr inbounds %struct.Node, ptr %1224, i32 0, i32 28
  %1226 = load ptr, ptr %1225, align 8, !tbaa !21
  %1227 = icmp ne ptr %1223, %1226
  br i1 %1227, label %1228, label %1273

1228:                                             ; preds = %1220
  %1229 = load ptr, ptr %9, align 8, !tbaa !9
  %1230 = getelementptr inbounds %struct.Node, ptr %1229, i32 0, i32 0
  %1231 = load i32, ptr %1230, align 8, !tbaa !31
  %1232 = load ptr, ptr %9, align 8, !tbaa !9
  %1233 = getelementptr inbounds %struct.Node, ptr %1232, i32 0, i32 26
  %1234 = load ptr, ptr %1233, align 8, !tbaa !19
  %1235 = getelementptr inbounds %struct.Node, ptr %1234, i32 0, i32 0
  %1236 = load i32, ptr %1235, align 8, !tbaa !31
  %1237 = icmp sgt i32 %1231, %1236
  br i1 %1237, label %1238, label %1255

1238:                                             ; preds = %1228
  %1239 = load ptr, ptr @Distance, align 8, !tbaa !9
  %1240 = load ptr, ptr %9, align 8, !tbaa !9
  %1241 = load ptr, ptr %9, align 8, !tbaa !9
  %1242 = getelementptr inbounds %struct.Node, ptr %1241, i32 0, i32 26
  %1243 = load ptr, ptr %1242, align 8, !tbaa !19
  %1244 = call i32 %1239(ptr noundef %1240, ptr noundef %1243)
  %1245 = load ptr, ptr %9, align 8, !tbaa !9
  %1246 = getelementptr inbounds %struct.Node, ptr %1245, i32 0, i32 14
  %1247 = load ptr, ptr %1246, align 8, !tbaa !32
  %1248 = load ptr, ptr %9, align 8, !tbaa !9
  %1249 = getelementptr inbounds %struct.Node, ptr %1248, i32 0, i32 26
  %1250 = load ptr, ptr %1249, align 8, !tbaa !19
  %1251 = getelementptr inbounds %struct.Node, ptr %1250, i32 0, i32 0
  %1252 = load i32, ptr %1251, align 8, !tbaa !31
  %1253 = sext i32 %1252 to i64
  %1254 = getelementptr inbounds i32, ptr %1247, i64 %1253
  store i32 %1244, ptr %1254, align 4, !tbaa !5
  br label %1272

1255:                                             ; preds = %1228
  %1256 = load ptr, ptr @Distance, align 8, !tbaa !9
  %1257 = load ptr, ptr %9, align 8, !tbaa !9
  %1258 = load ptr, ptr %9, align 8, !tbaa !9
  %1259 = getelementptr inbounds %struct.Node, ptr %1258, i32 0, i32 26
  %1260 = load ptr, ptr %1259, align 8, !tbaa !19
  %1261 = call i32 %1256(ptr noundef %1257, ptr noundef %1260)
  %1262 = load ptr, ptr %9, align 8, !tbaa !9
  %1263 = getelementptr inbounds %struct.Node, ptr %1262, i32 0, i32 26
  %1264 = load ptr, ptr %1263, align 8, !tbaa !19
  %1265 = getelementptr inbounds %struct.Node, ptr %1264, i32 0, i32 14
  %1266 = load ptr, ptr %1265, align 8, !tbaa !32
  %1267 = load ptr, ptr %9, align 8, !tbaa !9
  %1268 = getelementptr inbounds %struct.Node, ptr %1267, i32 0, i32 0
  %1269 = load i32, ptr %1268, align 8, !tbaa !31
  %1270 = sext i32 %1269 to i64
  %1271 = getelementptr inbounds i32, ptr %1266, i64 %1270
  store i32 %1261, ptr %1271, align 4, !tbaa !5
  br label %1272

1272:                                             ; preds = %1255, %1238
  br label %1273

1273:                                             ; preds = %1272, %1220, %1215
  %1274 = load ptr, ptr %9, align 8, !tbaa !9
  %1275 = getelementptr inbounds %struct.Node, ptr %1274, i32 0, i32 27
  %1276 = load ptr, ptr %1275, align 8, !tbaa !20
  %1277 = icmp ne ptr %1276, null
  br i1 %1277, label %1278, label %1331

1278:                                             ; preds = %1273
  %1279 = load ptr, ptr %9, align 8, !tbaa !9
  %1280 = getelementptr inbounds %struct.Node, ptr %1279, i32 0, i32 27
  %1281 = load ptr, ptr %1280, align 8, !tbaa !20
  %1282 = load ptr, ptr %9, align 8, !tbaa !9
  %1283 = getelementptr inbounds %struct.Node, ptr %1282, i32 0, i32 29
  %1284 = load ptr, ptr %1283, align 8, !tbaa !22
  %1285 = icmp ne ptr %1281, %1284
  br i1 %1285, label %1286, label %1331

1286:                                             ; preds = %1278
  %1287 = load ptr, ptr %9, align 8, !tbaa !9
  %1288 = getelementptr inbounds %struct.Node, ptr %1287, i32 0, i32 0
  %1289 = load i32, ptr %1288, align 8, !tbaa !31
  %1290 = load ptr, ptr %9, align 8, !tbaa !9
  %1291 = getelementptr inbounds %struct.Node, ptr %1290, i32 0, i32 27
  %1292 = load ptr, ptr %1291, align 8, !tbaa !20
  %1293 = getelementptr inbounds %struct.Node, ptr %1292, i32 0, i32 0
  %1294 = load i32, ptr %1293, align 8, !tbaa !31
  %1295 = icmp sgt i32 %1289, %1294
  br i1 %1295, label %1296, label %1313

1296:                                             ; preds = %1286
  %1297 = load ptr, ptr @Distance, align 8, !tbaa !9
  %1298 = load ptr, ptr %9, align 8, !tbaa !9
  %1299 = load ptr, ptr %9, align 8, !tbaa !9
  %1300 = getelementptr inbounds %struct.Node, ptr %1299, i32 0, i32 27
  %1301 = load ptr, ptr %1300, align 8, !tbaa !20
  %1302 = call i32 %1297(ptr noundef %1298, ptr noundef %1301)
  %1303 = load ptr, ptr %9, align 8, !tbaa !9
  %1304 = getelementptr inbounds %struct.Node, ptr %1303, i32 0, i32 14
  %1305 = load ptr, ptr %1304, align 8, !tbaa !32
  %1306 = load ptr, ptr %9, align 8, !tbaa !9
  %1307 = getelementptr inbounds %struct.Node, ptr %1306, i32 0, i32 27
  %1308 = load ptr, ptr %1307, align 8, !tbaa !20
  %1309 = getelementptr inbounds %struct.Node, ptr %1308, i32 0, i32 0
  %1310 = load i32, ptr %1309, align 8, !tbaa !31
  %1311 = sext i32 %1310 to i64
  %1312 = getelementptr inbounds i32, ptr %1305, i64 %1311
  store i32 %1302, ptr %1312, align 4, !tbaa !5
  br label %1330

1313:                                             ; preds = %1286
  %1314 = load ptr, ptr @Distance, align 8, !tbaa !9
  %1315 = load ptr, ptr %9, align 8, !tbaa !9
  %1316 = load ptr, ptr %9, align 8, !tbaa !9
  %1317 = getelementptr inbounds %struct.Node, ptr %1316, i32 0, i32 27
  %1318 = load ptr, ptr %1317, align 8, !tbaa !20
  %1319 = call i32 %1314(ptr noundef %1315, ptr noundef %1318)
  %1320 = load ptr, ptr %9, align 8, !tbaa !9
  %1321 = getelementptr inbounds %struct.Node, ptr %1320, i32 0, i32 27
  %1322 = load ptr, ptr %1321, align 8, !tbaa !20
  %1323 = getelementptr inbounds %struct.Node, ptr %1322, i32 0, i32 14
  %1324 = load ptr, ptr %1323, align 8, !tbaa !32
  %1325 = load ptr, ptr %9, align 8, !tbaa !9
  %1326 = getelementptr inbounds %struct.Node, ptr %1325, i32 0, i32 0
  %1327 = load i32, ptr %1326, align 8, !tbaa !31
  %1328 = sext i32 %1327 to i64
  %1329 = getelementptr inbounds i32, ptr %1324, i64 %1328
  store i32 %1319, ptr %1329, align 4, !tbaa !5
  br label %1330

1330:                                             ; preds = %1313, %1296
  br label %1331

1331:                                             ; preds = %1330, %1278, %1273
  br label %1332

1332:                                             ; preds = %1331
  %1333 = load ptr, ptr %9, align 8, !tbaa !9
  %1334 = getelementptr inbounds %struct.Node, ptr %1333, i32 0, i32 16
  %1335 = load ptr, ptr %1334, align 8, !tbaa !29
  store ptr %1335, ptr %9, align 8, !tbaa !9
  %1336 = load ptr, ptr @FirstNode, align 8, !tbaa !9
  %1337 = icmp ne ptr %1335, %1336
  br i1 %1337, label %1177, label %1338, !llvm.loop !54

1338:                                             ; preds = %1332
  br label %1339

1339:                                             ; preds = %1338, %1172
  call void @FreeSegments()
  call void @FreeCandidateSets()
  call void (...) @FreePopulation()
  %1340 = load i32, ptr %23, align 4, !tbaa !5
  %1341 = load i32, ptr @Dimension, align 4, !tbaa !5
  %1342 = icmp eq i32 %1340, %1341
  br i1 %1342, label %1343, label %1357

1343:                                             ; preds = %1339
  br label %1344

1344:                                             ; preds = %1350, %1343
  %1345 = load ptr, ptr %9, align 8, !tbaa !9
  %1346 = getelementptr inbounds %struct.Node, ptr %1345, i32 0, i32 35
  %1347 = load ptr, ptr %1346, align 8, !tbaa !23
  %1348 = load ptr, ptr %9, align 8, !tbaa !9
  %1349 = getelementptr inbounds %struct.Node, ptr %1348, i32 0, i32 33
  store ptr %1347, ptr %1349, align 8, !tbaa !35
  br label %1350

1350:                                             ; preds = %1344
  %1351 = load ptr, ptr %9, align 8, !tbaa !9
  %1352 = getelementptr inbounds %struct.Node, ptr %1351, i32 0, i32 35
  %1353 = load ptr, ptr %1352, align 8, !tbaa !23
  store ptr %1353, ptr %9, align 8, !tbaa !9
  %1354 = load ptr, ptr @FirstNode, align 8, !tbaa !9
  %1355 = icmp ne ptr %1353, %1354
  br i1 %1355, label %1344, label %1356, !llvm.loop !55

1356:                                             ; preds = %1350
  br label %1368

1357:                                             ; preds = %1339
  br label %1358

1358:                                             ; preds = %1361, %1357
  %1359 = load ptr, ptr %9, align 8, !tbaa !9
  %1360 = getelementptr inbounds %struct.Node, ptr %1359, i32 0, i32 33
  store ptr null, ptr %1360, align 8, !tbaa !35
  br label %1361

1361:                                             ; preds = %1358
  %1362 = load ptr, ptr %9, align 8, !tbaa !9
  %1363 = getelementptr inbounds %struct.Node, ptr %1362, i32 0, i32 35
  %1364 = load ptr, ptr %1363, align 8, !tbaa !23
  store ptr %1364, ptr %9, align 8, !tbaa !9
  %1365 = load ptr, ptr @FirstNode, align 8, !tbaa !9
  %1366 = icmp ne ptr %1364, %1365
  br i1 %1366, label %1358, label %1367, !llvm.loop !56

1367:                                             ; preds = %1361
  br label %1368

1368:                                             ; preds = %1367, %1356
  %1369 = load i32, ptr @ProblemType, align 4, !tbaa !5
  %1370 = icmp ne i32 %1369, 1
  br i1 %1370, label %1371, label %1373

1371:                                             ; preds = %1368
  %1372 = load i32, ptr @DimensionSaved, align 4, !tbaa !5
  br label %1376

1373:                                             ; preds = %1368
  %1374 = load i32, ptr @DimensionSaved, align 4, !tbaa !5
  %1375 = mul nsw i32 2, %1374
  br label %1376

1376:                                             ; preds = %1373, %1371
  %1377 = phi i32 [ %1372, %1371 ], [ %1375, %1373 ]
  store i32 %1377, ptr @Dimension, align 4, !tbaa !5
  %1378 = load ptr, ptr %8, align 8, !tbaa !9
  store ptr %1378, ptr @FirstNode, align 8, !tbaa !9
  store ptr %1378, ptr %9, align 8, !tbaa !9
  br label %1379

1379:                                             ; preds = %1414, %1376
  %1380 = load ptr, ptr %9, align 8, !tbaa !9
  %1381 = getelementptr inbounds %struct.Node, ptr %1380, i32 0, i32 35
  %1382 = load ptr, ptr %1381, align 8, !tbaa !23
  %1383 = load ptr, ptr %9, align 8, !tbaa !9
  %1384 = getelementptr inbounds %struct.Node, ptr %1383, i32 0, i32 19
  store ptr %1382, ptr %1384, align 8, !tbaa !43
  %1385 = load ptr, ptr %9, align 8, !tbaa !9
  %1386 = getelementptr inbounds %struct.Node, ptr %1385, i32 0, i32 16
  store ptr %1382, ptr %1386, align 8, !tbaa !29
  %1387 = load ptr, ptr %9, align 8, !tbaa !9
  %1388 = load ptr, ptr %9, align 8, !tbaa !9
  %1389 = getelementptr inbounds %struct.Node, ptr %1388, i32 0, i32 16
  %1390 = load ptr, ptr %1389, align 8, !tbaa !29
  %1391 = getelementptr inbounds %struct.Node, ptr %1390, i32 0, i32 15
  store ptr %1387, ptr %1391, align 8, !tbaa !30
  %1392 = load ptr, ptr %9, align 8, !tbaa !9
  %1393 = getelementptr inbounds %struct.Node, ptr %1392, i32 0, i32 26
  %1394 = load ptr, ptr %1393, align 8, !tbaa !19
  store ptr %1394, ptr %10, align 8, !tbaa !9
  %1395 = load ptr, ptr %9, align 8, !tbaa !9
  %1396 = getelementptr inbounds %struct.Node, ptr %1395, i32 0, i32 28
  %1397 = load ptr, ptr %1396, align 8, !tbaa !21
  %1398 = load ptr, ptr %9, align 8, !tbaa !9
  %1399 = getelementptr inbounds %struct.Node, ptr %1398, i32 0, i32 26
  store ptr %1397, ptr %1399, align 8, !tbaa !19
  %1400 = load ptr, ptr %10, align 8, !tbaa !9
  %1401 = load ptr, ptr %9, align 8, !tbaa !9
  %1402 = getelementptr inbounds %struct.Node, ptr %1401, i32 0, i32 28
  store ptr %1400, ptr %1402, align 8, !tbaa !21
  %1403 = load ptr, ptr %9, align 8, !tbaa !9
  %1404 = getelementptr inbounds %struct.Node, ptr %1403, i32 0, i32 27
  %1405 = load ptr, ptr %1404, align 8, !tbaa !20
  store ptr %1405, ptr %10, align 8, !tbaa !9
  %1406 = load ptr, ptr %9, align 8, !tbaa !9
  %1407 = getelementptr inbounds %struct.Node, ptr %1406, i32 0, i32 29
  %1408 = load ptr, ptr %1407, align 8, !tbaa !22
  %1409 = load ptr, ptr %9, align 8, !tbaa !9
  %1410 = getelementptr inbounds %struct.Node, ptr %1409, i32 0, i32 27
  store ptr %1408, ptr %1410, align 8, !tbaa !20
  %1411 = load ptr, ptr %10, align 8, !tbaa !9
  %1412 = load ptr, ptr %9, align 8, !tbaa !9
  %1413 = getelementptr inbounds %struct.Node, ptr %1412, i32 0, i32 29
  store ptr %1411, ptr %1413, align 8, !tbaa !22
  br label %1414

1414:                                             ; preds = %1379
  %1415 = load ptr, ptr %9, align 8, !tbaa !9
  %1416 = getelementptr inbounds %struct.Node, ptr %1415, i32 0, i32 16
  %1417 = load ptr, ptr %1416, align 8, !tbaa !29
  store ptr %1417, ptr %9, align 8, !tbaa !9
  %1418 = load ptr, ptr @FirstNode, align 8, !tbaa !9
  %1419 = icmp ne ptr %1417, %1418
  br i1 %1419, label %1379, label %1420, !llvm.loop !57

1420:                                             ; preds = %1414
  %1421 = load i64, ptr %12, align 8, !tbaa !11
  store i64 %1421, ptr @Optimum, align 8, !tbaa !11
  %1422 = load double, ptr %18, align 8, !tbaa !13
  store double %1422, ptr @Excess, align 8, !tbaa !13
  %1423 = load i32, ptr %24, align 4, !tbaa !5
  store i32 %1423, ptr @AscentCandidates, align 4, !tbaa !5
  %1424 = load i32, ptr %25, align 4, !tbaa !5
  store i32 %1424, ptr @InitialPeriod, align 4, !tbaa !5
  %1425 = load i32, ptr %26, align 4, !tbaa !5
  store i32 %1425, ptr @MaxTrials, align 4, !tbaa !5
  store i32 1, ptr %4, align 4
  store i32 1, ptr %27, align 4
  br label %1426

1426:                                             ; preds = %1420, %327
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #4
  %1427 = load i32, ptr %4, align 4
  ret i32 %1427
}

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

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

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

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

declare void @AllocateSegments() #2

declare void @InitializeStatistics() #2

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

declare void @FreeCandidateSets() #2

declare void @CreateCandidateSet() #2

declare double @GetTime() #2

declare i64 @FindTour() #2

declare i64 @MergeWithTour() #2

declare i64 @MergeTourWithIndividual(i32 noundef) #2

declare i32 @HasFitness(i64 noundef) #2

declare void @AddToPopulation(i64 noundef) #2

declare void @PrintPopulation(...) #2

declare void @ReplaceIndividualWithTour(i32 noundef, i64 noundef) #2

declare void @WriteTour(ptr noundef, ptr noundef, i64 noundef) #2

declare void @RecordBestTour() #2

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fabs.f64(double) #3

declare void @UpdateStatistics(i64 noundef, double noundef) #2

declare i32 @LinearSelection(i32 noundef, double noundef) #2

declare void @ApplyCrossover(i32 noundef, i32 noundef) #2

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

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

declare void @SRandom(i32 noundef) #2

declare void @PrintStatistics() #2

declare void @FreeSegments() #2

declare void @FreePopulation(...) #2

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 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { 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, !12, i64 0}
!12 = !{!"long long", !7, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"double", !7, i64 0}
!15 = !{!16, !6, i64 48}
!16 = !{!"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, !14, i64 312, !14, i64 320, !14, i64 328, !14, i64 336, !14, i64 344, !14, i64 352, !7, i64 360, !7, i64 361, !7, i64 362}
!17 = !{!16, !10, i64 216}
!18 = !{!16, !10, i64 232}
!19 = !{!16, !10, i64 152}
!20 = !{!16, !10, i64 160}
!21 = !{!16, !10, i64 168}
!22 = !{!16, !10, i64 176}
!23 = !{!16, !10, i64 224}
!24 = !{!16, !10, i64 240}
!25 = !{!16, !10, i64 192}
!26 = !{!16, !10, i64 184}
!27 = distinct !{!27, !28}
!28 = !{!"llvm.loop.mustprogress"}
!29 = !{!16, !10, i64 72}
!30 = !{!16, !10, i64 64}
!31 = !{!16, !6, i64 0}
!32 = !{!16, !10, i64 56}
!33 = distinct !{!33, !28}
!34 = distinct !{!34, !28}
!35 = !{!16, !10, i64 208}
!36 = distinct !{!36, !28}
!37 = !{!16, !10, i64 128}
!38 = distinct !{!38, !28}
!39 = distinct !{!39, !28}
!40 = distinct !{!40, !28}
!41 = !{!16, !10, i64 144}
!42 = distinct !{!42, !28}
!43 = !{!16, !10, i64 96}
!44 = distinct !{!44, !28}
!45 = distinct !{!45, !28}
!46 = distinct !{!46, !28}
!47 = distinct !{!47, !28}
!48 = distinct !{!48, !28}
!49 = distinct !{!49, !28}
!50 = distinct !{!50, !28}
!51 = distinct !{!51, !28}
!52 = !{!16, !6, i64 36}
!53 = distinct !{!53, !28}
!54 = distinct !{!54, !28}
!55 = distinct !{!55, !28}
!56 = distinct !{!56, !28}
!57 = distinct !{!57, !28}


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

%struct.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 local_unnamed_addr global ptr, align 8
@Optimum = external dso_local local_unnamed_addr global i64, align 8
@Excess = external dso_local local_unnamed_addr global double, align 8
@AscentCandidates = external dso_local local_unnamed_addr global i32, align 4
@InitialPeriod = external dso_local local_unnamed_addr global i32, align 4
@MaxTrials = external dso_local local_unnamed_addr global i32, align 4
@BestCost = external dso_local local_unnamed_addr global i64, align 8
@SubproblemsCompressed = external dso_local local_unnamed_addr global i32, align 4
@TraceLevel = external dso_local local_unnamed_addr global i32, align 4
@.str = external hidden unnamed_addr constant [50 x i8], align 1
@C = external dso_local local_unnamed_addr global ptr, align 8
@Dimension = external dso_local local_unnamed_addr global i32, align 4
@CacheSig = external dso_local local_unnamed_addr global ptr, align 8
@CacheMask = external dso_local local_unnamed_addr global i32, align 4
@Distance = external dso_local local_unnamed_addr global ptr, align 8
@.str.1 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [58 x i8], align 1
@Run = external dso_local local_unnamed_addr global i32, align 4
@Runs = external dso_local local_unnamed_addr global i32, align 4
@Norm = external dso_local local_unnamed_addr global i32, align 4
@MaxPopulationSize = external dso_local local_unnamed_addr global i32, align 4
@PopulationSize = external dso_local local_unnamed_addr global i32, align 4
@Fitness = external dso_local local_unnamed_addr global ptr, align 8
@OutputTourFileName = external dso_local local_unnamed_addr global ptr, align 8
@ProblemType = external dso_local local_unnamed_addr global i32, align 4
@DimensionSaved = external dso_local local_unnamed_addr global i32, align 4
@BetterTour = external dso_local local_unnamed_addr global ptr, align 8
@TourFileName = external dso_local local_unnamed_addr global ptr, align 8
@BestTour = external dso_local local_unnamed_addr global ptr, align 8
@.str.3 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [1 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [41 x i8], align 1
@Seed = external dso_local local_unnamed_addr global i32, align 4
@NodeSet = external dso_local local_unnamed_addr global ptr, align 8
@Precision = external dso_local local_unnamed_addr global i32, align 4

; Function Attrs: nounwind uwtable
define dso_local range(i32 0, 2) i32 @SolveSubproblem(i32 noundef %0, i32 noundef %1, ptr nocapture noundef %2) local_unnamed_addr #0 {
  %4 = load ptr, ptr @FirstNode, align 8, !tbaa !5
  %5 = load double, ptr @Excess, align 8, !tbaa !9
  %6 = load i32, ptr @AscentCandidates, align 4, !tbaa !11
  %7 = load i32, ptr @InitialPeriod, align 4, !tbaa !11
  %8 = load i32, ptr @MaxTrials, align 4, !tbaa !11
  store i64 9223372036854775807, ptr @BestCost, align 8, !tbaa !13
  store ptr null, ptr @FirstNode, align 8, !tbaa !5
  %9 = sub nsw i32 0, %0
  br label %10

10:                                               ; preds = %129, %3
  %.0370 = phi i32 [ 0, %3 ], [ %.2372, %129 ]
  %.0368 = phi i32 [ 0, %3 ], [ %.1369, %129 ]
  %.0352 = phi ptr [ %4, %3 ], [ %135, %129 ]
  %11 = getelementptr inbounds i8, ptr %.0352, i64 48
  %12 = load i32, ptr %11, align 8, !tbaa !15
  %13 = icmp eq i32 %12, %0
  br i1 %13, label %14, label %129

14:                                               ; preds = %10
  %15 = load i32, ptr @SubproblemsCompressed, align 4, !tbaa !11
  %.not = icmp eq i32 %15, 0
  br i1 %.not, label %119, label %16

16:                                               ; preds = %14
  %17 = getelementptr inbounds i8, ptr %.0352, i64 216
  %18 = load ptr, ptr %17, align 8, !tbaa !17
  %19 = getelementptr inbounds i8, ptr %.0352, i64 232
  %20 = load ptr, ptr %19, align 8, !tbaa !18
  %21 = icmp eq ptr %18, %20
  br i1 %21, label %42, label %22

22:                                               ; preds = %16
  %23 = getelementptr inbounds i8, ptr %.0352, i64 152
  %24 = load ptr, ptr %23, align 8, !tbaa !19
  %25 = icmp eq ptr %24, %18
  br i1 %25, label %42, label %26

26:                                               ; preds = %22
  %27 = getelementptr inbounds i8, ptr %.0352, i64 160
  %28 = load ptr, ptr %27, align 8, !tbaa !20
  %29 = icmp eq ptr %28, %18
  br i1 %29, label %42, label %30

30:                                               ; preds = %26
  %31 = tail call i32 @IsCommonEdge(ptr noundef nonnull %.0352, ptr noundef %18) #5
  %.not432 = icmp eq i32 %31, 0
  br i1 %.not432, label %32, label %42

32:                                               ; preds = %30
  %33 = load ptr, ptr %19, align 8, !tbaa !18
  %.not433 = icmp eq ptr %33, null
  br i1 %.not433, label %68, label %34

34:                                               ; preds = %32
  %35 = getelementptr inbounds i8, ptr %.0352, i64 168
  %36 = load ptr, ptr %35, align 8, !tbaa !21
  %37 = icmp eq ptr %36, %33
  br i1 %37, label %42, label %38

38:                                               ; preds = %34
  %39 = getelementptr inbounds i8, ptr %.0352, i64 176
  %40 = load ptr, ptr %39, align 8, !tbaa !22
  %41 = icmp eq ptr %40, %33
  br i1 %41, label %42, label %68

42:                                               ; preds = %38, %34, %30, %26, %22, %16
  %43 = getelementptr inbounds i8, ptr %.0352, i64 224
  %44 = load ptr, ptr %43, align 8, !tbaa !23
  %45 = getelementptr inbounds i8, ptr %.0352, i64 240
  %46 = load ptr, ptr %45, align 8, !tbaa !24
  %47 = icmp eq ptr %44, %46
  br i1 %47, label %118, label %48

48:                                               ; preds = %42
  %49 = getelementptr inbounds i8, ptr %.0352, i64 152
  %50 = load ptr, ptr %49, align 8, !tbaa !19
  %51 = icmp eq ptr %50, %44
  br i1 %51, label %118, label %52

52:                                               ; preds = %48
  %53 = getelementptr inbounds i8, ptr %.0352, i64 160
  %54 = load ptr, ptr %53, align 8, !tbaa !20
  %55 = icmp eq ptr %54, %44
  br i1 %55, label %118, label %56

56:                                               ; preds = %52
  %57 = tail call i32 @IsCommonEdge(ptr noundef nonnull %.0352, ptr noundef %44) #5
  %.not434 = icmp eq i32 %57, 0
  br i1 %.not434, label %58, label %118

58:                                               ; preds = %56
  %59 = load ptr, ptr %45, align 8, !tbaa !24
  %.not435 = icmp eq ptr %59, null
  br i1 %.not435, label %68, label %60

60:                                               ; preds = %58
  %61 = getelementptr inbounds i8, ptr %.0352, i64 168
  %62 = load ptr, ptr %61, align 8, !tbaa !21
  %63 = icmp eq ptr %62, %59
  br i1 %63, label %118, label %64

64:                                               ; preds = %60
  %65 = getelementptr inbounds i8, ptr %.0352, i64 176
  %66 = load ptr, ptr %65, align 8, !tbaa !22
  %67 = icmp eq ptr %66, %59
  br i1 %67, label %118, label %68

68:                                               ; preds = %64, %58, %38, %32
  %69 = load ptr, ptr %17, align 8, !tbaa !17
  %70 = getelementptr inbounds i8, ptr %.0352, i64 240
  %71 = load ptr, ptr %70, align 8, !tbaa !24
  %72 = icmp eq ptr %69, %71
  br i1 %72, label %93, label %73

73:                                               ; preds = %68
  %74 = getelementptr inbounds i8, ptr %.0352, i64 152
  %75 = load ptr, ptr %74, align 8, !tbaa !19
  %76 = icmp eq ptr %75, %69
  br i1 %76, label %93, label %77

77:                                               ; preds = %73
  %78 = getelementptr inbounds i8, ptr %.0352, i64 160
  %79 = load ptr, ptr %78, align 8, !tbaa !20
  %80 = icmp eq ptr %79, %69
  br i1 %80, label %93, label %81

81:                                               ; preds = %77
  %82 = tail call i32 @IsCommonEdge(ptr noundef nonnull %.0352, ptr noundef %69) #5
  %.not436 = icmp eq i32 %82, 0
  br i1 %.not436, label %83, label %93

83:                                               ; preds = %81
  %84 = load ptr, ptr %70, align 8, !tbaa !24
  %.not437 = icmp eq ptr %84, null
  br i1 %.not437, label %119, label %85

85:                                               ; preds = %83
  %86 = getelementptr inbounds i8, ptr %.0352, i64 168
  %87 = load ptr, ptr %86, align 8, !tbaa !21
  %88 = icmp eq ptr %87, %84
  br i1 %88, label %93, label %89

89:                                               ; preds = %85
  %90 = getelementptr inbounds i8, ptr %.0352, i64 176
  %91 = load ptr, ptr %90, align 8, !tbaa !22
  %92 = icmp eq ptr %91, %84
  br i1 %92, label %93, label %119

93:                                               ; preds = %89, %85, %81, %77, %73, %68
  %94 = getelementptr inbounds i8, ptr %.0352, i64 224
  %95 = load ptr, ptr %94, align 8, !tbaa !23
  %96 = load ptr, ptr %19, align 8, !tbaa !18
  %97 = icmp eq ptr %95, %96
  br i1 %97, label %118, label %98

98:                                               ; preds = %93
  %99 = getelementptr inbounds i8, ptr %.0352, i64 152
  %100 = load ptr, ptr %99, align 8, !tbaa !19
  %101 = icmp eq ptr %100, %95
  br i1 %101, label %118, label %102

102:                                              ; preds = %98
  %103 = getelementptr inbounds i8, ptr %.0352, i64 160
  %104 = load ptr, ptr %103, align 8, !tbaa !20
  %105 = icmp eq ptr %104, %95
  br i1 %105, label %118, label %106

106:                                              ; preds = %102
  %107 = tail call i32 @IsCommonEdge(ptr noundef nonnull %.0352, ptr noundef %95) #5
  %.not438 = icmp eq i32 %107, 0
  br i1 %.not438, label %108, label %118

108:                                              ; preds = %106
  %109 = load ptr, ptr %19, align 8, !tbaa !18
  %.not439 = icmp eq ptr %109, null
  br i1 %.not439, label %119, label %110

110:                                              ; preds = %108
  %111 = getelementptr inbounds i8, ptr %.0352, i64 168
  %112 = load ptr, ptr %111, align 8, !tbaa !21
  %113 = icmp eq ptr %112, %109
  br i1 %113, label %118, label %114

114:                                              ; preds = %110
  %115 = getelementptr inbounds i8, ptr %.0352, i64 176
  %116 = load ptr, ptr %115, align 8, !tbaa !22
  %117 = icmp eq ptr %116, %109
  br i1 %117, label %118, label %119

118:                                              ; preds = %114, %110, %106, %102, %98, %93, %64, %60, %56, %52, %48, %42
  store i32 %9, ptr %11, align 8, !tbaa !15
  br label %124

119:                                              ; preds = %114, %108, %89, %83, %14
  %120 = load ptr, ptr @FirstNode, align 8, !tbaa !5
  %.not440 = icmp eq ptr %120, null
  br i1 %.not440, label %121, label %122

121:                                              ; preds = %119
  store ptr %.0352, ptr @FirstNode, align 8, !tbaa !5
  br label %122

122:                                              ; preds = %121, %119
  %123 = add nsw i32 %.0370, 1
  br label %124

124:                                              ; preds = %122, %118
  %.1371 = phi i32 [ %.0370, %118 ], [ %123, %122 ]
  %125 = getelementptr inbounds i8, ptr %.0352, i64 184
  %126 = getelementptr inbounds i8, ptr %.0352, i64 240
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %125, i8 0, i64 16, i1 false)
  %127 = load ptr, ptr %126, align 8, !tbaa !24
  %.not441 = icmp ne ptr %127, null
  %128 = zext i1 %.not441 to i32
  %spec.select = add nsw i32 %.0368, %128
  br label %129

129:                                              ; preds = %124, %10
  %.2372 = phi i32 [ %.0370, %10 ], [ %.1371, %124 ]
  %.1369 = phi i32 [ %.0368, %10 ], [ %spec.select, %124 ]
  %130 = getelementptr inbounds i8, ptr %.0352, i64 232
  %131 = getelementptr inbounds i8, ptr %.0352, i64 152
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %130, i8 0, i64 16, i1 false)
  %132 = getelementptr inbounds i8, ptr %.0352, i64 168
  %133 = load <2 x ptr>, ptr %131, align 8, !tbaa !5
  store <2 x ptr> %133, ptr %132, align 8, !tbaa !5
  %134 = getelementptr inbounds i8, ptr %.0352, i64 224
  %135 = load ptr, ptr %134, align 8, !tbaa !23
  %.not442 = icmp eq ptr %135, %4
  br i1 %.not442, label %136, label %10, !llvm.loop !25

136:                                              ; preds = %129
  %137 = srem i32 %0, %1
  %138 = icmp eq i32 %137, 0
  %spec.select494 = select i1 %138, i32 %1, i32 %137
  %139 = icmp slt i32 %.2372, 4
  %140 = icmp eq i32 %.2372, %.1369
  %or.cond495 = select i1 %139, i1 true, i1 %140
  br i1 %or.cond495, label %141, label %146

141:                                              ; preds = %136
  %142 = load i32, ptr @TraceLevel, align 4, !tbaa !11
  %143 = icmp sgt i32 %142, 0
  %or.cond = and i1 %139, %143
  br i1 %or.cond, label %144, label %145

144:                                              ; preds = %141
  tail call void (ptr, ...) @printff(ptr noundef nonnull @.str, i32 noundef %spec.select494, i32 noundef %1, i32 noundef %.2372) #5
  br label %145

145:                                              ; preds = %144, %141
  store ptr %4, ptr @FirstNode, align 8, !tbaa !5
  br label %609

146:                                              ; preds = %136
  %147 = load i32, ptr @AscentCandidates, align 4, !tbaa !11
  %.not443 = icmp slt i32 %147, %.2372
  br i1 %.not443, label %150, label %148

148:                                              ; preds = %146
  %149 = add nsw i32 %.2372, -1
  store i32 %149, ptr @AscentCandidates, align 4, !tbaa !11
  br label %150

150:                                              ; preds = %148, %146
  %151 = load i32, ptr @InitialPeriod, align 4, !tbaa !11
  %152 = icmp slt i32 %151, 0
  br i1 %152, label %153, label %155

153:                                              ; preds = %150
  %154 = lshr i32 %.2372, 1
  %spec.store.select = tail call i32 @llvm.umax.i32(i32 %154, i32 100)
  store i32 %spec.store.select, ptr @InitialPeriod, align 4
  br label %155

155:                                              ; preds = %153, %150
  %156 = load double, ptr @Excess, align 8, !tbaa !9
  %157 = fcmp olt double %156, 0.000000e+00
  br i1 %157, label %158, label %161

158:                                              ; preds = %155
  %159 = uitofp nneg i32 %.2372 to double
  %160 = fdiv double 1.000000e+00, %159
  store double %160, ptr @Excess, align 8, !tbaa !9
  br label %161

161:                                              ; preds = %158, %155
  %162 = load i32, ptr @MaxTrials, align 4, !tbaa !11
  %163 = icmp eq i32 %162, -1
  br i1 %163, label %164, label %165

164:                                              ; preds = %161
  store i32 %.2372, ptr @MaxTrials, align 4, !tbaa !11
  br label %165

165:                                              ; preds = %164, %161
  %166 = load ptr, ptr @FirstNode, align 8, !tbaa !5
  %167 = load ptr, ptr @C, align 8
  %168 = icmp eq ptr %167, @C_EXPLICIT
  br label %169

169:                                              ; preds = %220, %165
  %.0354 = phi ptr [ null, %165 ], [ %.1355, %220 ]
  %.1 = phi ptr [ %166, %165 ], [ %171, %220 ]
  %170 = getelementptr inbounds i8, ptr %.1, i64 224
  %171 = load ptr, ptr %170, align 8, !tbaa !23
  %172 = getelementptr inbounds i8, ptr %.1, i64 48
  %173 = load i32, ptr %172, align 8, !tbaa !15
  %174 = icmp eq i32 %173, %0
  br i1 %174, label %175, label %182

175:                                              ; preds = %169
  %176 = getelementptr inbounds i8, ptr %.1, i64 72
  store ptr %.1, ptr %176, align 8, !tbaa !27
  %177 = getelementptr inbounds i8, ptr %.1, i64 64
  store ptr %.1, ptr %177, align 8, !tbaa !28
  %.not448 = icmp eq ptr %.1, %166
  br i1 %.not448, label %220, label %178

178:                                              ; preds = %175
  store ptr %.1, ptr %176, align 8, !tbaa !27
  %179 = getelementptr inbounds i8, ptr %.0354, i64 72
  %180 = load ptr, ptr %179, align 8, !tbaa !27
  store ptr %180, ptr %176, align 8, !tbaa !27
  %181 = getelementptr inbounds i8, ptr %180, i64 64
  store ptr %.1, ptr %181, align 8, !tbaa !28
  store ptr %.1, ptr %179, align 8, !tbaa !27
  store ptr %.0354, ptr %177, align 8, !tbaa !28
  br label %220

182:                                              ; preds = %169
  %183 = getelementptr inbounds i8, ptr %171, i64 48
  %184 = load i32, ptr %183, align 8, !tbaa !15
  %185 = icmp eq i32 %184, %0
  br i1 %185, label %186, label %220

186:                                              ; preds = %182
  %187 = getelementptr inbounds i8, ptr %.0354, i64 152
  %188 = load ptr, ptr %187, align 8, !tbaa !19
  %189 = icmp eq ptr %188, %171
  br i1 %189, label %220, label %190

190:                                              ; preds = %186
  %191 = getelementptr inbounds i8, ptr %.0354, i64 160
  %192 = load ptr, ptr %191, align 8, !tbaa !20
  %193 = icmp eq ptr %192, %171
  br i1 %193, label %220, label %194

194:                                              ; preds = %190
  %.not444 = icmp eq ptr %188, null
  br i1 %.not444, label %198, label %195

195:                                              ; preds = %194
  %196 = getelementptr inbounds i8, ptr %188, i64 48
  %197 = load i32, ptr %196, align 8, !tbaa !15
  %.not445 = icmp eq i32 %197, %0
  %spec.select594 = select i1 %.not445, ptr %191, ptr %187
  br label %198

198:                                              ; preds = %195, %194
  %.sink = phi ptr [ %187, %194 ], [ %spec.select594, %195 ]
  store ptr %171, ptr %.sink, align 8, !tbaa !5
  %199 = getelementptr inbounds i8, ptr %171, i64 152
  %200 = load ptr, ptr %199, align 8, !tbaa !19
  %.not446 = icmp eq ptr %200, null
  br i1 %.not446, label %205, label %201

201:                                              ; preds = %198
  %202 = getelementptr inbounds i8, ptr %200, i64 48
  %203 = load i32, ptr %202, align 8, !tbaa !15
  %.not447 = icmp eq i32 %203, %0
  %204 = getelementptr inbounds i8, ptr %171, i64 160
  %spec.select595 = select i1 %.not447, ptr %204, ptr %199
  br label %205

205:                                              ; preds = %201, %198
  %.sink572 = phi ptr [ %199, %198 ], [ %spec.select595, %201 ]
  store ptr %.0354, ptr %.sink572, align 8, !tbaa !5
  br i1 %168, label %206, label %220

206:                                              ; preds = %205
  %207 = load i32, ptr %.0354, align 8, !tbaa !29
  %208 = load i32, ptr %171, align 8, !tbaa !29
  %209 = icmp sgt i32 %207, %208
  br i1 %209, label %210, label %215

210:                                              ; preds = %206
  %211 = getelementptr inbounds i8, ptr %.0354, i64 56
  %212 = load ptr, ptr %211, align 8, !tbaa !30
  %213 = sext i32 %208 to i64
  %214 = getelementptr inbounds i32, ptr %212, i64 %213
  store i32 0, ptr %214, align 4, !tbaa !11
  br label %220

215:                                              ; preds = %206
  %216 = getelementptr inbounds i8, ptr %171, i64 56
  %217 = load ptr, ptr %216, align 8, !tbaa !30
  %218 = sext i32 %207 to i64
  %219 = getelementptr inbounds i32, ptr %217, i64 %218
  store i32 0, ptr %219, align 4, !tbaa !11
  br label %220

220:                                              ; preds = %175, %178, %205, %215, %210, %190, %186, %182
  %.1355 = phi ptr [ %.0354, %186 ], [ %.0354, %190 ], [ %.0354, %210 ], [ %.0354, %215 ], [ %.0354, %205 ], [ %.0354, %182 ], [ %.1, %178 ], [ %.1, %175 ]
  %.not449 = icmp eq ptr %171, %166
  br i1 %.not449, label %221, label %169, !llvm.loop !31

221:                                              ; preds = %220
  store i32 %.2372, ptr @Dimension, align 4, !tbaa !11
  tail call void @AllocateSegments() #5
  tail call void @InitializeStatistics() #5
  %222 = load ptr, ptr @CacheSig, align 8, !tbaa !5
  %.not450 = icmp eq ptr %222, null
  %223 = load i32, ptr @CacheMask, align 4
  %.not451519 = icmp slt i32 %223, 0
  %or.cond535 = select i1 %.not450, i1 true, i1 %.not451519
  br i1 %or.cond535, label %.loopexit508, label %.lr.ph

.lr.ph:                                           ; preds = %221, %.lr.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %.lr.ph ], [ 0, %221 ]
  %224 = getelementptr inbounds i32, ptr %222, i64 %indvars.iv
  store i32 0, ptr %224, align 4, !tbaa !11
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %225 = load i32, ptr @CacheMask, align 4, !tbaa !11
  %226 = sext i32 %225 to i64
  %.not451.not = icmp slt i64 %indvars.iv, %226
  br i1 %.not451.not, label %.lr.ph, label %.loopexit508, !llvm.loop !32

.loopexit508:                                     ; preds = %.lr.ph, %221
  %227 = load i64, ptr @Optimum, align 8, !tbaa !13
  store i64 0, ptr @Optimum, align 8, !tbaa !13
  %228 = load ptr, ptr @FirstNode, align 8, !tbaa !5
  br label %229

229:                                              ; preds = %277, %.loopexit508
  %.0360 = phi i32 [ 0, %.loopexit508 ], [ %.1361, %277 ]
  %.2 = phi ptr [ %228, %.loopexit508 ], [ %278, %277 ]
  %230 = getelementptr inbounds i8, ptr %.2, i64 224
  %231 = load ptr, ptr %230, align 8, !tbaa !23
  %232 = getelementptr inbounds i8, ptr %.2, i64 208
  %233 = load ptr, ptr %232, align 8, !tbaa !33
  %234 = icmp eq ptr %231, %233
  br i1 %234, label %239, label %235

235:                                              ; preds = %229
  %236 = getelementptr inbounds i8, ptr %.2, i64 216
  %237 = load ptr, ptr %236, align 8, !tbaa !17
  %238 = icmp eq ptr %237, %233
  br i1 %238, label %239, label %241

239:                                              ; preds = %235, %229
  %240 = add nsw i32 %.0360, 1
  br label %241

241:                                              ; preds = %239, %235
  %.1361 = phi i32 [ %240, %239 ], [ %.0360, %235 ]
  %242 = getelementptr inbounds i8, ptr %.2, i64 152
  %243 = load ptr, ptr %242, align 8, !tbaa !19
  %244 = getelementptr inbounds i8, ptr %.2, i64 72
  %245 = load ptr, ptr %244, align 8, !tbaa !27
  %246 = icmp eq ptr %243, %245
  br i1 %246, label %thread-pre-split, label %247

247:                                              ; preds = %241
  %248 = getelementptr inbounds i8, ptr %.2, i64 160
  %249 = load ptr, ptr %248, align 8, !tbaa !20
  %250 = icmp eq ptr %249, %245
  br i1 %250, label %thread-pre-split, label %251

251:                                              ; preds = %247
  %252 = load ptr, ptr @Distance, align 8, !tbaa !5
  %253 = tail call i32 %252(ptr noundef nonnull %.2, ptr noundef %245) #5
  %254 = sext i32 %253 to i64
  %255 = load i64, ptr @Optimum, align 8, !tbaa !13
  %256 = add nsw i64 %255, %254
  store i64 %256, ptr @Optimum, align 8, !tbaa !13
  %.pr.pre = load ptr, ptr %242, align 8, !tbaa !19
  br label %thread-pre-split

thread-pre-split:                                 ; preds = %251, %247, %241
  %257 = phi ptr [ %243, %241 ], [ %243, %247 ], [ %.pr.pre, %251 ]
  %.not452 = icmp eq ptr %257, null
  br i1 %.not452, label %266, label %258

258:                                              ; preds = %thread-pre-split
  %259 = getelementptr inbounds i8, ptr %.2, i64 48
  %260 = load i32, ptr %259, align 8, !tbaa !15
  %261 = getelementptr inbounds i8, ptr %257, i64 48
  %262 = load i32, ptr %261, align 8, !tbaa !15
  %.not453 = icmp eq i32 %260, %262
  br i1 %.not453, label %266, label %263

263:                                              ; preds = %258
  %264 = load i32, ptr %.2, align 8, !tbaa !29
  %265 = load i32, ptr %257, align 8, !tbaa !29
  tail call void (ptr, ...) @eprintf(ptr noundef nonnull @.str.1, i32 noundef %264, i32 noundef %265) #5
  br label %266

266:                                              ; preds = %263, %258, %thread-pre-split
  %267 = getelementptr inbounds i8, ptr %.2, i64 160
  %268 = load ptr, ptr %267, align 8, !tbaa !20
  %.not454 = icmp eq ptr %268, null
  br i1 %.not454, label %277, label %269

269:                                              ; preds = %266
  %270 = getelementptr inbounds i8, ptr %.2, i64 48
  %271 = load i32, ptr %270, align 8, !tbaa !15
  %272 = getelementptr inbounds i8, ptr %268, i64 48
  %273 = load i32, ptr %272, align 8, !tbaa !15
  %.not455 = icmp eq i32 %271, %273
  br i1 %.not455, label %277, label %274

274:                                              ; preds = %269
  %275 = load i32, ptr %.2, align 8, !tbaa !29
  %276 = load i32, ptr %268, align 8, !tbaa !29
  tail call void (ptr, ...) @eprintf(ptr noundef nonnull @.str.1, i32 noundef %275, i32 noundef %276) #5
  br label %277

277:                                              ; preds = %266, %269, %274
  %278 = load ptr, ptr %244, align 8, !tbaa !27
  %279 = load ptr, ptr @FirstNode, align 8, !tbaa !5
  %.not456 = icmp eq ptr %278, %279
  br i1 %.not456, label %280, label %229, !llvm.loop !34

280:                                              ; preds = %277
  %281 = load i32, ptr @TraceLevel, align 4, !tbaa !11
  %282 = icmp sgt i32 %281, 0
  br i1 %282, label %283, label %286

283:                                              ; preds = %280
  %284 = load i32, ptr @Dimension, align 4, !tbaa !11
  %285 = load i64, ptr @Optimum, align 8, !tbaa !13
  tail call void (ptr, ...) @printff(ptr noundef nonnull @.str.2, i32 noundef %spec.select494, i32 noundef %1, i32 noundef %284, i64 noundef %285) #5
  br label %286

286:                                              ; preds = %283, %280
  tail call void @FreeCandidateSets() #5
  tail call void @CreateCandidateSet() #5
  store i32 1, ptr @Run, align 4, !tbaa !11
  %287 = load i32, ptr @Runs, align 4, !tbaa !11
  %.not457523 = icmp slt i32 %287, 1
  br i1 %.not457523, label %._crit_edge526, label %.lr.ph525

.lr.ph525:                                        ; preds = %286
  %288 = and i64 %227, 9223372036854775807
  %or.cond5.not = icmp eq i64 %288, 0
  %289 = sitofp i64 %227 to double
  br label %290

290:                                              ; preds = %.lr.ph525, %521
  %291 = tail call double @GetTime() #5
  %292 = load i32, ptr @Norm, align 4, !tbaa !11
  %.not458 = icmp eq i32 %292, 0
  br i1 %.not458, label %295, label %293

293:                                              ; preds = %290
  %294 = tail call i64 @FindTour() #5
  br label %295

295:                                              ; preds = %290, %293
  %296 = load ptr, ptr @FirstNode, align 8, !tbaa !5
  br label %297

297:                                              ; preds = %304, %295
  %.2356 = phi ptr [ null, %295 ], [ %.3357, %304 ]
  %.4 = phi ptr [ %296, %295 ], [ %306, %304 ]
  %298 = getelementptr inbounds i8, ptr %.4, i64 48
  %299 = load i32, ptr %298, align 8, !tbaa !15
  %300 = icmp eq i32 %299, %0
  br i1 %300, label %301, label %304

301:                                              ; preds = %297
  %.not459 = icmp eq ptr %.2356, null
  br i1 %.not459, label %304, label %302

302:                                              ; preds = %301
  %303 = getelementptr inbounds i8, ptr %.2356, i64 128
  store ptr %.4, ptr %303, align 8, !tbaa !35
  br label %304

304:                                              ; preds = %301, %302, %297
  %.3357 = phi ptr [ %.2356, %297 ], [ %.4, %302 ], [ %.4, %301 ]
  %305 = getelementptr inbounds i8, ptr %.4, i64 224
  %306 = load ptr, ptr %305, align 8, !tbaa !23
  %.not460 = icmp eq ptr %306, %296
  br i1 %.not460, label %307, label %297, !llvm.loop !36

307:                                              ; preds = %304
  %308 = getelementptr inbounds i8, ptr %.3357, i64 128
  store ptr %296, ptr %308, align 8, !tbaa !35
  %309 = tail call i64 @MergeWithTour() #5
  %310 = load i32, ptr @MaxPopulationSize, align 4, !tbaa !11
  %311 = icmp sgt i32 %310, 1
  br i1 %311, label %.preheader506, label %336

.preheader506:                                    ; preds = %307
  %312 = load i32, ptr @PopulationSize, align 4, !tbaa !11
  %313 = icmp sgt i32 %312, 0
  br i1 %313, label %.lr.ph522, label %._crit_edge

.lr.ph522:                                        ; preds = %.preheader506, %.lr.ph522
  %.1363521 = phi i32 [ %315, %.lr.ph522 ], [ 0, %.preheader506 ]
  %314 = tail call i64 @MergeTourWithIndividual(i32 noundef %.1363521) #5
  %315 = add nuw nsw i32 %.1363521, 1
  %316 = load i32, ptr @PopulationSize, align 4, !tbaa !11
  %317 = icmp slt i32 %315, %316
  br i1 %317, label %.lr.ph522, label %._crit_edge, !llvm.loop !37

._crit_edge:                                      ; preds = %.lr.ph522, %.preheader506
  %.0358.lcssa = phi i64 [ %309, %.preheader506 ], [ %314, %.lr.ph522 ]
  %318 = tail call i32 @HasFitness(i64 noundef %.0358.lcssa) #5
  %.not461 = icmp eq i32 %318, 0
  br i1 %.not461, label %319, label %336

319:                                              ; preds = %._crit_edge
  %320 = load i32, ptr @PopulationSize, align 4, !tbaa !11
  %321 = load i32, ptr @MaxPopulationSize, align 4, !tbaa !11
  %322 = icmp slt i32 %320, %321
  br i1 %322, label %323, label %326

323:                                              ; preds = %319
  tail call void @AddToPopulation(i64 noundef %.0358.lcssa) #5
  %324 = load i32, ptr @TraceLevel, align 4, !tbaa !11
  %325 = icmp sgt i32 %324, 0
  br i1 %325, label %.sink.split, label %336

326:                                              ; preds = %319
  %327 = load ptr, ptr @Fitness, align 8, !tbaa !5
  %328 = add nsw i32 %320, -1
  %329 = sext i32 %328 to i64
  %330 = getelementptr inbounds i64, ptr %327, i64 %329
  %331 = load i64, ptr %330, align 8, !tbaa !13
  %332 = icmp slt i64 %.0358.lcssa, %331
  br i1 %332, label %333, label %336

333:                                              ; preds = %326
  tail call void @ReplaceIndividualWithTour(i32 noundef %328, i64 noundef %.0358.lcssa) #5
  %334 = load i32, ptr @TraceLevel, align 4, !tbaa !11
  %335 = icmp sgt i32 %334, 0
  br i1 %335, label %.sink.split, label %336

.sink.split:                                      ; preds = %333, %323
  tail call void (...) @PrintPopulation() #5
  br label %336

336:                                              ; preds = %.sink.split, %._crit_edge, %326, %333, %323, %307
  %.1359 = phi i64 [ %.0358.lcssa, %._crit_edge ], [ %.0358.lcssa, %323 ], [ %.0358.lcssa, %333 ], [ %.0358.lcssa, %326 ], [ %309, %307 ], [ %.0358.lcssa, %.sink.split ]
  %337 = load i64, ptr @BestCost, align 8, !tbaa !13
  %338 = icmp slt i64 %.1359, %337
  br i1 %338, label %339, label %349

339:                                              ; preds = %336
  %340 = load ptr, ptr @FirstNode, align 8, !tbaa !5
  br label %341

341:                                              ; preds = %341, %339
  %.5 = phi ptr [ %340, %339 ], [ %346, %341 ]
  %342 = getelementptr inbounds i8, ptr %.5, i64 64
  %343 = load ptr, ptr %342, align 8, !tbaa !28
  %344 = getelementptr inbounds i8, ptr %.5, i64 232
  store ptr %343, ptr %344, align 8, !tbaa !18
  %345 = getelementptr inbounds i8, ptr %.5, i64 72
  %346 = load ptr, ptr %345, align 8, !tbaa !27
  %347 = getelementptr inbounds i8, ptr %.5, i64 240
  store ptr %346, ptr %347, align 8, !tbaa !24
  %.not462 = icmp eq ptr %346, %340
  br i1 %.not462, label %348, label %341, !llvm.loop !38

348:                                              ; preds = %341
  store i64 %.1359, ptr @BestCost, align 8, !tbaa !13
  br label %349

349:                                              ; preds = %348, %336
  %.6 = phi ptr [ %346, %348 ], [ %306, %336 ]
  %350 = load i64, ptr @Optimum, align 8, !tbaa !13
  %351 = icmp slt i64 %.1359, %350
  br i1 %351, label %356, label %352

352:                                              ; preds = %349
  %353 = icmp ne i64 %.1359, %350
  %354 = load ptr, ptr @OutputTourFileName, align 8
  %355 = icmp ne ptr %354, null
  %or.cond3 = select i1 %353, i1 %355, i1 false
  br i1 %or.cond3, label %356, label %479

356:                                              ; preds = %352, %349
  %357 = sub nsw i64 %350, %.1359
  %358 = icmp sgt i64 %357, 0
  %359 = load i64, ptr %2, align 8, !tbaa !13
  %360 = sub nsw i64 %359, %357
  br i1 %358, label %361, label %362

361:                                              ; preds = %356
  store i64 %360, ptr %2, align 8, !tbaa !13
  store i64 %360, ptr @BestCost, align 8, !tbaa !13
  store i64 %.1359, ptr @Optimum, align 8, !tbaa !13
  br label %362

362:                                              ; preds = %356, %361
  %363 = load ptr, ptr @FirstNode, align 8, !tbaa !5
  br label %364

364:                                              ; preds = %364, %362
  %.7 = phi ptr [ %363, %362 ], [ %367, %364 ]
  %365 = getelementptr inbounds i8, ptr %.7, i64 144
  store ptr null, ptr %365, align 8, !tbaa !39
  %366 = getelementptr inbounds i8, ptr %.7, i64 224
  %367 = load ptr, ptr %366, align 8, !tbaa !23
  %.not463 = icmp eq ptr %367, %363
  br i1 %.not463, label %.preheader505, label %364, !llvm.loop !40

.preheader505:                                    ; preds = %364, %401
  %.8 = phi ptr [ %.sink573, %401 ], [ %367, %364 ]
  %368 = getelementptr inbounds i8, ptr %.8, i64 144
  store ptr %.8, ptr %368, align 8, !tbaa !39
  %369 = getelementptr inbounds i8, ptr %.8, i64 224
  %370 = load ptr, ptr %369, align 8, !tbaa !23
  %371 = getelementptr inbounds i8, ptr %370, i64 144
  %372 = load ptr, ptr %371, align 8, !tbaa !39
  %.not464 = icmp eq ptr %372, null
  br i1 %.not464, label %373, label %379

373:                                              ; preds = %.preheader505
  %374 = getelementptr inbounds i8, ptr %.8, i64 48
  %375 = load i32, ptr %374, align 8, !tbaa !15
  %.not465 = icmp eq i32 %375, %0
  br i1 %.not465, label %376, label %401

376:                                              ; preds = %373
  %377 = getelementptr inbounds i8, ptr %370, i64 48
  %378 = load i32, ptr %377, align 8, !tbaa !15
  %.not466 = icmp eq i32 %378, %0
  br i1 %.not466, label %379, label %401

379:                                              ; preds = %376, %.preheader505
  %380 = getelementptr inbounds i8, ptr %.8, i64 216
  %381 = load ptr, ptr %380, align 8, !tbaa !17
  %382 = getelementptr inbounds i8, ptr %381, i64 144
  %383 = load ptr, ptr %382, align 8, !tbaa !39
  %.not467 = icmp eq ptr %383, null
  br i1 %.not467, label %384, label %390

384:                                              ; preds = %379
  %385 = getelementptr inbounds i8, ptr %.8, i64 48
  %386 = load i32, ptr %385, align 8, !tbaa !15
  %.not468 = icmp eq i32 %386, %0
  br i1 %.not468, label %387, label %401

387:                                              ; preds = %384
  %388 = getelementptr inbounds i8, ptr %381, i64 48
  %389 = load i32, ptr %388, align 8, !tbaa !15
  %.not469 = icmp eq i32 %389, %0
  br i1 %.not469, label %390, label %401

390:                                              ; preds = %387, %379
  %391 = getelementptr inbounds i8, ptr %.8, i64 72
  %392 = load ptr, ptr %391, align 8, !tbaa !27
  %393 = getelementptr inbounds i8, ptr %392, i64 144
  %394 = load ptr, ptr %393, align 8, !tbaa !39
  %.not470 = icmp eq ptr %394, null
  br i1 %.not470, label %401, label %395

395:                                              ; preds = %390
  %396 = getelementptr inbounds i8, ptr %.8, i64 64
  %397 = load ptr, ptr %396, align 8, !tbaa !28
  %398 = getelementptr inbounds i8, ptr %397, i64 144
  %399 = load ptr, ptr %398, align 8, !tbaa !39
  %.not471 = icmp eq ptr %399, null
  br i1 %.not471, label %401, label %.thread

.thread:                                          ; preds = %395
  %400 = getelementptr inbounds i8, ptr %.8, i64 96
  store ptr %363, ptr %400, align 8, !tbaa !41
  br label %.loopexit558

401:                                              ; preds = %395, %390, %384, %387, %373, %376
  %.sink573 = phi ptr [ %370, %376 ], [ %370, %373 ], [ %381, %387 ], [ %381, %384 ], [ %392, %390 ], [ %397, %395 ]
  %402 = getelementptr inbounds i8, ptr %.8, i64 96
  store ptr %.sink573, ptr %402, align 8, !tbaa !41
  %.not472 = icmp eq ptr %.sink573, %363
  br i1 %.not472, label %.loopexit558, label %.preheader505, !llvm.loop !42

.loopexit558:                                     ; preds = %401, %.thread
  %403 = phi ptr [ %363, %.thread ], [ %.sink573, %401 ]
  %404 = load i32, ptr @ProblemType, align 4, !tbaa !11
  %.not473 = icmp eq i32 %404, 1
  %405 = load i32, ptr @DimensionSaved, align 4
  %406 = zext i1 %.not473 to i32
  %407 = shl nsw i32 %405, %406
  store i32 %407, ptr @Dimension, align 4, !tbaa !11
  %408 = load ptr, ptr @BetterTour, align 8
  br label %409

409:                                              ; preds = %426, %.loopexit558
  %.2364 = phi i32 [ 0, %.loopexit558 ], [ %.3365, %426 ]
  %.9 = phi ptr [ %403, %.loopexit558 ], [ %428, %426 ]
  %410 = load i32, ptr @ProblemType, align 4, !tbaa !11
  %.not474 = icmp eq i32 %410, 1
  %411 = load i32, ptr %.9, align 8, !tbaa !29
  br i1 %.not474, label %414, label %412

412:                                              ; preds = %409
  %413 = add nsw i32 %.2364, 1
  br label %.sink.split575

414:                                              ; preds = %409
  %415 = load i32, ptr @Dimension, align 4, !tbaa !11
  %416 = sdiv i32 %415, 2
  %.not475 = icmp sgt i32 %411, %416
  br i1 %.not475, label %426, label %417

417:                                              ; preds = %414
  %418 = add nsw i32 %.2364, 1
  %419 = getelementptr inbounds i8, ptr %.9, i64 96
  %420 = load ptr, ptr %419, align 8, !tbaa !41
  %421 = load i32, ptr %420, align 8, !tbaa !29
  %422 = add nsw i32 %416, %411
  %.not476 = icmp eq i32 %421, %422
  %423 = sub nsw i32 %416, %418
  %spec.select596 = select i1 %.not476, i32 %423, i32 %418
  %spec.select597.idx = select i1 %.not476, i64 4, i64 0
  %spec.select597 = getelementptr i8, ptr %408, i64 %spec.select597.idx
  br label %.sink.split575

.sink.split575:                                   ; preds = %417, %412
  %.sink579 = phi i32 [ %413, %412 ], [ %spec.select596, %417 ]
  %.sink577 = phi ptr [ %408, %412 ], [ %spec.select597, %417 ]
  %.3365.ph = phi i32 [ %413, %412 ], [ %418, %417 ]
  %424 = sext i32 %.sink579 to i64
  %425 = getelementptr i32, ptr %.sink577, i64 %424
  store i32 %411, ptr %425, align 4, !tbaa !11
  br label %426

426:                                              ; preds = %.sink.split575, %414
  %.3365 = phi i32 [ %.2364, %414 ], [ %.3365.ph, %.sink.split575 ]
  %427 = getelementptr inbounds i8, ptr %.9, i64 96
  %428 = load ptr, ptr %427, align 8, !tbaa !41
  %.not477 = icmp eq ptr %428, %363
  br i1 %.not477, label %429, label %409, !llvm.loop !43

429:                                              ; preds = %426
  %430 = load ptr, ptr @BetterTour, align 8, !tbaa !5
  %431 = load i32, ptr @ProblemType, align 4, !tbaa !11
  %.not478 = icmp eq i32 %431, 1
  %432 = load i32, ptr @Dimension, align 4, !tbaa !11
  %433 = sdiv i32 %432, 2
  %434 = select i1 %.not478, i32 %433, i32 %432
  %435 = sext i32 %434 to i64
  %436 = getelementptr inbounds i32, ptr %430, i64 %435
  %437 = load i32, ptr %436, align 4, !tbaa !11
  store i32 %437, ptr %430, align 4, !tbaa !11
  %438 = load ptr, ptr @OutputTourFileName, align 8, !tbaa !5
  tail call void @WriteTour(ptr noundef %438, ptr noundef nonnull %430, i64 noundef %360) #5
  br i1 %358, label %.preheader504, label %462

.preheader504:                                    ; preds = %429
  %439 = load ptr, ptr @FirstNode, align 8
  br label %440

440:                                              ; preds = %.preheader504, %443
  %.10 = phi ptr [ %445, %443 ], [ %428, %.preheader504 ]
  %441 = getelementptr inbounds i8, ptr %.10, i64 48
  %442 = load i32, ptr %441, align 8, !tbaa !15
  %.not479 = icmp eq i32 %442, %0
  br i1 %.not479, label %443, label %446

443:                                              ; preds = %440
  %444 = getelementptr inbounds i8, ptr %.10, i64 216
  %445 = load ptr, ptr %444, align 8, !tbaa !17
  %.not480 = icmp eq ptr %445, %439
  br i1 %.not480, label %446, label %440, !llvm.loop !44

446:                                              ; preds = %440, %443
  %.11 = phi ptr [ %.10, %440 ], [ %445, %443 ]
  %447 = getelementptr inbounds i8, ptr %.11, i64 224
  %448 = load ptr, ptr %447, align 8, !tbaa !23
  %449 = getelementptr inbounds i8, ptr %.11, i64 96
  %450 = load ptr, ptr %449, align 8, !tbaa !41
  %451 = icmp eq ptr %448, %450
  br i1 %451, label %.preheader601, label %.preheader602

.preheader601:                                    ; preds = %446, %.preheader601
  %.12 = phi ptr [ %453, %.preheader601 ], [ %439, %446 ]
  %452 = getelementptr inbounds i8, ptr %.12, i64 96
  %453 = load ptr, ptr %452, align 8, !tbaa !41
  %454 = getelementptr inbounds i8, ptr %453, i64 216
  store ptr %.12, ptr %454, align 8, !tbaa !17
  %455 = getelementptr inbounds i8, ptr %.12, i64 224
  store ptr %453, ptr %455, align 8, !tbaa !23
  %.not482 = icmp eq ptr %453, %439
  br i1 %.not482, label %.loopexit502, label %.preheader601, !llvm.loop !45

.preheader602:                                    ; preds = %446, %.preheader602
  %.13 = phi ptr [ %457, %.preheader602 ], [ %439, %446 ]
  %456 = getelementptr inbounds i8, ptr %.13, i64 96
  %457 = load ptr, ptr %456, align 8, !tbaa !41
  %458 = getelementptr inbounds i8, ptr %.13, i64 216
  store ptr %457, ptr %458, align 8, !tbaa !17
  %459 = getelementptr inbounds i8, ptr %457, i64 224
  store ptr %.13, ptr %459, align 8, !tbaa !23
  %.not481 = icmp eq ptr %457, %439
  br i1 %.not481, label %.loopexit502, label %.preheader602, !llvm.loop !46

.loopexit502:                                     ; preds = %.preheader602, %.preheader601
  %.14 = phi ptr [ %453, %.preheader601 ], [ %457, %.preheader602 ]
  tail call void @RecordBestTour() #5
  %460 = load ptr, ptr @TourFileName, align 8, !tbaa !5
  %461 = load ptr, ptr @BestTour, align 8, !tbaa !5
  tail call void @WriteTour(ptr noundef %460, ptr noundef %461, i64 noundef %360) #5
  br label %462

462:                                              ; preds = %.loopexit502, %429
  %.15 = phi ptr [ %.14, %.loopexit502 ], [ %428, %429 ]
  store i32 %.2372, ptr @Dimension, align 4, !tbaa !11
  %463 = load i32, ptr @TraceLevel, align 4, !tbaa !11
  %464 = icmp sgt i32 %463, 0
  br i1 %464, label %465, label %479

465:                                              ; preds = %462
  tail call void (ptr, ...) @printff(ptr noundef nonnull @.str.3, i32 noundef %spec.select494, i64 noundef %360) #5
  br i1 %or.cond5.not, label %471, label %466

466:                                              ; preds = %465
  %467 = sub nsw i64 %360, %227
  %468 = sitofp i64 %467 to double
  %469 = fmul double %468, 1.000000e+02
  %470 = fdiv double %469, %289
  tail call void (ptr, ...) @printff(ptr noundef nonnull @.str.4, double noundef %470) #5
  br label %471

471:                                              ; preds = %466, %465
  %472 = tail call double @GetTime() #5
  %473 = fsub double %472, %291
  %474 = tail call double @llvm.fabs.f64(double %473)
  %475 = icmp slt i64 %360, %227
  %476 = icmp eq i64 %360, %227
  %477 = select i1 %476, ptr @.str.7, ptr @.str.8
  %478 = select i1 %475, ptr @.str.6, ptr %477
  tail call void (ptr, ...) @printff(ptr noundef nonnull @.str.5, double noundef %474, ptr noundef nonnull %478) #5
  br label %479

479:                                              ; preds = %462, %471, %352
  %.16 = phi ptr [ %.15, %471 ], [ %.15, %462 ], [ %.6, %352 ]
  %480 = tail call double @GetTime() #5
  %481 = fsub double %480, %291
  %482 = tail call double @llvm.fabs.f64(double %481)
  tail call void @UpdateStatistics(i64 noundef %.1359, double noundef %482) #5
  %483 = load i32, ptr @TraceLevel, align 4, !tbaa !11
  %484 = icmp sgt i32 %483, 0
  %485 = icmp ne i64 %.1359, 9223372036854775807
  %or.cond7 = and i1 %485, %484
  br i1 %or.cond7, label %486, label %488

486:                                              ; preds = %479
  %487 = load i32, ptr @Run, align 4, !tbaa !11
  tail call void (ptr, ...) @printff(ptr noundef nonnull @.str.9, i32 noundef %487, i64 noundef %.1359, double noundef %482) #5
  br label %488

488:                                              ; preds = %486, %479
  %489 = load i32, ptr @PopulationSize, align 4, !tbaa !11
  %490 = icmp sgt i32 %489, 1
  br i1 %490, label %491, label %.loopexit501

491:                                              ; preds = %488
  %492 = load i32, ptr @MaxPopulationSize, align 4, !tbaa !11
  %493 = icmp eq i32 %489, %492
  %.pre = load i32, ptr @Run, align 4, !tbaa !11
  %494 = shl nsw i32 %492, 1
  %.not483 = icmp sge i32 %.pre, %494
  %or.cond580.not599 = select i1 %493, i1 true, i1 %.not483
  %495 = load i32, ptr @Runs, align 4
  %496 = icmp slt i32 %.pre, %495
  %or.cond582 = select i1 %or.cond580.not599, i1 %496, i1 false
  br i1 %or.cond582, label %497, label %.loopexit501

497:                                              ; preds = %491
  %498 = tail call i32 @LinearSelection(i32 noundef %489, double noundef 1.250000e+00) #5
  br label %499

499:                                              ; preds = %499, %497
  %500 = load i32, ptr @PopulationSize, align 4, !tbaa !11
  %501 = tail call i32 @LinearSelection(i32 noundef %500, double noundef 1.250000e+00) #5
  %502 = icmp eq i32 %498, %501
  br i1 %502, label %499, label %503, !llvm.loop !47

503:                                              ; preds = %499
  tail call void @ApplyCrossover(i32 noundef %498, i32 noundef %501) #5
  %504 = load ptr, ptr @FirstNode, align 8, !tbaa !5
  br label %505

505:                                              ; preds = %505, %503
  %.0353 = phi ptr [ %504, %503 ], [ %514, %505 ]
  %506 = load ptr, ptr @C, align 8, !tbaa !5
  %507 = getelementptr inbounds i8, ptr %.0353, i64 72
  %508 = load ptr, ptr %507, align 8, !tbaa !27
  %509 = tail call i32 %506(ptr noundef %.0353, ptr noundef %508) #5
  %510 = load ptr, ptr %507, align 8, !tbaa !27
  %511 = tail call i32 @AddCandidate(ptr noundef %.0353, ptr noundef %510, i32 noundef %509, i32 noundef 2147483647) #5
  %512 = load ptr, ptr %507, align 8, !tbaa !27
  %513 = tail call i32 @AddCandidate(ptr noundef %512, ptr noundef %.0353, i32 noundef %509, i32 noundef 2147483647) #5
  %514 = load ptr, ptr %507, align 8, !tbaa !27
  %515 = getelementptr inbounds i8, ptr %.0353, i64 208
  store ptr %514, ptr %515, align 8, !tbaa !33
  %516 = load ptr, ptr @FirstNode, align 8, !tbaa !5
  %.not484 = icmp eq ptr %514, %516
  br i1 %.not484, label %.loopexit501, label %505, !llvm.loop !48

.loopexit501:                                     ; preds = %505, %491, %488
  %517 = load i32, ptr @Seed, align 4, !tbaa !11
  %518 = add i32 %517, 1
  store i32 %518, ptr @Seed, align 4, !tbaa !11
  tail call void @SRandom(i32 noundef %518) #5
  %519 = load i32, ptr @Norm, align 4, !tbaa !11
  %520 = icmp eq i32 %519, 0
  br i1 %520, label %._crit_edge526, label %521

521:                                              ; preds = %.loopexit501
  %522 = load i32, ptr @Run, align 4, !tbaa !11
  %523 = add nsw i32 %522, 1
  store i32 %523, ptr @Run, align 4, !tbaa !11
  %524 = load i32, ptr @Runs, align 4, !tbaa !11
  %.not457.not = icmp slt i32 %522, %524
  br i1 %.not457.not, label %290, label %._crit_edge526, !llvm.loop !49

._crit_edge526:                                   ; preds = %521, %.loopexit501, %286
  %.17 = phi ptr [ %278, %286 ], [ %.16, %.loopexit501 ], [ %.16, %521 ]
  %525 = load i32, ptr @TraceLevel, align 4, !tbaa !11
  %526 = icmp sgt i32 %525, 0
  br i1 %526, label %527, label %528

527:                                              ; preds = %._crit_edge526
  tail call void @PrintStatistics() #5
  br label %528

528:                                              ; preds = %527, %._crit_edge526
  %529 = load ptr, ptr @C, align 8, !tbaa !5
  %530 = icmp eq ptr %529, @C_EXPLICIT
  br i1 %530, label %531, label %.loopexit500

531:                                              ; preds = %528
  %532 = load ptr, ptr @FirstNode, align 8, !tbaa !5
  br label %533

533:                                              ; preds = %581, %531
  %.18 = phi ptr [ %532, %531 ], [ %583, %581 ]
  %534 = load i32, ptr %.18, align 8, !tbaa !29
  %535 = icmp sgt i32 %534, 1
  br i1 %535, label %.lr.ph532, label %._crit_edge533

.lr.ph532:                                        ; preds = %533
  %536 = getelementptr inbounds i8, ptr %.18, i64 36
  %537 = load ptr, ptr @NodeSet, align 8, !tbaa !5
  %538 = getelementptr inbounds i8, ptr %.18, i64 56
  %539 = load ptr, ptr %538, align 8, !tbaa !30
  br label %540

540:                                              ; preds = %.lr.ph532, %540
  %indvars.iv551 = phi i64 [ 1, %.lr.ph532 ], [ %indvars.iv.next552, %540 ]
  %541 = load i32, ptr %536, align 4, !tbaa !50
  %542 = getelementptr inbounds %struct.Node, ptr %537, i64 %indvars.iv551, i32 9
  %543 = load i32, ptr %542, align 4, !tbaa !50
  %544 = getelementptr inbounds i32, ptr %539, i64 %indvars.iv551
  %545 = load i32, ptr %544, align 4, !tbaa !11
  %546 = add i32 %543, %541
  %547 = sub i32 %545, %546
  store i32 %547, ptr %544, align 4, !tbaa !11
  %548 = load i32, ptr @Precision, align 4, !tbaa !11
  %549 = sdiv i32 %547, %548
  store i32 %549, ptr %544, align 4, !tbaa !11
  %indvars.iv.next552 = add nuw nsw i64 %indvars.iv551, 1
  %550 = load i32, ptr %.18, align 8, !tbaa !29
  %551 = sext i32 %550 to i64
  %552 = icmp slt i64 %indvars.iv.next552, %551
  br i1 %552, label %540, label %._crit_edge533, !llvm.loop !51

._crit_edge533:                                   ; preds = %540, %533
  %.lcssa = phi i32 [ %534, %533 ], [ %550, %540 ]
  %553 = getelementptr inbounds i8, ptr %.18, i64 152
  %554 = load ptr, ptr %553, align 8, !tbaa !19
  %.not485 = icmp eq ptr %554, null
  br i1 %.not485, label %566, label %555

555:                                              ; preds = %._crit_edge533
  %556 = getelementptr inbounds i8, ptr %.18, i64 168
  %557 = load ptr, ptr %556, align 8, !tbaa !21
  %.not486 = icmp eq ptr %554, %557
  br i1 %.not486, label %566, label %.sink.split583

.sink.split583:                                   ; preds = %555
  %558 = load i32, ptr %554, align 8, !tbaa !29
  %559 = icmp sgt i32 %.lcssa, %558
  %560 = load ptr, ptr @Distance, align 8, !tbaa !5
  %561 = tail call i32 %560(ptr noundef nonnull %.18, ptr noundef nonnull %554) #5
  %562 = load ptr, ptr %553, align 8, !tbaa !19
  %..18 = select i1 %559, ptr %562, ptr %.18
  %.18. = select i1 %559, ptr %.18, ptr %562
  %.sink585.in = getelementptr inbounds i8, ptr %.18., i64 56
  %.sink585 = load ptr, ptr %.sink585.in, align 8, !tbaa !30
  %563 = load i32, ptr %..18, align 8, !tbaa !29
  %564 = sext i32 %563 to i64
  %565 = getelementptr inbounds i32, ptr %.sink585, i64 %564
  store i32 %561, ptr %565, align 4, !tbaa !11
  br label %566

566:                                              ; preds = %.sink.split583, %555, %._crit_edge533
  %567 = getelementptr inbounds i8, ptr %.18, i64 160
  %568 = load ptr, ptr %567, align 8, !tbaa !20
  %.not487 = icmp eq ptr %568, null
  br i1 %.not487, label %581, label %569

569:                                              ; preds = %566
  %570 = getelementptr inbounds i8, ptr %.18, i64 176
  %571 = load ptr, ptr %570, align 8, !tbaa !22
  %.not488 = icmp eq ptr %568, %571
  br i1 %.not488, label %581, label %.sink.split589

.sink.split589:                                   ; preds = %569
  %572 = load i32, ptr %.18, align 8, !tbaa !29
  %573 = load i32, ptr %568, align 8, !tbaa !29
  %574 = icmp sgt i32 %572, %573
  %575 = load ptr, ptr @Distance, align 8, !tbaa !5
  %576 = tail call i32 %575(ptr noundef nonnull %.18, ptr noundef nonnull %568) #5
  %577 = load ptr, ptr %567, align 8, !tbaa !20
  %..18616 = select i1 %574, ptr %577, ptr %.18
  %.18.617 = select i1 %574, ptr %.18, ptr %577
  %.sink591.in = getelementptr inbounds i8, ptr %.18.617, i64 56
  %.sink591 = load ptr, ptr %.sink591.in, align 8, !tbaa !30
  %578 = load i32, ptr %..18616, align 8, !tbaa !29
  %579 = sext i32 %578 to i64
  %580 = getelementptr inbounds i32, ptr %.sink591, i64 %579
  store i32 %576, ptr %580, align 4, !tbaa !11
  br label %581

581:                                              ; preds = %.sink.split589, %566, %569
  %582 = getelementptr inbounds i8, ptr %.18, i64 72
  %583 = load ptr, ptr %582, align 8, !tbaa !27
  %584 = load ptr, ptr @FirstNode, align 8, !tbaa !5
  %.not489 = icmp eq ptr %583, %584
  br i1 %.not489, label %.loopexit500, label %533, !llvm.loop !52

.loopexit500:                                     ; preds = %581, %528
  %.19 = phi ptr [ %.17, %528 ], [ %583, %581 ]
  tail call void @FreeSegments() #5
  tail call void @FreeCandidateSets() #5
  tail call void (...) @FreePopulation() #5
  %585 = load i32, ptr @Dimension, align 4, !tbaa !11
  %586 = icmp eq i32 %.1361, %585
  %587 = load ptr, ptr @FirstNode, align 8, !tbaa !5
  br i1 %586, label %.preheader, label %.preheader498

.preheader:                                       ; preds = %.loopexit500, %.preheader
  %.20 = phi ptr [ %589, %.preheader ], [ %.19, %.loopexit500 ]
  %588 = getelementptr inbounds i8, ptr %.20, i64 224
  %589 = load ptr, ptr %588, align 8, !tbaa !23
  %590 = getelementptr inbounds i8, ptr %.20, i64 208
  store ptr %589, ptr %590, align 8, !tbaa !33
  %.not491 = icmp eq ptr %589, %587
  br i1 %.not491, label %.loopexit, label %.preheader, !llvm.loop !53

.preheader498:                                    ; preds = %.loopexit500, %.preheader498
  %.21 = phi ptr [ %593, %.preheader498 ], [ %.19, %.loopexit500 ]
  %591 = getelementptr inbounds i8, ptr %.21, i64 208
  store ptr null, ptr %591, align 8, !tbaa !33
  %592 = getelementptr inbounds i8, ptr %.21, i64 224
  %593 = load ptr, ptr %592, align 8, !tbaa !23
  %.not490 = icmp eq ptr %593, %587
  br i1 %.not490, label %.loopexit, label %.preheader498, !llvm.loop !54

.loopexit:                                        ; preds = %.preheader498, %.preheader
  %594 = load i32, ptr @ProblemType, align 4, !tbaa !11
  %.not492 = icmp eq i32 %594, 1
  %595 = load i32, ptr @DimensionSaved, align 4
  %596 = zext i1 %.not492 to i32
  %597 = shl nsw i32 %595, %596
  store i32 %597, ptr @Dimension, align 4, !tbaa !11
  store ptr %4, ptr @FirstNode, align 8, !tbaa !5
  br label %598

598:                                              ; preds = %598, %.loopexit
  %.22 = phi ptr [ %4, %.loopexit ], [ %600, %598 ]
  %599 = getelementptr inbounds i8, ptr %.22, i64 224
  %600 = load ptr, ptr %599, align 8, !tbaa !23
  %601 = getelementptr inbounds i8, ptr %.22, i64 96
  store ptr %600, ptr %601, align 8, !tbaa !41
  %602 = getelementptr inbounds i8, ptr %.22, i64 72
  store ptr %600, ptr %602, align 8, !tbaa !27
  %603 = getelementptr inbounds i8, ptr %600, i64 64
  store ptr %.22, ptr %603, align 8, !tbaa !28
  %604 = getelementptr inbounds i8, ptr %.22, i64 152
  %605 = getelementptr inbounds i8, ptr %.22, i64 168
  %606 = load <2 x ptr>, ptr %605, align 8, !tbaa !5
  %607 = load <2 x ptr>, ptr %604, align 8, !tbaa !5
  store <2 x ptr> %606, ptr %604, align 8, !tbaa !5
  store <2 x ptr> %607, ptr %605, align 8, !tbaa !5
  %.not493 = icmp eq ptr %600, %4
  br i1 %.not493, label %608, label %598, !llvm.loop !55

608:                                              ; preds = %598
  store i64 %227, ptr @Optimum, align 8, !tbaa !13
  store double %5, ptr @Excess, align 8, !tbaa !9
  store i32 %6, ptr @AscentCandidates, align 4, !tbaa !11
  store i32 %7, ptr @InitialPeriod, align 4, !tbaa !11
  store i32 %8, ptr @MaxTrials, align 4, !tbaa !11
  br label %609

609:                                              ; preds = %608, %145
  %.0 = phi i32 [ 0, %145 ], [ 1, %608 ]
  ret i32 %.0
}

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

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

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

declare void @AllocateSegments() local_unnamed_addr #1

declare void @InitializeStatistics() local_unnamed_addr #1

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

declare void @FreeCandidateSets() local_unnamed_addr #1

declare void @CreateCandidateSet() local_unnamed_addr #1

declare double @GetTime() local_unnamed_addr #1

declare i64 @FindTour() local_unnamed_addr #1

declare i64 @MergeWithTour() local_unnamed_addr #1

declare i64 @MergeTourWithIndividual(i32 noundef) local_unnamed_addr #1

declare i32 @HasFitness(i64 noundef) local_unnamed_addr #1

declare void @AddToPopulation(i64 noundef) local_unnamed_addr #1

declare void @PrintPopulation(...) local_unnamed_addr #1

declare void @ReplaceIndividualWithTour(i32 noundef, i64 noundef) local_unnamed_addr #1

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

declare void @RecordBestTour() local_unnamed_addr #1

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fabs.f64(double) #2

declare void @UpdateStatistics(i64 noundef, double noundef) local_unnamed_addr #1

declare i32 @LinearSelection(i32 noundef, double noundef) local_unnamed_addr #1

declare void @ApplyCrossover(i32 noundef, i32 noundef) local_unnamed_addr #1

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

declare void @SRandom(i32 noundef) local_unnamed_addr #1

declare void @PrintStatistics() local_unnamed_addr #1

declare void @FreeSegments() local_unnamed_addr #1

declare void @FreePopulation(...) local_unnamed_addr #1

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

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

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 nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #3 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #5 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"double", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"long long", !7, i64 0}
!15 = !{!16, !12, i64 48}
!16 = !{!"Node", !12, i64 0, !12, i64 4, !12, i64 8, !12, i64 12, !12, i64 16, !12, i64 20, !12, i64 24, !12, i64 28, !12, i64 32, !12, i64 36, !12, i64 40, !12, i64 44, !12, i64 48, !12, 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, !10, i64 312, !10, i64 320, !10, i64 328, !10, i64 336, !10, i64 344, !10, i64 352, !7, i64 360, !7, i64 361, !7, i64 362}
!17 = !{!16, !6, i64 216}
!18 = !{!16, !6, i64 232}
!19 = !{!16, !6, i64 152}
!20 = !{!16, !6, i64 160}
!21 = !{!16, !6, i64 168}
!22 = !{!16, !6, i64 176}
!23 = !{!16, !6, i64 224}
!24 = !{!16, !6, i64 240}
!25 = distinct !{!25, !26}
!26 = !{!"llvm.loop.mustprogress"}
!27 = !{!16, !6, i64 72}
!28 = !{!16, !6, i64 64}
!29 = !{!16, !12, i64 0}
!30 = !{!16, !6, i64 56}
!31 = distinct !{!31, !26}
!32 = distinct !{!32, !26}
!33 = !{!16, !6, i64 208}
!34 = distinct !{!34, !26}
!35 = !{!16, !6, i64 128}
!36 = distinct !{!36, !26}
!37 = distinct !{!37, !26}
!38 = distinct !{!38, !26}
!39 = !{!16, !6, i64 144}
!40 = distinct !{!40, !26}
!41 = !{!16, !6, i64 96}
!42 = distinct !{!42, !26}
!43 = distinct !{!43, !26}
!44 = distinct !{!44, !26}
!45 = distinct !{!45, !26}
!46 = distinct !{!46, !26}
!47 = distinct !{!47, !26}
!48 = distinct !{!48, !26}
!49 = distinct !{!49, !26}
!50 = !{!16, !12, i64 36}
!51 = distinct !{!51, !26}
!52 = distinct !{!52, !26}
!53 = distinct !{!53, !26}
!54 = distinct !{!54, !26}
!55 = distinct !{!55, !26}


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