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

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

@Reversed = external dso_local global i16, align 2
@GainCriterionUsed = external dso_local global i32, align 4
@ProblemType = external dso_local global i32, align 4
@MaxBreadth = external dso_local global i32, align 4
@C = external dso_local global ptr, align 8
@c = external dso_local global ptr, align 8
@Backtracking = external dso_local global i32, align 4
@Precision = external dso_local global i32, align 4
@Swaps = external dso_local global i32, align 4
@MaxSwaps = external dso_local global i32, align 4
@RestrictedSearch = external dso_local global i32, align 4
@BestSubsequentMove = external dso_local global ptr, align 8

; Function Attrs: nounwind uwtable
define dso_local ptr @Best4OptMove(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3) #0 {
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %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 ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca i64, align 8
  %26 = alloca i64, align 8
  %27 = alloca i64, align 8
  %28 = alloca i64, align 8
  %29 = alloca i64, align 8
  %30 = alloca i64, align 8
  %31 = alloca i64, align 8
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca i32, align 4
  %37 = alloca i32, align 4
  %38 = alloca i32, align 4
  %39 = alloca i32, align 4
  %40 = alloca i32, align 4
  %41 = alloca i32, align 4
  %42 = alloca i64, align 8
  %43 = alloca ptr, align 8
  store ptr %0, ptr %6, align 8, !tbaa !5
  store ptr %1, ptr %7, align 8, !tbaa !5
  store ptr %2, ptr %8, align 8, !tbaa !5
  store ptr %3, ptr %9, align 8, !tbaa !5
  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 8, ptr %12) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #3
  store ptr null, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #3
  store ptr null, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #3
  store ptr null, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #3
  store ptr null, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #3
  store ptr null, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #3
  store ptr null, ptr %19, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #3
  store ptr null, ptr %20, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #3
  store ptr null, ptr %21, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #3
  store i64 -9223372036854775808, ptr %31, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #3
  store i32 0, ptr %32, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #3
  store i32 0, ptr %33, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #3
  store i32 0, ptr %34, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #3
  store i32 0, ptr %38, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #3
  %44 = load ptr, ptr %9, align 8, !tbaa !5
  store i64 0, ptr %44, align 8, !tbaa !9
  %45 = load i16, ptr @Reversed, align 2, !tbaa !13
  %46 = sext i16 %45 to i32
  %47 = load ptr, ptr %6, align 8, !tbaa !5
  %48 = getelementptr inbounds %struct.Node, ptr %47, i32 0, i32 45
  %49 = load ptr, ptr %48, align 8, !tbaa !15
  %50 = getelementptr inbounds %struct.Segment, ptr %49, i32 0, i32 0
  %51 = load i8, ptr %50, align 8, !tbaa !18
  %52 = sext i8 %51 to i32
  %53 = icmp eq i32 %46, %52
  br i1 %53, label %54, label %58

54:                                               ; preds = %4
  %55 = load ptr, ptr %6, align 8, !tbaa !5
  %56 = getelementptr inbounds %struct.Node, ptr %55, i32 0, i32 16
  %57 = load ptr, ptr %56, align 8, !tbaa !20
  br label %62

58:                                               ; preds = %4
  %59 = load ptr, ptr %6, align 8, !tbaa !5
  %60 = getelementptr inbounds %struct.Node, ptr %59, i32 0, i32 15
  %61 = load ptr, ptr %60, align 8, !tbaa !21
  br label %62

62:                                               ; preds = %58, %54
  %63 = phi ptr [ %57, %54 ], [ %61, %58 ]
  %64 = load ptr, ptr %7, align 8, !tbaa !5
  %65 = icmp ne ptr %63, %64
  br i1 %65, label %66, label %71

66:                                               ; preds = %62
  %67 = load i16, ptr @Reversed, align 2, !tbaa !13
  %68 = sext i16 %67 to i32
  %69 = xor i32 %68, 1
  %70 = trunc i32 %69 to i16
  store i16 %70, ptr @Reversed, align 2, !tbaa !13
  br label %71

71:                                               ; preds = %66, %62
  %72 = load ptr, ptr %7, align 8, !tbaa !5
  %73 = getelementptr inbounds %struct.Node, ptr %72, i32 0, i32 43
  %74 = load ptr, ptr %73, align 8, !tbaa !22
  store ptr %74, ptr %22, align 8, !tbaa !5
  br label %75

75:                                               ; preds = %1279, %71
  %76 = load ptr, ptr %22, align 8, !tbaa !5
  %77 = getelementptr inbounds %struct.Candidate, ptr %76, i32 0, i32 0
  %78 = load ptr, ptr %77, align 8, !tbaa !23
  store ptr %78, ptr %10, align 8, !tbaa !5
  %79 = icmp ne ptr %78, null
  br i1 %79, label %80, label %1282

80:                                               ; preds = %75
  %81 = load ptr, ptr %10, align 8, !tbaa !5
  %82 = load ptr, ptr %7, align 8, !tbaa !5
  %83 = getelementptr inbounds %struct.Node, ptr %82, i32 0, i32 15
  %84 = load ptr, ptr %83, align 8, !tbaa !21
  %85 = icmp eq ptr %81, %84
  br i1 %85, label %110, label %86

86:                                               ; preds = %80
  %87 = load ptr, ptr %10, align 8, !tbaa !5
  %88 = load ptr, ptr %7, align 8, !tbaa !5
  %89 = getelementptr inbounds %struct.Node, ptr %88, i32 0, i32 16
  %90 = load ptr, ptr %89, align 8, !tbaa !20
  %91 = icmp eq ptr %87, %90
  br i1 %91, label %110, label %92

92:                                               ; preds = %86
  %93 = load ptr, ptr %8, align 8, !tbaa !5
  %94 = load i64, ptr %93, align 8, !tbaa !9
  %95 = load ptr, ptr %22, align 8, !tbaa !5
  %96 = getelementptr inbounds %struct.Candidate, ptr %95, i32 0, i32 1
  %97 = load i32, ptr %96, align 8, !tbaa !25
  %98 = sext i32 %97 to i64
  %99 = sub nsw i64 %94, %98
  store i64 %99, ptr %25, align 8, !tbaa !9
  %100 = icmp sle i64 %99, 0
  br i1 %100, label %101, label %111

101:                                              ; preds = %92
  %102 = load i32, ptr @GainCriterionUsed, align 4, !tbaa !11
  %103 = icmp ne i32 %102, 0
  br i1 %103, label %104, label %111

104:                                              ; preds = %101
  %105 = load i32, ptr @ProblemType, align 4, !tbaa !11
  %106 = icmp ne i32 %105, 3
  br i1 %106, label %107, label %111

107:                                              ; preds = %104
  %108 = load i32, ptr @ProblemType, align 4, !tbaa !11
  %109 = icmp ne i32 %108, 6
  br i1 %109, label %110, label %111

110:                                              ; preds = %107, %86, %80
  br label %1279

111:                                              ; preds = %107, %104, %101, %92
  %112 = load i32, ptr %38, align 4, !tbaa !11
  %113 = add nsw i32 %112, 1
  store i32 %113, ptr %38, align 4, !tbaa !11
  %114 = load i32, ptr @MaxBreadth, align 4, !tbaa !11
  %115 = icmp sgt i32 %113, %114
  br i1 %115, label %116, label %117

116:                                              ; preds = %111
  br label %1282

117:                                              ; preds = %111
  store i32 1, ptr %35, align 4, !tbaa !11
  br label %118

118:                                              ; preds = %1275, %117
  %119 = load i32, ptr %35, align 4, !tbaa !11
  %120 = icmp sle i32 %119, 2
  br i1 %120, label %121, label %1278

121:                                              ; preds = %118
  %122 = load i32, ptr %35, align 4, !tbaa !11
  %123 = icmp eq i32 %122, 1
  br i1 %123, label %124, label %144

124:                                              ; preds = %121
  %125 = load i16, ptr @Reversed, align 2, !tbaa !13
  %126 = sext i16 %125 to i32
  %127 = load ptr, ptr %10, align 8, !tbaa !5
  %128 = getelementptr inbounds %struct.Node, ptr %127, i32 0, i32 45
  %129 = load ptr, ptr %128, align 8, !tbaa !15
  %130 = getelementptr inbounds %struct.Segment, ptr %129, i32 0, i32 0
  %131 = load i8, ptr %130, align 8, !tbaa !18
  %132 = sext i8 %131 to i32
  %133 = icmp eq i32 %126, %132
  br i1 %133, label %134, label %138

134:                                              ; preds = %124
  %135 = load ptr, ptr %10, align 8, !tbaa !5
  %136 = getelementptr inbounds %struct.Node, ptr %135, i32 0, i32 15
  %137 = load ptr, ptr %136, align 8, !tbaa !21
  br label %142

138:                                              ; preds = %124
  %139 = load ptr, ptr %10, align 8, !tbaa !5
  %140 = getelementptr inbounds %struct.Node, ptr %139, i32 0, i32 16
  %141 = load ptr, ptr %140, align 8, !tbaa !20
  br label %142

142:                                              ; preds = %138, %134
  %143 = phi ptr [ %137, %134 ], [ %141, %138 ]
  br label %164

144:                                              ; preds = %121
  %145 = load i16, ptr @Reversed, align 2, !tbaa !13
  %146 = sext i16 %145 to i32
  %147 = load ptr, ptr %10, align 8, !tbaa !5
  %148 = getelementptr inbounds %struct.Node, ptr %147, i32 0, i32 45
  %149 = load ptr, ptr %148, align 8, !tbaa !15
  %150 = getelementptr inbounds %struct.Segment, ptr %149, i32 0, i32 0
  %151 = load i8, ptr %150, align 8, !tbaa !18
  %152 = sext i8 %151 to i32
  %153 = icmp eq i32 %146, %152
  br i1 %153, label %154, label %158

154:                                              ; preds = %144
  %155 = load ptr, ptr %10, align 8, !tbaa !5
  %156 = getelementptr inbounds %struct.Node, ptr %155, i32 0, i32 16
  %157 = load ptr, ptr %156, align 8, !tbaa !20
  br label %162

158:                                              ; preds = %144
  %159 = load ptr, ptr %10, align 8, !tbaa !5
  %160 = getelementptr inbounds %struct.Node, ptr %159, i32 0, i32 15
  %161 = load ptr, ptr %160, align 8, !tbaa !21
  br label %162

162:                                              ; preds = %158, %154
  %163 = phi ptr [ %157, %154 ], [ %161, %158 ]
  br label %164

164:                                              ; preds = %162, %142
  %165 = phi ptr [ %143, %142 ], [ %163, %162 ]
  store ptr %165, ptr %11, align 8, !tbaa !5
  %166 = load ptr, ptr %10, align 8, !tbaa !5
  %167 = getelementptr inbounds %struct.Node, ptr %166, i32 0, i32 26
  %168 = load ptr, ptr %167, align 8, !tbaa !26
  %169 = load ptr, ptr %11, align 8, !tbaa !5
  %170 = icmp eq ptr %168, %169
  br i1 %170, label %182, label %171

171:                                              ; preds = %164
  %172 = load ptr, ptr %10, align 8, !tbaa !5
  %173 = getelementptr inbounds %struct.Node, ptr %172, i32 0, i32 27
  %174 = load ptr, ptr %173, align 8, !tbaa !27
  %175 = load ptr, ptr %11, align 8, !tbaa !5
  %176 = icmp eq ptr %174, %175
  br i1 %176, label %182, label %177

177:                                              ; preds = %171
  %178 = load ptr, ptr %10, align 8, !tbaa !5
  %179 = load ptr, ptr %11, align 8, !tbaa !5
  %180 = call i32 @IsCommonEdge(ptr noundef %178, ptr noundef %179)
  %181 = icmp ne i32 %180, 0
  br i1 %181, label %182, label %183

182:                                              ; preds = %177, %171, %164
  br label %1275

183:                                              ; preds = %177
  %184 = load i64, ptr %25, align 8, !tbaa !9
  %185 = load ptr, ptr @C, align 8, !tbaa !5
  %186 = load ptr, ptr %10, align 8, !tbaa !5
  %187 = load ptr, ptr %11, align 8, !tbaa !5
  %188 = call i32 %185(ptr noundef %186, ptr noundef %187)
  %189 = sext i32 %188 to i64
  %190 = add nsw i64 %184, %189
  store i64 %190, ptr %26, align 8, !tbaa !9
  %191 = load i32, ptr %35, align 4, !tbaa !11
  %192 = icmp eq i32 %191, 1
  br i1 %192, label %193, label %224

193:                                              ; preds = %183
  %194 = load ptr, ptr %11, align 8, !tbaa !5
  %195 = load ptr, ptr %6, align 8, !tbaa !5
  %196 = call i32 @Forbidden(ptr noundef %194, ptr noundef %195)
  %197 = icmp ne i32 %196, 0
  br i1 %197, label %224, label %198

198:                                              ; preds = %193
  %199 = load ptr, ptr @c, align 8, !tbaa !5
  %200 = icmp ne ptr %199, null
  br i1 %200, label %201, label %210

201:                                              ; preds = %198
  %202 = load i64, ptr %26, align 8, !tbaa !9
  %203 = load ptr, ptr @c, align 8, !tbaa !5
  %204 = load ptr, ptr %11, align 8, !tbaa !5
  %205 = load ptr, ptr %6, align 8, !tbaa !5
  %206 = call i32 %203(ptr noundef %204, ptr noundef %205)
  %207 = sext i32 %206 to i64
  %208 = sub nsw i64 %202, %207
  %209 = icmp sgt i64 %208, 0
  br i1 %209, label %210, label %224

210:                                              ; preds = %201, %198
  %211 = load i64, ptr %26, align 8, !tbaa !9
  %212 = load ptr, ptr @C, align 8, !tbaa !5
  %213 = load ptr, ptr %11, align 8, !tbaa !5
  %214 = load ptr, ptr %6, align 8, !tbaa !5
  %215 = call i32 %212(ptr noundef %213, ptr noundef %214)
  %216 = sext i32 %215 to i64
  %217 = sub nsw i64 %211, %216
  %218 = load ptr, ptr %9, align 8, !tbaa !5
  store i64 %217, ptr %218, align 8, !tbaa !9
  %219 = icmp sgt i64 %217, 0
  br i1 %219, label %220, label %224

220:                                              ; preds = %210
  %221 = load ptr, ptr %6, align 8, !tbaa !5
  %222 = load ptr, ptr %7, align 8, !tbaa !5
  %223 = load ptr, ptr %10, align 8, !tbaa !5
  call void @Flip_SL(ptr noundef %221, ptr noundef %222, ptr noundef %223)
  store ptr null, ptr %5, align 8
  store i32 1, ptr %41, align 4
  br label %1308

224:                                              ; preds = %210, %201, %193, %183
  %225 = load i32, ptr @Backtracking, align 4, !tbaa !11
  %226 = icmp ne i32 %225, 0
  br i1 %226, label %227, label %233

227:                                              ; preds = %224
  %228 = load ptr, ptr %10, align 8, !tbaa !5
  %229 = load ptr, ptr %11, align 8, !tbaa !5
  %230 = call i32 @Excludable(ptr noundef %228, ptr noundef %229)
  %231 = icmp ne i32 %230, 0
  br i1 %231, label %233, label %232

232:                                              ; preds = %227
  br label %1275

233:                                              ; preds = %227, %224
  store i32 0, ptr %39, align 4, !tbaa !11
  %234 = load ptr, ptr %11, align 8, !tbaa !5
  %235 = getelementptr inbounds %struct.Node, ptr %234, i32 0, i32 43
  %236 = load ptr, ptr %235, align 8, !tbaa !22
  store ptr %236, ptr %23, align 8, !tbaa !5
  br label %237

237:                                              ; preds = %1271, %233
  %238 = load ptr, ptr %23, align 8, !tbaa !5
  %239 = getelementptr inbounds %struct.Candidate, ptr %238, i32 0, i32 0
  %240 = load ptr, ptr %239, align 8, !tbaa !23
  store ptr %240, ptr %12, align 8, !tbaa !5
  %241 = icmp ne ptr %240, null
  br i1 %241, label %242, label %1274

242:                                              ; preds = %237
  %243 = load ptr, ptr %12, align 8, !tbaa !5
  %244 = load ptr, ptr %11, align 8, !tbaa !5
  %245 = getelementptr inbounds %struct.Node, ptr %244, i32 0, i32 15
  %246 = load ptr, ptr %245, align 8, !tbaa !21
  %247 = icmp eq ptr %243, %246
  br i1 %247, label %271, label %248

248:                                              ; preds = %242
  %249 = load ptr, ptr %12, align 8, !tbaa !5
  %250 = load ptr, ptr %11, align 8, !tbaa !5
  %251 = getelementptr inbounds %struct.Node, ptr %250, i32 0, i32 16
  %252 = load ptr, ptr %251, align 8, !tbaa !20
  %253 = icmp eq ptr %249, %252
  br i1 %253, label %271, label %254

254:                                              ; preds = %248
  %255 = load i64, ptr %26, align 8, !tbaa !9
  %256 = load ptr, ptr %23, align 8, !tbaa !5
  %257 = getelementptr inbounds %struct.Candidate, ptr %256, i32 0, i32 1
  %258 = load i32, ptr %257, align 8, !tbaa !25
  %259 = sext i32 %258 to i64
  %260 = sub nsw i64 %255, %259
  store i64 %260, ptr %27, align 8, !tbaa !9
  %261 = icmp sle i64 %260, 0
  br i1 %261, label %262, label %272

262:                                              ; preds = %254
  %263 = load i32, ptr @GainCriterionUsed, align 4, !tbaa !11
  %264 = icmp ne i32 %263, 0
  br i1 %264, label %265, label %272

265:                                              ; preds = %262
  %266 = load i32, ptr @ProblemType, align 4, !tbaa !11
  %267 = icmp ne i32 %266, 3
  br i1 %267, label %268, label %272

268:                                              ; preds = %265
  %269 = load i32, ptr @ProblemType, align 4, !tbaa !11
  %270 = icmp ne i32 %269, 6
  br i1 %270, label %271, label %272

271:                                              ; preds = %268, %248, %242
  br label %1271

272:                                              ; preds = %268, %265, %262, %254
  %273 = load i32, ptr %39, align 4, !tbaa !11
  %274 = add nsw i32 %273, 1
  store i32 %274, ptr %39, align 4, !tbaa !11
  %275 = load i32, ptr @MaxBreadth, align 4, !tbaa !11
  %276 = icmp sgt i32 %274, %275
  br i1 %276, label %277, label %278

277:                                              ; preds = %272
  br label %1274

278:                                              ; preds = %272
  store i32 1, ptr %36, align 4, !tbaa !11
  br label %279

279:                                              ; preds = %1267, %278
  %280 = load i32, ptr %36, align 4, !tbaa !11
  %281 = icmp sle i32 %280, 2
  br i1 %281, label %282, label %1270

282:                                              ; preds = %279
  %283 = load i32, ptr %35, align 4, !tbaa !11
  %284 = icmp eq i32 %283, 1
  br i1 %284, label %285, label %377

285:                                              ; preds = %282
  %286 = load i32, ptr %36, align 4, !tbaa !11
  %287 = icmp eq i32 %286, 1
  br i1 %287, label %288, label %341

288:                                              ; preds = %285
  %289 = load ptr, ptr %7, align 8, !tbaa !5
  %290 = load ptr, ptr %12, align 8, !tbaa !5
  %291 = load ptr, ptr %11, align 8, !tbaa !5
  %292 = call i32 @Between_SL(ptr noundef %289, ptr noundef %290, ptr noundef %291)
  %293 = icmp ne i32 %292, 0
  %294 = xor i1 %293, true
  %295 = zext i1 %294 to i32
  %296 = add nsw i32 1, %295
  store i32 %296, ptr %32, align 4, !tbaa !11
  %297 = load i32, ptr %32, align 4, !tbaa !11
  %298 = icmp eq i32 %297, 1
  br i1 %298, label %299, label %319

299:                                              ; preds = %288
  %300 = load i16, ptr @Reversed, align 2, !tbaa !13
  %301 = sext i16 %300 to i32
  %302 = load ptr, ptr %12, align 8, !tbaa !5
  %303 = getelementptr inbounds %struct.Node, ptr %302, i32 0, i32 45
  %304 = load ptr, ptr %303, align 8, !tbaa !15
  %305 = getelementptr inbounds %struct.Segment, ptr %304, i32 0, i32 0
  %306 = load i8, ptr %305, align 8, !tbaa !18
  %307 = sext i8 %306 to i32
  %308 = icmp eq i32 %301, %307
  br i1 %308, label %309, label %313

309:                                              ; preds = %299
  %310 = load ptr, ptr %12, align 8, !tbaa !5
  %311 = getelementptr inbounds %struct.Node, ptr %310, i32 0, i32 16
  %312 = load ptr, ptr %311, align 8, !tbaa !20
  br label %317

313:                                              ; preds = %299
  %314 = load ptr, ptr %12, align 8, !tbaa !5
  %315 = getelementptr inbounds %struct.Node, ptr %314, i32 0, i32 15
  %316 = load ptr, ptr %315, align 8, !tbaa !21
  br label %317

317:                                              ; preds = %313, %309
  %318 = phi ptr [ %312, %309 ], [ %316, %313 ]
  br label %339

