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

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

@Gain23.s1 = external hidden global ptr, align 8
@Gain23.OldReversed = external hidden global i16, align 2
@FirstNode = external dso_local global ptr, align 8
@Reversed = external dso_local global i16, align 2
@C = external dso_local global ptr, align 8
@MaxBreadth = external dso_local global i32, align 4
@Dimension = external dso_local global i32, align 4
@c = external dso_local global ptr, align 8

; Function Attrs: nounwind uwtable
define dso_local i64 @Gain23() #0 {
  %1 = alloca i64, align 8
  %2 = alloca ptr, align 8
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %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 i64, align 8
  %14 = alloca i64, align 8
  %15 = alloca i64, align 8
  %16 = alloca i64, align 8
  %17 = alloca i64, align 8
  %18 = alloca i64, align 8
  %19 = alloca i64, align 8
  %20 = alloca i64, align 8
  %21 = alloca i64, align 8
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  call void @llvm.lifetime.start.p0(i64 8, ptr %2) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %3) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %4) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #3
  store ptr null, ptr %6, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #3
  store ptr null, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #3
  store i32 0, ptr %26, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #3
  store i32 0, ptr %27, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #3
  %32 = load ptr, ptr @Gain23.s1, align 8, !tbaa !5
  %33 = icmp ne ptr %32, null
  br i1 %33, label %34, label %42

34:                                               ; preds = %0
  %35 = load ptr, ptr @Gain23.s1, align 8, !tbaa !5
  %36 = getelementptr inbounds %struct.Node, ptr %35, i32 0, i32 12
  %37 = load i32, ptr %36, align 8, !tbaa !11
  %38 = load ptr, ptr @FirstNode, align 8, !tbaa !5
  %39 = getelementptr inbounds %struct.Node, ptr %38, i32 0, i32 12
  %40 = load i32, ptr %39, align 8, !tbaa !11
  %41 = icmp ne i32 %37, %40
  br i1 %41, label %42, label %44

42:                                               ; preds = %34, %0
  %43 = load ptr, ptr @FirstNode, align 8, !tbaa !5
  store ptr %43, ptr @Gain23.s1, align 8, !tbaa !5
  br label %44

44:                                               ; preds = %42, %34
  %45 = load ptr, ptr @Gain23.s1, align 8, !tbaa !5
  store ptr %45, ptr %9, align 8, !tbaa !5
  store i32 1, ptr %22, align 4, !tbaa !9
  br label %46

46:                                               ; preds = %1226, %44
  %47 = load i32, ptr %22, align 4, !tbaa !9
  %48 = icmp sle i32 %47, 2
  br i1 %48, label %49, label %1229

49:                                               ; preds = %46
  %50 = load i32, ptr %22, align 4, !tbaa !9
  %51 = icmp eq i32 %50, 1
  br i1 %51, label %52, label %55

52:                                               ; preds = %49
  %53 = load i16, ptr @Gain23.OldReversed, align 2, !tbaa !14
  %54 = sext i16 %53 to i32
  br label %61

55:                                               ; preds = %49
  %56 = load i16, ptr @Gain23.OldReversed, align 2, !tbaa !14
  %57 = sext i16 %56 to i32
  %58 = xor i32 %57, 1
  %59 = trunc i32 %58 to i16
  store i16 %59, ptr @Gain23.OldReversed, align 2, !tbaa !14
  %60 = sext i16 %59 to i32
  br label %61

61:                                               ; preds = %55, %52
  %62 = phi i32 [ %54, %52 ], [ %60, %55 ]
  %63 = trunc i32 %62 to i16
  store i16 %63, ptr @Reversed, align 2, !tbaa !14
  br label %64

64:                                               ; preds = %1221, %61
  %65 = load i16, ptr @Reversed, align 2, !tbaa !14
  %66 = sext i16 %65 to i32
  %67 = load ptr, ptr @Gain23.s1, align 8, !tbaa !5
  %68 = getelementptr inbounds %struct.Node, ptr %67, i32 0, i32 45
  %69 = load ptr, ptr %68, align 8, !tbaa !16
  %70 = getelementptr inbounds %struct.Segment, ptr %69, i32 0, i32 0
  %71 = load i8, ptr %70, align 8, !tbaa !17
  %72 = sext i8 %71 to i32
  %73 = icmp eq i32 %66, %72
  br i1 %73, label %74, label %78

74:                                               ; preds = %64
  %75 = load ptr, ptr @Gain23.s1, align 8, !tbaa !5
  %76 = getelementptr inbounds %struct.Node, ptr %75, i32 0, i32 16
  %77 = load ptr, ptr %76, align 8, !tbaa !19
  br label %82

78:                                               ; preds = %64
  %79 = load ptr, ptr @Gain23.s1, align 8, !tbaa !5
  %80 = getelementptr inbounds %struct.Node, ptr %79, i32 0, i32 15
  %81 = load ptr, ptr %80, align 8, !tbaa !20
  br label %82

82:                                               ; preds = %78, %74
  %83 = phi ptr [ %77, %74 ], [ %81, %78 ]
  store ptr %83, ptr %2, align 8, !tbaa !5
  %84 = load ptr, ptr @Gain23.s1, align 8, !tbaa !5
  %85 = getelementptr inbounds %struct.Node, ptr %84, i32 0, i32 26
  %86 = load ptr, ptr %85, align 8, !tbaa !21
  %87 = load ptr, ptr %2, align 8, !tbaa !5
  %88 = icmp eq ptr %86, %87
  br i1 %88, label %100, label %89

89:                                               ; preds = %82
  %90 = load ptr, ptr @Gain23.s1, align 8, !tbaa !5
  %91 = getelementptr inbounds %struct.Node, ptr %90, i32 0, i32 27
  %92 = load ptr, ptr %91, align 8, !tbaa !22
  %93 = load ptr, ptr %2, align 8, !tbaa !5
  %94 = icmp eq ptr %92, %93
  br i1 %94, label %100, label %95

95:                                               ; preds = %89
  %96 = load ptr, ptr @Gain23.s1, align 8, !tbaa !5
  %97 = load ptr, ptr %2, align 8, !tbaa !5
  %98 = call i32 @IsCommonEdge(ptr noundef %96, ptr noundef %97)
  %99 = icmp ne i32 %98, 0
  br i1 %99, label %100, label %101

100:                                              ; preds = %95, %89, %82
  br label %1221

101:                                              ; preds = %95
  %102 = load ptr, ptr @C, align 8, !tbaa !5
  %103 = load ptr, ptr @Gain23.s1, align 8, !tbaa !5
  %104 = load ptr, ptr %2, align 8, !tbaa !5
  %105 = call i32 %102(ptr noundef %103, ptr noundef %104)
  %106 = sext i32 %105 to i64
  store i64 %106, ptr %13, align 8, !tbaa !23
  store i32 0, ptr %28, align 4, !tbaa !9
  %107 = load ptr, ptr %2, align 8, !tbaa !5
  %108 = getelementptr inbounds %struct.Node, ptr %107, i32 0, i32 43
  %109 = load ptr, ptr %108, align 8, !tbaa !25
  store ptr %109, ptr %10, align 8, !tbaa !5
  br label %110

110:                                              ; preds = %1217, %101
  %111 = load ptr, ptr %10, align 8, !tbaa !5
  %112 = getelementptr inbounds %struct.Candidate, ptr %111, i32 0, i32 0
  %113 = load ptr, ptr %112, align 8, !tbaa !26
  store ptr %113, ptr %3, align 8, !tbaa !5
  %114 = icmp ne ptr %113, null
  br i1 %114, label %115, label %1220

115:                                              ; preds = %110
  %116 = load ptr, ptr %3, align 8, !tbaa !5
  %117 = load ptr, ptr %2, align 8, !tbaa !5
  %118 = getelementptr inbounds %struct.Node, ptr %117, i32 0, i32 15
  %119 = load ptr, ptr %118, align 8, !tbaa !20
  %120 = icmp eq ptr %116, %119
  br i1 %120, label %127, label %121

121:                                              ; preds = %115
  %122 = load ptr, ptr %3, align 8, !tbaa !5
  %123 = load ptr, ptr %2, align 8, !tbaa !5
  %124 = getelementptr inbounds %struct.Node, ptr %123, i32 0, i32 16
  %125 = load ptr, ptr %124, align 8, !tbaa !19
  %126 = icmp eq ptr %122, %125
  br i1 %126, label %127, label %128

127:                                              ; preds = %121, %115
  br label %1217

128:                                              ; preds = %121
  %129 = load i32, ptr %28, align 4, !tbaa !9
  %130 = add nsw i32 %129, 1
  store i32 %130, ptr %28, align 4, !tbaa !9
  %131 = load i32, ptr @MaxBreadth, align 4, !tbaa !9
  %132 = icmp sgt i32 %130, %131
  br i1 %132, label %133, label %134

133:                                              ; preds = %128
  br label %1220

134:                                              ; preds = %128
  %135 = load i64, ptr %13, align 8, !tbaa !23
  %136 = load ptr, ptr %10, align 8, !tbaa !5
  %137 = getelementptr inbounds %struct.Candidate, ptr %136, i32 0, i32 1
  %138 = load i32, ptr %137, align 8, !tbaa !28
  %139 = sext i32 %138 to i64
  %140 = sub nsw i64 %135, %139
  store i64 %140, ptr %14, align 8, !tbaa !23
  store i32 1, ptr %23, align 4, !tbaa !9
  br label %141

141:                                              ; preds = %1213, %134
  %142 = load i32, ptr %23, align 4, !tbaa !9
  %143 = icmp sle i32 %142, 2
  br i1 %143, label %144, label %1216

144:                                              ; preds = %141
  %145 = load i32, ptr %23, align 4, !tbaa !9
  %146 = icmp eq i32 %145, 1
  br i1 %146, label %147, label %167

147:                                              ; preds = %144
  %148 = load i16, ptr @Reversed, align 2, !tbaa !14
  %149 = sext i16 %148 to i32
  %150 = load ptr, ptr %3, align 8, !tbaa !5
  %151 = getelementptr inbounds %struct.Node, ptr %150, i32 0, i32 45
  %152 = load ptr, ptr %151, align 8, !tbaa !16
  %153 = getelementptr inbounds %struct.Segment, ptr %152, i32 0, i32 0
  %154 = load i8, ptr %153, align 8, !tbaa !17
  %155 = sext i8 %154 to i32
  %156 = icmp eq i32 %149, %155
  br i1 %156, label %157, label %161

157:                                              ; preds = %147
  %158 = load ptr, ptr %3, align 8, !tbaa !5
  %159 = getelementptr inbounds %struct.Node, ptr %158, i32 0, i32 16
  %160 = load ptr, ptr %159, align 8, !tbaa !19
  br label %165

161:                                              ; preds = %147
  %162 = load ptr, ptr %3, align 8, !tbaa !5
  %163 = getelementptr inbounds %struct.Node, ptr %162, i32 0, i32 15
  %164 = load ptr, ptr %163, align 8, !tbaa !20
  br label %165

165:                                              ; preds = %161, %157
  %166 = phi ptr [ %160, %157 ], [ %164, %161 ]
  br label %187

167:                                              ; preds = %144
  %168 = load i16, ptr @Reversed, align 2, !tbaa !14
  %169 = sext i16 %168 to i32
  %170 = load ptr, ptr %3, align 8, !tbaa !5
  %171 = getelementptr inbounds %struct.Node, ptr %170, i32 0, i32 45
  %172 = load ptr, ptr %171, align 8, !tbaa !16
  %173 = getelementptr inbounds %struct.Segment, ptr %172, i32 0, i32 0
  %174 = load i8, ptr %173, align 8, !tbaa !17
  %175 = sext i8 %174 to i32
  %176 = icmp eq i32 %169, %175
  br i1 %176, label %177, label %181

177:                                              ; preds = %167
  %178 = load ptr, ptr %3, align 8, !tbaa !5
  %179 = getelementptr inbounds %struct.Node, ptr %178, i32 0, i32 15
  %180 = load ptr, ptr %179, align 8, !tbaa !20
  br label %185

181:                                              ; preds = %167
  %182 = load ptr, ptr %3, align 8, !tbaa !5
  %183 = getelementptr inbounds %struct.Node, ptr %182, i32 0, i32 16
  %184 = load ptr, ptr %183, align 8, !tbaa !19
  br label %185

185:                                              ; preds = %181, %177
  %186 = phi ptr [ %180, %177 ], [ %184, %181 ]
  br label %187

187:                                              ; preds = %185, %165
  %188 = phi ptr [ %166, %165 ], [ %186, %185 ]
  store ptr %188, ptr %4, align 8, !tbaa !5
  %189 = load ptr, ptr %3, align 8, !tbaa !5
  %190 = getelementptr inbounds %struct.Node, ptr %189, i32 0, i32 26
  %191 = load ptr, ptr %190, align 8, !tbaa !21
  %192 = load ptr, ptr %4, align 8, !tbaa !5
  %193 = icmp eq ptr %191, %192
  br i1 %193, label %205, label %194

194:                                              ; preds = %187
  %195 = load ptr, ptr %3, align 8, !tbaa !5
  %196 = getelementptr inbounds %struct.Node, ptr %195, i32 0, i32 27
  %197 = load ptr, ptr %196, align 8, !tbaa !22
  %198 = load ptr, ptr %4, align 8, !tbaa !5
  %199 = icmp eq ptr %197, %198
  br i1 %199, label %205, label %200

200:                                              ; preds = %194
  %201 = load ptr, ptr %3, align 8, !tbaa !5
  %202 = load ptr, ptr %4, align 8, !tbaa !5
  %203 = call i32 @IsCommonEdge(ptr noundef %201, ptr noundef %202)
  %204 = icmp ne i32 %203, 0
  br i1 %204, label %205, label %206

205:                                              ; preds = %200, %194, %187
  br label %1213

206:                                              ; preds = %200
  %207 = load i64, ptr %14, align 8, !tbaa !23
  %208 = load ptr, ptr @C, align 8, !tbaa !5
  %209 = load ptr, ptr %3, align 8, !tbaa !5
  %210 = load ptr, ptr %4, align 8, !tbaa !5
  %211 = call i32 %208(ptr noundef %209, ptr noundef %210)
  %212 = sext i32 %211 to i64
  %213 = add nsw i64 %207, %212
  store i64 %213, ptr %15, align 8, !tbaa !23
  %214 = load i32, ptr %23, align 4, !tbaa !9
  %215 = icmp eq i32 %214, 1
  br i1 %215, label %216, label %263

216:                                              ; preds = %206
  %217 = load ptr, ptr %4, align 8, !tbaa !5
  %218 = load ptr, ptr @Gain23.s1, align 8, !tbaa !5
  %219 = icmp ne ptr %217, %218
  br i1 %219, label %220, label %263

220:                                              ; preds = %216
  %221 = load ptr, ptr %4, align 8, !tbaa !5
  %222 = load ptr, ptr @Gain23.s1, align 8, !tbaa !5
  %223 = call i32 @Forbidden(ptr noundef %221, ptr noundef %222)
  %224 = icmp ne i32 %223, 0
  br i1 %224, label %263, label %225

225:                                              ; preds = %220
  %226 = load ptr, ptr %2, align 8, !tbaa !5
  %227 = load ptr, ptr %3, align 8, !tbaa !5
  %228 = call i32 @SegmentSize(ptr noundef %226, ptr noundef %227)
  %229 = mul nsw i32 2, %228
  %230 = load i32, ptr @Dimension, align 4, !tbaa !9
  %231 = icmp sle i32 %229, %230
  br i1 %231, label %232, label %263

232:                                              ; preds = %225
  %233 = load ptr, ptr @c, align 8, !tbaa !5
  %234 = icmp ne ptr %233, null
  br i1 %234, label %235, label %244

235:                                              ; preds = %232
  %236 = load i64, ptr %15, align 8, !tbaa !23
  %237 = load ptr, ptr @c, align 8, !tbaa !5
  %238 = load ptr, ptr %4, align 8, !tbaa !5
  %239 = load ptr, ptr @Gain23.s1, align 8, !tbaa !5
  %240 = call i32 %237(ptr noundef %238, ptr noundef %239)
  %241 = sext i32 %240 to i64
  %242 = sub nsw i64 %236, %241
  %243 = icmp sgt i64 %242, 0
  br i1 %243, label %244, label %263

244:                                              ; preds = %235, %232
  %245 = load i64, ptr %15, align 8, !tbaa !23
  %246 = load ptr, ptr @C, align 8, !tbaa !5
  %247 = load ptr, ptr %4, align 8, !tbaa !5
  %248 = load ptr, ptr @Gain23.s1, align 8, !tbaa !5
  %249 = call i32 %246(ptr noundef %247, ptr noundef %248)
  %250 = sext i32 %249 to i64
  %251 = sub nsw i64 %245, %250
  store i64 %251, ptr %16, align 8, !tbaa !23
  %252 = icmp sgt i64 %251, 0
  br i1 %252, label %253, label %263

253:                                              ; preds = %244
  %254 = load ptr, ptr @Gain23.s1, align 8, !tbaa !5
  %255 = load ptr, ptr %2, align 8, !tbaa !5
  %256 = load ptr, ptr %3, align 8, !tbaa !5
  %257 = load ptr, ptr %4, align 8, !tbaa !5
  %258 = load i64, ptr %16, align 8, !tbaa !23
  %259 = call i64 @BridgeGain(ptr noundef %254, ptr noundef %255, ptr noundef %256, ptr noundef %257, ptr noundef null, ptr noundef null, ptr noundef null, ptr noundef null, i32 noundef 0, i64 noundef %258)
  store i64 %259, ptr %20, align 8, !tbaa !23
  %260 = icmp sgt i64 %259, 0
  br i1 %260, label %261, label %263

