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

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct.Node = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, double, double, double, double, double, double, i8, i8, i8 }
%struct.Candidate = type { ptr, i32, i32 }

@FirstNode = external dso_local global ptr, align 8
@CandidateSetType = external dso_local global i32, align 4
@MaxCandidates = external dso_local global i32, align 4
@Subgradient = external dso_local global i32, align 4
@Norm = external dso_local global i32, align 4
@Optimum = external dso_local global i64, align 8
@Precision = external dso_local global i32, align 4
@AscentCandidates = external dso_local global i32, align 4
@ExtraCandidates = external dso_local global i32, align 4
@ExtraCandidateSetType = external dso_local global i32, align 4
@ExtraCandidateSetSymmetric = external dso_local global i32, align 4
@TraceLevel = external dso_local global i32, align 4
@.str = external hidden unnamed_addr constant [30 x i8], align 1
@InitialPeriod = external dso_local global i32, align 4
@InitialStepSize = external dso_local global i32, align 4
@.str.1 = external hidden unnamed_addr constant [49 x i8], align 1
@Dimension = external dso_local global i32, align 4
@.str.2 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [57 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [34 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local i64 @Ascent() #0 {
  %1 = alloca i64, align 8
  %2 = alloca ptr, align 8
  %3 = alloca i64, align 8
  %4 = alloca i64, align 8
  %5 = alloca i64, align 8
  %6 = alloca i64, align 8
  %7 = alloca i64, align 8
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca ptr, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %2) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %3) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %4) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #5
  store i64 2147483647, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #5
  br label %15

15:                                               ; preds = %261, %0
  %16 = load ptr, ptr @FirstNode, align 8, !tbaa !9
  store ptr %16, ptr %2, align 8, !tbaa !9
  br label %17

17:                                               ; preds = %22, %15
  %18 = load ptr, ptr %2, align 8, !tbaa !9
  %19 = getelementptr inbounds %struct.Node, ptr %18, i32 0, i32 10
  store i32 0, ptr %19, align 8, !tbaa !11
  %20 = load ptr, ptr %2, align 8, !tbaa !9
  %21 = getelementptr inbounds %struct.Node, ptr %20, i32 0, i32 9
  store i32 0, ptr %21, align 4, !tbaa !15
  br label %22

22:                                               ; preds = %17
  %23 = load ptr, ptr %2, align 8, !tbaa !9
  %24 = getelementptr inbounds %struct.Node, ptr %23, i32 0, i32 16
  %25 = load ptr, ptr %24, align 8, !tbaa !16
  store ptr %25, ptr %2, align 8, !tbaa !9
  %26 = load ptr, ptr @FirstNode, align 8, !tbaa !9
  %27 = icmp ne ptr %25, %26
  br i1 %27, label %17, label %28, !llvm.loop !17

28:                                               ; preds = %22
  %29 = load i32, ptr @CandidateSetType, align 4, !tbaa !19
  %30 = icmp eq i32 %29, 1
  br i1 %30, label %31, label %32

31:                                               ; preds = %28
  call void @CreateDelaunayCandidateSet()
  br label %33

32:                                               ; preds = %28
  call void @AddTourCandidates()
  br label %33

33:                                               ; preds = %32, %31
  %34 = load i32, ptr @CandidateSetType, align 4, !tbaa !19
  %35 = icmp eq i32 %34, 1
  br i1 %35, label %39, label %36

36:                                               ; preds = %33
  %37 = load i32, ptr @MaxCandidates, align 4, !tbaa !19
  %38 = icmp eq i32 %37, 0
  br label %39

39:                                               ; preds = %36, %33
  %40 = phi i1 [ true, %33 ], [ %38, %36 ]
  %41 = zext i1 %40 to i32
  %42 = call i64 @Minimum1TreeCost(i32 noundef %41)
  store i64 %42, ptr %4, align 8, !tbaa !5
  %43 = load i32, ptr @Subgradient, align 4, !tbaa !19
  %44 = icmp ne i32 %43, 0
  br i1 %44, label %45, label %48

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

48:                                               ; preds = %45, %39
  %49 = load i64, ptr %4, align 8, !tbaa !5
  store i64 %49, ptr %1, align 8
  store i32 1, ptr %13, align 4
  br label %444

50:                                               ; preds = %45
  %51 = load i64, ptr @Optimum, align 8, !tbaa !5
  %52 = icmp ne i64 %51, -9223372036854775808
  br i1 %52, label %53, label %63

53:                                               ; preds = %50
  %54 = load i64, ptr @Optimum, align 8, !tbaa !5
  %55 = load i32, ptr @Precision, align 4, !tbaa !19
  %56 = sext i32 %55 to i64
  %57 = mul nsw i64 %54, %56
  %58 = load i64, ptr %4, align 8, !tbaa !5
  %59 = sub nsw i64 %57, %58
  store i64 %59, ptr %6, align 8, !tbaa !5
  %60 = icmp sgt i64 %59, 0
  br i1 %60, label %61, label %63

61:                                               ; preds = %53
  %62 = load i64, ptr %6, align 8, !tbaa !5
  store i64 %62, ptr %7, align 8, !tbaa !5
  br label %63

63:                                               ; preds = %61, %53, %50
  %64 = load i32, ptr @MaxCandidates, align 4, !tbaa !19
  %65 = icmp sgt i32 %64, 0
  br i1 %65, label %66, label %89

66:                                               ; preds = %63
  %67 = load i32, ptr @CandidateSetType, align 4, !tbaa !19
  %68 = icmp ne i32 %67, 1
  br i1 %68, label %69, label %72

69:                                               ; preds = %66
  %70 = load i32, ptr @AscentCandidates, align 4, !tbaa !19
  %71 = load i64, ptr %7, align 8, !tbaa !5
  call void @GenerateCandidates(i32 noundef %70, i64 noundef %71, i32 noundef 1)
  br label %88

72:                                               ; preds = %66
  %73 = load i32, ptr @AscentCandidates, align 4, !tbaa !19
  %74 = load i64, ptr %7, align 8, !tbaa !5
  call void @OrderCandidateSet(i32 noundef %73, i64 noundef %74, i32 noundef 1)
  %75 = call i64 @Minimum1TreeCost(i32 noundef 1)
  store i64 %75, ptr %4, align 8, !tbaa !5
  %76 = load i32, ptr @Norm, align 4, !tbaa !19
  %77 = icmp ne i32 %76, 0
  br i1 %77, label %78, label %85

78:                                               ; preds = %72
  %79 = load i64, ptr %4, align 8, !tbaa !5
  %80 = load i32, ptr @Precision, align 4, !tbaa !19
  %81 = sext i32 %80 to i64
  %82 = sdiv i64 %79, %81
  %83 = load i64, ptr @Optimum, align 8, !tbaa !5
  %84 = icmp eq i64 %82, %83
  br i1 %84, label %85, label %87

85:                                               ; preds = %78, %72
  %86 = load i64, ptr %4, align 8, !tbaa !5
  store i64 %86, ptr %1, align 8
  store i32 1, ptr %13, align 4
  br label %444

87:                                               ; preds = %78
  br label %88

88:                                               ; preds = %87, %69
  br label %89

89:                                               ; preds = %88, %63
  %90 = load i32, ptr @ExtraCandidates, align 4, !tbaa !19
  %91 = icmp sgt i32 %90, 0
  br i1 %91, label %92, label %96

92:                                               ; preds = %89
  %93 = load i32, ptr @ExtraCandidates, align 4, !tbaa !19
  %94 = load i32, ptr @ExtraCandidateSetType, align 4, !tbaa !19
  %95 = load i32, ptr @ExtraCandidateSetSymmetric, align 4, !tbaa !19
  call void @AddExtraCandidates(i32 noundef %93, i32 noundef %94, i32 noundef %95)
  br label %96

96:                                               ; preds = %92, %89
  %97 = load i32, ptr @TraceLevel, align 4, !tbaa !19
  %98 = icmp sge i32 %97, 2
  br i1 %98, label %99, label %100

99:                                               ; preds = %96
  call void @CandidateReport()
  call void (ptr, ...) @printff(ptr noundef @.str)
  br label %100

100:                                              ; preds = %99, %96
  %101 = load ptr, ptr @FirstNode, align 8, !tbaa !9
  store ptr %101, ptr %2, align 8, !tbaa !9
  br label %102

