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

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

@Reversed = external dso_local global i16, align 2

; Function Attrs: nounwind uwtable
define dso_local i32 @Between_SSL(ptr noundef %0, ptr noundef %1, ptr noundef %2) #0 {
  %4 = alloca i32, align 4
  %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 i32, align 4
  store ptr %0, ptr %5, align 8, !tbaa !5
  store ptr %1, ptr %6, align 8, !tbaa !5
  store ptr %2, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #2
  %15 = load ptr, ptr %6, align 8, !tbaa !5
  %16 = load ptr, ptr %5, align 8, !tbaa !5
  %17 = icmp eq ptr %15, %16
  br i1 %17, label %22, label %18

18:                                               ; preds = %3
  %19 = load ptr, ptr %6, align 8, !tbaa !5
  %20 = load ptr, ptr %7, align 8, !tbaa !5
  %21 = icmp eq ptr %19, %20
  br i1 %21, label %22, label %23

22:                                               ; preds = %18, %3
  store i32 1, ptr %4, align 4
  store i32 1, ptr %14, align 4
  br label %384

23:                                               ; preds = %18
  %24 = load ptr, ptr %5, align 8, !tbaa !5
  %25 = load ptr, ptr %7, align 8, !tbaa !5
  %26 = icmp eq ptr %24, %25
  br i1 %26, label %27, label %28

27:                                               ; preds = %23
  store i32 0, ptr %4, align 4
  store i32 1, ptr %14, align 4
  br label %384

28:                                               ; preds = %23
  %29 = load ptr, ptr %5, align 8, !tbaa !5
  %30 = getelementptr inbounds %struct.Node, ptr %29, i32 0, i32 45
  %31 = load ptr, ptr %30, align 8, !tbaa !9
  store ptr %31, ptr %8, align 8, !tbaa !5
  %32 = load ptr, ptr %6, align 8, !tbaa !5
  %33 = getelementptr inbounds %struct.Node, ptr %32, i32 0, i32 45
  %34 = load ptr, ptr %33, align 8, !tbaa !9
  store ptr %34, ptr %9, align 8, !tbaa !5
  %35 = load ptr, ptr %7, align 8, !tbaa !5
  %36 = getelementptr inbounds %struct.Node, ptr %35, i32 0, i32 45
  %37 = load ptr, ptr %36, align 8, !tbaa !9
  store ptr %37, ptr %10, align 8, !tbaa !5
  %38 = load ptr, ptr %8, align 8, !tbaa !5
  %39 = getelementptr inbounds %struct.Segment, ptr %38, i32 0, i32 7
  %40 = load ptr, ptr %39, align 8, !tbaa !13
  store ptr %40, ptr %11, align 8, !tbaa !5
  %41 = load ptr, ptr %9, align 8, !tbaa !5
  %42 = getelementptr inbounds %struct.Segment, ptr %41, i32 0, i32 7
  %43 = load ptr, ptr %42, align 8, !tbaa !13
  store ptr %43, ptr %12, align 8, !tbaa !5
  %44 = load ptr, ptr %10, align 8, !tbaa !5
  %45 = getelementptr inbounds %struct.Segment, ptr %44, i32 0, i32 7
  %46 = load ptr, ptr %45, align 8, !tbaa !13
  store ptr %46, ptr %13, align 8, !tbaa !5
  %47 = load ptr, ptr %8, align 8, !tbaa !5
  %48 = load ptr, ptr %10, align 8, !tbaa !5
  %49 = icmp eq ptr %47, %48
  br i1 %49, label %50, label %143

50:                                               ; preds = %28
  %51 = load ptr, ptr %9, align 8, !tbaa !5
  %52 = load ptr, ptr %8, align 8, !tbaa !5
  %53 = icmp eq ptr %51, %52
  br i1 %53, label %54, label %118

54:                                               ; preds = %50
  %55 = load i16, ptr @Reversed, align 2, !tbaa !15
  %56 = sext i16 %55 to i32
  %57 = load ptr, ptr %8, align 8, !tbaa !5
  %58 = getelementptr inbounds %struct.Segment, ptr %57, i32 0, i32 0
  %59 = load i8, ptr %58, align 8, !tbaa !17
  %60 = sext i8 %59 to i32
  %61 = load ptr, ptr %11, align 8, !tbaa !5
  %62 = getelementptr inbounds %struct.SSegment, ptr %61, i32 0, i32 0
  %63 = load i8, ptr %62, align 8, !tbaa !18
  %64 = sext i8 %63 to i32
  %65 = icmp ne i32 %60, %64
  %66 = zext i1 %65 to i32
  %67 = icmp eq i32 %56, %66
  %68 = zext i1 %67 to i32
  %69 = load ptr, ptr %5, align 8, !tbaa !5
  %70 = getelementptr inbounds %struct.Node, ptr %69, i32 0, i32 2
  %71 = load i32, ptr %70, align 8, !tbaa !20
  %72 = load ptr, ptr %7, align 8, !tbaa !5
  %73 = getelementptr inbounds %struct.Node, ptr %72, i32 0, i32 2
  %74 = load i32, ptr %73, align 8, !tbaa !20
  %75 = icmp slt i32 %71, %74
  br i1 %75, label %76, label %95

