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

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

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

@TraceLevel = external dso_local global i32, align 4
@.str = external hidden unnamed_addr constant [25 x i8], align 1
@FirstNode = external dso_local global ptr, align 8
@DelaunayPure = external dso_local global i32, align 4
@D = external dso_local global ptr, align 8
@.str.1 = external hidden unnamed_addr constant [6 x i8], align 1

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

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

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

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

26:                                               ; preds = %23, %20
  store i64 2147483647, ptr %5, align 8, !tbaa !9
  br label %27

27:                                               ; preds = %26, %23
  %28 = load i32, ptr %4, align 4, !tbaa !5
  %29 = icmp sgt i32 %28, 0
  br i1 %29, label %30, label %74

30:                                               ; preds = %27
  %31 = load ptr, ptr @FirstNode, align 8, !tbaa !11
  store ptr %31, ptr %7, align 8, !tbaa !11
  br label %32

32:                                               ; preds = %51, %30
  %33 = load ptr, ptr %7, align 8, !tbaa !11
  %34 = getelementptr inbounds %struct.Node, ptr %33, i32 0, i32 21
  %35 = load ptr, ptr %34, align 8, !tbaa !13
  store ptr %35, ptr %8, align 8, !tbaa !11
  %36 = icmp ne ptr %35, null
  br i1 %36, label %37, label %50

37:                                               ; preds = %32
  %38 = load ptr, ptr %7, align 8, !tbaa !11
  %39 = load ptr, ptr %8, align 8, !tbaa !11
  %40 = load ptr, ptr %7, align 8, !tbaa !11
  %41 = getelementptr inbounds %struct.Node, ptr %40, i32 0, i32 5
  %42 = load i32, ptr %41, align 4, !tbaa !16
  %43 = call i32 @AddCandidate(ptr noundef %38, ptr noundef %39, i32 noundef %42, i32 noundef 0)
  %44 = load ptr, ptr %8, align 8, !tbaa !11
  %45 = load ptr, ptr %7, align 8, !tbaa !11
  %46 = load ptr, ptr %7, align 8, !tbaa !11
  %47 = getelementptr inbounds %struct.Node, ptr %46, i32 0, i32 5
  %48 = load i32, ptr %47, align 4, !tbaa !16
  %49 = call i32 @AddCandidate(ptr noundef %44, ptr noundef %45, i32 noundef %48, i32 noundef 0)
  br label %50

50:                                               ; preds = %37, %32
  br label %51

51:                                               ; preds = %50
  %52 = load ptr, ptr %7, align 8, !tbaa !11
  %53 = getelementptr inbounds %struct.Node, ptr %52, i32 0, i32 16
  %54 = load ptr, ptr %53, align 8, !tbaa !17
  store ptr %54, ptr %7, align 8, !tbaa !11
  %55 = load ptr, ptr @FirstNode, align 8, !tbaa !11
  %56 = icmp ne ptr %54, %55
  br i1 %56, label %32, label %57, !llvm.loop !18

57:                                               ; preds = %51
  %58 = load ptr, ptr @FirstNode, align 8, !tbaa !11
  %59 = load ptr, ptr @FirstNode, align 8, !tbaa !11
  %60 = getelementptr inbounds %struct.Node, ptr %59, i32 0, i32 23
  %61 = load ptr, ptr %60, align 8, !tbaa !20
  %62 = load ptr, ptr @FirstNode, align 8, !tbaa !11
  %63 = getelementptr inbounds %struct.Node, ptr %62, i32 0, i32 6
  %64 = load i32, ptr %63, align 8, !tbaa !21
  %65 = call i32 @AddCandidate(ptr noundef %58, ptr noundef %61, i32 noundef %64, i32 noundef 0)
  %66 = load ptr, ptr @FirstNode, align 8, !tbaa !11
  %67 = getelementptr inbounds %struct.Node, ptr %66, i32 0, i32 23
  %68 = load ptr, ptr %67, align 8, !tbaa !20
  %69 = load ptr, ptr @FirstNode, align 8, !tbaa !11
  %70 = load ptr, ptr @FirstNode, align 8, !tbaa !11
  %71 = getelementptr inbounds %struct.Node, ptr %70, i32 0, i32 6
  %72 = load i32, ptr %71, align 8, !tbaa !21
  %73 = call i32 @AddCandidate(ptr noundef %68, ptr noundef %69, i32 noundef %72, i32 noundef 0)
  br label %74

74:                                               ; preds = %57, %27
  %75 = load ptr, ptr @FirstNode, align 8, !tbaa !11
  store ptr %75, ptr %7, align 8, !tbaa !11
  br label %76

76:                                               ; preds = %81, %74
  %77 = load ptr, ptr %7, align 8, !tbaa !11
  %78 = getelementptr inbounds %struct.Node, ptr %77, i32 0, i32 54
  store i8 0, ptr %78, align 2, !tbaa !22
  %79 = load ptr, ptr %7, align 8, !tbaa !11
  %80 = getelementptr inbounds %struct.Node, ptr %79, i32 0, i32 13
  store i32 0, ptr %80, align 4, !tbaa !23
  br label %81

81:                                               ; preds = %76
  %82 = load ptr, ptr %7, align 8, !tbaa !11
  %83 = getelementptr inbounds %struct.Node, ptr %82, i32 0, i32 16
  %84 = load ptr, ptr %83, align 8, !tbaa !17
  store ptr %84, ptr %7, align 8, !tbaa !11
  %85 = load ptr, ptr @FirstNode, align 8, !tbaa !11
  %86 = icmp ne ptr %84, %85
  br i1 %86, label %76, label %87, !llvm.loop !24

87:                                               ; preds = %81
  %88 = load ptr, ptr @FirstNode, align 8, !tbaa !11
  %89 = getelementptr inbounds %struct.Node, ptr %88, i32 0, i32 16
  %90 = load ptr, ptr %89, align 8, !tbaa !17
  store ptr %90, ptr %7, align 8, !tbaa !11
  %91 = load ptr, ptr %7, align 8, !tbaa !11
  %92 = getelementptr inbounds %struct.Node, ptr %91, i32 0, i32 3
  store i32 0, ptr %92, align 4, !tbaa !25
  %93 = load ptr, ptr %7, align 8, !tbaa !11
  %94 = load ptr, ptr %7, align 8, !tbaa !11
  %95 = getelementptr inbounds %struct.Node, ptr %94, i32 0, i32 18
  store ptr %93, ptr %95, align 8, !tbaa !26
  %96 = load ptr, ptr %7, align 8, !tbaa !11
  %97 = getelementptr inbounds %struct.Node, ptr %96, i32 0, i32 17
  store ptr %93, ptr %97, align 8, !tbaa !27
  %98 = load ptr, ptr %7, align 8, !tbaa !11
  %99 = getelementptr inbounds %struct.Node, ptr %98, i32 0, i32 11
  store i32 -2147483648, ptr %99, align 4, !tbaa !28
  %100 = load ptr, ptr %7, align 8, !tbaa !11
  %101 = getelementptr inbounds %struct.Node, ptr %100, i32 0, i32 16
  %102 = load ptr, ptr %101, align 8, !tbaa !17
  store ptr %102, ptr %7, align 8, !tbaa !11
  br label %103

103:                                              ; preds = %147, %87
  %104 = load ptr, ptr %7, align 8, !tbaa !11
  %105 = getelementptr inbounds %struct.Node, ptr %104, i32 0, i32 21
  %106 = load ptr, ptr %105, align 8, !tbaa !13
  store ptr %106, ptr %8, align 8, !tbaa !11
  %107 = load ptr, ptr %7, align 8, !tbaa !11
  %108 = getelementptr inbounds %struct.Node, ptr %107, i32 0, i32 17
  store ptr %106, ptr %108, align 8, !tbaa !27
  %109 = load ptr, ptr %7, align 8, !tbaa !11
  %110 = getelementptr inbounds %struct.Node, ptr %109, i32 0, i32 26
  %111 = load ptr, ptr %110, align 8, !tbaa !29
  %112 = load ptr, ptr %8, align 8, !tbaa !11
  %113 = icmp eq ptr %111, %112
  br i1 %113, label %129, label %114

114:                                              ; preds = %103
  %115 = load ptr, ptr %7, align 8, !tbaa !11
  %116 = getelementptr inbounds %struct.Node, ptr %115, i32 0, i32 27
  %117 = load ptr, ptr %116, align 8, !tbaa !30
  %118 = load ptr, ptr %8, align 8, !tbaa !11
  %119 = icmp eq ptr %117, %118
  br i1 %119, label %129, label %120

120:                                              ; preds = %114
  %121 = load ptr, ptr %7, align 8, !tbaa !11
  %122 = load ptr, ptr %8, align 8, !tbaa !11
  %123 = call i32 @IsCommonEdge(ptr noundef %121, ptr noundef %122)
  %124 = icmp ne i32 %123, 0
  br i1 %124, label %129, label %125