102:                                              ; preds = %108, %100
  %103 = load ptr, ptr %2, align 8, !tbaa !9
  %104 = getelementptr inbounds %struct.Node, ptr %103, i32 0, i32 3
  %105 = load i32, ptr %104, align 4, !tbaa !20
  %106 = load ptr, ptr %2, align 8, !tbaa !9
  %107 = getelementptr inbounds %struct.Node, ptr %106, i32 0, i32 4
  store i32 %105, ptr %107, align 8, !tbaa !21
  br label %108

108:                                              ; preds = %102
  %109 = load ptr, ptr %2, align 8, !tbaa !9
  %110 = getelementptr inbounds %struct.Node, ptr %109, i32 0, i32 16
  %111 = load ptr, ptr %110, align 8, !tbaa !16
  store ptr %111, ptr %2, align 8, !tbaa !9
  %112 = load ptr, ptr @FirstNode, align 8, !tbaa !9
  %113 = icmp ne ptr %111, %112
  br i1 %113, label %102, label %114, !llvm.loop !22

114:                                              ; preds = %108
  %115 = load i64, ptr %4, align 8, !tbaa !5
  store i64 %115, ptr %5, align 8, !tbaa !5
  store i64 %115, ptr %3, align 8, !tbaa !5
  %116 = load i32, ptr @Norm, align 4, !tbaa !19
  store i32 %116, ptr %12, align 4, !tbaa !19
  store i32 1, ptr %11, align 4, !tbaa !19
  %117 = load i32, ptr @InitialPeriod, align 4, !tbaa !19
  store i32 %117, ptr %9, align 4, !tbaa !19
  %118 = load i32, ptr @InitialStepSize, align 4, !tbaa !19
  %119 = load i32, ptr @Precision, align 4, !tbaa !19
  %120 = mul nsw i32 %118, %119
  store i32 %120, ptr %8, align 4, !tbaa !19
  br label %121

121:                                              ; preds = %353, %114
  %122 = load i32, ptr %9, align 4, !tbaa !19
  %123 = icmp sgt i32 %122, 0
  br i1 %123, label %124, label %130

124:                                              ; preds = %121
  %125 = load i32, ptr %8, align 4, !tbaa !19
  %126 = icmp sgt i32 %125, 0
  br i1 %126, label %127, label %130

127:                                              ; preds = %124
  %128 = load i32, ptr @Norm, align 4, !tbaa !19
  %129 = icmp ne i32 %128, 0
  br label %130

130:                                              ; preds = %127, %124, %121
  %131 = phi i1 [ false, %124 ], [ false, %121 ], [ %129, %127 ]
  br i1 %131, label %132, label %358

132:                                              ; preds = %130
  %133 = load i32, ptr @TraceLevel, align 4, !tbaa !19
  %134 = icmp sge i32 %133, 2
  br i1 %134, label %135, label %144

135:                                              ; preds = %132
  %136 = load i32, ptr %8, align 4, !tbaa !19
  %137 = load i32, ptr %9, align 4, !tbaa !19
  %138 = load i64, ptr %3, align 8, !tbaa !5
  %139 = sitofp i64 %138 to double
  %140 = load i32, ptr @Precision, align 4, !tbaa !19
  %141 = sitofp i32 %140 to double
  %142 = fdiv double %139, %141
  %143 = load i32, ptr @Norm, align 4, !tbaa !19
  call void (ptr, ...) @printff(ptr noundef @.str.1, i32 noundef %136, i32 noundef %137, double noundef %142, i32 noundef %143)
  br label %144

144:                                              ; preds = %135, %132
  store i32 1, ptr %10, align 4, !tbaa !19
  br label %145

145:                                              ; preds = %349, %144
  %146 = load i32, ptr %8, align 4, !tbaa !19
  %147 = icmp ne i32 %146, 0
  br i1 %147, label %148, label %155

148:                                              ; preds = %145
  %149 = load i32, ptr %10, align 4, !tbaa !19
  %150 = load i32, ptr %9, align 4, !tbaa !19
  %151 = icmp sle i32 %149, %150
  br i1 %151, label %152, label %155

152:                                              ; preds = %148
  %153 = load i32, ptr @Norm, align 4, !tbaa !19
  %154 = icmp ne i32 %153, 0
  br label %155

155:                                              ; preds = %152, %148, %145
  %156 = phi i1 [ false, %148 ], [ false, %145 ], [ %154, %152 ]
  br i1 %156, label %157, label %352

157:                                              ; preds = %155
  %158 = load ptr, ptr @FirstNode, align 8, !tbaa !9
  store ptr %158, ptr %2, align 8, !tbaa !9
  br label %159

159:                                              ; preds = %204, %157
  %160 = load ptr, ptr %2, align 8, !tbaa !9
  %161 = getelementptr inbounds %struct.Node, ptr %160, i32 0, i32 3
  %162 = load i32, ptr %161, align 4, !tbaa !20
  %163 = icmp ne i32 %162, 0
  br i1 %163, label %164, label %198

164:                                              ; preds = %159
  %165 = load i32, ptr %8, align 4, !tbaa !19
  %166 = load ptr, ptr %2, align 8, !tbaa !9
  %167 = getelementptr inbounds %struct.Node, ptr %166, i32 0, i32 3
  %168 = load i32, ptr %167, align 4, !tbaa !20
  %169 = mul nsw i32 7, %168
  %170 = load ptr, ptr %2, align 8, !tbaa !9
  %171 = getelementptr inbounds %struct.Node, ptr %170, i32 0, i32 4
  %172 = load i32, ptr %171, align 8, !tbaa !21
  %173 = mul nsw i32 3, %172
  %174 = add nsw i32 %169, %173
  %175 = mul nsw i32 %165, %174
  %176 = sdiv i32 %175, 10
  %177 = load ptr, ptr %2, align 8, !tbaa !9
  %178 = getelementptr inbounds %struct.Node, ptr %177, i32 0, i32 9
  %179 = load i32, ptr %178, align 4, !tbaa !15
  %180 = add nsw i32 %179, %176
  store i32 %180, ptr %178, align 4, !tbaa !15
  %181 = load ptr, ptr %2, align 8, !tbaa !9
  %182 = getelementptr inbounds %struct.Node, ptr %181, i32 0, i32 9
  %183 = load i32, ptr %182, align 4, !tbaa !15
  %184 = icmp sgt i32 %183, 536870911
  br i1 %184, label %185, label %188

185:                                              ; preds = %164
  %186 = load ptr, ptr %2, align 8, !tbaa !9
  %187 = getelementptr inbounds %struct.Node, ptr %186, i32 0, i32 9
  store i32 536870911, ptr %187, align 4, !tbaa !15
  br label %197

188:                                              ; preds = %164
  %189 = load ptr, ptr %2, align 8, !tbaa !9
  %190 = getelementptr inbounds %struct.Node, ptr %189, i32 0, i32 9
  %191 = load i32, ptr %190, align 4, !tbaa !15
  %192 = icmp slt i32 %191, -536870911
  br i1 %192, label %193, label %196

193:                                              ; preds = %188
  %194 = load ptr, ptr %2, align 8, !tbaa !9
  %195 = getelementptr inbounds %struct.Node, ptr %194, i32 0, i32 9
  store i32 -536870911, ptr %195, align 4, !tbaa !15
  br label %196

196:                                              ; preds = %193, %188
  br label %197

197:                                              ; preds = %196, %185
  br label %198

198:                                              ; preds = %197, %159
  %199 = load ptr, ptr %2, align 8, !tbaa !9
  %200 = getelementptr inbounds %struct.Node, ptr %199, i32 0, i32 3
  %201 = load i32, ptr %200, align 4, !tbaa !20
  %202 = load ptr, ptr %2, align 8, !tbaa !9
  %203 = getelementptr inbounds %struct.Node, ptr %202, i32 0, i32 4
  store i32 %201, ptr %203, align 8, !tbaa !21
  br label %204

204:                                              ; preds = %198
  %205 = load ptr, ptr %2, align 8, !tbaa !9
  %206 = getelementptr inbounds %struct.Node, ptr %205, i32 0, i32 16
  %207 = load ptr, ptr %206, align 8, !tbaa !16
  store ptr %207, ptr %2, align 8, !tbaa !9
  %208 = load ptr, ptr @FirstNode, align 8, !tbaa !9
  %209 = icmp ne ptr %207, %208
  br i1 %209, label %159, label %210, !llvm.loop !23