76:                                               ; preds = %54
  %77 = load ptr, ptr %6, align 8, !tbaa !5
  %78 = getelementptr inbounds %struct.Node, ptr %77, i32 0, i32 2
  %79 = load i32, ptr %78, align 8, !tbaa !20
  %80 = load ptr, ptr %5, align 8, !tbaa !5
  %81 = getelementptr inbounds %struct.Node, ptr %80, i32 0, i32 2
  %82 = load i32, ptr %81, align 8, !tbaa !20
  %83 = icmp sgt i32 %79, %82
  br i1 %83, label %84, label %92

84:                                               ; preds = %76
  %85 = load ptr, ptr %6, align 8, !tbaa !5
  %86 = getelementptr inbounds %struct.Node, ptr %85, i32 0, i32 2
  %87 = load i32, ptr %86, align 8, !tbaa !20
  %88 = load ptr, ptr %7, align 8, !tbaa !5
  %89 = getelementptr inbounds %struct.Node, ptr %88, i32 0, i32 2
  %90 = load i32, ptr %89, align 8, !tbaa !20
  %91 = icmp slt i32 %87, %90
  br label %92

92:                                               ; preds = %84, %76
  %93 = phi i1 [ false, %76 ], [ %91, %84 ]
  %94 = zext i1 %93 to i32
  br label %114

95:                                               ; preds = %54
  %96 = load ptr, ptr %6, align 8, !tbaa !5
  %97 = getelementptr inbounds %struct.Node, ptr %96, i32 0, i32 2
  %98 = load i32, ptr %97, align 8, !tbaa !20
  %99 = load ptr, ptr %5, align 8, !tbaa !5
  %100 = getelementptr inbounds %struct.Node, ptr %99, i32 0, i32 2
  %101 = load i32, ptr %100, align 8, !tbaa !20
  %102 = icmp sgt i32 %98, %101
  br i1 %102, label %111, label %103

103:                                              ; preds = %95
  %104 = load ptr, ptr %6, align 8, !tbaa !5
  %105 = getelementptr inbounds %struct.Node, ptr %104, i32 0, i32 2
  %106 = load i32, ptr %105, align 8, !tbaa !20
  %107 = load ptr, ptr %7, align 8, !tbaa !5
  %108 = getelementptr inbounds %struct.Node, ptr %107, i32 0, i32 2
  %109 = load i32, ptr %108, align 8, !tbaa !20
  %110 = icmp slt i32 %106, %109
  br label %111

111:                                              ; preds = %103, %95
  %112 = phi i1 [ true, %95 ], [ %110, %103 ]
  %113 = zext i1 %112 to i32
  br label %114

114:                                              ; preds = %111, %92
  %115 = phi i32 [ %94, %92 ], [ %113, %111 ]
  %116 = icmp eq i32 %68, %115
  %117 = zext i1 %116 to i32
  store i32 %117, ptr %4, align 4
  store i32 1, ptr %14, align 4
  br label %384

118:                                              ; preds = %50
  %119 = load i16, ptr @Reversed, align 2, !tbaa !15
  %120 = sext i16 %119 to i32
  %121 = load ptr, ptr %8, align 8, !tbaa !5
  %122 = getelementptr inbounds %struct.Segment, ptr %121, i32 0, i32 0
  %123 = load i8, ptr %122, align 8, !tbaa !17
  %124 = sext i8 %123 to i32
  %125 = load ptr, ptr %11, align 8, !tbaa !5
  %126 = getelementptr inbounds %struct.SSegment, ptr %125, i32 0, i32 0
  %127 = load i8, ptr %126, align 8, !tbaa !18
  %128 = sext i8 %127 to i32
  %129 = icmp ne i32 %124, %128
  %130 = zext i1 %129 to i32
  %131 = icmp eq i32 %120, %130
  %132 = zext i1 %131 to i32
  %133 = load ptr, ptr %5, align 8, !tbaa !5
  %134 = getelementptr inbounds %struct.Node, ptr %133, i32 0, i32 2
  %135 = load i32, ptr %134, align 8, !tbaa !20
  %136 = load ptr, ptr %7, align 8, !tbaa !5
  %137 = getelementptr inbounds %struct.Node, ptr %136, i32 0, i32 2
  %138 = load i32, ptr %137, align 8, !tbaa !20
  %139 = icmp sgt i32 %135, %138
  %140 = zext i1 %139 to i32
  %141 = icmp eq i32 %132, %140
  %142 = zext i1 %141 to i32
  store i32 %142, ptr %4, align 4
  store i32 1, ptr %14, align 4
  br label %384