319:                                              ; preds = %288
  %320 = load i16, ptr @Reversed, align 2, !tbaa !13
  %321 = sext i16 %320 to i32
  %322 = load ptr, ptr %12, align 8, !tbaa !5
  %323 = getelementptr inbounds %struct.Node, ptr %322, i32 0, i32 45
  %324 = load ptr, ptr %323, align 8, !tbaa !15
  %325 = getelementptr inbounds %struct.Segment, ptr %324, i32 0, i32 0
  %326 = load i8, ptr %325, align 8, !tbaa !18
  %327 = sext i8 %326 to i32
  %328 = icmp eq i32 %321, %327
  br i1 %328, label %329, label %333

329:                                              ; preds = %319
  %330 = load ptr, ptr %12, align 8, !tbaa !5
  %331 = getelementptr inbounds %struct.Node, ptr %330, i32 0, i32 15
  %332 = load ptr, ptr %331, align 8, !tbaa !21
  br label %337

333:                                              ; preds = %319
  %334 = load ptr, ptr %12, align 8, !tbaa !5
  %335 = getelementptr inbounds %struct.Node, ptr %334, i32 0, i32 16
  %336 = load ptr, ptr %335, align 8, !tbaa !20
  br label %337

337:                                              ; preds = %333, %329
  %338 = phi ptr [ %332, %329 ], [ %336, %333 ]
  br label %339

339:                                              ; preds = %337, %317
  %340 = phi ptr [ %318, %317 ], [ %338, %337 ]
  store ptr %340, ptr %13, align 8, !tbaa !5
  br label %376

341:                                              ; preds = %285
  %342 = load ptr, ptr %13, align 8, !tbaa !5
  %343 = load ptr, ptr %12, align 8, !tbaa !5
  %344 = getelementptr inbounds %struct.Node, ptr %343, i32 0, i32 15
  %345 = load ptr, ptr %344, align 8, !tbaa !21
  %346 = icmp eq ptr %342, %345
  br i1 %346, label %347, label %351

347:                                              ; preds = %341
  %348 = load ptr, ptr %12, align 8, !tbaa !5
  %349 = getelementptr inbounds %struct.Node, ptr %348, i32 0, i32 16
  %350 = load ptr, ptr %349, align 8, !tbaa !20
  br label %355

351:                                              ; preds = %341
  %352 = load ptr, ptr %12, align 8, !tbaa !5
  %353 = getelementptr inbounds %struct.Node, ptr %352, i32 0, i32 15
  %354 = load ptr, ptr %353, align 8, !tbaa !21
  br label %355

355:                                              ; preds = %351, %347
  %356 = phi ptr [ %350, %347 ], [ %354, %351 ]
  store ptr %356, ptr %13, align 8, !tbaa !5
  %357 = load ptr, ptr %12, align 8, !tbaa !5
  %358 = load ptr, ptr %6, align 8, !tbaa !5
  %359 = icmp eq ptr %357, %358
  br i1 %359, label %360, label %364

360:                                              ; preds = %355
  %361 = load ptr, ptr %13, align 8, !tbaa !5
  %362 = load ptr, ptr %7, align 8, !tbaa !5
  %363 = icmp eq ptr %361, %362
  br i1 %363, label %372, label %364

364:                                              ; preds = %360, %355
  %365 = load ptr, ptr %12, align 8, !tbaa !5
  %366 = load ptr, ptr %7, align 8, !tbaa !5
  %367 = icmp eq ptr %365, %366
  br i1 %367, label %368, label %373

368:                                              ; preds = %364
  %369 = load ptr, ptr %13, align 8, !tbaa !5
  %370 = load ptr, ptr %6, align 8, !tbaa !5
  %371 = icmp eq ptr %369, %370
  br i1 %371, label %372, label %373

372:                                              ; preds = %368, %360
  br label %1267

373:                                              ; preds = %368, %364
  %374 = load i32, ptr %32, align 4, !tbaa !11
  %375 = add nsw i32 %374, 2
  store i32 %375, ptr %32, align 4, !tbaa !11
  br label %376

376:                                              ; preds = %373, %339
  br label %465

377:                                              ; preds = %282
  %378 = load ptr, ptr %7, align 8, !tbaa !5
  %379 = load ptr, ptr %12, align 8, !tbaa !5
  %380 = load ptr, ptr %10, align 8, !tbaa !5
  %381 = call i32 @Between_SL(ptr noundef %378, ptr noundef %379, ptr noundef %380)
  %382 = icmp ne i32 %381, 0
  br i1 %382, label %383, label %435

383:                                              ; preds = %377
  %384 = load i32, ptr %36, align 4, !tbaa !11
  %385 = add nsw i32 4, %384
  store i32 %385, ptr %32, align 4, !tbaa !11
  %386 = load i32, ptr %36, align 4, !tbaa !11
  %387 = icmp eq i32 %386, 1
  br i1 %387, label %388, label %408

388:                                              ; preds = %383
  %389 = load i16, ptr @Reversed, align 2, !tbaa !13
  %390 = sext i16 %389 to i32
  %391 = load ptr, ptr %12, align 8, !tbaa !5
  %392 = getelementptr inbounds %struct.Node, ptr %391, i32 0, i32 45
  %393 = load ptr, ptr %392, align 8, !tbaa !15
  %394 = getelementptr inbounds %struct.Segment, ptr %393, i32 0, i32 0
  %395 = load i8, ptr %394, align 8, !tbaa !18
  %396 = sext i8 %395 to i32
  %397 = icmp eq i32 %390, %396
  br i1 %397, label %398, label %402

398:                                              ; preds = %388
  %399 = load ptr, ptr %12, align 8, !tbaa !5
  %400 = getelementptr inbounds %struct.Node, ptr %399, i32 0, i32 16
  %401 = load ptr, ptr %400, align 8, !tbaa !20
  br label %406

402:                                              ; preds = %388
  %403 = load ptr, ptr %12, align 8, !tbaa !5
  %404 = getelementptr inbounds %struct.Node, ptr %403, i32 0, i32 15
  %405 = load ptr, ptr %404, align 8, !tbaa !21
  br label %406

406:                                              ; preds = %402, %398
  %407 = phi ptr [ %401, %398 ], [ %405, %402 ]
  br label %428

408:                                              ; preds = %383
  %409 = load i16, ptr @Reversed, align 2, !tbaa !13
  %410 = sext i16 %409 to i32
  %411 = load ptr, ptr %12, align 8, !tbaa !5
  %412 = getelementptr inbounds %struct.Node, ptr %411, i32 0, i32 45
  %413 = load ptr, ptr %412, align 8, !tbaa !15
  %414 = getelementptr inbounds %struct.Segment, ptr %413, i32 0, i32 0
  %415 = load i8, ptr %414, align 8, !tbaa !18
  %416 = sext i8 %415 to i32
  %417 = icmp eq i32 %410, %416
  br i1 %417, label %418, label %422

418:                                              ; preds = %408
  %419 = load ptr, ptr %12, align 8, !tbaa !5
  %420 = getelementptr inbounds %struct.Node, ptr %419, i32 0, i32 15
  %421 = load ptr, ptr %420, align 8, !tbaa !21
  br label %426

422:                                              ; preds = %408
  %423 = load ptr, ptr %12, align 8, !tbaa !5
  %424 = getelementptr inbounds %struct.Node, ptr %423, i32 0, i32 16
  %425 = load ptr, ptr %424, align 8, !tbaa !20
  br label %426

426:                                              ; preds = %422, %418
  %427 = phi ptr [ %421, %418 ], [ %425, %422 ]
  br label %428

428:                                              ; preds = %426, %406
  %429 = phi ptr [ %407, %406 ], [ %427, %426 ]
  store ptr %429, ptr %13, align 8, !tbaa !5
  %430 = load ptr, ptr %13, align 8, !tbaa !5
  %431 = load ptr, ptr %6, align 8, !tbaa !5
  %432 = icmp eq ptr %430, %431
  br i1 %432, label %433, label %434

433:                                              ; preds = %428
  br label %1267

434:                                              ; preds = %428
  br label %464

435:                                              ; preds = %377
  %436 = load i32, ptr %36, align 4, !tbaa !11
  %437 = icmp eq i32 %436, 2
  br i1 %437, label %438, label %439

438:                                              ; preds = %435
  br label %1270

439:                                              ; preds = %435
  store i32 7, ptr %32, align 4, !tbaa !11
  %440 = load i16, ptr @Reversed, align 2, !tbaa !13
  %441 = sext i16 %440 to i32
  %442 = load ptr, ptr %12, align 8, !tbaa !5
  %443 = getelementptr inbounds %struct.Node, ptr %442, i32 0, i32 45
  %444 = load ptr, ptr %443, align 8, !tbaa !15
  %445 = getelementptr inbounds %struct.Segment, ptr %444, i32 0, i32 0
  %446 = load i8, ptr %445, align 8, !tbaa !18
  %447 = sext i8 %446 to i32
  %448 = icmp eq i32 %441, %447
  br i1 %448, label %449, label %453

449:                                              ; preds = %439
  %450 = load ptr, ptr %12, align 8, !tbaa !5
  %451 = getelementptr inbounds %struct.Node, ptr %450, i32 0, i32 15
  %452 = load ptr, ptr %451, align 8, !tbaa !21
  br label %457

453:                                              ; preds = %439
  %454 = load ptr, ptr %12, align 8, !tbaa !5
  %455 = getelementptr inbounds %struct.Node, ptr %454, i32 0, i32 16
  %456 = load ptr, ptr %455, align 8, !tbaa !20
  br label %457

457:                                              ; preds = %453, %449
  %458 = phi ptr [ %452, %449 ], [ %456, %453 ]
  store ptr %458, ptr %13, align 8, !tbaa !5
  %459 = load ptr, ptr %13, align 8, !tbaa !5
  %460 = load ptr, ptr %7, align 8, !tbaa !5
  %461 = icmp eq ptr %459, %460
  br i1 %461, label %462, label %463

462:                                              ; preds = %457
  br label %1267

463:                                              ; preds = %457
  br label %464

464:                                              ; preds = %463, %434
  br label %465

465:                                              ; preds = %464, %376
  %466 = load ptr, ptr %12, align 8, !tbaa !5
  %467 = getelementptr inbounds %struct.Node, ptr %466, i32 0, i32 26
  %468 = load ptr, ptr %467, align 8, !tbaa !26
  %469 = load ptr, ptr %13, align 8, !tbaa !5
  %470 = icmp eq ptr %468, %469
  br i1 %470, label %482, label %471

471:                                              ; preds = %465
  %472 = load ptr, ptr %12, align 8, !tbaa !5
  %473 = getelementptr inbounds %struct.Node, ptr %472, i32 0, i32 27
  %474 = load ptr, ptr %473, align 8, !tbaa !27
  %475 = load ptr, ptr %13, align 8, !tbaa !5
  %476 = icmp eq ptr %474, %475
  br i1 %476, label %482, label %477

477:                                              ; preds = %471
  %478 = load ptr, ptr %12, align 8, !tbaa !5
  %479 = load ptr, ptr %13, align 8, !tbaa !5
  %480 = call i32 @IsCommonEdge(ptr noundef %478, ptr noundef %479)
  %481 = icmp ne i32 %480, 0
  br i1 %481, label %482, label %483

482:                                              ; preds = %477, %471, %465
  br label %1267

483:                                              ; preds = %477
  %484 = load i64, ptr %27, align 8, !tbaa !9
  %485 = load ptr, ptr @C, align 8, !tbaa !5
  %486 = load ptr, ptr %12, align 8, !tbaa !5
  %487 = load ptr, ptr %13, align 8, !tbaa !5
  %488 = call i32 %485(ptr noundef %486, ptr noundef %487)
  %489 = sext i32 %488 to i64
  %490 = add nsw i64 %484, %489
  store i64 %490, ptr %28, align 8, !tbaa !9
  %491 = load i32, ptr %32, align 4, !tbaa !11
  %492 = icmp sle i32 %491, 2
  br i1 %492, label %499, label %493

493:                                              ; preds = %483
  %494 = load i32, ptr %32, align 4, !tbaa !11
  %495 = icmp eq i32 %494, 5
  br i1 %495, label %499, label %496

496:                                              ; preds = %493
  %497 = load i32, ptr %32, align 4, !tbaa !11
  %498 = icmp eq i32 %497, 6
  br i1 %498, label %499, label %534

499:                                              ; preds = %496, %493, %483
  %500 = load ptr, ptr %13, align 8, !tbaa !5
  %501 = load ptr, ptr %6, align 8, !tbaa !5
  %502 = call i32 @Forbidden(ptr noundef %500, ptr noundef %501)
  %503 = icmp ne i32 %502, 0
  br i1 %503, label %534, label %504

504:                                              ; preds = %499
  %505 = load ptr, ptr @c, align 8, !tbaa !5
  %506 = icmp ne ptr %505, null
  br i1 %506, label %507, label %516

507:                                              ; preds = %504
  %508 = load i64, ptr %28, align 8, !tbaa !9
  %509 = load ptr, ptr @c, align 8, !tbaa !5
  %510 = load ptr, ptr %13, align 8, !tbaa !5
  %511 = load ptr, ptr %6, align 8, !tbaa !5
  %512 = call i32 %509(ptr noundef %510, ptr noundef %511)
  %513 = sext i32 %512 to i64
  %514 = sub nsw i64 %508, %513
  %515 = icmp sgt i64 %514, 0
  br i1 %515, label %516, label %534

516:                                              ; preds = %507, %504
  %517 = load i64, ptr %28, align 8, !tbaa !9
  %518 = load ptr, ptr @C, align 8, !tbaa !5
  %519 = load ptr, ptr %13, align 8, !tbaa !5
  %520 = load ptr, ptr %6, align 8, !tbaa !5
  %521 = call i32 %518(ptr noundef %519, ptr noundef %520)
  %522 = sext i32 %521 to i64
  %523 = sub nsw i64 %517, %522
  %524 = load ptr, ptr %9, align 8, !tbaa !5
  store i64 %523, ptr %524, align 8, !tbaa !9
  %525 = icmp sgt i64 %523, 0
  br i1 %525, label %526, label %534

526:                                              ; preds = %516
  %527 = load ptr, ptr %6, align 8, !tbaa !5
  %528 = load ptr, ptr %7, align 8, !tbaa !5
  %529 = load ptr, ptr %10, align 8, !tbaa !5
  %530 = load ptr, ptr %11, align 8, !tbaa !5
  %531 = load ptr, ptr %12, align 8, !tbaa !5
  %532 = load ptr, ptr %13, align 8, !tbaa !5
  %533 = load i32, ptr %32, align 4, !tbaa !11
  call void @Make3OptMove(ptr noundef %527, ptr noundef %528, ptr noundef %529, ptr noundef %530, ptr noundef %531, ptr noundef %532, i32 noundef %533)
  store ptr null, ptr %5, align 8
  store i32 1, ptr %41, align 4
  br label %1308

534:                                              ; preds = %516, %507, %499, %496
  %535 = load i32, ptr @Backtracking, align 4, !tbaa !11
  %536 = icmp ne i32 %535, 0
  br i1 %536, label %537, label %543

537:                                              ; preds = %534
  %538 = load ptr, ptr %12, align 8, !tbaa !5
  %539 = load ptr, ptr %13, align 8, !tbaa !5
  %540 = call i32 @Excludable(ptr noundef %538, ptr noundef %539)
  %541 = icmp ne i32 %540, 0
  br i1 %541, label %543, label %542

542:                                              ; preds = %537
  br label %1267

543:                                              ; preds = %537, %534
  store i32 0, ptr %40, align 4, !tbaa !11
  %544 = load ptr, ptr %13, align 8, !tbaa !5
  %545 = getelementptr inbounds %struct.Node, ptr %544, i32 0, i32 43
  %546 = load ptr, ptr %545, align 8, !tbaa !22
  store ptr %546, ptr %24, align 8, !tbaa !5
  br label %547

547:                                              ; preds = %1263, %543
  %548 = load ptr, ptr %24, align 8, !tbaa !5
  %549 = getelementptr inbounds %struct.Candidate, ptr %548, i32 0, i32 0
  %550 = load ptr, ptr %549, align 8, !tbaa !23
  store ptr %550, ptr %14, align 8, !tbaa !5
  %551 = icmp ne ptr %550, null
  br i1 %551, label %552, label %1266

552:                                              ; preds = %547
  %553 = load ptr, ptr %14, align 8, !tbaa !5
  %554 = load ptr, ptr %13, align 8, !tbaa !5
  %555 = getelementptr inbounds %struct.Node, ptr %554, i32 0, i32 15
  %556 = load ptr, ptr %555, align 8, !tbaa !21
  %557 = icmp eq ptr %553, %556
  br i1 %557, label %597, label %558

558:                                              ; preds = %552
  %559 = load ptr, ptr %14, align 8, !tbaa !5
  %560 = load ptr, ptr %13, align 8, !tbaa !5
  %561 = getelementptr inbounds %struct.Node, ptr %560, i32 0, i32 16
  %562 = load ptr, ptr %561, align 8, !tbaa !20
  %563 = icmp eq ptr %559, %562
  br i1 %563, label %597, label %564

564:                                              ; preds = %558
  %565 = load ptr, ptr %13, align 8, !tbaa !5
  %566 = load ptr, ptr %7, align 8, !tbaa !5
  %567 = icmp eq ptr %565, %566
  br i1 %567, label %568, label %572

568:                                              ; preds = %564
  %569 = load ptr, ptr %14, align 8, !tbaa !5
  %570 = load ptr, ptr %10, align 8, !tbaa !5
  %571 = icmp eq ptr %569, %570
  br i1 %571, label %597, label %572

572:                                              ; preds = %568, %564
  %573 = load ptr, ptr %13, align 8, !tbaa !5
  %574 = load ptr, ptr %10, align 8, !tbaa !5
  %575 = icmp eq ptr %573, %574
  br i1 %575, label %576, label %580

576:                                              ; preds = %572
  %577 = load ptr, ptr %14, align 8, !tbaa !5
  %578 = load ptr, ptr %7, align 8, !tbaa !5
  %579 = icmp eq ptr %577, %578
  br i1 %579, label %597, label %580

580:                                              ; preds = %576, %572
  %581 = load i64, ptr %28, align 8, !tbaa !9
  %582 = load ptr, ptr %24, align 8, !tbaa !5
  %583 = getelementptr inbounds %struct.Candidate, ptr %582, i32 0, i32 1
  %584 = load i32, ptr %583, align 8, !tbaa !25
  %585 = sext i32 %584 to i64
  %586 = sub nsw i64 %581, %585
  store i64 %586, ptr %29, align 8, !tbaa !9
  %587 = icmp sle i64 %586, 0
  br i1 %587, label %588, label %598

588:                                              ; preds = %580
  %589 = load i32, ptr @GainCriterionUsed, align 4, !tbaa !11
  %590 = icmp ne i32 %589, 0
  br i1 %590, label %591, label %598

591:                                              ; preds = %588
  %592 = load i32, ptr @ProblemType, align 4, !tbaa !11
  %593 = icmp ne i32 %592, 3
  br i1 %593, label %594, label %598

594:                                              ; preds = %591
  %595 = load i32, ptr @ProblemType, align 4, !tbaa !11
  %596 = icmp ne i32 %595, 6
  br i1 %596, label %597, label %598

597:                                              ; preds = %594, %576, %568, %558, %552
  br label %1263

598:                                              ; preds = %594, %591, %588, %580
  %599 = load i32, ptr %40, align 4, !tbaa !11
  %600 = add nsw i32 %599, 1
  store i32 %600, ptr %40, align 4, !tbaa !11
  %601 = load i32, ptr @MaxBreadth, align 4, !tbaa !11
  %602 = icmp sgt i32 %600, %601
  br i1 %602, label %603, label %604

603:                                              ; preds = %598
  br label %1266

604:                                              ; preds = %598
  store i32 1, ptr %37, align 4, !tbaa !11
  br label %605

605:                                              ; preds = %1259, %604
  %606 = load i32, ptr %37, align 4, !tbaa !11
  %607 = icmp sle i32 %606, 2
  br i1 %607, label %608, label %1262

608:                                              ; preds = %605
  %609 = load i32, ptr %37, align 4, !tbaa !11
  %610 = icmp eq i32 %609, 1
  br i1 %610, label %611, label %892

611:                                              ; preds = %608
  %612 = load i32, ptr %32, align 4, !tbaa !11
  store i32 %612, ptr %33, align 4, !tbaa !11
  store ptr null, ptr %15, align 8, !tbaa !5
  %613 = load i32, ptr %32, align 4, !tbaa !11
  switch i32 %613, label %887 [
    i32 1, label %614
    i32 2, label %662
    i32 3, label %710
    i32 4, label %737
    i32 5, label %792
    i32 6, label %812
    i32 7, label %860
  ]

614:                                              ; preds = %611
  %615 = load ptr, ptr %7, align 8, !tbaa !5
  %616 = load ptr, ptr %14, align 8, !tbaa !5
  %617 = load ptr, ptr %12, align 8, !tbaa !5
  %618 = call i32 @Between_SL(ptr noundef %615, ptr noundef %616, ptr noundef %617)
  %619 = icmp ne i32 %618, 0
  br i1 %619, label %620, label %640