125:                                              ; preds = %120
  %126 = load ptr, ptr %7, align 8, !tbaa !11
  %127 = getelementptr inbounds %struct.Node, ptr %126, i32 0, i32 5
  %128 = load i32, ptr %127, align 4, !tbaa !16
  br label %130

129:                                              ; preds = %120, %114, %103
  br label %130

130:                                              ; preds = %129, %125
  %131 = phi i32 [ %128, %125 ], [ -2147483648, %129 ]
  %132 = load ptr, ptr %7, align 8, !tbaa !11
  %133 = getelementptr inbounds %struct.Node, ptr %132, i32 0, i32 11
  store i32 %131, ptr %133, align 4, !tbaa !28
  %134 = load ptr, ptr %8, align 8, !tbaa !11
  %135 = getelementptr inbounds %struct.Node, ptr %134, i32 0, i32 3
  %136 = load i32, ptr %135, align 4, !tbaa !25
  %137 = add nsw i32 %136, 1
  %138 = load ptr, ptr %7, align 8, !tbaa !11
  %139 = getelementptr inbounds %struct.Node, ptr %138, i32 0, i32 3
  store i32 %137, ptr %139, align 4, !tbaa !25
  %140 = load ptr, ptr %8, align 8, !tbaa !11
  %141 = getelementptr inbounds %struct.Node, ptr %140, i32 0, i32 13
  %142 = load i32, ptr %141, align 4, !tbaa !23
  %143 = add nsw i32 %142, 1
  store i32 %143, ptr %141, align 4, !tbaa !23
  %144 = load ptr, ptr %7, align 8, !tbaa !11
  %145 = load ptr, ptr %7, align 8, !tbaa !11
  %146 = getelementptr inbounds %struct.Node, ptr %145, i32 0, i32 18
  store ptr %144, ptr %146, align 8, !tbaa !26
  br label %147

147:                                              ; preds = %130
  %148 = load ptr, ptr %7, align 8, !tbaa !11
  %149 = getelementptr inbounds %struct.Node, ptr %148, i32 0, i32 16
  %150 = load ptr, ptr %149, align 8, !tbaa !17
  store ptr %150, ptr %7, align 8, !tbaa !11
  %151 = load ptr, ptr @FirstNode, align 8, !tbaa !11
  %152 = icmp ne ptr %150, %151
  br i1 %152, label %103, label %153, !llvm.loop !31

153:                                              ; preds = %147
  %154 = load ptr, ptr @FirstNode, align 8, !tbaa !11
  %155 = getelementptr inbounds %struct.Node, ptr %154, i32 0, i32 16
  %156 = load ptr, ptr %155, align 8, !tbaa !17
  %157 = getelementptr inbounds %struct.Node, ptr %156, i32 0, i32 16
  %158 = load ptr, ptr %157, align 8, !tbaa !17
  store ptr %158, ptr %7, align 8, !tbaa !11
  br label %159

159:                                              ; preds = %188, %153
  %160 = load ptr, ptr %7, align 8, !tbaa !11
  %161 = getelementptr inbounds %struct.Node, ptr %160, i32 0, i32 21
  %162 = load ptr, ptr %161, align 8, !tbaa !13
  store ptr %162, ptr %8, align 8, !tbaa !11
  %163 = load ptr, ptr %8, align 8, !tbaa !11
  %164 = getelementptr inbounds %struct.Node, ptr %163, i32 0, i32 13
  %165 = load i32, ptr %164, align 4, !tbaa !23
  %166 = icmp eq i32 %165, 1
  br i1 %166, label %167, label %187

167:                                              ; preds = %159
  %168 = load ptr, ptr %8, align 8, !tbaa !11
  %169 = getelementptr inbounds %struct.Node, ptr %168, i32 0, i32 11
  %170 = load i32, ptr %169, align 4, !tbaa !28
  %171 = load ptr, ptr %7, align 8, !tbaa !11
  %172 = getelementptr inbounds %struct.Node, ptr %171, i32 0, i32 11
  %173 = load i32, ptr %172, align 4, !tbaa !28
  %174 = call i32 @max(i32 noundef %170, i32 noundef %173)
  %175 = load ptr, ptr %7, align 8, !tbaa !11
  %176 = getelementptr inbounds %struct.Node, ptr %175, i32 0, i32 11
  store i32 %174, ptr %176, align 4, !tbaa !28
  %177 = load ptr, ptr %8, align 8, !tbaa !11
  %178 = getelementptr inbounds %struct.Node, ptr %177, i32 0, i32 17
  %179 = load ptr, ptr %178, align 8, !tbaa !27
  %180 = load ptr, ptr %7, align 8, !tbaa !11
  %181 = getelementptr inbounds %struct.Node, ptr %180, i32 0, i32 17
  store ptr %179, ptr %181, align 8, !tbaa !27
  %182 = load ptr, ptr %8, align 8, !tbaa !11
  %183 = getelementptr inbounds %struct.Node, ptr %182, i32 0, i32 18
  %184 = load ptr, ptr %183, align 8, !tbaa !26
  %185 = load ptr, ptr %7, align 8, !tbaa !11
  %186 = getelementptr inbounds %struct.Node, ptr %185, i32 0, i32 18
  store ptr %184, ptr %186, align 8, !tbaa !26
  br label %187

187:                                              ; preds = %167, %159
  br label %188

188:                                              ; preds = %187
  %189 = load ptr, ptr %7, align 8, !tbaa !11
  %190 = getelementptr inbounds %struct.Node, ptr %189, i32 0, i32 16
  %191 = load ptr, ptr %190, align 8, !tbaa !17
  store ptr %191, ptr %7, align 8, !tbaa !11
  %192 = load ptr, ptr @FirstNode, align 8, !tbaa !11
  %193 = icmp ne ptr %191, %192
  br i1 %193, label %159, label %194, !llvm.loop !32

194:                                              ; preds = %188
  br label %195

195:                                              ; preds = %304, %194
  %196 = load ptr, ptr %7, align 8, !tbaa !11
  %197 = getelementptr inbounds %struct.Node, ptr %196, i32 0, i32 43
  %198 = load ptr, ptr %197, align 8, !tbaa !33
  store ptr %198, ptr %10, align 8, !tbaa !11
  br label %199

199:                                              ; preds = %298, %195
  %200 = load ptr, ptr %10, align 8, !tbaa !11
  %201 = icmp ne ptr %200, null
  br i1 %201, label %202, label %207

202:                                              ; preds = %199
  %203 = load ptr, ptr %10, align 8, !tbaa !11
  %204 = getelementptr inbounds %struct.Candidate, ptr %203, i32 0, i32 0
  %205 = load ptr, ptr %204, align 8, !tbaa !34
  store ptr %205, ptr %8, align 8, !tbaa !11
  %206 = icmp ne ptr %205, null
  br label %207

207:                                              ; preds = %202, %199
  %208 = phi i1 [ false, %199 ], [ %206, %202 ]
  br i1 %208, label %209, label %301

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

215:                                              ; preds = %209
  %216 = load ptr, ptr %7, align 8, !tbaa !11
  %217 = getelementptr inbounds %struct.Node, ptr %216, i32 0, i32 27
  %218 = load ptr, ptr %217, align 8, !tbaa !30
  %219 = load ptr, ptr %8, align 8, !tbaa !11
  %220 = icmp eq ptr %218, %219
  br i1 %220, label %226, label %221

221:                                              ; preds = %215
  %222 = load ptr, ptr %7, align 8, !tbaa !11
  %223 = load ptr, ptr %8, align 8, !tbaa !11
  %224 = call i32 @IsCommonEdge(ptr noundef %222, ptr noundef %223)
  %225 = icmp ne i32 %224, 0
  br i1 %225, label %226, label %229

226:                                              ; preds = %221, %215, %209
  %227 = load ptr, ptr %10, align 8, !tbaa !11
  %228 = getelementptr inbounds %struct.Candidate, ptr %227, i32 0, i32 2
  store i32 -2147483648, ptr %228, align 4, !tbaa !36
  br label %297

229:                                              ; preds = %221
  %230 = load ptr, ptr %7, align 8, !tbaa !11
  %231 = getelementptr inbounds %struct.Node, ptr %230, i32 0, i32 27
  %232 = load ptr, ptr %231, align 8, !tbaa !30
  %233 = icmp ne ptr %232, null
  br i1 %233, label %244, label %234

234:                                              ; preds = %229
  %235 = load ptr, ptr %8, align 8, !tbaa !11
  %236 = getelementptr inbounds %struct.Node, ptr %235, i32 0, i32 27
  %237 = load ptr, ptr %236, align 8, !tbaa !30
  %238 = icmp ne ptr %237, null
  br i1 %238, label %244, label %239

239:                                              ; preds = %234
  %240 = load ptr, ptr %7, align 8, !tbaa !11
  %241 = load ptr, ptr %8, align 8, !tbaa !11
  %242 = call i32 @Forbidden(ptr noundef %240, ptr noundef %241)
  %243 = icmp ne i32 %242, 0
  br i1 %243, label %244, label %247