143:                                              ; preds = %28
  %144 = load ptr, ptr %9, align 8, !tbaa !5
  %145 = load ptr, ptr %10, align 8, !tbaa !5
  %146 = icmp eq ptr %144, %145
  br i1 %146, label %147, label %172

147:                                              ; preds = %143
  %148 = load i16, ptr @Reversed, align 2, !tbaa !15
  %149 = sext i16 %148 to i32
  %150 = load ptr, ptr %9, align 8, !tbaa !5
  %151 = getelementptr inbounds %struct.Segment, ptr %150, i32 0, i32 0
  %152 = load i8, ptr %151, align 8, !tbaa !17
  %153 = sext i8 %152 to i32
  %154 = load ptr, ptr %12, align 8, !tbaa !5
  %155 = getelementptr inbounds %struct.SSegment, ptr %154, i32 0, i32 0
  %156 = load i8, ptr %155, align 8, !tbaa !18
  %157 = sext i8 %156 to i32
  %158 = icmp ne i32 %153, %157
  %159 = zext i1 %158 to i32
  %160 = icmp eq i32 %149, %159
  %161 = zext i1 %160 to i32
  %162 = load ptr, ptr %6, align 8, !tbaa !5
  %163 = getelementptr inbounds %struct.Node, ptr %162, i32 0, i32 2
  %164 = load i32, ptr %163, align 8, !tbaa !20
  %165 = load ptr, ptr %7, align 8, !tbaa !5
  %166 = getelementptr inbounds %struct.Node, ptr %165, i32 0, i32 2
  %167 = load i32, ptr %166, align 8, !tbaa !20
  %168 = icmp slt i32 %164, %167
  %169 = zext i1 %168 to i32
  %170 = icmp eq i32 %161, %169
  %171 = zext i1 %170 to i32
  store i32 %171, ptr %4, align 4
  store i32 1, ptr %14, align 4
  br label %384

172:                                              ; preds = %143
  %173 = load ptr, ptr %8, align 8, !tbaa !5
  %174 = load ptr, ptr %9, align 8, !tbaa !5
  %175 = icmp eq ptr %173, %174
  br i1 %175, label %176, label %201

176:                                              ; preds = %172
  %177 = load i16, ptr @Reversed, align 2, !tbaa !15
  %178 = sext i16 %177 to i32
  %179 = load ptr, ptr %8, align 8, !tbaa !5
  %180 = getelementptr inbounds %struct.Segment, ptr %179, i32 0, i32 0
  %181 = load i8, ptr %180, align 8, !tbaa !17
  %182 = sext i8 %181 to i32
  %183 = load ptr, ptr %11, align 8, !tbaa !5
  %184 = getelementptr inbounds %struct.SSegment, ptr %183, i32 0, i32 0
  %185 = load i8, ptr %184, align 8, !tbaa !18
  %186 = sext i8 %185 to i32
  %187 = icmp ne i32 %182, %186
  %188 = zext i1 %187 to i32
  %189 = icmp eq i32 %178, %188
  %190 = zext i1 %189 to i32
  %191 = load ptr, ptr %5, align 8, !tbaa !5
  %192 = getelementptr inbounds %struct.Node, ptr %191, i32 0, i32 2
  %193 = load i32, ptr %192, align 8, !tbaa !20
  %194 = load ptr, ptr %6, align 8, !tbaa !5
  %195 = getelementptr inbounds %struct.Node, ptr %194, i32 0, i32 2
  %196 = load i32, ptr %195, align 8, !tbaa !20
  %197 = icmp slt i32 %193, %196
  %198 = zext i1 %197 to i32
  %199 = icmp eq i32 %190, %198
  %200 = zext i1 %199 to i32
  store i32 %200, ptr %4, align 4
  store i32 1, ptr %14, align 4
  br label %384

201:                                              ; preds = %172
  %202 = load ptr, ptr %11, align 8, !tbaa !5
  %203 = load ptr, ptr %13, align 8, !tbaa !5
  %204 = icmp eq ptr %202, %203
  br i1 %204, label %205, label %286

205:                                              ; preds = %201
  %206 = load ptr, ptr %12, align 8, !tbaa !5
  %207 = load ptr, ptr %11, align 8, !tbaa !5
  %208 = icmp eq ptr %206, %207
  br i1 %208, label %209, label %267