210:                                              ; preds = %204
  %211 = call i64 @Minimum1TreeCost(i32 noundef 1)
  store i64 %211, ptr %4, align 8, !tbaa !5
  %212 = load i64, ptr %4, align 8, !tbaa !5
  %213 = load i64, ptr %3, align 8, !tbaa !5
  %214 = icmp sgt i64 %212, %213
  br i1 %214, label %223, label %215

215:                                              ; preds = %210
  %216 = load i64, ptr %4, align 8, !tbaa !5
  %217 = load i64, ptr %3, align 8, !tbaa !5
  %218 = icmp eq i64 %216, %217
  br i1 %218, label %219, label %322

219:                                              ; preds = %215
  %220 = load i32, ptr @Norm, align 4, !tbaa !19
  %221 = load i32, ptr %12, align 4, !tbaa !19
  %222 = icmp slt i32 %220, %221
  br i1 %222, label %223, label %322

223:                                              ; preds = %219, %210
  %224 = load i64, ptr %4, align 8, !tbaa !5
  %225 = load i64, ptr %5, align 8, !tbaa !5
  %226 = sub nsw i64 %224, %225
  %227 = load i64, ptr %5, align 8, !tbaa !5
  %228 = call i64 @llvm.abs.i64(i64 %227, i1 true)
  %229 = icmp sgt i64 %226, %228
  br i1 %229, label %230, label %264

230:                                              ; preds = %223
  %231 = load i32, ptr @AscentCandidates, align 4, !tbaa !19
  %232 = icmp sgt i32 %231, 0
  br i1 %232, label %233, label %264

233:                                              ; preds = %230
  %234 = load i32, ptr @AscentCandidates, align 4, !tbaa !19
  %235 = load i32, ptr @Dimension, align 4, !tbaa !19
  %236 = icmp slt i32 %234, %235
  br i1 %236, label %237, label %264

237:                                              ; preds = %233
  %238 = load i32, ptr @CandidateSetType, align 4, !tbaa !19
  %239 = icmp eq i32 %238, 1
  br i1 %239, label %243, label %240

240:                                              ; preds = %237
  %241 = load i32, ptr @MaxCandidates, align 4, !tbaa !19
  %242 = icmp eq i32 %241, 0
  br label %243

243:                                              ; preds = %240, %237
  %244 = phi i1 [ true, %237 ], [ %242, %240 ]
  %245 = zext i1 %244 to i32
  %246 = call i64 @Minimum1TreeCost(i32 noundef %245)
  store i64 %246, ptr %4, align 8, !tbaa !5
  %247 = load i64, ptr %4, align 8, !tbaa !5
  %248 = load i64, ptr %5, align 8, !tbaa !5
  %249 = icmp slt i64 %247, %248
  br i1 %249, label %250, label %262

250:                                              ; preds = %243
  %251 = load i32, ptr @TraceLevel, align 4, !tbaa !19
  %252 = icmp sge i32 %251, 2
  br i1 %252, label %253, label %254

253:                                              ; preds = %250
  call void (ptr, ...) @printff(ptr noundef @.str.2)
  br label %254

254:                                              ; preds = %253, %250
  %255 = load i32, ptr @AscentCandidates, align 4, !tbaa !19
  %256 = mul nsw i32 %255, 2
  store i32 %256, ptr @AscentCandidates, align 4, !tbaa !19
  %257 = load i32, ptr @Dimension, align 4, !tbaa !19
  %258 = icmp sgt i32 %256, %257
  br i1 %258, label %259, label %261

259:                                              ; preds = %254
  %260 = load i32, ptr @Dimension, align 4, !tbaa !19
  store i32 %260, ptr @AscentCandidates, align 4, !tbaa !19
  br label %261

261:                                              ; preds = %259, %254
  br label %15

262:                                              ; preds = %243
  %263 = load i64, ptr %4, align 8, !tbaa !5
  store i64 %263, ptr %5, align 8, !tbaa !5
  br label %264

264:                                              ; preds = %262, %233, %230, %223
  %265 = load i64, ptr %4, align 8, !tbaa !5
  store i64 %265, ptr %3, align 8, !tbaa !5
  %266 = load i32, ptr @Norm, align 4, !tbaa !19
  store i32 %266, ptr %12, align 4, !tbaa !19
  %267 = load ptr, ptr @FirstNode, align 8, !tbaa !9
  store ptr %267, ptr %2, align 8, !tbaa !9
  br label %268

268:                                              ; preds = %274, %264
  %269 = load ptr, ptr %2, align 8, !tbaa !9
  %270 = getelementptr inbounds %struct.Node, ptr %269, i32 0, i32 9
  %271 = load i32, ptr %270, align 4, !tbaa !15
  %272 = load ptr, ptr %2, align 8, !tbaa !9
  %273 = getelementptr inbounds %struct.Node, ptr %272, i32 0, i32 10
  store i32 %271, ptr %273, align 8, !tbaa !11
  br label %274

274:                                              ; preds = %268
  %275 = load ptr, ptr %2, align 8, !tbaa !9
  %276 = getelementptr inbounds %struct.Node, ptr %275, i32 0, i32 16
  %277 = load ptr, ptr %276, align 8, !tbaa !16
  store ptr %277, ptr %2, align 8, !tbaa !9
  %278 = load ptr, ptr @FirstNode, align 8, !tbaa !9
  %279 = icmp ne ptr %277, %278
  br i1 %279, label %268, label %280, !llvm.loop !24

280:                                              ; preds = %274
  %281 = load i32, ptr @TraceLevel, align 4, !tbaa !19
  %282 = icmp sge i32 %281, 2
  br i1 %282, label %283, label %293

283:                                              ; preds = %280
  %284 = load i32, ptr %8, align 4, !tbaa !19
  %285 = load i32, ptr %9, align 4, !tbaa !19
  %286 = load i32, ptr %10, align 4, !tbaa !19
  %287 = load i64, ptr %3, align 8, !tbaa !5
  %288 = sitofp i64 %287 to double
  %289 = load i32, ptr @Precision, align 4, !tbaa !19
  %290 = sitofp i32 %289 to double
  %291 = fdiv double %288, %290
  %292 = load i32, ptr @Norm, align 4, !tbaa !19
  call void (ptr, ...) @printff(ptr noundef @.str.3, i32 noundef %284, i32 noundef %285, i32 noundef %286, double noundef %291, i32 noundef %292)
  br label %293

293:                                              ; preds = %283, %280
  %294 = load i32, ptr %11, align 4, !tbaa !19
  %295 = icmp ne i32 %294, 0
  br i1 %295, label %296, label %307

296:                                              ; preds = %293
  %297 = load i32, ptr %8, align 4, !tbaa !19
  %298 = sitofp i32 %297 to double
  %299 = load i32, ptr @Norm, align 4, !tbaa !19
  %300 = sitofp i32 %299 to double
  %301 = call double @sqrt(double noundef %300) #5
  %302 = fmul double %298, %301
  %303 = fcmp ogt double %302, 0.000000e+00
  br i1 %303, label %304, label %307

304:                                              ; preds = %296
  %305 = load i32, ptr %8, align 4, !tbaa !19
  %306 = mul nsw i32 %305, 2
  store i32 %306, ptr %8, align 4, !tbaa !19
  br label %307

307:                                              ; preds = %304, %296, %293
  %308 = load i32, ptr @CandidateSetType, align 4, !tbaa !19
  %309 = icmp ne i32 %308, 1
  br i1 %309, label %310, label %321

310:                                              ; preds = %307
  %311 = load i32, ptr %10, align 4, !tbaa !19
  %312 = load i32, ptr %9, align 4, !tbaa !19
  %313 = icmp eq i32 %311, %312
  br i1 %313, label %314, label %321

314:                                              ; preds = %310
  %315 = load i32, ptr %9, align 4, !tbaa !19
  %316 = mul nsw i32 %315, 2
  store i32 %316, ptr %9, align 4, !tbaa !19
  %317 = load i32, ptr @InitialPeriod, align 4, !tbaa !19
  %318 = icmp sgt i32 %316, %317
  br i1 %318, label %319, label %321

319:                                              ; preds = %314
  %320 = load i32, ptr @InitialPeriod, align 4, !tbaa !19
  store i32 %320, ptr %9, align 4, !tbaa !19
  br label %321

