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

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

@.str = external hidden unnamed_addr constant [32 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [68 x i8], align 1
@__PRETTY_FUNCTION__.Flip_SL = external hidden unnamed_addr constant [37 x i8], align 1
@Groups = external dso_local global i32, align 4
@Reversed = external dso_local global i16, align 2
@GroupSize = external dso_local global i32, align 4
@C = external dso_local global ptr, align 8
@SwapStack = external dso_local global ptr, align 8
@Swaps = external dso_local global i32, align 4
@Rand = external dso_local global ptr, align 8
@Hash = external dso_local global i32, align 4

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

32:                                               ; preds = %3
  %33 = load ptr, ptr %4, align 8, !tbaa !5
  %34 = getelementptr inbounds %struct.Node, ptr %33, i32 0, i32 16
  %35 = load ptr, ptr %34, align 8, !tbaa !13
  %36 = load ptr, ptr %5, align 8, !tbaa !5
  %37 = icmp eq ptr %35, %36
  br i1 %37, label %38, label %39

38:                                               ; preds = %32, %3
  br label %40

39:                                               ; preds = %32
  call void @__assert_fail(ptr noundef @.str, ptr noundef @.str.1, i32 noundef 51, ptr noundef @__PRETTY_FUNCTION__.Flip_SL) #6
  unreachable

40:                                               ; preds = %38
  %41 = load ptr, ptr %6, align 8, !tbaa !5
  %42 = load ptr, ptr %5, align 8, !tbaa !5
  %43 = getelementptr inbounds %struct.Node, ptr %42, i32 0, i32 15
  %44 = load ptr, ptr %43, align 8, !tbaa !9
  %45 = icmp eq ptr %41, %44
  br i1 %45, label %52, label %46

46:                                               ; preds = %40
  %47 = load ptr, ptr %6, align 8, !tbaa !5
  %48 = load ptr, ptr %5, align 8, !tbaa !5
  %49 = getelementptr inbounds %struct.Node, ptr %48, i32 0, i32 16
  %50 = load ptr, ptr %49, align 8, !tbaa !13
  %51 = icmp eq ptr %47, %50
  br i1 %51, label %52, label %53

52:                                               ; preds = %46, %40
  store i32 1, ptr %22, align 4
  br label %787

53:                                               ; preds = %46
  %54 = load i32, ptr @Groups, align 4, !tbaa !14
  %55 = icmp eq i32 %54, 1
  br i1 %55, label %56, label %60

56:                                               ; preds = %53
  %57 = load ptr, ptr %4, align 8, !tbaa !5
  %58 = load ptr, ptr %5, align 8, !tbaa !5
  %59 = load ptr, ptr %6, align 8, !tbaa !5
  call void @Flip(ptr noundef %57, ptr noundef %58, ptr noundef %59)
  store i32 1, ptr %22, align 4
  br label %787

60:                                               ; preds = %53
  %61 = load ptr, ptr %5, align 8, !tbaa !5
  %62 = load i16, ptr @Reversed, align 2, !tbaa !15
  %63 = sext i16 %62 to i32
  %64 = load ptr, ptr %4, align 8, !tbaa !5
  %65 = getelementptr inbounds %struct.Node, ptr %64, i32 0, i32 45
  %66 = load ptr, ptr %65, align 8, !tbaa !17
  %67 = getelementptr inbounds %struct.Segment, ptr %66, i32 0, i32 0
  %68 = load i8, ptr %67, align 8, !tbaa !18
  %69 = sext i8 %68 to i32
  %70 = icmp eq i32 %63, %69
  br i1 %70, label %71, label %75

71:                                               ; preds = %60
  %72 = load ptr, ptr %4, align 8, !tbaa !5
  %73 = getelementptr inbounds %struct.Node, ptr %72, i32 0, i32 16
  %74 = load ptr, ptr %73, align 8, !tbaa !13
  br label %79

75:                                               ; preds = %60
  %76 = load ptr, ptr %4, align 8, !tbaa !5
  %77 = getelementptr inbounds %struct.Node, ptr %76, i32 0, i32 15
  %78 = load ptr, ptr %77, align 8, !tbaa !9
  br label %79

79:                                               ; preds = %75, %71
  %80 = phi ptr [ %74, %71 ], [ %78, %75 ]
  %81 = icmp eq ptr %61, %80
  br i1 %81, label %82, label %102

82:                                               ; preds = %79
  %83 = load i16, ptr @Reversed, align 2, !tbaa !15
  %84 = sext i16 %83 to i32
  %85 = load ptr, ptr %6, align 8, !tbaa !5
  %86 = getelementptr inbounds %struct.Node, ptr %85, i32 0, i32 45
  %87 = load ptr, ptr %86, align 8, !tbaa !17
  %88 = getelementptr inbounds %struct.Segment, ptr %87, i32 0, i32 0
  %89 = load i8, ptr %88, align 8, !tbaa !18
  %90 = sext i8 %89 to i32
  %91 = icmp eq i32 %84, %90
  br i1 %91, label %92, label %96

92:                                               ; preds = %82
  %93 = load ptr, ptr %6, align 8, !tbaa !5
  %94 = getelementptr inbounds %struct.Node, ptr %93, i32 0, i32 15
  %95 = load ptr, ptr %94, align 8, !tbaa !9
  br label %100

96:                                               ; preds = %82
  %97 = load ptr, ptr %6, align 8, !tbaa !5
  %98 = getelementptr inbounds %struct.Node, ptr %97, i32 0, i32 16
  %99 = load ptr, ptr %98, align 8, !tbaa !13
  br label %100

100:                                              ; preds = %96, %92
  %101 = phi ptr [ %95, %92 ], [ %99, %96 ]
  br label %122

102:                                              ; preds = %79
  %103 = load i16, ptr @Reversed, align 2, !tbaa !15
  %104 = sext i16 %103 to i32
  %105 = load ptr, ptr %6, align 8, !tbaa !5
  %106 = getelementptr inbounds %struct.Node, ptr %105, i32 0, i32 45
  %107 = load ptr, ptr %106, align 8, !tbaa !17
  %108 = getelementptr inbounds %struct.Segment, ptr %107, i32 0, i32 0
  %109 = load i8, ptr %108, align 8, !tbaa !18
  %110 = sext i8 %109 to i32
  %111 = icmp eq i32 %104, %110
  br i1 %111, label %112, label %116

112:                                              ; preds = %102
  %113 = load ptr, ptr %6, align 8, !tbaa !5
  %114 = getelementptr inbounds %struct.Node, ptr %113, i32 0, i32 16
  %115 = load ptr, ptr %114, align 8, !tbaa !13
  br label %120

116:                                              ; preds = %102
  %117 = load ptr, ptr %6, align 8, !tbaa !5
  %118 = getelementptr inbounds %struct.Node, ptr %117, i32 0, i32 15
  %119 = load ptr, ptr %118, align 8, !tbaa !9
  br label %120

120:                                              ; preds = %116, %112
  %121 = phi ptr [ %115, %112 ], [ %119, %116 ]
  br label %122

122:                                              ; preds = %120, %100
  %123 = phi ptr [ %101, %100 ], [ %121, %120 ]
  store ptr %123, ptr %7, align 8, !tbaa !5
  %124 = load ptr, ptr %4, align 8, !tbaa !5
  %125 = getelementptr inbounds %struct.Node, ptr %124, i32 0, i32 45
  %126 = load ptr, ptr %125, align 8, !tbaa !17
  store ptr %126, ptr %12, align 8, !tbaa !5
  %127 = load ptr, ptr %5, align 8, !tbaa !5
  %128 = getelementptr inbounds %struct.Node, ptr %127, i32 0, i32 45
  %129 = load ptr, ptr %128, align 8, !tbaa !17
  store ptr %129, ptr %13, align 8, !tbaa !5
  %130 = load ptr, ptr %6, align 8, !tbaa !5
  %131 = getelementptr inbounds %struct.Node, ptr %130, i32 0, i32 45
  %132 = load ptr, ptr %131, align 8, !tbaa !17
  store ptr %132, ptr %14, align 8, !tbaa !5
  %133 = load ptr, ptr %7, align 8, !tbaa !5
  %134 = getelementptr inbounds %struct.Node, ptr %133, i32 0, i32 45
  %135 = load ptr, ptr %134, align 8, !tbaa !17
  store ptr %135, ptr %15, align 8, !tbaa !5
  %136 = load ptr, ptr %12, align 8, !tbaa !5
  %137 = load ptr, ptr %14, align 8, !tbaa !5
  %138 = icmp ne ptr %136, %137
  br i1 %138, label %139, label %178

139:                                              ; preds = %122
  %140 = load ptr, ptr %13, align 8, !tbaa !5
  %141 = load ptr, ptr %15, align 8, !tbaa !5
  %142 = icmp ne ptr %140, %141
  br i1 %142, label %143, label %178

143:                                              ; preds = %139
  %144 = load ptr, ptr %12, align 8, !tbaa !5
  %145 = load ptr, ptr %13, align 8, !tbaa !5
  %146 = icmp eq ptr %144, %145
  br i1 %146, label %147, label %156

147:                                              ; preds = %143
  %148 = load ptr, ptr %4, align 8, !tbaa !5
  %149 = load ptr, ptr %5, align 8, !tbaa !5
  call void @SplitSegment(ptr noundef %148, ptr noundef %149)
  %150 = load ptr, ptr %4, align 8, !tbaa !5
  %151 = getelementptr inbounds %struct.Node, ptr %150, i32 0, i32 45
  %152 = load ptr, ptr %151, align 8, !tbaa !17
  store ptr %152, ptr %12, align 8, !tbaa !5
  %153 = load ptr, ptr %5, align 8, !tbaa !5
  %154 = getelementptr inbounds %struct.Node, ptr %153, i32 0, i32 45
  %155 = load ptr, ptr %154, align 8, !tbaa !17
  store ptr %155, ptr %13, align 8, !tbaa !5
  br label %156

156:                                              ; preds = %147, %143
  %157 = load ptr, ptr %14, align 8, !tbaa !5
  %158 = load ptr, ptr %15, align 8, !tbaa !5
  %159 = icmp eq ptr %157, %158
  br i1 %159, label %160, label %177

160:                                              ; preds = %156
  %161 = load ptr, ptr %12, align 8, !tbaa !5
  %162 = load ptr, ptr %14, align 8, !tbaa !5
  %163 = icmp ne ptr %161, %162
  br i1 %163, label %164, label %177

164:                                              ; preds = %160
  %165 = load ptr, ptr %13, align 8, !tbaa !5
  %166 = load ptr, ptr %15, align 8, !tbaa !5
  %167 = icmp ne ptr %165, %166
  br i1 %167, label %168, label %177

168:                                              ; preds = %164
  %169 = load ptr, ptr %6, align 8, !tbaa !5
  %170 = load ptr, ptr %7, align 8, !tbaa !5
  call void @SplitSegment(ptr noundef %169, ptr noundef %170)
  %171 = load ptr, ptr %6, align 8, !tbaa !5
  %172 = getelementptr inbounds %struct.Node, ptr %171, i32 0, i32 45
  %173 = load ptr, ptr %172, align 8, !tbaa !17
  store ptr %173, ptr %14, align 8, !tbaa !5
  %174 = load ptr, ptr %7, align 8, !tbaa !5
  %175 = getelementptr inbounds %struct.Node, ptr %174, i32 0, i32 45
  %176 = load ptr, ptr %175, align 8, !tbaa !17
  store ptr %176, ptr %15, align 8, !tbaa !5
  br label %177

177:                                              ; preds = %168, %164, %160, %156
  br label %254

178:                                              ; preds = %139, %122
  %179 = load ptr, ptr %12, align 8, !tbaa !5
  %180 = load ptr, ptr %14, align 8, !tbaa !5
  %181 = icmp eq ptr %179, %180
  br i1 %181, label %182, label %196

182:                                              ; preds = %178
  %183 = load ptr, ptr %6, align 8, !tbaa !5
  %184 = getelementptr inbounds %struct.Node, ptr %183, i32 0, i32 2
  %185 = load i32, ptr %184, align 8, !tbaa !20
  %186 = load ptr, ptr %4, align 8, !tbaa !5
  %187 = getelementptr inbounds %struct.Node, ptr %186, i32 0, i32 2
  %188 = load i32, ptr %187, align 8, !tbaa !20
  %189 = sub nsw i32 %185, %188
  %190 = call i32 @llvm.abs.i32(i32 %189, i1 true)
  %191 = sitofp i32 %190 to double
  %192 = load i32, ptr @GroupSize, align 4, !tbaa !14
  %193 = sitofp i32 %192 to double
  %194 = fmul double 7.500000e-01, %193
  %195 = fcmp ogt double %191, %194
  br i1 %195, label %214, label %196

196:                                              ; preds = %182, %178
  %197 = load ptr, ptr %13, align 8, !tbaa !5
  %198 = load ptr, ptr %15, align 8, !tbaa !5
  %199 = icmp eq ptr %197, %198
  br i1 %199, label %200, label %253

200:                                              ; preds = %196
  %201 = load ptr, ptr %7, align 8, !tbaa !5
  %202 = getelementptr inbounds %struct.Node, ptr %201, i32 0, i32 2
  %203 = load i32, ptr %202, align 8, !tbaa !20
  %204 = load ptr, ptr %5, align 8, !tbaa !5
  %205 = getelementptr inbounds %struct.Node, ptr %204, i32 0, i32 2
  %206 = load i32, ptr %205, align 8, !tbaa !20
  %207 = sub nsw i32 %203, %206
  %208 = call i32 @llvm.abs.i32(i32 %207, i1 true)
  %209 = sitofp i32 %208 to double
  %210 = load i32, ptr @GroupSize, align 4, !tbaa !14
  %211 = sitofp i32 %210 to double
  %212 = fmul double 7.500000e-01, %211
  %213 = fcmp ogt double %209, %212
  br i1 %213, label %214, label %253

214:                                              ; preds = %200, %182
  %215 = load ptr, ptr %12, align 8, !tbaa !5
  %216 = load ptr, ptr %13, align 8, !tbaa !5
  %217 = icmp eq ptr %215, %216
  br i1 %217, label %218, label %233

218:                                              ; preds = %214
  %219 = load ptr, ptr %4, align 8, !tbaa !5
  %220 = load ptr, ptr %5, align 8, !tbaa !5
  call void @SplitSegment(ptr noundef %219, ptr noundef %220)
  %221 = load ptr, ptr %4, align 8, !tbaa !5
  %222 = getelementptr inbounds %struct.Node, ptr %221, i32 0, i32 45
  %223 = load ptr, ptr %222, align 8, !tbaa !17
  store ptr %223, ptr %12, align 8, !tbaa !5
  %224 = load ptr, ptr %5, align 8, !tbaa !5
  %225 = getelementptr inbounds %struct.Node, ptr %224, i32 0, i32 45
  %226 = load ptr, ptr %225, align 8, !tbaa !17
  store ptr %226, ptr %13, align 8, !tbaa !5
  %227 = load ptr, ptr %6, align 8, !tbaa !5
  %228 = getelementptr inbounds %struct.Node, ptr %227, i32 0, i32 45
  %229 = load ptr, ptr %228, align 8, !tbaa !17
  store ptr %229, ptr %14, align 8, !tbaa !5
  %230 = load ptr, ptr %7, align 8, !tbaa !5
  %231 = getelementptr inbounds %struct.Node, ptr %230, i32 0, i32 45
  %232 = load ptr, ptr %231, align 8, !tbaa !17
  store ptr %232, ptr %15, align 8, !tbaa !5
  br label %233

233:                                              ; preds = %218, %214
  %234 = load ptr, ptr %14, align 8, !tbaa !5
  %235 = load ptr, ptr %15, align 8, !tbaa !5
  %236 = icmp eq ptr %234, %235
  br i1 %236, label %237, label %252

237:                                              ; preds = %233
  %238 = load ptr, ptr %6, align 8, !tbaa !5
  %239 = load ptr, ptr %7, align 8, !tbaa !5
  call void @SplitSegment(ptr noundef %238, ptr noundef %239)
  %240 = load ptr, ptr %4, align 8, !tbaa !5
  %241 = getelementptr inbounds %struct.Node, ptr %240, i32 0, i32 45
  %242 = load ptr, ptr %241, align 8, !tbaa !17
  store ptr %242, ptr %12, align 8, !tbaa !5
  %243 = load ptr, ptr %5, align 8, !tbaa !5
  %244 = getelementptr inbounds %struct.Node, ptr %243, i32 0, i32 45
  %245 = load ptr, ptr %244, align 8, !tbaa !17
  store ptr %245, ptr %13, align 8, !tbaa !5
  %246 = load ptr, ptr %6, align 8, !tbaa !5
  %247 = getelementptr inbounds %struct.Node, ptr %246, i32 0, i32 45
  %248 = load ptr, ptr %247, align 8, !tbaa !17
  store ptr %248, ptr %14, align 8, !tbaa !5
  %249 = load ptr, ptr %7, align 8, !tbaa !5
  %250 = getelementptr inbounds %struct.Node, ptr %249, i32 0, i32 45
  %251 = load ptr, ptr %250, align 8, !tbaa !17
  store ptr %251, ptr %15, align 8, !tbaa !5
  br label %252

252:                                              ; preds = %237, %233
  br label %253

253:                                              ; preds = %252, %200, %196
  br label %254

254:                                              ; preds = %253, %177
  store ptr null, ptr %9, align 8, !tbaa !5
  %255 = load ptr, ptr %12, align 8, !tbaa !5
  %256 = load ptr, ptr %14, align 8, !tbaa !5
  %257 = icmp eq ptr %255, %256
  br i1 %257, label %258, label %321

258:                                              ; preds = %254
  %259 = load ptr, ptr %4, align 8, !tbaa !5
  %260 = getelementptr inbounds %struct.Node, ptr %259, i32 0, i32 2
  %261 = load i32, ptr %260, align 8, !tbaa !20
  %262 = load ptr, ptr %6, align 8, !tbaa !5
  %263 = getelementptr inbounds %struct.Node, ptr %262, i32 0, i32 2
  %264 = load i32, ptr %263, align 8, !tbaa !20
  %265 = icmp slt i32 %261, %264
  br i1 %265, label %266, label %293

266:                                              ; preds = %258
  %267 = load ptr, ptr %12, align 8, !tbaa !5
  %268 = load ptr, ptr %13, align 8, !tbaa !5
  %269 = icmp eq ptr %267, %268
  br i1 %269, label %270, label %287

270:                                              ; preds = %266
  %271 = load ptr, ptr %12, align 8, !tbaa !5
  %272 = load ptr, ptr %15, align 8, !tbaa !5
  %273 = icmp eq ptr %271, %272
  br i1 %273, label %274, label %287

274:                                              ; preds = %270
  %275 = load ptr, ptr %5, align 8, !tbaa !5
  %276 = getelementptr inbounds %struct.Node, ptr %275, i32 0, i32 2
  %277 = load i32, ptr %276, align 8, !tbaa !20
  %278 = load ptr, ptr %4, align 8, !tbaa !5
  %279 = getelementptr inbounds %struct.Node, ptr %278, i32 0, i32 2
  %280 = load i32, ptr %279, align 8, !tbaa !20
  %281 = icmp sgt i32 %277, %280
  br i1 %281, label %282, label %287

282:                                              ; preds = %274
  %283 = load ptr, ptr %4, align 8, !tbaa !5
  store ptr %283, ptr %8, align 8, !tbaa !5
  %284 = load ptr, ptr %5, align 8, !tbaa !5
  store ptr %284, ptr %9, align 8, !tbaa !5
  %285 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %285, ptr %10, align 8, !tbaa !5
  %286 = load ptr, ptr %7, align 8, !tbaa !5
  store ptr %286, ptr %11, align 8, !tbaa !5
  br label %292

287:                                              ; preds = %274, %270, %266
  %288 = load ptr, ptr %5, align 8, !tbaa !5
  store ptr %288, ptr %8, align 8, !tbaa !5
  %289 = load ptr, ptr %4, align 8, !tbaa !5
  store ptr %289, ptr %9, align 8, !tbaa !5
  %290 = load ptr, ptr %7, align 8, !tbaa !5
  store ptr %290, ptr %10, align 8, !tbaa !5
  %291 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %291, ptr %11, align 8, !tbaa !5
  br label %292

292:                                              ; preds = %287, %282
  br label %320

293:                                              ; preds = %258
  %294 = load ptr, ptr %12, align 8, !tbaa !5
  %295 = load ptr, ptr %13, align 8, !tbaa !5
  %296 = icmp eq ptr %294, %295
  br i1 %296, label %297, label %314

297:                                              ; preds = %293
  %298 = load ptr, ptr %12, align 8, !tbaa !5
  %299 = load ptr, ptr %15, align 8, !tbaa !5
  %300 = icmp eq ptr %298, %299
  br i1 %300, label %301, label %314

301:                                              ; preds = %297
  %302 = load ptr, ptr %5, align 8, !tbaa !5
  %303 = getelementptr inbounds %struct.Node, ptr %302, i32 0, i32 2
  %304 = load i32, ptr %303, align 8, !tbaa !20
  %305 = load ptr, ptr %4, align 8, !tbaa !5
  %306 = getelementptr inbounds %struct.Node, ptr %305, i32 0, i32 2
  %307 = load i32, ptr %306, align 8, !tbaa !20
  %308 = icmp slt i32 %304, %307
  br i1 %308, label %309, label %314

309:                                              ; preds = %301
  %310 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %310, ptr %8, align 8, !tbaa !5
  %311 = load ptr, ptr %7, align 8, !tbaa !5
  store ptr %311, ptr %9, align 8, !tbaa !5
  %312 = load ptr, ptr %4, align 8, !tbaa !5
  store ptr %312, ptr %10, align 8, !tbaa !5
  %313 = load ptr, ptr %5, align 8, !tbaa !5
  store ptr %313, ptr %11, align 8, !tbaa !5
  br label %319

314:                                              ; preds = %301, %297, %293
  %315 = load ptr, ptr %7, align 8, !tbaa !5
  store ptr %315, ptr %8, align 8, !tbaa !5
  %316 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %316, ptr %9, align 8, !tbaa !5
  %317 = load ptr, ptr %5, align 8, !tbaa !5
  store ptr %317, ptr %10, align 8, !tbaa !5
  %318 = load ptr, ptr %4, align 8, !tbaa !5
  store ptr %318, ptr %11, align 8, !tbaa !5
  br label %319

319:                                              ; preds = %314, %309
  br label %320

320:                                              ; preds = %319, %292
  br label %345

321:                                              ; preds = %254
  %322 = load ptr, ptr %13, align 8, !tbaa !5
  %323 = load ptr, ptr %15, align 8, !tbaa !5
  %324 = icmp eq ptr %322, %323
  br i1 %324, label %325, label %344

325:                                              ; preds = %321
  %326 = load ptr, ptr %7, align 8, !tbaa !5
  %327 = getelementptr inbounds %struct.Node, ptr %326, i32 0, i32 2
  %328 = load i32, ptr %327, align 8, !tbaa !20
  %329 = load ptr, ptr %5, align 8, !tbaa !5
  %330 = getelementptr inbounds %struct.Node, ptr %329, i32 0, i32 2
  %331 = load i32, ptr %330, align 8, !tbaa !20
  %332 = icmp slt i32 %328, %331
  br i1 %332, label %333, label %338

333:                                              ; preds = %325
  %334 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %334, ptr %8, align 8, !tbaa !5
  %335 = load ptr, ptr %7, align 8, !tbaa !5
  store ptr %335, ptr %9, align 8, !tbaa !5
  %336 = load ptr, ptr %4, align 8, !tbaa !5
  store ptr %336, ptr %10, align 8, !tbaa !5
  %337 = load ptr, ptr %5, align 8, !tbaa !5
  store ptr %337, ptr %11, align 8, !tbaa !5
  br label %343

338:                                              ; preds = %325
  %339 = load ptr, ptr %4, align 8, !tbaa !5
  store ptr %339, ptr %8, align 8, !tbaa !5
  %340 = load ptr, ptr %5, align 8, !tbaa !5
  store ptr %340, ptr %9, align 8, !tbaa !5
  %341 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %341, ptr %10, align 8, !tbaa !5
  %342 = load ptr, ptr %7, align 8, !tbaa !5
  store ptr %342, ptr %11, align 8, !tbaa !5
  br label %343

343:                                              ; preds = %338, %333
  br label %344

344:                                              ; preds = %343, %321
  br label %345

345:                                              ; preds = %344, %320
  %346 = load ptr, ptr %9, align 8, !tbaa !5
  %347 = icmp ne ptr %346, null
  br i1 %347, label %348, label %512

348:                                              ; preds = %345
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #5
  %349 = load ptr, ptr @C, align 8, !tbaa !5
  %350 = load ptr, ptr %9, align 8, !tbaa !5
  %351 = load ptr, ptr %10, align 8, !tbaa !5
  %352 = call i32 %349(ptr noundef %350, ptr noundef %351)
  store i32 %352, ptr %23, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #5
  %353 = load ptr, ptr @C, align 8, !tbaa !5
  %354 = load ptr, ptr %11, align 8, !tbaa !5
  %355 = load ptr, ptr %8, align 8, !tbaa !5
  %356 = call i32 %353(ptr noundef %354, ptr noundef %355)
  store i32 %356, ptr %24, align 4, !tbaa !14
  %357 = load ptr, ptr %11, align 8, !tbaa !5
  %358 = getelementptr inbounds %struct.Node, ptr %357, i32 0, i32 2
  %359 = load i32, ptr %358, align 8, !tbaa !20
  store i32 %359, ptr %20, align 4, !tbaa !14
  %360 = load ptr, ptr %11, align 8, !tbaa !5
  %361 = getelementptr inbounds %struct.Node, ptr %360, i32 0, i32 16
  store ptr null, ptr %361, align 8, !tbaa !13
  %362 = load ptr, ptr %9, align 8, !tbaa !5
  store ptr %362, ptr %19, align 8, !tbaa !5
  br label %363

363:                                              ; preds = %366, %348
  %364 = load ptr, ptr %19, align 8, !tbaa !5
  store ptr %364, ptr %18, align 8, !tbaa !5
  %365 = icmp ne ptr %364, null
  br i1 %365, label %366, label %393

366:                                              ; preds = %363
  %367 = load ptr, ptr %18, align 8, !tbaa !5
  %368 = getelementptr inbounds %struct.Node, ptr %367, i32 0, i32 16
  %369 = load ptr, ptr %368, align 8, !tbaa !13
  store ptr %369, ptr %19, align 8, !tbaa !5
  %370 = load ptr, ptr %18, align 8, !tbaa !5
  %371 = getelementptr inbounds %struct.Node, ptr %370, i32 0, i32 15
  %372 = load ptr, ptr %371, align 8, !tbaa !9
  %373 = load ptr, ptr %18, align 8, !tbaa !5
  %374 = getelementptr inbounds %struct.Node, ptr %373, i32 0, i32 16
  store ptr %372, ptr %374, align 8, !tbaa !13
  %375 = load ptr, ptr %19, align 8, !tbaa !5
  %376 = load ptr, ptr %18, align 8, !tbaa !5
  %377 = getelementptr inbounds %struct.Node, ptr %376, i32 0, i32 15
  store ptr %375, ptr %377, align 8, !tbaa !9
  %378 = load i32, ptr %20, align 4, !tbaa !14
  %379 = add nsw i32 %378, -1
  store i32 %379, ptr %20, align 4, !tbaa !14
  %380 = load ptr, ptr %18, align 8, !tbaa !5
  %381 = getelementptr inbounds %struct.Node, ptr %380, i32 0, i32 2
  store i32 %378, ptr %381, align 8, !tbaa !20
  %382 = load ptr, ptr %18, align 8, !tbaa !5
  %383 = getelementptr inbounds %struct.Node, ptr %382, i32 0, i32 8
  %384 = load i32, ptr %383, align 8, !tbaa !21
  store i32 %384, ptr %21, align 4, !tbaa !14
  %385 = load ptr, ptr %18, align 8, !tbaa !5
  %386 = getelementptr inbounds %struct.Node, ptr %385, i32 0, i32 7
  %387 = load i32, ptr %386, align 4, !tbaa !22
  %388 = load ptr, ptr %18, align 8, !tbaa !5
  %389 = getelementptr inbounds %struct.Node, ptr %388, i32 0, i32 8
  store i32 %387, ptr %389, align 8, !tbaa !21
  %390 = load i32, ptr %21, align 4, !tbaa !14
  %391 = load ptr, ptr %18, align 8, !tbaa !5
  %392 = getelementptr inbounds %struct.Node, ptr %391, i32 0, i32 7
  store i32 %390, ptr %392, align 4, !tbaa !22
  br label %363, !llvm.loop !23

393:                                              ; preds = %363
  %394 = load ptr, ptr %8, align 8, !tbaa !5
  %395 = load ptr, ptr %11, align 8, !tbaa !5
  %396 = getelementptr inbounds %struct.Node, ptr %395, i32 0, i32 15
  store ptr %394, ptr %396, align 8, !tbaa !9
  %397 = load ptr, ptr %10, align 8, !tbaa !5
  %398 = load ptr, ptr %9, align 8, !tbaa !5
  %399 = getelementptr inbounds %struct.Node, ptr %398, i32 0, i32 16
  store ptr %397, ptr %399, align 8, !tbaa !13
  %400 = load i32, ptr %24, align 4, !tbaa !14
  %401 = load ptr, ptr %11, align 8, !tbaa !5
  %402 = getelementptr inbounds %struct.Node, ptr %401, i32 0, i32 7
  store i32 %400, ptr %402, align 4, !tbaa !22
  %403 = load i32, ptr %23, align 4, !tbaa !14
  %404 = load ptr, ptr %9, align 8, !tbaa !5
  %405 = getelementptr inbounds %struct.Node, ptr %404, i32 0, i32 8
  store i32 %403, ptr %405, align 8, !tbaa !21
  %406 = load ptr, ptr %8, align 8, !tbaa !5
  %407 = getelementptr inbounds %struct.Node, ptr %406, i32 0, i32 16
  %408 = load ptr, ptr %407, align 8, !tbaa !13
  %409 = load ptr, ptr %9, align 8, !tbaa !5
  %410 = icmp eq ptr %408, %409
  br i1 %410, label %411, label %420

411:                                              ; preds = %393
  %412 = load ptr, ptr %11, align 8, !tbaa !5
  %413 = load ptr, ptr %8, align 8, !tbaa !5
  %414 = getelementptr inbounds %struct.Node, ptr %413, i32 0, i32 16
  store ptr %412, ptr %414, align 8, !tbaa !13
  %415 = load ptr, ptr %11, align 8, !tbaa !5
  %416 = getelementptr inbounds %struct.Node, ptr %415, i32 0, i32 7
  %417 = load i32, ptr %416, align 4, !tbaa !22
  %418 = load ptr, ptr %8, align 8, !tbaa !5
  %419 = getelementptr inbounds %struct.Node, ptr %418, i32 0, i32 8
  store i32 %417, ptr %419, align 8, !tbaa !21
  br label %429

420:                                              ; preds = %393
  %421 = load ptr, ptr %11, align 8, !tbaa !5
  %422 = load ptr, ptr %8, align 8, !tbaa !5
  %423 = getelementptr inbounds %struct.Node, ptr %422, i32 0, i32 15
  store ptr %421, ptr %423, align 8, !tbaa !9
  %424 = load ptr, ptr %11, align 8, !tbaa !5
  %425 = getelementptr inbounds %struct.Node, ptr %424, i32 0, i32 7
  %426 = load i32, ptr %425, align 4, !tbaa !22
  %427 = load ptr, ptr %8, align 8, !tbaa !5
  %428 = getelementptr inbounds %struct.Node, ptr %427, i32 0, i32 7
  store i32 %426, ptr %428, align 4, !tbaa !22
  br label %429

429:                                              ; preds = %420, %411
  %430 = load ptr, ptr %10, align 8, !tbaa !5
  %431 = getelementptr inbounds %struct.Node, ptr %430, i32 0, i32 15
  %432 = load ptr, ptr %431, align 8, !tbaa !9
  %433 = load ptr, ptr %11, align 8, !tbaa !5
  %434 = icmp eq ptr %432, %433
  br i1 %434, label %435, label %444

435:                                              ; preds = %429
  %436 = load ptr, ptr %9, align 8, !tbaa !5
  %437 = load ptr, ptr %10, align 8, !tbaa !5
  %438 = getelementptr inbounds %struct.Node, ptr %437, i32 0, i32 15
  store ptr %436, ptr %438, align 8, !tbaa !9
  %439 = load ptr, ptr %9, align 8, !tbaa !5
  %440 = getelementptr inbounds %struct.Node, ptr %439, i32 0, i32 8
  %441 = load i32, ptr %440, align 8, !tbaa !21
  %442 = load ptr, ptr %10, align 8, !tbaa !5
  %443 = getelementptr inbounds %struct.Node, ptr %442, i32 0, i32 7
  store i32 %441, ptr %443, align 4, !tbaa !22
  br label %453

444:                                              ; preds = %429
  %445 = load ptr, ptr %9, align 8, !tbaa !5
  %446 = load ptr, ptr %10, align 8, !tbaa !5
  %447 = getelementptr inbounds %struct.Node, ptr %446, i32 0, i32 16
  store ptr %445, ptr %447, align 8, !tbaa !13
  %448 = load ptr, ptr %9, align 8, !tbaa !5
  %449 = getelementptr inbounds %struct.Node, ptr %448, i32 0, i32 8
  %450 = load i32, ptr %449, align 8, !tbaa !21
  %451 = load ptr, ptr %10, align 8, !tbaa !5
  %452 = getelementptr inbounds %struct.Node, ptr %451, i32 0, i32 8
  store i32 %450, ptr %452, align 8, !tbaa !21
  br label %453

453:                                              ; preds = %444, %435
  %454 = load ptr, ptr %9, align 8, !tbaa !5
  %455 = getelementptr inbounds %struct.Node, ptr %454, i32 0, i32 45
  %456 = load ptr, ptr %455, align 8, !tbaa !17
  %457 = getelementptr inbounds %struct.Segment, ptr %456, i32 0, i32 1
  %458 = load ptr, ptr %457, align 8, !tbaa !25
  %459 = load ptr, ptr %9, align 8, !tbaa !5
  %460 = icmp eq ptr %458, %459
  br i1 %460, label %461, label %467

461:                                              ; preds = %453
  %462 = load ptr, ptr %11, align 8, !tbaa !5
  %463 = load ptr, ptr %9, align 8, !tbaa !5
  %464 = getelementptr inbounds %struct.Node, ptr %463, i32 0, i32 45
  %465 = load ptr, ptr %464, align 8, !tbaa !17
  %466 = getelementptr inbounds %struct.Segment, ptr %465, i32 0, i32 1
  store ptr %462, ptr %466, align 8, !tbaa !25
  br label %482

467:                                              ; preds = %453
  %468 = load ptr, ptr %11, align 8, !tbaa !5
  %469 = getelementptr inbounds %struct.Node, ptr %468, i32 0, i32 45
  %470 = load ptr, ptr %469, align 8, !tbaa !17
  %471 = getelementptr inbounds %struct.Segment, ptr %470, i32 0, i32 1
  %472 = load ptr, ptr %471, align 8, !tbaa !25
  %473 = load ptr, ptr %11, align 8, !tbaa !5
  %474 = icmp eq ptr %472, %473
  br i1 %474, label %475, label %481

475:                                              ; preds = %467
  %476 = load ptr, ptr %9, align 8, !tbaa !5
  %477 = load ptr, ptr %11, align 8, !tbaa !5
  %478 = getelementptr inbounds %struct.Node, ptr %477, i32 0, i32 45
  %479 = load ptr, ptr %478, align 8, !tbaa !17
  %480 = getelementptr inbounds %struct.Segment, ptr %479, i32 0, i32 1
  store ptr %476, ptr %480, align 8, !tbaa !25
  br label %481

481:                                              ; preds = %475, %467
  br label %482

482:                                              ; preds = %481, %461
  %483 = load ptr, ptr %9, align 8, !tbaa !5
  %484 = getelementptr inbounds %struct.Node, ptr %483, i32 0, i32 45
  %485 = load ptr, ptr %484, align 8, !tbaa !17
  %486 = getelementptr inbounds %struct.Segment, ptr %485, i32 0, i32 2
  %487 = load ptr, ptr %486, align 8, !tbaa !26
  %488 = load ptr, ptr %9, align 8, !tbaa !5
  %489 = icmp eq ptr %487, %488
  br i1 %489, label %490, label %496

490:                                              ; preds = %482
  %491 = load ptr, ptr %11, align 8, !tbaa !5
  %492 = load ptr, ptr %9, align 8, !tbaa !5
  %493 = getelementptr inbounds %struct.Node, ptr %492, i32 0, i32 45
  %494 = load ptr, ptr %493, align 8, !tbaa !17
  %495 = getelementptr inbounds %struct.Segment, ptr %494, i32 0, i32 2
  store ptr %491, ptr %495, align 8, !tbaa !26
  br label %511

496:                                              ; preds = %482
  %497 = load ptr, ptr %11, align 8, !tbaa !5
  %498 = getelementptr inbounds %struct.Node, ptr %497, i32 0, i32 45
  %499 = load ptr, ptr %498, align 8, !tbaa !17
  %500 = getelementptr inbounds %struct.Segment, ptr %499, i32 0, i32 2
  %501 = load ptr, ptr %500, align 8, !tbaa !26
  %502 = load ptr, ptr %11, align 8, !tbaa !5
  %503 = icmp eq ptr %501, %502
  br i1 %503, label %504, label %510

504:                                              ; preds = %496
  %505 = load ptr, ptr %9, align 8, !tbaa !5
  %506 = load ptr, ptr %11, align 8, !tbaa !5
  %507 = getelementptr inbounds %struct.Node, ptr %506, i32 0, i32 45
  %508 = load ptr, ptr %507, align 8, !tbaa !17
  %509 = getelementptr inbounds %struct.Segment, ptr %508, i32 0, i32 2
  store ptr %505, ptr %509, align 8, !tbaa !26
  br label %510

510:                                              ; preds = %504, %496
  br label %511

511:                                              ; preds = %510, %490
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #5
  br label %695

512:                                              ; preds = %345
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #5
  %513 = load ptr, ptr %12, align 8, !tbaa !5
  %514 = getelementptr inbounds %struct.Segment, ptr %513, i32 0, i32 4
  %515 = load ptr, ptr %514, align 8, !tbaa !27
  %516 = load ptr, ptr %13, align 8, !tbaa !5
  %517 = icmp ne ptr %515, %516
  br i1 %517, label %518, label %531

518:                                              ; preds = %512
  %519 = load ptr, ptr %4, align 8, !tbaa !5
  store ptr %519, ptr %8, align 8, !tbaa !5
  %520 = load ptr, ptr %5, align 8, !tbaa !5
  store ptr %520, ptr %4, align 8, !tbaa !5
  %521 = load ptr, ptr %8, align 8, !tbaa !5
  store ptr %521, ptr %5, align 8, !tbaa !5
  %522 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %522, ptr %8, align 8, !tbaa !5
  %523 = load ptr, ptr %7, align 8, !tbaa !5
  store ptr %523, ptr %6, align 8, !tbaa !5
  %524 = load ptr, ptr %8, align 8, !tbaa !5
  store ptr %524, ptr %7, align 8, !tbaa !5
  %525 = load ptr, ptr %12, align 8, !tbaa !5
  store ptr %525, ptr %16, align 8, !tbaa !5
  %526 = load ptr, ptr %13, align 8, !tbaa !5
  store ptr %526, ptr %12, align 8, !tbaa !5
  %527 = load ptr, ptr %16, align 8, !tbaa !5
  store ptr %527, ptr %13, align 8, !tbaa !5
  %528 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %528, ptr %16, align 8, !tbaa !5
  %529 = load ptr, ptr %15, align 8, !tbaa !5
  store ptr %529, ptr %14, align 8, !tbaa !5
  %530 = load ptr, ptr %16, align 8, !tbaa !5
  store ptr %530, ptr %15, align 8, !tbaa !5
  br label %531

531:                                              ; preds = %518, %512
  %532 = load ptr, ptr %13, align 8, !tbaa !5
  %533 = getelementptr inbounds %struct.Segment, ptr %532, i32 0, i32 5
  %534 = load i32, ptr %533, align 8, !tbaa !28
  %535 = load ptr, ptr %14, align 8, !tbaa !5
  %536 = getelementptr inbounds %struct.Segment, ptr %535, i32 0, i32 5
  %537 = load i32, ptr %536, align 8, !tbaa !28
  %538 = sub nsw i32 %534, %537
  store i32 %538, ptr %20, align 4, !tbaa !14
  %539 = icmp slt i32 %538, 0
  br i1 %539, label %540, label %544

540:                                              ; preds = %531
  %541 = load i32, ptr @Groups, align 4, !tbaa !14
  %542 = load i32, ptr %20, align 4, !tbaa !14
  %543 = add nsw i32 %542, %541
  store i32 %543, ptr %20, align 4, !tbaa !14
  br label %544

544:                                              ; preds = %540, %531
  %545 = load i32, ptr %20, align 4, !tbaa !14
  %546 = mul nsw i32 2, %545
  %547 = load i32, ptr @Groups, align 4, !tbaa !14
  %548 = icmp sgt i32 %546, %547
  br i1 %548, label %549, label %562

549:                                              ; preds = %544
  %550 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %550, ptr %8, align 8, !tbaa !5
  %551 = load ptr, ptr %5, align 8, !tbaa !5
  store ptr %551, ptr %6, align 8, !tbaa !5
  %552 = load ptr, ptr %8, align 8, !tbaa !5
  store ptr %552, ptr %5, align 8, !tbaa !5
  %553 = load ptr, ptr %4, align 8, !tbaa !5
  store ptr %553, ptr %8, align 8, !tbaa !5
  %554 = load ptr, ptr %7, align 8, !tbaa !5
  store ptr %554, ptr %4, align 8, !tbaa !5
  %555 = load ptr, ptr %8, align 8, !tbaa !5
  store ptr %555, ptr %7, align 8, !tbaa !5
  %556 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %556, ptr %16, align 8, !tbaa !5
  %557 = load ptr, ptr %13, align 8, !tbaa !5
  store ptr %557, ptr %14, align 8, !tbaa !5
  %558 = load ptr, ptr %16, align 8, !tbaa !5
  store ptr %558, ptr %13, align 8, !tbaa !5
  %559 = load ptr, ptr %12, align 8, !tbaa !5
  store ptr %559, ptr %16, align 8, !tbaa !5
  %560 = load ptr, ptr %15, align 8, !tbaa !5
  store ptr %560, ptr %12, align 8, !tbaa !5
  %561 = load ptr, ptr %16, align 8, !tbaa !5
  store ptr %561, ptr %15, align 8, !tbaa !5
  br label %562

562:                                              ; preds = %549, %544
  %563 = load ptr, ptr @C, align 8, !tbaa !5
  %564 = load ptr, ptr %5, align 8, !tbaa !5
  %565 = load ptr, ptr %6, align 8, !tbaa !5
  %566 = call i32 %563(ptr noundef %564, ptr noundef %565)
  store i32 %566, ptr %25, align 4, !tbaa !14
  %567 = load ptr, ptr @C, align 8, !tbaa !5
  %568 = load ptr, ptr %7, align 8, !tbaa !5
  %569 = load ptr, ptr %4, align 8, !tbaa !5
  %570 = call i32 %567(ptr noundef %568, ptr noundef %569)
  store i32 %570, ptr %26, align 4, !tbaa !14
  %571 = load ptr, ptr %12, align 8, !tbaa !5
  %572 = getelementptr inbounds %struct.Segment, ptr %571, i32 0, i32 5
  %573 = load i32, ptr %572, align 8, !tbaa !28
  store i32 %573, ptr %20, align 4, !tbaa !14
  %574 = load ptr, ptr %12, align 8, !tbaa !5
  %575 = getelementptr inbounds %struct.Segment, ptr %574, i32 0, i32 4
  store ptr null, ptr %575, align 8, !tbaa !27
  %576 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %576, ptr %17, align 8, !tbaa !5
  br label %577

577:                                              ; preds = %580, %562
  %578 = load ptr, ptr %17, align 8, !tbaa !5
  store ptr %578, ptr %16, align 8, !tbaa !5
  %579 = icmp ne ptr %578, null
  br i1 %579, label %580, label %602

580:                                              ; preds = %577
  %581 = load ptr, ptr %16, align 8, !tbaa !5
  %582 = getelementptr inbounds %struct.Segment, ptr %581, i32 0, i32 4
  %583 = load ptr, ptr %582, align 8, !tbaa !27
  store ptr %583, ptr %17, align 8, !tbaa !5
  %584 = load ptr, ptr %16, align 8, !tbaa !5
  %585 = getelementptr inbounds %struct.Segment, ptr %584, i32 0, i32 3
  %586 = load ptr, ptr %585, align 8, !tbaa !29
  %587 = load ptr, ptr %16, align 8, !tbaa !5
  %588 = getelementptr inbounds %struct.Segment, ptr %587, i32 0, i32 4
  store ptr %586, ptr %588, align 8, !tbaa !27
  %589 = load ptr, ptr %17, align 8, !tbaa !5
  %590 = load ptr, ptr %16, align 8, !tbaa !5
  %591 = getelementptr inbounds %struct.Segment, ptr %590, i32 0, i32 3
  store ptr %589, ptr %591, align 8, !tbaa !29
  %592 = load i32, ptr %20, align 4, !tbaa !14
  %593 = add nsw i32 %592, -1
  store i32 %593, ptr %20, align 4, !tbaa !14
  %594 = load ptr, ptr %16, align 8, !tbaa !5
  %595 = getelementptr inbounds %struct.Segment, ptr %594, i32 0, i32 5
  store i32 %592, ptr %595, align 8, !tbaa !28
  %596 = load ptr, ptr %16, align 8, !tbaa !5
  %597 = getelementptr inbounds %struct.Segment, ptr %596, i32 0, i32 0
  %598 = load i8, ptr %597, align 8, !tbaa !18
  %599 = sext i8 %598 to i32
  %600 = xor i32 %599, 1
  %601 = trunc i32 %600 to i8
  store i8 %601, ptr %597, align 8, !tbaa !18
  br label %577, !llvm.loop !30

602:                                              ; preds = %577
  %603 = load ptr, ptr %13, align 8, !tbaa !5
  %604 = load ptr, ptr %14, align 8, !tbaa !5
  %605 = getelementptr inbounds %struct.Segment, ptr %604, i32 0, i32 4
  store ptr %603, ptr %605, align 8, !tbaa !27
  %606 = load ptr, ptr %14, align 8, !tbaa !5
  %607 = load ptr, ptr %13, align 8, !tbaa !5
  %608 = getelementptr inbounds %struct.Segment, ptr %607, i32 0, i32 3
  store ptr %606, ptr %608, align 8, !tbaa !29
  %609 = load ptr, ptr %15, align 8, !tbaa !5
  %610 = load ptr, ptr %12, align 8, !tbaa !5
  %611 = getelementptr inbounds %struct.Segment, ptr %610, i32 0, i32 3
  store ptr %609, ptr %611, align 8, !tbaa !29
  %612 = load ptr, ptr %12, align 8, !tbaa !5
  %613 = load ptr, ptr %15, align 8, !tbaa !5
  %614 = getelementptr inbounds %struct.Segment, ptr %613, i32 0, i32 4
  store ptr %612, ptr %614, align 8, !tbaa !27
  %615 = load ptr, ptr %6, align 8, !tbaa !5
  %616 = getelementptr inbounds %struct.Node, ptr %615, i32 0, i32 16
  %617 = load ptr, ptr %616, align 8, !tbaa !13
  %618 = load ptr, ptr %7, align 8, !tbaa !5
  %619 = icmp eq ptr %617, %618
  br i1 %619, label %620, label %627

620:                                              ; preds = %602
  %621 = load ptr, ptr %5, align 8, !tbaa !5
  %622 = load ptr, ptr %6, align 8, !tbaa !5
  %623 = getelementptr inbounds %struct.Node, ptr %622, i32 0, i32 16
  store ptr %621, ptr %623, align 8, !tbaa !13
  %624 = load i32, ptr %25, align 4, !tbaa !14
  %625 = load ptr, ptr %6, align 8, !tbaa !5
  %626 = getelementptr inbounds %struct.Node, ptr %625, i32 0, i32 8
  store i32 %624, ptr %626, align 8, !tbaa !21
  br label %634

627:                                              ; preds = %602
  %628 = load ptr, ptr %5, align 8, !tbaa !5
  %629 = load ptr, ptr %6, align 8, !tbaa !5
  %630 = getelementptr inbounds %struct.Node, ptr %629, i32 0, i32 15
  store ptr %628, ptr %630, align 8, !tbaa !9
  %631 = load i32, ptr %25, align 4, !tbaa !14
  %632 = load ptr, ptr %6, align 8, !tbaa !5
  %633 = getelementptr inbounds %struct.Node, ptr %632, i32 0, i32 7
  store i32 %631, ptr %633, align 4, !tbaa !22
  br label %634

634:                                              ; preds = %627, %620
  %635 = load ptr, ptr %5, align 8, !tbaa !5
  %636 = getelementptr inbounds %struct.Node, ptr %635, i32 0, i32 16
  %637 = load ptr, ptr %636, align 8, !tbaa !13
  %638 = load ptr, ptr %4, align 8, !tbaa !5
  %639 = icmp eq ptr %637, %638
  br i1 %639, label %640, label %647

640:                                              ; preds = %634
  %641 = load ptr, ptr %6, align 8, !tbaa !5
  %642 = load ptr, ptr %5, align 8, !tbaa !5
  %643 = getelementptr inbounds %struct.Node, ptr %642, i32 0, i32 16
  store ptr %641, ptr %643, align 8, !tbaa !13
  %644 = load i32, ptr %25, align 4, !tbaa !14
  %645 = load ptr, ptr %5, align 8, !tbaa !5
  %646 = getelementptr inbounds %struct.Node, ptr %645, i32 0, i32 8
  store i32 %644, ptr %646, align 8, !tbaa !21
  br label %654

647:                                              ; preds = %634
  %648 = load ptr, ptr %6, align 8, !tbaa !5
  %649 = load ptr, ptr %5, align 8, !tbaa !5
  %650 = getelementptr inbounds %struct.Node, ptr %649, i32 0, i32 15
  store ptr %648, ptr %650, align 8, !tbaa !9
  %651 = load i32, ptr %25, align 4, !tbaa !14
  %652 = load ptr, ptr %5, align 8, !tbaa !5
  %653 = getelementptr inbounds %struct.Node, ptr %652, i32 0, i32 7
  store i32 %651, ptr %653, align 4, !tbaa !22
  br label %654

654:                                              ; preds = %647, %640
  %655 = load ptr, ptr %4, align 8, !tbaa !5
  %656 = getelementptr inbounds %struct.Node, ptr %655, i32 0, i32 15
  %657 = load ptr, ptr %656, align 8, !tbaa !9
  %658 = load ptr, ptr %5, align 8, !tbaa !5
  %659 = icmp eq ptr %657, %658
  br i1 %659, label %660, label %667

660:                                              ; preds = %654
  %661 = load ptr, ptr %7, align 8, !tbaa !5
  %662 = load ptr, ptr %4, align 8, !tbaa !5
  %663 = getelementptr inbounds %struct.Node, ptr %662, i32 0, i32 15
  store ptr %661, ptr %663, align 8, !tbaa !9
  %664 = load i32, ptr %26, align 4, !tbaa !14
  %665 = load ptr, ptr %4, align 8, !tbaa !5
  %666 = getelementptr inbounds %struct.Node, ptr %665, i32 0, i32 7
  store i32 %664, ptr %666, align 4, !tbaa !22
  br label %674

667:                                              ; preds = %654
  %668 = load ptr, ptr %7, align 8, !tbaa !5
  %669 = load ptr, ptr %4, align 8, !tbaa !5
  %670 = getelementptr inbounds %struct.Node, ptr %669, i32 0, i32 16
  store ptr %668, ptr %670, align 8, !tbaa !13
  %671 = load i32, ptr %26, align 4, !tbaa !14
  %672 = load ptr, ptr %4, align 8, !tbaa !5
  %673 = getelementptr inbounds %struct.Node, ptr %672, i32 0, i32 8
  store i32 %671, ptr %673, align 8, !tbaa !21
  br label %674

674:                                              ; preds = %667, %660
  %675 = load ptr, ptr %7, align 8, !tbaa !5
  %676 = getelementptr inbounds %struct.Node, ptr %675, i32 0, i32 15
  %677 = load ptr, ptr %676, align 8, !tbaa !9
  %678 = load ptr, ptr %6, align 8, !tbaa !5
  %679 = icmp eq ptr %677, %678
  br i1 %679, label %680, label %687

680:                                              ; preds = %674
  %681 = load ptr, ptr %4, align 8, !tbaa !5
  %682 = load ptr, ptr %7, align 8, !tbaa !5
  %683 = getelementptr inbounds %struct.Node, ptr %682, i32 0, i32 15
  store ptr %681, ptr %683, align 8, !tbaa !9
  %684 = load i32, ptr %26, align 4, !tbaa !14
  %685 = load ptr, ptr %7, align 8, !tbaa !5
  %686 = getelementptr inbounds %struct.Node, ptr %685, i32 0, i32 7
  store i32 %684, ptr %686, align 4, !tbaa !22
  br label %694

687:                                              ; preds = %674
  %688 = load ptr, ptr %4, align 8, !tbaa !5
  %689 = load ptr, ptr %7, align 8, !tbaa !5
  %690 = getelementptr inbounds %struct.Node, ptr %689, i32 0, i32 16
  store ptr %688, ptr %690, align 8, !tbaa !13
  %691 = load i32, ptr %26, align 4, !tbaa !14
  %692 = load ptr, ptr %7, align 8, !tbaa !5
  %693 = getelementptr inbounds %struct.Node, ptr %692, i32 0, i32 8
  store i32 %691, ptr %693, align 8, !tbaa !21
  br label %694

694:                                              ; preds = %687, %680
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #5
  br label %695

695:                                              ; preds = %694, %511
  %696 = load ptr, ptr %4, align 8, !tbaa !5
  %697 = load ptr, ptr @SwapStack, align 8, !tbaa !5
  %698 = load i32, ptr @Swaps, align 4, !tbaa !14
  %699 = sext i32 %698 to i64
  %700 = getelementptr inbounds %struct.SwapRecord, ptr %697, i64 %699
  %701 = getelementptr inbounds %struct.SwapRecord, ptr %700, i32 0, i32 0
  store ptr %696, ptr %701, align 8, !tbaa !31
  %702 = load ptr, ptr %5, align 8, !tbaa !5
  %703 = load ptr, ptr @SwapStack, align 8, !tbaa !5
  %704 = load i32, ptr @Swaps, align 4, !tbaa !14
  %705 = sext i32 %704 to i64
  %706 = getelementptr inbounds %struct.SwapRecord, ptr %703, i64 %705
  %707 = getelementptr inbounds %struct.SwapRecord, ptr %706, i32 0, i32 1
  store ptr %702, ptr %707, align 8, !tbaa !33
  %708 = load ptr, ptr %6, align 8, !tbaa !5
  %709 = load ptr, ptr @SwapStack, align 8, !tbaa !5
  %710 = load i32, ptr @Swaps, align 4, !tbaa !14
  %711 = sext i32 %710 to i64
  %712 = getelementptr inbounds %struct.SwapRecord, ptr %709, i64 %711
  %713 = getelementptr inbounds %struct.SwapRecord, ptr %712, i32 0, i32 2
  store ptr %708, ptr %713, align 8, !tbaa !34
  %714 = load ptr, ptr %7, align 8, !tbaa !5
  %715 = load ptr, ptr @SwapStack, align 8, !tbaa !5
  %716 = load i32, ptr @Swaps, align 4, !tbaa !14
  %717 = sext i32 %716 to i64
  %718 = getelementptr inbounds %struct.SwapRecord, ptr %715, i64 %717
  %719 = getelementptr inbounds %struct.SwapRecord, ptr %718, i32 0, i32 3
  store ptr %714, ptr %719, align 8, !tbaa !35
  %720 = load i32, ptr @Swaps, align 4, !tbaa !14
  %721 = add nsw i32 %720, 1
  store i32 %721, ptr @Swaps, align 4, !tbaa !14
  %722 = load ptr, ptr @Rand, align 8, !tbaa !5
  %723 = load ptr, ptr %4, align 8, !tbaa !5
  %724 = getelementptr inbounds %struct.Node, ptr %723, i32 0, i32 0
  %725 = load i32, ptr %724, align 8, !tbaa !36
  %726 = sext i32 %725 to i64
  %727 = getelementptr inbounds i32, ptr %722, i64 %726
  %728 = load i32, ptr %727, align 4, !tbaa !14
  %729 = load ptr, ptr @Rand, align 8, !tbaa !5
  %730 = load ptr, ptr %5, align 8, !tbaa !5
  %731 = getelementptr inbounds %struct.Node, ptr %730, i32 0, i32 0
  %732 = load i32, ptr %731, align 8, !tbaa !36
  %733 = sext i32 %732 to i64
  %734 = getelementptr inbounds i32, ptr %729, i64 %733
  %735 = load i32, ptr %734, align 4, !tbaa !14
  %736 = mul i32 %728, %735
  %737 = load ptr, ptr @Rand, align 8, !tbaa !5
  %738 = load ptr, ptr %6, align 8, !tbaa !5
  %739 = getelementptr inbounds %struct.Node, ptr %738, i32 0, i32 0
  %740 = load i32, ptr %739, align 8, !tbaa !36
  %741 = sext i32 %740 to i64
  %742 = getelementptr inbounds i32, ptr %737, i64 %741
  %743 = load i32, ptr %742, align 4, !tbaa !14
  %744 = load ptr, ptr @Rand, align 8, !tbaa !5
  %745 = load ptr, ptr %7, align 8, !tbaa !5
  %746 = getelementptr inbounds %struct.Node, ptr %745, i32 0, i32 0
  %747 = load i32, ptr %746, align 8, !tbaa !36
  %748 = sext i32 %747 to i64
  %749 = getelementptr inbounds i32, ptr %744, i64 %748
  %750 = load i32, ptr %749, align 4, !tbaa !14
  %751 = mul i32 %743, %750
  %752 = xor i32 %736, %751
  %753 = load ptr, ptr @Rand, align 8, !tbaa !5
  %754 = load ptr, ptr %5, align 8, !tbaa !5
  %755 = getelementptr inbounds %struct.Node, ptr %754, i32 0, i32 0
  %756 = load i32, ptr %755, align 8, !tbaa !36
  %757 = sext i32 %756 to i64
  %758 = getelementptr inbounds i32, ptr %753, i64 %757
  %759 = load i32, ptr %758, align 4, !tbaa !14
  %760 = load ptr, ptr @Rand, align 8, !tbaa !5
  %761 = load ptr, ptr %6, align 8, !tbaa !5
  %762 = getelementptr inbounds %struct.Node, ptr %761, i32 0, i32 0
  %763 = load i32, ptr %762, align 8, !tbaa !36
  %764 = sext i32 %763 to i64
  %765 = getelementptr inbounds i32, ptr %760, i64 %764
  %766 = load i32, ptr %765, align 4, !tbaa !14
  %767 = mul i32 %759, %766
  %768 = xor i32 %752, %767
  %769 = load ptr, ptr @Rand, align 8, !tbaa !5
  %770 = load ptr, ptr %7, align 8, !tbaa !5
  %771 = getelementptr inbounds %struct.Node, ptr %770, i32 0, i32 0
  %772 = load i32, ptr %771, align 8, !tbaa !36
  %773 = sext i32 %772 to i64
  %774 = getelementptr inbounds i32, ptr %769, i64 %773
  %775 = load i32, ptr %774, align 4, !tbaa !14
  %776 = load ptr, ptr @Rand, align 8, !tbaa !5
  %777 = load ptr, ptr %4, align 8, !tbaa !5
  %778 = getelementptr inbounds %struct.Node, ptr %777, i32 0, i32 0
  %779 = load i32, ptr %778, align 8, !tbaa !36
  %780 = sext i32 %779 to i64
  %781 = getelementptr inbounds i32, ptr %776, i64 %780
  %782 = load i32, ptr %781, align 4, !tbaa !14
  %783 = mul i32 %775, %782
  %784 = xor i32 %768, %783
  %785 = load i32, ptr @Hash, align 4, !tbaa !14
  %786 = xor i32 %785, %784
  store i32 %786, ptr @Hash, align 4, !tbaa !14
  store i32 0, ptr %22, align 4
  br label %787

787:                                              ; preds = %695, %56, %52
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #5
  %788 = load i32, ptr %22, align 4
  switch i32 %788, label %790 [
    i32 0, label %789
    i32 1, label %789
  ]

789:                                              ; preds = %787, %787
  ret void

790:                                              ; preds = %787
  unreachable
}

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

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) #2