244:                                              ; preds = %239, %234, %229
  %245 = load ptr, ptr %10, align 8, !tbaa !11
  %246 = getelementptr inbounds %struct.Candidate, ptr %245, i32 0, i32 2
  store i32 2147483647, ptr %246, align 4, !tbaa !36
  br label %296

247:                                              ; preds = %239
  %248 = load ptr, ptr %8, align 8, !tbaa !11
  %249 = getelementptr inbounds %struct.Node, ptr %248, i32 0, i32 54
  %250 = load i8, ptr %249, align 2, !tbaa !22
  %251 = sext i8 %250 to i32
  %252 = icmp ne i32 %251, 0
  br i1 %252, label %253, label %264

253:                                              ; preds = %247
  %254 = load ptr, ptr %8, align 8, !tbaa !11
  %255 = load ptr, ptr %7, align 8, !tbaa !11
  %256 = call ptr @FindCandidate(ptr noundef %254, ptr noundef %255)
  store ptr %256, ptr %11, align 8, !tbaa !11
  %257 = icmp ne ptr %256, null
  br i1 %257, label %258, label %264

258:                                              ; preds = %253
  %259 = load ptr, ptr %11, align 8, !tbaa !11
  %260 = getelementptr inbounds %struct.Candidate, ptr %259, i32 0, i32 2
  %261 = load i32, ptr %260, align 4, !tbaa !36
  %262 = load ptr, ptr %10, align 8, !tbaa !11
  %263 = getelementptr inbounds %struct.Candidate, ptr %262, i32 0, i32 2
  store i32 %261, ptr %263, align 4, !tbaa !36
  br label %295

264:                                              ; preds = %253, %247
  %265 = load ptr, ptr %7, align 8, !tbaa !11
  %266 = load ptr, ptr %8, align 8, !tbaa !11
  %267 = call i32 @BetaValue(ptr noundef %265, ptr noundef %266)
  store i32 %267, ptr %13, align 4, !tbaa !5
  %268 = load i32, ptr %13, align 4, !tbaa !5
  %269 = icmp ne i32 %268, -2147483648
  br i1 %269, label %270, label %277

270:                                              ; preds = %264
  %271 = load ptr, ptr %10, align 8, !tbaa !11
  %272 = getelementptr inbounds %struct.Candidate, ptr %271, i32 0, i32 1
  %273 = load i32, ptr %272, align 8, !tbaa !37
  %274 = load i32, ptr %13, align 4, !tbaa !5
  %275 = sub nsw i32 %273, %274
  %276 = call i32 @max(i32 noundef %275, i32 noundef 0)
  br label %278

277:                                              ; preds = %264
  br label %278

278:                                              ; preds = %277, %270
  %279 = phi i32 [ %276, %270 ], [ 2147483647, %277 ]
  %280 = load ptr, ptr %10, align 8, !tbaa !11
  %281 = getelementptr inbounds %struct.Candidate, ptr %280, i32 0, i32 2
  store i32 %279, ptr %281, align 4, !tbaa !36
  %282 = load ptr, ptr %10, align 8, !tbaa !11
  %283 = getelementptr inbounds %struct.Candidate, ptr %282, i32 0, i32 2
  %284 = load i32, ptr %283, align 4, !tbaa !36
  %285 = sext i32 %284 to i64
  %286 = load i64, ptr %5, align 8, !tbaa !9
  %287 = icmp sgt i64 %285, %286
  br i1 %287, label %288, label %294

288:                                              ; preds = %278
  %289 = load i32, ptr @DelaunayPure, align 4, !tbaa !5
  %290 = icmp ne i32 %289, 0
  br i1 %290, label %294, label %291

291:                                              ; preds = %288
  %292 = load ptr, ptr %10, align 8, !tbaa !11
  %293 = getelementptr inbounds %struct.Candidate, ptr %292, i32 0, i32 2
  store i32 2147483647, ptr %293, align 4, !tbaa !36
  br label %294

294:                                              ; preds = %291, %288, %278
  br label %295

295:                                              ; preds = %294, %258
  br label %296

296:                                              ; preds = %295, %244
  br label %297

297:                                              ; preds = %296, %226
  br label %298

298:                                              ; preds = %297
  %299 = load ptr, ptr %10, align 8, !tbaa !11
  %300 = getelementptr inbounds %struct.Candidate, ptr %299, i32 1
  store ptr %300, ptr %10, align 8, !tbaa !11
  br label %199, !llvm.loop !38

301:                                              ; preds = %207
  %302 = load ptr, ptr %7, align 8, !tbaa !11
  %303 = getelementptr inbounds %struct.Node, ptr %302, i32 0, i32 54
  store i8 1, ptr %303, align 2, !tbaa !22
  br label %304

304:                                              ; preds = %301
  %305 = load ptr, ptr %7, align 8, !tbaa !11
  %306 = getelementptr inbounds %struct.Node, ptr %305, i32 0, i32 16
  %307 = load ptr, ptr %306, align 8, !tbaa !17
  store ptr %307, ptr %7, align 8, !tbaa !11
  %308 = load ptr, ptr @FirstNode, align 8, !tbaa !11
  %309 = icmp ne ptr %307, %308
  br i1 %309, label %195, label %310, !llvm.loop !39

310:                                              ; preds = %304
  %311 = load i32, ptr %4, align 4, !tbaa !5
  %312 = icmp sgt i32 %311, 0
  br i1 %312, label %313, label %497

313:                                              ; preds = %310
  %314 = load i32, ptr @DelaunayPure, align 4, !tbaa !5
  %315 = icmp ne i32 %314, 0
  br i1 %315, label %497, label %316

316:                                              ; preds = %313
  br label %317

317:                                              ; preds = %340, %316
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #3
  store i32 0, ptr %14, align 4, !tbaa !5
  %318 = load ptr, ptr %7, align 8, !tbaa !11
  %319 = getelementptr inbounds %struct.Node, ptr %318, i32 0, i32 43
  %320 = load ptr, ptr %319, align 8, !tbaa !33
  store ptr %320, ptr %10, align 8, !tbaa !11
  br label %321

321:                                              ; preds = %329, %317
  %322 = load ptr, ptr %10, align 8, !tbaa !11
  %323 = getelementptr inbounds %struct.Candidate, ptr %322, i32 0, i32 0
  %324 = load ptr, ptr %323, align 8, !tbaa !34
  %325 = icmp ne ptr %324, null
  br i1 %325, label %326, label %332

326:                                              ; preds = %321
  %327 = load i32, ptr %14, align 4, !tbaa !5
  %328 = add nsw i32 %327, 1
  store i32 %328, ptr %14, align 4, !tbaa !5
  br label %329

329:                                              ; preds = %326
  %330 = load ptr, ptr %10, align 8, !tbaa !11
  %331 = getelementptr inbounds %struct.Candidate, ptr %330, i32 1
  store ptr %331, ptr %10, align 8, !tbaa !11
  br label %321, !llvm.loop !40

332:                                              ; preds = %321
  %333 = load i32, ptr %14, align 4, !tbaa !5
  %334 = load ptr, ptr %7, align 8, !tbaa !11
  %335 = getelementptr inbounds %struct.Node, ptr %334, i32 0, i32 13
  store i32 %333, ptr %335, align 4, !tbaa !23
  %336 = load ptr, ptr %7, align 8, !tbaa !11
  %337 = getelementptr inbounds %struct.Node, ptr %336, i32 0, i32 25
  store ptr null, ptr %337, align 8, !tbaa !41
  %338 = load ptr, ptr %7, align 8, !tbaa !11
  %339 = getelementptr inbounds %struct.Node, ptr %338, i32 0, i32 54
  store i8 0, ptr %339, align 2, !tbaa !22
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #3
  br label %340

340:                                              ; preds = %332
  %341 = load ptr, ptr %7, align 8, !tbaa !11
  %342 = getelementptr inbounds %struct.Node, ptr %341, i32 0, i32 16
  %343 = load ptr, ptr %342, align 8, !tbaa !17
  store ptr %343, ptr %7, align 8, !tbaa !11
  %344 = load ptr, ptr @FirstNode, align 8, !tbaa !11
  %345 = icmp ne ptr %343, %344
  br i1 %345, label %317, label %346, !llvm.loop !42

346:                                              ; preds = %340
  br label %347

347:                                              ; preds = %490, %346
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #3
  %348 = load ptr, ptr %7, align 8, !tbaa !11
  %349 = load ptr, ptr %7, align 8, !tbaa !11
  %350 = getelementptr inbounds %struct.Node, ptr %349, i32 0, i32 25
  store ptr %348, ptr %350, align 8, !tbaa !41
  store i32 0, ptr %15, align 4, !tbaa !5
  br label %351

351:                                              ; preds = %484, %347
  %352 = load i32, ptr %15, align 4, !tbaa !5
  %353 = load ptr, ptr %7, align 8, !tbaa !11
  %354 = getelementptr inbounds %struct.Node, ptr %353, i32 0, i32 13
  %355 = load i32, ptr %354, align 4, !tbaa !23
  %356 = icmp slt i32 %352, %355
  br i1 %356, label %357, label %487

