; LLVM IR from ERGO-Code/HiGHS :: src/mip/HighsCutGeneration.ll (ZN18HighsCutGeneration30separateLiftedMixedBinaryCoverEv)

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

%"class.std::vector.3" = type { %"struct.std::_Vector_base.4" }
%"struct.std::_Vector_base.4" = type { %"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl" }
%"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl" = type { %"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl_data" }
%"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.8" = type { %"struct.std::_Vector_base.9" }
%"struct.std::_Vector_base.9" = type { %"struct.std::_Vector_base<unsigned char, std::allocator<unsigned char>>::_Vector_impl" }
%"struct.std::_Vector_base<unsigned char, std::allocator<unsigned char>>::_Vector_impl" = type { %"struct.std::_Vector_base<unsigned char, std::allocator<unsigned char>>::_Vector_impl_data" }
%"struct.std::_Vector_base<unsigned char, std::allocator<unsigned char>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.__gnu_cxx::__normal_iterator" = type { ptr }
%class.anon.351 = type { ptr }
%class.HighsCDouble = type { double, double }
%class.anon.352 = type { ptr, ptr, ptr }
%class.HighsCutGeneration = type { ptr, ptr, %class.HighsRandom, %"class.std::vector", %class.HighsCDouble, %class.HighsCDouble, %"class.std::vector.3", %"class.std::vector.3", %"class.std::vector.8", %"class.std::vector.8", double, double, ptr, ptr, %class.HighsCDouble, i8, i8, i32, double, %"class.std::vector", %"class.std::vector.3" }
%class.HighsRandom = type { i64 }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl" }
%"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl" = type { %"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl_data" = type { ptr, ptr, ptr }

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

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIdSaIdEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIhSaIhEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIhSaIhEED2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK12HighsCDoubleleEd(ptr noundef nonnull align 8 dereferenceable(16), double noundef) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt6vectorIhSaIhEEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNKSt6vectorIiSaIiEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN12HighsCDoubleC2Ed(ptr noundef nonnull align 8 dereferenceable(16), double noundef) unnamed_addr #1 align 2

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt6vectorIiSaIiEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24)) #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt6vectorIiSaIiEE3endEv(ptr noundef nonnull align 8 dereferenceable(24)) #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZN12HighsCDoublepLEd(ptr noundef nonnull align 8 dereferenceable(16), double noundef) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef double @_ZNK12HighsCDoublecvdEv(ptr noundef nonnull align 8 dereferenceable(16)) #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIdSaIdEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3minIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #4

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZN18HighsCutGeneration30separateLiftedMixedBinaryCoverEv(ptr noundef nonnull align 8 dereferenceable(288) %0) #2 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca i1, align 1
  %3 = alloca ptr, align 8
  %4 = alloca i32, align 4
  %5 = alloca %"class.std::vector.3", align 8
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca %"class.std::vector.8", align 8
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %12 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %13 = alloca %class.anon.351, align 8
  %14 = alloca %class.HighsCDouble, align 8
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca %class.HighsCDouble, align 8
  %18 = alloca %class.anon.352, align 8
  %19 = alloca %class.HighsCDouble, align 8
  %20 = alloca i32, align 4
  %21 = alloca double, align 8
  store ptr %0, ptr %3, align 8, !tbaa !5
  %22 = load ptr, ptr %3, align 8
  %23 = getelementptr inbounds %class.HighsCutGeneration, ptr %22, i32 0, i32 15
  store i8 0, ptr %23, align 8, !tbaa !9
  %24 = getelementptr inbounds %class.HighsCutGeneration, ptr %22, i32 0, i32 16
  store i8 0, ptr %24, align 1, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #6
  %25 = getelementptr inbounds %class.HighsCutGeneration, ptr %22, i32 0, i32 3
  %26 = call noundef i64 @_ZNKSt6vectorIiSaIiEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %25) #6
  %27 = trunc i64 %26 to i32
  store i32 %27, ptr %4, align 4, !tbaa !30
  call void @llvm.lifetime.start.p0(i64 24, ptr %5) #6
  call void @_ZNSt6vectorIdSaIdEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #6
  %28 = load i32, ptr %4, align 4, !tbaa !30
  %29 = sext i32 %28 to i64
  invoke void @_ZNSt6vectorIdSaIdEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %5, i64 noundef %29)
          to label %30 unwind label %38

30:                                               ; preds = %1
  call void @llvm.lifetime.start.p0(i64 24, ptr %8) #6
  call void @_ZNSt6vectorIhSaIhEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %8) #6
  %31 = getelementptr inbounds %class.HighsCutGeneration, ptr %22, i32 0, i32 17
  %32 = load i32, ptr %31, align 4, !tbaa !31
  %33 = sext i32 %32 to i64
  invoke void @_ZNSt6vectorIhSaIhEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %8, i64 noundef %33)
          to label %34 unwind label %42

34:                                               ; preds = %30
  %35 = load i32, ptr %4, align 4, !tbaa !30
  %36 = icmp eq i32 %35, 0
  br i1 %36, label %37, label %46

37:                                               ; preds = %34
  store i1 false, ptr %2, align 1
  store i32 1, ptr %9, align 4
  br label %260

38:                                               ; preds = %1
  %39 = landingpad { ptr, i32 }
          cleanup
  %40 = extractvalue { ptr, i32 } %39, 0
  store ptr %40, ptr %6, align 8
  %41 = extractvalue { ptr, i32 } %39, 1
  store i32 %41, ptr %7, align 4
  br label %263

42:                                               ; preds = %63, %30
  %43 = landingpad { ptr, i32 }
          cleanup
  %44 = extractvalue { ptr, i32 } %43, 0
  store ptr %44, ptr %6, align 8
  %45 = extractvalue { ptr, i32 } %43, 1
  store i32 %45, ptr %7, align 4
  br label %262

46:                                               ; preds = %34
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #6
  store i32 0, ptr %10, align 4, !tbaa !30
  br label %47