261:                                              ; preds = %253
  %262 = load i64, ptr %20, align 8, !tbaa !23
  store i64 %262, ptr %1, align 8
  store i32 1, ptr %31, align 4
  br label %1230

263:                                              ; preds = %253, %244, %235, %225, %220, %216, %206
  %264 = load i32, ptr %23, align 4, !tbaa !9
  %265 = icmp eq i32 %264, 2
  br i1 %265, label %266, label %297

266:                                              ; preds = %263
  %267 = load ptr, ptr %4, align 8, !tbaa !5
  %268 = load ptr, ptr @Gain23.s1, align 8, !tbaa !5
  %269 = call i32 @Forbidden(ptr noundef %267, ptr noundef %268)
  %270 = icmp ne i32 %269, 0
  br i1 %270, label %297, label %271

271:                                              ; preds = %266
  %272 = load ptr, ptr @c, align 8, !tbaa !5
  %273 = icmp ne ptr %272, null
  br i1 %273, label %274, label %283

274:                                              ; preds = %271
  %275 = load i64, ptr %15, align 8, !tbaa !23
  %276 = load ptr, ptr @c, align 8, !tbaa !5
  %277 = load ptr, ptr %4, align 8, !tbaa !5
  %278 = load ptr, ptr @Gain23.s1, align 8, !tbaa !5
  %279 = call i32 %276(ptr noundef %277, ptr noundef %278)
  %280 = sext i32 %279 to i64
  %281 = sub nsw i64 %275, %280
  %282 = icmp sgt i64 %281, 0
  br i1 %282, label %283, label %297

283:                                              ; preds = %274, %271
  %284 = load i64, ptr %15, align 8, !tbaa !23
  %285 = load ptr, ptr @C, align 8, !tbaa !5
  %286 = load ptr, ptr %4, align 8, !tbaa !5
  %287 = load ptr, ptr @Gain23.s1, align 8, !tbaa !5
  %288 = call i32 %285(ptr noundef %286, ptr noundef %287)
  %289 = sext i32 %288 to i64
  %290 = sub nsw i64 %284, %289
  store i64 %290, ptr %20, align 8, !tbaa !23
  %291 = icmp sgt i64 %290, 0
  br i1 %291, label %292, label %297

292:                                              ; preds = %283
  %293 = load ptr, ptr @Gain23.s1, align 8, !tbaa !5
  %294 = load ptr, ptr %2, align 8, !tbaa !5
  %295 = load ptr, ptr %3, align 8, !tbaa !5
  call void @Flip_SL(ptr noundef %293, ptr noundef %294, ptr noundef %295)
  %296 = load i64, ptr %20, align 8, !tbaa !23
  store i64 %296, ptr %1, align 8
  store i32 1, ptr %31, align 4
  br label %1230

297:                                              ; preds = %283, %274, %266, %263
  %298 = load i64, ptr %15, align 8, !tbaa !23
  %299 = load ptr, ptr %4, align 8, !tbaa !5
  %300 = getelementptr inbounds %struct.Node, ptr %299, i32 0, i32 5
  %301 = load i32, ptr %300, align 4, !tbaa !29
  %302 = sext i32 %301 to i64
  %303 = sub nsw i64 %298, %302
  %304 = icmp sle i64 %303, 0
  br i1 %304, label %305, label %306

305:                                              ; preds = %297
  br label %1213

306:                                              ; preds = %297
  store i32 0, ptr %29, align 4, !tbaa !9
  %307 = load ptr, ptr %4, align 8, !tbaa !5
  %308 = getelementptr inbounds %struct.Node, ptr %307, i32 0, i32 43
  %309 = load ptr, ptr %308, align 8, !tbaa !25
  store ptr %309, ptr %11, align 8, !tbaa !5
  br label %310

310:                                              ; preds = %1209, %306
  %311 = load ptr, ptr %11, align 8, !tbaa !5
  %312 = getelementptr inbounds %struct.Candidate, ptr %311, i32 0, i32 0
  %313 = load ptr, ptr %312, align 8, !tbaa !26
  store ptr %313, ptr %5, align 8, !tbaa !5
  %314 = icmp ne ptr %313, null
  br i1 %314, label %315, label %1212

315:                                              ; preds = %310
  %316 = load ptr, ptr %5, align 8, !tbaa !5
  %317 = load ptr, ptr %4, align 8, !tbaa !5
  %318 = getelementptr inbounds %struct.Node, ptr %317, i32 0, i32 15
  %319 = load ptr, ptr %318, align 8, !tbaa !20
  %320 = icmp eq ptr %316, %319
  br i1 %320, label %335, label %321

321:                                              ; preds = %315
  %322 = load ptr, ptr %5, align 8, !tbaa !5
  %323 = load ptr, ptr %4, align 8, !tbaa !5
  %324 = getelementptr inbounds %struct.Node, ptr %323, i32 0, i32 16
  %325 = load ptr, ptr %324, align 8, !tbaa !19
  %326 = icmp eq ptr %322, %325
  br i1 %326, label %335, label %327

327:                                              ; preds = %321
  %328 = load i64, ptr %15, align 8, !tbaa !23
  %329 = load ptr, ptr %11, align 8, !tbaa !5
  %330 = getelementptr inbounds %struct.Candidate, ptr %329, i32 0, i32 1
  %331 = load i32, ptr %330, align 8, !tbaa !28
  %332 = sext i32 %331 to i64
  %333 = sub nsw i64 %328, %332
  store i64 %333, ptr %16, align 8, !tbaa !23
  %334 = icmp sle i64 %333, 0
  br i1 %334, label %335, label %336

335:                                              ; preds = %327, %321, %315
  br label %1209

336:                                              ; preds = %327
  %337 = load i32, ptr %29, align 4, !tbaa !9
  %338 = add nsw i32 %337, 1
  store i32 %338, ptr %29, align 4, !tbaa !9
  %339 = load i32, ptr @MaxBreadth, align 4, !tbaa !9
  %340 = icmp sgt i32 %338, %339
  br i1 %340, label %341, label %342

341:                                              ; preds = %336
  br label %1212

342:                                              ; preds = %336
  store i32 1, ptr %24, align 4, !tbaa !9
  br label %343

343:                                              ; preds = %1205, %342
  %344 = load i32, ptr %24, align 4, !tbaa !9
  %345 = icmp sle i32 %344, 2
  br i1 %345, label %346, label %1208

346:                                              ; preds = %343
  %347 = load i32, ptr %23, align 4, !tbaa !9
  %348 = icmp eq i32 %347, 2
  br i1 %348, label %349, label %433

349:                                              ; preds = %346
  %350 = load i32, ptr %24, align 4, !tbaa !9
  %351 = icmp eq i32 %350, 1
  br i1 %351, label %352, label %405

352:                                              ; preds = %349
  %353 = load ptr, ptr %2, align 8, !tbaa !5
  %354 = load ptr, ptr %5, align 8, !tbaa !5
  %355 = load ptr, ptr %4, align 8, !tbaa !5
  %356 = call i32 @Between_SL(ptr noundef %353, ptr noundef %354, ptr noundef %355)
  %357 = icmp ne i32 %356, 0
  %358 = xor i1 %357, true
  %359 = zext i1 %358 to i32
  %360 = add nsw i32 1, %359
  store i32 %360, ptr %26, align 4, !tbaa !9
  %361 = load i32, ptr %26, align 4, !tbaa !9
  %362 = icmp eq i32 %361, 1
  br i1 %362, label %363, label %383

363:                                              ; preds = %352
  %364 = load i16, ptr @Reversed, align 2, !tbaa !14
  %365 = sext i16 %364 to i32
  %366 = load ptr, ptr %5, align 8, !tbaa !5
  %367 = getelementptr inbounds %struct.Node, ptr %366, i32 0, i32 45
  %368 = load ptr, ptr %367, align 8, !tbaa !16
  %369 = getelementptr inbounds %struct.Segment, ptr %368, i32 0, i32 0
  %370 = load i8, ptr %369, align 8, !tbaa !17
  %371 = sext i8 %370 to i32
  %372 = icmp eq i32 %365, %371
  br i1 %372, label %373, label %377

373:                                              ; preds = %363
  %374 = load ptr, ptr %5, align 8, !tbaa !5
  %375 = getelementptr inbounds %struct.Node, ptr %374, i32 0, i32 16
  %376 = load ptr, ptr %375, align 8, !tbaa !19
  br label %381

377:                                              ; preds = %363
  %378 = load ptr, ptr %5, align 8, !tbaa !5
  %379 = getelementptr inbounds %struct.Node, ptr %378, i32 0, i32 15
  %380 = load ptr, ptr %379, align 8, !tbaa !20
  br label %381

381:                                              ; preds = %377, %373
  %382 = phi ptr [ %376, %373 ], [ %380, %377 ]
  br label %403

383:                                              ; preds = %352
  %384 = load i16, ptr @Reversed, align 2, !tbaa !14
  %385 = sext i16 %384 to i32
  %386 = load ptr, ptr %5, align 8, !tbaa !5
  %387 = getelementptr inbounds %struct.Node, ptr %386, i32 0, i32 45
  %388 = load ptr, ptr %387, align 8, !tbaa !16
  %389 = getelementptr inbounds %struct.Segment, ptr %388, i32 0, i32 0
  %390 = load i8, ptr %389, align 8, !tbaa !17
  %391 = sext i8 %390 to i32
  %392 = icmp eq i32 %385, %391
  br i1 %392, label %393, label %397

393:                                              ; preds = %383
  %394 = load ptr, ptr %5, align 8, !tbaa !5
  %395 = getelementptr inbounds %struct.Node, ptr %394, i32 0, i32 15
  %396 = load ptr, ptr %395, align 8, !tbaa !20
  br label %401

397:                                              ; preds = %383
  %398 = load ptr, ptr %5, align 8, !tbaa !5
  %399 = getelementptr inbounds %struct.Node, ptr %398, i32 0, i32 16
  %400 = load ptr, ptr %399, align 8, !tbaa !19
  br label %401

401:                                              ; preds = %397, %393
  %402 = phi ptr [ %396, %393 ], [ %400, %397 ]
  br label %403

403:                                              ; preds = %401, %381
  %404 = phi ptr [ %382, %381 ], [ %402, %401 ]
  store ptr %404, ptr %6, align 8, !tbaa !5
  br label %432

405:                                              ; preds = %349
  %406 = load ptr, ptr %6, align 8, !tbaa !5
  %407 = load ptr, ptr %5, align 8, !tbaa !5
  %408 = getelementptr inbounds %struct.Node, ptr %407, i32 0, i32 15
  %409 = load ptr, ptr %408, align 8, !tbaa !20
  %410 = icmp eq ptr %406, %409
  br i1 %410, label %411, label %415

411:                                              ; preds = %405
  %412 = load ptr, ptr %5, align 8, !tbaa !5
  %413 = getelementptr inbounds %struct.Node, ptr %412, i32 0, i32 16
  %414 = load ptr, ptr %413, align 8, !tbaa !19
  br label %419

415:                                              ; preds = %405
  %416 = load ptr, ptr %5, align 8, !tbaa !5
  %417 = getelementptr inbounds %struct.Node, ptr %416, i32 0, i32 15
  %418 = load ptr, ptr %417, align 8, !tbaa !20
  br label %419

419:                                              ; preds = %415, %411
  %420 = phi ptr [ %414, %411 ], [ %418, %415 ]
  store ptr %420, ptr %6, align 8, !tbaa !5
  %421 = load ptr, ptr %5, align 8, !tbaa !5
  %422 = load ptr, ptr @Gain23.s1, align 8, !tbaa !5
  %423 = icmp eq ptr %421, %422
  br i1 %423, label %428, label %424

424:                                              ; preds = %419
  %425 = load ptr, ptr %6, align 8, !tbaa !5
  %426 = load ptr, ptr @Gain23.s1, align 8, !tbaa !5
  %427 = icmp eq ptr %425, %426
  br i1 %427, label %428, label %429

428:                                              ; preds = %424, %419
  br label %1205

429:                                              ; preds = %424
  %430 = load i32, ptr %26, align 4, !tbaa !9
  %431 = add nsw i32 %430, 2
  store i32 %431, ptr %26, align 4, !tbaa !9
  br label %432

432:                                              ; preds = %429, %403
  br label %516

433:                                              ; preds = %346
  %434 = load ptr, ptr %2, align 8, !tbaa !5
  %435 = load ptr, ptr %5, align 8, !tbaa !5
  %436 = load ptr, ptr %3, align 8, !tbaa !5
  %437 = call i32 @Between_SL(ptr noundef %434, ptr noundef %435, ptr noundef %436)
  %438 = icmp ne i32 %437, 0
  br i1 %438, label %439, label %491

439:                                              ; preds = %433
  %440 = load i32, ptr %24, align 4, !tbaa !9
  %441 = add nsw i32 4, %440
  store i32 %441, ptr %26, align 4, !tbaa !9
  %442 = load i32, ptr %24, align 4, !tbaa !9
  %443 = icmp eq i32 %442, 1
  br i1 %443, label %444, label %464

444:                                              ; preds = %439
  %445 = load i16, ptr @Reversed, align 2, !tbaa !14
  %446 = sext i16 %445 to i32
  %447 = load ptr, ptr %5, align 8, !tbaa !5
  %448 = getelementptr inbounds %struct.Node, ptr %447, i32 0, i32 45
  %449 = load ptr, ptr %448, align 8, !tbaa !16
  %450 = getelementptr inbounds %struct.Segment, ptr %449, i32 0, i32 0
  %451 = load i8, ptr %450, align 8, !tbaa !17
  %452 = sext i8 %451 to i32
  %453 = icmp eq i32 %446, %452
  br i1 %453, label %454, label %458

454:                                              ; preds = %444
  %455 = load ptr, ptr %5, align 8, !tbaa !5
  %456 = getelementptr inbounds %struct.Node, ptr %455, i32 0, i32 16
  %457 = load ptr, ptr %456, align 8, !tbaa !19
  br label %462

458:                                              ; preds = %444
  %459 = load ptr, ptr %5, align 8, !tbaa !5
  %460 = getelementptr inbounds %struct.Node, ptr %459, i32 0, i32 15
  %461 = load ptr, ptr %460, align 8, !tbaa !20
  br label %462

462:                                              ; preds = %458, %454
  %463 = phi ptr [ %457, %454 ], [ %461, %458 ]
  br label %484

464:                                              ; preds = %439
  %465 = load i16, ptr @Reversed, align 2, !tbaa !14
  %466 = sext i16 %465 to i32
  %467 = load ptr, ptr %5, align 8, !tbaa !5
  %468 = getelementptr inbounds %struct.Node, ptr %467, i32 0, i32 45
  %469 = load ptr, ptr %468, align 8, !tbaa !16
  %470 = getelementptr inbounds %struct.Segment, ptr %469, i32 0, i32 0
  %471 = load i8, ptr %470, align 8, !tbaa !17
  %472 = sext i8 %471 to i32
  %473 = icmp eq i32 %466, %472
  br i1 %473, label %474, label %478

474:                                              ; preds = %464
  %475 = load ptr, ptr %5, align 8, !tbaa !5
  %476 = getelementptr inbounds %struct.Node, ptr %475, i32 0, i32 15
  %477 = load ptr, ptr %476, align 8, !tbaa !20
  br label %482

478:                                              ; preds = %464
  %479 = load ptr, ptr %5, align 8, !tbaa !5
  %480 = getelementptr inbounds %struct.Node, ptr %479, i32 0, i32 16
  %481 = load ptr, ptr %480, align 8, !tbaa !19
  br label %482

482:                                              ; preds = %478, %474
  %483 = phi ptr [ %477, %474 ], [ %481, %478 ]
  br label %484

484:                                              ; preds = %482, %462
  %485 = phi ptr [ %463, %462 ], [ %483, %482 ]
  store ptr %485, ptr %6, align 8, !tbaa !5
  %486 = load ptr, ptr %6, align 8, !tbaa !5
  %487 = load ptr, ptr @Gain23.s1, align 8, !tbaa !5
  %488 = icmp eq ptr %486, %487
  br i1 %488, label %489, label %490

489:                                              ; preds = %484
  br label %1205

490:                                              ; preds = %484
  br label %515

491:                                              ; preds = %433
  %492 = load i32, ptr %24, align 4, !tbaa !9
  %493 = icmp eq i32 %492, 2
  br i1 %493, label %494, label %495

494:                                              ; preds = %491
  br label %1208

495:                                              ; preds = %491
  store i32 7, ptr %26, align 4, !tbaa !9
  %496 = load i16, ptr @Reversed, align 2, !tbaa !14
  %497 = sext i16 %496 to i32
  %498 = load ptr, ptr %5, align 8, !tbaa !5
  %499 = getelementptr inbounds %struct.Node, ptr %498, i32 0, i32 45
  %500 = load ptr, ptr %499, align 8, !tbaa !16
  %501 = getelementptr inbounds %struct.Segment, ptr %500, i32 0, i32 0
  %502 = load i8, ptr %501, align 8, !tbaa !17
  %503 = sext i8 %502 to i32
  %504 = icmp eq i32 %497, %503
  br i1 %504, label %505, label %509

505:                                              ; preds = %495
  %506 = load ptr, ptr %5, align 8, !tbaa !5
  %507 = getelementptr inbounds %struct.Node, ptr %506, i32 0, i32 15
  %508 = load ptr, ptr %507, align 8, !tbaa !20
  br label %513