321:                                              ; preds = %319, %314, %310, %307
  br label %348

322:                                              ; preds = %219, %215
  %323 = load i32, ptr @TraceLevel, align 4, !tbaa !19
  %324 = icmp sge i32 %323, 3
  br i1 %324, label %325, label %335

325:                                              ; preds = %322
  %326 = load i32, ptr %8, align 4, !tbaa !19
  %327 = load i32, ptr %9, align 4, !tbaa !19
  %328 = load i32, ptr %10, align 4, !tbaa !19
  %329 = load i64, ptr %4, align 8, !tbaa !5
  %330 = sitofp i64 %329 to double
  %331 = load i32, ptr @Precision, align 4, !tbaa !19
  %332 = sitofp i32 %331 to double
  %333 = fdiv double %330, %332
  %334 = load i32, ptr @Norm, align 4, !tbaa !19
  call void (ptr, ...) @printff(ptr noundef @.str.4, i32 noundef %326, i32 noundef %327, i32 noundef %328, double noundef %333, i32 noundef %334)
  br label %335

335:                                              ; preds = %325, %322
  %336 = load i32, ptr %11, align 4, !tbaa !19
  %337 = icmp ne i32 %336, 0
  br i1 %337, label %338, label %347

338:                                              ; preds = %335
  %339 = load i32, ptr %10, align 4, !tbaa !19
  %340 = load i32, ptr %9, align 4, !tbaa !19
  %341 = sdiv i32 %340, 2
  %342 = icmp sgt i32 %339, %341
  br i1 %342, label %343, label %347

343:                                              ; preds = %338
  store i32 0, ptr %11, align 4, !tbaa !19
  store i32 0, ptr %10, align 4, !tbaa !19
  %344 = load i32, ptr %8, align 4, !tbaa !19
  %345 = mul nsw i32 3, %344
  %346 = sdiv i32 %345, 4
  store i32 %346, ptr %8, align 4, !tbaa !19
  br label %347

347:                                              ; preds = %343, %338, %335
  br label %348

348:                                              ; preds = %347, %321
  br label %349

349:                                              ; preds = %348
  %350 = load i32, ptr %10, align 4, !tbaa !19
  %351 = add nsw i32 %350, 1
  store i32 %351, ptr %10, align 4, !tbaa !19
  br label %145, !llvm.loop !25

352:                                              ; preds = %155
  br label %353

353:                                              ; preds = %352
  %354 = load i32, ptr %9, align 4, !tbaa !19
  %355 = sdiv i32 %354, 2
  store i32 %355, ptr %9, align 4, !tbaa !19
  %356 = load i32, ptr %8, align 4, !tbaa !19
  %357 = sdiv i32 %356, 2
  store i32 %357, ptr %8, align 4, !tbaa !19
  br label %121, !llvm.loop !26

358:                                              ; preds = %130
  %359 = load ptr, ptr @FirstNode, align 8, !tbaa !9
  store ptr %359, ptr %2, align 8, !tbaa !9
  br label %360

360:                                              ; preds = %368, %358
  %361 = load ptr, ptr %2, align 8, !tbaa !9
  %362 = getelementptr inbounds %struct.Node, ptr %361, i32 0, i32 10
  %363 = load i32, ptr %362, align 8, !tbaa !11
  %364 = load ptr, ptr %2, align 8, !tbaa !9
  %365 = getelementptr inbounds %struct.Node, ptr %364, i32 0, i32 9
  store i32 %363, ptr %365, align 4, !tbaa !15
  %366 = load ptr, ptr %2, align 8, !tbaa !9
  %367 = getelementptr inbounds %struct.Node, ptr %366, i32 0, i32 10
  store i32 0, ptr %367, align 8, !tbaa !11
  br label %368

368:                                              ; preds = %360
  %369 = load ptr, ptr %2, align 8, !tbaa !9
  %370 = getelementptr inbounds %struct.Node, ptr %369, i32 0, i32 16
  %371 = load ptr, ptr %370, align 8, !tbaa !16
  store ptr %371, ptr %2, align 8, !tbaa !9
  %372 = load ptr, ptr @FirstNode, align 8, !tbaa !9
  %373 = icmp ne ptr %371, %372
  br i1 %373, label %360, label %374, !llvm.loop !27

374:                                              ; preds = %368
  %375 = load i32, ptr @CandidateSetType, align 4, !tbaa !19
  %376 = icmp eq i32 %375, 1
  br i1 %376, label %380, label %377

377:                                              ; preds = %374
  %378 = load i32, ptr @MaxCandidates, align 4, !tbaa !19
  %379 = icmp eq i32 %378, 0
  br label %380

380:                                              ; preds = %377, %374
  %381 = phi i1 [ true, %374 ], [ %379, %377 ]
  %382 = zext i1 %381 to i32
  %383 = call i64 @Minimum1TreeCost(i32 noundef %382)
  store i64 %383, ptr %3, align 8, !tbaa !5
  store i64 %383, ptr %4, align 8, !tbaa !5
  %384 = load i32, ptr @MaxCandidates, align 4, !tbaa !19
  %385 = icmp sgt i32 %384, 0
  br i1 %385, label %386, label %391

386:                                              ; preds = %380
  call void @FreeCandidateSets()
  %387 = load i32, ptr @CandidateSetType, align 4, !tbaa !19
  %388 = icmp eq i32 %387, 1
  br i1 %388, label %389, label %390

389:                                              ; preds = %386
  call void @CreateDelaunayCandidateSet()
  br label %390

390:                                              ; preds = %389, %386
  br label %432

391:                                              ; preds = %380
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #5
  %392 = load ptr, ptr @FirstNode, align 8, !tbaa !9
  store ptr %392, ptr %2, align 8, !tbaa !9
  br label %393

393:                                              ; preds = %425, %391
  %394 = load ptr, ptr %2, align 8, !tbaa !9
  %395 = getelementptr inbounds %struct.Node, ptr %394, i32 0, i32 43
  %396 = load ptr, ptr %395, align 8, !tbaa !28
  store ptr %396, ptr %14, align 8, !tbaa !9
  br label %397

397:                                              ; preds = %421, %393
  %398 = load ptr, ptr %14, align 8, !tbaa !9
  %399 = icmp ne ptr %398, null
  br i1 %399, label %400, label %405

400:                                              ; preds = %397
  %401 = load ptr, ptr %14, align 8, !tbaa !9
  %402 = getelementptr inbounds %struct.Candidate, ptr %401, i32 0, i32 0
  %403 = load ptr, ptr %402, align 8, !tbaa !29
  %404 = icmp ne ptr %403, null
  br label %405

405:                                              ; preds = %400, %397
  %406 = phi i1 [ false, %397 ], [ %404, %400 ]
  br i1 %406, label %407, label %424

407:                                              ; preds = %405
  %408 = load ptr, ptr %2, align 8, !tbaa !9
  %409 = getelementptr inbounds %struct.Node, ptr %408, i32 0, i32 9
  %410 = load i32, ptr %409, align 4, !tbaa !15
  %411 = load ptr, ptr %14, align 8, !tbaa !9
  %412 = getelementptr inbounds %struct.Candidate, ptr %411, i32 0, i32 0
  %413 = load ptr, ptr %412, align 8, !tbaa !29
  %414 = getelementptr inbounds %struct.Node, ptr %413, i32 0, i32 9
  %415 = load i32, ptr %414, align 4, !tbaa !15
  %416 = add nsw i32 %410, %415
  %417 = load ptr, ptr %14, align 8, !tbaa !9
  %418 = getelementptr inbounds %struct.Candidate, ptr %417, i32 0, i32 1
  %419 = load i32, ptr %418, align 8, !tbaa !31
  %420 = add nsw i32 %419, %416
  store i32 %420, ptr %418, align 8, !tbaa !31
  br label %421

421:                                              ; preds = %407
  %422 = load ptr, ptr %14, align 8, !tbaa !9
  %423 = getelementptr inbounds %struct.Candidate, ptr %422, i32 1
  store ptr %423, ptr %14, align 8, !tbaa !9
  br label %397, !llvm.loop !32

424:                                              ; preds = %405
  br label %425