47:                                               ; preds = %60, %46
  %48 = load i32, ptr %10, align 4, !tbaa !30
  %49 = load i32, ptr %4, align 4, !tbaa !30
  %50 = icmp ne i32 %48, %49
  br i1 %50, label %52, label %51

51:                                               ; preds = %47
  store i32 2, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #6
  br label %63

52:                                               ; preds = %47
  %53 = getelementptr inbounds %class.HighsCutGeneration, ptr %22, i32 0, i32 3
  %54 = load i32, ptr %10, align 4, !tbaa !30
  %55 = sext i32 %54 to i64
  %56 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %53, i64 noundef %55) #6
  %57 = load i32, ptr %56, align 4, !tbaa !30
  %58 = sext i32 %57 to i64
  %59 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt6vectorIhSaIhEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %8, i64 noundef %58) #6
  store i8 1, ptr %59, align 1, !tbaa !32
  br label %60

60:                                               ; preds = %52
  %61 = load i32, ptr %10, align 4, !tbaa !30
  %62 = add nsw i32 %61, 1
  store i32 %62, ptr %10, align 4, !tbaa !30
  br label %47, !llvm.loop !33

63:                                               ; preds = %51
  %64 = getelementptr inbounds %class.HighsCutGeneration, ptr %22, i32 0, i32 3
  %65 = call ptr @_ZNSt6vectorIiSaIiEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %64) #6
  %66 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %11, i32 0, i32 0
  store ptr %65, ptr %66, align 8
  %67 = getelementptr inbounds %class.HighsCutGeneration, ptr %22, i32 0, i32 3
  %68 = call ptr @_ZNSt6vectorIiSaIiEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %67) #6
  %69 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %12, i32 0, i32 0
  store ptr %68, ptr %69, align 8
  %70 = getelementptr inbounds %class.anon.351, ptr %13, i32 0, i32 0
  store ptr %22, ptr %70, align 8, !tbaa !35
  %71 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %11, i32 0, i32 0
  %72 = load ptr, ptr %71, align 8
  %73 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %12, i32 0, i32 0
  %74 = load ptr, ptr %73, align 8
  %75 = getelementptr inbounds %class.anon.351, ptr %13, i32 0, i32 0
  %76 = load ptr, ptr %75, align 8
  invoke void @"_Z18pdqsort_branchlessIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEZN18HighsCutGeneration30separateLiftedMixedBinaryCoverEvE3$_0EvT_S9_T0_"(ptr %72, ptr %74, ptr %76)
          to label %77 unwind label %42

77:                                               ; preds = %63
  call void @llvm.lifetime.start.p0(i64 16, ptr %14) #6
  invoke void @_ZN12HighsCDoubleC2Ed(ptr noundef nonnull align 8 dereferenceable(16) %14, double noundef 0.000000e+00)
          to label %78 unwind label %85

78:                                               ; preds = %77
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #6
  %79 = load i32, ptr %4, align 4, !tbaa !30
  store i32 %79, ptr %15, align 4, !tbaa !30
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #6
  store i32 0, ptr %16, align 4, !tbaa !30
  br label %80

80:                                               ; preds = %135, %78
  %81 = load i32, ptr %16, align 4, !tbaa !30
  %82 = load i32, ptr %4, align 4, !tbaa !30
  %83 = icmp ne i32 %81, %82
  br i1 %83, label %89, label %84

84:                                               ; preds = %80
  store i32 5, ptr %9, align 4
  br label %142

85:                                               ; preds = %77
  %86 = landingpad { ptr, i32 }
          cleanup
  %87 = extractvalue { ptr, i32 } %86, 0
  store ptr %87, ptr %6, align 8
  %88 = extractvalue { ptr, i32 } %86, 1
  store i32 %88, ptr %7, align 4
  br label %259

89:                                               ; preds = %80
  call void @llvm.lifetime.start.p0(i64 16, ptr %17) #6
  %90 = getelementptr inbounds %class.HighsCutGeneration, ptr %22, i32 0, i32 12
  %91 = load ptr, ptr %90, align 8, !tbaa !37
  %92 = getelementptr inbounds %class.HighsCutGeneration, ptr %22, i32 0, i32 3
  %93 = load i32, ptr %16, align 4, !tbaa !30
  %94 = sext i32 %93 to i64
  %95 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %92, i64 noundef %94) #6
  %96 = load i32, ptr %95, align 4, !tbaa !30
  %97 = sext i32 %96 to i64
  %98 = getelementptr inbounds double, ptr %91, i64 %97
  %99 = load double, ptr %98, align 8, !tbaa !38
  %100 = getelementptr inbounds %class.HighsCutGeneration, ptr %22, i32 0, i32 5
  %101 = invoke { double, double } @_ZmidRK12HighsCDouble(double noundef %99, ptr noundef nonnull align 8 dereferenceable(16) %100)
          to label %102 unwind label %113

102:                                              ; preds = %89
  %103 = getelementptr inbounds { double, double }, ptr %17, i32 0, i32 0
  %104 = extractvalue { double, double } %101, 0
  store double %104, ptr %103, align 8
  %105 = getelementptr inbounds { double, double }, ptr %17, i32 0, i32 1
  %106 = extractvalue { double, double } %101, 1
  store double %106, ptr %105, align 8
  %107 = getelementptr inbounds %class.HighsCutGeneration, ptr %22, i32 0, i32 11
  %108 = load double, ptr %107, align 8, !tbaa !39
  %109 = invoke noundef zeroext i1 @_ZNK12HighsCDoubleleEd(ptr noundef nonnull align 8 dereferenceable(16) %17, double noundef %108)
          to label %110 unwind label %113

110:                                              ; preds = %102
  call void @llvm.lifetime.end.p0(i64 16, ptr %17) #6
  br i1 %109, label %111, label %117

111:                                              ; preds = %110
  %112 = load i32, ptr %16, align 4, !tbaa !30
  store i32 %112, ptr %15, align 4, !tbaa !30
  store i32 5, ptr %9, align 4
  br label %142