620:                                              ; preds = %614
  %621 = load i16, ptr @Reversed, align 2, !tbaa !13
  %622 = sext i16 %621 to i32
  %623 = load ptr, ptr %14, align 8, !tbaa !5
  %624 = getelementptr inbounds %struct.Node, ptr %623, i32 0, i32 45
  %625 = load ptr, ptr %624, align 8, !tbaa !15
  %626 = getelementptr inbounds %struct.Segment, ptr %625, i32 0, i32 0
  %627 = load i8, ptr %626, align 8, !tbaa !18
  %628 = sext i8 %627 to i32
  %629 = icmp eq i32 %622, %628
  br i1 %629, label %630, label %634

630:                                              ; preds = %620
  %631 = load ptr, ptr %14, align 8, !tbaa !5
  %632 = getelementptr inbounds %struct.Node, ptr %631, i32 0, i32 16
  %633 = load ptr, ptr %632, align 8, !tbaa !20
  br label %638

634:                                              ; preds = %620
  %635 = load ptr, ptr %14, align 8, !tbaa !5
  %636 = getelementptr inbounds %struct.Node, ptr %635, i32 0, i32 15
  %637 = load ptr, ptr %636, align 8, !tbaa !21
  br label %638

638:                                              ; preds = %634, %630
  %639 = phi ptr [ %633, %630 ], [ %637, %634 ]
  br label %660

640:                                              ; preds = %614
  %641 = load i16, ptr @Reversed, align 2, !tbaa !13
  %642 = sext i16 %641 to i32
  %643 = load ptr, ptr %14, align 8, !tbaa !5
  %644 = getelementptr inbounds %struct.Node, ptr %643, i32 0, i32 45
  %645 = load ptr, ptr %644, align 8, !tbaa !15
  %646 = getelementptr inbounds %struct.Segment, ptr %645, i32 0, i32 0
  %647 = load i8, ptr %646, align 8, !tbaa !18
  %648 = sext i8 %647 to i32
  %649 = icmp eq i32 %642, %648
  br i1 %649, label %650, label %654

650:                                              ; preds = %640
  %651 = load ptr, ptr %14, align 8, !tbaa !5
  %652 = getelementptr inbounds %struct.Node, ptr %651, i32 0, i32 15
  %653 = load ptr, ptr %652, align 8, !tbaa !21
  br label %658

654:                                              ; preds = %640
  %655 = load ptr, ptr %14, align 8, !tbaa !5
  %656 = getelementptr inbounds %struct.Node, ptr %655, i32 0, i32 16
  %657 = load ptr, ptr %656, align 8, !tbaa !20
  br label %658

658:                                              ; preds = %654, %650
  %659 = phi ptr [ %653, %650 ], [ %657, %654 ]
  br label %660

660:                                              ; preds = %658, %638
  %661 = phi ptr [ %639, %638 ], [ %659, %658 ]
  store ptr %661, ptr %15, align 8, !tbaa !5
  br label %887

662:                                              ; preds = %611
  %663 = load ptr, ptr %10, align 8, !tbaa !5
  %664 = load ptr, ptr %14, align 8, !tbaa !5
  %665 = load ptr, ptr %13, align 8, !tbaa !5
  %666 = call i32 @Between_SL(ptr noundef %663, ptr noundef %664, ptr noundef %665)
  %667 = icmp ne i32 %666, 0
  br i1 %667, label %668, label %688

668:                                              ; preds = %662
  %669 = load i16, ptr @Reversed, align 2, !tbaa !13
  %670 = sext i16 %669 to i32
  %671 = load ptr, ptr %14, align 8, !tbaa !5
  %672 = getelementptr inbounds %struct.Node, ptr %671, i32 0, i32 45
  %673 = load ptr, ptr %672, align 8, !tbaa !15
  %674 = getelementptr inbounds %struct.Segment, ptr %673, i32 0, i32 0
  %675 = load i8, ptr %674, align 8, !tbaa !18
  %676 = sext i8 %675 to i32
  %677 = icmp eq i32 %670, %676
  br i1 %677, label %678, label %682

678:                                              ; preds = %668
  %679 = load ptr, ptr %14, align 8, !tbaa !5
  %680 = getelementptr inbounds %struct.Node, ptr %679, i32 0, i32 16
  %681 = load ptr, ptr %680, align 8, !tbaa !20
  br label %686

682:                                              ; preds = %668
  %683 = load ptr, ptr %14, align 8, !tbaa !5
  %684 = getelementptr inbounds %struct.Node, ptr %683, i32 0, i32 15
  %685 = load ptr, ptr %684, align 8, !tbaa !21
  br label %686

686:                                              ; preds = %682, %678
  %687 = phi ptr [ %681, %678 ], [ %685, %682 ]
  br label %708

688:                                              ; preds = %662
  %689 = load i16, ptr @Reversed, align 2, !tbaa !13
  %690 = sext i16 %689 to i32
  %691 = load ptr, ptr %14, align 8, !tbaa !5
  %692 = getelementptr inbounds %struct.Node, ptr %691, i32 0, i32 45
  %693 = load ptr, ptr %692, align 8, !tbaa !15
  %694 = getelementptr inbounds %struct.Segment, ptr %693, i32 0, i32 0
  %695 = load i8, ptr %694, align 8, !tbaa !18
  %696 = sext i8 %695 to i32
  %697 = icmp eq i32 %690, %696
  br i1 %697, label %698, label %702

698:                                              ; preds = %688
  %699 = load ptr, ptr %14, align 8, !tbaa !5
  %700 = getelementptr inbounds %struct.Node, ptr %699, i32 0, i32 15
  %701 = load ptr, ptr %700, align 8, !tbaa !21
  br label %706

702:                                              ; preds = %688
  %703 = load ptr, ptr %14, align 8, !tbaa !5
  %704 = getelementptr inbounds %struct.Node, ptr %703, i32 0, i32 16
  %705 = load ptr, ptr %704, align 8, !tbaa !20
  br label %706

706:                                              ; preds = %702, %698
  %707 = phi ptr [ %701, %698 ], [ %705, %702 ]
  br label %708

708:                                              ; preds = %706, %686
  %709 = phi ptr [ %687, %686 ], [ %707, %706 ]
  store ptr %709, ptr %15, align 8, !tbaa !5
  br label %887

710:                                              ; preds = %611
  %711 = load ptr, ptr %12, align 8, !tbaa !5
  %712 = load ptr, ptr %14, align 8, !tbaa !5
  %713 = load ptr, ptr %11, align 8, !tbaa !5
  %714 = call i32 @Between_SL(ptr noundef %711, ptr noundef %712, ptr noundef %713)
  %715 = icmp ne i32 %714, 0
  br i1 %715, label %716, label %736

716:                                              ; preds = %710
  %717 = load i16, ptr @Reversed, align 2, !tbaa !13
  %718 = sext i16 %717 to i32
  %719 = load ptr, ptr %14, align 8, !tbaa !5
  %720 = getelementptr inbounds %struct.Node, ptr %719, i32 0, i32 45
  %721 = load ptr, ptr %720, align 8, !tbaa !15
  %722 = getelementptr inbounds %struct.Segment, ptr %721, i32 0, i32 0
  %723 = load i8, ptr %722, align 8, !tbaa !18
  %724 = sext i8 %723 to i32
  %725 = icmp eq i32 %718, %724
  br i1 %725, label %726, label %730

726:                                              ; preds = %716
  %727 = load ptr, ptr %14, align 8, !tbaa !5
  %728 = getelementptr inbounds %struct.Node, ptr %727, i32 0, i32 16
  %729 = load ptr, ptr %728, align 8, !tbaa !20
  br label %734

730:                                              ; preds = %716
  %731 = load ptr, ptr %14, align 8, !tbaa !5
  %732 = getelementptr inbounds %struct.Node, ptr %731, i32 0, i32 15
  %733 = load ptr, ptr %732, align 8, !tbaa !21
  br label %734

734:                                              ; preds = %730, %726
  %735 = phi ptr [ %729, %726 ], [ %733, %730 ]
  store ptr %735, ptr %15, align 8, !tbaa !5
  br label %736

736:                                              ; preds = %734, %710
  br label %887

737:                                              ; preds = %611
  %738 = load ptr, ptr %7, align 8, !tbaa !5
  %739 = load ptr, ptr %14, align 8, !tbaa !5
  %740 = load ptr, ptr %12, align 8, !tbaa !5
  %741 = call i32 @Between_SL(ptr noundef %738, ptr noundef %739, ptr noundef %740)
  %742 = icmp ne i32 %741, 0
  br i1 %742, label %743, label %791

743:                                              ; preds = %737
  %744 = load ptr, ptr %7, align 8, !tbaa !5
  %745 = load ptr, ptr %14, align 8, !tbaa !5
  %746 = load ptr, ptr %11, align 8, !tbaa !5
  %747 = call i32 @Between_SL(ptr noundef %744, ptr noundef %745, ptr noundef %746)
  %748 = icmp ne i32 %747, 0
  br i1 %748, label %749, label %769

749:                                              ; preds = %743
  %750 = load i16, ptr @Reversed, align 2, !tbaa !13
  %751 = sext i16 %750 to i32
  %752 = load ptr, ptr %14, align 8, !tbaa !5
  %753 = getelementptr inbounds %struct.Node, ptr %752, i32 0, i32 45
  %754 = load ptr, ptr %753, align 8, !tbaa !15
  %755 = getelementptr inbounds %struct.Segment, ptr %754, i32 0, i32 0
  %756 = load i8, ptr %755, align 8, !tbaa !18
  %757 = sext i8 %756 to i32
  %758 = icmp eq i32 %751, %757
  br i1 %758, label %759, label %763

759:                                              ; preds = %749
  %760 = load ptr, ptr %14, align 8, !tbaa !5
  %761 = getelementptr inbounds %struct.Node, ptr %760, i32 0, i32 16
  %762 = load ptr, ptr %761, align 8, !tbaa !20
  br label %767

763:                                              ; preds = %749
  %764 = load ptr, ptr %14, align 8, !tbaa !5
  %765 = getelementptr inbounds %struct.Node, ptr %764, i32 0, i32 15
  %766 = load ptr, ptr %765, align 8, !tbaa !21
  br label %767

767:                                              ; preds = %763, %759
  %768 = phi ptr [ %762, %759 ], [ %766, %763 ]
  br label %789

769:                                              ; preds = %743
  %770 = load i16, ptr @Reversed, align 2, !tbaa !13
  %771 = sext i16 %770 to i32
  %772 = load ptr, ptr %14, align 8, !tbaa !5
  %773 = getelementptr inbounds %struct.Node, ptr %772, i32 0, i32 45
  %774 = load ptr, ptr %773, align 8, !tbaa !15
  %775 = getelementptr inbounds %struct.Segment, ptr %774, i32 0, i32 0
  %776 = load i8, ptr %775, align 8, !tbaa !18
  %777 = sext i8 %776 to i32
  %778 = icmp eq i32 %771, %777
  br i1 %778, label %779, label %783

779:                                              ; preds = %769
  %780 = load ptr, ptr %14, align 8, !tbaa !5
  %781 = getelementptr inbounds %struct.Node, ptr %780, i32 0, i32 15
  %782 = load ptr, ptr %781, align 8, !tbaa !21
  br label %787

783:                                              ; preds = %769
  %784 = load ptr, ptr %14, align 8, !tbaa !5
  %785 = getelementptr inbounds %struct.Node, ptr %784, i32 0, i32 16
  %786 = load ptr, ptr %785, align 8, !tbaa !20
  br label %787

787:                                              ; preds = %783, %779
  %788 = phi ptr [ %782, %779 ], [ %786, %783 ]
  br label %789

789:                                              ; preds = %787, %767
  %790 = phi ptr [ %768, %767 ], [ %788, %787 ]
  store ptr %790, ptr %15, align 8, !tbaa !5
  br label %791

791:                                              ; preds = %789, %737
  br label %887

792:                                              ; preds = %611
  %793 = load i16, ptr @Reversed, align 2, !tbaa !13
  %794 = sext i16 %793 to i32
  %795 = load ptr, ptr %14, align 8, !tbaa !5
  %796 = getelementptr inbounds %struct.Node, ptr %795, i32 0, i32 45
  %797 = load ptr, ptr %796, align 8, !tbaa !15
  %798 = getelementptr inbounds %struct.Segment, ptr %797, i32 0, i32 0
  %799 = load i8, ptr %798, align 8, !tbaa !18
  %800 = sext i8 %799 to i32
  %801 = icmp eq i32 %794, %800
  br i1 %801, label %802, label %806

802:                                              ; preds = %792
  %803 = load ptr, ptr %14, align 8, !tbaa !5
  %804 = getelementptr inbounds %struct.Node, ptr %803, i32 0, i32 15
  %805 = load ptr, ptr %804, align 8, !tbaa !21
  br label %810

806:                                              ; preds = %792
  %807 = load ptr, ptr %14, align 8, !tbaa !5
  %808 = getelementptr inbounds %struct.Node, ptr %807, i32 0, i32 16
  %809 = load ptr, ptr %808, align 8, !tbaa !20
  br label %810

810:                                              ; preds = %806, %802
  %811 = phi ptr [ %805, %802 ], [ %809, %806 ]
  store ptr %811, ptr %15, align 8, !tbaa !5
  br label %887

812:                                              ; preds = %611
  %813 = load ptr, ptr %7, align 8, !tbaa !5
  %814 = load ptr, ptr %14, align 8, !tbaa !5
  %815 = load ptr, ptr %10, align 8, !tbaa !5
  %816 = call i32 @Between_SL(ptr noundef %813, ptr noundef %814, ptr noundef %815)
  %817 = icmp ne i32 %816, 0
  br i1 %817, label %818, label %838

818:                                              ; preds = %812
  %819 = load i16, ptr @Reversed, align 2, !tbaa !13
  %820 = sext i16 %819 to i32
  %821 = load ptr, ptr %14, align 8, !tbaa !5
  %822 = getelementptr inbounds %struct.Node, ptr %821, i32 0, i32 45
  %823 = load ptr, ptr %822, align 8, !tbaa !15
  %824 = getelementptr inbounds %struct.Segment, ptr %823, i32 0, i32 0
  %825 = load i8, ptr %824, align 8, !tbaa !18
  %826 = sext i8 %825 to i32
  %827 = icmp eq i32 %820, %826
  br i1 %827, label %828, label %832

828:                                              ; preds = %818
  %829 = load ptr, ptr %14, align 8, !tbaa !5
  %830 = getelementptr inbounds %struct.Node, ptr %829, i32 0, i32 16
  %831 = load ptr, ptr %830, align 8, !tbaa !20
  br label %836

832:                                              ; preds = %818
  %833 = load ptr, ptr %14, align 8, !tbaa !5
  %834 = getelementptr inbounds %struct.Node, ptr %833, i32 0, i32 15
  %835 = load ptr, ptr %834, align 8, !tbaa !21
  br label %836

836:                                              ; preds = %832, %828
  %837 = phi ptr [ %831, %828 ], [ %835, %832 ]
  br label %858

838:                                              ; preds = %812
  %839 = load i16, ptr @Reversed, align 2, !tbaa !13
  %840 = sext i16 %839 to i32
  %841 = load ptr, ptr %14, align 8, !tbaa !5
  %842 = getelementptr inbounds %struct.Node, ptr %841, i32 0, i32 45
  %843 = load ptr, ptr %842, align 8, !tbaa !15
  %844 = getelementptr inbounds %struct.Segment, ptr %843, i32 0, i32 0
  %845 = load i8, ptr %844, align 8, !tbaa !18
  %846 = sext i8 %845 to i32
  %847 = icmp eq i32 %840, %846
  br i1 %847, label %848, label %852

848:                                              ; preds = %838
  %849 = load ptr, ptr %14, align 8, !tbaa !5
  %850 = getelementptr inbounds %struct.Node, ptr %849, i32 0, i32 15
  %851 = load ptr, ptr %850, align 8, !tbaa !21
  br label %856

852:                                              ; preds = %838
  %853 = load ptr, ptr %14, align 8, !tbaa !5
  %854 = getelementptr inbounds %struct.Node, ptr %853, i32 0, i32 16
  %855 = load ptr, ptr %854, align 8, !tbaa !20
  br label %856

856:                                              ; preds = %852, %848
  %857 = phi ptr [ %851, %848 ], [ %855, %852 ]
  br label %858

858:                                              ; preds = %856, %836
  %859 = phi ptr [ %837, %836 ], [ %857, %856 ]
  store ptr %859, ptr %15, align 8, !tbaa !5
  br label %887

860:                                              ; preds = %611
  %861 = load ptr, ptr %7, align 8, !tbaa !5
  %862 = load ptr, ptr %14, align 8, !tbaa !5
  %863 = load ptr, ptr %10, align 8, !tbaa !5
  %864 = call i32 @Between_SL(ptr noundef %861, ptr noundef %862, ptr noundef %863)
  %865 = icmp ne i32 %864, 0
  br i1 %865, label %866, label %886

866:                                              ; preds = %860
  %867 = load i16, ptr @Reversed, align 2, !tbaa !13
  %868 = sext i16 %867 to i32
  %869 = load ptr, ptr %14, align 8, !tbaa !5
  %870 = getelementptr inbounds %struct.Node, ptr %869, i32 0, i32 45
  %871 = load ptr, ptr %870, align 8, !tbaa !15
  %872 = getelementptr inbounds %struct.Segment, ptr %871, i32 0, i32 0
  %873 = load i8, ptr %872, align 8, !tbaa !18
  %874 = sext i8 %873 to i32
  %875 = icmp eq i32 %868, %874
  br i1 %875, label %876, label %880

876:                                              ; preds = %866
  %877 = load ptr, ptr %14, align 8, !tbaa !5
  %878 = getelementptr inbounds %struct.Node, ptr %877, i32 0, i32 16
  %879 = load ptr, ptr %878, align 8, !tbaa !20
  br label %884

880:                                              ; preds = %866
  %881 = load ptr, ptr %14, align 8, !tbaa !5
  %882 = getelementptr inbounds %struct.Node, ptr %881, i32 0, i32 15
  %883 = load ptr, ptr %882, align 8, !tbaa !21
  br label %884

884:                                              ; preds = %880, %876
  %885 = phi ptr [ %879, %876 ], [ %883, %880 ]
  store ptr %885, ptr %15, align 8, !tbaa !5
  br label %886

886:                                              ; preds = %884, %860
  br label %887

887:                                              ; preds = %886, %858, %810, %791, %736, %708, %660, %611
  %888 = load ptr, ptr %15, align 8, !tbaa !5
  %889 = icmp eq ptr %888, null
  br i1 %889, label %890, label %891

890:                                              ; preds = %887
  br label %1262

891:                                              ; preds = %887
  br label %920

892:                                              ; preds = %608
  %893 = load i32, ptr %32, align 4, !tbaa !11
  %894 = icmp ne i32 %893, 3
  br i1 %894, label %895, label %902

895:                                              ; preds = %892
  %896 = load i32, ptr %32, align 4, !tbaa !11
  %897 = icmp ne i32 %896, 4
  br i1 %897, label %898, label %902

898:                                              ; preds = %895
  %899 = load i32, ptr %32, align 4, !tbaa !11
  %900 = icmp ne i32 %899, 7
  br i1 %900, label %901, label %902

901:                                              ; preds = %898
  br label %1262

902:                                              ; preds = %898, %895, %892
  %903 = load ptr, ptr %15, align 8, !tbaa !5
  %904 = load ptr, ptr %14, align 8, !tbaa !5
  %905 = getelementptr inbounds %struct.Node, ptr %904, i32 0, i32 15
  %906 = load ptr, ptr %905, align 8, !tbaa !21
  %907 = icmp eq ptr %903, %906
  br i1 %907, label %908, label %912

908:                                              ; preds = %902
  %909 = load ptr, ptr %14, align 8, !tbaa !5
  %910 = getelementptr inbounds %struct.Node, ptr %909, i32 0, i32 16
  %911 = load ptr, ptr %910, align 8, !tbaa !20
  br label %916

912:                                              ; preds = %902
  %913 = load ptr, ptr %14, align 8, !tbaa !5
  %914 = getelementptr inbounds %struct.Node, ptr %913, i32 0, i32 15
  %915 = load ptr, ptr %914, align 8, !tbaa !21
  br label %916

916:                                              ; preds = %912, %908
  %917 = phi ptr [ %911, %908 ], [ %915, %912 ]
  store ptr %917, ptr %15, align 8, !tbaa !5
  %918 = load i32, ptr %33, align 4, !tbaa !11
  %919 = add nsw i32 %918, 8
  store i32 %919, ptr %33, align 4, !tbaa !11
  br label %920

920:                                              ; preds = %916, %891
  %921 = load ptr, ptr %15, align 8, !tbaa !5
  %922 = load ptr, ptr %6, align 8, !tbaa !5
  %923 = icmp eq ptr %921, %922
  br i1 %923, label %940, label %924

924:                                              ; preds = %920
  %925 = load ptr, ptr %14, align 8, !tbaa !5
  %926 = load ptr, ptr %10, align 8, !tbaa !5
  %927 = icmp eq ptr %925, %926
  br i1 %927, label %928, label %932

928:                                              ; preds = %924
  %929 = load ptr, ptr %15, align 8, !tbaa !5
  %930 = load ptr, ptr %11, align 8, !tbaa !5
  %931 = icmp eq ptr %929, %930
  br i1 %931, label %940, label %932

932:                                              ; preds = %928, %924
  %933 = load ptr, ptr %14, align 8, !tbaa !5
  %934 = load ptr, ptr %11, align 8, !tbaa !5
  %935 = icmp eq ptr %933, %934
  br i1 %935, label %936, label %941