357:                                              ; preds = %351
  %358 = load ptr, ptr %7, align 8, !tbaa !11
  %359 = getelementptr inbounds %struct.Node, ptr %358, i32 0, i32 43
  %360 = load ptr, ptr %359, align 8, !tbaa !33
  %361 = load i32, ptr %15, align 4, !tbaa !5
  %362 = sext i32 %361 to i64
  %363 = getelementptr inbounds %struct.Candidate, ptr %360, i64 %362
  %364 = getelementptr inbounds %struct.Candidate, ptr %363, i32 0, i32 0
  %365 = load ptr, ptr %364, align 8, !tbaa !34
  store ptr %365, ptr %9, align 8, !tbaa !11
  %366 = load ptr, ptr %7, align 8, !tbaa !11
  %367 = load ptr, ptr %9, align 8, !tbaa !11
  %368 = getelementptr inbounds %struct.Node, ptr %367, i32 0, i32 25
  store ptr %366, ptr %368, align 8, !tbaa !41
  store i32 0, ptr %16, align 4, !tbaa !5
  br label %369

369:                                              ; preds = %480, %357
  %370 = load i32, ptr %16, align 4, !tbaa !5
  %371 = load ptr, ptr %9, align 8, !tbaa !11
  %372 = getelementptr inbounds %struct.Node, ptr %371, i32 0, i32 13
  %373 = load i32, ptr %372, align 4, !tbaa !23
  %374 = icmp slt i32 %370, %373
  br i1 %374, label %375, label %483

375:                                              ; preds = %369
  %376 = load ptr, ptr %9, align 8, !tbaa !11
  %377 = getelementptr inbounds %struct.Node, ptr %376, i32 0, i32 43
  %378 = load ptr, ptr %377, align 8, !tbaa !33
  %379 = load i32, ptr %16, align 4, !tbaa !5
  %380 = sext i32 %379 to i64
  %381 = getelementptr inbounds %struct.Candidate, ptr %378, i64 %380
  %382 = getelementptr inbounds %struct.Candidate, ptr %381, i32 0, i32 0
  %383 = load ptr, ptr %382, align 8, !tbaa !34
  store ptr %383, ptr %8, align 8, !tbaa !11
  %384 = load ptr, ptr %8, align 8, !tbaa !11
  %385 = getelementptr inbounds %struct.Node, ptr %384, i32 0, i32 25
  %386 = load ptr, ptr %385, align 8, !tbaa !41
  %387 = load ptr, ptr %7, align 8, !tbaa !11
  %388 = icmp eq ptr %386, %387
  br i1 %388, label %389, label %390

389:                                              ; preds = %375
  br label %480

390:                                              ; preds = %375
  %391 = load ptr, ptr %7, align 8, !tbaa !11
  %392 = load ptr, ptr %8, align 8, !tbaa !11
  %393 = getelementptr inbounds %struct.Node, ptr %392, i32 0, i32 25
  store ptr %391, ptr %393, align 8, !tbaa !41
  %394 = load ptr, ptr %7, align 8, !tbaa !11
  %395 = load ptr, ptr %8, align 8, !tbaa !11
  %396 = call ptr @FindCandidate(ptr noundef %394, ptr noundef %395)
  %397 = icmp ne ptr %396, null
  br i1 %397, label %398, label %399

398:                                              ; preds = %390
  br label %480

399:                                              ; preds = %390
  %400 = load ptr, ptr %7, align 8, !tbaa !11
  %401 = getelementptr inbounds %struct.Node, ptr %400, i32 0, i32 26
  %402 = load ptr, ptr %401, align 8, !tbaa !29
  %403 = load ptr, ptr %8, align 8, !tbaa !11
  %404 = icmp eq ptr %402, %403
  br i1 %404, label %416, label %405

405:                                              ; preds = %399
  %406 = load ptr, ptr %7, align 8, !tbaa !11
  %407 = getelementptr inbounds %struct.Node, ptr %406, i32 0, i32 27
  %408 = load ptr, ptr %407, align 8, !tbaa !30
  %409 = load ptr, ptr %8, align 8, !tbaa !11
  %410 = icmp eq ptr %408, %409
  br i1 %410, label %416, label %411

411:                                              ; preds = %405
  %412 = load ptr, ptr %7, align 8, !tbaa !11
  %413 = load ptr, ptr %8, align 8, !tbaa !11
  %414 = call i32 @IsCommonEdge(ptr noundef %412, ptr noundef %413)
  %415 = icmp ne i32 %414, 0
  br i1 %415, label %416, label %417

416:                                              ; preds = %411, %405, %399
  store i32 -2147483648, ptr %12, align 4, !tbaa !5
  br label %465

417:                                              ; preds = %411
  %418 = load ptr, ptr %7, align 8, !tbaa !11
  %419 = getelementptr inbounds %struct.Node, ptr %418, i32 0, i32 27
  %420 = load ptr, ptr %419, align 8, !tbaa !30
  %421 = icmp ne ptr %420, null
  br i1 %421, label %432, label %422

422:                                              ; preds = %417
  %423 = load ptr, ptr %8, align 8, !tbaa !11
  %424 = getelementptr inbounds %struct.Node, ptr %423, i32 0, i32 27
  %425 = load ptr, ptr %424, align 8, !tbaa !30
  %426 = icmp ne ptr %425, null
  br i1 %426, label %432, label %427

427:                                              ; preds = %422
  %428 = load ptr, ptr %7, align 8, !tbaa !11
  %429 = load ptr, ptr %8, align 8, !tbaa !11
  %430 = call i32 @Forbidden(ptr noundef %428, ptr noundef %429)
  %431 = icmp ne i32 %430, 0
  br i1 %431, label %432, label %433

432:                                              ; preds = %427, %422, %417
  br label %480

433:                                              ; preds = %427
  %434 = load ptr, ptr %8, align 8, !tbaa !11
  %435 = load ptr, ptr %7, align 8, !tbaa !11
  %436 = call ptr @FindCandidate(ptr noundef %434, ptr noundef %435)
  store ptr %436, ptr %11, align 8, !tbaa !11
  %437 = icmp ne ptr %436, null
  br i1 %437, label %438, label %442

438:                                              ; preds = %433
  %439 = load ptr, ptr %11, align 8, !tbaa !11
  %440 = getelementptr inbounds %struct.Candidate, ptr %439, i32 0, i32 2
  %441 = load i32, ptr %440, align 4, !tbaa !36
  store i32 %441, ptr %12, align 4, !tbaa !5
  br label %463

442:                                              ; preds = %433
  %443 = load ptr, ptr %8, align 8, !tbaa !11
  %444 = getelementptr inbounds %struct.Node, ptr %443, i32 0, i32 54
  %445 = load i8, ptr %444, align 2, !tbaa !22
  %446 = icmp ne i8 %445, 0
  br i1 %446, label %447, label %448

447:                                              ; preds = %442
  br label %480

448:                                              ; preds = %442
  %449 = load ptr, ptr %7, align 8, !tbaa !11
  %450 = load ptr, ptr %8, align 8, !tbaa !11
  %451 = call i32 @BetaValue(ptr noundef %449, ptr noundef %450)
  store i32 %451, ptr %13, align 4, !tbaa !5
  %452 = load i32, ptr %13, align 4, !tbaa !5
  %453 = icmp eq i32 %452, -2147483648
  br i1 %453, label %454, label %455

454:                                              ; preds = %448
  br label %480

455:                                              ; preds = %448
  %456 = load ptr, ptr @D, align 8, !tbaa !11
  %457 = load ptr, ptr %7, align 8, !tbaa !11
  %458 = load ptr, ptr %8, align 8, !tbaa !11
  %459 = call i32 %456(ptr noundef %457, ptr noundef %458)
  %460 = load i32, ptr %13, align 4, !tbaa !5
  %461 = sub nsw i32 %459, %460
  %462 = call i32 @max(i32 noundef %461, i32 noundef 0)
  store i32 %462, ptr %12, align 4, !tbaa !5
  br label %463

463:                                              ; preds = %455, %438
  br label %464

464:                                              ; preds = %463
  br label %465

465:                                              ; preds = %464, %416
  %466 = load i32, ptr %12, align 4, !tbaa !5
  %467 = sext i32 %466 to i64
  %468 = load i64, ptr %5, align 8, !tbaa !9
  %469 = icmp sle i64 %467, %468
  br i1 %469, label %470, label %479

470:                                              ; preds = %465
  %471 = load ptr, ptr %7, align 8, !tbaa !11
  %472 = load ptr, ptr %8, align 8, !tbaa !11
  %473 = load ptr, ptr @D, align 8, !tbaa !11
  %474 = load ptr, ptr %7, align 8, !tbaa !11
  %475 = load ptr, ptr %8, align 8, !tbaa !11
  %476 = call i32 %473(ptr noundef %474, ptr noundef %475)
  %477 = load i32, ptr %12, align 4, !tbaa !5
  %478 = call i32 @AddCandidate(ptr noundef %471, ptr noundef %472, i32 noundef %476, i32 noundef %477)
  br label %479