113:                                              ; preds = %102, %89
  %114 = landingpad { ptr, i32 }
          cleanup
  %115 = extractvalue { ptr, i32 } %114, 0
  store ptr %115, ptr %6, align 8
  %116 = extractvalue { ptr, i32 } %114, 1
  store i32 %116, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %17) #6
  br label %143

117:                                              ; preds = %110
  %118 = getelementptr inbounds %class.HighsCutGeneration, ptr %22, i32 0, i32 12
  %119 = load ptr, ptr %118, align 8, !tbaa !37
  %120 = getelementptr inbounds %class.HighsCutGeneration, ptr %22, i32 0, i32 3
  %121 = load i32, ptr %16, align 4, !tbaa !30
  %122 = sext i32 %121 to i64
  %123 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %120, i64 noundef %122) #6
  %124 = load i32, ptr %123, align 4, !tbaa !30
  %125 = sext i32 %124 to i64
  %126 = getelementptr inbounds double, ptr %119, i64 %125
  %127 = load double, ptr %126, align 8, !tbaa !38
  %128 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN12HighsCDoublepLEd(ptr noundef nonnull align 8 dereferenceable(16) %14, double noundef %127)
          to label %129 unwind label %138

129:                                              ; preds = %117
  %130 = invoke noundef double @_ZNK12HighsCDoublecvdEv(ptr noundef nonnull align 8 dereferenceable(16) %14)
          to label %131 unwind label %138

131:                                              ; preds = %129
  %132 = load i32, ptr %16, align 4, !tbaa !30
  %133 = sext i32 %132 to i64
  %134 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %5, i64 noundef %133) #6
  store double %130, ptr %134, align 8, !tbaa !38
  br label %135

135:                                              ; preds = %131
  %136 = load i32, ptr %16, align 4, !tbaa !30
  %137 = add nsw i32 %136, 1
  store i32 %137, ptr %16, align 4, !tbaa !30
  br label %80, !llvm.loop !40

138:                                              ; preds = %129, %117
  %139 = landingpad { ptr, i32 }
          cleanup
  %140 = extractvalue { ptr, i32 } %139, 0
  store ptr %140, ptr %6, align 8
  %141 = extractvalue { ptr, i32 } %139, 1
  store i32 %141, ptr %7, align 4
  br label %143

142:                                              ; preds = %111, %84
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #6
  br label %144

143:                                              ; preds = %138, %113
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #6
  br label %258

144:                                              ; preds = %142
  %145 = load i32, ptr %15, align 4, !tbaa !30
  %146 = icmp eq i32 %145, 0
  br i1 %146, label %147, label %148

147:                                              ; preds = %144
  store i1 false, ptr %2, align 1
  store i32 1, ptr %9, align 4
  br label %257

148:                                              ; preds = %144
  call void @llvm.lifetime.start.p0(i64 24, ptr %18) #6
  %149 = getelementptr inbounds %class.anon.352, ptr %18, i32 0, i32 0
  store ptr %15, ptr %149, align 8, !tbaa !5
  %150 = getelementptr inbounds %class.anon.352, ptr %18, i32 0, i32 1
  store ptr %5, ptr %150, align 8, !tbaa !5
  %151 = getelementptr inbounds %class.anon.352, ptr %18, i32 0, i32 2
  store ptr %22, ptr %151, align 8, !tbaa !41
  call void @llvm.lifetime.start.p0(i64 16, ptr %19) #6
  %152 = getelementptr inbounds %class.HighsCutGeneration, ptr %22, i32 0, i32 5
  %153 = invoke { double, double } @_ZNK12HighsCDoublengEv(ptr noundef nonnull align 8 dereferenceable(16) %152)
          to label %154 unwind label %168

154:                                              ; preds = %148
  %155 = getelementptr inbounds { double, double }, ptr %19, i32 0, i32 0
  %156 = extractvalue { double, double } %153, 0
  store double %156, ptr %155, align 8
  %157 = getelementptr inbounds { double, double }, ptr %19, i32 0, i32 1
  %158 = extractvalue { double, double } %153, 1
  store double %158, ptr %157, align 8
  %159 = getelementptr inbounds %class.HighsCutGeneration, ptr %22, i32 0, i32 14
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %159, ptr align 8 %19, i64 16, i1 false), !tbaa.struct !43
  call void @llvm.lifetime.end.p0(i64 16, ptr %19) #6
  %160 = getelementptr inbounds %class.HighsCutGeneration, ptr %22, i32 0, i32 16
  store i8 0, ptr %160, align 1, !tbaa !29
  %161 = getelementptr inbounds %class.HighsCutGeneration, ptr %22, i32 0, i32 15
  store i8 1, ptr %161, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #6
  store i32 0, ptr %20, align 4, !tbaa !30
  br label %162

162:                                              ; preds = %251, %154
  %163 = load i32, ptr %20, align 4, !tbaa !30
  %164 = getelementptr inbounds %class.HighsCutGeneration, ptr %22, i32 0, i32 17
  %165 = load i32, ptr %164, align 4, !tbaa !31
  %166 = icmp ne i32 %163, %165
  br i1 %166, label %172, label %167

167:                                              ; preds = %162
  store i32 8, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #6
  br label %255

168:                                              ; preds = %148
  %169 = landingpad { ptr, i32 }
          cleanup
  %170 = extractvalue { ptr, i32 } %169, 0
  store ptr %170, ptr %6, align 8
  %171 = extractvalue { ptr, i32 } %169, 1
  store i32 %171, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %19) #6
  br label %256

172:                                              ; preds = %162
  %173 = getelementptr inbounds %class.HighsCutGeneration, ptr %22, i32 0, i32 9
  %174 = load i32, ptr %20, align 4, !tbaa !30
  %175 = sext i32 %174 to i64
  %176 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt6vectorIhSaIhEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %173, i64 noundef %175) #6
  %177 = load i8, ptr %176, align 1, !tbaa !32
  %178 = icmp ne i8 %177, 0
  br i1 %178, label %196, label %179