209:                                              ; preds = %205
  %210 = load i16, ptr @Reversed, align 2, !tbaa !15
  %211 = sext i16 %210 to i32
  %212 = load ptr, ptr %11, align 8, !tbaa !5
  %213 = getelementptr inbounds %struct.SSegment, ptr %212, i32 0, i32 0
  %214 = load i8, ptr %213, align 8, !tbaa !18
  %215 = sext i8 %214 to i32
  %216 = icmp eq i32 %211, %215
  %217 = zext i1 %216 to i32
  %218 = load ptr, ptr %8, align 8, !tbaa !5
  %219 = getelementptr inbounds %struct.Segment, ptr %218, i32 0, i32 5
  %220 = load i32, ptr %219, align 8, !tbaa !21
  %221 = load ptr, ptr %10, align 8, !tbaa !5
  %222 = getelementptr inbounds %struct.Segment, ptr %221, i32 0, i32 5
  %223 = load i32, ptr %222, align 8, !tbaa !21
  %224 = icmp slt i32 %220, %223
  br i1 %224, label %225, label %244

225:                                              ; preds = %209
  %226 = load ptr, ptr %9, align 8, !tbaa !5
  %227 = getelementptr inbounds %struct.Segment, ptr %226, i32 0, i32 5
  %228 = load i32, ptr %227, align 8, !tbaa !21
  %229 = load ptr, ptr %8, align 8, !tbaa !5
  %230 = getelementptr inbounds %struct.Segment, ptr %229, i32 0, i32 5
  %231 = load i32, ptr %230, align 8, !tbaa !21
  %232 = icmp sgt i32 %228, %231
  br i1 %232, label %233, label %241

233:                                              ; preds = %225
  %234 = load ptr, ptr %9, align 8, !tbaa !5
  %235 = getelementptr inbounds %struct.Segment, ptr %234, i32 0, i32 5
  %236 = load i32, ptr %235, align 8, !tbaa !21
  %237 = load ptr, ptr %10, align 8, !tbaa !5
  %238 = getelementptr inbounds %struct.Segment, ptr %237, i32 0, i32 5
  %239 = load i32, ptr %238, align 8, !tbaa !21
  %240 = icmp slt i32 %236, %239
  br label %241

241:                                              ; preds = %233, %225
  %242 = phi i1 [ false, %225 ], [ %240, %233 ]
  %243 = zext i1 %242 to i32
  br label %263

244:                                              ; preds = %209
  %245 = load ptr, ptr %9, align 8, !tbaa !5
  %246 = getelementptr inbounds %struct.Segment, ptr %245, i32 0, i32 5
  %247 = load i32, ptr %246, align 8, !tbaa !21
  %248 = load ptr, ptr %8, align 8, !tbaa !5
  %249 = getelementptr inbounds %struct.Segment, ptr %248, i32 0, i32 5
  %250 = load i32, ptr %249, align 8, !tbaa !21
  %251 = icmp sgt i32 %247, %250
  br i1 %251, label %260, label %252

252:                                              ; preds = %244
  %253 = load ptr, ptr %9, align 8, !tbaa !5
  %254 = getelementptr inbounds %struct.Segment, ptr %253, i32 0, i32 5
  %255 = load i32, ptr %254, align 8, !tbaa !21
  %256 = load ptr, ptr %10, align 8, !tbaa !5
  %257 = getelementptr inbounds %struct.Segment, ptr %256, i32 0, i32 5
  %258 = load i32, ptr %257, align 8, !tbaa !21
  %259 = icmp slt i32 %255, %258
  br label %260

260:                                              ; preds = %252, %244
  %261 = phi i1 [ true, %244 ], [ %259, %252 ]
  %262 = zext i1 %261 to i32
  br label %263

263:                                              ; preds = %260, %241
  %264 = phi i32 [ %243, %241 ], [ %262, %260 ]
  %265 = icmp eq i32 %217, %264
  %266 = zext i1 %265 to i32
  store i32 %266, ptr %4, align 4
  store i32 1, ptr %14, align 4
  br label %384

267:                                              ; preds = %205
  %268 = load i16, ptr @Reversed, align 2, !tbaa !15
  %269 = sext i16 %268 to i32
  %270 = load ptr, ptr %11, align 8, !tbaa !5
  %271 = getelementptr inbounds %struct.SSegment, ptr %270, i32 0, i32 0
  %272 = load i8, ptr %271, align 8, !tbaa !18
  %273 = sext i8 %272 to i32
  %274 = icmp eq i32 %269, %273
  %275 = zext i1 %274 to i32
  %276 = load ptr, ptr %8, align 8, !tbaa !5
  %277 = getelementptr inbounds %struct.Segment, ptr %276, i32 0, i32 5
  %278 = load i32, ptr %277, align 8, !tbaa !21
  %279 = load ptr, ptr %10, align 8, !tbaa !5
  %280 = getelementptr inbounds %struct.Segment, ptr %279, i32 0, i32 5
  %281 = load i32, ptr %280, align 8, !tbaa !21
  %282 = icmp sgt i32 %278, %281
  %283 = zext i1 %282 to i32
  %284 = icmp eq i32 %275, %283
  %285 = zext i1 %284 to i32
  store i32 %285, ptr %4, align 4
  store i32 1, ptr %14, align 4
  br label %384