479:                                              ; preds = %470, %465
  br label %480

480:                                              ; preds = %479, %454, %447, %432, %398, %389
  %481 = load i32, ptr %16, align 4, !tbaa !5
  %482 = add nsw i32 %481, 1
  store i32 %482, ptr %16, align 4, !tbaa !5
  br label %369, !llvm.loop !43

483:                                              ; preds = %369
  br label %484

484:                                              ; preds = %483
  %485 = load i32, ptr %15, align 4, !tbaa !5
  %486 = add nsw i32 %485, 1
  store i32 %486, ptr %15, align 4, !tbaa !5
  br label %351, !llvm.loop !44

487:                                              ; preds = %351
  %488 = load ptr, ptr %7, align 8, !tbaa !11
  %489 = getelementptr inbounds %struct.Node, ptr %488, i32 0, i32 54
  store i8 1, ptr %489, align 2, !tbaa !22
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #3
  br label %490

490:                                              ; preds = %487
  %491 = load ptr, ptr %7, align 8, !tbaa !11
  %492 = getelementptr inbounds %struct.Node, ptr %491, i32 0, i32 16
  %493 = load ptr, ptr %492, align 8, !tbaa !17
  store ptr %493, ptr %7, align 8, !tbaa !11
  %494 = load ptr, ptr @FirstNode, align 8, !tbaa !11
  %495 = icmp ne ptr %493, %494
  br i1 %495, label %347, label %496, !llvm.loop !45

496:                                              ; preds = %490
  br label %497

497:                                              ; preds = %496, %313, %310
  call void @ResetCandidateSet()
  %498 = load i32, ptr %4, align 4, !tbaa !5
  %499 = icmp sgt i32 %498, 0
  br i1 %499, label %500, label %502

500:                                              ; preds = %497
  %501 = load i32, ptr %4, align 4, !tbaa !5
  call void @TrimCandidateSet(i32 noundef %501)
  br label %502

502:                                              ; preds = %500, %497
  call void @AddTourCandidates()
  %503 = load i32, ptr %6, align 4, !tbaa !5
  %504 = icmp ne i32 %503, 0
  br i1 %504, label %505, label %506

505:                                              ; preds = %502
  call void @SymmetrizeCandidateSet()
  br label %506

506:                                              ; preds = %505, %502
  %507 = load i32, ptr @TraceLevel, align 4, !tbaa !5
  %508 = icmp sge i32 %507, 2
  br i1 %508, label %509, label %510

509:                                              ; preds = %506
  call void (ptr, ...) @printff(ptr noundef @.str.1)
  br label %510

510:                                              ; preds = %509, %506
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #3
  ret void
}

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

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

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

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

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

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

; Function Attrs: nounwind uwtable
declare hidden ptr @FindCandidate(ptr noundef, ptr noundef) #0

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

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

declare void @ResetCandidateSet() #2

declare void @TrimCandidateSet(i32 noundef) #2

declare void @AddTourCandidates() #2

declare void @SymmetrizeCandidateSet() #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 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"long long", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"any pointer", !7, i64 0}
!13 = !{!14, !12, i64 112}
!14 = !{!"Node", !6, i64 0, !6, i64 4, !6, i64 8, !6, i64 12, !6, i64 16, !6, i64 20, !6, i64 24, !6, i64 28, !6, i64 32, !6, i64 36, !6, i64 40, !6, i64 44, !6, i64 48, !6, i64 52, !12, i64 56, !12, i64 64, !12, i64 72, !12, i64 80, !12, i64 88, !12, i64 96, !12, i64 104, !12, i64 112, !12, i64 120, !12, i64 128, !12, i64 136, !12, i64 144, !12, i64 152, !12, i64 160, !12, i64 168, !12, i64 176, !12, i64 184, !12, i64 192, !12, i64 200, !12, i64 208, !12, i64 216, !12, i64 224, !12, i64 232, !12, i64 240, !12, i64 248, !12, i64 256, !12, i64 264, !12, i64 272, !12, i64 280, !12, i64 288, !12, i64 296, !12, i64 304, !15, i64 312, !15, i64 320, !15, i64 328, !15, i64 336, !15, i64 344, !15, i64 352, !7, i64 360, !7, i64 361, !7, i64 362}
!15 = !{!"double", !7, i64 0}
!16 = !{!14, !6, i64 20}
!17 = !{!14, !12, i64 72}
!18 = distinct !{!18, !19}
!19 = !{!"llvm.loop.mustprogress"}
!20 = !{!14, !12, i64 128}
!21 = !{!14, !6, i64 24}
!22 = !{!14, !7, i64 362}
!23 = !{!14, !6, i64 52}
!24 = distinct !{!24, !19}
!25 = !{!14, !6, i64 12}
!26 = !{!14, !12, i64 88}
!27 = !{!14, !12, i64 80}
!28 = !{!14, !6, i64 44}
!29 = !{!14, !12, i64 152}
!30 = !{!14, !12, i64 160}
!31 = distinct !{!31, !19}
!32 = distinct !{!32, !19}
!33 = !{!14, !12, i64 288}
!34 = !{!35, !12, i64 0}
!35 = !{!"Candidate", !12, i64 0, !6, i64 8, !6, i64 12}
!36 = !{!35, !6, i64 12}
!37 = !{!35, !6, i64 8}
!38 = distinct !{!38, !19}
!39 = distinct !{!39, !19}
!40 = distinct !{!40, !19}
!41 = !{!14, !12, i64 144}
!42 = distinct !{!42, !19}
!43 = distinct !{!43, !19}
!44 = distinct !{!44, !19}
!45 = distinct !{!45, !19}


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

@TraceLevel = external dso_local local_unnamed_addr global i32, align 4
@.str = external hidden unnamed_addr constant [25 x i8], align 1
@FirstNode = external dso_local local_unnamed_addr global ptr, align 8
@DelaunayPure = external dso_local local_unnamed_addr global i32, align 4
@D = external dso_local local_unnamed_addr global ptr, align 8
@.str.1 = external hidden unnamed_addr constant [6 x i8], align 1

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

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

7:                                                ; preds = %6, %3
  %spec.store.select = tail call i64 @llvm.umin.i64(i64 %1, i64 2147483647)
  %8 = icmp sgt i32 %0, 0
  br i1 %8, label %9, label %37

9:                                                ; preds = %7
  %10 = load ptr, ptr @FirstNode, align 8, !tbaa !9
  br label %11

11:                                               ; preds = %21, %9
  %12 = phi ptr [ %10, %9 ], [ %22, %21 ]
  %.0148 = phi ptr [ %10, %9 ], [ %24, %21 ]
  %13 = getelementptr inbounds i8, ptr %.0148, i64 112
  %14 = load ptr, ptr %13, align 8, !tbaa !11
  %.not = icmp eq ptr %14, null
  br i1 %.not, label %21, label %15

15:                                               ; preds = %11
  %16 = getelementptr inbounds i8, ptr %.0148, i64 20
  %17 = load i32, ptr %16, align 4, !tbaa !14
  %18 = tail call i32 @AddCandidate(ptr noundef nonnull %.0148, ptr noundef nonnull %14, i32 noundef %17, i32 noundef 0) #3
  %19 = load i32, ptr %16, align 4, !tbaa !14
  %20 = tail call i32 @AddCandidate(ptr noundef nonnull %14, ptr noundef nonnull %.0148, i32 noundef %19, i32 noundef 0) #3
  %.pre = load ptr, ptr @FirstNode, align 8, !tbaa !9
  br label %21

21:                                               ; preds = %11, %15
  %22 = phi ptr [ %12, %11 ], [ %.pre, %15 ]
  %23 = getelementptr inbounds i8, ptr %.0148, i64 72
  %24 = load ptr, ptr %23, align 8, !tbaa !15
  %.not171 = icmp eq ptr %24, %22
  br i1 %.not171, label %25, label %11, !llvm.loop !16

25:                                               ; preds = %21
  %26 = getelementptr inbounds i8, ptr %22, i64 128
  %27 = load ptr, ptr %26, align 8, !tbaa !18
  %28 = getelementptr inbounds i8, ptr %22, i64 24
  %29 = load i32, ptr %28, align 8, !tbaa !19
  %30 = tail call i32 @AddCandidate(ptr noundef %22, ptr noundef %27, i32 noundef %29, i32 noundef 0) #3
  %31 = load ptr, ptr @FirstNode, align 8, !tbaa !9
  %32 = getelementptr inbounds i8, ptr %31, i64 128
  %33 = load ptr, ptr %32, align 8, !tbaa !18
  %34 = getelementptr inbounds i8, ptr %31, i64 24
  %35 = load i32, ptr %34, align 8, !tbaa !19
  %36 = tail call i32 @AddCandidate(ptr noundef %33, ptr noundef %31, i32 noundef %35, i32 noundef 0) #3
  br label %37