179:                                              ; preds = %172
  %180 = getelementptr inbounds %class.HighsCutGeneration, ptr %22, i32 0, i32 12
  %181 = load ptr, ptr %180, align 8, !tbaa !37
  %182 = load i32, ptr %20, align 4, !tbaa !30
  %183 = sext i32 %182 to i64
  %184 = getelementptr inbounds double, ptr %181, i64 %183
  %185 = load double, ptr %184, align 8, !tbaa !38
  %186 = fcmp olt double %185, 0.000000e+00
  br i1 %186, label %187, label %189

187:                                              ; preds = %179
  %188 = getelementptr inbounds %class.HighsCutGeneration, ptr %22, i32 0, i32 15
  store i8 0, ptr %188, align 8, !tbaa !9
  br label %195

189:                                              ; preds = %179
  %190 = getelementptr inbounds %class.HighsCutGeneration, ptr %22, i32 0, i32 12
  %191 = load ptr, ptr %190, align 8, !tbaa !37
  %192 = load i32, ptr %20, align 4, !tbaa !30
  %193 = sext i32 %192 to i64
  %194 = getelementptr inbounds double, ptr %191, i64 %193
  store double 0.000000e+00, ptr %194, align 8, !tbaa !38
  br label %195

195:                                              ; preds = %189, %187
  br label %251

196:                                              ; preds = %172
  %197 = load i32, ptr %20, align 4, !tbaa !30
  %198 = sext i32 %197 to i64
  %199 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt6vectorIhSaIhEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %8, i64 noundef %198) #6
  %200 = load i8, ptr %199, align 1, !tbaa !32
  %201 = icmp ne i8 %200, 0
  br i1 %201, label %202, label %236

202:                                              ; preds = %196
  %203 = getelementptr inbounds %class.HighsCutGeneration, ptr %22, i32 0, i32 12
  %204 = load ptr, ptr %203, align 8, !tbaa !37
  %205 = load i32, ptr %20, align 4, !tbaa !30
  %206 = sext i32 %205 to i64
  %207 = getelementptr inbounds double, ptr %204, i64 %206
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #6
  %208 = getelementptr inbounds %class.HighsCutGeneration, ptr %22, i32 0, i32 5
  %209 = invoke noundef double @_ZNK12HighsCDoublecvdEv(ptr noundef nonnull align 8 dereferenceable(16) %208)
          to label %210 unwind label %228

210:                                              ; preds = %202
  store double %209, ptr %21, align 8, !tbaa !38
  %211 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3minIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %207, ptr noundef nonnull align 8 dereferenceable(8) %21)
          to label %212 unwind label %228

212:                                              ; preds = %210
  %213 = load double, ptr %211, align 8, !tbaa !38
  %214 = getelementptr inbounds %class.HighsCutGeneration, ptr %22, i32 0, i32 12
  %215 = load ptr, ptr %214, align 8, !tbaa !37
  %216 = load i32, ptr %20, align 4, !tbaa !30
  %217 = sext i32 %216 to i64
  %218 = getelementptr inbounds double, ptr %215, i64 %217
  store double %213, ptr %218, align 8, !tbaa !38
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #6
  %219 = getelementptr inbounds %class.HighsCutGeneration, ptr %22, i32 0, i32 12
  %220 = load ptr, ptr %219, align 8, !tbaa !37
  %221 = load i32, ptr %20, align 4, !tbaa !30
  %222 = sext i32 %221 to i64
  %223 = getelementptr inbounds double, ptr %220, i64 %222
  %224 = load double, ptr %223, align 8, !tbaa !38
  %225 = getelementptr inbounds %class.HighsCutGeneration, ptr %22, i32 0, i32 14
  %226 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN12HighsCDoublepLEd(ptr noundef nonnull align 8 dereferenceable(16) %225, double noundef %224)
          to label %227 unwind label %232

227:                                              ; preds = %212
  br label %250

228:                                              ; preds = %210, %202
  %229 = landingpad { ptr, i32 }
          cleanup
  %230 = extractvalue { ptr, i32 } %229, 0
  store ptr %230, ptr %6, align 8
  %231 = extractvalue { ptr, i32 } %229, 1
  store i32 %231, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #6
  br label %254

232:                                              ; preds = %236, %212
  %233 = landingpad { ptr, i32 }
          cleanup
  %234 = extractvalue { ptr, i32 } %233, 0
  store ptr %234, ptr %6, align 8
  %235 = extractvalue { ptr, i32 } %233, 1
  store i32 %235, ptr %7, align 4
  br label %254

236:                                              ; preds = %196
  %237 = getelementptr inbounds %class.HighsCutGeneration, ptr %22, i32 0, i32 12
  %238 = load ptr, ptr %237, align 8, !tbaa !37
  %239 = load i32, ptr %20, align 4, !tbaa !30
  %240 = sext i32 %239 to i64
  %241 = getelementptr inbounds double, ptr %238, i64 %240
  %242 = load double, ptr %241, align 8, !tbaa !38
  %243 = invoke noundef double @"_ZZN18HighsCutGeneration30separateLiftedMixedBinaryCoverEvENK3$_1clEd"(ptr noundef nonnull align 8 dereferenceable(24) %18, double noundef %242)
          to label %244 unwind label %232

244:                                              ; preds = %236
  %245 = getelementptr inbounds %class.HighsCutGeneration, ptr %22, i32 0, i32 12
  %246 = load ptr, ptr %245, align 8, !tbaa !37
  %247 = load i32, ptr %20, align 4, !tbaa !30
  %248 = sext i32 %247 to i64
  %249 = getelementptr inbounds double, ptr %246, i64 %248
  store double %243, ptr %249, align 8, !tbaa !38
  br label %250

250:                                              ; preds = %244, %227
  br label %251