509:                                              ; preds = %495
  %510 = load ptr, ptr %5, align 8, !tbaa !5
  %511 = getelementptr inbounds %struct.Node, ptr %510, i32 0, i32 16
  %512 = load ptr, ptr %511, align 8, !tbaa !19
  br label %513

513:                                              ; preds = %509, %505
  %514 = phi ptr [ %508, %505 ], [ %512, %509 ]
  store ptr %514, ptr %6, align 8, !tbaa !5
  br label %515

515:                                              ; preds = %513, %490
  br label %516

516:                                              ; preds = %515, %432
  %517 = load ptr, ptr %5, align 8, !tbaa !5
  %518 = getelementptr inbounds %struct.Node, ptr %517, i32 0, i32 26
  %519 = load ptr, ptr %518, align 8, !tbaa !21
  %520 = load ptr, ptr %6, align 8, !tbaa !5
  %521 = icmp eq ptr %519, %520
  br i1 %521, label %533, label %522

522:                                              ; preds = %516
  %523 = load ptr, ptr %5, align 8, !tbaa !5
  %524 = getelementptr inbounds %struct.Node, ptr %523, i32 0, i32 27
  %525 = load ptr, ptr %524, align 8, !tbaa !22
  %526 = load ptr, ptr %6, align 8, !tbaa !5
  %527 = icmp eq ptr %525, %526
  br i1 %527, label %533, label %528

528:                                              ; preds = %522
  %529 = load ptr, ptr %5, align 8, !tbaa !5
  %530 = load ptr, ptr %6, align 8, !tbaa !5
  %531 = call i32 @IsCommonEdge(ptr noundef %529, ptr noundef %530)
  %532 = icmp ne i32 %531, 0
  br i1 %532, label %533, label %534

533:                                              ; preds = %528, %522, %516
  br label %1205

534:                                              ; preds = %528
  %535 = load i64, ptr %16, align 8, !tbaa !23
  %536 = load ptr, ptr @C, align 8, !tbaa !5
  %537 = load ptr, ptr %5, align 8, !tbaa !5
  %538 = load ptr, ptr %6, align 8, !tbaa !5
  %539 = call i32 %536(ptr noundef %537, ptr noundef %538)
  %540 = sext i32 %539 to i64
  %541 = add nsw i64 %535, %540
  store i64 %541, ptr %17, align 8, !tbaa !23
  store i64 0, ptr %21, align 8, !tbaa !23
  %542 = load ptr, ptr %6, align 8, !tbaa !5
  %543 = load ptr, ptr @Gain23.s1, align 8, !tbaa !5
  %544 = call i32 @Forbidden(ptr noundef %542, ptr noundef %543)
  %545 = icmp ne i32 %544, 0
  br i1 %545, label %599, label %546

546:                                              ; preds = %534
  %547 = load ptr, ptr @c, align 8, !tbaa !5
  %548 = icmp ne ptr %547, null
  br i1 %548, label %549, label %558

549:                                              ; preds = %546
  %550 = load i64, ptr %17, align 8, !tbaa !23
  %551 = load ptr, ptr @c, align 8, !tbaa !5
  %552 = load ptr, ptr %6, align 8, !tbaa !5
  %553 = load ptr, ptr @Gain23.s1, align 8, !tbaa !5
  %554 = call i32 %551(ptr noundef %552, ptr noundef %553)
  %555 = sext i32 %554 to i64
  %556 = sub nsw i64 %550, %555
  %557 = icmp sgt i64 %556, 0
  br i1 %557, label %558, label %599

558:                                              ; preds = %549, %546
  %559 = load i64, ptr %17, align 8, !tbaa !23
  %560 = load ptr, ptr @C, align 8, !tbaa !5
  %561 = load ptr, ptr %6, align 8, !tbaa !5
  %562 = load ptr, ptr @Gain23.s1, align 8, !tbaa !5
  %563 = call i32 %560(ptr noundef %561, ptr noundef %562)
  %564 = sext i32 %563 to i64
  %565 = sub nsw i64 %559, %564
  store i64 %565, ptr %21, align 8, !tbaa !23
  %566 = icmp sgt i64 %565, 0
  br i1 %566, label %567, label %599

567:                                              ; preds = %558
  %568 = load i32, ptr %26, align 4, !tbaa !9
  %569 = icmp sle i32 %568, 2
  br i1 %569, label %576, label %570

570:                                              ; preds = %567
  %571 = load i32, ptr %26, align 4, !tbaa !9
  %572 = icmp eq i32 %571, 5
  br i1 %572, label %576, label %573

573:                                              ; preds = %570
  %574 = load i32, ptr %26, align 4, !tbaa !9
  %575 = icmp eq i32 %574, 6
  br i1 %575, label %576, label %585

576:                                              ; preds = %573, %570, %567
  %577 = load ptr, ptr @Gain23.s1, align 8, !tbaa !5
  %578 = load ptr, ptr %2, align 8, !tbaa !5
  %579 = load ptr, ptr %3, align 8, !tbaa !5
  %580 = load ptr, ptr %4, align 8, !tbaa !5
  %581 = load ptr, ptr %5, align 8, !tbaa !5
  %582 = load ptr, ptr %6, align 8, !tbaa !5
  %583 = load i32, ptr %26, align 4, !tbaa !9
  call void @Make3OptMove(ptr noundef %577, ptr noundef %578, ptr noundef %579, ptr noundef %580, ptr noundef %581, ptr noundef %582, i32 noundef %583)
  %584 = load i64, ptr %21, align 8, !tbaa !23
  store i64 %584, ptr %1, align 8
  store i32 1, ptr %31, align 4
  br label %1230

585:                                              ; preds = %573
  %586 = load ptr, ptr @Gain23.s1, align 8, !tbaa !5
  %587 = load ptr, ptr %2, align 8, !tbaa !5
  %588 = load ptr, ptr %3, align 8, !tbaa !5
  %589 = load ptr, ptr %4, align 8, !tbaa !5
  %590 = load ptr, ptr %5, align 8, !tbaa !5
  %591 = load ptr, ptr %6, align 8, !tbaa !5
  %592 = load i32, ptr %26, align 4, !tbaa !9
  %593 = load i64, ptr %21, align 8, !tbaa !23
  %594 = call i64 @BridgeGain(ptr noundef %586, ptr noundef %587, ptr noundef %588, ptr noundef %589, ptr noundef %590, ptr noundef %591, ptr noundef null, ptr noundef null, i32 noundef %592, i64 noundef %593)
  store i64 %594, ptr %20, align 8, !tbaa !23
  %595 = icmp sgt i64 %594, 0
  br i1 %595, label %596, label %598

596:                                              ; preds = %585
  %597 = load i64, ptr %20, align 8, !tbaa !23
  store i64 %597, ptr %1, align 8
  store i32 1, ptr %31, align 4
  br label %1230

598:                                              ; preds = %585
  br label %599

599:                                              ; preds = %598, %558, %549, %534
  store i32 0, ptr %30, align 4, !tbaa !9
  %600 = load ptr, ptr %6, align 8, !tbaa !5
  %601 = getelementptr inbounds %struct.Node, ptr %600, i32 0, i32 43
  %602 = load ptr, ptr %601, align 8, !tbaa !25
  store ptr %602, ptr %12, align 8, !tbaa !5
  br label %603

603:                                              ; preds = %1201, %599
  %604 = load ptr, ptr %12, align 8, !tbaa !5
  %605 = getelementptr inbounds %struct.Candidate, ptr %604, i32 0, i32 0
  %606 = load ptr, ptr %605, align 8, !tbaa !26
  store ptr %606, ptr %7, align 8, !tbaa !5
  %607 = icmp ne ptr %606, null
  br i1 %607, label %608, label %1204

608:                                              ; preds = %603
  %609 = load ptr, ptr %7, align 8, !tbaa !5
  %610 = load ptr, ptr %6, align 8, !tbaa !5
  %611 = getelementptr inbounds %struct.Node, ptr %610, i32 0, i32 15
  %612 = load ptr, ptr %611, align 8, !tbaa !20
  %613 = icmp eq ptr %609, %612
  br i1 %613, label %644, label %614

614:                                              ; preds = %608
  %615 = load ptr, ptr %7, align 8, !tbaa !5
  %616 = load ptr, ptr %6, align 8, !tbaa !5
  %617 = getelementptr inbounds %struct.Node, ptr %616, i32 0, i32 16
  %618 = load ptr, ptr %617, align 8, !tbaa !19
  %619 = icmp eq ptr %615, %618
  br i1 %619, label %644, label %620

620:                                              ; preds = %614
  %621 = load ptr, ptr %6, align 8, !tbaa !5
  %622 = load ptr, ptr %2, align 8, !tbaa !5
  %623 = icmp eq ptr %621, %622
  br i1 %623, label %624, label %628

624:                                              ; preds = %620
  %625 = load ptr, ptr %7, align 8, !tbaa !5
  %626 = load ptr, ptr %3, align 8, !tbaa !5
  %627 = icmp eq ptr %625, %626
  br i1 %627, label %644, label %628

628:                                              ; preds = %624, %620
  %629 = load ptr, ptr %6, align 8, !tbaa !5
  %630 = load ptr, ptr %3, align 8, !tbaa !5
  %631 = icmp eq ptr %629, %630
  br i1 %631, label %632, label %636

632:                                              ; preds = %628
  %633 = load ptr, ptr %7, align 8, !tbaa !5
  %634 = load ptr, ptr %2, align 8, !tbaa !5
  %635 = icmp eq ptr %633, %634
  br i1 %635, label %644, label %636

636:                                              ; preds = %632, %628
  %637 = load i64, ptr %17, align 8, !tbaa !23
  %638 = load ptr, ptr %12, align 8, !tbaa !5
  %639 = getelementptr inbounds %struct.Candidate, ptr %638, i32 0, i32 1
  %640 = load i32, ptr %639, align 8, !tbaa !28
  %641 = sext i32 %640 to i64
  %642 = sub nsw i64 %637, %641
  store i64 %642, ptr %18, align 8, !tbaa !23
  %643 = icmp sle i64 %642, 0
  br i1 %643, label %644, label %645

644:                                              ; preds = %636, %632, %624, %614, %608
  br label %1201

645:                                              ; preds = %636
  %646 = load i32, ptr %30, align 4, !tbaa !9
  %647 = add nsw i32 %646, 1
  store i32 %647, ptr %30, align 4, !tbaa !9
  %648 = load i32, ptr @MaxBreadth, align 4, !tbaa !9
  %649 = icmp sgt i32 %647, %648
  br i1 %649, label %650, label %651

650:                                              ; preds = %645
  br label %1204

651:                                              ; preds = %645
  store i32 1, ptr %25, align 4, !tbaa !9
  br label %652

652:                                              ; preds = %1197, %651
  %653 = load i32, ptr %25, align 4, !tbaa !9
  %654 = icmp sle i32 %653, 2
  br i1 %654, label %655, label %1200

655:                                              ; preds = %652
  %656 = load i32, ptr %25, align 4, !tbaa !9
  %657 = icmp eq i32 %656, 1
  br i1 %657, label %658, label %1051

658:                                              ; preds = %655
  %659 = load i32, ptr %26, align 4, !tbaa !9
  store i32 %659, ptr %27, align 4, !tbaa !9
  %660 = load i32, ptr %26, align 4, !tbaa !9
  switch i32 %660, label %1050 [
    i32 1, label %661
    i32 2, label %709
    i32 3, label %757
    i32 4, label %832
    i32 5, label %907
    i32 6, label %927
    i32 7, label %975
  ]

661:                                              ; preds = %658
  %662 = load ptr, ptr %2, align 8, !tbaa !5
  %663 = load ptr, ptr %7, align 8, !tbaa !5
  %664 = load ptr, ptr %5, align 8, !tbaa !5
  %665 = call i32 @Between_SL(ptr noundef %662, ptr noundef %663, ptr noundef %664)
  %666 = icmp ne i32 %665, 0
  br i1 %666, label %667, label %687

667:                                              ; preds = %661
  %668 = load i16, ptr @Reversed, align 2, !tbaa !14
  %669 = sext i16 %668 to i32
  %670 = load ptr, ptr %7, align 8, !tbaa !5
  %671 = getelementptr inbounds %struct.Node, ptr %670, i32 0, i32 45
  %672 = load ptr, ptr %671, align 8, !tbaa !16
  %673 = getelementptr inbounds %struct.Segment, ptr %672, i32 0, i32 0
  %674 = load i8, ptr %673, align 8, !tbaa !17
  %675 = sext i8 %674 to i32
  %676 = icmp eq i32 %669, %675
  br i1 %676, label %677, label %681

677:                                              ; preds = %667
  %678 = load ptr, ptr %7, align 8, !tbaa !5
  %679 = getelementptr inbounds %struct.Node, ptr %678, i32 0, i32 16
  %680 = load ptr, ptr %679, align 8, !tbaa !19
  br label %685

681:                                              ; preds = %667
  %682 = load ptr, ptr %7, align 8, !tbaa !5
  %683 = getelementptr inbounds %struct.Node, ptr %682, i32 0, i32 15
  %684 = load ptr, ptr %683, align 8, !tbaa !20
  br label %685

685:                                              ; preds = %681, %677
  %686 = phi ptr [ %680, %677 ], [ %684, %681 ]
  br label %707

687:                                              ; preds = %661
  %688 = load i16, ptr @Reversed, align 2, !tbaa !14
  %689 = sext i16 %688 to i32
  %690 = load ptr, ptr %7, align 8, !tbaa !5
  %691 = getelementptr inbounds %struct.Node, ptr %690, i32 0, i32 45
  %692 = load ptr, ptr %691, align 8, !tbaa !16
  %693 = getelementptr inbounds %struct.Segment, ptr %692, i32 0, i32 0
  %694 = load i8, ptr %693, align 8, !tbaa !17
  %695 = sext i8 %694 to i32
  %696 = icmp eq i32 %689, %695
  br i1 %696, label %697, label %701

697:                                              ; preds = %687
  %698 = load ptr, ptr %7, align 8, !tbaa !5
  %699 = getelementptr inbounds %struct.Node, ptr %698, i32 0, i32 15
  %700 = load ptr, ptr %699, align 8, !tbaa !20
  br label %705

701:                                              ; preds = %687
  %702 = load ptr, ptr %7, align 8, !tbaa !5
  %703 = getelementptr inbounds %struct.Node, ptr %702, i32 0, i32 16
  %704 = load ptr, ptr %703, align 8, !tbaa !19
  br label %705

705:                                              ; preds = %701, %697
  %706 = phi ptr [ %700, %697 ], [ %704, %701 ]
  br label %707

707:                                              ; preds = %705, %685
  %708 = phi ptr [ %686, %685 ], [ %706, %705 ]
  store ptr %708, ptr %8, align 8, !tbaa !5
  br label %1050

709:                                              ; preds = %658
  %710 = load ptr, ptr %3, align 8, !tbaa !5
  %711 = load ptr, ptr %7, align 8, !tbaa !5
  %712 = load ptr, ptr %6, align 8, !tbaa !5
  %713 = call i32 @Between_SL(ptr noundef %710, ptr noundef %711, ptr noundef %712)
  %714 = icmp ne i32 %713, 0
  br i1 %714, label %715, label %735

715:                                              ; preds = %709
  %716 = load i16, ptr @Reversed, align 2, !tbaa !14
  %717 = sext i16 %716 to i32
  %718 = load ptr, ptr %7, align 8, !tbaa !5
  %719 = getelementptr inbounds %struct.Node, ptr %718, i32 0, i32 45
  %720 = load ptr, ptr %719, align 8, !tbaa !16
  %721 = getelementptr inbounds %struct.Segment, ptr %720, i32 0, i32 0
  %722 = load i8, ptr %721, align 8, !tbaa !17
  %723 = sext i8 %722 to i32
  %724 = icmp eq i32 %717, %723
  br i1 %724, label %725, label %729

725:                                              ; preds = %715
  %726 = load ptr, ptr %7, align 8, !tbaa !5
  %727 = getelementptr inbounds %struct.Node, ptr %726, i32 0, i32 16
  %728 = load ptr, ptr %727, align 8, !tbaa !19
  br label %733

729:                                              ; preds = %715
  %730 = load ptr, ptr %7, align 8, !tbaa !5
  %731 = getelementptr inbounds %struct.Node, ptr %730, i32 0, i32 15
  %732 = load ptr, ptr %731, align 8, !tbaa !20
  br label %733

733:                                              ; preds = %729, %725
  %734 = phi ptr [ %728, %725 ], [ %732, %729 ]
  br label %755

735:                                              ; preds = %709
  %736 = load i16, ptr @Reversed, align 2, !tbaa !14
  %737 = sext i16 %736 to i32
  %738 = load ptr, ptr %7, align 8, !tbaa !5
  %739 = getelementptr inbounds %struct.Node, ptr %738, i32 0, i32 45
  %740 = load ptr, ptr %739, align 8, !tbaa !16
  %741 = getelementptr inbounds %struct.Segment, ptr %740, i32 0, i32 0
  %742 = load i8, ptr %741, align 8, !tbaa !17
  %743 = sext i8 %742 to i32
  %744 = icmp eq i32 %737, %743
  br i1 %744, label %745, label %749

745:                                              ; preds = %735
  %746 = load ptr, ptr %7, align 8, !tbaa !5
  %747 = getelementptr inbounds %struct.Node, ptr %746, i32 0, i32 15
  %748 = load ptr, ptr %747, align 8, !tbaa !20
  br label %753

749:                                              ; preds = %735
  %750 = load ptr, ptr %7, align 8, !tbaa !5
  %751 = getelementptr inbounds %struct.Node, ptr %750, i32 0, i32 16
  %752 = load ptr, ptr %751, align 8, !tbaa !19
  br label %753