286:                                              ; preds = %201
  %287 = load ptr, ptr %12, align 8, !tbaa !5
  %288 = load ptr, ptr %13, align 8, !tbaa !5
  %289 = icmp eq ptr %287, %288
  br i1 %289, label %290, label %309

290:                                              ; preds = %286
  %291 = load i16, ptr @Reversed, align 2, !tbaa !15
  %292 = sext i16 %291 to i32
  %293 = load ptr, ptr %12, align 8, !tbaa !5
  %294 = getelementptr inbounds %struct.SSegment, ptr %293, i32 0, i32 0
  %295 = load i8, ptr %294, align 8, !tbaa !18
  %296 = sext i8 %295 to i32
  %297 = icmp eq i32 %292, %296
  %298 = zext i1 %297 to i32
  %299 = load ptr, ptr %9, align 8, !tbaa !5
  %300 = getelementptr inbounds %struct.Segment, ptr %299, i32 0, i32 5
  %301 = load i32, ptr %300, align 8, !tbaa !21
  %302 = load ptr, ptr %10, align 8, !tbaa !5
  %303 = getelementptr inbounds %struct.Segment, ptr %302, i32 0, i32 5
  %304 = load i32, ptr %303, align 8, !tbaa !21
  %305 = icmp slt i32 %301, %304
  %306 = zext i1 %305 to i32
  %307 = icmp eq i32 %298, %306
  %308 = zext i1 %307 to i32
  store i32 %308, ptr %4, align 4
  store i32 1, ptr %14, align 4
  br label %384

309:                                              ; preds = %286
  %310 = load ptr, ptr %11, align 8, !tbaa !5
  %311 = load ptr, ptr %12, align 8, !tbaa !5
  %312 = icmp eq ptr %310, %311
  br i1 %312, label %313, label %332

313:                                              ; preds = %309
  %314 = load i16, ptr @Reversed, align 2, !tbaa !15
  %315 = sext i16 %314 to i32
  %316 = load ptr, ptr %11, align 8, !tbaa !5
  %317 = getelementptr inbounds %struct.SSegment, ptr %316, i32 0, i32 0
  %318 = load i8, ptr %317, align 8, !tbaa !18
  %319 = sext i8 %318 to i32
  %320 = icmp eq i32 %315, %319
  %321 = zext i1 %320 to i32
  %322 = load ptr, ptr %8, align 8, !tbaa !5
  %323 = getelementptr inbounds %struct.Segment, ptr %322, i32 0, i32 5
  %324 = load i32, ptr %323, align 8, !tbaa !21
  %325 = load ptr, ptr %9, align 8, !tbaa !5
  %326 = getelementptr inbounds %struct.Segment, ptr %325, i32 0, i32 5
  %327 = load i32, ptr %326, align 8, !tbaa !21
  %328 = icmp slt i32 %324, %327
  %329 = zext i1 %328 to i32
  %330 = icmp eq i32 %321, %329
  %331 = zext i1 %330 to i32
  store i32 %331, ptr %4, align 4
  store i32 1, ptr %14, align 4
  br label %384

332:                                              ; preds = %309
  %333 = load i16, ptr @Reversed, align 2, !tbaa !15
  %334 = sext i16 %333 to i32
  %335 = load ptr, ptr %11, align 8, !tbaa !5
  %336 = getelementptr inbounds %struct.SSegment, ptr %335, i32 0, i32 5
  %337 = load i32, ptr %336, align 8, !tbaa !22
  %338 = load ptr, ptr %13, align 8, !tbaa !5
  %339 = getelementptr inbounds %struct.SSegment, ptr %338, i32 0, i32 5
  %340 = load i32, ptr %339, align 8, !tbaa !22
  %341 = icmp slt i32 %337, %340
  br i1 %341, label %342, label %361

342:                                              ; preds = %332
  %343 = load ptr, ptr %12, align 8, !tbaa !5
  %344 = getelementptr inbounds %struct.SSegment, ptr %343, i32 0, i32 5
  %345 = load i32, ptr %344, align 8, !tbaa !22
  %346 = load ptr, ptr %11, align 8, !tbaa !5
  %347 = getelementptr inbounds %struct.SSegment, ptr %346, i32 0, i32 5
  %348 = load i32, ptr %347, align 8, !tbaa !22
  %349 = icmp sgt i32 %345, %348
  br i1 %349, label %350, label %358