251:                                              ; preds = %250, %195
  %252 = load i32, ptr %20, align 4, !tbaa !30
  %253 = add nsw i32 %252, 1
  store i32 %253, ptr %20, align 4, !tbaa !30
  br label %162, !llvm.loop !44

254:                                              ; preds = %232, %228
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #6
  br label %256

255:                                              ; preds = %167
  store i1 true, ptr %2, align 1
  store i32 1, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 24, ptr %18) #6
  br label %257

256:                                              ; preds = %254, %168
  call void @llvm.lifetime.end.p0(i64 24, ptr %18) #6
  br label %258

257:                                              ; preds = %255, %147
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %14) #6
  br label %260

258:                                              ; preds = %256, %143
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #6
  br label %259

259:                                              ; preds = %258, %85
  call void @llvm.lifetime.end.p0(i64 16, ptr %14) #6
  br label %262

260:                                              ; preds = %257, %37
  call void @_ZNSt6vectorIhSaIhEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %8) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %8) #6
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %5) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #6
  %261 = load i1, ptr %2, align 1
  ret i1 %261

262:                                              ; preds = %259, %42
  call void @_ZNSt6vectorIhSaIhEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %8) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %8) #6
  br label %263

263:                                              ; preds = %262, %38
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %5) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #6
  br label %264

264:                                              ; preds = %263
  %265 = load ptr, ptr %6, align 8
  %266 = load i32, ptr %7, align 4
  %267 = insertvalue { ptr, i32 } poison, ptr %265, 0
  %268 = insertvalue { ptr, i32 } %267, i32 %266, 1
  resume { ptr, i32 } %268
}

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIhSaIhEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare hidden void @"_Z18pdqsort_branchlessIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEZN18HighsCutGeneration30separateLiftedMixedBinaryCoverEvE3$_0EvT_S9_T0_"(ptr, ptr, ptr) #5

; Function Attrs: mustprogress uwtable
declare dso_local { double, double } @_ZmidRK12HighsCDouble(double noundef, ptr noundef nonnull align 8 dereferenceable(16)) #2

; Function Attrs: mustprogress uwtable
declare dso_local { double, double } @_ZNK12HighsCDoublengEv(ptr noundef nonnull align 8 dereferenceable(16)) #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef double @"_ZZN18HighsCutGeneration30separateLiftedMixedBinaryCoverEvENK3$_1clEd"(ptr noundef nonnull align 8 dereferenceable(24), double noundef) #5 align 2

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress 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 #2 = { mustprogress 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 #3 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #4 = { inlinehint mustprogress 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 #5 = { inlinehint mustprogress 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 #6 = { 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++ TBAA"}
!9 = !{!10, !27, i64 224}
!10 = !{!"_ZTS18HighsCutGeneration", !6, i64 0, !6, i64 8, !11, i64 16, !13, i64 24, !17, i64 48, !17, i64 64, !19, i64 80, !19, i64 104, !23, i64 128, !23, i64 152, !18, i64 176, !18, i64 184, !6, i64 192, !6, i64 200, !17, i64 208, !27, i64 224, !27, i64 225, !28, i64 228, !18, i64 232, !13, i64 240, !19, i64 264}
!11 = !{!"_ZTS11HighsRandom", !12, i64 0}
!12 = !{!"long", !7, i64 0}
!13 = !{!"_ZTSSt6vectorIiSaIiEE", !14, i64 0}
!14 = !{!"_ZTSSt12_Vector_baseIiSaIiEE", !15, i64 0}
!15 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE12_Vector_implE", !16, i64 0}
!16 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!17 = !{!"_ZTS12HighsCDouble", !18, i64 0, !18, i64 8}
!18 = !{!"double", !7, i64 0}
!19 = !{!"_ZTSSt6vectorIdSaIdEE", !20, i64 0}
!20 = !{!"_ZTSSt12_Vector_baseIdSaIdEE", !21, i64 0}
!21 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE12_Vector_implE", !22, i64 0}
!22 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!23 = !{!"_ZTSSt6vectorIhSaIhEE", !24, i64 0}
!24 = !{!"_ZTSSt12_Vector_baseIhSaIhEE", !25, i64 0}
!25 = !{!"_ZTSNSt12_Vector_baseIhSaIhEE12_Vector_implE", !26, i64 0}
!26 = !{!"_ZTSNSt12_Vector_baseIhSaIhEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!27 = !{!"bool", !7, i64 0}
!28 = !{!"int", !7, i64 0}
!29 = !{!10, !27, i64 225}
!30 = !{!28, !28, i64 0}
!31 = !{!10, !28, i64 228}
!32 = !{!7, !7, i64 0}
!33 = distinct !{!33, !34}
!34 = !{!"llvm.loop.mustprogress"}
!35 = !{!36, !6, i64 0}
!36 = !{!"_ZTSZN18HighsCutGeneration30separateLiftedMixedBinaryCoverEvE3$_0", !6, i64 0}
!37 = !{!10, !6, i64 192}
!38 = !{!18, !18, i64 0}
!39 = !{!10, !18, i64 184}
!40 = distinct !{!40, !34}
!41 = !{!42, !6, i64 16}
!42 = !{!"_ZTSZN18HighsCutGeneration30separateLiftedMixedBinaryCoverEvE3$_1", !6, i64 0, !6, i64 8, !6, i64 16}
!43 = !{i64 0, i64 8, !38, i64 8, i64 8, !38}
!44 = distinct !{!44, !34}


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

%"class.std::vector.3" = type { %"struct.std::_Vector_base.4" }
%"struct.std::_Vector_base.4" = type { %"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl" }
%"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl" = type { %"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl_data" }
%"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.8" = type { %"struct.std::_Vector_base.9" }
%"struct.std::_Vector_base.9" = type { %"struct.std::_Vector_base<unsigned char, std::allocator<unsigned char>>::_Vector_impl" }
%"struct.std::_Vector_base<unsigned char, std::allocator<unsigned char>>::_Vector_impl" = type { %"struct.std::_Vector_base<unsigned char, std::allocator<unsigned char>>::_Vector_impl_data" }
%"struct.std::_Vector_base<unsigned char, std::allocator<unsigned char>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%class.HighsCDouble = type { double, double }
%class.anon.352 = type { ptr, ptr, ptr }

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

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIdSaIdEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIhSaIhEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIhSaIhEED2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK12HighsCDoubleleEd(ptr noundef nonnull align 8 dereferenceable(16), double noundef) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt6vectorIhSaIhEEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNKSt6vectorIiSaIiEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN12HighsCDoubleC2Ed(ptr noundef nonnull align 8 dereferenceable(16), double noundef) unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt6vectorIiSaIiEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt6vectorIiSaIiEE3endEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZN12HighsCDoublepLEd(ptr noundef nonnull align 8 dereferenceable(16), double noundef) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef double @_ZNK12HighsCDoublecvdEv(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIdSaIdEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) local_unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3minIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZN18HighsCutGeneration30separateLiftedMixedBinaryCoverEv(ptr noundef nonnull align 8 dereferenceable(288) %0) local_unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca %"class.std::vector.3", align 8
  %3 = alloca %"class.std::vector.8", align 8
  %4 = alloca %class.HighsCDouble, align 8
  %5 = alloca i32, align 4
  %6 = alloca %class.HighsCDouble, align 8
  %7 = alloca %class.anon.352, align 8
  %8 = alloca double, align 8
  %9 = getelementptr inbounds i8, ptr %0, i64 224
  store i8 0, ptr %9, align 8, !tbaa !5
  %10 = getelementptr inbounds i8, ptr %0, i64 225
  store i8 0, ptr %10, align 1, !tbaa !28
  %11 = getelementptr inbounds i8, ptr %0, i64 24
  %12 = tail call noundef i64 @_ZNKSt6vectorIiSaIiEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %11) #5
  %13 = trunc i64 %12 to i32
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %2) #5
  call void @_ZNSt6vectorIdSaIdEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %2) #5
  %sext = shl i64 %12, 32
  %14 = ashr exact i64 %sext, 32
  invoke void @_ZNSt6vectorIdSaIdEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef %14)
          to label %15 unwind label %22