936:                                              ; preds = %932
  %937 = load ptr, ptr %15, align 8, !tbaa !5
  %938 = load ptr, ptr %10, align 8, !tbaa !5
  %939 = icmp eq ptr %937, %938
  br i1 %939, label %940, label %941

940:                                              ; preds = %936, %928, %920
  br label %1259

941:                                              ; preds = %936, %932
  %942 = load ptr, ptr %14, align 8, !tbaa !5
  %943 = getelementptr inbounds %struct.Node, ptr %942, i32 0, i32 26
  %944 = load ptr, ptr %943, align 8, !tbaa !26
  %945 = load ptr, ptr %15, align 8, !tbaa !5
  %946 = icmp eq ptr %944, %945
  br i1 %946, label %958, label %947

947:                                              ; preds = %941
  %948 = load ptr, ptr %14, align 8, !tbaa !5
  %949 = getelementptr inbounds %struct.Node, ptr %948, i32 0, i32 27
  %950 = load ptr, ptr %949, align 8, !tbaa !27
  %951 = load ptr, ptr %15, align 8, !tbaa !5
  %952 = icmp eq ptr %950, %951
  br i1 %952, label %958, label %953

953:                                              ; preds = %947
  %954 = load ptr, ptr %14, align 8, !tbaa !5
  %955 = load ptr, ptr %15, align 8, !tbaa !5
  %956 = call i32 @IsCommonEdge(ptr noundef %954, ptr noundef %955)
  %957 = icmp ne i32 %956, 0
  br i1 %957, label %958, label %959

958:                                              ; preds = %953, %947, %941
  br label %1259

959:                                              ; preds = %953
  %960 = load i64, ptr %29, align 8, !tbaa !9
  %961 = load ptr, ptr @C, align 8, !tbaa !5
  %962 = load ptr, ptr %14, align 8, !tbaa !5
  %963 = load ptr, ptr %15, align 8, !tbaa !5
  %964 = call i32 %961(ptr noundef %962, ptr noundef %963)
  %965 = sext i32 %964 to i64
  %966 = add nsw i64 %960, %965
  store i64 %966, ptr %30, align 8, !tbaa !9
  %967 = load ptr, ptr %15, align 8, !tbaa !5
  %968 = load ptr, ptr %6, align 8, !tbaa !5
  %969 = icmp ne ptr %967, %968
  br i1 %969, label %970, label %1007

970:                                              ; preds = %959
  %971 = load ptr, ptr %15, align 8, !tbaa !5
  %972 = load ptr, ptr %6, align 8, !tbaa !5
  %973 = call i32 @Forbidden(ptr noundef %971, ptr noundef %972)
  %974 = icmp ne i32 %973, 0
  br i1 %974, label %1007, label %975

975:                                              ; preds = %970
  %976 = load ptr, ptr @c, align 8, !tbaa !5
  %977 = icmp ne ptr %976, null
  br i1 %977, label %978, label %987

978:                                              ; preds = %975
  %979 = load i64, ptr %30, align 8, !tbaa !9
  %980 = load ptr, ptr @c, align 8, !tbaa !5
  %981 = load ptr, ptr %15, align 8, !tbaa !5
  %982 = load ptr, ptr %6, align 8, !tbaa !5
  %983 = call i32 %980(ptr noundef %981, ptr noundef %982)
  %984 = sext i32 %983 to i64
  %985 = sub nsw i64 %979, %984
  %986 = icmp sgt i64 %985, 0
  br i1 %986, label %987, label %1007

987:                                              ; preds = %978, %975
  %988 = load i64, ptr %30, align 8, !tbaa !9
  %989 = load ptr, ptr @C, align 8, !tbaa !5
  %990 = load ptr, ptr %15, align 8, !tbaa !5
  %991 = load ptr, ptr %6, align 8, !tbaa !5
  %992 = call i32 %989(ptr noundef %990, ptr noundef %991)
  %993 = sext i32 %992 to i64
  %994 = sub nsw i64 %988, %993
  %995 = load ptr, ptr %9, align 8, !tbaa !5
  store i64 %994, ptr %995, align 8, !tbaa !9
  %996 = icmp sgt i64 %994, 0
  br i1 %996, label %997, label %1007

997:                                              ; preds = %987
  %998 = load ptr, ptr %6, align 8, !tbaa !5
  %999 = load ptr, ptr %7, align 8, !tbaa !5
  %1000 = load ptr, ptr %10, align 8, !tbaa !5
  %1001 = load ptr, ptr %11, align 8, !tbaa !5
  %1002 = load ptr, ptr %12, align 8, !tbaa !5
  %1003 = load ptr, ptr %13, align 8, !tbaa !5
  %1004 = load ptr, ptr %14, align 8, !tbaa !5
  %1005 = load ptr, ptr %15, align 8, !tbaa !5
  %1006 = load i32, ptr %33, align 4, !tbaa !11
  call void @Make4OptMove(ptr noundef %998, ptr noundef %999, ptr noundef %1000, ptr noundef %1001, ptr noundef %1002, ptr noundef %1003, ptr noundef %1004, ptr noundef %1005, i32 noundef %1006)
  store ptr null, ptr %5, align 8
  store i32 1, ptr %41, align 4
  br label %1308

1007:                                             ; preds = %987, %978, %970, %959
  %1008 = load i32, ptr @GainCriterionUsed, align 4, !tbaa !11
  %1009 = icmp ne i32 %1008, 0
  br i1 %1009, label %1010, label %1021

1010:                                             ; preds = %1007
  %1011 = load i64, ptr %30, align 8, !tbaa !9
  %1012 = load i32, ptr @Precision, align 4, !tbaa !11
  %1013 = sext i32 %1012 to i64
  %1014 = sub nsw i64 %1011, %1013
  %1015 = load ptr, ptr %15, align 8, !tbaa !5
  %1016 = getelementptr inbounds %struct.Node, ptr %1015, i32 0, i32 5
  %1017 = load i32, ptr %1016, align 4, !tbaa !28
  %1018 = sext i32 %1017 to i64
  %1019 = icmp slt i64 %1014, %1018
  br i1 %1019, label %1020, label %1021

1020:                                             ; preds = %1010
  br label %1259

1021:                                             ; preds = %1010, %1007
  %1022 = load i32, ptr @Backtracking, align 4, !tbaa !11
  %1023 = icmp ne i32 %1022, 0
  br i1 %1023, label %1024, label %1027

1024:                                             ; preds = %1021
  %1025 = load i32, ptr @Swaps, align 4, !tbaa !11
  %1026 = icmp sgt i32 %1025, 0
  br i1 %1026, label %1027, label %1190

1027:                                             ; preds = %1024, %1021
  %1028 = load i64, ptr %30, align 8, !tbaa !9
  %1029 = load i64, ptr %31, align 8, !tbaa !9
  %1030 = icmp sgt i64 %1028, %1029
  br i1 %1030, label %1093, label %1031

1031:                                             ; preds = %1027
  %1032 = load i64, ptr %30, align 8, !tbaa !9
  %1033 = load i64, ptr %31, align 8, !tbaa !9
  %1034 = icmp eq i64 %1032, %1033
  br i1 %1034, label %1035, label %1189

1035:                                             ; preds = %1031
  %1036 = load ptr, ptr %14, align 8, !tbaa !5
  %1037 = getelementptr inbounds %struct.Node, ptr %1036, i32 0, i32 19
  %1038 = load ptr, ptr %1037, align 8, !tbaa !29
  %1039 = icmp ne ptr %1038, null
  br i1 %1039, label %1040, label %1052

1040:                                             ; preds = %1035
  %1041 = load ptr, ptr %14, align 8, !tbaa !5
  %1042 = getelementptr inbounds %struct.Node, ptr %1041, i32 0, i32 19
  %1043 = load ptr, ptr %1042, align 8, !tbaa !29
  %1044 = load ptr, ptr %15, align 8, !tbaa !5
  %1045 = icmp eq ptr %1043, %1044
  br i1 %1045, label %1189, label %1046

1046:                                             ; preds = %1040
  %1047 = load ptr, ptr %15, align 8, !tbaa !5
  %1048 = getelementptr inbounds %struct.Node, ptr %1047, i32 0, i32 19
  %1049 = load ptr, ptr %1048, align 8, !tbaa !29
  %1050 = load ptr, ptr %14, align 8, !tbaa !5
  %1051 = icmp eq ptr %1049, %1050
  br i1 %1051, label %1189, label %1064

1052:                                             ; preds = %1035
  %1053 = load ptr, ptr %14, align 8, !tbaa !5
  %1054 = getelementptr inbounds %struct.Node, ptr %1053, i32 0, i32 21
  %1055 = load ptr, ptr %1054, align 8, !tbaa !30
  %1056 = load ptr, ptr %15, align 8, !tbaa !5
  %1057 = icmp eq ptr %1055, %1056
  br i1 %1057, label %1189, label %1058

1058:                                             ; preds = %1052
  %1059 = load ptr, ptr %15, align 8, !tbaa !5
  %1060 = getelementptr inbounds %struct.Node, ptr %1059, i32 0, i32 21
  %1061 = load ptr, ptr %1060, align 8, !tbaa !30
  %1062 = load ptr, ptr %14, align 8, !tbaa !5
  %1063 = icmp eq ptr %1061, %1062
  br i1 %1063, label %1189, label %1064

1064:                                             ; preds = %1058, %1046
  %1065 = load ptr, ptr %20, align 8, !tbaa !5
  %1066 = getelementptr inbounds %struct.Node, ptr %1065, i32 0, i32 19
  %1067 = load ptr, ptr %1066, align 8, !tbaa !29
  %1068 = icmp ne ptr %1067, null
  br i1 %1068, label %1069, label %1081

1069:                                             ; preds = %1064
  %1070 = load ptr, ptr %20, align 8, !tbaa !5
  %1071 = getelementptr inbounds %struct.Node, ptr %1070, i32 0, i32 19
  %1072 = load ptr, ptr %1071, align 8, !tbaa !29
  %1073 = load ptr, ptr %21, align 8, !tbaa !5
  %1074 = icmp eq ptr %1072, %1073
  br i1 %1074, label %1093, label %1075

1075:                                             ; preds = %1069
  %1076 = load ptr, ptr %21, align 8, !tbaa !5
  %1077 = getelementptr inbounds %struct.Node, ptr %1076, i32 0, i32 19
  %1078 = load ptr, ptr %1077, align 8, !tbaa !29
  %1079 = load ptr, ptr %20, align 8, !tbaa !5
  %1080 = icmp eq ptr %1078, %1079
  br i1 %1080, label %1093, label %1189

1081:                                             ; preds = %1064
  %1082 = load ptr, ptr %20, align 8, !tbaa !5
  %1083 = getelementptr inbounds %struct.Node, ptr %1082, i32 0, i32 21
  %1084 = load ptr, ptr %1083, align 8, !tbaa !30
  %1085 = load ptr, ptr %21, align 8, !tbaa !5
  %1086 = icmp eq ptr %1084, %1085
  br i1 %1086, label %1093, label %1087

1087:                                             ; preds = %1081
  %1088 = load ptr, ptr %21, align 8, !tbaa !5
  %1089 = getelementptr inbounds %struct.Node, ptr %1088, i32 0, i32 21
  %1090 = load ptr, ptr %1089, align 8, !tbaa !30
  %1091 = load ptr, ptr %20, align 8, !tbaa !5
  %1092 = icmp eq ptr %1090, %1091
  br i1 %1092, label %1093, label %1189

1093:                                             ; preds = %1087, %1081, %1075, %1069, %1027
  %1094 = load i32, ptr @Swaps, align 4, !tbaa !11
  %1095 = load i32, ptr @MaxSwaps, align 4, !tbaa !11
  %1096 = icmp slt i32 %1094, %1095
  br i1 %1096, label %1097, label %1189

1097:                                             ; preds = %1093
  %1098 = load ptr, ptr %14, align 8, !tbaa !5
  %1099 = load ptr, ptr %15, align 8, !tbaa !5
  %1100 = call i32 @Excludable(ptr noundef %1098, ptr noundef %1099)
  %1101 = icmp ne i32 %1100, 0
  br i1 %1101, label %1102, label %1189

1102:                                             ; preds = %1097
  %1103 = load ptr, ptr %14, align 8, !tbaa !5
  %1104 = getelementptr inbounds %struct.Node, ptr %1103, i32 0, i32 32
  %1105 = load ptr, ptr %1104, align 8, !tbaa !31
  %1106 = load ptr, ptr %15, align 8, !tbaa !5
  %1107 = icmp eq ptr %1105, %1106
  br i1 %1107, label %1189, label %1108

1108:                                             ; preds = %1102
  %1109 = load ptr, ptr %15, align 8, !tbaa !5
  %1110 = getelementptr inbounds %struct.Node, ptr %1109, i32 0, i32 32
  %1111 = load ptr, ptr %1110, align 8, !tbaa !31
  %1112 = load ptr, ptr %14, align 8, !tbaa !5
  %1113 = icmp eq ptr %1111, %1112
  br i1 %1113, label %1189, label %1114

1114:                                             ; preds = %1108
  %1115 = load i32, ptr @RestrictedSearch, align 4, !tbaa !11
  %1116 = icmp ne i32 %1115, 0
  br i1 %1116, label %1117, label %1180

1117:                                             ; preds = %1114
  %1118 = load i32, ptr @ProblemType, align 4, !tbaa !11
  %1119 = icmp ne i32 %1118, 3
  br i1 %1119, label %1120, label %1180

1120:                                             ; preds = %1117
  %1121 = load i32, ptr @ProblemType, align 4, !tbaa !11
  %1122 = icmp ne i32 %1121, 6
  br i1 %1122, label %1123, label %1180

1123:                                             ; preds = %1120
  %1124 = load i64, ptr %26, align 8, !tbaa !9
  %1125 = load ptr, ptr %11, align 8, !tbaa !5
  %1126 = getelementptr inbounds %struct.Node, ptr %1125, i32 0, i32 9
  %1127 = load i32, ptr %1126, align 4, !tbaa !32
  %1128 = sext i32 %1127 to i64
  %1129 = sub nsw i64 %1124, %1128
  %1130 = load i64, ptr %28, align 8, !tbaa !9
  %1131 = load ptr, ptr %13, align 8, !tbaa !5
  %1132 = getelementptr inbounds %struct.Node, ptr %1131, i32 0, i32 9
  %1133 = load i32, ptr %1132, align 4, !tbaa !32
  %1134 = sext i32 %1133 to i64
  %1135 = sub nsw i64 %1130, %1134
  %1136 = icmp eq i64 %1129, %1135
  br i1 %1136, label %1137, label %1180

1137:                                             ; preds = %1123
  %1138 = load i64, ptr %28, align 8, !tbaa !9
  %1139 = load ptr, ptr %13, align 8, !tbaa !5
  %1140 = getelementptr inbounds %struct.Node, ptr %1139, i32 0, i32 9
  %1141 = load i32, ptr %1140, align 4, !tbaa !32
  %1142 = sext i32 %1141 to i64
  %1143 = sub nsw i64 %1138, %1142
  %1144 = load i64, ptr %30, align 8, !tbaa !9
  %1145 = load ptr, ptr %15, align 8, !tbaa !5
  %1146 = getelementptr inbounds %struct.Node, ptr %1145, i32 0, i32 9
  %1147 = load i32, ptr %1146, align 4, !tbaa !32
  %1148 = sext i32 %1147 to i64
  %1149 = sub nsw i64 %1144, %1148
  %1150 = icmp eq i64 %1143, %1149
  br i1 %1150, label %1151, label %1180

1151:                                             ; preds = %1137
  %1152 = load i64, ptr %27, align 8, !tbaa !9
  %1153 = load ptr, ptr %12, align 8, !tbaa !5
  %1154 = getelementptr inbounds %struct.Node, ptr %1153, i32 0, i32 9
  %1155 = load i32, ptr %1154, align 4, !tbaa !32
  %1156 = sext i32 %1155 to i64
  %1157 = add nsw i64 %1152, %1156
  %1158 = load i64, ptr %25, align 8, !tbaa !9
  %1159 = load ptr, ptr %10, align 8, !tbaa !5
  %1160 = getelementptr inbounds %struct.Node, ptr %1159, i32 0, i32 9
  %1161 = load i32, ptr %1160, align 4, !tbaa !32
  %1162 = sext i32 %1161 to i64
  %1163 = add nsw i64 %1158, %1162
  %1164 = icmp eq i64 %1157, %1163
  br i1 %1164, label %1165, label %1180

1165:                                             ; preds = %1151
  %1166 = load i64, ptr %29, align 8, !tbaa !9
  %1167 = load ptr, ptr %14, align 8, !tbaa !5
  %1168 = getelementptr inbounds %struct.Node, ptr %1167, i32 0, i32 9
  %1169 = load i32, ptr %1168, align 4, !tbaa !32
  %1170 = sext i32 %1169 to i64
  %1171 = add nsw i64 %1166, %1170
  %1172 = load i64, ptr %27, align 8, !tbaa !9
  %1173 = load ptr, ptr %12, align 8, !tbaa !5
  %1174 = getelementptr inbounds %struct.Node, ptr %1173, i32 0, i32 9
  %1175 = load i32, ptr %1174, align 4, !tbaa !32
  %1176 = sext i32 %1175 to i64
  %1177 = add nsw i64 %1172, %1176
  %1178 = icmp eq i64 %1171, %1177
  br i1 %1178, label %1179, label %1180

1179:                                             ; preds = %1165
  br label %1259

1180:                                             ; preds = %1165, %1151, %1137, %1123, %1120, %1117, %1114
  %1181 = load ptr, ptr %10, align 8, !tbaa !5
  store ptr %1181, ptr %16, align 8, !tbaa !5
  %1182 = load ptr, ptr %11, align 8, !tbaa !5
  store ptr %1182, ptr %17, align 8, !tbaa !5
  %1183 = load ptr, ptr %12, align 8, !tbaa !5
  store ptr %1183, ptr %18, align 8, !tbaa !5
  %1184 = load ptr, ptr %13, align 8, !tbaa !5
  store ptr %1184, ptr %19, align 8, !tbaa !5
  %1185 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %1185, ptr %20, align 8, !tbaa !5
  %1186 = load ptr, ptr %15, align 8, !tbaa !5
  store ptr %1186, ptr %21, align 8, !tbaa !5
  %1187 = load i32, ptr %33, align 4, !tbaa !11
  store i32 %1187, ptr %34, align 4, !tbaa !11
  %1188 = load i64, ptr %30, align 8, !tbaa !9
  store i64 %1188, ptr %31, align 8, !tbaa !9
  br label %1189

1189:                                             ; preds = %1180, %1108, %1102, %1097, %1093, %1087, %1075, %1058, %1052, %1046, %1040, %1031
  br label %1258

1190:                                             ; preds = %1024
  %1191 = load i32, ptr @MaxSwaps, align 4, !tbaa !11
  %1192 = icmp sgt i32 %1191, 0
  br i1 %1192, label %1193, label %1257

1193:                                             ; preds = %1190
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #3
  %1194 = load i64, ptr %30, align 8, !tbaa !9
  store i64 %1194, ptr %42, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #3
  %1195 = load ptr, ptr %15, align 8, !tbaa !5
  store ptr %1195, ptr %43, align 8, !tbaa !5
  %1196 = load ptr, ptr %6, align 8, !tbaa !5
  %1197 = load ptr, ptr %7, align 8, !tbaa !5
  %1198 = load ptr, ptr %10, align 8, !tbaa !5
  %1199 = load ptr, ptr %11, align 8, !tbaa !5
  %1200 = load ptr, ptr %12, align 8, !tbaa !5
  %1201 = load ptr, ptr %13, align 8, !tbaa !5
  %1202 = load ptr, ptr %14, align 8, !tbaa !5
  %1203 = load ptr, ptr %15, align 8, !tbaa !5
  %1204 = load i32, ptr %33, align 4, !tbaa !11
  call void @Make4OptMove(ptr noundef %1196, ptr noundef %1197, ptr noundef %1198, ptr noundef %1199, ptr noundef %1200, ptr noundef %1201, ptr noundef %1202, ptr noundef %1203, i32 noundef %1204)
  %1205 = load ptr, ptr %6, align 8, !tbaa !5
  %1206 = load ptr, ptr %7, align 8, !tbaa !5
  call void @Exclude(ptr noundef %1205, ptr noundef %1206)
  %1207 = load ptr, ptr %10, align 8, !tbaa !5
  %1208 = load ptr, ptr %11, align 8, !tbaa !5
  call void @Exclude(ptr noundef %1207, ptr noundef %1208)
  %1209 = load ptr, ptr %12, align 8, !tbaa !5
  %1210 = load ptr, ptr %13, align 8, !tbaa !5
  call void @Exclude(ptr noundef %1209, ptr noundef %1210)
  %1211 = load ptr, ptr %14, align 8, !tbaa !5
  %1212 = load ptr, ptr %15, align 8, !tbaa !5
  call void @Exclude(ptr noundef %1211, ptr noundef %1212)
  br label %1213