350:                                              ; preds = %342
  %351 = load ptr, ptr %12, align 8, !tbaa !5
  %352 = getelementptr inbounds %struct.SSegment, ptr %351, i32 0, i32 5
  %353 = load i32, ptr %352, align 8, !tbaa !22
  %354 = load ptr, ptr %13, align 8, !tbaa !5
  %355 = getelementptr inbounds %struct.SSegment, ptr %354, i32 0, i32 5
  %356 = load i32, ptr %355, align 8, !tbaa !22
  %357 = icmp slt i32 %353, %356
  br label %358

358:                                              ; preds = %350, %342
  %359 = phi i1 [ false, %342 ], [ %357, %350 ]
  %360 = zext i1 %359 to i32
  br label %380

361:                                              ; preds = %332
  %362 = load ptr, ptr %12, align 8, !tbaa !5
  %363 = getelementptr inbounds %struct.SSegment, ptr %362, i32 0, i32 5
  %364 = load i32, ptr %363, align 8, !tbaa !22
  %365 = load ptr, ptr %11, align 8, !tbaa !5
  %366 = getelementptr inbounds %struct.SSegment, ptr %365, i32 0, i32 5
  %367 = load i32, ptr %366, align 8, !tbaa !22
  %368 = icmp sgt i32 %364, %367
  br i1 %368, label %377, label %369

369:                                              ; preds = %361
  %370 = load ptr, ptr %12, align 8, !tbaa !5
  %371 = getelementptr inbounds %struct.SSegment, ptr %370, i32 0, i32 5
  %372 = load i32, ptr %371, align 8, !tbaa !22
  %373 = load ptr, ptr %13, align 8, !tbaa !5
  %374 = getelementptr inbounds %struct.SSegment, ptr %373, i32 0, i32 5
  %375 = load i32, ptr %374, align 8, !tbaa !22
  %376 = icmp slt i32 %372, %375
  br label %377

377:                                              ; preds = %369, %361
  %378 = phi i1 [ true, %361 ], [ %376, %369 ]
  %379 = zext i1 %378 to i32
  br label %380

380:                                              ; preds = %377, %358
  %381 = phi i32 [ %360, %358 ], [ %379, %377 ]
  %382 = icmp ne i32 %334, %381
  %383 = zext i1 %382 to i32
  store i32 %383, ptr %4, align 4
  store i32 1, ptr %14, align 4
  br label %384

384:                                              ; preds = %380, %313, %290, %267, %263, %176, %147, %118, %114, %27, %22
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #2
  %385 = load i32, ptr %4, align 4
  ret i32 %385
}

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