15:                                               ; preds = %1
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %3) #5
  call void @_ZNSt6vectorIhSaIhEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %3) #5
  %16 = getelementptr inbounds i8, ptr %0, i64 228
  %17 = load i32, ptr %16, align 4, !tbaa !29
  %18 = sext i32 %17 to i64
  invoke void @_ZNSt6vectorIhSaIhEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %3, i64 noundef %18)
          to label %19 unwind label %24

19:                                               ; preds = %15
  %20 = icmp eq i32 %13, 0
  br i1 %20, label %117, label %.preheader.preheader

.preheader.preheader:                             ; preds = %19
  %21 = and i64 %12, 4294967295
  br label %.preheader

22:                                               ; preds = %1
  %23 = landingpad { ptr, i32 }
          cleanup
  br label %119

24:                                               ; preds = %26, %15
  %25 = landingpad { ptr, i32 }
          cleanup
  br label %118

26:                                               ; preds = %.preheader
  %27 = call ptr @_ZNSt6vectorIiSaIiEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %11) #5
  %28 = call ptr @_ZNSt6vectorIiSaIiEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %11) #5
  invoke void @"_Z18pdqsort_branchlessIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEZN18HighsCutGeneration30separateLiftedMixedBinaryCoverEvE3$_0EvT_S9_T0_"(ptr %27, ptr %28, ptr nonnull %0)
          to label %33 unwind label %24

.preheader:                                       ; preds = %.preheader.preheader, %.preheader
  %indvars.iv = phi i64 [ 0, %.preheader.preheader ], [ %indvars.iv.next, %.preheader ]
  %29 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %11, i64 noundef %indvars.iv) #5
  %30 = load i32, ptr %29, align 4, !tbaa !30
  %31 = sext i32 %30 to i64
  %32 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt6vectorIhSaIhEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %3, i64 noundef %31) #5
  store i8 1, ptr %32, align 1, !tbaa !31
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %.not = icmp eq i64 %indvars.iv.next, %21
  br i1 %.not, label %26, label %.preheader, !llvm.loop !32

33:                                               ; preds = %26
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %4) #5
  call void @_ZN12HighsCDoubleC2Ed(ptr noundef nonnull align 8 dereferenceable(16) %4, double noundef 0.000000e+00)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %5) #5
  store i32 %13, ptr %5, align 4, !tbaa !30
  %34 = getelementptr inbounds i8, ptr %0, i64 192
  %35 = getelementptr inbounds i8, ptr %0, i64 64
  %36 = getelementptr inbounds i8, ptr %6, i64 8
  %37 = getelementptr inbounds i8, ptr %0, i64 184
  br label %38

38:                                               ; preds = %33, %62
  %indvars.iv63 = phi i64 [ 0, %33 ], [ %indvars.iv.next64, %62 ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %6) #5
  %39 = load ptr, ptr %34, align 8, !tbaa !34
  %40 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %11, i64 noundef %indvars.iv63) #5
  %41 = load i32, ptr %40, align 4, !tbaa !30
  %42 = sext i32 %41 to i64
  %43 = getelementptr inbounds double, ptr %39, i64 %42
  %44 = load double, ptr %43, align 8, !tbaa !35
  %45 = invoke { double, double } @_ZmidRK12HighsCDouble(double noundef %44, ptr noundef nonnull align 8 dereferenceable(16) %35)
          to label %46 unwind label %52

46:                                               ; preds = %38
  %47 = extractvalue { double, double } %45, 0
  store double %47, ptr %6, align 8
  %48 = extractvalue { double, double } %45, 1
  store double %48, ptr %36, align 8
  %49 = load double, ptr %37, align 8, !tbaa !36
  %50 = invoke noundef zeroext i1 @_ZNK12HighsCDoubleleEd(ptr noundef nonnull align 8 dereferenceable(16) %6, double noundef %49)
          to label %51 unwind label %52