753:                                              ; preds = %749, %745
  %754 = phi ptr [ %748, %745 ], [ %752, %749 ]
  br label %755

755:                                              ; preds = %753, %733
  %756 = phi ptr [ %734, %733 ], [ %754, %753 ]
  store ptr %756, ptr %8, align 8, !tbaa !5
  br label %1050

757:                                              ; preds = %658
  %758 = load ptr, ptr %5, align 8, !tbaa !5
  %759 = load ptr, ptr %7, align 8, !tbaa !5
  %760 = load ptr, ptr %4, align 8, !tbaa !5
  %761 = call i32 @Between_SL(ptr noundef %758, ptr noundef %759, ptr noundef %760)
  %762 = icmp ne i32 %761, 0
  br i1 %762, label %763, label %783

763:                                              ; preds = %757
  %764 = load i16, ptr @Reversed, align 2, !tbaa !14
  %765 = sext i16 %764 to i32
  %766 = load ptr, ptr %7, align 8, !tbaa !5
  %767 = getelementptr inbounds %struct.Node, ptr %766, i32 0, i32 45
  %768 = load ptr, ptr %767, align 8, !tbaa !16
  %769 = getelementptr inbounds %struct.Segment, ptr %768, i32 0, i32 0
  %770 = load i8, ptr %769, align 8, !tbaa !17
  %771 = sext i8 %770 to i32
  %772 = icmp eq i32 %765, %771
  br i1 %772, label %773, label %777

773:                                              ; preds = %763
  %774 = load ptr, ptr %7, align 8, !tbaa !5
  %775 = getelementptr inbounds %struct.Node, ptr %774, i32 0, i32 16
  %776 = load ptr, ptr %775, align 8, !tbaa !19
  br label %781

777:                                              ; preds = %763
  %778 = load ptr, ptr %7, align 8, !tbaa !5
  %779 = getelementptr inbounds %struct.Node, ptr %778, i32 0, i32 15
  %780 = load ptr, ptr %779, align 8, !tbaa !20
  br label %781

781:                                              ; preds = %777, %773
  %782 = phi ptr [ %776, %773 ], [ %780, %777 ]
  store ptr %782, ptr %8, align 8, !tbaa !5
  br label %831

783:                                              ; preds = %757
  %784 = load ptr, ptr %3, align 8, !tbaa !5
  %785 = load ptr, ptr %7, align 8, !tbaa !5
  %786 = load ptr, ptr @Gain23.s1, align 8, !tbaa !5
  %787 = call i32 @Between_SL(ptr noundef %784, ptr noundef %785, ptr noundef %786)
  %788 = icmp ne i32 %787, 0
  br i1 %788, label %789, label %809

789:                                              ; preds = %783
  %790 = load i16, ptr @Reversed, align 2, !tbaa !14
  %791 = sext i16 %790 to i32
  %792 = load ptr, ptr %7, align 8, !tbaa !5
  %793 = getelementptr inbounds %struct.Node, ptr %792, i32 0, i32 45
  %794 = load ptr, ptr %793, align 8, !tbaa !16
  %795 = getelementptr inbounds %struct.Segment, ptr %794, i32 0, i32 0
  %796 = load i8, ptr %795, align 8, !tbaa !17
  %797 = sext i8 %796 to i32
  %798 = icmp eq i32 %791, %797
  br i1 %798, label %799, label %803

799:                                              ; preds = %789
  %800 = load ptr, ptr %7, align 8, !tbaa !5
  %801 = getelementptr inbounds %struct.Node, ptr %800, i32 0, i32 15
  %802 = load ptr, ptr %801, align 8, !tbaa !20
  br label %807

803:                                              ; preds = %789
  %804 = load ptr, ptr %7, align 8, !tbaa !5
  %805 = getelementptr inbounds %struct.Node, ptr %804, i32 0, i32 16
  %806 = load ptr, ptr %805, align 8, !tbaa !19
  br label %807

807:                                              ; preds = %803, %799
  %808 = phi ptr [ %802, %799 ], [ %806, %803 ]
  br label %829

809:                                              ; preds = %783
  %810 = load i16, ptr @Reversed, align 2, !tbaa !14
  %811 = sext i16 %810 to i32
  %812 = load ptr, ptr %7, align 8, !tbaa !5
  %813 = getelementptr inbounds %struct.Node, ptr %812, i32 0, i32 45
  %814 = load ptr, ptr %813, align 8, !tbaa !16
  %815 = getelementptr inbounds %struct.Segment, ptr %814, i32 0, i32 0
  %816 = load i8, ptr %815, align 8, !tbaa !17
  %817 = sext i8 %816 to i32
  %818 = icmp eq i32 %811, %817
  br i1 %818, label %819, label %823

819:                                              ; preds = %809
  %820 = load ptr, ptr %7, align 8, !tbaa !5
  %821 = getelementptr inbounds %struct.Node, ptr %820, i32 0, i32 16
  %822 = load ptr, ptr %821, align 8, !tbaa !19
  br label %827

823:                                              ; preds = %809
  %824 = load ptr, ptr %7, align 8, !tbaa !5
  %825 = getelementptr inbounds %struct.Node, ptr %824, i32 0, i32 15
  %826 = load ptr, ptr %825, align 8, !tbaa !20
  br label %827

827:                                              ; preds = %823, %819
  %828 = phi ptr [ %822, %819 ], [ %826, %823 ]
  br label %829

829:                                              ; preds = %827, %807
  %830 = phi ptr [ %808, %807 ], [ %828, %827 ]
  store ptr %830, ptr %8, align 8, !tbaa !5
  store i32 17, ptr %27, align 4, !tbaa !9
  br label %831

831:                                              ; preds = %829, %781
  br label %1050

832:                                              ; preds = %658
  %833 = load ptr, ptr %2, align 8, !tbaa !5
  %834 = load ptr, ptr %7, align 8, !tbaa !5
  %835 = load ptr, ptr %5, align 8, !tbaa !5
  %836 = call i32 @Between_SL(ptr noundef %833, ptr noundef %834, ptr noundef %835)
  %837 = icmp ne i32 %836, 0
  br i1 %837, label %838, label %886

838:                                              ; preds = %832
  %839 = load ptr, ptr %2, align 8, !tbaa !5
  %840 = load ptr, ptr %7, align 8, !tbaa !5
  %841 = load ptr, ptr %4, align 8, !tbaa !5
  %842 = call i32 @Between_SL(ptr noundef %839, ptr noundef %840, ptr noundef %841)
  %843 = icmp ne i32 %842, 0
  br i1 %843, label %844, label %864

844:                                              ; preds = %838
  %845 = load i16, ptr @Reversed, align 2, !tbaa !14
  %846 = sext i16 %845 to i32
  %847 = load ptr, ptr %7, align 8, !tbaa !5
  %848 = getelementptr inbounds %struct.Node, ptr %847, i32 0, i32 45
  %849 = load ptr, ptr %848, align 8, !tbaa !16
  %850 = getelementptr inbounds %struct.Segment, ptr %849, i32 0, i32 0
  %851 = load i8, ptr %850, align 8, !tbaa !17
  %852 = sext i8 %851 to i32
  %853 = icmp eq i32 %846, %852
  br i1 %853, label %854, label %858

854:                                              ; preds = %844
  %855 = load ptr, ptr %7, align 8, !tbaa !5
  %856 = getelementptr inbounds %struct.Node, ptr %855, i32 0, i32 16
  %857 = load ptr, ptr %856, align 8, !tbaa !19
  br label %862

858:                                              ; preds = %844
  %859 = load ptr, ptr %7, align 8, !tbaa !5
  %860 = getelementptr inbounds %struct.Node, ptr %859, i32 0, i32 15
  %861 = load ptr, ptr %860, align 8, !tbaa !20
  br label %862

862:                                              ; preds = %858, %854
  %863 = phi ptr [ %857, %854 ], [ %861, %858 ]
  br label %884

864:                                              ; preds = %838
  %865 = load i16, ptr @Reversed, align 2, !tbaa !14
  %866 = sext i16 %865 to i32
  %867 = load ptr, ptr %7, align 8, !tbaa !5
  %868 = getelementptr inbounds %struct.Node, ptr %867, i32 0, i32 45
  %869 = load ptr, ptr %868, align 8, !tbaa !16
  %870 = getelementptr inbounds %struct.Segment, ptr %869, i32 0, i32 0
  %871 = load i8, ptr %870, align 8, !tbaa !17
  %872 = sext i8 %871 to i32
  %873 = icmp eq i32 %866, %872
  br i1 %873, label %874, label %878

874:                                              ; preds = %864
  %875 = load ptr, ptr %7, align 8, !tbaa !5
  %876 = getelementptr inbounds %struct.Node, ptr %875, i32 0, i32 15
  %877 = load ptr, ptr %876, align 8, !tbaa !20
  br label %882

878:                                              ; preds = %864
  %879 = load ptr, ptr %7, align 8, !tbaa !5
  %880 = getelementptr inbounds %struct.Node, ptr %879, i32 0, i32 16
  %881 = load ptr, ptr %880, align 8, !tbaa !19
  br label %882

882:                                              ; preds = %878, %874
  %883 = phi ptr [ %877, %874 ], [ %881, %878 ]
  br label %884

884:                                              ; preds = %882, %862
  %885 = phi ptr [ %863, %862 ], [ %883, %882 ]
  store ptr %885, ptr %8, align 8, !tbaa !5
  br label %906

886:                                              ; preds = %832
  %887 = load i16, ptr @Reversed, align 2, !tbaa !14
  %888 = sext i16 %887 to i32
  %889 = load ptr, ptr %7, align 8, !tbaa !5
  %890 = getelementptr inbounds %struct.Node, ptr %889, i32 0, i32 45
  %891 = load ptr, ptr %890, align 8, !tbaa !16
  %892 = getelementptr inbounds %struct.Segment, ptr %891, i32 0, i32 0
  %893 = load i8, ptr %892, align 8, !tbaa !17
  %894 = sext i8 %893 to i32
  %895 = icmp eq i32 %888, %894
  br i1 %895, label %896, label %900

896:                                              ; preds = %886
  %897 = load ptr, ptr %7, align 8, !tbaa !5
  %898 = getelementptr inbounds %struct.Node, ptr %897, i32 0, i32 15
  %899 = load ptr, ptr %898, align 8, !tbaa !20
  br label %904

900:                                              ; preds = %886
  %901 = load ptr, ptr %7, align 8, !tbaa !5
  %902 = getelementptr inbounds %struct.Node, ptr %901, i32 0, i32 16
  %903 = load ptr, ptr %902, align 8, !tbaa !19
  br label %904

904:                                              ; preds = %900, %896
  %905 = phi ptr [ %899, %896 ], [ %903, %900 ]
  store ptr %905, ptr %8, align 8, !tbaa !5
  store i32 18, ptr %27, align 4, !tbaa !9
  br label %906

906:                                              ; preds = %904, %884
  br label %1050

907:                                              ; preds = %658
  %908 = load i16, ptr @Reversed, align 2, !tbaa !14
  %909 = sext i16 %908 to i32
  %910 = load ptr, ptr %7, align 8, !tbaa !5
  %911 = getelementptr inbounds %struct.Node, ptr %910, i32 0, i32 45
  %912 = load ptr, ptr %911, align 8, !tbaa !16
  %913 = getelementptr inbounds %struct.Segment, ptr %912, i32 0, i32 0
  %914 = load i8, ptr %913, align 8, !tbaa !17
  %915 = sext i8 %914 to i32
  %916 = icmp eq i32 %909, %915
  br i1 %916, label %917, label %921

917:                                              ; preds = %907
  %918 = load ptr, ptr %7, align 8, !tbaa !5
  %919 = getelementptr inbounds %struct.Node, ptr %918, i32 0, i32 15
  %920 = load ptr, ptr %919, align 8, !tbaa !20
  br label %925

921:                                              ; preds = %907
  %922 = load ptr, ptr %7, align 8, !tbaa !5
  %923 = getelementptr inbounds %struct.Node, ptr %922, i32 0, i32 16
  %924 = load ptr, ptr %923, align 8, !tbaa !19
  br label %925

925:                                              ; preds = %921, %917
  %926 = phi ptr [ %920, %917 ], [ %924, %921 ]
  store ptr %926, ptr %8, align 8, !tbaa !5
  br label %1050

927:                                              ; preds = %658
  %928 = load ptr, ptr %2, align 8, !tbaa !5
  %929 = load ptr, ptr %7, align 8, !tbaa !5
  %930 = load ptr, ptr %3, align 8, !tbaa !5
  %931 = call i32 @Between_SL(ptr noundef %928, ptr noundef %929, ptr noundef %930)
  %932 = icmp ne i32 %931, 0
  br i1 %932, label %933, label %953

933:                                              ; preds = %927
  %934 = load i16, ptr @Reversed, align 2, !tbaa !14
  %935 = sext i16 %934 to i32
  %936 = load ptr, ptr %7, align 8, !tbaa !5
  %937 = getelementptr inbounds %struct.Node, ptr %936, i32 0, i32 45
  %938 = load ptr, ptr %937, align 8, !tbaa !16
  %939 = getelementptr inbounds %struct.Segment, ptr %938, i32 0, i32 0
  %940 = load i8, ptr %939, align 8, !tbaa !17
  %941 = sext i8 %940 to i32
  %942 = icmp eq i32 %935, %941
  br i1 %942, label %943, label %947

943:                                              ; preds = %933
  %944 = load ptr, ptr %7, align 8, !tbaa !5
  %945 = getelementptr inbounds %struct.Node, ptr %944, i32 0, i32 16
  %946 = load ptr, ptr %945, align 8, !tbaa !19
  br label %951

947:                                              ; preds = %933
  %948 = load ptr, ptr %7, align 8, !tbaa !5
  %949 = getelementptr inbounds %struct.Node, ptr %948, i32 0, i32 15
  %950 = load ptr, ptr %949, align 8, !tbaa !20
  br label %951

951:                                              ; preds = %947, %943
  %952 = phi ptr [ %946, %943 ], [ %950, %947 ]
  br label %973

953:                                              ; preds = %927
  %954 = load i16, ptr @Reversed, align 2, !tbaa !14
  %955 = sext i16 %954 to i32
  %956 = load ptr, ptr %7, align 8, !tbaa !5
  %957 = getelementptr inbounds %struct.Node, ptr %956, i32 0, i32 45
  %958 = load ptr, ptr %957, align 8, !tbaa !16
  %959 = getelementptr inbounds %struct.Segment, ptr %958, i32 0, i32 0
  %960 = load i8, ptr %959, align 8, !tbaa !17
  %961 = sext i8 %960 to i32
  %962 = icmp eq i32 %955, %961
  br i1 %962, label %963, label %967

963:                                              ; preds = %953
  %964 = load ptr, ptr %7, align 8, !tbaa !5
  %965 = getelementptr inbounds %struct.Node, ptr %964, i32 0, i32 15
  %966 = load ptr, ptr %965, align 8, !tbaa !20
  br label %971

967:                                              ; preds = %953
  %968 = load ptr, ptr %7, align 8, !tbaa !5
  %969 = getelementptr inbounds %struct.Node, ptr %968, i32 0, i32 16
  %970 = load ptr, ptr %969, align 8, !tbaa !19
  br label %971

971:                                              ; preds = %967, %963
  %972 = phi ptr [ %966, %963 ], [ %970, %967 ]
  br label %973

973:                                              ; preds = %971, %951
  %974 = phi ptr [ %952, %951 ], [ %972, %971 ]
  store ptr %974, ptr %8, align 8, !tbaa !5
  br label %1050

975:                                              ; preds = %658
  %976 = load ptr, ptr %2, align 8, !tbaa !5
  %977 = load ptr, ptr %7, align 8, !tbaa !5
  %978 = load ptr, ptr %3, align 8, !tbaa !5
  %979 = call i32 @Between_SL(ptr noundef %976, ptr noundef %977, ptr noundef %978)
  %980 = icmp ne i32 %979, 0
  br i1 %980, label %981, label %1001

981:                                              ; preds = %975
  %982 = load i16, ptr @Reversed, align 2, !tbaa !14
  %983 = sext i16 %982 to i32
  %984 = load ptr, ptr %7, align 8, !tbaa !5
  %985 = getelementptr inbounds %struct.Node, ptr %984, i32 0, i32 45
  %986 = load ptr, ptr %985, align 8, !tbaa !16
  %987 = getelementptr inbounds %struct.Segment, ptr %986, i32 0, i32 0
  %988 = load i8, ptr %987, align 8, !tbaa !17
  %989 = sext i8 %988 to i32
  %990 = icmp eq i32 %983, %989
  br i1 %990, label %991, label %995

991:                                              ; preds = %981
  %992 = load ptr, ptr %7, align 8, !tbaa !5
  %993 = getelementptr inbounds %struct.Node, ptr %992, i32 0, i32 16
  %994 = load ptr, ptr %993, align 8, !tbaa !19
  br label %999

995:                                              ; preds = %981
  %996 = load ptr, ptr %7, align 8, !tbaa !5
  %997 = getelementptr inbounds %struct.Node, ptr %996, i32 0, i32 15
  %998 = load ptr, ptr %997, align 8, !tbaa !20
  br label %999

999:                                              ; preds = %995, %991
  %1000 = phi ptr [ %994, %991 ], [ %998, %995 ]
  store ptr %1000, ptr %8, align 8, !tbaa !5
  br label %1049