37:                                               ; preds = %25, %7
  %38 = load ptr, ptr @FirstNode, align 8, !tbaa !9
  br label %39

39:                                               ; preds = %39, %37
  %.1149 = phi ptr [ %38, %37 ], [ %43, %39 ]
  %40 = getelementptr inbounds i8, ptr %.1149, i64 362
  store i8 0, ptr %40, align 2, !tbaa !20
  %41 = getelementptr inbounds i8, ptr %.1149, i64 52
  store i32 0, ptr %41, align 4, !tbaa !21
  %42 = getelementptr inbounds i8, ptr %.1149, i64 72
  %43 = load ptr, ptr %42, align 8, !tbaa !15
  %.not172 = icmp eq ptr %43, %38
  br i1 %.not172, label %44, label %39, !llvm.loop !22

44:                                               ; preds = %39
  %45 = getelementptr inbounds i8, ptr %38, i64 72
  %46 = load ptr, ptr %45, align 8, !tbaa !15
  %47 = getelementptr inbounds i8, ptr %46, i64 12
  store i32 0, ptr %47, align 4, !tbaa !23
  %48 = getelementptr inbounds i8, ptr %46, i64 88
  store ptr %46, ptr %48, align 8, !tbaa !24
  %49 = getelementptr inbounds i8, ptr %46, i64 80
  store ptr %46, ptr %49, align 8, !tbaa !25
  %50 = getelementptr inbounds i8, ptr %46, i64 44
  store i32 -2147483648, ptr %50, align 4, !tbaa !26
  %51 = getelementptr inbounds i8, ptr %46, i64 72
  %52 = load ptr, ptr %51, align 8, !tbaa !15
  br label %53

53:                                               ; preds = %69, %44
  %.2 = phi ptr [ %52, %44 ], [ %81, %69 ]
  %54 = getelementptr inbounds i8, ptr %.2, i64 112
  %55 = load ptr, ptr %54, align 8, !tbaa !11
  %56 = getelementptr inbounds i8, ptr %.2, i64 80
  store ptr %55, ptr %56, align 8, !tbaa !25
  %57 = getelementptr inbounds i8, ptr %.2, i64 152
  %58 = load ptr, ptr %57, align 8, !tbaa !27
  %59 = icmp eq ptr %58, %55
  br i1 %59, label %69, label %60

60:                                               ; preds = %53
  %61 = getelementptr inbounds i8, ptr %.2, i64 160
  %62 = load ptr, ptr %61, align 8, !tbaa !28
  %63 = icmp eq ptr %62, %55
  br i1 %63, label %69, label %64

64:                                               ; preds = %60
  %65 = tail call i32 @IsCommonEdge(ptr noundef nonnull %.2, ptr noundef %55) #3
  %.not173 = icmp eq i32 %65, 0
  br i1 %.not173, label %66, label %69

66:                                               ; preds = %64
  %67 = getelementptr inbounds i8, ptr %.2, i64 20
  %68 = load i32, ptr %67, align 4, !tbaa !14
  br label %69

69:                                               ; preds = %53, %60, %64, %66
  %70 = phi i32 [ %68, %66 ], [ -2147483648, %64 ], [ -2147483648, %60 ], [ -2147483648, %53 ]
  %71 = getelementptr inbounds i8, ptr %.2, i64 44
  store i32 %70, ptr %71, align 4, !tbaa !26
  %72 = getelementptr inbounds i8, ptr %55, i64 12
  %73 = load i32, ptr %72, align 4, !tbaa !23
  %74 = add nsw i32 %73, 1
  %75 = getelementptr inbounds i8, ptr %.2, i64 12
  store i32 %74, ptr %75, align 4, !tbaa !23
  %76 = getelementptr inbounds i8, ptr %55, i64 52
  %77 = load i32, ptr %76, align 4, !tbaa !21
  %78 = add nsw i32 %77, 1
  store i32 %78, ptr %76, align 4, !tbaa !21
  %79 = getelementptr inbounds i8, ptr %.2, i64 88
  store ptr %.2, ptr %79, align 8, !tbaa !24
  %80 = getelementptr inbounds i8, ptr %.2, i64 72
  %81 = load ptr, ptr %80, align 8, !tbaa !15
  %82 = load ptr, ptr @FirstNode, align 8, !tbaa !9
  %.not174 = icmp eq ptr %81, %82
  br i1 %.not174, label %83, label %53, !llvm.loop !29

83:                                               ; preds = %69
  %84 = getelementptr inbounds i8, ptr %82, i64 72
  %85 = load ptr, ptr %84, align 8, !tbaa !15
  %86 = getelementptr inbounds i8, ptr %85, i64 72
  %87 = load ptr, ptr %86, align 8, !tbaa !15
  br label %88

88:                                               ; preds = %104, %83
  %89 = phi ptr [ %81, %83 ], [ %105, %104 ]
  %.3 = phi ptr [ %87, %83 ], [ %107, %104 ]
  %90 = getelementptr inbounds i8, ptr %.3, i64 112
  %91 = load ptr, ptr %90, align 8, !tbaa !11
  %92 = getelementptr inbounds i8, ptr %91, i64 52
  %93 = load i32, ptr %92, align 4, !tbaa !21
  %94 = icmp eq i32 %93, 1
  br i1 %94, label %95, label %104

95:                                               ; preds = %88
  %96 = getelementptr inbounds i8, ptr %91, i64 44
  %97 = load i32, ptr %96, align 4, !tbaa !26
  %98 = getelementptr inbounds i8, ptr %.3, i64 44
  %99 = load i32, ptr %98, align 4, !tbaa !26
  %100 = tail call i32 @max(i32 noundef %97, i32 noundef %99)
  store i32 %100, ptr %98, align 4, !tbaa !26
  %101 = getelementptr inbounds i8, ptr %91, i64 80
  %102 = getelementptr inbounds i8, ptr %.3, i64 80
  %103 = load <2 x ptr>, ptr %101, align 8, !tbaa !9
  store <2 x ptr> %103, ptr %102, align 8, !tbaa !9
  %.pre231 = load ptr, ptr @FirstNode, align 8, !tbaa !9
  br label %104

104:                                              ; preds = %88, %95
  %105 = phi ptr [ %89, %88 ], [ %.pre231, %95 ]
  %106 = getelementptr inbounds i8, ptr %.3, i64 72
  %107 = load ptr, ptr %106, align 8, !tbaa !15
  %.not175 = icmp eq ptr %107, %105
  br i1 %.not175, label %.preheader200, label %88, !llvm.loop !30

.preheader200:                                    ; preds = %104, %.critedge
  %108 = phi ptr [ %159, %.critedge ], [ %105, %104 ]
  %.4 = phi ptr [ %162, %.critedge ], [ %107, %104 ]
  %109 = getelementptr inbounds i8, ptr %.4, i64 288
  %110 = load ptr, ptr %109, align 8, !tbaa !31
  %.not176206 = icmp eq ptr %110, null
  br i1 %.not176206, label %.critedge, label %.lr.ph

.lr.ph:                                           ; preds = %.preheader200
  %111 = getelementptr inbounds i8, ptr %.4, i64 152
  %112 = getelementptr inbounds i8, ptr %.4, i64 160
  %113 = load ptr, ptr %110, align 8, !tbaa !32
  %.not177251 = icmp eq ptr %113, null
  br i1 %.not177251, label %.critedge.loopexit, label %.lr.ph253

.lr.ph253:                                        ; preds = %.lr.ph, %156
  %114 = phi ptr [ %158, %156 ], [ %113, %.lr.ph ]
  %.0147207252 = phi ptr [ %157, %156 ], [ %110, %.lr.ph ]
  %115 = load ptr, ptr %111, align 8, !tbaa !27
  %116 = icmp eq ptr %115, %114
  br i1 %116, label %122, label %117

117:                                              ; preds = %.lr.ph253
  %118 = load ptr, ptr %112, align 8, !tbaa !28
  %119 = icmp eq ptr %118, %114
  br i1 %119, label %122, label %120

120:                                              ; preds = %117
  %121 = tail call i32 @IsCommonEdge(ptr noundef nonnull %.4, ptr noundef nonnull %114) #3
  %.not191 = icmp eq i32 %121, 0
  br i1 %.not191, label %124, label %122

122:                                              ; preds = %120, %117, %.lr.ph253
  %123 = getelementptr inbounds i8, ptr %.0147207252, i64 12
  store i32 -2147483648, ptr %123, align 4, !tbaa !34
  br label %156

124:                                              ; preds = %120
  %125 = load ptr, ptr %112, align 8, !tbaa !28
  %.not192 = icmp eq ptr %125, null
  br i1 %.not192, label %126, label %131

126:                                              ; preds = %124
  %127 = getelementptr inbounds i8, ptr %114, i64 160
  %128 = load ptr, ptr %127, align 8, !tbaa !28
  %.not193 = icmp eq ptr %128, null
  br i1 %.not193, label %129, label %131