425:                                              ; preds = %424
  %426 = load ptr, ptr %2, align 8, !tbaa !9
  %427 = getelementptr inbounds %struct.Node, ptr %426, i32 0, i32 16
  %428 = load ptr, ptr %427, align 8, !tbaa !16
  store ptr %428, ptr %2, align 8, !tbaa !9
  %429 = load ptr, ptr @FirstNode, align 8, !tbaa !9
  %430 = icmp ne ptr %428, %429
  br i1 %430, label %393, label %431, !llvm.loop !33

431:                                              ; preds = %425
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #5
  br label %432

432:                                              ; preds = %431, %390
  %433 = load i32, ptr @TraceLevel, align 4, !tbaa !19
  %434 = icmp sge i32 %433, 2
  br i1 %434, label %435, label %442

435:                                              ; preds = %432
  %436 = load i64, ptr %3, align 8, !tbaa !5
  %437 = sitofp i64 %436 to double
  %438 = load i32, ptr @Precision, align 4, !tbaa !19
  %439 = sitofp i32 %438 to double
  %440 = fdiv double %437, %439
  %441 = load i32, ptr @Norm, align 4, !tbaa !19
  call void (ptr, ...) @printff(ptr noundef @.str.5, double noundef %440, i32 noundef %441)
  br label %442

442:                                              ; preds = %435, %432
  %443 = load i64, ptr %4, align 8, !tbaa !5
  store i64 %443, ptr %1, align 8
  store i32 1, ptr %13, align 4
  br label %444

444:                                              ; preds = %442, %85, %48
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %3) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %2) #5
  %445 = load i64, ptr %1, align 8
  ret i64 %445
}

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

declare void @CreateDelaunayCandidateSet() #2

declare void @AddTourCandidates() #2

declare i64 @Minimum1TreeCost(i32 noundef) #2

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

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

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

declare void @CandidateReport() #2

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i64 @llvm.abs.i64(i64, i1 immarg) #3

; Function Attrs: nounwind
declare double @sqrt(double noundef) #4