1213:                                             ; preds = %1220, %1193
  %1214 = load ptr, ptr @BestSubsequentMove, align 8, !tbaa !5
  %1215 = load ptr, ptr %6, align 8, !tbaa !5
  %1216 = load ptr, ptr %43, align 8, !tbaa !5
  %1217 = load ptr, ptr %9, align 8, !tbaa !5
  %1218 = call ptr %1214(ptr noundef %1215, ptr noundef %1216, ptr noundef %42, ptr noundef %1217)
  store ptr %1218, ptr %43, align 8, !tbaa !5
  %1219 = icmp ne ptr %1218, null
  br i1 %1219, label %1220, label %1221

1220:                                             ; preds = %1213
  br label %1213, !llvm.loop !33

1221:                                             ; preds = %1213
  %1222 = load ptr, ptr %9, align 8, !tbaa !5
  %1223 = load i64, ptr %1222, align 8, !tbaa !9
  %1224 = icmp sgt i64 %1223, 0
  br i1 %1224, label %1225, label %1226

1225:                                             ; preds = %1221
  store ptr null, ptr %5, align 8
  store i32 1, ptr %41, align 4
  br label %1254

1226:                                             ; preds = %1221
  call void @RestoreTour()
  %1227 = load ptr, ptr %7, align 8, !tbaa !5
  %1228 = load i16, ptr @Reversed, align 2, !tbaa !13
  %1229 = sext i16 %1228 to i32
  %1230 = load ptr, ptr %6, align 8, !tbaa !5
  %1231 = getelementptr inbounds %struct.Node, ptr %1230, i32 0, i32 45
  %1232 = load ptr, ptr %1231, align 8, !tbaa !15
  %1233 = getelementptr inbounds %struct.Segment, ptr %1232, i32 0, i32 0
  %1234 = load i8, ptr %1233, align 8, !tbaa !18
  %1235 = sext i8 %1234 to i32
  %1236 = icmp eq i32 %1229, %1235
  br i1 %1236, label %1237, label %1241

1237:                                             ; preds = %1226
  %1238 = load ptr, ptr %6, align 8, !tbaa !5
  %1239 = getelementptr inbounds %struct.Node, ptr %1238, i32 0, i32 16
  %1240 = load ptr, ptr %1239, align 8, !tbaa !20
  br label %1245

1241:                                             ; preds = %1226
  %1242 = load ptr, ptr %6, align 8, !tbaa !5
  %1243 = getelementptr inbounds %struct.Node, ptr %1242, i32 0, i32 15
  %1244 = load ptr, ptr %1243, align 8, !tbaa !21
  br label %1245

1245:                                             ; preds = %1241, %1237
  %1246 = phi ptr [ %1240, %1237 ], [ %1244, %1241 ]
  %1247 = icmp ne ptr %1227, %1246
  br i1 %1247, label %1248, label %1253

1248:                                             ; preds = %1245
  %1249 = load i16, ptr @Reversed, align 2, !tbaa !13
  %1250 = sext i16 %1249 to i32
  %1251 = xor i32 %1250, 1
  %1252 = trunc i32 %1251 to i16
  store i16 %1252, ptr @Reversed, align 2, !tbaa !13
  br label %1253

1253:                                             ; preds = %1248, %1245
  store i32 0, ptr %41, align 4
  br label %1254

1254:                                             ; preds = %1253, %1225
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #3
  %1255 = load i32, ptr %41, align 4
  switch i32 %1255, label %1308 [
    i32 0, label %1256
  ]

1256:                                             ; preds = %1254
  br label %1257

1257:                                             ; preds = %1256, %1190
  br label %1258

1258:                                             ; preds = %1257, %1189
  br label %1259

1259:                                             ; preds = %1258, %1179, %1020, %958, %940
  %1260 = load i32, ptr %37, align 4, !tbaa !11
  %1261 = add nsw i32 %1260, 1
  store i32 %1261, ptr %37, align 4, !tbaa !11
  br label %605, !llvm.loop !35

1262:                                             ; preds = %901, %890, %605
  br label %1263

1263:                                             ; preds = %1262, %597
  %1264 = load ptr, ptr %24, align 8, !tbaa !5
  %1265 = getelementptr inbounds %struct.Candidate, ptr %1264, i32 1
  store ptr %1265, ptr %24, align 8, !tbaa !5
  br label %547, !llvm.loop !36

1266:                                             ; preds = %603, %547
  br label %1267

1267:                                             ; preds = %1266, %542, %482, %462, %433, %372
  %1268 = load i32, ptr %36, align 4, !tbaa !11
  %1269 = add nsw i32 %1268, 1
  store i32 %1269, ptr %36, align 4, !tbaa !11
  br label %279, !llvm.loop !37

1270:                                             ; preds = %438, %279
  br label %1271

1271:                                             ; preds = %1270, %271
  %1272 = load ptr, ptr %23, align 8, !tbaa !5
  %1273 = getelementptr inbounds %struct.Candidate, ptr %1272, i32 1
  store ptr %1273, ptr %23, align 8, !tbaa !5
  br label %237, !llvm.loop !38

1274:                                             ; preds = %277, %237
  br label %1275

1275:                                             ; preds = %1274, %232, %182
  %1276 = load i32, ptr %35, align 4, !tbaa !11
  %1277 = add nsw i32 %1276, 1
  store i32 %1277, ptr %35, align 4, !tbaa !11
  br label %118, !llvm.loop !39

1278:                                             ; preds = %118
  br label %1279

1279:                                             ; preds = %1278, %110
  %1280 = load ptr, ptr %22, align 8, !tbaa !5
  %1281 = getelementptr inbounds %struct.Candidate, ptr %1280, i32 1
  store ptr %1281, ptr %22, align 8, !tbaa !5
  br label %75, !llvm.loop !40

1282:                                             ; preds = %116, %75
  %1283 = load ptr, ptr %9, align 8, !tbaa !5
  store i64 0, ptr %1283, align 8, !tbaa !9
  %1284 = load ptr, ptr %21, align 8, !tbaa !5
  %1285 = icmp ne ptr %1284, null
  br i1 %1285, label %1286, label %1306

1286:                                             ; preds = %1282
  %1287 = load ptr, ptr %6, align 8, !tbaa !5
  %1288 = load ptr, ptr %7, align 8, !tbaa !5
  %1289 = load ptr, ptr %16, align 8, !tbaa !5
  %1290 = load ptr, ptr %17, align 8, !tbaa !5
  %1291 = load ptr, ptr %18, align 8, !tbaa !5
  %1292 = load ptr, ptr %19, align 8, !tbaa !5
  %1293 = load ptr, ptr %20, align 8, !tbaa !5
  %1294 = load ptr, ptr %21, align 8, !tbaa !5
  %1295 = load i32, ptr %34, align 4, !tbaa !11
  call void @Make4OptMove(ptr noundef %1287, ptr noundef %1288, ptr noundef %1289, ptr noundef %1290, ptr noundef %1291, ptr noundef %1292, ptr noundef %1293, ptr noundef %1294, i32 noundef %1295)
  %1296 = load ptr, ptr %6, align 8, !tbaa !5
  %1297 = load ptr, ptr %7, align 8, !tbaa !5
  call void @Exclude(ptr noundef %1296, ptr noundef %1297)
  %1298 = load ptr, ptr %16, align 8, !tbaa !5
  %1299 = load ptr, ptr %17, align 8, !tbaa !5
  call void @Exclude(ptr noundef %1298, ptr noundef %1299)
  %1300 = load ptr, ptr %18, align 8, !tbaa !5
  %1301 = load ptr, ptr %19, align 8, !tbaa !5
  call void @Exclude(ptr noundef %1300, ptr noundef %1301)
  %1302 = load ptr, ptr %20, align 8, !tbaa !5
  %1303 = load ptr, ptr %21, align 8, !tbaa !5
  call void @Exclude(ptr noundef %1302, ptr noundef %1303)
  %1304 = load i64, ptr %31, align 8, !tbaa !9
  %1305 = load ptr, ptr %8, align 8, !tbaa !5
  store i64 %1304, ptr %1305, align 8, !tbaa !9
  br label %1306

1306:                                             ; preds = %1286, %1282
  %1307 = load ptr, ptr %21, align 8, !tbaa !5
  store ptr %1307, ptr %5, align 8
  store i32 1, ptr %41, align 4
  br label %1308

1308:                                             ; preds = %1306, %1254, %997, %526, %220
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #3
  call void @llvm.lifetime.end.p0(i64 8, 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
  %1309 = load ptr, ptr %5, align 8
  ret ptr %1309
}

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

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

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

declare void @Flip_SL(ptr noundef, ptr noundef, ptr noundef) #2

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

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

declare void @Make3OptMove(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef) #2

declare void @Make4OptMove(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef) #2

declare void @Exclude(ptr noundef, ptr noundef) #2

declare void @RestoreTour() #2

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

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nounwind }

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

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


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

@Reversed = external dso_local local_unnamed_addr global i16, align 2
@GainCriterionUsed = external dso_local local_unnamed_addr global i32, align 4
@ProblemType = external dso_local local_unnamed_addr global i32, align 4
@MaxBreadth = external dso_local local_unnamed_addr global i32, align 4
@C = external dso_local local_unnamed_addr global ptr, align 8
@c = external dso_local local_unnamed_addr global ptr, align 8
@Backtracking = external dso_local local_unnamed_addr global i32, align 4
@Precision = external dso_local local_unnamed_addr global i32, align 4
@Swaps = external dso_local local_unnamed_addr global i32, align 4
@MaxSwaps = external dso_local local_unnamed_addr global i32, align 4
@RestrictedSearch = external dso_local local_unnamed_addr global i32, align 4
@BestSubsequentMove = external dso_local local_unnamed_addr global ptr, align 8

; Function Attrs: nounwind uwtable
define dso_local ptr @Best4OptMove(ptr noundef %0, ptr noundef %1, ptr nocapture noundef %2, ptr noundef %3) local_unnamed_addr #0 {
  %5 = alloca i64, align 8
  store i64 0, ptr %3, align 8, !tbaa !5
  %6 = load i16, ptr @Reversed, align 2, !tbaa !9
  %7 = getelementptr inbounds i8, ptr %0, i64 304
  %8 = load ptr, ptr %7, align 8, !tbaa !11
  %9 = load i8, ptr %8, align 8, !tbaa !16
  %10 = sext i8 %9 to i16
  %11 = icmp eq i16 %6, %10
  %12 = getelementptr inbounds i8, ptr %0, i64 72
  %13 = getelementptr inbounds i8, ptr %0, i64 64
  %.in = select i1 %11, ptr %12, ptr %13
  %14 = load ptr, ptr %.in, align 8, !tbaa !18
  %.not = icmp eq ptr %14, %1
  br i1 %.not, label %17, label %15

15:                                               ; preds = %4
  %16 = xor i16 %6, 1
  store i16 %16, ptr @Reversed, align 2, !tbaa !9
  br label %17

17:                                               ; preds = %15, %4
  %18 = getelementptr inbounds i8, ptr %1, i64 288
  %19 = load ptr, ptr %18, align 8, !tbaa !19
  %20 = load ptr, ptr %19, align 8, !tbaa !20
  %.not571949 = icmp eq ptr %20, null
  br i1 %.not571949, label %._crit_edge.thread, label %.lr.ph964

._crit_edge.thread:                               ; preds = %17
  store i64 0, ptr %3, align 8, !tbaa !5
  br label %487

.lr.ph964:                                        ; preds = %17
  %21 = getelementptr inbounds i8, ptr %1, i64 64
  %22 = getelementptr inbounds i8, ptr %1, i64 72
  br label %23

23:                                               ; preds = %.lr.ph964, %.loopexit631
  %24 = phi ptr [ %20, %.lr.ph964 ], [ %485, %.loopexit631 ]
  %.0398963 = phi i32 [ 0, %.lr.ph964 ], [ %.1399, %.loopexit631 ]
  %.0403962 = phi i32 [ 0, %.lr.ph964 ], [ %.11, %.loopexit631 ]
  %.0405961 = phi i32 [ 0, %.lr.ph964 ], [ %.11416, %.loopexit631 ]
  %.0417960 = phi i32 [ 0, %.lr.ph964 ], [ %.8425, %.loopexit631 ]
  %.0426959 = phi i64 [ -9223372036854775808, %.lr.ph964 ], [ %.11437, %.loopexit631 ]
  %.0450958 = phi ptr [ null, %.lr.ph964 ], [ %.8458, %.loopexit631 ]
  %.0459957 = phi ptr [ null, %.lr.ph964 ], [ %.12471, %.loopexit631 ]
  %.0472956 = phi ptr [ null, %.lr.ph964 ], [ %.11483, %.loopexit631 ]
  %.0484955 = phi ptr [ null, %.lr.ph964 ], [ %.11495, %.loopexit631 ]
  %.0496954 = phi ptr [ null, %.lr.ph964 ], [ %.11507, %.loopexit631 ]
  %.0510953 = phi ptr [ %19, %.lr.ph964 ], [ %484, %.loopexit631 ]
  %.0511952 = phi ptr [ null, %.lr.ph964 ], [ %.11522, %.loopexit631 ]
  %.0523951 = phi ptr [ null, %.lr.ph964 ], [ %.11534, %.loopexit631 ]
  %.0535950 = phi ptr [ null, %.lr.ph964 ], [ %.11546, %.loopexit631 ]
  %25 = load ptr, ptr %21, align 8, !tbaa !22
  %26 = icmp eq ptr %24, %25
  br i1 %26, label %.loopexit631, label %27

27:                                               ; preds = %23
  %28 = load ptr, ptr %22, align 8, !tbaa !23
  %29 = icmp eq ptr %24, %28
  br i1 %29, label %.loopexit631, label %30

30:                                               ; preds = %27
  %31 = load i64, ptr %2, align 8, !tbaa !5
  %32 = getelementptr inbounds i8, ptr %.0510953, i64 8
  %33 = load i32, ptr %32, align 8, !tbaa !24
  %34 = sext i32 %33 to i64
  %35 = sub nsw i64 %31, %34
  %36 = icmp slt i64 %35, 1
  %37 = load i32, ptr @GainCriterionUsed, align 4
  %38 = icmp ne i32 %37, 0
  %or.cond = select i1 %36, i1 %38, i1 false
  %39 = load i32, ptr @ProblemType, align 4
  %40 = icmp ne i32 %39, 3
  %41 = icmp ne i32 %39, 6
  %42 = and i1 %40, %41
  %or.cond5 = select i1 %or.cond, i1 %42, i1 false
  br i1 %or.cond5, label %.loopexit631, label %43

43:                                               ; preds = %30
  %44 = add nsw i32 %.0398963, 1
  %45 = load i32, ptr @MaxBreadth, align 4, !tbaa !25
  %.not572 = icmp slt i32 %.0398963, %45
  br i1 %.not572, label %.preheader630, label %._crit_edge

.preheader630:                                    ; preds = %43
  %46 = getelementptr inbounds i8, ptr %24, i64 152
  %47 = getelementptr inbounds i8, ptr %24, i64 304
  %48 = getelementptr inbounds i8, ptr %24, i64 160
  %49 = getelementptr inbounds i8, ptr %24, i64 36
  br label %50

50:                                               ; preds = %.preheader630, %.loopexit629
  %.0402948 = phi i32 [ 1, %.preheader630 ], [ %483, %.loopexit629 ]
  %.1404947 = phi i32 [ %.0403962, %.preheader630 ], [ %.10, %.loopexit629 ]
  %.1406946 = phi i32 [ %.0405961, %.preheader630 ], [ %.10415, %.loopexit629 ]
  %.1418945 = phi i32 [ %.0417960, %.preheader630 ], [ %.7424, %.loopexit629 ]
  %.1427944 = phi i64 [ %.0426959, %.preheader630 ], [ %.10436, %.loopexit629 ]
  %.1451943 = phi ptr [ %.0450958, %.preheader630 ], [ %.7457, %.loopexit629 ]
  %.1460942 = phi ptr [ %.0459957, %.preheader630 ], [ %.11470, %.loopexit629 ]
  %.1473941 = phi ptr [ %.0472956, %.preheader630 ], [ %.10482, %.loopexit629 ]
  %.1485940 = phi ptr [ %.0484955, %.preheader630 ], [ %.10494, %.loopexit629 ]
  %.1497939 = phi ptr [ %.0496954, %.preheader630 ], [ %.10506, %.loopexit629 ]
  %.1512938 = phi ptr [ %.0511952, %.preheader630 ], [ %.10521, %.loopexit629 ]
  %.1524937 = phi ptr [ %.0523951, %.preheader630 ], [ %.10533, %.loopexit629 ]
  %.1536936 = phi ptr [ %.0535950, %.preheader630 ], [ %.10545, %.loopexit629 ]
  %51 = icmp eq i32 %.0402948, 1
  %52 = load i16, ptr @Reversed, align 2, !tbaa !9
  %53 = load ptr, ptr %47, align 8, !tbaa !11
  %54 = load i8, ptr %53, align 8, !tbaa !16
  %55 = sext i8 %54 to i16
  %56 = icmp eq i16 %52, %55
  %57 = xor i1 %56, %51
  %..v.pn = select i1 %57, i64 72, i64 64
  %.in573 = getelementptr inbounds i8, ptr %24, i64 %..v.pn
  %58 = load ptr, ptr %.in573, align 8, !tbaa !18
  %59 = load ptr, ptr %46, align 8, !tbaa !26
  %60 = icmp eq ptr %59, %58
  br i1 %60, label %.loopexit629, label %61

61:                                               ; preds = %50
  %62 = load ptr, ptr %48, align 8, !tbaa !27
  %63 = icmp eq ptr %62, %58
  br i1 %63, label %.loopexit629, label %64

64:                                               ; preds = %61
  %65 = call i32 @IsCommonEdge(ptr noundef nonnull %24, ptr noundef %58) #3
  %.not574 = icmp eq i32 %65, 0
  br i1 %.not574, label %66, label %.loopexit629

66:                                               ; preds = %64
  %67 = load ptr, ptr @C, align 8, !tbaa !18
  %68 = call i32 %67(ptr noundef nonnull %24, ptr noundef %58) #3
  %69 = sext i32 %68 to i64
  %70 = add nsw i64 %35, %69
  br i1 %51, label %71, label %86

71:                                               ; preds = %66
  %72 = call i32 @Forbidden(ptr noundef %58, ptr noundef %0) #3
  %.not575 = icmp eq i32 %72, 0
  br i1 %.not575, label %73, label %86

73:                                               ; preds = %71
  %74 = load ptr, ptr @c, align 8, !tbaa !18
  %.not576 = icmp eq ptr %74, null
  br i1 %.not576, label %79, label %75

75:                                               ; preds = %73
  %76 = call i32 %74(ptr noundef %58, ptr noundef %0) #3
  %77 = sext i32 %76 to i64
  %78 = icmp sgt i64 %70, %77
  br i1 %78, label %79, label %86

79:                                               ; preds = %75, %73
  %80 = load ptr, ptr @C, align 8, !tbaa !18
  %81 = call i32 %80(ptr noundef %58, ptr noundef %0) #3
  %82 = sext i32 %81 to i64
  %83 = sub nsw i64 %70, %82
  store i64 %83, ptr %3, align 8, !tbaa !5
  %84 = icmp sgt i64 %83, 0
  br i1 %84, label %85, label %86

85:                                               ; preds = %79
  call void @Flip_SL(ptr noundef %0, ptr noundef %1, ptr noundef nonnull %24) #3
  br label %487

86:                                               ; preds = %79, %75, %71, %66
  %87 = load i32, ptr @Backtracking, align 4, !tbaa !25
  %.not577 = icmp eq i32 %87, 0
  br i1 %.not577, label %90, label %88

88:                                               ; preds = %86
  %89 = call i32 @Excludable(ptr noundef nonnull %24, ptr noundef %58) #3
  %.not578 = icmp eq i32 %89, 0
  br i1 %.not578, label %.loopexit629, label %90

90:                                               ; preds = %88, %86
  %91 = getelementptr inbounds i8, ptr %58, i64 288
  %92 = load ptr, ptr %91, align 8, !tbaa !19
  %93 = load ptr, ptr %92, align 8, !tbaa !20
  %.not579895 = icmp eq ptr %93, null
  br i1 %.not579895, label %.loopexit629, label %.lr.ph910

.lr.ph910:                                        ; preds = %90
  %94 = getelementptr inbounds i8, ptr %58, i64 64
  %95 = getelementptr inbounds i8, ptr %58, i64 72
  %96 = getelementptr inbounds i8, ptr %58, i64 36
  br label %97