129:                                              ; preds = %126
  %130 = tail call i32 @Forbidden(ptr noundef nonnull %.4, ptr noundef nonnull %114) #3
  %.not194 = icmp eq i32 %130, 0
  br i1 %.not194, label %133, label %131

131:                                              ; preds = %129, %126, %124
  %132 = getelementptr inbounds i8, ptr %.0147207252, i64 12
  store i32 2147483647, ptr %132, align 4, !tbaa !34
  br label %156

133:                                              ; preds = %129
  %134 = getelementptr inbounds i8, ptr %114, i64 362
  %135 = load i8, ptr %134, align 2, !tbaa !20
  %.not195 = icmp eq i8 %135, 0
  br i1 %.not195, label %142, label %136

136:                                              ; preds = %133
  %137 = tail call ptr @FindCandidate(ptr noundef nonnull %114, ptr noundef nonnull %.4)
  %.not196 = icmp eq ptr %137, null
  br i1 %.not196, label %142, label %138

138:                                              ; preds = %136
  %139 = getelementptr inbounds i8, ptr %137, i64 12
  %140 = load i32, ptr %139, align 4, !tbaa !34
  %141 = getelementptr inbounds i8, ptr %.0147207252, i64 12
  store i32 %140, ptr %141, align 4, !tbaa !34
  br label %156

142:                                              ; preds = %136, %133
  %143 = tail call i32 @BetaValue(ptr noundef nonnull %.4, ptr noundef nonnull %114)
  %.not197 = icmp eq i32 %143, -2147483648
  br i1 %.not197, label %149, label %144

144:                                              ; preds = %142
  %145 = getelementptr inbounds i8, ptr %.0147207252, i64 8
  %146 = load i32, ptr %145, align 8, !tbaa !35
  %147 = sub nsw i32 %146, %143
  %148 = tail call i32 @max(i32 noundef %147, i32 noundef 0)
  br label %149

149:                                              ; preds = %142, %144
  %150 = phi i32 [ %148, %144 ], [ 2147483647, %142 ]
  %151 = getelementptr inbounds i8, ptr %.0147207252, i64 12
  %152 = sext i32 %150 to i64
  %153 = icmp sge i64 %spec.store.select, %152
  %154 = load i32, ptr @DelaunayPure, align 4
  %155 = icmp ne i32 %154, 0
  %or.cond3 = select i1 %153, i1 true, i1 %155
  %spec.store.select198 = select i1 %or.cond3, i32 %150, i32 2147483647
  store i32 %spec.store.select198, ptr %151, align 4
  br label %156

156:                                              ; preds = %149, %122, %138, %131
  %157 = getelementptr inbounds i8, ptr %.0147207252, i64 16
  %158 = load ptr, ptr %157, align 8, !tbaa !32
  %.not177 = icmp eq ptr %158, null
  br i1 %.not177, label %.critedge.loopexit, label %.lr.ph253, !llvm.loop !36

.critedge.loopexit:                               ; preds = %156, %.lr.ph
  %.pre232 = load ptr, ptr @FirstNode, align 8, !tbaa !9
  br label %.critedge

.critedge:                                        ; preds = %.critedge.loopexit, %.preheader200
  %159 = phi ptr [ %.pre232, %.critedge.loopexit ], [ %108, %.preheader200 ]
  %160 = getelementptr inbounds i8, ptr %.4, i64 362
  store i8 1, ptr %160, align 2, !tbaa !20
  %161 = getelementptr inbounds i8, ptr %.4, i64 72
  %162 = load ptr, ptr %161, align 8, !tbaa !15
  %.not178 = icmp eq ptr %162, %159
  br i1 %.not178, label %163, label %.preheader200, !llvm.loop !37

163:                                              ; preds = %.critedge
  %164 = icmp slt i32 %0, 1
  %165 = load i32, ptr @DelaunayPure, align 4
  %166 = icmp ne i32 %165, 0
  %or.cond5 = select i1 %164, i1 true, i1 %166
  br i1 %or.cond5, label %.loopexit, label %.preheader199

.preheader199:                                    ; preds = %163, %._crit_edge
  %.5 = phi ptr [ %177, %._crit_edge ], [ %162, %163 ]
  %167 = getelementptr inbounds i8, ptr %.5, i64 288
  %168 = load ptr, ptr %167, align 8, !tbaa !31
  %169 = load ptr, ptr %168, align 8, !tbaa !32
  %.not179209 = icmp eq ptr %169, null
  br i1 %.not179209, label %._crit_edge, label %.lr.ph212

.lr.ph212:                                        ; preds = %.preheader199, %.lr.ph212
  %.0145211 = phi i32 [ %170, %.lr.ph212 ], [ 0, %.preheader199 ]
  %.1210 = phi ptr [ %171, %.lr.ph212 ], [ %168, %.preheader199 ]
  %170 = add nuw nsw i32 %.0145211, 1
  %171 = getelementptr inbounds i8, ptr %.1210, i64 16
  %172 = load ptr, ptr %171, align 8, !tbaa !32
  %.not179 = icmp eq ptr %172, null
  br i1 %.not179, label %._crit_edge, label %.lr.ph212, !llvm.loop !38

._crit_edge:                                      ; preds = %.lr.ph212, %.preheader199
  %.0145.lcssa = phi i32 [ 0, %.preheader199 ], [ %170, %.lr.ph212 ]
  %173 = getelementptr inbounds i8, ptr %.5, i64 52
  store i32 %.0145.lcssa, ptr %173, align 4, !tbaa !21
  %174 = getelementptr inbounds i8, ptr %.5, i64 144
  store ptr null, ptr %174, align 8, !tbaa !39
  %175 = getelementptr inbounds i8, ptr %.5, i64 362
  store i8 0, ptr %175, align 2, !tbaa !20
  %176 = getelementptr inbounds i8, ptr %.5, i64 72
  %177 = load ptr, ptr %176, align 8, !tbaa !15
  %.not180 = icmp eq ptr %177, %159
  br i1 %.not180, label %.preheader, label %.preheader199, !llvm.loop !40

.preheader:                                       ; preds = %._crit_edge, %._crit_edge220
  %178 = phi ptr [ %249, %._crit_edge220 ], [ %159, %._crit_edge ]
  %.6 = phi ptr [ %252, %._crit_edge220 ], [ %177, %._crit_edge ]
  %179 = getelementptr inbounds i8, ptr %.6, i64 144
  store ptr %.6, ptr %179, align 8, !tbaa !39
  %180 = getelementptr inbounds i8, ptr %.6, i64 52
  %181 = load i32, ptr %180, align 4, !tbaa !21
  %182 = icmp sgt i32 %181, 0
  br i1 %182, label %.lr.ph219, label %._crit_edge220

.lr.ph219:                                        ; preds = %.preheader
  %183 = getelementptr inbounds i8, ptr %.6, i64 288
  %184 = getelementptr inbounds i8, ptr %.6, i64 152
  %185 = getelementptr inbounds i8, ptr %.6, i64 160
  br label %186

186:                                              ; preds = %.lr.ph219, %._crit_edge216
  %187 = phi i32 [ %181, %.lr.ph219 ], [ %246, %._crit_edge216 ]
  %indvars.iv228 = phi i64 [ 0, %.lr.ph219 ], [ %indvars.iv.next229, %._crit_edge216 ]
  %188 = load ptr, ptr %183, align 8, !tbaa !31
  %189 = getelementptr inbounds %struct.Candidate, ptr %188, i64 %indvars.iv228
  %190 = load ptr, ptr %189, align 8, !tbaa !32
  %191 = getelementptr inbounds i8, ptr %190, i64 144
  store ptr %.6, ptr %191, align 8, !tbaa !39
  %192 = getelementptr inbounds i8, ptr %190, i64 52
  %193 = load i32, ptr %192, align 4, !tbaa !21
  %194 = icmp sgt i32 %193, 0
  br i1 %194, label %.lr.ph215, label %._crit_edge216

.lr.ph215:                                        ; preds = %186
  %195 = getelementptr inbounds i8, ptr %190, i64 288
  br label %196

196:                                              ; preds = %.lr.ph215, %242
  %indvars.iv = phi i64 [ 0, %.lr.ph215 ], [ %indvars.iv.next, %242 ]
  %197 = load ptr, ptr %195, align 8, !tbaa !31
  %198 = getelementptr inbounds %struct.Candidate, ptr %197, i64 %indvars.iv
  %199 = load ptr, ptr %198, align 8, !tbaa !32
  %200 = getelementptr inbounds i8, ptr %199, i64 144
  %201 = load ptr, ptr %200, align 8, !tbaa !39
  %202 = icmp eq ptr %201, %.6
  br i1 %202, label %242, label %203

203:                                              ; preds = %196
  store ptr %.6, ptr %200, align 8, !tbaa !39
  %204 = tail call ptr @FindCandidate(ptr noundef %.6, ptr noundef nonnull %199)
  %.not182 = icmp eq ptr %204, null
  br i1 %.not182, label %205, label %242

205:                                              ; preds = %203
  %206 = load ptr, ptr %184, align 8, !tbaa !27
  %207 = icmp eq ptr %206, %199
  br i1 %207, label %236, label %208