declare void @FreeCandidateSets() #2

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

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { 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 = !{!"long long", !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, !13, i64 40}
!12 = !{!"Node", !13, i64 0, !13, i64 4, !13, i64 8, !13, i64 12, !13, i64 16, !13, i64 20, !13, i64 24, !13, i64 28, !13, i64 32, !13, i64 36, !13, i64 40, !13, i64 44, !13, i64 48, !13, 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}
!13 = !{!"int", !7, i64 0}
!14 = !{!"double", !7, i64 0}
!15 = !{!12, !13, i64 36}
!16 = !{!12, !10, i64 72}
!17 = distinct !{!17, !18}
!18 = !{!"llvm.loop.mustprogress"}
!19 = !{!13, !13, i64 0}
!20 = !{!12, !13, i64 12}
!21 = !{!12, !13, i64 16}
!22 = distinct !{!22, !18}
!23 = distinct !{!23, !18}
!24 = distinct !{!24, !18}
!25 = distinct !{!25, !18}
!26 = distinct !{!26, !18}
!27 = distinct !{!27, !18}
!28 = !{!12, !10, i64 288}
!29 = !{!30, !10, i64 0}
!30 = !{!"Candidate", !10, i64 0, !13, i64 8, !13, i64 12}
!31 = !{!30, !13, i64 8}
!32 = distinct !{!32, !18}
!33 = distinct !{!33, !18}


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

@FirstNode = external dso_local local_unnamed_addr global ptr, align 8
@CandidateSetType = external dso_local local_unnamed_addr global i32, align 4
@MaxCandidates = external dso_local local_unnamed_addr global i32, align 4
@Subgradient = external dso_local local_unnamed_addr global i32, align 4
@Norm = external dso_local local_unnamed_addr global i32, align 4
@Optimum = external dso_local local_unnamed_addr global i64, align 8
@Precision = external dso_local local_unnamed_addr global i32, align 4
@AscentCandidates = external dso_local local_unnamed_addr global i32, align 4
@ExtraCandidates = external dso_local local_unnamed_addr global i32, align 4
@ExtraCandidateSetType = external dso_local local_unnamed_addr global i32, align 4
@ExtraCandidateSetSymmetric = 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 [30 x i8], align 1
@InitialPeriod = external dso_local local_unnamed_addr global i32, align 4
@InitialStepSize = external dso_local local_unnamed_addr global i32, align 4
@.str.1 = external hidden unnamed_addr constant [49 x i8], align 1
@Dimension = external dso_local local_unnamed_addr global i32, align 4
@.str.2 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [57 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [34 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local i64 @Ascent() local_unnamed_addr #0 {
  br label %1

1:                                                ; preds = %136, %0
  %.0109 = phi i64 [ 2147483647, %0 ], [ %.1110, %136 ]
  %2 = load ptr, ptr @FirstNode, align 8, !tbaa !5
  br label %3

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

8:                                                ; preds = %3
  %9 = load i32, ptr @CandidateSetType, align 4, !tbaa !17
  %10 = icmp eq i32 %9, 1
  br i1 %10, label %11, label %12

11:                                               ; preds = %8
  tail call void @CreateDelaunayCandidateSet() #5
  br label %13

12:                                               ; preds = %8
  tail call void @AddTourCandidates() #5
  br label %13

13:                                               ; preds = %12, %11
  %14 = load i32, ptr @CandidateSetType, align 4, !tbaa !17
  %15 = icmp eq i32 %14, 1
  %16 = load i32, ptr @MaxCandidates, align 4
  %17 = icmp eq i32 %16, 0
  %18 = select i1 %15, i1 true, i1 %17
  %19 = zext i1 %18 to i32
  %20 = tail call i64 @Minimum1TreeCost(i32 noundef %19) #5
  %21 = load i32, ptr @Subgradient, align 4, !tbaa !17
  %22 = icmp ne i32 %21, 0
  %23 = load i32, ptr @Norm, align 4
  %24 = icmp ne i32 %23, 0
  %or.cond = select i1 %22, i1 %24, i1 false
  br i1 %or.cond, label %25, label %.loopexit161

25:                                               ; preds = %13
  %26 = load i64, ptr @Optimum, align 8, !tbaa !18
  %.not140 = icmp eq i64 %26, -9223372036854775808
  br i1 %.not140, label %33, label %27

27:                                               ; preds = %25
  %28 = load i32, ptr @Precision, align 4, !tbaa !17
  %29 = sext i32 %28 to i64
  %30 = mul nsw i64 %26, %29
  %31 = sub nsw i64 %30, %20
  %32 = icmp sgt i64 %31, 0
  %spec.select = select i1 %32, i64 %31, i64 %.0109
  br label %33

33:                                               ; preds = %27, %25
  %.1110 = phi i64 [ %.0109, %25 ], [ %spec.select, %27 ]
  %34 = load i32, ptr @MaxCandidates, align 4, !tbaa !17
  %35 = icmp sgt i32 %34, 0
  br i1 %35, label %36, label %49

36:                                               ; preds = %33
  %37 = load i32, ptr @CandidateSetType, align 4, !tbaa !17
  %.not141 = icmp eq i32 %37, 1
  %38 = load i32, ptr @AscentCandidates, align 4, !tbaa !17
  br i1 %.not141, label %40, label %39

39:                                               ; preds = %36
  tail call void @GenerateCandidates(i32 noundef %38, i64 noundef %.1110, i32 noundef 1) #5
  br label %49

40:                                               ; preds = %36
  tail call void @OrderCandidateSet(i32 noundef %38, i64 noundef %.1110, i32 noundef 1) #5
  %41 = tail call i64 @Minimum1TreeCost(i32 noundef 1) #5
  %42 = load i32, ptr @Norm, align 4, !tbaa !17
  %.not142 = icmp eq i32 %42, 0
  br i1 %.not142, label %.loopexit161, label %43

43:                                               ; preds = %40
  %44 = load i32, ptr @Precision, align 4, !tbaa !17
  %45 = sext i32 %44 to i64
  %46 = sdiv i64 %41, %45
  %47 = load i64, ptr @Optimum, align 8, !tbaa !18
  %48 = icmp eq i64 %46, %47
  br i1 %48, label %.loopexit161, label %49

49:                                               ; preds = %39, %43, %33
  %.0116 = phi i64 [ %20, %39 ], [ %41, %43 ], [ %20, %33 ]
  %50 = load i32, ptr @ExtraCandidates, align 4, !tbaa !17
  %51 = icmp sgt i32 %50, 0
  br i1 %51, label %52, label %55

52:                                               ; preds = %49
  %53 = load i32, ptr @ExtraCandidateSetType, align 4, !tbaa !17
  %54 = load i32, ptr @ExtraCandidateSetSymmetric, align 4, !tbaa !17
  tail call void @AddExtraCandidates(i32 noundef %50, i32 noundef %53, i32 noundef %54) #5
  br label %55

55:                                               ; preds = %52, %49
  %56 = load i32, ptr @TraceLevel, align 4, !tbaa !17
  %57 = icmp sgt i32 %56, 1
  br i1 %57, label %58, label %59

58:                                               ; preds = %55
  tail call void @CandidateReport() #5
  tail call void (ptr, ...) @printff(ptr noundef nonnull @.str) #5
  br label %59

59:                                               ; preds = %58, %55
  %60 = load ptr, ptr @FirstNode, align 8, !tbaa !5
  br label %61

61:                                               ; preds = %61, %59
  %.1122 = phi ptr [ %60, %59 ], [ %66, %61 ]
  %62 = getelementptr inbounds i8, ptr %.1122, i64 12
  %63 = load i32, ptr %62, align 4, !tbaa !20
  %64 = getelementptr inbounds i8, ptr %.1122, i64 16
  store i32 %63, ptr %64, align 8, !tbaa !21
  %65 = getelementptr inbounds i8, ptr %.1122, i64 72
  %66 = load ptr, ptr %65, align 8, !tbaa !14
  %.not143 = icmp eq ptr %66, %60
  br i1 %.not143, label %67, label %61, !llvm.loop !22

67:                                               ; preds = %61
  %68 = load i32, ptr @Norm, align 4
  %69 = load i32, ptr @InitialPeriod, align 4, !tbaa !17
  %70 = load i32, ptr @InitialStepSize, align 4, !tbaa !17
  %71 = load i32, ptr @Precision, align 4, !tbaa !17
  %72 = mul nsw i32 %71, %70
  %73 = icmp sgt i32 %69, 0
  %74 = icmp sgt i32 %72, 0
  %or.cond3177 = select i1 %73, i1 %74, i1 false
  %75 = icmp ne i32 %68, 0
  %or.cond11178 = select i1 %or.cond3177, i1 %75, i1 false
  br i1 %or.cond11178, label %.lr.ph, label %.critedge

.lr.ph:                                           ; preds = %67, %.critedge5
  %76 = phi i32 [ %189, %.critedge5 ], [ %68, %67 ]
  %.097184 = phi i32 [ %.1.lcssa, %.critedge5 ], [ %68, %67 ]
  %.098183 = phi i32 [ %.199.lcssa, %.critedge5 ], [ 1, %67 ]
  %.0103182 = phi i32 [ %190, %.critedge5 ], [ %69, %67 ]
  %.0106181 = phi i32 [ %191, %.critedge5 ], [ %72, %67 ]
  %.0112180 = phi i64 [ %.1113.lcssa, %.critedge5 ], [ %.0116, %67 ]
  %.0118179 = phi i64 [ %.1119.lcssa, %.critedge5 ], [ %.0116, %67 ]
  %77 = load i32, ptr @TraceLevel, align 4, !tbaa !17
  %78 = icmp sgt i32 %77, 1
  br i1 %78, label %79, label %.preheader

79:                                               ; preds = %.lr.ph
  %80 = sitofp i64 %.0118179 to double
  %81 = load i32, ptr @Precision, align 4, !tbaa !17
  %82 = sitofp i32 %81 to double
  %83 = fdiv double %80, %82
  tail call void (ptr, ...) @printff(ptr noundef nonnull @.str.1, i32 noundef %.0106181, i32 noundef %.0103182, double noundef %83, i32 noundef %76) #5
  br label %.preheader

.preheader:                                       ; preds = %79, %.lr.ph
  br label %84

84:                                               ; preds = %.preheader, %187
  %.1176 = phi i32 [ %.2, %187 ], [ %.097184, %.preheader ]
  %.199175 = phi i32 [ %.2100, %187 ], [ %.098183, %.preheader ]
  %.0101174 = phi i32 [ %188, %187 ], [ 1, %.preheader ]
  %.1104173 = phi i32 [ %.2105, %187 ], [ %.0103182, %.preheader ]
  %.1107172 = phi i32 [ %.3, %187 ], [ %.0106181, %.preheader ]
  %.1113171 = phi i64 [ %.3115, %187 ], [ %.0112180, %.preheader ]
  %.1119170 = phi i64 [ %.2120, %187 ], [ %.0118179, %.preheader ]
  %85 = icmp sle i32 %.0101174, %.1104173
  %86 = load i32, ptr @Norm, align 4
  %87 = icmp ne i32 %86, 0
  %or.cond13 = select i1 %85, i1 %87, i1 false
  br i1 %or.cond13, label %88, label %.critedge5

88:                                               ; preds = %84
  %89 = load ptr, ptr @FirstNode, align 8, !tbaa !5
  %factor.op.mul = mul i32 %.1107172, 7
  %factor.op.mul168 = mul i32 %.1107172, 3
  br label %90

90:                                               ; preds = %104, %88
  %.2123 = phi ptr [ %89, %88 ], [ %107, %104 ]
  %91 = getelementptr inbounds i8, ptr %.2123, i64 12
  %92 = load i32, ptr %91, align 4, !tbaa !20
  %.not149 = icmp eq i32 %92, 0
  br i1 %.not149, label %104, label %93

93:                                               ; preds = %90
  %.reass = mul i32 %92, %factor.op.mul
  %94 = getelementptr inbounds i8, ptr %.2123, i64 16
  %95 = load i32, ptr %94, align 8, !tbaa !21
  %.reass169 = mul i32 %95, %factor.op.mul168
  %96 = add i32 %.reass169, %.reass
  %97 = sdiv i32 %96, 10
  %98 = getelementptr inbounds i8, ptr %.2123, i64 36
  %99 = load i32, ptr %98, align 4, !tbaa !13
  %100 = add nsw i32 %97, %99
  store i32 %100, ptr %98, align 4, !tbaa !13
  %101 = icmp sgt i32 %100, 536870911
  br i1 %101, label %.sink.split, label %102

102:                                              ; preds = %93
  %103 = icmp slt i32 %100, -536870911
  br i1 %103, label %.sink.split, label %104

.sink.split:                                      ; preds = %102, %93
  %.sink = phi i32 [ 536870911, %93 ], [ -536870911, %102 ]
  store i32 %.sink, ptr %98, align 4, !tbaa !13
  br label %104

104:                                              ; preds = %.sink.split, %102, %90
  %105 = getelementptr inbounds i8, ptr %.2123, i64 16
  store i32 %92, ptr %105, align 8, !tbaa !21
  %106 = getelementptr inbounds i8, ptr %.2123, i64 72
  %107 = load ptr, ptr %106, align 8, !tbaa !14
  %.not150 = icmp eq ptr %107, %89
  br i1 %.not150, label %108, label %90, !llvm.loop !23

108:                                              ; preds = %104
  %109 = tail call i64 @Minimum1TreeCost(i32 noundef 1) #5
  %110 = icmp sgt i64 %109, %.1119170
  br i1 %110, label %115, label %111

111:                                              ; preds = %108
  %112 = icmp eq i64 %109, %.1119170
  %113 = load i32, ptr @Norm, align 4
  %114 = icmp slt i32 %113, %.1176
  %or.cond156 = select i1 %112, i1 %114, i1 false
  br i1 %or.cond156, label %115, label %173

115:                                              ; preds = %111, %108
  %116 = sub nsw i64 %109, %.1113171
  %117 = tail call i64 @llvm.abs.i64(i64 %.1113171, i1 true)
  %118 = icmp sgt i64 %116, %117
  %119 = load i32, ptr @AscentCandidates, align 4
  %120 = icmp sgt i32 %119, 0
  %or.cond7 = select i1 %118, i1 %120, i1 false
  %121 = load i32, ptr @Dimension, align 4
  %122 = icmp slt i32 %119, %121
  %or.cond158 = select i1 %or.cond7, i1 %122, i1 false
  br i1 %or.cond158, label %123, label %140

123:                                              ; preds = %115
  %124 = load i32, ptr @CandidateSetType, align 4, !tbaa !17
  %125 = icmp eq i32 %124, 1
  %126 = load i32, ptr @MaxCandidates, align 4
  %127 = icmp eq i32 %126, 0
  %128 = select i1 %125, i1 true, i1 %127
  %129 = zext i1 %128 to i32
  %130 = tail call i64 @Minimum1TreeCost(i32 noundef %129) #5
  %131 = icmp slt i64 %130, %.1113171
  br i1 %131, label %132, label %140

132:                                              ; preds = %123
  %133 = load i32, ptr @TraceLevel, align 4, !tbaa !17
  %134 = icmp sgt i32 %133, 1
  br i1 %134, label %135, label %136

135:                                              ; preds = %132
  tail call void (ptr, ...) @printff(ptr noundef nonnull @.str.2) #5
  br label %136

136:                                              ; preds = %135, %132
  %137 = load i32, ptr @AscentCandidates, align 4, !tbaa !17
  %138 = shl nsw i32 %137, 1
  %139 = load i32, ptr @Dimension, align 4, !tbaa !17
  %spec.store.select = tail call i32 @llvm.smin.i32(i32 %138, i32 %139)
  store i32 %spec.store.select, ptr @AscentCandidates, align 4
  br label %1

140:                                              ; preds = %123, %115
  %.1117 = phi i64 [ %109, %115 ], [ %130, %123 ]
  %.2114 = phi i64 [ %.1113171, %115 ], [ %130, %123 ]
  %141 = load i32, ptr @Norm, align 4
  %142 = load ptr, ptr @FirstNode, align 8, !tbaa !5
  br label %143

143:                                              ; preds = %143, %140
  %.3124 = phi ptr [ %142, %140 ], [ %148, %143 ]
  %144 = getelementptr inbounds i8, ptr %.3124, i64 36
  %145 = load i32, ptr %144, align 4, !tbaa !13
  %146 = getelementptr inbounds i8, ptr %.3124, i64 40
  store i32 %145, ptr %146, align 8, !tbaa !9
  %147 = getelementptr inbounds i8, ptr %.3124, i64 72
  %148 = load ptr, ptr %147, align 8, !tbaa !14
  %.not152 = icmp eq ptr %148, %142
  br i1 %.not152, label %149, label %143, !llvm.loop !24

149:                                              ; preds = %143
  %150 = load i32, ptr @TraceLevel, align 4, !tbaa !17
  %151 = icmp sgt i32 %150, 1
  br i1 %151, label %152, label %157

152:                                              ; preds = %149
  %153 = sitofp i64 %.1117 to double
  %154 = load i32, ptr @Precision, align 4, !tbaa !17
  %155 = sitofp i32 %154 to double
  %156 = fdiv double %153, %155
  tail call void (ptr, ...) @printff(ptr noundef nonnull @.str.3, i32 noundef %.1107172, i32 noundef %.1104173, i32 noundef %.0101174, double noundef %156, i32 noundef %141) #5
  br label %157

157:                                              ; preds = %152, %149
  %.not153 = icmp eq i32 %.199175, 0
  br i1 %.not153, label %167, label %158

158:                                              ; preds = %157
  %159 = uitofp nneg i32 %.1107172 to double
  %160 = load i32, ptr @Norm, align 4, !tbaa !17
  %161 = sitofp i32 %160 to double
  %162 = tail call double @sqrt(double noundef %161) #5
  %163 = fmul double %162, %159
  %164 = fcmp ogt double %163, 0.000000e+00
  br i1 %164, label %165, label %167

165:                                              ; preds = %158
  %166 = shl nuw nsw i32 %.1107172, 1
  br label %167

167:                                              ; preds = %165, %158, %157
  %.2108 = phi i32 [ %166, %165 ], [ %.1107172, %158 ], [ %.1107172, %157 ]
  %168 = load i32, ptr @CandidateSetType, align 4, !tbaa !17
  %.not154 = icmp ne i32 %168, 1
  %169 = icmp eq i32 %.0101174, %.1104173
  %or.cond159 = and i1 %.not154, %169
  br i1 %or.cond159, label %170, label %187

170:                                              ; preds = %167
  %171 = shl nsw i32 %.0101174, 1
  %172 = load i32, ptr @InitialPeriod, align 4, !tbaa !17
  %spec.select160 = tail call i32 @llvm.smin.i32(i32 %171, i32 %172)
  br label %187

173:                                              ; preds = %111
  %174 = load i32, ptr @TraceLevel, align 4, !tbaa !17
  %175 = icmp sgt i32 %174, 2
  br i1 %175, label %176, label %181

176:                                              ; preds = %173
  %177 = sitofp i64 %109 to double
  %178 = load i32, ptr @Precision, align 4, !tbaa !17
  %179 = sitofp i32 %178 to double
  %180 = fdiv double %177, %179
  tail call void (ptr, ...) @printff(ptr noundef nonnull @.str.4, i32 noundef %.1107172, i32 noundef %.1104173, i32 noundef %.0101174, double noundef %180, i32 noundef %113) #5
  br label %181

181:                                              ; preds = %176, %173
  %.not151 = icmp eq i32 %.199175, 0
  br i1 %.not151, label %187, label %182

182:                                              ; preds = %181
  %183 = sdiv i32 %.1104173, 2
  %184 = icmp sgt i32 %.0101174, %183
  br i1 %184, label %185, label %187

185:                                              ; preds = %182
  %186 = lshr i32 %factor.op.mul168, 2
  br label %187

187:                                              ; preds = %170, %167, %185, %182, %181
  %.2120 = phi i64 [ %.1117, %167 ], [ %.1119170, %185 ], [ %.1119170, %182 ], [ %.1119170, %181 ], [ %.1117, %170 ]
  %.3115 = phi i64 [ %.2114, %167 ], [ %.1113171, %185 ], [ %.1113171, %182 ], [ %.1113171, %181 ], [ %.2114, %170 ]
  %.3 = phi i32 [ %.2108, %167 ], [ %186, %185 ], [ %.1107172, %182 ], [ %.1107172, %181 ], [ %.2108, %170 ]
  %.2105 = phi i32 [ %.1104173, %167 ], [ %.1104173, %185 ], [ %.1104173, %182 ], [ %.1104173, %181 ], [ %spec.select160, %170 ]
  %.1102 = phi i32 [ %.0101174, %167 ], [ 0, %185 ], [ %.0101174, %182 ], [ %.0101174, %181 ], [ %.0101174, %170 ]
  %.2100 = phi i32 [ %.199175, %167 ], [ 0, %185 ], [ 1, %182 ], [ 0, %181 ], [ %.199175, %170 ]
  %.2 = phi i32 [ %141, %167 ], [ %.1176, %185 ], [ %.1176, %182 ], [ %.1176, %181 ], [ %141, %170 ]
  %188 = add nsw i32 %.1102, 1
  %.not148 = icmp eq i32 %.3, 0
  br i1 %.not148, label %..critedge5_crit_edge, label %84, !llvm.loop !25

..critedge5_crit_edge:                            ; preds = %187
  %.pre = load i32, ptr @Norm, align 4
  br label %.critedge5

.critedge5:                                       ; preds = %84, %..critedge5_crit_edge
  %189 = phi i32 [ %.pre, %..critedge5_crit_edge ], [ %86, %84 ]
  %.1119.lcssa = phi i64 [ %.2120, %..critedge5_crit_edge ], [ %.1119170, %84 ]
  %.1113.lcssa = phi i64 [ %.3115, %..critedge5_crit_edge ], [ %.1113171, %84 ]
  %.1107.lcssa = phi i32 [ 0, %..critedge5_crit_edge ], [ %.1107172, %84 ]
  %.1104.lcssa = phi i32 [ %.2105, %..critedge5_crit_edge ], [ %.1104173, %84 ]
  %.199.lcssa = phi i32 [ %.2100, %..critedge5_crit_edge ], [ %.199175, %84 ]
  %.1.lcssa = phi i32 [ %.2, %..critedge5_crit_edge ], [ %.1176, %84 ]
  %190 = lshr i32 %.1104.lcssa, 1
  %191 = lshr i32 %.1107.lcssa, 1
  %192 = icmp sgt i32 %.1104.lcssa, 1
  %193 = icmp ugt i32 %.1107.lcssa, 1
  %or.cond3 = select i1 %192, i1 %193, i1 false
  %194 = icmp ne i32 %189, 0
  %or.cond11 = select i1 %or.cond3, i1 %194, i1 false
  br i1 %or.cond11, label %.lr.ph, label %.critedge.loopexit, !llvm.loop !26

.critedge.loopexit:                               ; preds = %.critedge5
  %.pre191 = load ptr, ptr @FirstNode, align 8, !tbaa !5
  br label %.critedge

.critedge:                                        ; preds = %67, %.critedge.loopexit
  %195 = phi ptr [ %.pre191, %.critedge.loopexit ], [ %60, %67 ]
  br label %196

196:                                              ; preds = %196, %.critedge
  %.4 = phi ptr [ %195, %.critedge ], [ %201, %196 ]
  %197 = getelementptr inbounds i8, ptr %.4, i64 40
  %198 = load i32, ptr %197, align 8, !tbaa !9
  %199 = getelementptr inbounds i8, ptr %.4, i64 36
  store i32 %198, ptr %199, align 4, !tbaa !13
  store i32 0, ptr %197, align 8, !tbaa !9
  %200 = getelementptr inbounds i8, ptr %.4, i64 72
  %201 = load ptr, ptr %200, align 8, !tbaa !14
  %.not144 = icmp eq ptr %201, %195
  br i1 %.not144, label %202, label %196, !llvm.loop !27

202:                                              ; preds = %196
  %203 = load i32, ptr @CandidateSetType, align 4, !tbaa !17
  %204 = icmp eq i32 %203, 1
  %205 = load i32, ptr @MaxCandidates, align 4
  %206 = icmp eq i32 %205, 0
  %207 = select i1 %204, i1 true, i1 %206
  %208 = zext i1 %207 to i32
  %209 = tail call i64 @Minimum1TreeCost(i32 noundef %208) #5
  %210 = load i32, ptr @MaxCandidates, align 4, !tbaa !17
  %211 = icmp sgt i32 %210, 0
  br i1 %211, label %212, label %216

212:                                              ; preds = %202
  tail call void @FreeCandidateSets() #5
  %213 = load i32, ptr @CandidateSetType, align 4, !tbaa !17
  %214 = icmp eq i32 %213, 1
  br i1 %214, label %215, label %.loopexit

215:                                              ; preds = %212
  tail call void @CreateDelaunayCandidateSet() #5
  br label %.loopexit

216:                                              ; preds = %202
  %217 = load ptr, ptr @FirstNode, align 8, !tbaa !5
  br label %218

218:                                              ; preds = %.critedge9, %216
  %.5 = phi ptr [ %217, %216 ], [ %234, %.critedge9 ]
  %219 = getelementptr inbounds i8, ptr %.5, i64 288
  %220 = load ptr, ptr %219, align 8, !tbaa !28
  %.not145186 = icmp eq ptr %220, null
  br i1 %.not145186, label %.critedge9, label %.lr.ph188

.lr.ph188:                                        ; preds = %218
  %221 = getelementptr inbounds i8, ptr %.5, i64 36
  %222 = load ptr, ptr %220, align 8, !tbaa !29
  %.not146226 = icmp eq ptr %222, null
  br i1 %.not146226, label %.critedge9, label %.lr.ph228.preheader

.lr.ph228.preheader:                              ; preds = %.lr.ph188
  %223 = load i32, ptr %221, align 4, !tbaa !13
  br label %.lr.ph228

.lr.ph228:                                        ; preds = %.lr.ph228.preheader, %.lr.ph228
  %224 = phi ptr [ %232, %.lr.ph228 ], [ %222, %.lr.ph228.preheader ]
  %.0187227 = phi ptr [ %231, %.lr.ph228 ], [ %220, %.lr.ph228.preheader ]
  %225 = getelementptr inbounds i8, ptr %224, i64 36
  %226 = load i32, ptr %225, align 4, !tbaa !13
  %227 = add nsw i32 %226, %223
  %228 = getelementptr inbounds i8, ptr %.0187227, i64 8
  %229 = load i32, ptr %228, align 8, !tbaa !31
  %230 = add nsw i32 %227, %229
  store i32 %230, ptr %228, align 8, !tbaa !31
  %231 = getelementptr inbounds i8, ptr %.0187227, i64 16
  %232 = load ptr, ptr %231, align 8, !tbaa !29
  %.not146 = icmp eq ptr %232, null
  br i1 %.not146, label %.critedge9, label %.lr.ph228, !llvm.loop !32

.critedge9:                                       ; preds = %.lr.ph228, %.lr.ph188, %218
  %233 = getelementptr inbounds i8, ptr %.5, i64 72
  %234 = load ptr, ptr %233, align 8, !tbaa !14
  %.not147 = icmp eq ptr %234, %217
  br i1 %.not147, label %.loopexit, label %218, !llvm.loop !33

.loopexit:                                        ; preds = %.critedge9, %212, %215
  %235 = load i32, ptr @TraceLevel, align 4, !tbaa !17
  %236 = icmp sgt i32 %235, 1
  br i1 %236, label %237, label %.loopexit161

237:                                              ; preds = %.loopexit
  %238 = sitofp i64 %209 to double
  %239 = load i32, ptr @Precision, align 4, !tbaa !17
  %240 = sitofp i32 %239 to double
  %241 = fdiv double %238, %240
  %242 = load i32, ptr @Norm, align 4, !tbaa !17
  tail call void (ptr, ...) @printff(ptr noundef nonnull @.str.5, double noundef %241, i32 noundef %242) #5
  br label %.loopexit161

.loopexit161:                                     ; preds = %40, %43, %13, %.loopexit, %237
  %.0111 = phi i64 [ %209, %237 ], [ %209, %.loopexit ], [ %41, %40 ], [ %41, %43 ], [ %20, %13 ]
  ret i64 %.0111
}

declare void @CreateDelaunayCandidateSet() local_unnamed_addr #1

declare void @AddTourCandidates() local_unnamed_addr #1

declare i64 @Minimum1TreeCost(i32 noundef) local_unnamed_addr #1

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

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

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

declare void @CandidateReport() local_unnamed_addr #1

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

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i64 @llvm.abs.i64(i64, i1 immarg) #2

; Function Attrs: mustprogress nofree nounwind willreturn memory(write)
declare double @sqrt(double noundef) local_unnamed_addr #3

declare void @FreeCandidateSets() local_unnamed_addr #1

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.smin.i32(i32, i32) #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 = { mustprogress nofree nounwind willreturn memory(write) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
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, !11, i64 40}
!10 = !{!"Node", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !11, i64 16, !11, i64 20, !11, i64 24, !11, i64 28, !11, i64 32, !11, i64 36, !11, i64 40, !11, i64 44, !11, i64 48, !11, i64 52, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !6, i64 104, !6, i64 112, !6, i64 120, !6, i64 128, !6, i64 136, !6, i64 144, !6, i64 152, !6, i64 160, !6, i64 168, !6, i64 176, !6, i64 184, !6, i64 192, !6, i64 200, !6, i64 208, !6, i64 216, !6, i64 224, !6, i64 232, !6, i64 240, !6, i64 248, !6, i64 256, !6, i64 264, !6, i64 272, !6, i64 280, !6, i64 288, !6, i64 296, !6, i64 304, !12, i64 312, !12, i64 320, !12, i64 328, !12, i64 336, !12, i64 344, !12, i64 352, !7, i64 360, !7, i64 361, !7, i64 362}
!11 = !{!"int", !7, i64 0}
!12 = !{!"double", !7, i64 0}
!13 = !{!10, !11, i64 36}
!14 = !{!10, !6, i64 72}
!15 = distinct !{!15, !16}
!16 = !{!"llvm.loop.mustprogress"}
!17 = !{!11, !11, i64 0}
!18 = !{!19, !19, i64 0}
!19 = !{!"long long", !7, i64 0}
!20 = !{!10, !11, i64 12}
!21 = !{!10, !11, i64 16}
!22 = distinct !{!22, !16}
!23 = distinct !{!23, !16}
!24 = distinct !{!24, !16}
!25 = distinct !{!25, !16}
!26 = distinct !{!26, !16}
!27 = distinct !{!27, !16}
!28 = !{!10, !6, i64 288}
!29 = !{!30, !6, i64 0}
!30 = !{!"Candidate", !6, i64 0, !11, i64 8, !11, i64 12}
!31 = !{!30, !11, i64 8}
!32 = distinct !{!32, !16}
!33 = distinct !{!33, !16}


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