97:                                               ; preds = %.lr.ph910, %.loopexit628
  %98 = phi ptr [ %93, %.lr.ph910 ], [ %482, %.loopexit628 ]
  %.0396909 = phi i32 [ 0, %.lr.ph910 ], [ %.1397, %.loopexit628 ]
  %.2908 = phi i32 [ %.1404947, %.lr.ph910 ], [ %.9, %.loopexit628 ]
  %.2407907 = phi i32 [ %.1406946, %.lr.ph910 ], [ %.9414, %.loopexit628 ]
  %.2419906 = phi i32 [ %.1418945, %.lr.ph910 ], [ %.6423, %.loopexit628 ]
  %.2428905 = phi i64 [ %.1427944, %.lr.ph910 ], [ %.9435, %.loopexit628 ]
  %.2452904 = phi ptr [ %.1451943, %.lr.ph910 ], [ %.6456, %.loopexit628 ]
  %.2461903 = phi ptr [ %.1460942, %.lr.ph910 ], [ %.10469, %.loopexit628 ]
  %.2474902 = phi ptr [ %.1473941, %.lr.ph910 ], [ %.9481, %.loopexit628 ]
  %.2486901 = phi ptr [ %.1485940, %.lr.ph910 ], [ %.9493, %.loopexit628 ]
  %.2498900 = phi ptr [ %.1497939, %.lr.ph910 ], [ %.9505, %.loopexit628 ]
  %.0509899 = phi ptr [ %92, %.lr.ph910 ], [ %481, %.loopexit628 ]
  %.2513898 = phi ptr [ %.1512938, %.lr.ph910 ], [ %.9520, %.loopexit628 ]
  %.2525897 = phi ptr [ %.1524937, %.lr.ph910 ], [ %.9532, %.loopexit628 ]
  %.2537896 = phi ptr [ %.1536936, %.lr.ph910 ], [ %.9544, %.loopexit628 ]
  %99 = load ptr, ptr %94, align 8, !tbaa !22
  %100 = icmp eq ptr %98, %99
  br i1 %100, label %.loopexit628, label %101

101:                                              ; preds = %97
  %102 = load ptr, ptr %95, align 8, !tbaa !23
  %103 = icmp eq ptr %98, %102
  br i1 %103, label %.loopexit628, label %104

104:                                              ; preds = %101
  %105 = getelementptr inbounds i8, ptr %.0509899, i64 8
  %106 = load i32, ptr %105, align 8, !tbaa !24
  %107 = sext i32 %106 to i64
  %108 = sub nsw i64 %70, %107
  %109 = icmp slt i64 %108, 1
  %110 = load i32, ptr @GainCriterionUsed, align 4
  %111 = icmp ne i32 %110, 0
  %or.cond7 = select i1 %109, i1 %111, i1 false
  %112 = load i32, ptr @ProblemType, align 4
  %113 = icmp ne i32 %112, 3
  %114 = icmp ne i32 %112, 6
  %115 = and i1 %113, %114
  %or.cond11 = select i1 %or.cond7, i1 %115, i1 false
  br i1 %or.cond11, label %.loopexit628, label %116

116:                                              ; preds = %104
  %117 = add nsw i32 %.0396909, 1
  %118 = load i32, ptr @MaxBreadth, align 4, !tbaa !25
  %.not580 = icmp slt i32 %.0396909, %118
  br i1 %.not580, label %.preheader627, label %.loopexit629

.preheader627:                                    ; preds = %116
  %119 = getelementptr inbounds i8, ptr %98, i64 304
  %120 = getelementptr inbounds i8, ptr %98, i64 64
  %121 = getelementptr inbounds i8, ptr %98, i64 72
  %122 = icmp eq ptr %98, %0
  %123 = icmp eq ptr %98, %1
  %124 = getelementptr inbounds i8, ptr %98, i64 152
  %125 = getelementptr inbounds i8, ptr %98, i64 160
  %126 = getelementptr inbounds i8, ptr %98, i64 36
  br label %127

127:                                              ; preds = %.preheader627, %.loopexit
  %.0401894 = phi i32 [ 1, %.preheader627 ], [ %480, %.loopexit ]
  %.3893 = phi i32 [ %.2908, %.preheader627 ], [ %.8, %.loopexit ]
  %.3408892 = phi i32 [ %.2407907, %.preheader627 ], [ %.8413, %.loopexit ]
  %.3420891 = phi i32 [ %.2419906, %.preheader627 ], [ %.5422, %.loopexit ]
  %.3429890 = phi i64 [ %.2428905, %.preheader627 ], [ %.8434, %.loopexit ]
  %.3453889 = phi ptr [ %.2452904, %.preheader627 ], [ %.5455, %.loopexit ]
  %.3462888 = phi ptr [ %.2461903, %.preheader627 ], [ %.9468, %.loopexit ]
  %.3475887 = phi ptr [ %.2474902, %.preheader627 ], [ %.8480, %.loopexit ]
  %.3487886 = phi ptr [ %.2486901, %.preheader627 ], [ %.8492, %.loopexit ]
  %.3499885 = phi ptr [ %.2498900, %.preheader627 ], [ %.8504, %.loopexit ]
  %.3514884 = phi ptr [ %.2513898, %.preheader627 ], [ %.8519, %.loopexit ]
  %.3526883 = phi ptr [ %.2525897, %.preheader627 ], [ %.8531, %.loopexit ]
  %.3538882 = phi ptr [ %.2537896, %.preheader627 ], [ %.8543, %.loopexit ]
  br i1 %51, label %128, label %151

128:                                              ; preds = %127
  %129 = icmp eq i32 %.0401894, 1
  br i1 %129, label %130, label %140

130:                                              ; preds = %128
  %131 = call i32 @Between_SL(ptr noundef %1, ptr noundef nonnull %98, ptr noundef %58) #3
  %.not584 = icmp eq i32 %131, 0
  %132 = select i1 %.not584, i32 2, i32 1
  %133 = load i16, ptr @Reversed, align 2, !tbaa !9
  %134 = load ptr, ptr %119, align 8, !tbaa !11
  %135 = load i8, ptr %134, align 8, !tbaa !16
  %136 = sext i8 %135 to i16
  %137 = icmp eq i16 %133, %136
  %138 = xor i1 %137, %.not584
  %.983.v.pn = select i1 %138, i64 72, i64 64
  %.in585 = getelementptr inbounds i8, ptr %98, i64 %.983.v.pn
  %139 = load ptr, ptr %.in585, align 8, !tbaa !18
  br label %174

140:                                              ; preds = %128
  %141 = load ptr, ptr %120, align 8, !tbaa !22
  %142 = icmp eq ptr %.3453889, %141
  br i1 %142, label %143, label %145

143:                                              ; preds = %140
  %144 = load ptr, ptr %121, align 8, !tbaa !23
  br label %145

145:                                              ; preds = %140, %143
  %146 = phi ptr [ %144, %143 ], [ %141, %140 ]
  %147 = icmp eq ptr %146, %1
  %or.cond619 = select i1 %122, i1 %147, i1 false
  %148 = icmp eq ptr %146, %0
  %or.cond620 = select i1 %123, i1 %148, i1 false
  %or.cond985 = select i1 %or.cond619, i1 true, i1 %or.cond620
  br i1 %or.cond985, label %.loopexit, label %149

149:                                              ; preds = %145
  %150 = add nsw i32 %.3420891, 2
  br label %174

151:                                              ; preds = %127
  %152 = call i32 @Between_SL(ptr noundef %1, ptr noundef nonnull %98, ptr noundef nonnull %24) #3
  %.not581 = icmp eq i32 %152, 0
  br i1 %.not581, label %164, label %153

153:                                              ; preds = %151
  %154 = or disjoint i32 %.0401894, 4
  %155 = icmp eq i32 %.0401894, 1
  %156 = load i16, ptr @Reversed, align 2, !tbaa !9
  %157 = load ptr, ptr %119, align 8, !tbaa !11
  %158 = load i8, ptr %157, align 8, !tbaa !16
  %159 = sext i8 %158 to i16
  %160 = icmp eq i16 %156, %159
  %161 = xor i1 %160, %155
  %.986.v.pn = select i1 %161, i64 64, i64 72
  %.in583 = getelementptr inbounds i8, ptr %98, i64 %.986.v.pn
  %162 = load ptr, ptr %.in583, align 8, !tbaa !18
  %163 = icmp eq ptr %162, %0
  br i1 %163, label %.loopexit, label %174

164:                                              ; preds = %151
  %165 = icmp eq i32 %.0401894, 2
  br i1 %165, label %.loopexit628, label %166

166:                                              ; preds = %164
  %167 = load i16, ptr @Reversed, align 2, !tbaa !9
  %168 = load ptr, ptr %119, align 8, !tbaa !11
  %169 = load i8, ptr %168, align 8, !tbaa !16
  %170 = sext i8 %169 to i16
  %171 = icmp eq i16 %167, %170
  %.in582.v = select i1 %171, i64 64, i64 72
  %.in582 = getelementptr inbounds i8, ptr %98, i64 %.in582.v
  %172 = load ptr, ptr %.in582, align 8, !tbaa !18
  %173 = icmp eq ptr %172, %1
  br i1 %173, label %.loopexit, label %174

174:                                              ; preds = %153, %166, %130, %149
  %.4454 = phi ptr [ %139, %130 ], [ %146, %149 ], [ %162, %153 ], [ %172, %166 ]
  %.4421 = phi i32 [ %132, %130 ], [ %150, %149 ], [ %154, %153 ], [ 7, %166 ]
  %175 = load ptr, ptr %124, align 8, !tbaa !26
  %176 = icmp eq ptr %175, %.4454
  br i1 %176, label %.loopexit, label %177

177:                                              ; preds = %174
  %178 = load ptr, ptr %125, align 8, !tbaa !27
  %179 = icmp eq ptr %178, %.4454
  br i1 %179, label %.loopexit, label %180

180:                                              ; preds = %177
  %181 = call i32 @IsCommonEdge(ptr noundef nonnull %98, ptr noundef %.4454) #3
  %.not586 = icmp eq i32 %181, 0
  br i1 %.not586, label %182, label %.loopexit

182:                                              ; preds = %180
  %183 = load ptr, ptr @C, align 8, !tbaa !18
  %184 = call i32 %183(ptr noundef nonnull %98, ptr noundef %.4454) #3
  %185 = sext i32 %184 to i64
  %186 = add nsw i64 %108, %185
  %187 = icmp slt i32 %.4421, 3
  %188 = add i32 %.4421, -5
  %189 = icmp ult i32 %188, 2
  %or.cond15 = or i1 %187, %189
  br i1 %or.cond15, label %190, label %205

190:                                              ; preds = %182
  %191 = call i32 @Forbidden(ptr noundef %.4454, ptr noundef %0) #3
  %.not587 = icmp eq i32 %191, 0
  br i1 %.not587, label %192, label %205

192:                                              ; preds = %190
  %193 = load ptr, ptr @c, align 8, !tbaa !18
  %.not588 = icmp eq ptr %193, null
  br i1 %.not588, label %198, label %194

194:                                              ; preds = %192
  %195 = call i32 %193(ptr noundef %.4454, ptr noundef %0) #3
  %196 = sext i32 %195 to i64
  %197 = icmp sgt i64 %186, %196
  br i1 %197, label %198, label %205

198:                                              ; preds = %194, %192
  %199 = load ptr, ptr @C, align 8, !tbaa !18
  %200 = call i32 %199(ptr noundef %.4454, ptr noundef %0) #3
  %201 = sext i32 %200 to i64
  %202 = sub nsw i64 %186, %201
  store i64 %202, ptr %3, align 8, !tbaa !5
  %203 = icmp sgt i64 %202, 0
  br i1 %203, label %204, label %205

204:                                              ; preds = %198
  call void @Make3OptMove(ptr noundef %0, ptr noundef %1, ptr noundef nonnull %24, ptr noundef %58, ptr noundef nonnull %98, ptr noundef %.4454, i32 noundef %.4421) #3
  br label %487

205:                                              ; preds = %182, %198, %194, %190
  %206 = load i32, ptr @Backtracking, align 4, !tbaa !25
  %.not589 = icmp eq i32 %206, 0
  br i1 %.not589, label %209, label %207

207:                                              ; preds = %205
  %208 = call i32 @Excludable(ptr noundef nonnull %98, ptr noundef %.4454) #3
  %.not590 = icmp eq i32 %208, 0
  br i1 %.not590, label %.loopexit, label %209

209:                                              ; preds = %207, %205
  %210 = getelementptr inbounds i8, ptr %.4454, i64 288
  %211 = load ptr, ptr %210, align 8, !tbaa !19
  %212 = load ptr, ptr %211, align 8, !tbaa !20
  %.not591849 = icmp eq ptr %212, null
  br i1 %.not591849, label %.loopexit, label %.lr.ph

.lr.ph:                                           ; preds = %209
  %213 = getelementptr inbounds i8, ptr %.4454, i64 64
  %214 = getelementptr inbounds i8, ptr %.4454, i64 72
  %215 = icmp eq ptr %.4454, %1
  %216 = icmp eq ptr %.4454, %24
  %217 = getelementptr inbounds i8, ptr %.4454, i64 36
  br label %218

218:                                              ; preds = %.lr.ph, %.thread
  %219 = phi ptr [ %212, %.lr.ph ], [ %479, %.thread ]
  %.0395861 = phi i32 [ 0, %.lr.ph ], [ %.1, %.thread ]
  %.4860 = phi i32 [ %.3893, %.lr.ph ], [ %.7, %.thread ]
  %.4409859 = phi i32 [ %.3408892, %.lr.ph ], [ %.7412, %.thread ]
  %.4430858 = phi i64 [ %.3429890, %.lr.ph ], [ %.7433, %.thread ]
  %.4463857 = phi ptr [ %.3462888, %.lr.ph ], [ %.8467, %.thread ]
  %.4476856 = phi ptr [ %.3475887, %.lr.ph ], [ %.7479, %.thread ]
  %.4488855 = phi ptr [ %.3487886, %.lr.ph ], [ %.7491, %.thread ]
  %.4500854 = phi ptr [ %.3499885, %.lr.ph ], [ %.7503, %.thread ]
  %.0508853 = phi ptr [ %211, %.lr.ph ], [ %478, %.thread ]
  %.4515852 = phi ptr [ %.3514884, %.lr.ph ], [ %.7518, %.thread ]
  %.4527851 = phi ptr [ %.3526883, %.lr.ph ], [ %.7530, %.thread ]
  %.4539850 = phi ptr [ %.3538882, %.lr.ph ], [ %.7542, %.thread ]
  %220 = load ptr, ptr %213, align 8, !tbaa !22
  %221 = icmp eq ptr %219, %220
  br i1 %221, label %.thread, label %222

222:                                              ; preds = %218
  %223 = load ptr, ptr %214, align 8, !tbaa !23
  %224 = icmp eq ptr %219, %223
  br i1 %224, label %.thread, label %225

225:                                              ; preds = %222
  %226 = icmp eq ptr %219, %24
  %or.cond621 = and i1 %215, %226
  %227 = icmp eq ptr %219, %1
  %or.cond622 = and i1 %216, %227
  %or.cond988 = or i1 %or.cond621, %or.cond622
  br i1 %or.cond988, label %.thread, label %228

228:                                              ; preds = %225
  %229 = getelementptr inbounds i8, ptr %.0508853, i64 8
  %230 = load i32, ptr %229, align 8, !tbaa !24
  %231 = sext i32 %230 to i64
  %232 = sub nsw i64 %186, %231
  %233 = icmp slt i64 %232, 1
  %234 = load i32, ptr @GainCriterionUsed, align 4
  %235 = icmp ne i32 %234, 0
  %or.cond17 = select i1 %233, i1 %235, i1 false
  %236 = load i32, ptr @ProblemType, align 4
  %237 = icmp ne i32 %236, 3
  %238 = icmp ne i32 %236, 6
  %239 = and i1 %237, %238
  %or.cond21 = select i1 %or.cond17, i1 %239, i1 false
  br i1 %or.cond21, label %.thread, label %240

240:                                              ; preds = %228
  %241 = add nsw i32 %.0395861, 1
  %242 = load i32, ptr @MaxBreadth, align 4, !tbaa !25
  %.not592 = icmp slt i32 %.0395861, %242
  br i1 %.not592, label %.preheader, label %.loopexit

.preheader:                                       ; preds = %240
  %243 = getelementptr inbounds i8, ptr %219, i64 64
  %244 = getelementptr inbounds i8, ptr %219, i64 72
  %245 = getelementptr inbounds i8, ptr %219, i64 304
  %246 = icmp eq ptr %219, %58
  %247 = getelementptr inbounds i8, ptr %219, i64 152
  %248 = getelementptr inbounds i8, ptr %219, i64 160
  %249 = getelementptr inbounds i8, ptr %219, i64 96
  %250 = getelementptr inbounds i8, ptr %219, i64 112
  %251 = getelementptr inbounds i8, ptr %219, i64 200
  %252 = getelementptr inbounds i8, ptr %219, i64 36
  br label %253

253:                                              ; preds = %.preheader, %476
  %.0400848 = phi i32 [ 1, %.preheader ], [ %477, %476 ]
  %.5847 = phi i32 [ %.4860, %.preheader ], [ %.6, %476 ]
  %.5410846 = phi i32 [ %.4409859, %.preheader ], [ %.6411, %476 ]
  %.5431845 = phi i64 [ %.4430858, %.preheader ], [ %.6432, %476 ]
  %.5464844 = phi ptr [ %.4463857, %.preheader ], [ %.7466, %476 ]
  %.5477843 = phi ptr [ %.4476856, %.preheader ], [ %.6478, %476 ]
  %.5489842 = phi ptr [ %.4488855, %.preheader ], [ %.6490, %476 ]
  %.5501841 = phi ptr [ %.4500854, %.preheader ], [ %.6502, %476 ]
  %.5516840 = phi ptr [ %.4515852, %.preheader ], [ %.6517, %476 ]
  %.5528839 = phi ptr [ %.4527851, %.preheader ], [ %.6529, %476 ]
  %.5540838 = phi ptr [ %.4539850, %.preheader ], [ %.6541, %476 ]
  %254 = icmp eq i32 %.0400848, 1
  br i1 %254, label %255, label %318

255:                                              ; preds = %253
  switch i32 %.4421, label %.thread [
    i32 1, label %256
    i32 2, label %265
    i32 3, label %274
    i32 4, label %282
    i32 5, label %293
    i32 6, label %299
    i32 7, label %308
  ]

256:                                              ; preds = %255
  %257 = call i32 @Between_SL(ptr noundef %1, ptr noundef nonnull %219, ptr noundef nonnull %98) #3
  %.not605 = icmp eq i32 %257, 0
  %258 = load i16, ptr @Reversed, align 2, !tbaa !9
  %259 = load ptr, ptr %245, align 8, !tbaa !11
  %260 = load i8, ptr %259, align 8, !tbaa !16
  %261 = sext i8 %260 to i16
  %262 = icmp eq i16 %258, %261
  br i1 %.not605, label %264, label %263

263:                                              ; preds = %256
  %.989.v = select i1 %262, i64 72, i64 64
  br label %316

264:                                              ; preds = %256
  %.990.v = select i1 %262, i64 64, i64 72
  br label %316

265:                                              ; preds = %255
  %266 = call i32 @Between_SL(ptr noundef nonnull %24, ptr noundef nonnull %219, ptr noundef %.4454) #3
  %.not603 = icmp eq i32 %266, 0
  %267 = load i16, ptr @Reversed, align 2, !tbaa !9
  %268 = load ptr, ptr %245, align 8, !tbaa !11
  %269 = load i8, ptr %268, align 8, !tbaa !16
  %270 = sext i8 %269 to i16
  %271 = icmp eq i16 %267, %270
  br i1 %.not603, label %273, label %272

272:                                              ; preds = %265
  %.991.v = select i1 %271, i64 72, i64 64
  br label %316

273:                                              ; preds = %265
  %.992.v = select i1 %271, i64 64, i64 72
  br label %316

274:                                              ; preds = %255
  %275 = call i32 @Between_SL(ptr noundef nonnull %98, ptr noundef nonnull %219, ptr noundef %58) #3
  %.not601 = icmp eq i32 %275, 0
  br i1 %.not601, label %.thread, label %276

276:                                              ; preds = %274
  %277 = load i16, ptr @Reversed, align 2, !tbaa !9
  %278 = load ptr, ptr %245, align 8, !tbaa !11
  %279 = load i8, ptr %278, align 8, !tbaa !16
  %280 = sext i8 %279 to i16
  %281 = icmp eq i16 %277, %280
  %.in602.v = select i1 %281, i64 72, i64 64
  br label %316

282:                                              ; preds = %255
  %283 = call i32 @Between_SL(ptr noundef %1, ptr noundef nonnull %219, ptr noundef nonnull %98) #3
  %.not598 = icmp eq i32 %283, 0
  br i1 %.not598, label %.thread, label %284

284:                                              ; preds = %282
  %285 = call i32 @Between_SL(ptr noundef %1, ptr noundef nonnull %219, ptr noundef %58) #3
  %.not599 = icmp eq i32 %285, 0
  %286 = load i16, ptr @Reversed, align 2, !tbaa !9
  %287 = load ptr, ptr %245, align 8, !tbaa !11
  %288 = load i8, ptr %287, align 8, !tbaa !16
  %289 = sext i8 %288 to i16
  %290 = icmp eq i16 %286, %289
  br i1 %.not599, label %292, label %291

291:                                              ; preds = %284
  %.993.v = select i1 %290, i64 72, i64 64
  br label %316

292:                                              ; preds = %284
  %.994.v = select i1 %290, i64 64, i64 72
  br label %316

293:                                              ; preds = %255
  %294 = load i16, ptr @Reversed, align 2, !tbaa !9
  %295 = load ptr, ptr %245, align 8, !tbaa !11
  %296 = load i8, ptr %295, align 8, !tbaa !16
  %297 = sext i8 %296 to i16
  %298 = icmp eq i16 %294, %297
  %.in597.v = select i1 %298, i64 64, i64 72
  br label %316