1001:                                             ; preds = %975
  %1002 = load ptr, ptr %5, align 8, !tbaa !5
  %1003 = load ptr, ptr %7, align 8, !tbaa !5
  %1004 = load ptr, ptr @Gain23.s1, align 8, !tbaa !5
  %1005 = call i32 @Between_SL(ptr noundef %1002, ptr noundef %1003, ptr noundef %1004)
  %1006 = icmp ne i32 %1005, 0
  br i1 %1006, label %1007, label %1027

1007:                                             ; preds = %1001
  %1008 = load i16, ptr @Reversed, align 2, !tbaa !14
  %1009 = sext i16 %1008 to i32
  %1010 = load ptr, ptr %7, align 8, !tbaa !5
  %1011 = getelementptr inbounds %struct.Node, ptr %1010, i32 0, i32 45
  %1012 = load ptr, ptr %1011, align 8, !tbaa !16
  %1013 = getelementptr inbounds %struct.Segment, ptr %1012, i32 0, i32 0
  %1014 = load i8, ptr %1013, align 8, !tbaa !17
  %1015 = sext i8 %1014 to i32
  %1016 = icmp eq i32 %1009, %1015
  br i1 %1016, label %1017, label %1021

1017:                                             ; preds = %1007
  %1018 = load ptr, ptr %7, align 8, !tbaa !5
  %1019 = getelementptr inbounds %struct.Node, ptr %1018, i32 0, i32 15
  %1020 = load ptr, ptr %1019, align 8, !tbaa !20
  br label %1025

1021:                                             ; preds = %1007
  %1022 = load ptr, ptr %7, align 8, !tbaa !5
  %1023 = getelementptr inbounds %struct.Node, ptr %1022, i32 0, i32 16
  %1024 = load ptr, ptr %1023, align 8, !tbaa !19
  br label %1025

1025:                                             ; preds = %1021, %1017
  %1026 = phi ptr [ %1020, %1017 ], [ %1024, %1021 ]
  br label %1047

1027:                                             ; preds = %1001
  %1028 = load i16, ptr @Reversed, align 2, !tbaa !14
  %1029 = sext i16 %1028 to i32
  %1030 = load ptr, ptr %7, align 8, !tbaa !5
  %1031 = getelementptr inbounds %struct.Node, ptr %1030, i32 0, i32 45
  %1032 = load ptr, ptr %1031, align 8, !tbaa !16
  %1033 = getelementptr inbounds %struct.Segment, ptr %1032, i32 0, i32 0
  %1034 = load i8, ptr %1033, align 8, !tbaa !17
  %1035 = sext i8 %1034 to i32
  %1036 = icmp eq i32 %1029, %1035
  br i1 %1036, label %1037, label %1041

1037:                                             ; preds = %1027
  %1038 = load ptr, ptr %7, align 8, !tbaa !5
  %1039 = getelementptr inbounds %struct.Node, ptr %1038, i32 0, i32 16
  %1040 = load ptr, ptr %1039, align 8, !tbaa !19
  br label %1045

1041:                                             ; preds = %1027
  %1042 = load ptr, ptr %7, align 8, !tbaa !5
  %1043 = getelementptr inbounds %struct.Node, ptr %1042, i32 0, i32 15
  %1044 = load ptr, ptr %1043, align 8, !tbaa !20
  br label %1045

1045:                                             ; preds = %1041, %1037
  %1046 = phi ptr [ %1040, %1037 ], [ %1044, %1041 ]
  br label %1047

1047:                                             ; preds = %1045, %1025
  %1048 = phi ptr [ %1026, %1025 ], [ %1046, %1045 ]
  store ptr %1048, ptr %8, align 8, !tbaa !5
  store i32 19, ptr %27, align 4, !tbaa !9
  br label %1049

1049:                                             ; preds = %1047, %999
  br label %1050

1050:                                             ; preds = %1049, %973, %925, %906, %831, %755, %707, %658
  br label %1082

1051:                                             ; preds = %655
  %1052 = load i32, ptr %27, align 4, !tbaa !9
  %1053 = icmp sge i32 %1052, 17
  br i1 %1053, label %1063, label %1054

1054:                                             ; preds = %1051
  %1055 = load i32, ptr %26, align 4, !tbaa !9
  %1056 = icmp ne i32 %1055, 3
  br i1 %1056, label %1057, label %1064

1057:                                             ; preds = %1054
  %1058 = load i32, ptr %26, align 4, !tbaa !9
  %1059 = icmp ne i32 %1058, 4
  br i1 %1059, label %1060, label %1064

1060:                                             ; preds = %1057
  %1061 = load i32, ptr %26, align 4, !tbaa !9
  %1062 = icmp ne i32 %1061, 7
  br i1 %1062, label %1063, label %1064

1063:                                             ; preds = %1060, %1051
  br label %1200

1064:                                             ; preds = %1060, %1057, %1054
  %1065 = load ptr, ptr %8, align 8, !tbaa !5
  %1066 = load ptr, ptr %7, align 8, !tbaa !5
  %1067 = getelementptr inbounds %struct.Node, ptr %1066, i32 0, i32 15
  %1068 = load ptr, ptr %1067, align 8, !tbaa !20
  %1069 = icmp eq ptr %1065, %1068
  br i1 %1069, label %1070, label %1074

1070:                                             ; preds = %1064
  %1071 = load ptr, ptr %7, align 8, !tbaa !5
  %1072 = getelementptr inbounds %struct.Node, ptr %1071, i32 0, i32 16
  %1073 = load ptr, ptr %1072, align 8, !tbaa !19
  br label %1078

1074:                                             ; preds = %1064
  %1075 = load ptr, ptr %7, align 8, !tbaa !5
  %1076 = getelementptr inbounds %struct.Node, ptr %1075, i32 0, i32 15
  %1077 = load ptr, ptr %1076, align 8, !tbaa !20
  br label %1078

1078:                                             ; preds = %1074, %1070
  %1079 = phi ptr [ %1073, %1070 ], [ %1077, %1074 ]
  store ptr %1079, ptr %8, align 8, !tbaa !5
  %1080 = load i32, ptr %27, align 4, !tbaa !9
  %1081 = add nsw i32 %1080, 8
  store i32 %1081, ptr %27, align 4, !tbaa !9
  br label %1082

1082:                                             ; preds = %1078, %1050
  %1083 = load ptr, ptr %8, align 8, !tbaa !5
  %1084 = load ptr, ptr @Gain23.s1, align 8, !tbaa !5
  %1085 = icmp eq ptr %1083, %1084
  br i1 %1085, label %1110, label %1086

1086:                                             ; preds = %1082
  %1087 = load ptr, ptr %7, align 8, !tbaa !5
  %1088 = load ptr, ptr @Gain23.s1, align 8, !tbaa !5
  %1089 = icmp eq ptr %1087, %1088
  br i1 %1089, label %1090, label %1094

1090:                                             ; preds = %1086
  %1091 = load ptr, ptr %8, align 8, !tbaa !5
  %1092 = load ptr, ptr %2, align 8, !tbaa !5
  %1093 = icmp eq ptr %1091, %1092
  br i1 %1093, label %1110, label %1094

1094:                                             ; preds = %1090, %1086
  %1095 = load ptr, ptr %7, align 8, !tbaa !5
  %1096 = load ptr, ptr %3, align 8, !tbaa !5
  %1097 = icmp eq ptr %1095, %1096
  br i1 %1097, label %1098, label %1102

1098:                                             ; preds = %1094
  %1099 = load ptr, ptr %8, align 8, !tbaa !5
  %1100 = load ptr, ptr %4, align 8, !tbaa !5
  %1101 = icmp eq ptr %1099, %1100
  br i1 %1101, label %1110, label %1102

1102:                                             ; preds = %1098, %1094
  %1103 = load ptr, ptr %7, align 8, !tbaa !5
  %1104 = load ptr, ptr %4, align 8, !tbaa !5
  %1105 = icmp eq ptr %1103, %1104
  br i1 %1105, label %1106, label %1111

1106:                                             ; preds = %1102
  %1107 = load ptr, ptr %8, align 8, !tbaa !5
  %1108 = load ptr, ptr %3, align 8, !tbaa !5
  %1109 = icmp eq ptr %1107, %1108
  br i1 %1109, label %1110, label %1111

1110:                                             ; preds = %1106, %1098, %1090, %1082
  br label %1197

1111:                                             ; preds = %1106, %1102
  %1112 = load ptr, ptr %7, align 8, !tbaa !5
  %1113 = getelementptr inbounds %struct.Node, ptr %1112, i32 0, i32 26
  %1114 = load ptr, ptr %1113, align 8, !tbaa !21
  %1115 = load ptr, ptr %8, align 8, !tbaa !5
  %1116 = icmp eq ptr %1114, %1115
  br i1 %1116, label %1133, label %1117

1117:                                             ; preds = %1111
  %1118 = load ptr, ptr %7, align 8, !tbaa !5
  %1119 = getelementptr inbounds %struct.Node, ptr %1118, i32 0, i32 27
  %1120 = load ptr, ptr %1119, align 8, !tbaa !22
  %1121 = load ptr, ptr %8, align 8, !tbaa !5
  %1122 = icmp eq ptr %1120, %1121
  br i1 %1122, label %1133, label %1123

1123:                                             ; preds = %1117
  %1124 = load ptr, ptr %7, align 8, !tbaa !5
  %1125 = load ptr, ptr %8, align 8, !tbaa !5
  %1126 = call i32 @IsCommonEdge(ptr noundef %1124, ptr noundef %1125)
  %1127 = icmp ne i32 %1126, 0
  br i1 %1127, label %1133, label %1128

1128:                                             ; preds = %1123
  %1129 = load ptr, ptr %8, align 8, !tbaa !5
  %1130 = load ptr, ptr @Gain23.s1, align 8, !tbaa !5
  %1131 = call i32 @Forbidden(ptr noundef %1129, ptr noundef %1130)
  %1132 = icmp ne i32 %1131, 0
  br i1 %1132, label %1133, label %1134

1133:                                             ; preds = %1128, %1123, %1117, %1111
  br label %1197

1134:                                             ; preds = %1128
  %1135 = load i64, ptr %18, align 8, !tbaa !23
  %1136 = load ptr, ptr @C, align 8, !tbaa !5
  %1137 = load ptr, ptr %7, align 8, !tbaa !5
  %1138 = load ptr, ptr %8, align 8, !tbaa !5
  %1139 = call i32 %1136(ptr noundef %1137, ptr noundef %1138)
  %1140 = sext i32 %1139 to i64
  %1141 = add nsw i64 %1135, %1140
  store i64 %1141, ptr %19, align 8, !tbaa !23
  %1142 = load ptr, ptr @c, align 8, !tbaa !5
  %1143 = icmp ne ptr %1142, null
  br i1 %1143, label %1144, label %1153

1144:                                             ; preds = %1134
  %1145 = load i64, ptr %19, align 8, !tbaa !23
  %1146 = load ptr, ptr @c, align 8, !tbaa !5
  %1147 = load ptr, ptr %8, align 8, !tbaa !5
  %1148 = load ptr, ptr @Gain23.s1, align 8, !tbaa !5
  %1149 = call i32 %1146(ptr noundef %1147, ptr noundef %1148)
  %1150 = sext i32 %1149 to i64
  %1151 = sub nsw i64 %1145, %1150
  %1152 = icmp sgt i64 %1151, 0
  br i1 %1152, label %1153, label %1196

1153:                                             ; preds = %1144, %1134
  %1154 = load i64, ptr %19, align 8, !tbaa !23
  %1155 = load ptr, ptr @C, align 8, !tbaa !5
  %1156 = load ptr, ptr %8, align 8, !tbaa !5
  %1157 = load ptr, ptr @Gain23.s1, align 8, !tbaa !5
  %1158 = call i32 %1155(ptr noundef %1156, ptr noundef %1157)
  %1159 = sext i32 %1158 to i64
  %1160 = sub nsw i64 %1154, %1159
  store i64 %1160, ptr %20, align 8, !tbaa !23
  %1161 = icmp sgt i64 %1160, 0
  br i1 %1161, label %1162, label %1196

1162:                                             ; preds = %1153
  %1163 = load i32, ptr %27, align 4, !tbaa !9
  %1164 = icmp sle i32 %1163, 15
  br i1 %1164, label %1165, label %1176

1165:                                             ; preds = %1162
  %1166 = load ptr, ptr @Gain23.s1, align 8, !tbaa !5
  %1167 = load ptr, ptr %2, align 8, !tbaa !5
  %1168 = load ptr, ptr %3, align 8, !tbaa !5
  %1169 = load ptr, ptr %4, align 8, !tbaa !5
  %1170 = load ptr, ptr %5, align 8, !tbaa !5
  %1171 = load ptr, ptr %6, align 8, !tbaa !5
  %1172 = load ptr, ptr %7, align 8, !tbaa !5
  %1173 = load ptr, ptr %8, align 8, !tbaa !5
  %1174 = load i32, ptr %27, align 4, !tbaa !9
  call void @Make4OptMove(ptr noundef %1166, ptr noundef %1167, ptr noundef %1168, ptr noundef %1169, ptr noundef %1170, ptr noundef %1171, ptr noundef %1172, ptr noundef %1173, i32 noundef %1174)
  %1175 = load i64, ptr %20, align 8, !tbaa !23
  store i64 %1175, ptr %1, align 8
  store i32 1, ptr %31, align 4
  br label %1230

1176:                                             ; preds = %1162
  %1177 = load i64, ptr %20, align 8, !tbaa !23
  %1178 = load i64, ptr %21, align 8, !tbaa !23
  %1179 = icmp sgt i64 %1177, %1178
  br i1 %1179, label %1180, label %1195

1180:                                             ; preds = %1176
  %1181 = load ptr, ptr @Gain23.s1, align 8, !tbaa !5
  %1182 = load ptr, ptr %2, align 8, !tbaa !5
  %1183 = load ptr, ptr %3, align 8, !tbaa !5
  %1184 = load ptr, ptr %4, align 8, !tbaa !5
  %1185 = load ptr, ptr %5, align 8, !tbaa !5
  %1186 = load ptr, ptr %6, align 8, !tbaa !5
  %1187 = load ptr, ptr %7, align 8, !tbaa !5
  %1188 = load ptr, ptr %8, align 8, !tbaa !5
  %1189 = load i32, ptr %26, align 4, !tbaa !9
  %1190 = load i64, ptr %20, align 8, !tbaa !23
  %1191 = call i64 @BridgeGain(ptr noundef %1181, ptr noundef %1182, ptr noundef %1183, ptr noundef %1184, ptr noundef %1185, ptr noundef %1186, ptr noundef %1187, ptr noundef %1188, i32 noundef %1189, i64 noundef %1190)
  store i64 %1191, ptr %20, align 8, !tbaa !23
  %1192 = icmp sgt i64 %1191, 0
  br i1 %1192, label %1193, label %1195

1193:                                             ; preds = %1180
  %1194 = load i64, ptr %20, align 8, !tbaa !23
  store i64 %1194, ptr %1, align 8
  store i32 1, ptr %31, align 4
  br label %1230

1195:                                             ; preds = %1180, %1176
  br label %1196

1196:                                             ; preds = %1195, %1153, %1144
  br label %1197

1197:                                             ; preds = %1196, %1133, %1110
  %1198 = load i32, ptr %25, align 4, !tbaa !9
  %1199 = add nsw i32 %1198, 1
  store i32 %1199, ptr %25, align 4, !tbaa !9
  br label %652, !llvm.loop !30

1200:                                             ; preds = %1063, %652
  br label %1201

1201:                                             ; preds = %1200, %644
  %1202 = load ptr, ptr %12, align 8, !tbaa !5
  %1203 = getelementptr inbounds %struct.Candidate, ptr %1202, i32 1
  store ptr %1203, ptr %12, align 8, !tbaa !5
  br label %603, !llvm.loop !32

1204:                                             ; preds = %650, %603
  br label %1205

1205:                                             ; preds = %1204, %533, %489, %428
  %1206 = load i32, ptr %24, align 4, !tbaa !9
  %1207 = add nsw i32 %1206, 1
  store i32 %1207, ptr %24, align 4, !tbaa !9
  br label %343, !llvm.loop !33

1208:                                             ; preds = %494, %343
  br label %1209

1209:                                             ; preds = %1208, %335
  %1210 = load ptr, ptr %11, align 8, !tbaa !5
  %1211 = getelementptr inbounds %struct.Candidate, ptr %1210, i32 1
  store ptr %1211, ptr %11, align 8, !tbaa !5
  br label %310, !llvm.loop !34

1212:                                             ; preds = %341, %310
  br label %1213

1213:                                             ; preds = %1212, %305, %205
  %1214 = load i32, ptr %23, align 4, !tbaa !9
  %1215 = add nsw i32 %1214, 1
  store i32 %1215, ptr %23, align 4, !tbaa !9
  br label %141, !llvm.loop !35

1216:                                             ; preds = %141
  br label %1217

1217:                                             ; preds = %1216, %127
  %1218 = load ptr, ptr %10, align 8, !tbaa !5
  %1219 = getelementptr inbounds %struct.Candidate, ptr %1218, i32 1
  store ptr %1219, ptr %10, align 8, !tbaa !5
  br label %110, !llvm.loop !36

1220:                                             ; preds = %133, %110
  br label %1221

1221:                                             ; preds = %1220, %100
  %1222 = load ptr, ptr %2, align 8, !tbaa !5
  store ptr %1222, ptr @Gain23.s1, align 8, !tbaa !5
  %1223 = load ptr, ptr %9, align 8, !tbaa !5
  %1224 = icmp ne ptr %1222, %1223
  br i1 %1224, label %64, label %1225, !llvm.loop !37

1225:                                             ; preds = %1221
  br label %1226