51:                                               ; preds = %46
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %6) #5
  br i1 %50, label %thread-pre-split, label %54

52:                                               ; preds = %46, %38
  %53 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %6) #5
  br label %116

54:                                               ; preds = %51
  %55 = load ptr, ptr %34, align 8, !tbaa !34
  %56 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %11, i64 noundef %indvars.iv63) #5
  %57 = load i32, ptr %56, align 4, !tbaa !30
  %58 = sext i32 %57 to i64
  %59 = getelementptr inbounds double, ptr %55, i64 %58
  %60 = load double, ptr %59, align 8, !tbaa !35
  %61 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN12HighsCDoublepLEd(ptr noundef nonnull align 8 dereferenceable(16) %4, double noundef %60)
          to label %62 unwind label %65

62:                                               ; preds = %54
  %63 = call noundef double @_ZNK12HighsCDoublecvdEv(ptr noundef nonnull align 8 dereferenceable(16) %4)
  %64 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef %indvars.iv63) #5
  store double %63, ptr %64, align 8, !tbaa !35
  %indvars.iv.next64 = add nuw nsw i64 %indvars.iv63, 1
  %.not42 = icmp eq i64 %indvars.iv.next64, %21
  br i1 %.not42, label %thread-pre-split.thread, label %38, !llvm.loop !37

65:                                               ; preds = %54
  %66 = landingpad { ptr, i32 }
          cleanup
  br label %116

thread-pre-split:                                 ; preds = %51
  %67 = trunc nuw nsw i64 %indvars.iv63 to i32
  store i32 %67, ptr %5, align 4, !tbaa !30
  %.not72 = icmp eq i64 %indvars.iv63, 0
  br i1 %.not72, label %114, label %thread-pre-split.thread

thread-pre-split.thread:                          ; preds = %62, %thread-pre-split
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %7) #5
  store ptr %5, ptr %7, align 8, !tbaa !38
  %68 = getelementptr inbounds i8, ptr %7, i64 8
  store ptr %2, ptr %68, align 8, !tbaa !38
  %69 = getelementptr inbounds i8, ptr %7, i64 16
  store ptr %0, ptr %69, align 8, !tbaa !39
  %70 = invoke { double, double } @_ZNK12HighsCDoublengEv(ptr noundef nonnull align 8 dereferenceable(16) %35)
          to label %71 unwind label %77

71:                                               ; preds = %thread-pre-split.thread
  %72 = extractvalue { double, double } %70, 0
  %73 = extractvalue { double, double } %70, 1
  %74 = getelementptr inbounds i8, ptr %0, i64 208
  store double %72, ptr %74, align 8, !tbaa !35
  %.sroa.5.0..sroa_idx = getelementptr inbounds i8, ptr %0, i64 216
  store double %73, ptr %.sroa.5.0..sroa_idx, align 8, !tbaa !35
  store i8 0, ptr %10, align 1, !tbaa !28
  store i8 1, ptr %9, align 8, !tbaa !5
  %75 = load i32, ptr %16, align 4, !tbaa !29
  %.not4457 = icmp eq i32 %75, 0
  br i1 %.not4457, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %71
  %76 = getelementptr inbounds i8, ptr %0, i64 152
  br label %79

._crit_edge:                                      ; preds = %110, %71
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7) #5
  br label %114

77:                                               ; preds = %thread-pre-split.thread
  %78 = landingpad { ptr, i32 }
          cleanup
  br label %113

79:                                               ; preds = %.lr.ph, %110
  %indvars.iv66 = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next67, %110 ]
  %80 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt6vectorIhSaIhEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %76, i64 noundef %indvars.iv66) #5
  %81 = load i8, ptr %80, align 1, !tbaa !31
  %.not45 = icmp eq i8 %81, 0
  br i1 %.not45, label %82, label %89

82:                                               ; preds = %79
  %83 = load ptr, ptr %34, align 8, !tbaa !34
  %84 = getelementptr inbounds double, ptr %83, i64 %indvars.iv66
  %85 = load double, ptr %84, align 8, !tbaa !35
  %86 = fcmp olt double %85, 0.000000e+00
  br i1 %86, label %87, label %88

87:                                               ; preds = %82
  store i8 0, ptr %9, align 8, !tbaa !5
  br label %110

88:                                               ; preds = %82
  store double 0.000000e+00, ptr %84, align 8, !tbaa !35
  br label %110

89:                                               ; preds = %79
  %90 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt6vectorIhSaIhEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %3, i64 noundef %indvars.iv66) #5
  %91 = load i8, ptr %90, align 1, !tbaa !31
  %.not46 = icmp eq i8 %91, 0
  %92 = load ptr, ptr %34, align 8, !tbaa !34
  %93 = getelementptr inbounds double, ptr %92, i64 %indvars.iv66
  br i1 %.not46, label %104, label %94

94:                                               ; preds = %89
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #5
  %95 = call noundef double @_ZNK12HighsCDoublecvdEv(ptr noundef nonnull align 8 dereferenceable(16) %35)
  store double %95, ptr %8, align 8, !tbaa !35
  %96 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3minIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %93, ptr noundef nonnull align 8 dereferenceable(8) %8)
  %97 = load double, ptr %96, align 8, !tbaa !35
  %98 = load ptr, ptr %34, align 8, !tbaa !34
  %99 = getelementptr inbounds double, ptr %98, i64 %indvars.iv66
  store double %97, ptr %99, align 8, !tbaa !35
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #5
  %100 = load double, ptr %99, align 8, !tbaa !35
  %101 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN12HighsCDoublepLEd(ptr noundef nonnull align 8 dereferenceable(16) %74, double noundef %100)
          to label %110 unwind label %102

102:                                              ; preds = %104, %94
  %103 = landingpad { ptr, i32 }
          cleanup
  br label %113