208:                                              ; preds = %205
  %209 = load ptr, ptr %185, align 8, !tbaa !28
  %210 = icmp eq ptr %209, %199
  br i1 %210, label %236, label %211

211:                                              ; preds = %208
  %212 = tail call i32 @IsCommonEdge(ptr noundef nonnull %.6, ptr noundef nonnull %199) #3
  %.not183 = icmp eq i32 %212, 0
  br i1 %.not183, label %213, label %236

213:                                              ; preds = %211
  %214 = load ptr, ptr %185, align 8, !tbaa !28
  %.not184 = icmp eq ptr %214, null
  br i1 %.not184, label %215, label %242

215:                                              ; preds = %213
  %216 = getelementptr inbounds i8, ptr %199, i64 160
  %217 = load ptr, ptr %216, align 8, !tbaa !28
  %.not185 = icmp eq ptr %217, null
  br i1 %.not185, label %218, label %242

218:                                              ; preds = %215
  %219 = tail call i32 @Forbidden(ptr noundef nonnull %.6, ptr noundef nonnull %199) #3
  %.not186 = icmp eq i32 %219, 0
  br i1 %.not186, label %220, label %242

220:                                              ; preds = %218
  %221 = tail call ptr @FindCandidate(ptr noundef nonnull %199, ptr noundef nonnull %.6)
  %.not187 = icmp eq ptr %221, null
  br i1 %.not187, label %225, label %222

222:                                              ; preds = %220
  %223 = getelementptr inbounds i8, ptr %221, i64 12
  %224 = load i32, ptr %223, align 4, !tbaa !34
  br label %236

225:                                              ; preds = %220
  %226 = getelementptr inbounds i8, ptr %199, i64 362
  %227 = load i8, ptr %226, align 2, !tbaa !20
  %.not188 = icmp eq i8 %227, 0
  br i1 %.not188, label %228, label %242

228:                                              ; preds = %225
  %229 = tail call i32 @BetaValue(ptr noundef nonnull %.6, ptr noundef nonnull %199)
  %230 = icmp eq i32 %229, -2147483648
  br i1 %230, label %242, label %231

231:                                              ; preds = %228
  %232 = load ptr, ptr @D, align 8, !tbaa !9
  %233 = tail call i32 %232(ptr noundef nonnull %.6, ptr noundef nonnull %199) #3
  %234 = sub nsw i32 %233, %229
  %235 = tail call i32 @max(i32 noundef %234, i32 noundef 0)
  br label %236

236:                                              ; preds = %205, %208, %211, %231, %222
  %.0146 = phi i32 [ %224, %222 ], [ %235, %231 ], [ -2147483648, %211 ], [ -2147483648, %208 ], [ -2147483648, %205 ]
  %237 = sext i32 %.0146 to i64
  %.not189 = icmp slt i64 %spec.store.select, %237
  br i1 %.not189, label %242, label %238

238:                                              ; preds = %236
  %239 = load ptr, ptr @D, align 8, !tbaa !9
  %240 = tail call i32 %239(ptr noundef nonnull %.6, ptr noundef nonnull %199) #3
  %241 = tail call i32 @AddCandidate(ptr noundef nonnull %.6, ptr noundef nonnull %199, i32 noundef %240, i32 noundef %.0146) #3
  br label %242

242:                                              ; preds = %236, %238, %228, %225, %213, %215, %218, %203, %196
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %243 = load i32, ptr %192, align 4, !tbaa !21
  %244 = sext i32 %243 to i64
  %245 = icmp slt i64 %indvars.iv.next, %244
  br i1 %245, label %196, label %._crit_edge216.loopexit, !llvm.loop !41

._crit_edge216.loopexit:                          ; preds = %242
  %.pre233 = load i32, ptr %180, align 4, !tbaa !21
  br label %._crit_edge216

._crit_edge216:                                   ; preds = %._crit_edge216.loopexit, %186
  %246 = phi i32 [ %.pre233, %._crit_edge216.loopexit ], [ %187, %186 ]
  %indvars.iv.next229 = add nuw nsw i64 %indvars.iv228, 1
  %247 = sext i32 %246 to i64
  %248 = icmp slt i64 %indvars.iv.next229, %247
  br i1 %248, label %186, label %._crit_edge220.loopexit, !llvm.loop !42

._crit_edge220.loopexit:                          ; preds = %._crit_edge216
  %.pre234 = load ptr, ptr @FirstNode, align 8, !tbaa !9
  br label %._crit_edge220

._crit_edge220:                                   ; preds = %._crit_edge220.loopexit, %.preheader
  %249 = phi ptr [ %.pre234, %._crit_edge220.loopexit ], [ %178, %.preheader ]
  %250 = getelementptr inbounds i8, ptr %.6, i64 362
  store i8 1, ptr %250, align 2, !tbaa !20
  %251 = getelementptr inbounds i8, ptr %.6, i64 72
  %252 = load ptr, ptr %251, align 8, !tbaa !15
  %.not181 = icmp eq ptr %252, %249
  br i1 %.not181, label %.loopexit, label %.preheader, !llvm.loop !43

.loopexit:                                        ; preds = %._crit_edge220, %163
  tail call void @ResetCandidateSet() #3
  br i1 %8, label %253, label %254

253:                                              ; preds = %.loopexit
  tail call void @TrimCandidateSet(i32 noundef %0) #3
  br label %254

254:                                              ; preds = %253, %.loopexit
  tail call void @AddTourCandidates() #3
  %.not190 = icmp eq i32 %2, 0
  br i1 %.not190, label %256, label %255

255:                                              ; preds = %254
  tail call void @SymmetrizeCandidateSet() #3
  br label %256

256:                                              ; preds = %255, %254
  %257 = load i32, ptr @TraceLevel, align 4, !tbaa !5
  %258 = icmp sgt i32 %257, 1
  br i1 %258, label %259, label %260

259:                                              ; preds = %256
  tail call void (ptr, ...) @printff(ptr noundef nonnull @.str.1) #3
  br label %260

260:                                              ; preds = %259, %256
  ret void
}

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

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

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

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

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

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

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

declare void @ResetCandidateSet() local_unnamed_addr #1

declare void @TrimCandidateSet(i32 noundef) local_unnamed_addr #1

declare void @AddTourCandidates() local_unnamed_addr #1

declare void @SymmetrizeCandidateSet() local_unnamed_addr #1

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i64 @llvm.umin.i64(i64, i64) #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 = { "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 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #3 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!12, !10, i64 112}
!12 = !{!"Node", !6, i64 0, !6, i64 4, !6, i64 8, !6, i64 12, !6, i64 16, !6, i64 20, !6, i64 24, !6, i64 28, !6, i64 32, !6, i64 36, !6, i64 40, !6, i64 44, !6, i64 48, !6, i64 52, !10, i64 56, !10, i64 64, !10, i64 72, !10, i64 80, !10, i64 88, !10, i64 96, !10, i64 104, !10, i64 112, !10, i64 120, !10, i64 128, !10, i64 136, !10, i64 144, !10, i64 152, !10, i64 160, !10, i64 168, !10, i64 176, !10, i64 184, !10, i64 192, !10, i64 200, !10, i64 208, !10, i64 216, !10, i64 224, !10, i64 232, !10, i64 240, !10, i64 248, !10, i64 256, !10, i64 264, !10, i64 272, !10, i64 280, !10, i64 288, !10, i64 296, !10, i64 304, !13, i64 312, !13, i64 320, !13, i64 328, !13, i64 336, !13, i64 344, !13, i64 352, !7, i64 360, !7, i64 361, !7, i64 362}
!13 = !{!"double", !7, i64 0}
!14 = !{!12, !6, i64 20}
!15 = !{!12, !10, i64 72}
!16 = distinct !{!16, !17}
!17 = !{!"llvm.loop.mustprogress"}
!18 = !{!12, !10, i64 128}
!19 = !{!12, !6, i64 24}
!20 = !{!12, !7, i64 362}
!21 = !{!12, !6, i64 52}
!22 = distinct !{!22, !17}
!23 = !{!12, !6, i64 12}
!24 = !{!12, !10, i64 88}
!25 = !{!12, !10, i64 80}
!26 = !{!12, !6, i64 44}
!27 = !{!12, !10, i64 152}
!28 = !{!12, !10, i64 160}
!29 = distinct !{!29, !17}
!30 = distinct !{!30, !17}
!31 = !{!12, !10, i64 288}
!32 = !{!33, !10, i64 0}
!33 = !{!"Candidate", !10, i64 0, !6, i64 8, !6, i64 12}
!34 = !{!33, !6, i64 12}
!35 = !{!33, !6, i64 8}
!36 = distinct !{!36, !17}
!37 = distinct !{!37, !17}
!38 = distinct !{!38, !17}
!39 = !{!12, !10, i64 144}
!40 = distinct !{!40, !17}
!41 = distinct !{!41, !17}
!42 = distinct !{!42, !17}
!43 = distinct !{!43, !17}


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