299:                                              ; preds = %255
  %300 = call i32 @Between_SL(ptr noundef %1, ptr noundef nonnull %219, ptr noundef nonnull %24) #3
  %.not595 = icmp eq i32 %300, 0
  %301 = load i16, ptr @Reversed, align 2, !tbaa !9
  %302 = load ptr, ptr %245, align 8, !tbaa !11
  %303 = load i8, ptr %302, align 8, !tbaa !16
  %304 = sext i8 %303 to i16
  %305 = icmp eq i16 %301, %304
  br i1 %.not595, label %307, label %306

306:                                              ; preds = %299
  %.995.v = select i1 %305, i64 72, i64 64
  br label %316

307:                                              ; preds = %299
  %.996.v = select i1 %305, i64 64, i64 72
  br label %316

308:                                              ; preds = %255
  %309 = call i32 @Between_SL(ptr noundef %1, ptr noundef nonnull %219, ptr noundef nonnull %24) #3
  %.not593 = icmp eq i32 %309, 0
  br i1 %.not593, label %.thread, label %310

310:                                              ; preds = %308
  %311 = load i16, ptr @Reversed, align 2, !tbaa !9
  %312 = load ptr, ptr %245, align 8, !tbaa !11
  %313 = load i8, ptr %312, align 8, !tbaa !16
  %314 = sext i8 %313 to i16
  %315 = icmp eq i16 %311, %314
  %.in594.v = select i1 %315, i64 72, i64 64
  br label %316

316:                                              ; preds = %307, %306, %292, %291, %273, %272, %264, %263, %310, %276, %293
  %.996.v.sink = phi i64 [ %.996.v, %307 ], [ %.995.v, %306 ], [ %.994.v, %292 ], [ %.993.v, %291 ], [ %.992.v, %273 ], [ %.991.v, %272 ], [ %.990.v, %264 ], [ %.989.v, %263 ], [ %.in594.v, %310 ], [ %.in602.v, %276 ], [ %.in597.v, %293 ]
  %.996 = getelementptr inbounds i8, ptr %219, i64 %.996.v.sink
  %.6465 = load ptr, ptr %.996, align 8, !tbaa !18
  %317 = icmp eq ptr %.6465, null
  br i1 %317, label %.thread, label %327

318:                                              ; preds = %253
  switch i32 %.4421, label %.thread [
    i32 7, label %319
    i32 4, label %319
    i32 3, label %319
  ]

319:                                              ; preds = %318, %318, %318
  %320 = load ptr, ptr %243, align 8, !tbaa !22
  %321 = icmp eq ptr %.5464844, %320
  br i1 %321, label %322, label %324

322:                                              ; preds = %319
  %323 = load ptr, ptr %244, align 8, !tbaa !23
  br label %324

324:                                              ; preds = %319, %322
  %325 = phi ptr [ %323, %322 ], [ %320, %319 ]
  %326 = add nsw i32 %.5410846, 8
  br label %327

327:                                              ; preds = %316, %324
  %.7466 = phi ptr [ %.6465, %316 ], [ %325, %324 ]
  %.6411 = phi i32 [ %.4421, %316 ], [ %326, %324 ]
  %328 = icmp eq ptr %.7466, %0
  %329 = icmp eq ptr %.7466, %58
  %or.cond623 = and i1 %226, %329
  %or.cond626 = or i1 %328, %or.cond623
  %330 = icmp eq ptr %.7466, %24
  %or.cond624 = and i1 %246, %330
  %or.cond997 = or i1 %or.cond626, %or.cond624
  br i1 %or.cond997, label %476, label %331

331:                                              ; preds = %327
  %332 = load ptr, ptr %247, align 8, !tbaa !26
  %333 = icmp eq ptr %332, %.7466
  br i1 %333, label %476, label %334

334:                                              ; preds = %331
  %335 = load ptr, ptr %248, align 8, !tbaa !27
  %336 = icmp eq ptr %335, %.7466
  br i1 %336, label %476, label %337

337:                                              ; preds = %334
  %338 = call i32 @IsCommonEdge(ptr noundef nonnull %219, ptr noundef %.7466) #3
  %.not607 = icmp eq i32 %338, 0
  br i1 %.not607, label %339, label %476

339:                                              ; preds = %337
  %340 = load ptr, ptr @C, align 8, !tbaa !18
  %341 = call i32 %340(ptr noundef nonnull %219, ptr noundef %.7466) #3
  %342 = sext i32 %341 to i64
  %343 = add nsw i64 %232, %342
  %344 = call i32 @Forbidden(ptr noundef %.7466, ptr noundef %0) #3
  %.not609 = icmp eq i32 %344, 0
  br i1 %.not609, label %345, label %358

345:                                              ; preds = %339
  %346 = load ptr, ptr @c, align 8, !tbaa !18
  %.not610 = icmp eq ptr %346, null
  br i1 %.not610, label %351, label %347

347:                                              ; preds = %345
  %348 = call i32 %346(ptr noundef %.7466, ptr noundef %0) #3
  %349 = sext i32 %348 to i64
  %350 = icmp sgt i64 %343, %349
  br i1 %350, label %351, label %358

351:                                              ; preds = %347, %345
  %352 = load ptr, ptr @C, align 8, !tbaa !18
  %353 = call i32 %352(ptr noundef %.7466, ptr noundef %0) #3
  %354 = sext i32 %353 to i64
  %355 = sub nsw i64 %343, %354
  store i64 %355, ptr %3, align 8, !tbaa !5
  %356 = icmp sgt i64 %355, 0
  br i1 %356, label %357, label %358

357:                                              ; preds = %351
  call void @Make4OptMove(ptr noundef %0, ptr noundef %1, ptr noundef nonnull %24, ptr noundef %58, ptr noundef nonnull %98, ptr noundef %.4454, ptr noundef nonnull %219, ptr noundef %.7466, i32 noundef %.6411) #3
  br label %487

358:                                              ; preds = %351, %347, %339
  %359 = load i32, ptr @GainCriterionUsed, align 4, !tbaa !25
  %.not611 = icmp eq i32 %359, 0
  br i1 %.not611, label %368, label %360

360:                                              ; preds = %358
  %361 = load i32, ptr @Precision, align 4, !tbaa !25
  %362 = sext i32 %361 to i64
  %363 = sub nsw i64 %343, %362
  %364 = getelementptr inbounds i8, ptr %.7466, i64 20
  %365 = load i32, ptr %364, align 4, !tbaa !28
  %366 = sext i32 %365 to i64
  %367 = icmp slt i64 %363, %366
  br i1 %367, label %476, label %368

368:                                              ; preds = %360, %358
  %369 = load i32, ptr @Backtracking, align 4, !tbaa !25
  %370 = icmp eq i32 %369, 0
  %371 = load i32, ptr @Swaps, align 4
  %372 = icmp sgt i32 %371, 0
  %or.cond27 = select i1 %370, i1 true, i1 %372
  br i1 %or.cond27, label %373, label %456

373:                                              ; preds = %368
  %374 = icmp sgt i64 %343, %.5431845
  br i1 %374, label %409, label %375

375:                                              ; preds = %373
  %376 = icmp eq i64 %343, %.5431845
  br i1 %376, label %377, label %476

377:                                              ; preds = %375
  %378 = load ptr, ptr %249, align 8, !tbaa !29
  %.not615 = icmp eq ptr %378, null
  br i1 %.not615, label %385, label %379

379:                                              ; preds = %377
  %380 = icmp eq ptr %378, %.7466
  br i1 %380, label %476, label %381

381:                                              ; preds = %379
  %382 = getelementptr inbounds i8, ptr %.7466, i64 96
  %383 = load ptr, ptr %382, align 8, !tbaa !29
  %384 = icmp eq ptr %383, %219
  br i1 %384, label %476, label %392

385:                                              ; preds = %377
  %386 = load ptr, ptr %250, align 8, !tbaa !30
  %387 = icmp eq ptr %386, %.7466
  br i1 %387, label %476, label %388

388:                                              ; preds = %385
  %389 = getelementptr inbounds i8, ptr %.7466, i64 112
  %390 = load ptr, ptr %389, align 8, !tbaa !30
  %391 = icmp eq ptr %390, %219
  br i1 %391, label %476, label %392

392:                                              ; preds = %388, %381
  %393 = getelementptr inbounds i8, ptr %.5528839, i64 96
  %394 = load ptr, ptr %393, align 8, !tbaa !29
  %.not616 = icmp eq ptr %394, null
  br i1 %.not616, label %401, label %395

395:                                              ; preds = %392
  %396 = icmp eq ptr %394, %.5516840
  br i1 %396, label %409, label %397

397:                                              ; preds = %395
  %398 = getelementptr inbounds i8, ptr %.5516840, i64 96
  %399 = load ptr, ptr %398, align 8, !tbaa !29
  %400 = icmp eq ptr %399, %.5528839
  br i1 %400, label %409, label %476

401:                                              ; preds = %392
  %402 = getelementptr inbounds i8, ptr %.5528839, i64 112
  %403 = load ptr, ptr %402, align 8, !tbaa !30
  %404 = icmp eq ptr %403, %.5516840
  br i1 %404, label %409, label %405

405:                                              ; preds = %401
  %406 = getelementptr inbounds i8, ptr %.5516840, i64 112
  %407 = load ptr, ptr %406, align 8, !tbaa !30
  %408 = icmp eq ptr %407, %.5528839
  br i1 %408, label %409, label %476

409:                                              ; preds = %405, %401, %397, %395, %373
  %410 = load i32, ptr @MaxSwaps, align 4, !tbaa !25
  %411 = icmp slt i32 %371, %410
  br i1 %411, label %412, label %476

412:                                              ; preds = %409
  %413 = call i32 @Excludable(ptr noundef nonnull %219, ptr noundef %.7466) #3
  %.not617 = icmp eq i32 %413, 0
  br i1 %.not617, label %476, label %414

414:                                              ; preds = %412
  %415 = load ptr, ptr %251, align 8, !tbaa !31
  %416 = icmp eq ptr %415, %.7466
  br i1 %416, label %476, label %417

417:                                              ; preds = %414
  %418 = getelementptr inbounds i8, ptr %.7466, i64 200
  %419 = load ptr, ptr %418, align 8, !tbaa !31
  %420 = icmp eq ptr %419, %219
  br i1 %420, label %476, label %421

421:                                              ; preds = %417
  %422 = load i32, ptr @RestrictedSearch, align 4, !tbaa !25
  %423 = icmp ne i32 %422, 0
  %424 = load i32, ptr @ProblemType, align 4
  %425 = icmp ne i32 %424, 3
  %426 = icmp ne i32 %424, 6
  %427 = and i1 %425, %426
  %or.cond31 = select i1 %423, i1 %427, i1 false
  br i1 %or.cond31, label %428, label %455

428:                                              ; preds = %421
  %429 = load i32, ptr %96, align 4, !tbaa !32
  %430 = sext i32 %429 to i64
  %431 = sub nsw i64 %70, %430
  %432 = load i32, ptr %217, align 4, !tbaa !32
  %433 = sext i32 %432 to i64
  %434 = sub nsw i64 %186, %433
  %435 = icmp eq i64 %431, %434
  br i1 %435, label %436, label %455

436:                                              ; preds = %428
  %437 = getelementptr inbounds i8, ptr %.7466, i64 36
  %438 = load i32, ptr %437, align 4, !tbaa !32
  %439 = sext i32 %438 to i64
  %440 = sub nsw i64 %343, %439
  %441 = icmp eq i64 %431, %440
  br i1 %441, label %442, label %455

442:                                              ; preds = %436
  %443 = load i32, ptr %126, align 4, !tbaa !32
  %444 = sext i32 %443 to i64
  %445 = add nsw i64 %108, %444
  %446 = load i32, ptr %49, align 4, !tbaa !32
  %447 = sext i32 %446 to i64
  %448 = add nsw i64 %35, %447
  %449 = icmp eq i64 %445, %448
  br i1 %449, label %450, label %455

450:                                              ; preds = %442
  %451 = load i32, ptr %252, align 4, !tbaa !32
  %452 = sext i32 %451 to i64
  %453 = add nsw i64 %232, %452
  %454 = icmp eq i64 %453, %445
  br i1 %454, label %476, label %455

455:                                              ; preds = %450, %442, %436, %428, %421
  br label %476

456:                                              ; preds = %368
  %457 = load i32, ptr @MaxSwaps, align 4, !tbaa !25
  %458 = icmp sgt i32 %457, 0
  br i1 %458, label %459, label %476

459:                                              ; preds = %456
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #3
  store i64 %343, ptr %5, align 8, !tbaa !5
  call void @Make4OptMove(ptr noundef %0, ptr noundef %1, ptr noundef nonnull %24, ptr noundef %58, ptr noundef nonnull %98, ptr noundef %.4454, ptr noundef nonnull %219, ptr noundef %.7466, i32 noundef %.6411) #3
  call void @Exclude(ptr noundef %0, ptr noundef %1) #3
  call void @Exclude(ptr noundef nonnull %24, ptr noundef %58) #3
  call void @Exclude(ptr noundef nonnull %98, ptr noundef %.4454) #3
  call void @Exclude(ptr noundef nonnull %219, ptr noundef %.7466) #3
  br label %460

460:                                              ; preds = %460, %459
  %.0 = phi ptr [ %.7466, %459 ], [ %462, %460 ]
  %461 = load ptr, ptr @BestSubsequentMove, align 8, !tbaa !18
  %462 = call ptr %461(ptr noundef %0, ptr noundef %.0, ptr noundef nonnull %5, ptr noundef nonnull %3) #3
  %.not612 = icmp eq ptr %462, null
  br i1 %.not612, label %463, label %460, !llvm.loop !33

463:                                              ; preds = %460
  %464 = load i64, ptr %3, align 8, !tbaa !5
  %465 = icmp slt i64 %464, 1
  br i1 %465, label %466, label %.critedge

466:                                              ; preds = %463
  call void @RestoreTour() #3
  %467 = load i16, ptr @Reversed, align 2, !tbaa !9
  %468 = load ptr, ptr %7, align 8, !tbaa !11
  %469 = load i8, ptr %468, align 8, !tbaa !16
  %470 = sext i8 %469 to i16
  %471 = icmp eq i16 %467, %470
  %.in613 = select i1 %471, ptr %12, ptr %13
  %472 = load ptr, ptr %.in613, align 8, !tbaa !18
  %.not614 = icmp eq ptr %472, %1
  br i1 %.not614, label %475, label %473

473:                                              ; preds = %466
  %474 = xor i16 %467, 1
  store i16 %474, ptr @Reversed, align 2, !tbaa !9
  br label %475

475:                                              ; preds = %466, %473
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #3
  br label %476

476:                                              ; preds = %475, %455, %417, %414, %412, %409, %405, %397, %388, %385, %381, %379, %375, %456, %450, %360, %331, %334, %337, %327
  %.6541 = phi ptr [ %.5540838, %327 ], [ %.5540838, %331 ], [ %.5540838, %334 ], [ %.5540838, %337 ], [ %.5540838, %360 ], [ %.5540838, %414 ], [ %.5540838, %417 ], [ %.5540838, %450 ], [ %.4454, %455 ], [ %.5540838, %412 ], [ %.5540838, %409 ], [ %.5540838, %379 ], [ %.5540838, %381 ], [ %.5540838, %397 ], [ %.5540838, %405 ], [ %.5540838, %385 ], [ %.5540838, %388 ], [ %.5540838, %375 ], [ %.5540838, %475 ], [ %.5540838, %456 ]
  %.6529 = phi ptr [ %.5528839, %327 ], [ %.5528839, %331 ], [ %.5528839, %334 ], [ %.5528839, %337 ], [ %.5528839, %360 ], [ %.5528839, %414 ], [ %.5528839, %417 ], [ %.5528839, %450 ], [ %219, %455 ], [ %.5528839, %412 ], [ %.5528839, %409 ], [ %.5528839, %379 ], [ %.5528839, %381 ], [ %.5528839, %397 ], [ %.5528839, %405 ], [ %.5528839, %385 ], [ %.5528839, %388 ], [ %.5528839, %375 ], [ %.5528839, %475 ], [ %.5528839, %456 ]
  %.6517 = phi ptr [ %.5516840, %327 ], [ %.5516840, %331 ], [ %.5516840, %334 ], [ %.5516840, %337 ], [ %.5516840, %360 ], [ %.5516840, %414 ], [ %.5516840, %417 ], [ %.5516840, %450 ], [ %.7466, %455 ], [ %.5516840, %412 ], [ %.5516840, %409 ], [ %.5516840, %379 ], [ %.5516840, %381 ], [ %.5516840, %397 ], [ %.5516840, %405 ], [ %.5516840, %385 ], [ %.5516840, %388 ], [ %.5516840, %375 ], [ %.5516840, %475 ], [ %.5516840, %456 ]
  %.6502 = phi ptr [ %.5501841, %327 ], [ %.5501841, %331 ], [ %.5501841, %334 ], [ %.5501841, %337 ], [ %.5501841, %360 ], [ %.5501841, %414 ], [ %.5501841, %417 ], [ %.5501841, %450 ], [ %98, %455 ], [ %.5501841, %412 ], [ %.5501841, %409 ], [ %.5501841, %379 ], [ %.5501841, %381 ], [ %.5501841, %397 ], [ %.5501841, %405 ], [ %.5501841, %385 ], [ %.5501841, %388 ], [ %.5501841, %375 ], [ %.5501841, %475 ], [ %.5501841, %456 ]
  %.6490 = phi ptr [ %.5489842, %327 ], [ %.5489842, %331 ], [ %.5489842, %334 ], [ %.5489842, %337 ], [ %.5489842, %360 ], [ %.5489842, %414 ], [ %.5489842, %417 ], [ %.5489842, %450 ], [ %58, %455 ], [ %.5489842, %412 ], [ %.5489842, %409 ], [ %.5489842, %379 ], [ %.5489842, %381 ], [ %.5489842, %397 ], [ %.5489842, %405 ], [ %.5489842, %385 ], [ %.5489842, %388 ], [ %.5489842, %375 ], [ %.5489842, %475 ], [ %.5489842, %456 ]
  %.6478 = phi ptr [ %.5477843, %327 ], [ %.5477843, %331 ], [ %.5477843, %334 ], [ %.5477843, %337 ], [ %.5477843, %360 ], [ %.5477843, %414 ], [ %.5477843, %417 ], [ %.5477843, %450 ], [ %24, %455 ], [ %.5477843, %412 ], [ %.5477843, %409 ], [ %.5477843, %379 ], [ %.5477843, %381 ], [ %.5477843, %397 ], [ %.5477843, %405 ], [ %.5477843, %385 ], [ %.5477843, %388 ], [ %.5477843, %375 ], [ %.5477843, %475 ], [ %.5477843, %456 ]
  %.6432 = phi i64 [ %.5431845, %327 ], [ %.5431845, %331 ], [ %.5431845, %334 ], [ %.5431845, %337 ], [ %.5431845, %360 ], [ %.5431845, %414 ], [ %.5431845, %417 ], [ %.5431845, %450 ], [ %343, %455 ], [ %.5431845, %412 ], [ %.5431845, %409 ], [ %.5431845, %379 ], [ %.5431845, %381 ], [ %.5431845, %397 ], [ %.5431845, %405 ], [ %.5431845, %385 ], [ %.5431845, %388 ], [ %.5431845, %375 ], [ %.5431845, %475 ], [ %.5431845, %456 ]
  %.6 = phi i32 [ %.5847, %327 ], [ %.5847, %331 ], [ %.5847, %334 ], [ %.5847, %337 ], [ %.5847, %360 ], [ %.5847, %414 ], [ %.5847, %417 ], [ %.5847, %450 ], [ %.6411, %455 ], [ %.5847, %412 ], [ %.5847, %409 ], [ %.5847, %379 ], [ %.5847, %381 ], [ %.5847, %397 ], [ %.5847, %405 ], [ %.5847, %385 ], [ %.5847, %388 ], [ %.5847, %375 ], [ %.5847, %475 ], [ %.5847, %456 ]
  %477 = add nuw nsw i32 %.0400848, 1
  %exitcond.not = icmp eq i32 %477, 3
  br i1 %exitcond.not, label %.thread, label %253, !llvm.loop !35