; 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 = { 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 304}
!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, !6, i64 48}
!14 = !{!"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}
!15 = !{!16, !16, i64 0}
!16 = !{!"short", !7, i64 0}
!17 = !{!14, !7, i64 0}
!18 = !{!19, !7, i64 0}
!19 = !{!"SSegment", !7, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !11, i64 40, !11, i64 44}
!20 = !{!10, !11, i64 8}
!21 = !{!14, !11, i64 40}
!22 = !{!19, !11, i64 40}


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

@Reversed = external dso_local local_unnamed_addr global i16, align 2

; Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(read, inaccessiblemem: none) uwtable
define dso_local range(i32 0, 2) i32 @Between_SSL(ptr noundef readonly %0, ptr noundef readonly %1, ptr noundef readonly %2) local_unnamed_addr #0 {
  %4 = icmp eq ptr %1, %0
  %5 = icmp eq ptr %1, %2
  %or.cond = or i1 %4, %5
  br i1 %or.cond, label %157, label %6

6:                                                ; preds = %3
  %7 = icmp eq ptr %0, %2
  br i1 %7, label %157, label %8

8:                                                ; preds = %6
  %9 = getelementptr inbounds i8, ptr %0, i64 304
  %10 = load ptr, ptr %9, align 8, !tbaa !5
  %11 = getelementptr inbounds i8, ptr %1, i64 304
  %12 = load ptr, ptr %11, align 8, !tbaa !5
  %13 = getelementptr inbounds i8, ptr %2, i64 304
  %14 = load ptr, ptr %13, align 8, !tbaa !5
  %15 = getelementptr inbounds i8, ptr %10, i64 48
  %16 = load ptr, ptr %15, align 8, !tbaa !12
  %17 = getelementptr inbounds i8, ptr %12, i64 48
  %18 = load ptr, ptr %17, align 8, !tbaa !12
  %19 = getelementptr inbounds i8, ptr %14, i64 48
  %20 = load ptr, ptr %19, align 8, !tbaa !12
  %21 = icmp eq ptr %10, %14
  br i1 %21, label %22, label %53

22:                                               ; preds = %8
  %23 = icmp eq ptr %12, %10
  %24 = load i16, ptr @Reversed, align 2, !tbaa !14
  %25 = sext i16 %24 to i32
  %26 = load i8, ptr %10, align 8, !tbaa !16
  %27 = load i8, ptr %16, align 8, !tbaa !17
  %28 = icmp ne i8 %26, %27
  %29 = zext i1 %28 to i32
  br i1 %23, label %30, label %45

30:                                               ; preds = %22
  %31 = getelementptr inbounds i8, ptr %0, i64 8
  %32 = load i32, ptr %31, align 8, !tbaa !19
  %33 = getelementptr inbounds i8, ptr %2, i64 8
  %34 = load i32, ptr %33, align 8, !tbaa !19
  %35 = icmp slt i32 %32, %34
  %36 = getelementptr inbounds i8, ptr %1, i64 8
  %37 = load i32, ptr %36, align 8, !tbaa !19
  %38 = icmp sgt i32 %37, %32
  %39 = icmp slt i32 %37, %34
  br i1 %35, label %40, label %41

40:                                               ; preds = %30
  %narrow116 = and i1 %38, %39
  br label %42

41:                                               ; preds = %30
  %narrow115 = or i1 %38, %39
  br label %42

42:                                               ; preds = %41, %40
  %.in117 = phi i1 [ %narrow116, %40 ], [ %narrow115, %41 ]
  %43 = icmp ne i32 %25, %29
  %44 = xor i1 %43, %.in117
  br label %157

45:                                               ; preds = %22
  %46 = icmp eq i32 %25, %29
  %47 = getelementptr inbounds i8, ptr %0, i64 8
  %48 = load i32, ptr %47, align 8, !tbaa !19
  %49 = getelementptr inbounds i8, ptr %2, i64 8
  %50 = load i32, ptr %49, align 8, !tbaa !19
  %51 = icmp sle i32 %48, %50
  %52 = xor i1 %46, %51
  br label %157

53:                                               ; preds = %8
  %54 = icmp eq ptr %12, %14
  br i1 %54, label %55, label %69

55:                                               ; preds = %53
  %56 = load i16, ptr @Reversed, align 2, !tbaa !14
  %57 = sext i16 %56 to i32
  %58 = load i8, ptr %12, align 8, !tbaa !16
  %59 = load i8, ptr %18, align 8, !tbaa !17
  %60 = icmp ne i8 %58, %59
  %61 = zext i1 %60 to i32
  %62 = icmp eq i32 %57, %61
  %63 = getelementptr inbounds i8, ptr %1, i64 8
  %64 = load i32, ptr %63, align 8, !tbaa !19
  %65 = getelementptr inbounds i8, ptr %2, i64 8
  %66 = load i32, ptr %65, align 8, !tbaa !19
  %67 = icmp sge i32 %64, %66
  %68 = xor i1 %62, %67
  br label %157

69:                                               ; preds = %53
  %70 = icmp eq ptr %10, %12
  br i1 %70, label %71, label %85

71:                                               ; preds = %69
  %72 = load i16, ptr @Reversed, align 2, !tbaa !14
  %73 = sext i16 %72 to i32
  %74 = load i8, ptr %10, align 8, !tbaa !16
  %75 = load i8, ptr %16, align 8, !tbaa !17
  %76 = icmp ne i8 %74, %75
  %77 = zext i1 %76 to i32
  %78 = icmp eq i32 %73, %77
  %79 = getelementptr inbounds i8, ptr %0, i64 8
  %80 = load i32, ptr %79, align 8, !tbaa !19
  %81 = getelementptr inbounds i8, ptr %1, i64 8
  %82 = load i32, ptr %81, align 8, !tbaa !19
  %83 = icmp sge i32 %80, %82
  %84 = xor i1 %78, %83
  br label %157

85:                                               ; preds = %69
  %86 = icmp eq ptr %16, %20
  br i1 %86, label %87, label %115

87:                                               ; preds = %85
  %88 = icmp eq ptr %18, %16
  %89 = load i16, ptr @Reversed, align 2, !tbaa !14
  %90 = load i8, ptr %16, align 8, !tbaa !17
  %91 = sext i8 %90 to i16
  br i1 %88, label %92, label %107

92:                                               ; preds = %87
  %93 = getelementptr inbounds i8, ptr %10, i64 40
  %94 = load i32, ptr %93, align 8, !tbaa !20
  %95 = getelementptr inbounds i8, ptr %14, i64 40
  %96 = load i32, ptr %95, align 8, !tbaa !20
  %97 = icmp slt i32 %94, %96
  %98 = getelementptr inbounds i8, ptr %12, i64 40
  %99 = load i32, ptr %98, align 8, !tbaa !20
  %100 = icmp sgt i32 %99, %94
  %101 = icmp slt i32 %99, %96
  br i1 %97, label %102, label %103

102:                                              ; preds = %92
  %narrow113 = and i1 %100, %101
  br label %104

103:                                              ; preds = %92
  %narrow112 = or i1 %100, %101
  br label %104

104:                                              ; preds = %103, %102
  %.in114 = phi i1 [ %narrow113, %102 ], [ %narrow112, %103 ]
  %105 = icmp ne i16 %89, %91
  %106 = xor i1 %105, %.in114
  br label %157

107:                                              ; preds = %87
  %108 = icmp eq i16 %89, %91
  %109 = getelementptr inbounds i8, ptr %10, i64 40
  %110 = load i32, ptr %109, align 8, !tbaa !20
  %111 = getelementptr inbounds i8, ptr %14, i64 40
  %112 = load i32, ptr %111, align 8, !tbaa !20
  %113 = icmp sle i32 %110, %112
  %114 = xor i1 %108, %113
  br label %157

115:                                              ; preds = %85
  %116 = icmp eq ptr %18, %20
  br i1 %116, label %117, label %128

117:                                              ; preds = %115
  %118 = load i16, ptr @Reversed, align 2, !tbaa !14
  %119 = load i8, ptr %18, align 8, !tbaa !17
  %120 = sext i8 %119 to i16
  %121 = icmp eq i16 %118, %120
  %122 = getelementptr inbounds i8, ptr %12, i64 40
  %123 = load i32, ptr %122, align 8, !tbaa !20
  %124 = getelementptr inbounds i8, ptr %14, i64 40
  %125 = load i32, ptr %124, align 8, !tbaa !20
  %126 = icmp sge i32 %123, %125
  %127 = xor i1 %121, %126
  br label %157

128:                                              ; preds = %115
  %129 = icmp eq ptr %16, %18
  %130 = load i16, ptr @Reversed, align 2, !tbaa !14
  br i1 %129, label %131, label %141

131:                                              ; preds = %128
  %132 = load i8, ptr %16, align 8, !tbaa !17
  %133 = sext i8 %132 to i16
  %134 = icmp eq i16 %130, %133
  %135 = getelementptr inbounds i8, ptr %10, i64 40
  %136 = load i32, ptr %135, align 8, !tbaa !20
  %137 = getelementptr inbounds i8, ptr %12, i64 40
  %138 = load i32, ptr %137, align 8, !tbaa !20
  %139 = icmp sge i32 %136, %138
  %140 = xor i1 %134, %139
  br label %157

141:                                              ; preds = %128
  %142 = sext i16 %130 to i32
  %143 = getelementptr inbounds i8, ptr %16, i64 40
  %144 = load i32, ptr %143, align 8, !tbaa !21
  %145 = getelementptr inbounds i8, ptr %20, i64 40
  %146 = load i32, ptr %145, align 8, !tbaa !21
  %147 = icmp slt i32 %144, %146
  %148 = getelementptr inbounds i8, ptr %18, i64 40
  %149 = load i32, ptr %148, align 8, !tbaa !21
  %150 = icmp sgt i32 %149, %144
  %151 = icmp slt i32 %149, %146
  br i1 %147, label %152, label %153

152:                                              ; preds = %141
  %narrow111 = and i1 %150, %151
  br label %154

153:                                              ; preds = %141
  %narrow = or i1 %150, %151
  br label %154

154:                                              ; preds = %153, %152
  %.in = phi i1 [ %narrow111, %152 ], [ %narrow, %153 ]
  %155 = zext i1 %.in to i32
  %156 = icmp ne i32 %155, %142
  br label %157

157:                                              ; preds = %6, %3, %154, %131, %117, %107, %104, %71, %55, %45, %42
  %.0.shrunk = phi i1 [ %44, %42 ], [ %52, %45 ], [ %68, %55 ], [ %84, %71 ], [ %106, %104 ], [ %114, %107 ], [ %127, %117 ], [ %140, %131 ], [ %156, %154 ], [ true, %3 ], [ false, %6 ]
  %.0 = zext i1 %.0.shrunk to i32
  ret i32 %.0
}

attributes #0 = { mustprogress nofree norecurse nosync nounwind willreturn memory(read, inaccessiblemem: none) 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" }

!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 304}
!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 = !{!13, !10, i64 48}
!13 = !{!"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}
!14 = !{!15, !15, i64 0}
!15 = !{!"short", !8, i64 0}
!16 = !{!13, !8, i64 0}
!17 = !{!18, !8, i64 0}
!18 = !{!"SSegment", !8, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !7, i64 40, !7, i64 44}
!19 = !{!6, !7, i64 8}
!20 = !{!13, !7, i64 40}
!21 = !{!18, !7, i64 40}


; Effective O3 passes: EarlyCSEPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,PostOrderFunctionAttrsPass,ReassociatePass,SROAPass,SimplifyCFGPass