1226:                                             ; preds = %1225
  %1227 = load i32, ptr %22, align 4, !tbaa !9
  %1228 = add nsw i32 %1227, 1
  store i32 %1228, ptr %22, align 4, !tbaa !9
  br label %46, !llvm.loop !38

1229:                                             ; preds = %46
  store i64 0, ptr %1, align 8
  store i32 1, ptr %31, align 4
  br label %1230

1230:                                             ; preds = %1229, %1193, %1165, %596, %576, %292, %261
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #3
  call void @llvm.lifetime.end.p0(i64 4, 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
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %3) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %2) #3
  %1231 = load i64, ptr %1, align 8
  ret i64 %1231
}

; 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 i32 @SegmentSize(ptr noundef, ptr noundef) #2

declare i64 @BridgeGain(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, i64 noundef) #2

declare void @Flip_SL(ptr noundef, 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

; 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 = !{!"int", !7, i64 0}
!11 = !{!12, !10, i64 48}
!12 = !{!"Node", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !10, i64 32, !10, i64 36, !10, i64 40, !10, i64 44, !10, i64 48, !10, 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, !13, i64 312, !13, i64 320, !13, i64 328, !13, i64 336, !13, i64 344, !13, i64 352, !7, i64 360, !7, i64 361, !7, i64 362}
!13 = !{!"double", !7, i64 0}
!14 = !{!15, !15, i64 0}
!15 = !{!"short", !7, i64 0}
!16 = !{!12, !6, i64 304}
!17 = !{!18, !7, i64 0}
!18 = !{!"Segment", !7, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !10, i64 40, !10, i64 44, !6, i64 48}
!19 = !{!12, !6, i64 72}
!20 = !{!12, !6, i64 64}
!21 = !{!12, !6, i64 152}
!22 = !{!12, !6, i64 160}
!23 = !{!24, !24, i64 0}
!24 = !{!"long long", !7, i64 0}
!25 = !{!12, !6, i64 288}
!26 = !{!27, !6, i64 0}
!27 = !{!"Candidate", !6, i64 0, !10, i64 8, !10, i64 12}
!28 = !{!27, !10, i64 8}
!29 = !{!12, !10, i64 20}
!30 = distinct !{!30, !31}
!31 = !{!"llvm.loop.mustprogress"}
!32 = distinct !{!32, !31}
!33 = distinct !{!33, !31}
!34 = distinct !{!34, !31}
!35 = distinct !{!35, !31}
!36 = distinct !{!36, !31}
!37 = distinct !{!37, !31}
!38 = distinct !{!38, !31}


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

@Gain23.s1 = external hidden local_unnamed_addr global ptr, align 8
@Gain23.OldReversed = external hidden local_unnamed_addr global i16, align 2
@FirstNode = external dso_local local_unnamed_addr global ptr, align 8
@Reversed = external dso_local local_unnamed_addr global i16, align 2
@C = external dso_local local_unnamed_addr global ptr, align 8
@MaxBreadth = external dso_local local_unnamed_addr global i32, align 4
@Dimension = external dso_local local_unnamed_addr global i32, align 4
@c = external dso_local local_unnamed_addr global ptr, align 8

; Function Attrs: nounwind uwtable
define dso_local range(i64 0, -9223372036854775808) i64 @Gain23() local_unnamed_addr #0 {
  %1 = load ptr, ptr @Gain23.s1, align 8, !tbaa !5
  %.not = icmp eq ptr %1, null
  %.pre = load ptr, ptr @FirstNode, align 8, !tbaa !5
  br i1 %.not, label %7, label %2

2:                                                ; preds = %0
  %3 = getelementptr inbounds i8, ptr %1, i64 48
  %4 = load i32, ptr %3, align 8, !tbaa !9
  %5 = getelementptr inbounds i8, ptr %.pre, i64 48
  %6 = load i32, ptr %5, align 8, !tbaa !9
  %.not387 = icmp eq i32 %4, %6
  br i1 %.not387, label %8, label %7

7:                                                ; preds = %2, %0
  store ptr %.pre, ptr @Gain23.s1, align 8, !tbaa !5
  br label %8

8:                                                ; preds = %7, %2
  %9 = phi ptr [ %.pre, %7 ], [ %1, %2 ]
  br label %10

10:                                               ; preds = %8, %437
  %11 = phi ptr [ %9, %8 ], [ %25, %437 ]
  %.0305644 = phi i32 [ 0, %8 ], [ %.14, %437 ]
  %.0307643 = phi i32 [ 0, %8 ], [ %.11318, %437 ]
  %.0322642 = phi i32 [ 1, %8 ], [ %438, %437 ]
  %.0325641 = phi ptr [ null, %8 ], [ %.11336, %437 ]
  %.0337640 = phi ptr [ null, %8 ], [ %.14351, %437 ]
  %12 = icmp eq i32 %.0322642, 1
  %13 = load i16, ptr @Gain23.OldReversed, align 2, !tbaa !13
  br i1 %12, label %16, label %14

14:                                               ; preds = %10
  %15 = xor i16 %13, 1
  store i16 %15, ptr @Gain23.OldReversed, align 2, !tbaa !13
  br label %16

16:                                               ; preds = %10, %14
  %.in = phi i16 [ %15, %14 ], [ %13, %10 ]
  store i16 %.in, ptr @Reversed, align 2, !tbaa !13
  br label %17

17:                                               ; preds = %.loopexit451, %16
  %18 = phi ptr [ %11, %16 ], [ %25, %.loopexit451 ]
  %.1338 = phi ptr [ %.0337640, %16 ], [ %.14351, %.loopexit451 ]
  %.1326 = phi ptr [ %.0325641, %16 ], [ %.11336, %.loopexit451 ]
  %.1308 = phi i32 [ %.0307643, %16 ], [ %.11318, %.loopexit451 ]
  %.1306 = phi i32 [ %.0305644, %16 ], [ %.14, %.loopexit451 ]
  %19 = load i16, ptr @Reversed, align 2, !tbaa !13
  %20 = getelementptr inbounds i8, ptr %18, i64 304
  %21 = load ptr, ptr %20, align 8, !tbaa !15
  %22 = load i8, ptr %21, align 8, !tbaa !16
  %23 = sext i8 %22 to i16
  %24 = icmp eq i16 %19, %23
  %.in388.v = select i1 %24, i64 72, i64 64
  %.in388 = getelementptr inbounds i8, ptr %18, i64 %.in388.v
  %25 = load ptr, ptr %.in388, align 8, !tbaa !5
  %26 = getelementptr inbounds i8, ptr %18, i64 152
  %27 = load ptr, ptr %26, align 8, !tbaa !18
  %28 = icmp eq ptr %27, %25
  br i1 %28, label %.loopexit451, label %29

29:                                               ; preds = %17
  %30 = getelementptr inbounds i8, ptr %18, i64 160
  %31 = load ptr, ptr %30, align 8, !tbaa !19
  %32 = icmp eq ptr %31, %25
  br i1 %32, label %.loopexit451, label %33

33:                                               ; preds = %29
  %34 = tail call i32 @IsCommonEdge(ptr noundef nonnull %18, ptr noundef %25) #2
  %.not389 = icmp eq i32 %34, 0
  br i1 %.not389, label %35, label %.loopexit451

35:                                               ; preds = %33
  %36 = load ptr, ptr @C, align 8, !tbaa !5
  %37 = load ptr, ptr @Gain23.s1, align 8, !tbaa !5
  %38 = tail call i32 %36(ptr noundef %37, ptr noundef %25) #2
  %39 = sext i32 %38 to i64
  %40 = getelementptr inbounds i8, ptr %25, i64 288
  %41 = load ptr, ptr %40, align 8, !tbaa !20
  %42 = load ptr, ptr %41, align 8, !tbaa !21
  %.not390623 = icmp eq ptr %42, null
  br i1 %.not390623, label %.loopexit451, label %.lr.ph630

.lr.ph630:                                        ; preds = %35
  %43 = getelementptr inbounds i8, ptr %25, i64 64
  %44 = getelementptr inbounds i8, ptr %25, i64 72
  br label %45

45:                                               ; preds = %.lr.ph630, %.loopexit449
  %46 = phi ptr [ %42, %.lr.ph630 ], [ %436, %.loopexit449 ]
  %.0303629 = phi i32 [ 0, %.lr.ph630 ], [ %.1304, %.loopexit449 ]
  %.2628 = phi i32 [ %.1306, %.lr.ph630 ], [ %.13, %.loopexit449 ]
  %.2309627 = phi i32 [ %.1308, %.lr.ph630 ], [ %.10317, %.loopexit449 ]
  %.2327626 = phi ptr [ %.1326, %.lr.ph630 ], [ %.10335, %.loopexit449 ]
  %.2339625 = phi ptr [ %.1338, %.lr.ph630 ], [ %.13350, %.loopexit449 ]
  %.0352624 = phi ptr [ %41, %.lr.ph630 ], [ %435, %.loopexit449 ]
  %47 = load ptr, ptr %43, align 8, !tbaa !23
  %48 = icmp eq ptr %46, %47
  br i1 %48, label %.loopexit449, label %49

49:                                               ; preds = %45
  %50 = load ptr, ptr %44, align 8, !tbaa !24
  %51 = icmp eq ptr %46, %50
  br i1 %51, label %.loopexit449, label %52

52:                                               ; preds = %49
  %53 = add nsw i32 %.0303629, 1
  %54 = load i32, ptr @MaxBreadth, align 4, !tbaa !25
  %.not391 = icmp slt i32 %.0303629, %54
  br i1 %.not391, label %55, label %.loopexit451

55:                                               ; preds = %52
  %56 = getelementptr inbounds i8, ptr %.0352624, i64 8
  %57 = load i32, ptr %56, align 8, !tbaa !26
  %58 = sext i32 %57 to i64
  %59 = sub nsw i64 %39, %58
  %60 = getelementptr inbounds i8, ptr %46, i64 152
  %61 = getelementptr inbounds i8, ptr %46, i64 304
  %62 = getelementptr inbounds i8, ptr %46, i64 160
  br label %63

63:                                               ; preds = %55, %.loopexit448
  %.3622 = phi i32 [ %.2628, %55 ], [ %.12, %.loopexit448 ]
  %.3310621 = phi i32 [ %.2309627, %55 ], [ %.9316, %.loopexit448 ]
  %.0321620 = phi i32 [ 1, %55 ], [ %434, %.loopexit448 ]
  %.3328619 = phi ptr [ %.2327626, %55 ], [ %.9334, %.loopexit448 ]
  %.3340618 = phi ptr [ %.2339625, %55 ], [ %.12349, %.loopexit448 ]
  %.not442 = icmp eq i32 %.0321620, 1
  %64 = load i16, ptr @Reversed, align 2, !tbaa !13
  %65 = load ptr, ptr %61, align 8, !tbaa !15
  %66 = load i8, ptr %65, align 8, !tbaa !16
  %67 = sext i8 %66 to i16
  %68 = icmp eq i16 %64, %67
  %69 = xor i1 %68, %.not442
  %..v.pn = select i1 %69, i64 64, i64 72
  %.in392 = getelementptr inbounds i8, ptr %46, i64 %..v.pn
  %70 = load ptr, ptr %.in392, align 8, !tbaa !5
  %71 = load ptr, ptr %60, align 8, !tbaa !18
  %72 = icmp eq ptr %71, %70
  br i1 %72, label %.loopexit448, label %73

73:                                               ; preds = %63
  %74 = load ptr, ptr %62, align 8, !tbaa !19
  %75 = icmp eq ptr %74, %70
  br i1 %75, label %.loopexit448, label %76

76:                                               ; preds = %73
  %77 = tail call i32 @IsCommonEdge(ptr noundef nonnull %46, ptr noundef %70) #2
  %.not393 = icmp eq i32 %77, 0
  br i1 %.not393, label %78, label %.loopexit448

78:                                               ; preds = %76
  %79 = load ptr, ptr @C, align 8, !tbaa !5
  %80 = tail call i32 %79(ptr noundef nonnull %46, ptr noundef %70) #2
  %81 = sext i32 %80 to i64
  %82 = add nsw i64 %59, %81
  %83 = load ptr, ptr @Gain23.s1, align 8, !tbaa !5
  br i1 %.not442, label %84, label %109

84:                                               ; preds = %78
  %.not394 = icmp eq ptr %70, %83
  br i1 %.not394, label %.thread, label %85

85:                                               ; preds = %84
  %86 = tail call i32 @Forbidden(ptr noundef %70, ptr noundef %83) #2
  %.not395 = icmp eq i32 %86, 0
  br i1 %.not395, label %87, label %.thread

87:                                               ; preds = %85
  %88 = tail call i32 @SegmentSize(ptr noundef %25, ptr noundef nonnull %46) #2
  %89 = shl nsw i32 %88, 1
  %90 = load i32, ptr @Dimension, align 4, !tbaa !25
  %.not396 = icmp sgt i32 %89, %90
  br i1 %.not396, label %.thread, label %91

91:                                               ; preds = %87
  %92 = load ptr, ptr @c, align 8, !tbaa !5
  %.not397 = icmp eq ptr %92, null
  br i1 %.not397, label %98, label %93

93:                                               ; preds = %91
  %94 = load ptr, ptr @Gain23.s1, align 8, !tbaa !5
  %95 = tail call i32 %92(ptr noundef %70, ptr noundef %94) #2
  %96 = sext i32 %95 to i64
  %97 = icmp sgt i64 %82, %96
  br i1 %97, label %98, label %.thread

98:                                               ; preds = %93, %91
  %99 = load ptr, ptr @C, align 8, !tbaa !5
  %100 = load ptr, ptr @Gain23.s1, align 8, !tbaa !5
  %101 = tail call i32 %99(ptr noundef %70, ptr noundef %100) #2
  %102 = sext i32 %101 to i64
  %103 = sub nsw i64 %82, %102
  %104 = icmp sgt i64 %103, 0
  br i1 %104, label %105, label %.thread

105:                                              ; preds = %98
  %106 = load ptr, ptr @Gain23.s1, align 8, !tbaa !5
  %107 = tail call i64 @BridgeGain(ptr noundef %106, ptr noundef %25, ptr noundef nonnull %46, ptr noundef %70, ptr noundef null, ptr noundef null, ptr noundef null, ptr noundef null, i32 noundef 0, i64 noundef %103) #2
  %108 = icmp sgt i64 %107, 0
  br i1 %108, label %.loopexit443, label %.thread

109:                                              ; preds = %78
  %110 = tail call i32 @Forbidden(ptr noundef %70, ptr noundef %83) #2
  %.not398 = icmp eq i32 %110, 0
  br i1 %.not398, label %111, label %.thread

111:                                              ; preds = %109
  %112 = load ptr, ptr @c, align 8, !tbaa !5
  %.not399 = icmp eq ptr %112, null
  br i1 %.not399, label %118, label %113

113:                                              ; preds = %111
  %114 = load ptr, ptr @Gain23.s1, align 8, !tbaa !5
  %115 = tail call i32 %112(ptr noundef %70, ptr noundef %114) #2
  %116 = sext i32 %115 to i64
  %117 = icmp sgt i64 %82, %116
  br i1 %117, label %118, label %.thread

118:                                              ; preds = %113, %111
  %119 = load ptr, ptr @C, align 8, !tbaa !5
  %120 = load ptr, ptr @Gain23.s1, align 8, !tbaa !5
  %121 = tail call i32 %119(ptr noundef %70, ptr noundef %120) #2
  %122 = sext i32 %121 to i64
  %123 = sub nsw i64 %82, %122
  %124 = icmp sgt i64 %123, 0
  br i1 %124, label %125, label %.thread

125:                                              ; preds = %118
  %126 = load ptr, ptr @Gain23.s1, align 8, !tbaa !5
  tail call void @Flip_SL(ptr noundef %126, ptr noundef %25, ptr noundef nonnull %46) #2
  br label %.loopexit443

.thread:                                          ; preds = %84, %85, %87, %93, %98, %105, %118, %113, %109
  %127 = getelementptr inbounds i8, ptr %70, i64 20
  %128 = load i32, ptr %127, align 4, !tbaa !27
  %129 = sext i32 %128 to i64
  %.not400 = icmp sgt i64 %82, %129
  br i1 %.not400, label %130, label %.loopexit448

130:                                              ; preds = %.thread
  %131 = getelementptr inbounds i8, ptr %70, i64 288
  %132 = load ptr, ptr %131, align 8, !tbaa !20
  %133 = load ptr, ptr %132, align 8, !tbaa !21
  %.not401601 = icmp eq ptr %133, null
  br i1 %.not401601, label %.loopexit448, label %.lr.ph608

.lr.ph608:                                        ; preds = %130
  %134 = getelementptr inbounds i8, ptr %70, i64 64
  %135 = getelementptr inbounds i8, ptr %70, i64 72
  br label %136

136:                                              ; preds = %.lr.ph608, %.loopexit446
  %137 = phi ptr [ %133, %.lr.ph608 ], [ %433, %.loopexit446 ]
  %.0301607 = phi i32 [ 0, %.lr.ph608 ], [ %.1302, %.loopexit446 ]
  %.4606 = phi i32 [ %.3622, %.lr.ph608 ], [ %.11, %.loopexit446 ]
  %.4311605 = phi i32 [ %.3310621, %.lr.ph608 ], [ %.8315, %.loopexit446 ]
  %.4329604 = phi ptr [ %.3328619, %.lr.ph608 ], [ %.8333, %.loopexit446 ]
  %.4341603 = phi ptr [ %.3340618, %.lr.ph608 ], [ %.11348, %.loopexit446 ]
  %.0353602 = phi ptr [ %132, %.lr.ph608 ], [ %432, %.loopexit446 ]
  %138 = load ptr, ptr %134, align 8, !tbaa !23
  %139 = icmp eq ptr %137, %138
  br i1 %139, label %.loopexit446, label %140

140:                                              ; preds = %136
  %141 = load ptr, ptr %135, align 8, !tbaa !24
  %142 = icmp eq ptr %137, %141
  br i1 %142, label %.loopexit446, label %143

143:                                              ; preds = %140
  %144 = getelementptr inbounds i8, ptr %.0353602, i64 8
  %145 = load i32, ptr %144, align 8, !tbaa !26
  %146 = sext i32 %145 to i64
  %147 = sub nsw i64 %82, %146
  %148 = icmp slt i64 %147, 1
  br i1 %148, label %.loopexit446, label %149

149:                                              ; preds = %143
  %150 = add nsw i32 %.0301607, 1
  %151 = load i32, ptr @MaxBreadth, align 4, !tbaa !25
  %.not402 = icmp slt i32 %.0301607, %151
  br i1 %.not402, label %.preheader445, label %.loopexit448

.preheader445:                                    ; preds = %149
  %152 = getelementptr inbounds i8, ptr %137, i64 64
  %153 = getelementptr inbounds i8, ptr %137, i64 72
  %154 = getelementptr inbounds i8, ptr %137, i64 304
  %155 = getelementptr inbounds i8, ptr %137, i64 152
  %156 = getelementptr inbounds i8, ptr %137, i64 160
  br label %157

157:                                              ; preds = %.preheader445, %.loopexit444
  %.5600 = phi i32 [ %.4606, %.preheader445 ], [ %.10, %.loopexit444 ]
  %.5312599 = phi i32 [ %.4311605, %.preheader445 ], [ %.7314, %.loopexit444 ]
  %.0320598 = phi i32 [ 1, %.preheader445 ], [ %431, %.loopexit444 ]
  %.5330597 = phi ptr [ %.4329604, %.preheader445 ], [ %.7332, %.loopexit444 ]
  %.5342596 = phi ptr [ %.4341603, %.preheader445 ], [ %.10347, %.loopexit444 ]
  br i1 %.not442, label %182, label %158

158:                                              ; preds = %157
  %159 = icmp eq i32 %.0320598, 1
  br i1 %159, label %160, label %170

160:                                              ; preds = %158
  %161 = tail call i32 @Between_SL(ptr noundef %25, ptr noundef nonnull %137, ptr noundef %70) #2
  %.not406 = icmp eq i32 %161, 0
  %162 = select i1 %.not406, i32 2, i32 1
  %163 = load i16, ptr @Reversed, align 2, !tbaa !13
  %164 = load ptr, ptr %154, align 8, !tbaa !15
  %165 = load i8, ptr %164, align 8, !tbaa !16
  %166 = sext i8 %165 to i16
  %167 = icmp eq i16 %163, %166
  %168 = xor i1 %167, %.not406
  %.646.v.pn = select i1 %168, i64 72, i64 64
  %.in407 = getelementptr inbounds i8, ptr %137, i64 %.646.v.pn
  %169 = load ptr, ptr %.in407, align 8, !tbaa !5
  br label %205

170:                                              ; preds = %158
  %171 = load ptr, ptr %152, align 8, !tbaa !23
  %172 = icmp eq ptr %.5330597, %171
  br i1 %172, label %173, label %175

173:                                              ; preds = %170
  %174 = load ptr, ptr %153, align 8, !tbaa !24
  br label %175

175:                                              ; preds = %170, %173
  %176 = phi ptr [ %174, %173 ], [ %171, %170 ]
  %177 = load ptr, ptr @Gain23.s1, align 8, !tbaa !5
  %178 = icmp eq ptr %137, %177
  %179 = icmp eq ptr %176, %177
  %or.cond = select i1 %178, i1 true, i1 %179
  br i1 %or.cond, label %.loopexit444, label %180

180:                                              ; preds = %175
  %181 = add nsw i32 %.5312599, 2
  br label %205

182:                                              ; preds = %157
  %183 = tail call i32 @Between_SL(ptr noundef %25, ptr noundef nonnull %137, ptr noundef nonnull %46) #2
  %.not403 = icmp eq i32 %183, 0
  br i1 %.not403, label %196, label %184

184:                                              ; preds = %182
  %185 = or disjoint i32 %.0320598, 4
  %186 = icmp eq i32 %.0320598, 1
  %187 = load i16, ptr @Reversed, align 2, !tbaa !13
  %188 = load ptr, ptr %154, align 8, !tbaa !15
  %189 = load i8, ptr %188, align 8, !tbaa !16
  %190 = sext i8 %189 to i16
  %191 = icmp eq i16 %187, %190
  %192 = xor i1 %191, %186
  %.648.v.pn = select i1 %192, i64 64, i64 72
  %.in405 = getelementptr inbounds i8, ptr %137, i64 %.648.v.pn
  %193 = load ptr, ptr %.in405, align 8, !tbaa !5
  %194 = load ptr, ptr @Gain23.s1, align 8, !tbaa !5
  %195 = icmp eq ptr %193, %194
  br i1 %195, label %.loopexit444, label %205

196:                                              ; preds = %182
  %197 = icmp eq i32 %.0320598, 2
  br i1 %197, label %.loopexit446, label %198

198:                                              ; preds = %196
  %199 = load i16, ptr @Reversed, align 2, !tbaa !13
  %200 = load ptr, ptr %154, align 8, !tbaa !15
  %201 = load i8, ptr %200, align 8, !tbaa !16
  %202 = sext i8 %201 to i16
  %203 = icmp eq i16 %199, %202
  %.in404.v = select i1 %203, i64 64, i64 72
  %.in404 = getelementptr inbounds i8, ptr %137, i64 %.in404.v
  %204 = load ptr, ptr %.in404, align 8, !tbaa !5
  br label %205

205:                                              ; preds = %198, %184, %160, %180
  %.6331 = phi ptr [ %169, %160 ], [ %176, %180 ], [ %193, %184 ], [ %204, %198 ]
  %.6313 = phi i32 [ %162, %160 ], [ %181, %180 ], [ %185, %184 ], [ 7, %198 ]
  %206 = load ptr, ptr %155, align 8, !tbaa !18
  %207 = icmp eq ptr %206, %.6331
  br i1 %207, label %.loopexit444, label %208

208:                                              ; preds = %205
  %209 = load ptr, ptr %156, align 8, !tbaa !19
  %210 = icmp eq ptr %209, %.6331
  br i1 %210, label %.loopexit444, label %211

211:                                              ; preds = %208
  %212 = tail call i32 @IsCommonEdge(ptr noundef nonnull %137, ptr noundef %.6331) #2
  %.not408 = icmp eq i32 %212, 0
  br i1 %.not408, label %213, label %.loopexit444

213:                                              ; preds = %211
  %214 = load ptr, ptr @C, align 8, !tbaa !5
  %215 = tail call i32 %214(ptr noundef nonnull %137, ptr noundef %.6331) #2
  %216 = sext i32 %215 to i64
  %217 = add nsw i64 %147, %216
  %218 = load ptr, ptr @Gain23.s1, align 8, !tbaa !5
  %219 = tail call i32 @Forbidden(ptr noundef %.6331, ptr noundef %218) #2
  %.not409 = icmp eq i32 %219, 0
  br i1 %.not409, label %220, label %243

220:                                              ; preds = %213
  %221 = load ptr, ptr @c, align 8, !tbaa !5
  %.not410 = icmp eq ptr %221, null
  br i1 %.not410, label %227, label %222

222:                                              ; preds = %220
  %223 = load ptr, ptr @Gain23.s1, align 8, !tbaa !5
  %224 = tail call i32 %221(ptr noundef %.6331, ptr noundef %223) #2
  %225 = sext i32 %224 to i64
  %226 = icmp sgt i64 %217, %225
  br i1 %226, label %227, label %243

227:                                              ; preds = %222, %220
  %228 = load ptr, ptr @C, align 8, !tbaa !5
  %229 = load ptr, ptr @Gain23.s1, align 8, !tbaa !5
  %230 = tail call i32 %228(ptr noundef %.6331, ptr noundef %229) #2
  %231 = sext i32 %230 to i64
  %232 = sub nsw i64 %217, %231
  %233 = icmp sgt i64 %232, 0
  br i1 %233, label %234, label %243

234:                                              ; preds = %227
  %235 = icmp slt i32 %.6313, 3
  %236 = add i32 %.6313, -5
  %237 = icmp ult i32 %236, 2
  %or.cond3 = or i1 %235, %237
  %238 = load ptr, ptr @Gain23.s1, align 8, !tbaa !5
  br i1 %or.cond3, label %239, label %240

239:                                              ; preds = %234
  tail call void @Make3OptMove(ptr noundef %238, ptr noundef %25, ptr noundef nonnull %46, ptr noundef %70, ptr noundef nonnull %137, ptr noundef %.6331, i32 noundef %.6313) #2
  br label %.loopexit443

240:                                              ; preds = %234
  %241 = tail call i64 @BridgeGain(ptr noundef %238, ptr noundef %25, ptr noundef nonnull %46, ptr noundef %70, ptr noundef nonnull %137, ptr noundef %.6331, ptr noundef null, ptr noundef null, i32 noundef %.6313, i64 noundef %232) #2
  %242 = icmp sgt i64 %241, 0
  br i1 %242, label %.loopexit443, label %243

243:                                              ; preds = %240, %227, %222, %213
  %.0323 = phi i64 [ 0, %213 ], [ %232, %240 ], [ %232, %227 ], [ 0, %222 ]
  %244 = getelementptr inbounds i8, ptr %.6331, i64 288
  %245 = load ptr, ptr %244, align 8, !tbaa !20
  %246 = load ptr, ptr %245, align 8, !tbaa !21
  %.not411587 = icmp eq ptr %246, null
  br i1 %.not411587, label %.loopexit444, label %.lr.ph

.lr.ph:                                           ; preds = %243
  %247 = getelementptr inbounds i8, ptr %.6331, i64 64
  %248 = getelementptr inbounds i8, ptr %.6331, i64 72
  %249 = icmp eq ptr %.6331, %25
  %250 = icmp eq ptr %.6331, %46
  br label %251

251:                                              ; preds = %.lr.ph, %.loopexit
  %252 = phi ptr [ %246, %.lr.ph ], [ %430, %.loopexit ]
  %.0591 = phi i32 [ 0, %.lr.ph ], [ %.1, %.loopexit ]
  %.6590 = phi i32 [ %.5600, %.lr.ph ], [ %.9, %.loopexit ]
  %.6343589 = phi ptr [ %.5342596, %.lr.ph ], [ %.9346, %.loopexit ]
  %.0354588 = phi ptr [ %245, %.lr.ph ], [ %429, %.loopexit ]
  %253 = load ptr, ptr %247, align 8, !tbaa !23
  %254 = icmp eq ptr %252, %253
  br i1 %254, label %.loopexit, label %255

255:                                              ; preds = %251
  %256 = load ptr, ptr %248, align 8, !tbaa !24
  %257 = icmp eq ptr %252, %256
  br i1 %257, label %.loopexit, label %258

258:                                              ; preds = %255
  %259 = icmp eq ptr %252, %46
  %or.cond436 = and i1 %249, %259
  %260 = icmp eq ptr %252, %25
  %or.cond437 = and i1 %250, %260
  %or.cond650 = or i1 %or.cond436, %or.cond437
  br i1 %or.cond650, label %.loopexit, label %261

261:                                              ; preds = %258
  %262 = getelementptr inbounds i8, ptr %.0354588, i64 8
  %263 = load i32, ptr %262, align 8, !tbaa !26
  %264 = sext i32 %263 to i64
  %265 = sub nsw i64 %217, %264
  %266 = icmp slt i64 %265, 1
  br i1 %266, label %.loopexit, label %267

267:                                              ; preds = %261
  %268 = add nsw i32 %.0591, 1
  %269 = load i32, ptr @MaxBreadth, align 4, !tbaa !25
  %.not412 = icmp slt i32 %.0591, %269
  br i1 %.not412, label %.preheader, label %.loopexit444

.preheader:                                       ; preds = %267
  %270 = getelementptr inbounds i8, ptr %252, i64 64
  %271 = getelementptr inbounds i8, ptr %252, i64 72
  %272 = getelementptr inbounds i8, ptr %252, i64 304
  %273 = icmp eq ptr %252, %70
  %274 = getelementptr inbounds i8, ptr %252, i64 152
  %275 = getelementptr inbounds i8, ptr %252, i64 160
  br label %276

276:                                              ; preds = %.preheader, %427
  %.7586 = phi i32 [ %.6590, %.preheader ], [ %.8, %427 ]
  %.0319585 = phi i32 [ 1, %.preheader ], [ %428, %427 ]
  %.7344584 = phi ptr [ %.6343589, %.preheader ], [ %.8345, %427 ]
  %277 = icmp eq i32 %.0319585, 1
  br i1 %277, label %278, label %369

278:                                              ; preds = %276
  switch i32 %.6313, label %380 [
    i32 1, label %279
    i32 2, label %288
    i32 3, label %297
    i32 4, label %316
    i32 5, label %334
    i32 6, label %341
    i32 7, label %350
  ]

279:                                              ; preds = %278
  %280 = tail call i32 @Between_SL(ptr noundef %25, ptr noundef nonnull %252, ptr noundef nonnull %137) #2
  %.not430 = icmp eq i32 %280, 0
  %281 = load i16, ptr @Reversed, align 2, !tbaa !13
  %282 = load ptr, ptr %272, align 8, !tbaa !15
  %283 = load i8, ptr %282, align 8, !tbaa !16
  %284 = sext i8 %283 to i16
  %285 = icmp eq i16 %281, %284
  %286 = xor i1 %285, %.not430
  %.651.v.pn = select i1 %286, i64 72, i64 64
  %.in431 = getelementptr inbounds i8, ptr %252, i64 %.651.v.pn
  %287 = load ptr, ptr %.in431, align 8, !tbaa !5
  br label %380

288:                                              ; preds = %278
  %289 = tail call i32 @Between_SL(ptr noundef nonnull %46, ptr noundef nonnull %252, ptr noundef %.6331) #2
  %.not428 = icmp eq i32 %289, 0
  %290 = load i16, ptr @Reversed, align 2, !tbaa !13
  %291 = load ptr, ptr %272, align 8, !tbaa !15
  %292 = load i8, ptr %291, align 8, !tbaa !16
  %293 = sext i8 %292 to i16
  %294 = icmp eq i16 %290, %293
  %295 = xor i1 %294, %.not428
  %.653.v.pn = select i1 %295, i64 72, i64 64
  %.in429 = getelementptr inbounds i8, ptr %252, i64 %.653.v.pn
  %296 = load ptr, ptr %.in429, align 8, !tbaa !5
  br label %380

297:                                              ; preds = %278
  %298 = tail call i32 @Between_SL(ptr noundef nonnull %137, ptr noundef nonnull %252, ptr noundef %70) #2
  %.not424 = icmp eq i32 %298, 0
  br i1 %.not424, label %306, label %299

299:                                              ; preds = %297
  %300 = load i16, ptr @Reversed, align 2, !tbaa !13
  %301 = load ptr, ptr %272, align 8, !tbaa !15
  %302 = load i8, ptr %301, align 8, !tbaa !16
  %303 = sext i8 %302 to i16
  %304 = icmp eq i16 %300, %303
  %.in427.v = select i1 %304, i64 72, i64 64
  %.in427 = getelementptr inbounds i8, ptr %252, i64 %.in427.v
  %305 = load ptr, ptr %.in427, align 8, !tbaa !5
  br label %380

306:                                              ; preds = %297
  %307 = load ptr, ptr @Gain23.s1, align 8, !tbaa !5
  %308 = tail call i32 @Between_SL(ptr noundef nonnull %46, ptr noundef nonnull %252, ptr noundef %307) #2
  %.not425 = icmp eq i32 %308, 0
  %309 = load i16, ptr @Reversed, align 2, !tbaa !13
  %310 = load ptr, ptr %272, align 8, !tbaa !15
  %311 = load i8, ptr %310, align 8, !tbaa !16
  %312 = sext i8 %311 to i16
  %313 = icmp eq i16 %309, %312
  %314 = xor i1 %313, %.not425
  %.655.v.pn = select i1 %314, i64 64, i64 72
  %.in426 = getelementptr inbounds i8, ptr %252, i64 %.655.v.pn
  %315 = load ptr, ptr %.in426, align 8, !tbaa !5
  br label %380

316:                                              ; preds = %278
  %317 = tail call i32 @Between_SL(ptr noundef %25, ptr noundef nonnull %252, ptr noundef nonnull %137) #2
  %.not420 = icmp eq i32 %317, 0
  br i1 %.not420, label %327, label %318

318:                                              ; preds = %316
  %319 = tail call i32 @Between_SL(ptr noundef %25, ptr noundef nonnull %252, ptr noundef %70) #2
  %.not422 = icmp eq i32 %319, 0
  %320 = load i16, ptr @Reversed, align 2, !tbaa !13
  %321 = load ptr, ptr %272, align 8, !tbaa !15
  %322 = load i8, ptr %321, align 8, !tbaa !16
  %323 = sext i8 %322 to i16
  %324 = icmp eq i16 %320, %323
  %325 = xor i1 %324, %.not422
  %.657.v.pn = select i1 %325, i64 72, i64 64
  %.in423 = getelementptr inbounds i8, ptr %252, i64 %.657.v.pn
  %326 = load ptr, ptr %.in423, align 8, !tbaa !5
  br label %380

327:                                              ; preds = %316
  %328 = load i16, ptr @Reversed, align 2, !tbaa !13
  %329 = load ptr, ptr %272, align 8, !tbaa !15
  %330 = load i8, ptr %329, align 8, !tbaa !16
  %331 = sext i8 %330 to i16
  %332 = icmp eq i16 %328, %331
  %.in421.v = select i1 %332, i64 64, i64 72
  %.in421 = getelementptr inbounds i8, ptr %252, i64 %.in421.v
  %333 = load ptr, ptr %.in421, align 8, !tbaa !5
  br label %380

334:                                              ; preds = %278
  %335 = load i16, ptr @Reversed, align 2, !tbaa !13
  %336 = load ptr, ptr %272, align 8, !tbaa !15
  %337 = load i8, ptr %336, align 8, !tbaa !16
  %338 = sext i8 %337 to i16
  %339 = icmp eq i16 %335, %338
  %.in419.v = select i1 %339, i64 64, i64 72
  %.in419 = getelementptr inbounds i8, ptr %252, i64 %.in419.v
  %340 = load ptr, ptr %.in419, align 8, !tbaa !5
  br label %380

341:                                              ; preds = %278
  %342 = tail call i32 @Between_SL(ptr noundef %25, ptr noundef nonnull %252, ptr noundef nonnull %46) #2
  %.not417 = icmp eq i32 %342, 0
  %343 = load i16, ptr @Reversed, align 2, !tbaa !13
  %344 = load ptr, ptr %272, align 8, !tbaa !15
  %345 = load i8, ptr %344, align 8, !tbaa !16
  %346 = sext i8 %345 to i16
  %347 = icmp eq i16 %343, %346
  %348 = xor i1 %347, %.not417
  %.659.v.pn = select i1 %348, i64 72, i64 64
  %.in418 = getelementptr inbounds i8, ptr %252, i64 %.659.v.pn
  %349 = load ptr, ptr %.in418, align 8, !tbaa !5
  br label %380

350:                                              ; preds = %278
  %351 = tail call i32 @Between_SL(ptr noundef %25, ptr noundef nonnull %252, ptr noundef nonnull %46) #2
  %.not413 = icmp eq i32 %351, 0
  br i1 %.not413, label %359, label %352

352:                                              ; preds = %350
  %353 = load i16, ptr @Reversed, align 2, !tbaa !13
  %354 = load ptr, ptr %272, align 8, !tbaa !15
  %355 = load i8, ptr %354, align 8, !tbaa !16
  %356 = sext i8 %355 to i16
  %357 = icmp eq i16 %353, %356
  %.in416.v = select i1 %357, i64 72, i64 64
  %.in416 = getelementptr inbounds i8, ptr %252, i64 %.in416.v
  %358 = load ptr, ptr %.in416, align 8, !tbaa !5
  br label %380

359:                                              ; preds = %350
  %360 = load ptr, ptr @Gain23.s1, align 8, !tbaa !5
  %361 = tail call i32 @Between_SL(ptr noundef nonnull %137, ptr noundef nonnull %252, ptr noundef %360) #2
  %.not414 = icmp eq i32 %361, 0
  %362 = load i16, ptr @Reversed, align 2, !tbaa !13
  %363 = load ptr, ptr %272, align 8, !tbaa !15
  %364 = load i8, ptr %363, align 8, !tbaa !16
  %365 = sext i8 %364 to i16
  %366 = icmp eq i16 %362, %365
  %367 = xor i1 %366, %.not414
  %.661.v.pn = select i1 %367, i64 64, i64 72
  %.in415 = getelementptr inbounds i8, ptr %252, i64 %.661.v.pn
  %368 = load ptr, ptr %.in415, align 8, !tbaa !5
  br label %380

369:                                              ; preds = %276
  %370 = icmp sgt i32 %.7586, 16
  br i1 %370, label %.loopexit, label %371

371:                                              ; preds = %369
  switch i32 %.6313, label %.loopexit [
    i32 7, label %372
    i32 4, label %372
    i32 3, label %372
  ]

372:                                              ; preds = %371, %371, %371
  %373 = load ptr, ptr %270, align 8, !tbaa !23
  %374 = icmp eq ptr %.7344584, %373
  br i1 %374, label %375, label %377

375:                                              ; preds = %372
  %376 = load ptr, ptr %271, align 8, !tbaa !24
  br label %377

377:                                              ; preds = %372, %375
  %378 = phi ptr [ %376, %375 ], [ %373, %372 ]
  %379 = add nsw i32 %.7586, 8
  br label %380

380:                                              ; preds = %278, %279, %288, %334, %341, %306, %299, %327, %318, %359, %352, %377
  %.8345 = phi ptr [ %.7344584, %278 ], [ %358, %352 ], [ %368, %359 ], [ %349, %341 ], [ %340, %334 ], [ %326, %318 ], [ %333, %327 ], [ %305, %299 ], [ %315, %306 ], [ %296, %288 ], [ %287, %279 ], [ %378, %377 ]
  %.8 = phi i32 [ %.6313, %278 ], [ 7, %352 ], [ 19, %359 ], [ 6, %341 ], [ 5, %334 ], [ 4, %318 ], [ 18, %327 ], [ 3, %299 ], [ 17, %306 ], [ 2, %288 ], [ 1, %279 ], [ %379, %377 ]
  %381 = load ptr, ptr @Gain23.s1, align 8, !tbaa !5
  %382 = icmp eq ptr %.8345, %381
  br i1 %382, label %427, label %383

383:                                              ; preds = %380
  %384 = icmp eq ptr %252, %381
  %385 = icmp eq ptr %.8345, %25
  %or.cond438 = and i1 %385, %384
  %386 = icmp eq ptr %.8345, %70
  %or.cond439 = and i1 %259, %386
  %or.cond441 = or i1 %or.cond439, %or.cond438
  %387 = icmp eq ptr %.8345, %46
  %or.cond440 = and i1 %273, %387
  %or.cond663 = or i1 %or.cond441, %or.cond440
  br i1 %or.cond663, label %427, label %388

388:                                              ; preds = %383
  %389 = load ptr, ptr %274, align 8, !tbaa !18
  %390 = icmp eq ptr %389, %.8345
  br i1 %390, label %427, label %391

391:                                              ; preds = %388
  %392 = load ptr, ptr %275, align 8, !tbaa !19
  %393 = icmp eq ptr %392, %.8345
  br i1 %393, label %427, label %394

394:                                              ; preds = %391
  %395 = tail call i32 @IsCommonEdge(ptr noundef nonnull %252, ptr noundef %.8345) #2
  %.not432 = icmp eq i32 %395, 0
  br i1 %.not432, label %396, label %427

396:                                              ; preds = %394
  %397 = load ptr, ptr @Gain23.s1, align 8, !tbaa !5
  %398 = tail call i32 @Forbidden(ptr noundef %.8345, ptr noundef %397) #2
  %.not433 = icmp eq i32 %398, 0
  br i1 %.not433, label %399, label %427

399:                                              ; preds = %396
  %400 = load ptr, ptr @C, align 8, !tbaa !5
  %401 = tail call i32 %400(ptr noundef nonnull %252, ptr noundef %.8345) #2
  %402 = sext i32 %401 to i64
  %403 = add nsw i64 %265, %402
  %404 = load ptr, ptr @c, align 8, !tbaa !5
  %.not434 = icmp eq ptr %404, null
  br i1 %.not434, label %410, label %405

405:                                              ; preds = %399
  %406 = load ptr, ptr @Gain23.s1, align 8, !tbaa !5
  %407 = tail call i32 %404(ptr noundef %.8345, ptr noundef %406) #2
  %408 = sext i32 %407 to i64
  %409 = icmp sgt i64 %403, %408
  br i1 %409, label %410, label %427

410:                                              ; preds = %405, %399
  %411 = load ptr, ptr @C, align 8, !tbaa !5
  %412 = load ptr, ptr @Gain23.s1, align 8, !tbaa !5
  %413 = tail call i32 %411(ptr noundef %.8345, ptr noundef %412) #2
  %414 = sext i32 %413 to i64
  %415 = sub nsw i64 %403, %414
  %416 = icmp sgt i64 %415, 0
  br i1 %416, label %417, label %427

417:                                              ; preds = %410
  %418 = icmp slt i32 %.8, 16
  br i1 %418, label %419, label %421

419:                                              ; preds = %417
  %420 = load ptr, ptr @Gain23.s1, align 8, !tbaa !5
  tail call void @Make4OptMove(ptr noundef %420, ptr noundef %25, ptr noundef nonnull %46, ptr noundef %70, ptr noundef nonnull %137, ptr noundef %.6331, ptr noundef nonnull %252, ptr noundef %.8345, i32 noundef %.8) #2
  br label %.loopexit443

421:                                              ; preds = %417
  %422 = icmp sgt i64 %415, %.0323
  br i1 %422, label %423, label %427

423:                                              ; preds = %421
  %424 = load ptr, ptr @Gain23.s1, align 8, !tbaa !5
  %425 = tail call i64 @BridgeGain(ptr noundef %424, ptr noundef %25, ptr noundef nonnull %46, ptr noundef %70, ptr noundef nonnull %137, ptr noundef %.6331, ptr noundef nonnull %252, ptr noundef %.8345, i32 noundef %.6313, i64 noundef %415) #2
  %426 = icmp sgt i64 %425, 0
  br i1 %426, label %.loopexit443, label %427

427:                                              ; preds = %383, %405, %410, %423, %421, %388, %391, %394, %396, %380
  %428 = add nuw nsw i32 %.0319585, 1
  %exitcond.not = icmp eq i32 %428, 3
  br i1 %exitcond.not, label %.loopexit, label %276, !llvm.loop !28

.loopexit:                                        ; preds = %371, %427, %369, %258, %251, %255, %261
  %.9346 = phi ptr [ %.6343589, %251 ], [ %.6343589, %255 ], [ %.6343589, %261 ], [ %.6343589, %258 ], [ %.7344584, %369 ], [ %.8345, %427 ], [ %.7344584, %371 ]
  %.9 = phi i32 [ %.6590, %251 ], [ %.6590, %255 ], [ %.6590, %261 ], [ %.6590, %258 ], [ %.7586, %369 ], [ %.8, %427 ], [ %.7586, %371 ]
  %.1 = phi i32 [ %.0591, %251 ], [ %.0591, %255 ], [ %.0591, %261 ], [ %.0591, %258 ], [ %268, %369 ], [ %268, %427 ], [ %268, %371 ]
  %429 = getelementptr inbounds i8, ptr %.0354588, i64 16
  %430 = load ptr, ptr %429, align 8, !tbaa !21
  %.not411 = icmp eq ptr %430, null
  br i1 %.not411, label %.loopexit444, label %251, !llvm.loop !30

.loopexit444:                                     ; preds = %267, %.loopexit, %243, %205, %208, %211, %184, %175
  %.10347 = phi ptr [ %.5342596, %205 ], [ %.5342596, %208 ], [ %.5342596, %211 ], [ %.5342596, %175 ], [ %.5342596, %184 ], [ %.5342596, %243 ], [ %.6343589, %267 ], [ %.9346, %.loopexit ]
  %.7332 = phi ptr [ %.6331, %205 ], [ %.6331, %208 ], [ %.6331, %211 ], [ %176, %175 ], [ %193, %184 ], [ %.6331, %243 ], [ %.6331, %.loopexit ], [ %.6331, %267 ]
  %.7314 = phi i32 [ %.6313, %205 ], [ %.6313, %208 ], [ %.6313, %211 ], [ %.5312599, %175 ], [ %185, %184 ], [ %.6313, %243 ], [ %.6313, %.loopexit ], [ %.6313, %267 ]
  %.10 = phi i32 [ %.5600, %205 ], [ %.5600, %208 ], [ %.5600, %211 ], [ %.5600, %175 ], [ %.5600, %184 ], [ %.5600, %243 ], [ %.6590, %267 ], [ %.9, %.loopexit ]
  %431 = add nuw nsw i32 %.0320598, 1
  %exitcond711.not = icmp eq i32 %431, 3
  br i1 %exitcond711.not, label %.loopexit446, label %157, !llvm.loop !31

.loopexit446:                                     ; preds = %.loopexit444, %196, %136, %140, %143
  %.11348 = phi ptr [ %.4341603, %136 ], [ %.4341603, %140 ], [ %.4341603, %143 ], [ %.5342596, %196 ], [ %.10347, %.loopexit444 ]
  %.8333 = phi ptr [ %.4329604, %136 ], [ %.4329604, %140 ], [ %.4329604, %143 ], [ %.5330597, %196 ], [ %.7332, %.loopexit444 ]
  %.8315 = phi i32 [ %.4311605, %136 ], [ %.4311605, %140 ], [ %.4311605, %143 ], [ %.5312599, %196 ], [ %.7314, %.loopexit444 ]
  %.11 = phi i32 [ %.4606, %136 ], [ %.4606, %140 ], [ %.4606, %143 ], [ %.5600, %196 ], [ %.10, %.loopexit444 ]
  %.1302 = phi i32 [ %.0301607, %136 ], [ %.0301607, %140 ], [ %.0301607, %143 ], [ %150, %196 ], [ %150, %.loopexit444 ]
  %432 = getelementptr inbounds i8, ptr %.0353602, i64 16
  %433 = load ptr, ptr %432, align 8, !tbaa !21
  %.not401 = icmp eq ptr %433, null
  br i1 %.not401, label %.loopexit448, label %136, !llvm.loop !32

.loopexit448:                                     ; preds = %149, %.loopexit446, %130, %.thread, %63, %73, %76
  %.12349 = phi ptr [ %.3340618, %63 ], [ %.3340618, %73 ], [ %.3340618, %76 ], [ %.3340618, %.thread ], [ %.3340618, %130 ], [ %.4341603, %149 ], [ %.11348, %.loopexit446 ]
  %.9334 = phi ptr [ %.3328619, %63 ], [ %.3328619, %73 ], [ %.3328619, %76 ], [ %.3328619, %.thread ], [ %.3328619, %130 ], [ %.4329604, %149 ], [ %.8333, %.loopexit446 ]
  %.9316 = phi i32 [ %.3310621, %63 ], [ %.3310621, %73 ], [ %.3310621, %76 ], [ %.3310621, %.thread ], [ %.3310621, %130 ], [ %.4311605, %149 ], [ %.8315, %.loopexit446 ]
  %.12 = phi i32 [ %.3622, %63 ], [ %.3622, %73 ], [ %.3622, %76 ], [ %.3622, %.thread ], [ %.3622, %130 ], [ %.4606, %149 ], [ %.11, %.loopexit446 ]
  %434 = add nuw nsw i32 %.0321620, 1
  %exitcond712.not = icmp eq i32 %434, 3
  br i1 %exitcond712.not, label %.loopexit449, label %63, !llvm.loop !33

.loopexit449:                                     ; preds = %.loopexit448, %45, %49
  %.13350 = phi ptr [ %.2339625, %45 ], [ %.2339625, %49 ], [ %.12349, %.loopexit448 ]
  %.10335 = phi ptr [ %.2327626, %45 ], [ %.2327626, %49 ], [ %.9334, %.loopexit448 ]
  %.10317 = phi i32 [ %.2309627, %45 ], [ %.2309627, %49 ], [ %.9316, %.loopexit448 ]
  %.13 = phi i32 [ %.2628, %45 ], [ %.2628, %49 ], [ %.12, %.loopexit448 ]
  %.1304 = phi i32 [ %.0303629, %45 ], [ %.0303629, %49 ], [ %53, %.loopexit448 ]
  %435 = getelementptr inbounds i8, ptr %.0352624, i64 16
  %436 = load ptr, ptr %435, align 8, !tbaa !21
  %.not390 = icmp eq ptr %436, null
  br i1 %.not390, label %.loopexit451, label %45, !llvm.loop !34

.loopexit451:                                     ; preds = %52, %.loopexit449, %35, %17, %29, %33
  %.14351 = phi ptr [ %.1338, %17 ], [ %.1338, %29 ], [ %.1338, %33 ], [ %.1338, %35 ], [ %.2339625, %52 ], [ %.13350, %.loopexit449 ]
  %.11336 = phi ptr [ %.1326, %17 ], [ %.1326, %29 ], [ %.1326, %33 ], [ %.1326, %35 ], [ %.2327626, %52 ], [ %.10335, %.loopexit449 ]
  %.11318 = phi i32 [ %.1308, %17 ], [ %.1308, %29 ], [ %.1308, %33 ], [ %.1308, %35 ], [ %.2309627, %52 ], [ %.10317, %.loopexit449 ]
  %.14 = phi i32 [ %.1306, %17 ], [ %.1306, %29 ], [ %.1306, %33 ], [ %.1306, %35 ], [ %.2628, %52 ], [ %.13, %.loopexit449 ]
  store ptr %25, ptr @Gain23.s1, align 8, !tbaa !5
  %.not435 = icmp eq ptr %25, %9
  br i1 %.not435, label %437, label %17, !llvm.loop !35

437:                                              ; preds = %.loopexit451
  %438 = add nuw nsw i32 %.0322642, 1
  %exitcond713.not = icmp eq i32 %438, 3
  br i1 %exitcond713.not, label %.loopexit443, label %10, !llvm.loop !36

.loopexit443:                                     ; preds = %437, %105, %240, %423, %419, %239, %125
  %.0324 = phi i64 [ %415, %419 ], [ %232, %239 ], [ %123, %125 ], [ %425, %423 ], [ %241, %240 ], [ %107, %105 ], [ 0, %437 ]
  ret i64 %.0324
}

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

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

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

declare i64 @BridgeGain(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, i64 noundef) local_unnamed_addr #1

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

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

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

declare void @Make4OptMove(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #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 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nounwind }

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

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


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