.thread:                                          ; preds = %274, %282, %308, %255, %318, %476, %316, %225, %218, %222, %228
  %.7542 = phi ptr [ %.4539850, %218 ], [ %.4539850, %222 ], [ %.4539850, %228 ], [ %.4539850, %225 ], [ %.5540838, %316 ], [ %.6541, %476 ], [ %.5540838, %318 ], [ %.5540838, %255 ], [ %.5540838, %308 ], [ %.5540838, %282 ], [ %.5540838, %274 ]
  %.7530 = phi ptr [ %.4527851, %218 ], [ %.4527851, %222 ], [ %.4527851, %228 ], [ %.4527851, %225 ], [ %.5528839, %316 ], [ %.6529, %476 ], [ %.5528839, %318 ], [ %.5528839, %255 ], [ %.5528839, %308 ], [ %.5528839, %282 ], [ %.5528839, %274 ]
  %.7518 = phi ptr [ %.4515852, %218 ], [ %.4515852, %222 ], [ %.4515852, %228 ], [ %.4515852, %225 ], [ %.5516840, %316 ], [ %.6517, %476 ], [ %.5516840, %318 ], [ %.5516840, %255 ], [ %.5516840, %308 ], [ %.5516840, %282 ], [ %.5516840, %274 ]
  %.7503 = phi ptr [ %.4500854, %218 ], [ %.4500854, %222 ], [ %.4500854, %228 ], [ %.4500854, %225 ], [ %.5501841, %316 ], [ %.6502, %476 ], [ %.5501841, %318 ], [ %.5501841, %255 ], [ %.5501841, %308 ], [ %.5501841, %282 ], [ %.5501841, %274 ]
  %.7491 = phi ptr [ %.4488855, %218 ], [ %.4488855, %222 ], [ %.4488855, %228 ], [ %.4488855, %225 ], [ %.5489842, %316 ], [ %.6490, %476 ], [ %.5489842, %318 ], [ %.5489842, %255 ], [ %.5489842, %308 ], [ %.5489842, %282 ], [ %.5489842, %274 ]
  %.7479 = phi ptr [ %.4476856, %218 ], [ %.4476856, %222 ], [ %.4476856, %228 ], [ %.4476856, %225 ], [ %.5477843, %316 ], [ %.6478, %476 ], [ %.5477843, %318 ], [ %.5477843, %255 ], [ %.5477843, %308 ], [ %.5477843, %282 ], [ %.5477843, %274 ]
  %.8467 = phi ptr [ %.4463857, %218 ], [ %.4463857, %222 ], [ %.4463857, %228 ], [ %.4463857, %225 ], [ null, %316 ], [ %.7466, %476 ], [ %.5464844, %318 ], [ null, %255 ], [ null, %308 ], [ null, %282 ], [ null, %274 ]
  %.7433 = phi i64 [ %.4430858, %218 ], [ %.4430858, %222 ], [ %.4430858, %228 ], [ %.4430858, %225 ], [ %.5431845, %316 ], [ %.6432, %476 ], [ %.5431845, %318 ], [ %.5431845, %255 ], [ %.5431845, %308 ], [ %.5431845, %282 ], [ %.5431845, %274 ]
  %.7412 = phi i32 [ %.4409859, %218 ], [ %.4409859, %222 ], [ %.4409859, %228 ], [ %.4409859, %225 ], [ %.4421, %316 ], [ %.6411, %476 ], [ %.5410846, %318 ], [ %.4421, %255 ], [ 7, %308 ], [ 4, %282 ], [ 3, %274 ]
  %.7 = phi i32 [ %.4860, %218 ], [ %.4860, %222 ], [ %.4860, %228 ], [ %.4860, %225 ], [ %.5847, %316 ], [ %.6, %476 ], [ %.5847, %318 ], [ %.5847, %255 ], [ %.5847, %308 ], [ %.5847, %282 ], [ %.5847, %274 ]
  %.1 = phi i32 [ %.0395861, %218 ], [ %.0395861, %222 ], [ %.0395861, %228 ], [ %.0395861, %225 ], [ %241, %316 ], [ %241, %476 ], [ %241, %318 ], [ %241, %255 ], [ %241, %308 ], [ %241, %282 ], [ %241, %274 ]
  %478 = getelementptr inbounds i8, ptr %.0508853, i64 16
  %479 = load ptr, ptr %478, align 8, !tbaa !20
  %.not591 = icmp eq ptr %479, null
  br i1 %.not591, label %.loopexit, label %218, !llvm.loop !36

.loopexit:                                        ; preds = %240, %.thread, %209, %145, %207, %174, %177, %180, %166, %153
  %.8543 = phi ptr [ %.3538882, %174 ], [ %.3538882, %177 ], [ %.3538882, %180 ], [ %.3538882, %207 ], [ %.3538882, %153 ], [ %.3538882, %166 ], [ %.3538882, %145 ], [ %.3538882, %209 ], [ %.4539850, %240 ], [ %.7542, %.thread ]
  %.8531 = phi ptr [ %.3526883, %174 ], [ %.3526883, %177 ], [ %.3526883, %180 ], [ %.3526883, %207 ], [ %.3526883, %153 ], [ %.3526883, %166 ], [ %.3526883, %145 ], [ %.3526883, %209 ], [ %.4527851, %240 ], [ %.7530, %.thread ]
  %.8519 = phi ptr [ %.3514884, %174 ], [ %.3514884, %177 ], [ %.3514884, %180 ], [ %.3514884, %207 ], [ %.3514884, %153 ], [ %.3514884, %166 ], [ %.3514884, %145 ], [ %.3514884, %209 ], [ %.4515852, %240 ], [ %.7518, %.thread ]
  %.8504 = phi ptr [ %.3499885, %174 ], [ %.3499885, %177 ], [ %.3499885, %180 ], [ %.3499885, %207 ], [ %.3499885, %153 ], [ %.3499885, %166 ], [ %.3499885, %145 ], [ %.3499885, %209 ], [ %.4500854, %240 ], [ %.7503, %.thread ]
  %.8492 = phi ptr [ %.3487886, %174 ], [ %.3487886, %177 ], [ %.3487886, %180 ], [ %.3487886, %207 ], [ %.3487886, %153 ], [ %.3487886, %166 ], [ %.3487886, %145 ], [ %.3487886, %209 ], [ %.4488855, %240 ], [ %.7491, %.thread ]
  %.8480 = phi ptr [ %.3475887, %174 ], [ %.3475887, %177 ], [ %.3475887, %180 ], [ %.3475887, %207 ], [ %.3475887, %153 ], [ %.3475887, %166 ], [ %.3475887, %145 ], [ %.3475887, %209 ], [ %.4476856, %240 ], [ %.7479, %.thread ]
  %.9468 = phi ptr [ %.3462888, %174 ], [ %.3462888, %177 ], [ %.3462888, %180 ], [ %.3462888, %207 ], [ %.3462888, %153 ], [ %.3462888, %166 ], [ %.3462888, %145 ], [ %.3462888, %209 ], [ %.4463857, %240 ], [ %.8467, %.thread ]
  %.5455 = phi ptr [ %.4454, %174 ], [ %.4454, %177 ], [ %.4454, %180 ], [ %.4454, %207 ], [ %0, %153 ], [ %1, %166 ], [ %146, %145 ], [ %.4454, %209 ], [ %.4454, %.thread ], [ %.4454, %240 ]
  %.8434 = phi i64 [ %.3429890, %174 ], [ %.3429890, %177 ], [ %.3429890, %180 ], [ %.3429890, %207 ], [ %.3429890, %153 ], [ %.3429890, %166 ], [ %.3429890, %145 ], [ %.3429890, %209 ], [ %.4430858, %240 ], [ %.7433, %.thread ]
  %.5422 = phi i32 [ %.4421, %174 ], [ %.4421, %177 ], [ %.4421, %180 ], [ %.4421, %207 ], [ %154, %153 ], [ 7, %166 ], [ %.3420891, %145 ], [ %.4421, %209 ], [ %.4421, %.thread ], [ %.4421, %240 ]
  %.8413 = phi i32 [ %.3408892, %174 ], [ %.3408892, %177 ], [ %.3408892, %180 ], [ %.3408892, %207 ], [ %.3408892, %153 ], [ %.3408892, %166 ], [ %.3408892, %145 ], [ %.3408892, %209 ], [ %.4409859, %240 ], [ %.7412, %.thread ]
  %.8 = phi i32 [ %.3893, %174 ], [ %.3893, %177 ], [ %.3893, %180 ], [ %.3893, %207 ], [ %.3893, %153 ], [ %.3893, %166 ], [ %.3893, %145 ], [ %.3893, %209 ], [ %.4860, %240 ], [ %.7, %.thread ]
  %480 = add nuw nsw i32 %.0401894, 1
  %exitcond1017.not = icmp eq i32 %480, 3
  br i1 %exitcond1017.not, label %.loopexit628, label %127, !llvm.loop !37

.loopexit628:                                     ; preds = %.loopexit, %164, %97, %101, %104
  %.9544 = phi ptr [ %.2537896, %97 ], [ %.2537896, %101 ], [ %.2537896, %104 ], [ %.3538882, %164 ], [ %.8543, %.loopexit ]
  %.9532 = phi ptr [ %.2525897, %97 ], [ %.2525897, %101 ], [ %.2525897, %104 ], [ %.3526883, %164 ], [ %.8531, %.loopexit ]
  %.9520 = phi ptr [ %.2513898, %97 ], [ %.2513898, %101 ], [ %.2513898, %104 ], [ %.3514884, %164 ], [ %.8519, %.loopexit ]
  %.9505 = phi ptr [ %.2498900, %97 ], [ %.2498900, %101 ], [ %.2498900, %104 ], [ %.3499885, %164 ], [ %.8504, %.loopexit ]
  %.9493 = phi ptr [ %.2486901, %97 ], [ %.2486901, %101 ], [ %.2486901, %104 ], [ %.3487886, %164 ], [ %.8492, %.loopexit ]
  %.9481 = phi ptr [ %.2474902, %97 ], [ %.2474902, %101 ], [ %.2474902, %104 ], [ %.3475887, %164 ], [ %.8480, %.loopexit ]
  %.10469 = phi ptr [ %.2461903, %97 ], [ %.2461903, %101 ], [ %.2461903, %104 ], [ %.3462888, %164 ], [ %.9468, %.loopexit ]
  %.6456 = phi ptr [ %.2452904, %97 ], [ %.2452904, %101 ], [ %.2452904, %104 ], [ %.3453889, %164 ], [ %.5455, %.loopexit ]
  %.9435 = phi i64 [ %.2428905, %97 ], [ %.2428905, %101 ], [ %.2428905, %104 ], [ %.3429890, %164 ], [ %.8434, %.loopexit ]
  %.6423 = phi i32 [ %.2419906, %97 ], [ %.2419906, %101 ], [ %.2419906, %104 ], [ %.3420891, %164 ], [ %.5422, %.loopexit ]
  %.9414 = phi i32 [ %.2407907, %97 ], [ %.2407907, %101 ], [ %.2407907, %104 ], [ %.3408892, %164 ], [ %.8413, %.loopexit ]
  %.9 = phi i32 [ %.2908, %97 ], [ %.2908, %101 ], [ %.2908, %104 ], [ %.3893, %164 ], [ %.8, %.loopexit ]
  %.1397 = phi i32 [ %.0396909, %97 ], [ %.0396909, %101 ], [ %.0396909, %104 ], [ %117, %164 ], [ %117, %.loopexit ]
  %481 = getelementptr inbounds i8, ptr %.0509899, i64 16
  %482 = load ptr, ptr %481, align 8, !tbaa !20
  %.not579 = icmp eq ptr %482, null
  br i1 %.not579, label %.loopexit629, label %97, !llvm.loop !38

.loopexit629:                                     ; preds = %116, %.loopexit628, %90, %88, %50, %61, %64
  %.10545 = phi ptr [ %.1536936, %50 ], [ %.1536936, %61 ], [ %.1536936, %64 ], [ %.1536936, %88 ], [ %.1536936, %90 ], [ %.2537896, %116 ], [ %.9544, %.loopexit628 ]
  %.10533 = phi ptr [ %.1524937, %50 ], [ %.1524937, %61 ], [ %.1524937, %64 ], [ %.1524937, %88 ], [ %.1524937, %90 ], [ %.2525897, %116 ], [ %.9532, %.loopexit628 ]
  %.10521 = phi ptr [ %.1512938, %50 ], [ %.1512938, %61 ], [ %.1512938, %64 ], [ %.1512938, %88 ], [ %.1512938, %90 ], [ %.2513898, %116 ], [ %.9520, %.loopexit628 ]
  %.10506 = phi ptr [ %.1497939, %50 ], [ %.1497939, %61 ], [ %.1497939, %64 ], [ %.1497939, %88 ], [ %.1497939, %90 ], [ %.2498900, %116 ], [ %.9505, %.loopexit628 ]
  %.10494 = phi ptr [ %.1485940, %50 ], [ %.1485940, %61 ], [ %.1485940, %64 ], [ %.1485940, %88 ], [ %.1485940, %90 ], [ %.2486901, %116 ], [ %.9493, %.loopexit628 ]
  %.10482 = phi ptr [ %.1473941, %50 ], [ %.1473941, %61 ], [ %.1473941, %64 ], [ %.1473941, %88 ], [ %.1473941, %90 ], [ %.2474902, %116 ], [ %.9481, %.loopexit628 ]
  %.11470 = phi ptr [ %.1460942, %50 ], [ %.1460942, %61 ], [ %.1460942, %64 ], [ %.1460942, %88 ], [ %.1460942, %90 ], [ %.2461903, %116 ], [ %.10469, %.loopexit628 ]
  %.7457 = phi ptr [ %.1451943, %50 ], [ %.1451943, %61 ], [ %.1451943, %64 ], [ %.1451943, %88 ], [ %.1451943, %90 ], [ %.2452904, %116 ], [ %.6456, %.loopexit628 ]
  %.10436 = phi i64 [ %.1427944, %50 ], [ %.1427944, %61 ], [ %.1427944, %64 ], [ %.1427944, %88 ], [ %.1427944, %90 ], [ %.2428905, %116 ], [ %.9435, %.loopexit628 ]
  %.7424 = phi i32 [ %.1418945, %50 ], [ %.1418945, %61 ], [ %.1418945, %64 ], [ %.1418945, %88 ], [ %.1418945, %90 ], [ %.2419906, %116 ], [ %.6423, %.loopexit628 ]
  %.10415 = phi i32 [ %.1406946, %50 ], [ %.1406946, %61 ], [ %.1406946, %64 ], [ %.1406946, %88 ], [ %.1406946, %90 ], [ %.2407907, %116 ], [ %.9414, %.loopexit628 ]
  %.10 = phi i32 [ %.1404947, %50 ], [ %.1404947, %61 ], [ %.1404947, %64 ], [ %.1404947, %88 ], [ %.1404947, %90 ], [ %.2908, %116 ], [ %.9, %.loopexit628 ]
  %483 = add nuw nsw i32 %.0402948, 1
  %exitcond1018.not = icmp eq i32 %483, 3
  br i1 %exitcond1018.not, label %.loopexit631, label %50, !llvm.loop !39

.loopexit631:                                     ; preds = %.loopexit629, %23, %27, %30
  %.11546 = phi ptr [ %.0535950, %23 ], [ %.0535950, %27 ], [ %.0535950, %30 ], [ %.10545, %.loopexit629 ]
  %.11534 = phi ptr [ %.0523951, %23 ], [ %.0523951, %27 ], [ %.0523951, %30 ], [ %.10533, %.loopexit629 ]
  %.11522 = phi ptr [ %.0511952, %23 ], [ %.0511952, %27 ], [ %.0511952, %30 ], [ %.10521, %.loopexit629 ]
  %.11507 = phi ptr [ %.0496954, %23 ], [ %.0496954, %27 ], [ %.0496954, %30 ], [ %.10506, %.loopexit629 ]
  %.11495 = phi ptr [ %.0484955, %23 ], [ %.0484955, %27 ], [ %.0484955, %30 ], [ %.10494, %.loopexit629 ]
  %.11483 = phi ptr [ %.0472956, %23 ], [ %.0472956, %27 ], [ %.0472956, %30 ], [ %.10482, %.loopexit629 ]
  %.12471 = phi ptr [ %.0459957, %23 ], [ %.0459957, %27 ], [ %.0459957, %30 ], [ %.11470, %.loopexit629 ]
  %.8458 = phi ptr [ %.0450958, %23 ], [ %.0450958, %27 ], [ %.0450958, %30 ], [ %.7457, %.loopexit629 ]
  %.11437 = phi i64 [ %.0426959, %23 ], [ %.0426959, %27 ], [ %.0426959, %30 ], [ %.10436, %.loopexit629 ]
  %.8425 = phi i32 [ %.0417960, %23 ], [ %.0417960, %27 ], [ %.0417960, %30 ], [ %.7424, %.loopexit629 ]
  %.11416 = phi i32 [ %.0405961, %23 ], [ %.0405961, %27 ], [ %.0405961, %30 ], [ %.10415, %.loopexit629 ]
  %.11 = phi i32 [ %.0403962, %23 ], [ %.0403962, %27 ], [ %.0403962, %30 ], [ %.10, %.loopexit629 ]
  %.1399 = phi i32 [ %.0398963, %23 ], [ %.0398963, %27 ], [ %.0398963, %30 ], [ %44, %.loopexit629 ]
  %484 = getelementptr inbounds i8, ptr %.0510953, i64 16
  %485 = load ptr, ptr %484, align 8, !tbaa !20
  %.not571 = icmp eq ptr %485, null
  br i1 %.not571, label %._crit_edge, label %23, !llvm.loop !40

._crit_edge:                                      ; preds = %.loopexit631, %43
  %.0535.lcssa = phi ptr [ %.11546, %.loopexit631 ], [ %.0535950, %43 ]
  %.0523.lcssa = phi ptr [ %.11534, %.loopexit631 ], [ %.0523951, %43 ]
  %.0511.lcssa = phi ptr [ %.11522, %.loopexit631 ], [ %.0511952, %43 ]
  %.0496.lcssa = phi ptr [ %.11507, %.loopexit631 ], [ %.0496954, %43 ]
  %.0484.lcssa = phi ptr [ %.11495, %.loopexit631 ], [ %.0484955, %43 ]
  %.0472.lcssa = phi ptr [ %.11483, %.loopexit631 ], [ %.0472956, %43 ]
  %.0426.lcssa = phi i64 [ %.11437, %.loopexit631 ], [ %.0426959, %43 ]
  %.0403.lcssa = phi i32 [ %.11, %.loopexit631 ], [ %.0403962, %43 ]
  store i64 0, ptr %3, align 8, !tbaa !5
  %.not618 = icmp eq ptr %.0511.lcssa, null
  br i1 %.not618, label %487, label %486

486:                                              ; preds = %._crit_edge
  call void @Make4OptMove(ptr noundef %0, ptr noundef %1, ptr noundef %.0472.lcssa, ptr noundef %.0484.lcssa, ptr noundef %.0496.lcssa, ptr noundef %.0535.lcssa, ptr noundef %.0523.lcssa, ptr noundef nonnull %.0511.lcssa, i32 noundef %.0403.lcssa) #3
  call void @Exclude(ptr noundef %0, ptr noundef %1) #3
  call void @Exclude(ptr noundef %.0472.lcssa, ptr noundef %.0484.lcssa) #3
  call void @Exclude(ptr noundef %.0496.lcssa, ptr noundef %.0535.lcssa) #3
  call void @Exclude(ptr noundef %.0523.lcssa, ptr noundef nonnull %.0511.lcssa) #3
  store i64 %.0426.lcssa, ptr %2, align 8, !tbaa !5
  br label %487

.critedge:                                        ; preds = %463
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #3
  br label %487

487:                                              ; preds = %._crit_edge.thread, %._crit_edge, %486, %.critedge, %357, %204, %85
  %.13 = phi ptr [ null, %357 ], [ null, %204 ], [ null, %85 ], [ null, %.critedge ], [ %.0511.lcssa, %486 ], [ null, %._crit_edge ], [ null, %._crit_edge.thread ]
  ret ptr %.13
}

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

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

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

declare void @Flip_SL(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

declare i32 @Excludable(ptr noundef, ptr noundef) local_unnamed_addr #2

declare i32 @Between_SL(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

declare void @Make3OptMove(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #2

declare void @Make4OptMove(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #2

declare void @Exclude(ptr noundef, ptr noundef) local_unnamed_addr #2

declare void @RestoreTour() local_unnamed_addr #2

; Function Attrs: mustprogress 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 = { mustprogress 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 = !{!"long long", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"short", !7, i64 0}
!11 = !{!12, !14, i64 304}
!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, !14, i64 56, !14, i64 64, !14, i64 72, !14, i64 80, !14, i64 88, !14, i64 96, !14, i64 104, !14, i64 112, !14, i64 120, !14, i64 128, !14, i64 136, !14, i64 144, !14, i64 152, !14, i64 160, !14, i64 168, !14, i64 176, !14, i64 184, !14, i64 192, !14, i64 200, !14, i64 208, !14, i64 216, !14, i64 224, !14, i64 232, !14, i64 240, !14, i64 248, !14, i64 256, !14, i64 264, !14, i64 272, !14, i64 280, !14, i64 288, !14, i64 296, !14, 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}
!13 = !{!"int", !7, i64 0}
!14 = !{!"any pointer", !7, i64 0}
!15 = !{!"double", !7, i64 0}
!16 = !{!17, !7, i64 0}
!17 = !{!"Segment", !7, i64 0, !14, i64 8, !14, i64 16, !14, i64 24, !14, i64 32, !13, i64 40, !13, i64 44, !14, i64 48}
!18 = !{!14, !14, i64 0}
!19 = !{!12, !14, i64 288}
!20 = !{!21, !14, i64 0}
!21 = !{!"Candidate", !14, i64 0, !13, i64 8, !13, i64 12}
!22 = !{!12, !14, i64 64}
!23 = !{!12, !14, i64 72}
!24 = !{!21, !13, i64 8}
!25 = !{!13, !13, i64 0}
!26 = !{!12, !14, i64 152}
!27 = !{!12, !14, i64 160}
!28 = !{!12, !13, i64 20}
!29 = !{!12, !14, i64 96}
!30 = !{!12, !14, i64 112}
!31 = !{!12, !14, i64 200}
!32 = !{!12, !13, i64 36}
!33 = distinct !{!33, !34}
!34 = !{!"llvm.loop.mustprogress"}
!35 = distinct !{!35, !34}
!36 = distinct !{!36, !34}
!37 = distinct !{!37, !34}
!38 = distinct !{!38, !34}
!39 = distinct !{!39, !34}
!40 = distinct !{!40, !34}


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