104:                                              ; preds = %89
  %105 = load double, ptr %93, align 8, !tbaa !35
  %106 = invoke noundef double @"_ZZN18HighsCutGeneration30separateLiftedMixedBinaryCoverEvENK3$_1clEd"(ptr noundef nonnull align 8 dereferenceable(24) %7, double noundef %105)
          to label %107 unwind label %102

107:                                              ; preds = %104
  %108 = load ptr, ptr %34, align 8, !tbaa !34
  %109 = getelementptr inbounds double, ptr %108, i64 %indvars.iv66
  store double %106, ptr %109, align 8, !tbaa !35
  br label %110

110:                                              ; preds = %107, %94, %87, %88
  %indvars.iv.next67 = add nuw nsw i64 %indvars.iv66, 1
  %111 = load i32, ptr %16, align 4, !tbaa !29
  %112 = zext i32 %111 to i64
  %.not44 = icmp eq i64 %indvars.iv.next67, %112
  br i1 %.not44, label %._crit_edge, label %79, !llvm.loop !41

113:                                              ; preds = %102, %77
  %.pn47 = phi { ptr, i32 } [ %103, %102 ], [ %78, %77 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7) #5
  br label %116

114:                                              ; preds = %thread-pre-split, %._crit_edge
  %115 = phi i1 [ false, %thread-pre-split ], [ true, %._crit_edge ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %4) #5
  br label %117

116:                                              ; preds = %52, %65, %113
  %.pn47.pn = phi { ptr, i32 } [ %.pn47, %113 ], [ %66, %65 ], [ %53, %52 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %4) #5
  br label %118

117:                                              ; preds = %19, %114
  %.1 = phi i1 [ %115, %114 ], [ false, %19 ]
  call void @_ZNSt6vectorIhSaIhEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %3) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %3) #5
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %2) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %2) #5
  ret i1 %.1

118:                                              ; preds = %116, %24
  %.pn47.pn.pn = phi { ptr, i32 } [ %.pn47.pn, %116 ], [ %25, %24 ]
  call void @_ZNSt6vectorIhSaIhEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %3) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %3) #5
  br label %119

119:                                              ; preds = %118, %22
  %.pn47.pn.pn.pn = phi { ptr, i32 } [ %.pn47.pn.pn, %118 ], [ %23, %22 ]
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %2) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %2) #5
  resume { ptr, i32 } %.pn47.pn.pn.pn
}

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIhSaIhEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) local_unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare hidden void @"_Z18pdqsort_branchlessIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEZN18HighsCutGeneration30separateLiftedMixedBinaryCoverEvE3$_0EvT_S9_T0_"(ptr, ptr, ptr) local_unnamed_addr #4

; Function Attrs: mustprogress uwtable
declare dso_local { double, double } @_ZmidRK12HighsCDouble(double noundef, ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
declare dso_local { double, double } @_ZNK12HighsCDoublengEv(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef double @"_ZZN18HighsCutGeneration30separateLiftedMixedBinaryCoverEvENK3$_1clEd"(ptr noundef nonnull align 8 dereferenceable(24), double noundef) local_unnamed_addr #4 align 2

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress 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 #2 = { mustprogress 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 #3 = { inlinehint mustprogress 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 #4 = { inlinehint mustprogress 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 #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, !26, i64 224}
!6 = !{!"_ZTS18HighsCutGeneration", !7, i64 0, !7, i64 8, !10, i64 16, !12, i64 24, !16, i64 48, !16, i64 64, !18, i64 80, !18, i64 104, !22, i64 128, !22, i64 152, !17, i64 176, !17, i64 184, !7, i64 192, !7, i64 200, !16, i64 208, !26, i64 224, !26, i64 225, !27, i64 228, !17, i64 232, !12, i64 240, !18, i64 264}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"_ZTS11HighsRandom", !11, i64 0}
!11 = !{!"long", !8, i64 0}
!12 = !{!"_ZTSSt6vectorIiSaIiEE", !13, i64 0}
!13 = !{!"_ZTSSt12_Vector_baseIiSaIiEE", !14, i64 0}
!14 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE12_Vector_implE", !15, i64 0}
!15 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE17_Vector_impl_dataE", !7, i64 0, !7, i64 8, !7, i64 16}
!16 = !{!"_ZTS12HighsCDouble", !17, i64 0, !17, i64 8}
!17 = !{!"double", !8, i64 0}
!18 = !{!"_ZTSSt6vectorIdSaIdEE", !19, i64 0}
!19 = !{!"_ZTSSt12_Vector_baseIdSaIdEE", !20, i64 0}
!20 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE12_Vector_implE", !21, i64 0}
!21 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE17_Vector_impl_dataE", !7, i64 0, !7, i64 8, !7, i64 16}
!22 = !{!"_ZTSSt6vectorIhSaIhEE", !23, i64 0}
!23 = !{!"_ZTSSt12_Vector_baseIhSaIhEE", !24, i64 0}
!24 = !{!"_ZTSNSt12_Vector_baseIhSaIhEE12_Vector_implE", !25, i64 0}
!25 = !{!"_ZTSNSt12_Vector_baseIhSaIhEE17_Vector_impl_dataE", !7, i64 0, !7, i64 8, !7, i64 16}
!26 = !{!"bool", !8, i64 0}
!27 = !{!"int", !8, i64 0}
!28 = !{!6, !26, i64 225}
!29 = !{!6, !27, i64 228}
!30 = !{!27, !27, i64 0}
!31 = !{!8, !8, i64 0}
!32 = distinct !{!32, !33}
!33 = !{!"llvm.loop.mustprogress"}
!34 = !{!6, !7, i64 192}
!35 = !{!17, !17, i64 0}
!36 = !{!6, !17, i64 184}
!37 = distinct !{!37, !33}
!38 = !{!7, !7, i64 0}
!39 = !{!40, !7, i64 16}
!40 = !{!"_ZTSZN18HighsCutGeneration30separateLiftedMixedBinaryCoverEvE3$_1", !7, i64 0, !7, i64 8, !7, i64 16}
!41 = distinct !{!41, !33}


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