declare void @Flip(ptr noundef, ptr noundef, ptr noundef) #3

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

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

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


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

%struct.SwapRecord = type { ptr, ptr, ptr, ptr }

@.str = external hidden unnamed_addr constant [32 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [68 x i8], align 1
@__PRETTY_FUNCTION__.Flip_SL = external hidden unnamed_addr constant [37 x i8], align 1
@Groups = external dso_local local_unnamed_addr global i32, align 4
@Reversed = external dso_local local_unnamed_addr global i16, align 2
@GroupSize = external dso_local local_unnamed_addr global i32, align 4
@C = external dso_local local_unnamed_addr global ptr, align 8
@SwapStack = external dso_local local_unnamed_addr global ptr, align 8
@Swaps = external dso_local local_unnamed_addr global i32, align 4
@Rand = external dso_local local_unnamed_addr global ptr, align 8
@Hash = external dso_local local_unnamed_addr global i32, align 4

; Function Attrs: nounwind uwtable
define dso_local void @Flip_SL(ptr noundef %0, ptr noundef %1, ptr noundef %2) local_unnamed_addr #0 {
  %4 = getelementptr inbounds i8, ptr %0, i64 64
  %5 = load ptr, ptr %4, align 8, !tbaa !5
  %6 = icmp eq ptr %5, %1
  br i1 %6, label %12, label %7

7:                                                ; preds = %3
  %8 = getelementptr inbounds i8, ptr %0, i64 72
  %9 = load ptr, ptr %8, align 8, !tbaa !12
  %10 = icmp eq ptr %9, %1
  br i1 %10, label %12, label %11

11:                                               ; preds = %7
  tail call void @__assert_fail(ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 51, ptr noundef nonnull @__PRETTY_FUNCTION__.Flip_SL) #4
  unreachable

12:                                               ; preds = %3, %7
  %13 = getelementptr inbounds i8, ptr %1, i64 64
  %14 = load ptr, ptr %13, align 8, !tbaa !5
  %15 = icmp eq ptr %14, %2
  br i1 %15, label %298, label %16

16:                                               ; preds = %12
  %17 = getelementptr inbounds i8, ptr %1, i64 72
  %18 = load ptr, ptr %17, align 8, !tbaa !12
  %19 = icmp eq ptr %18, %2
  br i1 %19, label %298, label %20

20:                                               ; preds = %16
  %21 = load i32, ptr @Groups, align 4, !tbaa !13
  %22 = icmp eq i32 %21, 1
  br i1 %22, label %23, label %24

23:                                               ; preds = %20
  tail call void @Flip(ptr noundef nonnull %0, ptr noundef nonnull %1, ptr noundef %2) #5
  br label %298

24:                                               ; preds = %20
  %25 = load i16, ptr @Reversed, align 2, !tbaa !14
  %26 = getelementptr inbounds i8, ptr %0, i64 304
  %27 = load ptr, ptr %26, align 8, !tbaa !16
  %28 = load i8, ptr %27, align 8, !tbaa !17
  %29 = sext i8 %28 to i16
  %30 = icmp eq i16 %25, %29
  %31 = getelementptr inbounds i8, ptr %0, i64 72
  %.in = select i1 %30, ptr %31, ptr %4
  %32 = load ptr, ptr %.in, align 8, !tbaa !19
  %33 = icmp eq ptr %32, %1
  %34 = getelementptr inbounds i8, ptr %2, i64 304
  %35 = load ptr, ptr %34, align 8, !tbaa !16
  %36 = load i8, ptr %35, align 8, !tbaa !17
  %37 = sext i8 %36 to i16
  %38 = icmp eq i16 %25, %37
  %39 = xor i1 %38, %33
  %.sink = select i1 %39, i64 72, i64 64
  %40 = getelementptr inbounds i8, ptr %2, i64 %.sink
  %41 = load ptr, ptr %40, align 8, !tbaa !19
  %42 = getelementptr inbounds i8, ptr %1, i64 304
  %43 = load ptr, ptr %42, align 8, !tbaa !16
  %44 = getelementptr inbounds i8, ptr %2, i64 304
  %45 = getelementptr inbounds i8, ptr %41, i64 304
  %46 = load ptr, ptr %45, align 8, !tbaa !16
  %.not = icmp eq ptr %27, %35
  %.not333 = icmp eq ptr %43, %46
  %or.cond = select i1 %.not, i1 true, i1 %.not333
  br i1 %or.cond, label %55, label %47

47:                                               ; preds = %24
  %48 = icmp eq ptr %27, %43
  br i1 %48, label %49, label %52

49:                                               ; preds = %47
  tail call void @SplitSegment(ptr noundef nonnull %0, ptr noundef nonnull %1)
  %50 = load ptr, ptr %26, align 8, !tbaa !16
  %51 = load ptr, ptr %42, align 8, !tbaa !16
  br label %52

52:                                               ; preds = %49, %47
  %.0310 = phi ptr [ %50, %49 ], [ %27, %47 ]
  %.0306 = phi ptr [ %51, %49 ], [ %43, %47 ]
  %53 = icmp ne ptr %35, %46
  %.not334 = icmp eq ptr %.0310, %35
  %or.cond340 = select i1 %53, i1 true, i1 %.not334
  %.not335 = icmp eq ptr %.0306, %46
  %or.cond341 = select i1 %or.cond340, i1 true, i1 %.not335
  br i1 %or.cond341, label %95, label %54

54:                                               ; preds = %52
  tail call void @SplitSegment(ptr noundef nonnull %2, ptr noundef nonnull %41)
  br label %.sink.split

55:                                               ; preds = %24
  br i1 %.not, label %56, label %68

56:                                               ; preds = %55
  %57 = getelementptr inbounds i8, ptr %2, i64 8
  %58 = load i32, ptr %57, align 8, !tbaa !20
  %59 = getelementptr inbounds i8, ptr %0, i64 8
  %60 = load i32, ptr %59, align 8, !tbaa !20
  %61 = sub nsw i32 %58, %60
  %62 = tail call i32 @llvm.abs.i32(i32 %61, i1 true)
  %63 = uitofp nneg i32 %62 to double
  %64 = load i32, ptr @GroupSize, align 4, !tbaa !13
  %65 = sitofp i32 %64 to double
  %66 = fmul double %65, 7.500000e-01
  %67 = fcmp olt double %66, %63
  br i1 %67, label %81, label %68

68:                                               ; preds = %56, %55
  br i1 %.not333, label %69, label %95

69:                                               ; preds = %68
  %70 = getelementptr inbounds i8, ptr %41, i64 8
  %71 = load i32, ptr %70, align 8, !tbaa !20
  %72 = getelementptr inbounds i8, ptr %1, i64 8
  %73 = load i32, ptr %72, align 8, !tbaa !20
  %74 = sub nsw i32 %71, %73
  %75 = tail call i32 @llvm.abs.i32(i32 %74, i1 true)
  %76 = uitofp nneg i32 %75 to double
  %77 = load i32, ptr @GroupSize, align 4, !tbaa !13
  %78 = sitofp i32 %77 to double
  %79 = fmul double %78, 7.500000e-01
  %80 = fcmp olt double %79, %76
  br i1 %80, label %81, label %95

81:                                               ; preds = %69, %56
  %82 = icmp eq ptr %27, %43
  br i1 %82, label %83, label %88

83:                                               ; preds = %81
  tail call void @SplitSegment(ptr noundef nonnull %0, ptr noundef nonnull %1)
  %84 = load ptr, ptr %26, align 8, !tbaa !16
  %85 = load ptr, ptr %42, align 8, !tbaa !16
  %86 = load ptr, ptr %44, align 8, !tbaa !16
  %87 = load ptr, ptr %45, align 8, !tbaa !16
  br label %88

88:                                               ; preds = %83, %81
  %.1311 = phi ptr [ %84, %83 ], [ %27, %81 ]
  %.1307 = phi ptr [ %85, %83 ], [ %43, %81 ]
  %.0302 = phi ptr [ %86, %83 ], [ %35, %81 ]
  %.0299 = phi ptr [ %87, %83 ], [ %46, %81 ]
  %89 = icmp eq ptr %.0302, %.0299
  br i1 %89, label %90, label %95

90:                                               ; preds = %88
  tail call void @SplitSegment(ptr noundef nonnull %2, ptr noundef nonnull %41)
  %91 = load ptr, ptr %26, align 8, !tbaa !16
  %92 = load ptr, ptr %42, align 8, !tbaa !16
  br label %.sink.split

.sink.split:                                      ; preds = %54, %90
  %.2312.ph = phi ptr [ %91, %90 ], [ %.0310, %54 ]
  %.2308.ph = phi ptr [ %92, %90 ], [ %.0306, %54 ]
  %93 = load ptr, ptr %44, align 8, !tbaa !16
  %94 = load ptr, ptr %45, align 8, !tbaa !16
  br label %95

95:                                               ; preds = %.sink.split, %68, %69, %88, %52
  %.2312 = phi ptr [ %.0310, %52 ], [ %.1311, %88 ], [ %27, %69 ], [ %27, %68 ], [ %.2312.ph, %.sink.split ]
  %.2308 = phi ptr [ %.0306, %52 ], [ %.1307, %88 ], [ %43, %69 ], [ %43, %68 ], [ %.2308.ph, %.sink.split ]
  %.1303 = phi ptr [ %35, %52 ], [ %.0302, %88 ], [ %35, %69 ], [ %35, %68 ], [ %93, %.sink.split ]
  %.1300 = phi ptr [ %46, %52 ], [ %.0299, %88 ], [ %46, %69 ], [ %46, %68 ], [ %94, %.sink.split ]
  %96 = icmp eq ptr %.2312, %.1303
  br i1 %96, label %97, label %117

97:                                               ; preds = %95
  %98 = getelementptr inbounds i8, ptr %0, i64 8
  %99 = load i32, ptr %98, align 8, !tbaa !20
  %100 = getelementptr inbounds i8, ptr %2, i64 8
  %101 = load i32, ptr %100, align 8, !tbaa !20
  %102 = icmp slt i32 %99, %101
  %103 = icmp eq ptr %.2312, %.2308
  %104 = icmp eq ptr %.2312, %.1300
  %or.cond342 = select i1 %103, i1 %104, i1 false
  br i1 %102, label %105, label %111

105:                                              ; preds = %97
  br i1 %or.cond342, label %106, label %110

106:                                              ; preds = %105
  %107 = getelementptr inbounds i8, ptr %1, i64 8
  %108 = load i32, ptr %107, align 8, !tbaa !20
  %109 = icmp sgt i32 %108, %99
  br i1 %109, label %.lr.ph363.preheader, label %110

110:                                              ; preds = %106, %105
  br label %.lr.ph363.preheader

111:                                              ; preds = %97
  br i1 %or.cond342, label %112, label %116

112:                                              ; preds = %111
  %113 = getelementptr inbounds i8, ptr %1, i64 8
  %114 = load i32, ptr %113, align 8, !tbaa !20
  %115 = icmp slt i32 %114, %99
  br i1 %115, label %.lr.ph363.preheader, label %116

116:                                              ; preds = %112, %111
  br label %.lr.ph363.preheader

117:                                              ; preds = %95
  %118 = icmp eq ptr %.2308, %.1300
  br i1 %118, label %119, label %190

119:                                              ; preds = %117
  %120 = getelementptr inbounds i8, ptr %41, i64 8
  %121 = load i32, ptr %120, align 8, !tbaa !20
  %122 = getelementptr inbounds i8, ptr %1, i64 8
  %123 = load i32, ptr %122, align 8, !tbaa !20
  %124 = icmp slt i32 %121, %123
  %. = select i1 %124, ptr %0, ptr %2
  %.344 = select i1 %124, ptr %1, ptr %41
  %.345 = select i1 %124, ptr %41, ptr %1
  %.346 = select i1 %124, ptr %2, ptr %0
  br label %.lr.ph363.preheader

.lr.ph363.preheader:                              ; preds = %119, %112, %106, %116, %110
  %.0316.ph = phi ptr [ %., %119 ], [ %0, %112 ], [ %2, %106 ], [ %1, %116 ], [ %41, %110 ]
  %.0315.ph = phi ptr [ %.344, %119 ], [ %1, %112 ], [ %41, %106 ], [ %0, %116 ], [ %2, %110 ]
  %.0297.ph = phi ptr [ %.345, %119 ], [ %41, %112 ], [ %1, %106 ], [ %2, %116 ], [ %0, %110 ]
  %.0292.ph = phi ptr [ %.346, %119 ], [ %2, %112 ], [ %0, %106 ], [ %41, %116 ], [ %1, %110 ]
  %125 = load ptr, ptr @C, align 8, !tbaa !19
  %126 = tail call i32 %125(ptr noundef nonnull %.0297.ph, ptr noundef nonnull %.0316.ph) #5
  %127 = load ptr, ptr @C, align 8, !tbaa !19
  %128 = tail call i32 %127(ptr noundef nonnull %.0315.ph, ptr noundef nonnull %.0292.ph) #5
  %129 = getelementptr inbounds i8, ptr %.0315.ph, i64 8
  %130 = load i32, ptr %129, align 8, !tbaa !20
  %131 = getelementptr inbounds i8, ptr %.0315.ph, i64 72
  store ptr null, ptr %131, align 8, !tbaa !12
  br label %.lr.ph363

.lr.ph363:                                        ; preds = %.lr.ph363.preheader, %.lr.ph363
  %.0293361 = phi i32 [ %136, %.lr.ph363 ], [ %130, %.lr.ph363.preheader ]
  %.0296360 = phi ptr [ %133, %.lr.ph363 ], [ %.0297.ph, %.lr.ph363.preheader ]
  %132 = getelementptr inbounds i8, ptr %.0296360, i64 72
  %133 = load ptr, ptr %132, align 8, !tbaa !12
  %134 = getelementptr inbounds i8, ptr %.0296360, i64 64
  %135 = load ptr, ptr %134, align 8, !tbaa !5
  store ptr %135, ptr %132, align 8, !tbaa !12
  store ptr %133, ptr %134, align 8, !tbaa !5
  %136 = add nsw i32 %.0293361, -1
  %137 = getelementptr inbounds i8, ptr %.0296360, i64 8
  store i32 %.0293361, ptr %137, align 8, !tbaa !20
  %138 = getelementptr inbounds i8, ptr %.0296360, i64 28
  %139 = load <2 x i32>, ptr %138, align 4, !tbaa !13
  %140 = shufflevector <2 x i32> %139, <2 x i32> poison, <2 x i32> <i32 1, i32 0>
  store <2 x i32> %140, ptr %138, align 4, !tbaa !13
  %.not339 = icmp eq ptr %133, null
  br i1 %.not339, label %._crit_edge364, label %.lr.ph363, !llvm.loop !21

._crit_edge364:                                   ; preds = %.lr.ph363
  %141 = getelementptr inbounds i8, ptr %.0315.ph, i64 64
  store ptr %.0292.ph, ptr %141, align 8, !tbaa !5
  %142 = getelementptr inbounds i8, ptr %.0297.ph, i64 72
  store ptr %.0316.ph, ptr %142, align 8, !tbaa !12
  %143 = getelementptr inbounds i8, ptr %.0315.ph, i64 28
  store i32 %128, ptr %143, align 4, !tbaa !23
  %144 = getelementptr inbounds i8, ptr %.0297.ph, i64 32
  store i32 %126, ptr %144, align 8, !tbaa !24
  %145 = getelementptr inbounds i8, ptr %.0292.ph, i64 72
  %146 = load ptr, ptr %145, align 8, !tbaa !12
  %147 = icmp eq ptr %146, %.0297.ph
  br i1 %147, label %148, label %150

148:                                              ; preds = %._crit_edge364
  store ptr %.0315.ph, ptr %145, align 8, !tbaa !12
  %149 = getelementptr inbounds i8, ptr %.0292.ph, i64 32
  store i32 %128, ptr %149, align 8, !tbaa !24
  br label %153

150:                                              ; preds = %._crit_edge364
  %151 = getelementptr inbounds i8, ptr %.0292.ph, i64 64
  store ptr %.0315.ph, ptr %151, align 8, !tbaa !5
  %152 = getelementptr inbounds i8, ptr %.0292.ph, i64 28
  store i32 %128, ptr %152, align 4, !tbaa !23
  br label %153

153:                                              ; preds = %150, %148
  %154 = getelementptr inbounds i8, ptr %.0316.ph, i64 64
  %155 = load ptr, ptr %154, align 8, !tbaa !5
  %156 = icmp eq ptr %155, %.0315.ph
  br i1 %156, label %157, label %160

157:                                              ; preds = %153
  store ptr %.0297.ph, ptr %154, align 8, !tbaa !5
  %158 = load i32, ptr %144, align 8, !tbaa !24
  %159 = getelementptr inbounds i8, ptr %.0316.ph, i64 28
  store i32 %158, ptr %159, align 4, !tbaa !23
  br label %164

160:                                              ; preds = %153
  %161 = getelementptr inbounds i8, ptr %.0316.ph, i64 72
  store ptr %.0297.ph, ptr %161, align 8, !tbaa !12
  %162 = load i32, ptr %144, align 8, !tbaa !24
  %163 = getelementptr inbounds i8, ptr %.0316.ph, i64 32
  store i32 %162, ptr %163, align 8, !tbaa !24
  br label %164

164:                                              ; preds = %160, %157
  %165 = getelementptr inbounds i8, ptr %.0297.ph, i64 304
  %166 = load ptr, ptr %165, align 8, !tbaa !16
  %167 = getelementptr inbounds i8, ptr %166, i64 8
  %168 = load ptr, ptr %167, align 8, !tbaa !25
  %169 = icmp eq ptr %168, %.0297.ph
  br i1 %169, label %170, label %171

170:                                              ; preds = %164
  store ptr %.0315.ph, ptr %167, align 8, !tbaa !25
  br label %178

171:                                              ; preds = %164
  %172 = getelementptr inbounds i8, ptr %.0315.ph, i64 304
  %173 = load ptr, ptr %172, align 8, !tbaa !16
  %174 = getelementptr inbounds i8, ptr %173, i64 8
  %175 = load ptr, ptr %174, align 8, !tbaa !25
  %176 = icmp eq ptr %175, %.0315.ph
  br i1 %176, label %177, label %178

177:                                              ; preds = %171
  store ptr %.0297.ph, ptr %174, align 8, !tbaa !25
  br label %178

178:                                              ; preds = %171, %177, %170
  %179 = getelementptr inbounds i8, ptr %166, i64 16
  %180 = load ptr, ptr %179, align 8, !tbaa !26
  %181 = icmp eq ptr %180, %.0297.ph
  br i1 %181, label %182, label %183

182:                                              ; preds = %178
  store ptr %.0315.ph, ptr %179, align 8, !tbaa !26
  br label %260

183:                                              ; preds = %178
  %184 = getelementptr inbounds i8, ptr %.0315.ph, i64 304
  %185 = load ptr, ptr %184, align 8, !tbaa !16
  %186 = getelementptr inbounds i8, ptr %185, i64 16
  %187 = load ptr, ptr %186, align 8, !tbaa !26
  %188 = icmp eq ptr %187, %.0315.ph
  br i1 %188, label %189, label %260

189:                                              ; preds = %183
  store ptr %.0297.ph, ptr %186, align 8, !tbaa !26
  br label %260

190:                                              ; preds = %117
  %191 = getelementptr inbounds i8, ptr %.2312, i64 32
  %192 = load ptr, ptr %191, align 8, !tbaa !27
  %.not337 = icmp eq ptr %192, %.2308
  br i1 %.not337, label %194, label %193

193:                                              ; preds = %190
  br label %194

194:                                              ; preds = %193, %190
  %.3313 = phi ptr [ %.2308, %193 ], [ %.2312, %190 ]
  %.3309 = phi ptr [ %.2312, %193 ], [ %.2308, %190 ]
  %.2304 = phi ptr [ %.1300, %193 ], [ %.1303, %190 ]
  %.2301 = phi ptr [ %.1303, %193 ], [ %.1300, %190 ]
  %.0289 = phi ptr [ %2, %193 ], [ %41, %190 ]
  %.0286 = phi ptr [ %41, %193 ], [ %2, %190 ]
  %.0283 = phi ptr [ %0, %193 ], [ %1, %190 ]
  %.0 = phi ptr [ %1, %193 ], [ %0, %190 ]
  %195 = getelementptr inbounds i8, ptr %.3309, i64 40
  %196 = load i32, ptr %195, align 8, !tbaa !28
  %197 = getelementptr inbounds i8, ptr %.2304, i64 40
  %198 = load i32, ptr %197, align 8, !tbaa !28
  %199 = sub nsw i32 %196, %198
  %200 = icmp slt i32 %199, 0
  %201 = load i32, ptr @Groups, align 4
  %202 = select i1 %200, i32 %201, i32 0
  %.1294 = add nsw i32 %202, %199
  %203 = shl nsw i32 %.1294, 1
  %204 = icmp sgt i32 %203, %201
  br i1 %204, label %205, label %.lr.ph.preheader

205:                                              ; preds = %194
  br label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %194, %205
  %.4314 = phi ptr [ %.2301, %205 ], [ %.3313, %194 ]
  %.4 = phi ptr [ %.2304, %205 ], [ %.3309, %194 ]
  %.3305 = phi ptr [ %.3309, %205 ], [ %.2304, %194 ]
  %.3 = phi ptr [ %.3313, %205 ], [ %.2301, %194 ]
  %.1290 = phi ptr [ %.0, %205 ], [ %.0289, %194 ]
  %.1287 = phi ptr [ %.0283, %205 ], [ %.0286, %194 ]
  %.1284 = phi ptr [ %.0286, %205 ], [ %.0283, %194 ]
  %.1 = phi ptr [ %.0289, %205 ], [ %.0, %194 ]
  %206 = load ptr, ptr @C, align 8, !tbaa !19
  %207 = tail call i32 %206(ptr noundef nonnull %.1284, ptr noundef nonnull %.1287) #5
  %208 = load ptr, ptr @C, align 8, !tbaa !19
  %209 = tail call i32 %208(ptr noundef nonnull %.1290, ptr noundef nonnull %.1) #5
  %210 = getelementptr inbounds i8, ptr %.4314, i64 40
  %211 = load i32, ptr %210, align 8, !tbaa !28
  %212 = getelementptr inbounds i8, ptr %.4314, i64 32
  store ptr null, ptr %212, align 8, !tbaa !27
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.preheader, %.lr.ph
  %.2295358 = phi i32 [ %217, %.lr.ph ], [ %211, %.lr.ph.preheader ]
  %.0298357 = phi ptr [ %214, %.lr.ph ], [ %.3305, %.lr.ph.preheader ]
  %213 = getelementptr inbounds i8, ptr %.0298357, i64 32
  %214 = load ptr, ptr %213, align 8, !tbaa !27
  %215 = getelementptr inbounds i8, ptr %.0298357, i64 24
  %216 = load ptr, ptr %215, align 8, !tbaa !29
  store ptr %216, ptr %213, align 8, !tbaa !27
  store ptr %214, ptr %215, align 8, !tbaa !29
  %217 = add nsw i32 %.2295358, -1
  %218 = getelementptr inbounds i8, ptr %.0298357, i64 40
  store i32 %.2295358, ptr %218, align 8, !tbaa !28
  %219 = load i8, ptr %.0298357, align 8, !tbaa !17
  %220 = xor i8 %219, 1
  store i8 %220, ptr %.0298357, align 8, !tbaa !17
  %.not338 = icmp eq ptr %214, null
  br i1 %.not338, label %._crit_edge, label %.lr.ph, !llvm.loop !30

._crit_edge:                                      ; preds = %.lr.ph
  %221 = getelementptr inbounds i8, ptr %.3305, i64 32
  store ptr %.4, ptr %221, align 8, !tbaa !27
  %222 = getelementptr inbounds i8, ptr %.4, i64 24
  store ptr %.3305, ptr %222, align 8, !tbaa !29
  %223 = getelementptr inbounds i8, ptr %.4314, i64 24
  store ptr %.3, ptr %223, align 8, !tbaa !29
  %224 = getelementptr inbounds i8, ptr %.3, i64 32
  store ptr %.4314, ptr %224, align 8, !tbaa !27
  %225 = getelementptr inbounds i8, ptr %.1287, i64 72
  %226 = load ptr, ptr %225, align 8, !tbaa !12
  %227 = icmp eq ptr %226, %.1290
  br i1 %227, label %228, label %230

228:                                              ; preds = %._crit_edge
  store ptr %.1284, ptr %225, align 8, !tbaa !12
  %229 = getelementptr inbounds i8, ptr %.1287, i64 32
  store i32 %207, ptr %229, align 8, !tbaa !24
  br label %233

230:                                              ; preds = %._crit_edge
  %231 = getelementptr inbounds i8, ptr %.1287, i64 64
  store ptr %.1284, ptr %231, align 8, !tbaa !5
  %232 = getelementptr inbounds i8, ptr %.1287, i64 28
  store i32 %207, ptr %232, align 4, !tbaa !23
  br label %233

233:                                              ; preds = %230, %228
  %234 = getelementptr inbounds i8, ptr %.1284, i64 72
  %235 = load ptr, ptr %234, align 8, !tbaa !12
  %236 = icmp eq ptr %235, %.1
  br i1 %236, label %237, label %239

237:                                              ; preds = %233
  store ptr %.1287, ptr %234, align 8, !tbaa !12
  %238 = getelementptr inbounds i8, ptr %.1284, i64 32
  store i32 %207, ptr %238, align 8, !tbaa !24
  br label %242

239:                                              ; preds = %233
  %240 = getelementptr inbounds i8, ptr %.1284, i64 64
  store ptr %.1287, ptr %240, align 8, !tbaa !5
  %241 = getelementptr inbounds i8, ptr %.1284, i64 28
  store i32 %207, ptr %241, align 4, !tbaa !23
  br label %242

242:                                              ; preds = %239, %237
  %243 = getelementptr inbounds i8, ptr %.1, i64 64
  %244 = load ptr, ptr %243, align 8, !tbaa !5
  %245 = icmp eq ptr %244, %.1284
  br i1 %245, label %246, label %248

246:                                              ; preds = %242
  store ptr %.1290, ptr %243, align 8, !tbaa !5
  %247 = getelementptr inbounds i8, ptr %.1, i64 28
  store i32 %209, ptr %247, align 4, !tbaa !23
  br label %251

248:                                              ; preds = %242
  %249 = getelementptr inbounds i8, ptr %.1, i64 72
  store ptr %.1290, ptr %249, align 8, !tbaa !12
  %250 = getelementptr inbounds i8, ptr %.1, i64 32
  store i32 %209, ptr %250, align 8, !tbaa !24
  br label %251

251:                                              ; preds = %248, %246
  %252 = getelementptr inbounds i8, ptr %.1290, i64 64
  %253 = load ptr, ptr %252, align 8, !tbaa !5
  %254 = icmp eq ptr %253, %.1287
  br i1 %254, label %255, label %257

255:                                              ; preds = %251
  store ptr %.1, ptr %252, align 8, !tbaa !5
  %256 = getelementptr inbounds i8, ptr %.1290, i64 28
  store i32 %209, ptr %256, align 4, !tbaa !23
  br label %260

257:                                              ; preds = %251
  %258 = getelementptr inbounds i8, ptr %.1290, i64 72
  store ptr %.1, ptr %258, align 8, !tbaa !12
  %259 = getelementptr inbounds i8, ptr %.1290, i64 32
  store i32 %209, ptr %259, align 8, !tbaa !24
  br label %260

260:                                              ; preds = %255, %257, %182, %189, %183
  %.2291 = phi ptr [ %41, %183 ], [ %41, %189 ], [ %41, %182 ], [ %.1290, %257 ], [ %.1290, %255 ]
  %.2288 = phi ptr [ %2, %183 ], [ %2, %189 ], [ %2, %182 ], [ %.1287, %257 ], [ %.1287, %255 ]
  %.2285 = phi ptr [ %1, %183 ], [ %1, %189 ], [ %1, %182 ], [ %.1284, %257 ], [ %.1284, %255 ]
  %.2 = phi ptr [ %0, %183 ], [ %0, %189 ], [ %0, %182 ], [ %.1, %257 ], [ %.1, %255 ]
  %261 = load ptr, ptr @SwapStack, align 8, !tbaa !19
  %262 = load i32, ptr @Swaps, align 4, !tbaa !13
  %263 = sext i32 %262 to i64
  %264 = getelementptr inbounds %struct.SwapRecord, ptr %261, i64 %263
  store ptr %.2, ptr %264, align 8, !tbaa !31
  %265 = load ptr, ptr @SwapStack, align 8, !tbaa !19
  %266 = getelementptr inbounds %struct.SwapRecord, ptr %265, i64 %263, i32 1
  store ptr %.2285, ptr %266, align 8, !tbaa !33
  %267 = load ptr, ptr @SwapStack, align 8, !tbaa !19
  %268 = getelementptr inbounds %struct.SwapRecord, ptr %267, i64 %263, i32 2
  store ptr %.2288, ptr %268, align 8, !tbaa !34
  %269 = load ptr, ptr @SwapStack, align 8, !tbaa !19
  %270 = getelementptr inbounds %struct.SwapRecord, ptr %269, i64 %263, i32 3
  store ptr %.2291, ptr %270, align 8, !tbaa !35
  %271 = add nsw i32 %262, 1
  store i32 %271, ptr @Swaps, align 4, !tbaa !13
  %272 = load ptr, ptr @Rand, align 8, !tbaa !19
  %273 = load i32, ptr %.2, align 8, !tbaa !36
  %274 = sext i32 %273 to i64
  %275 = getelementptr inbounds i32, ptr %272, i64 %274
  %276 = load i32, ptr %275, align 4, !tbaa !13
  %277 = load i32, ptr %.2285, align 8, !tbaa !36
  %278 = sext i32 %277 to i64
  %279 = getelementptr inbounds i32, ptr %272, i64 %278
  %280 = load i32, ptr %279, align 4, !tbaa !13
  %281 = mul i32 %280, %276
  %282 = load i32, ptr %.2288, align 8, !tbaa !36
  %283 = sext i32 %282 to i64
  %284 = getelementptr inbounds i32, ptr %272, i64 %283
  %285 = load i32, ptr %284, align 4, !tbaa !13
  %286 = load i32, ptr %.2291, align 8, !tbaa !36
  %287 = sext i32 %286 to i64
  %288 = getelementptr inbounds i32, ptr %272, i64 %287
  %289 = load i32, ptr %288, align 4, !tbaa !13
  %290 = mul i32 %289, %285
  %291 = mul i32 %285, %280
  %292 = mul i32 %289, %276
  %293 = load i32, ptr @Hash, align 4, !tbaa !13
  %294 = xor i32 %291, %281
  %295 = xor i32 %294, %290
  %296 = xor i32 %295, %292
  %297 = xor i32 %296, %293
  store i32 %297, ptr @Hash, align 4, !tbaa !13
  br label %298

298:                                              ; preds = %12, %16, %260, %23
  ret void
}

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #1

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

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

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

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 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #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 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { noreturn nounwind }
attributes #5 = { nounwind }

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

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


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LoopRotatePass,LoopSimplifyPass,ReassociatePass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass