; LLVM IR from ERGO-Code/HiGHS :: src/presolve/ICrash.ll (Z10callICrashRK7HighsLpRK13ICrashOptionsR10ICrashInfo)

; 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.Quadratic = type { %class.HighsLp, %struct.ICrashOptions, %"class.std::vector.23", %struct.HighsSolution, double, double, %"class.std::vector", double, double, %"class.std::vector" }
%class.HighsLp = type { i32, i32, %"class.std::vector", %"class.std::vector", %"class.std::vector", %"class.std::vector", %"class.std::vector", %class.HighsSparseMatrix, i32, double, %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", i32, i32, %"class.std::vector.8", %"class.std::vector.8", %"class.std::vector.13", %struct.HighsNameHash, %struct.HighsNameHash, i32, i32, %struct.HighsScale, i8, i8, i32, i8, %struct.HighsLpMods }
%class.HighsSparseMatrix = type { i32, i32, i32, %"class.std::vector.3", %"class.std::vector.3", %"class.std::vector.3", %"class.std::vector" }
%"class.std::vector.3" = type { %"struct.std::_Vector_base.4" }
%"struct.std::_Vector_base.4" = 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 }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.std::vector.8" = type { %"struct.std::_Vector_base.9" }
%"struct.std::_Vector_base.9" = type { %"struct.std::_Vector_base<std::__cxx11::basic_string<char>, std::allocator<std::__cxx11::basic_string<char>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::__cxx11::basic_string<char>, std::allocator<std::__cxx11::basic_string<char>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::__cxx11::basic_string<char>, std::allocator<std::__cxx11::basic_string<char>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::__cxx11::basic_string<char>, std::allocator<std::__cxx11::basic_string<char>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.13" = type { %"struct.std::_Vector_base.14" }
%"struct.std::_Vector_base.14" = type { %"struct.std::_Vector_base<HighsVarType, std::allocator<HighsVarType>>::_Vector_impl" }
%"struct.std::_Vector_base<HighsVarType, std::allocator<HighsVarType>>::_Vector_impl" = type { %"struct.std::_Vector_base<HighsVarType, std::allocator<HighsVarType>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HighsVarType, std::allocator<HighsVarType>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%struct.HighsNameHash = type { %"class.std::unordered_map" }
%"class.std::unordered_map" = type { %"class.std::_Hashtable" }
%"class.std::_Hashtable" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.std::__detail::_Hash_node_base" = type { ptr }
%"struct.std::__detail::_Prime_rehash_policy" = type { float, i64 }
%struct.HighsScale = type { i32, i8, i32, i32, double, %"class.std::vector", %"class.std::vector" }
%struct.HighsLpMods = type { %"class.std::vector.3", %"class.std::vector.3", %"class.std::vector", %"class.std::vector", %"class.std::vector.13", %"class.std::vector.3", %"class.std::vector", %"class.std::vector.3", %"class.std::vector", %"class.std::vector.3", %"class.std::vector", %"class.std::vector", %"class.std::vector" }
%struct.ICrashOptions = type { i8, i32, double, i32, i32, i8, i8, [6 x i8], %struct.HighsLogOptions }
%struct.HighsLogOptions = type <{ ptr, ptr, ptr, ptr, ptr, ptr, %"class.std::function", ptr, i8, [7 x i8] }>
%"class.std::function" = type { %"class.std::_Function_base", ptr }
%"class.std::_Function_base" = type { %"union.std::_Any_data", ptr }
%"union.std::_Any_data" = type { %"union.std::_Nocopy_types" }
%"union.std::_Nocopy_types" = type { { i64, i64 } }
%"class.std::vector.23" = type { %"struct.std::_Vector_base.24" }
%"struct.std::_Vector_base.24" = type { %"struct.std::_Vector_base<ICrashIterationDetails, std::allocator<ICrashIterationDetails>>::_Vector_impl" }
%"struct.std::_Vector_base<ICrashIterationDetails, std::allocator<ICrashIterationDetails>>::_Vector_impl" = type { %"struct.std::_Vector_base<ICrashIterationDetails, std::allocator<ICrashIterationDetails>>::_Vector_impl_data" }
%"struct.std::_Vector_base<ICrashIterationDetails, std::allocator<ICrashIterationDetails>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%struct.HighsSolution = type { i8, i8, %"class.std::vector", %"class.std::vector", %"class.std::vector", %"class.std::vector" }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = 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 }
%struct.ICrashIterationDetails = type { i32, double, double, double, double, double, double }
%"class.std::chrono::time_point" = type { %"class.std::chrono::duration" }
%"class.std::chrono::duration" = type { i64 }
%"class.std::chrono::duration.28" = type { double }
%struct.ICrashInfo = type { i32, double, double, double, double, double, %"class.std::vector.23", %"class.std::vector", double }

@.str.63 = external hidden unnamed_addr constant [73 x i8], align 1
@.str.90 = external hidden unnamed_addr constant [25 x i8], align 1
@__PRETTY_FUNCTION__._Z10callICrashRK7HighsLpRK13ICrashOptionsR10ICrashInfo = external hidden unnamed_addr constant [77 x i8], align 1
@.str.91 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.92 = external hidden unnamed_addr constant [45 x i8], align 1
@.str.93 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.94 = external hidden unnamed_addr constant [48 x i8], align 1

; 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 uwtable
declare dso_local noundef zeroext i1 @_Z12checkOptionsRK7HighsLp13ICrashOptions(ptr noundef nonnull align 8 dereferenceable(920), ptr noundef) #1

declare void @_Z12highsLogUserRK15HighsLogOptions12HighsLogTypePKcz(ptr noundef nonnull align 8 dereferenceable(89), i32 noundef, ptr noundef, ...) #2

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z12parseOptionsRK7HighsLp13ICrashOptions(ptr dead_on_unwind noalias writable sret(%struct.Quadratic) align 8, ptr noundef nonnull align 8 dereferenceable(920), ptr noundef) #1

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN13ICrashOptionsC2ERKS_(ptr noundef nonnull align 8 dereferenceable(128), ptr noundef nonnull align 8 dereferenceable(128)) unnamed_addr #3 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN13ICrashOptionsD2Ev(ptr noundef nonnull align 8 dereferenceable(128)) unnamed_addr #4 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_Z10initializeR9QuadraticRK13ICrashOptions(ptr noundef nonnull align 8 dereferenceable(1256), ptr noundef nonnull align 8 dereferenceable(128)) #1

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z6updateR9Quadratic(ptr noundef nonnull align 8 dereferenceable(1256)) #1

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z11fillDetailsiRK9Quadratic(ptr dead_on_unwind noalias writable sret(%struct.ICrashIterationDetails) align 8, i32 noundef, ptr noundef nonnull align 8 dereferenceable(1256)) #1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_Z14fillICrashInfoiR10ICrashInfo(i32 noundef, ptr noundef nonnull align 8 dereferenceable(104)) #5

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z16updateParametersR9QuadraticRK13ICrashOptionsi(ptr noundef nonnull align 8 dereferenceable(1256), ptr noundef nonnull align 8 dereferenceable(128), i32 noundef) #1

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_Z15solveSubproblemR9QuadraticRK13ICrashOptions(ptr noundef nonnull align 8 dereferenceable(1256), ptr noundef nonnull align 8 dereferenceable(128)) #1

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z16reportSubproblem13ICrashOptionsRK9Quadratici(ptr noundef, ptr noundef nonnull align 8 dereferenceable(1256), i32 noundef) #1

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z13reportOptionsRK13ICrashOptions(ptr noundef nonnull align 8 dereferenceable(128)) #1

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_Z10callICrashRK7HighsLpRK13ICrashOptionsR10ICrashInfo(ptr noundef nonnull align 8 dereferenceable(920) %0, ptr noundef nonnull align 8 dereferenceable(128) %1, ptr noundef nonnull align 8 dereferenceable(104) %2) #1 personality ptr @__gxx_personality_v0 {
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca %struct.ICrashOptions, align 8
  %9 = alloca ptr, align 8
  %10 = alloca i32, align 4
  %11 = alloca %struct.Quadratic, align 8
  %12 = alloca %struct.ICrashOptions, align 8
  %13 = alloca %struct.ICrashOptions, align 8
  %14 = alloca %struct.ICrashIterationDetails, align 8
  %15 = alloca double, align 8
  %16 = alloca %"class.std::chrono::time_point", align 8
  %17 = alloca %"class.std::chrono::time_point", align 8
  %18 = alloca %"class.std::chrono::time_point", align 8
  %19 = alloca %"class.std::chrono::time_point", align 8
  %20 = alloca %"class.std::chrono::duration.28", align 8
  %21 = alloca %"class.std::chrono::time_point", align 8
  %22 = alloca i32, align 4
  %23 = alloca %"class.std::chrono::time_point", align 8
  %24 = alloca i8, align 1
  %25 = alloca i32, align 4
  %26 = alloca %"class.std::chrono::time_point", align 8
  %27 = alloca %"class.std::chrono::duration.28", align 8
  %28 = alloca %"class.std::chrono::duration", align 8
  %29 = alloca %struct.ICrashOptions, align 8
  %30 = alloca %struct.ICrashIterationDetails, align 8
  %31 = alloca %"class.std::chrono::time_point", align 8
  %32 = alloca %"class.std::chrono::duration.28", align 8
  %33 = alloca %"class.std::chrono::duration", align 8
  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
  %34 = load ptr, ptr %5, align 8, !tbaa !5
  %35 = load ptr, ptr %6, align 8, !tbaa !5
  call void @_ZN13ICrashOptionsC2ERKS_(ptr noundef nonnull align 8 dereferenceable(128) %8, ptr noundef nonnull align 8 dereferenceable(128) %35)
  %36 = invoke noundef zeroext i1 @_Z12checkOptionsRK7HighsLp13ICrashOptions(ptr noundef nonnull align 8 dereferenceable(920) %34, ptr noundef %8)
          to label %37 unwind label %40

37:                                               ; preds = %3
  %38 = xor i1 %36, true
  call void @_ZN13ICrashOptionsD2Ev(ptr noundef nonnull align 8 dereferenceable(128) %8) #9
  br i1 %38, label %39, label %44

39:                                               ; preds = %37
  store i32 -1, ptr %4, align 4
  br label %253

40:                                               ; preds = %3
  %41 = landingpad { ptr, i32 }
          cleanup
  %42 = extractvalue { ptr, i32 } %41, 0
  store ptr %42, ptr %9, align 8
  %43 = extractvalue { ptr, i32 } %41, 1
  store i32 %43, ptr %10, align 4
  call void @_ZN13ICrashOptionsD2Ev(ptr noundef nonnull align 8 dereferenceable(128) %8) #9
  br label %255

44:                                               ; preds = %37
  %45 = load ptr, ptr %5, align 8, !tbaa !5
  %46 = getelementptr inbounds %class.HighsLp, ptr %45, i32 0, i32 7
  %47 = call noundef zeroext i1 @_ZNK17HighsSparseMatrix9isColwiseEv(ptr noundef nonnull align 8 dereferenceable(112) %46)
  br i1 %47, label %48, label %49

48:                                               ; preds = %44
  br label %51

49:                                               ; preds = %44
  call void @__assert_fail(ptr noundef @.str.90, ptr noundef @.str.63, i32 noundef 402, ptr noundef @__PRETTY_FUNCTION__._Z10callICrashRK7HighsLpRK13ICrashOptionsR10ICrashInfo) #10
  unreachable

50:                                               ; No predecessors!
  br label %51

51:                                               ; preds = %50, %48
  call void @llvm.lifetime.start.p0(i64 1256, ptr %11) #9
  %52 = load ptr, ptr %5, align 8, !tbaa !5
  %53 = load ptr, ptr %6, align 8, !tbaa !5
  call void @_ZN13ICrashOptionsC2ERKS_(ptr noundef nonnull align 8 dereferenceable(128) %12, ptr noundef nonnull align 8 dereferenceable(128) %53)
  invoke void @_Z12parseOptionsRK7HighsLp13ICrashOptions(ptr dead_on_unwind writable sret(%struct.Quadratic) align 8 %11, ptr noundef nonnull align 8 dereferenceable(920) %52, ptr noundef %12)
          to label %54 unwind label %96

54:                                               ; preds = %51
  call void @_ZN13ICrashOptionsD2Ev(ptr noundef nonnull align 8 dereferenceable(128) %12) #9
  %55 = load ptr, ptr %6, align 8, !tbaa !5
  invoke void @_Z13reportOptionsRK13ICrashOptions(ptr noundef nonnull align 8 dereferenceable(128) %55)
          to label %56 unwind label %100

56:                                               ; preds = %54
  %57 = load ptr, ptr %6, align 8, !tbaa !5
  %58 = invoke noundef zeroext i1 @_Z10initializeR9QuadraticRK13ICrashOptions(ptr noundef nonnull align 8 dereferenceable(1256) %11, ptr noundef nonnull align 8 dereferenceable(128) %57)
          to label %59 unwind label %100

59:                                               ; preds = %56
  invoke void @_Z6updateR9Quadratic(ptr noundef nonnull align 8 dereferenceable(1256) %11)
          to label %60 unwind label %100

60:                                               ; preds = %59
  %61 = load ptr, ptr %6, align 8, !tbaa !5
  invoke void @_ZN13ICrashOptionsC2ERKS_(ptr noundef nonnull align 8 dereferenceable(128) %13, ptr noundef nonnull align 8 dereferenceable(128) %61)
          to label %62 unwind label %100

62:                                               ; preds = %60
  invoke void @_Z16reportSubproblem13ICrashOptionsRK9Quadratici(ptr noundef %13, ptr noundef nonnull align 8 dereferenceable(1256) %11, i32 noundef 0)
          to label %63 unwind label %104

63:                                               ; preds = %62
  call void @_ZN13ICrashOptionsD2Ev(ptr noundef nonnull align 8 dereferenceable(128) %13) #9
  %64 = getelementptr inbounds %struct.Quadratic, ptr %11, i32 0, i32 2
  call void @llvm.lifetime.start.p0(i64 56, ptr %14) #9
  invoke void @_Z11fillDetailsiRK9Quadratic(ptr dead_on_unwind writable sret(%struct.ICrashIterationDetails) align 8 %14, i32 noundef 0, ptr noundef nonnull align 8 dereferenceable(1256) %11)
          to label %65 unwind label %108

65:                                               ; preds = %63
  invoke void @_ZNSt6vectorI22ICrashIterationDetailsSaIS0_EE9push_backEOS0_(ptr noundef nonnull align 8 dereferenceable(24) %64, ptr noundef nonnull align 8 dereferenceable(56) %14)
          to label %66 unwind label %108

66:                                               ; preds = %65
  call void @llvm.lifetime.end.p0(i64 56, ptr %14) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #9
  %67 = getelementptr inbounds %struct.Quadratic, ptr %11, i32 0, i32 7
  %68 = load double, ptr %67, align 8, !tbaa !9
  store double %68, ptr %15, align 8, !tbaa !55
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #9
  invoke void @_ZNSt6chrono10time_pointINS_3_V212system_clockENS_8durationIlSt5ratioILl1ELl1000000000EEEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %16)
          to label %69 unwind label %112

69:                                               ; preds = %66
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #9
  invoke void @_ZNSt6chrono10time_pointINS_3_V212system_clockENS_8durationIlSt5ratioILl1ELl1000000000EEEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %17)
          to label %70 unwind label %116

70:                                               ; preds = %69
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #9
  invoke void @_ZNSt6chrono10time_pointINS_3_V212system_clockENS_8durationIlSt5ratioILl1ELl1000000000EEEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %18)
          to label %71 unwind label %120

71:                                               ; preds = %70
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #9
  invoke void @_ZNSt6chrono10time_pointINS_3_V212system_clockENS_8durationIlSt5ratioILl1ELl1000000000EEEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %19)
          to label %72 unwind label %124

72:                                               ; preds = %71
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #9
  %73 = call i64 @_ZNSt6chrono3_V212system_clock3nowEv() #9
  %74 = getelementptr inbounds %"class.std::chrono::time_point", ptr %21, i32 0, i32 0
  %75 = getelementptr inbounds %"class.std::chrono::duration", ptr %74, i32 0, i32 0
  store i64 %73, ptr %75, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %16, ptr align 8 %21, i64 8, i1 false), !tbaa.struct !56
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #9
  store i32 0, ptr %22, align 4, !tbaa !58
  store i32 1, ptr %22, align 4, !tbaa !58
  br label %76

76:                                               ; preds = %205, %72
  %77 = load i32, ptr %22, align 4, !tbaa !58
  %78 = load ptr, ptr %6, align 8, !tbaa !5
  %79 = getelementptr inbounds %struct.ICrashOptions, ptr %78, i32 0, i32 3
  %80 = load i32, ptr %79, align 8, !tbaa !59
  %81 = icmp sle i32 %77, %80
  br i1 %81, label %82, label %209

82:                                               ; preds = %76
  %83 = load ptr, ptr %6, align 8, !tbaa !5
  %84 = load i32, ptr %22, align 4, !tbaa !58
  invoke void @_Z16updateParametersR9QuadraticRK13ICrashOptionsi(ptr noundef nonnull align 8 dereferenceable(1256) %11, ptr noundef nonnull align 8 dereferenceable(128) %83, i32 noundef %84)
          to label %85 unwind label %128

85:                                               ; preds = %82
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #9
  %86 = call i64 @_ZNSt6chrono3_V212system_clock3nowEv() #9
  %87 = getelementptr inbounds %"class.std::chrono::time_point", ptr %23, i32 0, i32 0
  %88 = getelementptr inbounds %"class.std::chrono::duration", ptr %87, i32 0, i32 0
  store i64 %86, ptr %88, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %18, ptr align 8 %23, i64 8, i1 false), !tbaa.struct !56
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %24) #9
  %89 = load ptr, ptr %6, align 8, !tbaa !5
  %90 = invoke noundef zeroext i1 @_Z15solveSubproblemR9QuadraticRK13ICrashOptions(ptr noundef nonnull align 8 dereferenceable(1256) %11, ptr noundef nonnull align 8 dereferenceable(128) %89)
          to label %91 unwind label %132

91:                                               ; preds = %85
  %92 = zext i1 %90 to i8
  store i8 %92, ptr %24, align 1, !tbaa !60
  %93 = load i8, ptr %24, align 1, !tbaa !60, !range !61, !noundef !62
  %94 = trunc i8 %93 to i1
  br i1 %94, label %136, label %95

95:                                               ; preds = %91
  store i32 -1, ptr %4, align 4
  store i32 1, ptr %25, align 4
  br label %202

96:                                               ; preds = %51
  %97 = landingpad { ptr, i32 }
          cleanup
  %98 = extractvalue { ptr, i32 } %97, 0
  store ptr %98, ptr %9, align 8
  %99 = extractvalue { ptr, i32 } %97, 1
  store i32 %99, ptr %10, align 4
  call void @_ZN13ICrashOptionsD2Ev(ptr noundef nonnull align 8 dereferenceable(128) %12) #9
  br label %252

100:                                              ; preds = %60, %59, %56, %54
  %101 = landingpad { ptr, i32 }
          cleanup
  %102 = extractvalue { ptr, i32 } %101, 0
  store ptr %102, ptr %9, align 8
  %103 = extractvalue { ptr, i32 } %101, 1
  store i32 %103, ptr %10, align 4
  br label %251

104:                                              ; preds = %62
  %105 = landingpad { ptr, i32 }
          cleanup
  %106 = extractvalue { ptr, i32 } %105, 0
  store ptr %106, ptr %9, align 8
  %107 = extractvalue { ptr, i32 } %105, 1
  store i32 %107, ptr %10, align 4
  call void @_ZN13ICrashOptionsD2Ev(ptr noundef nonnull align 8 dereferenceable(128) %13) #9
  br label %251

108:                                              ; preds = %65, %63
  %109 = landingpad { ptr, i32 }
          cleanup
  %110 = extractvalue { ptr, i32 } %109, 0
  store ptr %110, ptr %9, align 8
  %111 = extractvalue { ptr, i32 } %109, 1
  store i32 %111, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 56, ptr %14) #9
  br label %251

112:                                              ; preds = %66
  %113 = landingpad { ptr, i32 }
          cleanup
  %114 = extractvalue { ptr, i32 } %113, 0
  store ptr %114, ptr %9, align 8
  %115 = extractvalue { ptr, i32 } %113, 1
  store i32 %115, ptr %10, align 4
  br label %250

116:                                              ; preds = %69
  %117 = landingpad { ptr, i32 }
          cleanup
  %118 = extractvalue { ptr, i32 } %117, 0
  store ptr %118, ptr %9, align 8
  %119 = extractvalue { ptr, i32 } %117, 1
  store i32 %119, ptr %10, align 4
  br label %249

120:                                              ; preds = %70
  %121 = landingpad { ptr, i32 }
          cleanup
  %122 = extractvalue { ptr, i32 } %121, 0
  store ptr %122, ptr %9, align 8
  %123 = extractvalue { ptr, i32 } %121, 1
  store i32 %123, ptr %10, align 4
  br label %248

124:                                              ; preds = %71
  %125 = landingpad { ptr, i32 }
          cleanup
  %126 = extractvalue { ptr, i32 } %125, 0
  store ptr %126, ptr %9, align 8
  %127 = extractvalue { ptr, i32 } %125, 1
  store i32 %127, ptr %10, align 4
  br label %247

128:                                              ; preds = %232, %230, %209, %82
  %129 = landingpad { ptr, i32 }
          cleanup
  %130 = extractvalue { ptr, i32 } %129, 0
  store ptr %130, ptr %9, align 8
  %131 = extractvalue { ptr, i32 } %129, 1
  store i32 %131, ptr %10, align 4
  br label %246

132:                                              ; preds = %197, %185, %174, %144, %143, %85
  %133 = landingpad { ptr, i32 }
          cleanup
  %134 = extractvalue { ptr, i32 } %133, 0
  store ptr %134, ptr %9, align 8
  %135 = extractvalue { ptr, i32 } %133, 1
  store i32 %135, ptr %10, align 4
  br label %208

136:                                              ; preds = %91
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #9
  %137 = call i64 @_ZNSt6chrono3_V212system_clock3nowEv() #9
  %138 = getelementptr inbounds %"class.std::chrono::time_point", ptr %26, i32 0, i32 0
  %139 = getelementptr inbounds %"class.std::chrono::duration", ptr %138, i32 0, i32 0
  store i64 %137, ptr %139, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %19, ptr align 8 %26, i64 8, i1 false), !tbaa.struct !56
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #9
  %140 = invoke i64 @_ZNSt6chronomiINS_3_V212system_clockENS_8durationIlSt5ratioILl1ELl1000000000EEEES6_EENSt11common_typeIJT0_T1_EE4typeERKNS_10time_pointIT_S8_EERKNSC_ISD_S9_EE(ptr noundef nonnull align 8 dereferenceable(8) %19, ptr noundef nonnull align 8 dereferenceable(8) %18)
          to label %141 unwind label %161

141:                                              ; preds = %136
  %142 = getelementptr inbounds %"class.std::chrono::duration", ptr %28, i32 0, i32 0
  store i64 %140, ptr %142, align 8
  invoke void @_ZNSt6chrono8durationIdSt5ratioILl1ELl1EEEC2IlS1_ILl1ELl1000000000EEvEERKNS0_IT_T0_EE(ptr noundef nonnull align 8 dereferenceable(8) %27, ptr noundef nonnull align 8 dereferenceable(8) %28)
          to label %143 unwind label %161

143:                                              ; preds = %141
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %20, ptr align 8 %27, i64 8, i1 false), !tbaa.struct !63
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #9
  invoke void @_Z6updateR9Quadratic(ptr noundef nonnull align 8 dereferenceable(1256) %11)
          to label %144 unwind label %132

144:                                              ; preds = %143
  %145 = load ptr, ptr %6, align 8, !tbaa !5
  invoke void @_ZN13ICrashOptionsC2ERKS_(ptr noundef nonnull align 8 dereferenceable(128) %29, ptr noundef nonnull align 8 dereferenceable(128) %145)
          to label %146 unwind label %132

146:                                              ; preds = %144
  %147 = load i32, ptr %22, align 4, !tbaa !58
  invoke void @_Z16reportSubproblem13ICrashOptionsRK9Quadratici(ptr noundef %29, ptr noundef nonnull align 8 dereferenceable(1256) %11, i32 noundef %147)
          to label %148 unwind label %165

148:                                              ; preds = %146
  call void @_ZN13ICrashOptionsD2Ev(ptr noundef nonnull align 8 dereferenceable(128) %29) #9
  %149 = getelementptr inbounds %struct.Quadratic, ptr %11, i32 0, i32 2
  call void @llvm.lifetime.start.p0(i64 56, ptr %30) #9
  %150 = load i32, ptr %22, align 4, !tbaa !58
  invoke void @_Z11fillDetailsiRK9Quadratic(ptr dead_on_unwind writable sret(%struct.ICrashIterationDetails) align 8 %30, i32 noundef %150, ptr noundef nonnull align 8 dereferenceable(1256) %11)
          to label %151 unwind label %169

151:                                              ; preds = %148
  invoke void @_ZNSt6vectorI22ICrashIterationDetailsSaIS0_EE9push_backEOS0_(ptr noundef nonnull align 8 dereferenceable(24) %149, ptr noundef nonnull align 8 dereferenceable(56) %30)
          to label %152 unwind label %169

152:                                              ; preds = %151
  call void @llvm.lifetime.end.p0(i64 56, ptr %30) #9
  %153 = load i32, ptr %22, align 4, !tbaa !58
  %154 = add nsw i32 %153, 1
  %155 = getelementptr inbounds %struct.Quadratic, ptr %11, i32 0, i32 2
  %156 = call noundef i64 @_ZNKSt6vectorI22ICrashIterationDetailsSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %155) #9
  %157 = trunc i64 %156 to i32
  %158 = icmp eq i32 %154, %157
  br i1 %158, label %159, label %160

159:                                              ; preds = %152
  br label %174

160:                                              ; preds = %152
  call void @__assert_fail(ptr noundef @.str.91, ptr noundef @.str.63, i32 noundef 435, ptr noundef @__PRETTY_FUNCTION__._Z10callICrashRK7HighsLpRK13ICrashOptionsR10ICrashInfo) #10
  unreachable

161:                                              ; preds = %141, %136
  %162 = landingpad { ptr, i32 }
          cleanup
  %163 = extractvalue { ptr, i32 } %162, 0
  store ptr %163, ptr %9, align 8
  %164 = extractvalue { ptr, i32 } %162, 1
  store i32 %164, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #9
  br label %208

165:                                              ; preds = %146
  %166 = landingpad { ptr, i32 }
          cleanup
  %167 = extractvalue { ptr, i32 } %166, 0
  store ptr %167, ptr %9, align 8
  %168 = extractvalue { ptr, i32 } %166, 1
  store i32 %168, ptr %10, align 4
  call void @_ZN13ICrashOptionsD2Ev(ptr noundef nonnull align 8 dereferenceable(128) %29) #9
  br label %208

169:                                              ; preds = %151, %148
  %170 = landingpad { ptr, i32 }
          cleanup
  %171 = extractvalue { ptr, i32 } %170, 0
  store ptr %171, ptr %9, align 8
  %172 = extractvalue { ptr, i32 } %170, 1
  store i32 %172, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 56, ptr %30) #9
  br label %208

173:                                              ; No predecessors!
  br label %174

174:                                              ; preds = %173, %159
  %175 = invoke noundef double @_ZNKSt6chrono8durationIdSt5ratioILl1ELl1EEE5countEv(ptr noundef nonnull align 8 dereferenceable(8) %20)
          to label %176 unwind label %132

176:                                              ; preds = %174
  %177 = getelementptr inbounds %struct.Quadratic, ptr %11, i32 0, i32 2
  %178 = load i32, ptr %22, align 4, !tbaa !58
  %179 = sext i32 %178 to i64
  %180 = call noundef nonnull align 8 dereferenceable(56) ptr @_ZNSt6vectorI22ICrashIterationDetailsSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %177, i64 noundef %179) #9
  %181 = getelementptr inbounds %struct.ICrashIterationDetails, ptr %180, i32 0, i32 6
  store double %175, ptr %181, align 8, !tbaa !64
  %182 = getelementptr inbounds %struct.Quadratic, ptr %11, i32 0, i32 7
  %183 = load double, ptr %182, align 8, !tbaa !9
  %184 = fcmp olt double %183, 1.000000e-08
  br i1 %184, label %185, label %191

185:                                              ; preds = %176
  %186 = load ptr, ptr %6, align 8, !tbaa !5
  %187 = getelementptr inbounds %struct.ICrashOptions, ptr %186, i32 0, i32 8
  invoke void (ptr, i32, ptr, ...) @_Z12highsLogUserRK15HighsLogOptions12HighsLogTypePKcz(ptr noundef nonnull align 8 dereferenceable(89) %187, i32 noundef 1, ptr noundef @.str.92, double noundef 1.000000e-08)
          to label %188 unwind label %132

188:                                              ; preds = %185
  %189 = load i32, ptr %22, align 4, !tbaa !58
  %190 = add nsw i32 %189, 1
  store i32 %190, ptr %22, align 4, !tbaa !58
  store i32 2, ptr %25, align 4
  br label %202

191:                                              ; preds = %176
  %192 = getelementptr inbounds %struct.Quadratic, ptr %11, i32 0, i32 7
  %193 = load double, ptr %192, align 8, !tbaa !9
  %194 = load double, ptr %15, align 8, !tbaa !55
  %195 = fmul double 5.000000e+00, %194
  %196 = fcmp ogt double %193, %195
  br i1 %196, label %197, label %201

197:                                              ; preds = %191
  %198 = load ptr, ptr %6, align 8, !tbaa !5
  %199 = getelementptr inbounds %struct.ICrashOptions, ptr %198, i32 0, i32 8
  invoke void (ptr, i32, ptr, ...) @_Z12highsLogUserRK15HighsLogOptions12HighsLogTypePKcz(ptr noundef nonnull align 8 dereferenceable(89) %199, i32 noundef 1, ptr noundef @.str.93)
          to label %200 unwind label %132

200:                                              ; preds = %197
  store i32 -1, ptr %4, align 4
  store i32 1, ptr %25, align 4
  br label %202

201:                                              ; preds = %191
  store i32 0, ptr %25, align 4
  br label %202

202:                                              ; preds = %201, %200, %188, %95
  call void @llvm.lifetime.end.p0(i64 1, ptr %24) #9
  %203 = load i32, ptr %25, align 4
  switch i32 %203, label %245 [
    i32 0, label %204
    i32 2, label %209
  ]

204:                                              ; preds = %202
  br label %205

205:                                              ; preds = %204
  %206 = load i32, ptr %22, align 4, !tbaa !58
  %207 = add nsw i32 %206, 1
  store i32 %207, ptr %22, align 4, !tbaa !58
  br label %76, !llvm.loop !66

208:                                              ; preds = %169, %165, %161, %132
  call void @llvm.lifetime.end.p0(i64 1, ptr %24) #9
  br label %246

209:                                              ; preds = %202, %76
  %210 = load i32, ptr %22, align 4, !tbaa !58
  %211 = add nsw i32 %210, -1
  store i32 %211, ptr %22, align 4, !tbaa !58
  %212 = getelementptr inbounds %struct.Quadratic, ptr %11, i32 0, i32 2
  %213 = load ptr, ptr %7, align 8, !tbaa !5
  %214 = getelementptr inbounds %struct.ICrashInfo, ptr %213, i32 0, i32 6
  %215 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorI22ICrashIterationDetailsSaIS0_EEaSEOS2_(ptr noundef nonnull align 8 dereferenceable(24) %214, ptr noundef nonnull align 8 dereferenceable(24) %212) #9
  %216 = load i32, ptr %22, align 4, !tbaa !58
  %217 = load ptr, ptr %7, align 8, !tbaa !5
  call void @_Z14fillICrashInfoiR10ICrashInfo(i32 noundef %216, ptr noundef nonnull align 8 dereferenceable(104) %217)
  %218 = getelementptr inbounds %struct.Quadratic, ptr %11, i32 0, i32 3
  %219 = getelementptr inbounds %struct.HighsSolution, ptr %218, i32 0, i32 2
  %220 = load ptr, ptr %7, align 8, !tbaa !5
  %221 = getelementptr inbounds %struct.ICrashInfo, ptr %220, i32 0, i32 7
  %222 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIdSaIdEEaSERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %221, ptr noundef nonnull align 8 dereferenceable(24) %219)
          to label %223 unwind label %128

223:                                              ; preds = %209
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #9
  %224 = call i64 @_ZNSt6chrono3_V212system_clock3nowEv() #9
  %225 = getelementptr inbounds %"class.std::chrono::time_point", ptr %31, i32 0, i32 0
  %226 = getelementptr inbounds %"class.std::chrono::duration", ptr %225, i32 0, i32 0
  store i64 %224, ptr %226, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %17, ptr align 8 %31, i64 8, i1 false), !tbaa.struct !56
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #9
  %227 = invoke i64 @_ZNSt6chronomiINS_3_V212system_clockENS_8durationIlSt5ratioILl1ELl1000000000EEEES6_EENSt11common_typeIJT0_T1_EE4typeERKNS_10time_pointIT_S8_EERKNSC_ISD_S9_EE(ptr noundef nonnull align 8 dereferenceable(8) %17, ptr noundef nonnull align 8 dereferenceable(8) %16)
          to label %228 unwind label %241

228:                                              ; preds = %223
  %229 = getelementptr inbounds %"class.std::chrono::duration", ptr %33, i32 0, i32 0
  store i64 %227, ptr %229, align 8
  invoke void @_ZNSt6chrono8durationIdSt5ratioILl1ELl1EEEC2IlS1_ILl1ELl1000000000EEvEERKNS0_IT_T0_EE(ptr noundef nonnull align 8 dereferenceable(8) %32, ptr noundef nonnull align 8 dereferenceable(8) %33)
          to label %230 unwind label %241

230:                                              ; preds = %228
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %20, ptr align 8 %32, i64 8, i1 false), !tbaa.struct !63
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #9
  %231 = invoke noundef double @_ZNKSt6chrono8durationIdSt5ratioILl1ELl1EEE5countEv(ptr noundef nonnull align 8 dereferenceable(8) %20)
          to label %232 unwind label %128

232:                                              ; preds = %230
  %233 = load ptr, ptr %7, align 8, !tbaa !5
  %234 = getelementptr inbounds %struct.ICrashInfo, ptr %233, i32 0, i32 8
  store double %231, ptr %234, align 8, !tbaa !68
  %235 = load ptr, ptr %6, align 8, !tbaa !5
  %236 = getelementptr inbounds %struct.ICrashOptions, ptr %235, i32 0, i32 8
  %237 = load ptr, ptr %7, align 8, !tbaa !5
  %238 = getelementptr inbounds %struct.ICrashInfo, ptr %237, i32 0, i32 8
  %239 = load double, ptr %238, align 8, !tbaa !68
  invoke void (ptr, i32, ptr, ...) @_Z12highsLogUserRK15HighsLogOptions12HighsLogTypePKcz(ptr noundef nonnull align 8 dereferenceable(89) %236, i32 noundef 1, ptr noundef @.str.94, double noundef %239)
          to label %240 unwind label %128

240:                                              ; preds = %232
  store i32 0, ptr %4, align 4
  store i32 1, ptr %25, align 4
  br label %245

241:                                              ; preds = %228, %223
  %242 = landingpad { ptr, i32 }
          cleanup
  %243 = extractvalue { ptr, i32 } %242, 0
  store ptr %243, ptr %9, align 8
  %244 = extractvalue { ptr, i32 } %242, 1
  store i32 %244, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #9
  br label %246

245:                                              ; preds = %240, %202
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #9
  call void @_ZN9QuadraticD2Ev(ptr noundef nonnull align 8 dereferenceable(1256) %11) #9
  call void @llvm.lifetime.end.p0(i64 1256, ptr %11) #9
  br label %253

246:                                              ; preds = %241, %208, %128
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #9
  br label %247

247:                                              ; preds = %246, %124
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #9
  br label %248

248:                                              ; preds = %247, %120
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #9
  br label %249

249:                                              ; preds = %248, %116
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #9
  br label %250

250:                                              ; preds = %249, %112
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #9
  br label %251

251:                                              ; preds = %250, %108, %104, %100
  call void @_ZN9QuadraticD2Ev(ptr noundef nonnull align 8 dereferenceable(1256) %11) #9
  br label %252

252:                                              ; preds = %251, %96
  call void @llvm.lifetime.end.p0(i64 1256, ptr %11) #9
  br label %255

253:                                              ; preds = %245, %39
  %254 = load i32, ptr %4, align 4
  ret i32 %254

255:                                              ; preds = %252, %40
  %256 = load ptr, ptr %9, align 8
  %257 = load i32, ptr %10, align 4
  %258 = insertvalue { ptr, i32 } poison, ptr %256, 0
  %259 = insertvalue { ptr, i32 } %258, i32 %257, 1
  resume { ptr, i32 } %259
}

declare noundef zeroext i1 @_ZNK17HighsSparseMatrix9isColwiseEv(ptr noundef nonnull align 8 dereferenceable(112)) #2

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

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

; Function Attrs: nounwind
declare i64 @_ZNSt6chrono3_V212system_clock3nowEv() #7

; 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) #8

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

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN9QuadraticD2Ev(ptr noundef nonnull align 8 dereferenceable(1256)) unnamed_addr #4 align 2

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { 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 #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 = { 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 #6 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #9 = { nounwind }
attributes #10 = { noreturn nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !24, i64 1216}
!10 = !{!"_ZTS9Quadratic", !11, i64 0, !45, i64 920, !50, i64 1048, !54, i64 1072, !24, i64 1176, !24, i64 1184, !13, i64 1192, !24, i64 1216, !24, i64 1224, !13, i64 1232}
!11 = !{!"_ZTS7HighsLp", !12, i64 0, !12, i64 4, !13, i64 8, !13, i64 32, !13, i64 56, !13, i64 80, !13, i64 104, !17, i64 128, !23, i64 240, !24, i64 248, !25, i64 256, !25, i64 288, !12, i64 320, !12, i64 324, !28, i64 328, !28, i64 352, !32, i64 376, !36, i64 400, !36, i64 456, !12, i64 512, !12, i64 516, !42, i64 520, !43, i64 592, !43, i64 593, !12, i64 596, !43, i64 600, !44, i64 608}
!12 = !{!"int", !7, i64 0}
!13 = !{!"_ZTSSt6vectorIdSaIdEE", !14, i64 0}
!14 = !{!"_ZTSSt12_Vector_baseIdSaIdEE", !15, i64 0}
!15 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE12_Vector_implE", !16, i64 0}
!16 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!17 = !{!"_ZTS17HighsSparseMatrix", !18, i64 0, !12, i64 4, !12, i64 8, !19, i64 16, !19, i64 40, !19, i64 64, !13, i64 88}
!18 = !{!"_ZTS12MatrixFormat", !7, i64 0}
!19 = !{!"_ZTSSt6vectorIiSaIiEE", !20, i64 0}
!20 = !{!"_ZTSSt12_Vector_baseIiSaIiEE", !21, i64 0}
!21 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE12_Vector_implE", !22, i64 0}
!22 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!23 = !{!"_ZTS8ObjSense", !7, i64 0}
!24 = !{!"double", !7, i64 0}
!25 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !26, i64 0, !27, i64 8, !7, i64 16}
!26 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !6, i64 0}
!27 = !{!"long", !7, i64 0}
!28 = !{!"_ZTSSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE", !29, i64 0}
!29 = !{!"_ZTSSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE", !30, i64 0}
!30 = !{!"_ZTSNSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE12_Vector_implE", !31, i64 0}
!31 = !{!"_ZTSNSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!32 = !{!"_ZTSSt6vectorI12HighsVarTypeSaIS0_EE", !33, i64 0}
!33 = !{!"_ZTSSt12_Vector_baseI12HighsVarTypeSaIS0_EE", !34, i64 0}
!34 = !{!"_ZTSNSt12_Vector_baseI12HighsVarTypeSaIS0_EE12_Vector_implE", !35, i64 0}
!35 = !{!"_ZTSNSt12_Vector_baseI12HighsVarTypeSaIS0_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!36 = !{!"_ZTS13HighsNameHash", !37, i64 0}
!37 = !{!"_ZTSSt13unordered_mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4hashIS5_ESt8equal_toIS5_ESaISt4pairIKS5_iEEE", !38, i64 0}
!38 = !{!"_ZTSSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESaIS8_ENSt8__detail10_Select1stESt8equal_toIS5_ESt4hashIS5_ENSA_18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyENSA_17_Hashtable_traitsILb1ELb0ELb1EEEE", !6, i64 0, !27, i64 8, !39, i64 16, !27, i64 24, !40, i64 32, !6, i64 48}
!39 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !6, i64 0}
!40 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !41, i64 0, !27, i64 8}
!41 = !{!"float", !7, i64 0}
!42 = !{!"_ZTS10HighsScale", !12, i64 0, !43, i64 4, !12, i64 8, !12, i64 12, !24, i64 16, !13, i64 24, !13, i64 48}
!43 = !{!"bool", !7, i64 0}
!44 = !{!"_ZTS11HighsLpMods", !19, i64 0, !19, i64 24, !13, i64 48, !13, i64 72, !32, i64 96, !19, i64 120, !13, i64 144, !19, i64 168, !13, i64 192, !19, i64 216, !13, i64 240, !13, i64 264, !13, i64 288}
!45 = !{!"_ZTS13ICrashOptions", !43, i64 0, !46, i64 4, !24, i64 8, !12, i64 16, !12, i64 20, !43, i64 24, !43, i64 25, !47, i64 32}
!46 = !{!"_ZTS14ICrashStrategy", !7, i64 0}
!47 = !{!"_ZTS15HighsLogOptions", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !48, i64 48, !6, i64 80, !43, i64 88}
!48 = !{!"_ZTSSt8functionIFviRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPK20HighsCallbackDataOutP19HighsCallbackDataInPvEE", !49, i64 0, !6, i64 24}
!49 = !{!"_ZTSSt14_Function_base", !7, i64 0, !6, i64 16}
!50 = !{!"_ZTSSt6vectorI22ICrashIterationDetailsSaIS0_EE", !51, i64 0}
!51 = !{!"_ZTSSt12_Vector_baseI22ICrashIterationDetailsSaIS0_EE", !52, i64 0}
!52 = !{!"_ZTSNSt12_Vector_baseI22ICrashIterationDetailsSaIS0_EE12_Vector_implE", !53, i64 0}
!53 = !{!"_ZTSNSt12_Vector_baseI22ICrashIterationDetailsSaIS0_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!54 = !{!"_ZTS13HighsSolution", !43, i64 0, !43, i64 1, !13, i64 8, !13, i64 32, !13, i64 56, !13, i64 80}
!55 = !{!24, !24, i64 0}
!56 = !{i64 0, i64 8, !57}
!57 = !{!27, !27, i64 0}
!58 = !{!12, !12, i64 0}
!59 = !{!45, !12, i64 16}
!60 = !{!43, !43, i64 0}
!61 = !{i8 0, i8 2}
!62 = !{}
!63 = !{i64 0, i64 8, !55}
!64 = !{!65, !24, i64 48}
!65 = !{!"_ZTS22ICrashIterationDetails", !12, i64 0, !24, i64 8, !24, i64 16, !24, i64 24, !24, i64 32, !24, i64 40, !24, i64 48}
!66 = distinct !{!66, !67}
!67 = !{!"llvm.loop.mustprogress"}
!68 = !{!69, !24, i64 96}
!69 = !{!"_ZTS10ICrashInfo", !12, i64 0, !24, i64 8, !24, i64 16, !24, i64 24, !24, i64 32, !24, i64 40, !50, i64 48, !13, i64 72, !24, i64 96}


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

%struct.Quadratic = type { %class.HighsLp, %struct.ICrashOptions, %"class.std::vector.23", %struct.HighsSolution, double, double, %"class.std::vector", double, double, %"class.std::vector" }
%class.HighsLp = type { i32, i32, %"class.std::vector", %"class.std::vector", %"class.std::vector", %"class.std::vector", %"class.std::vector", %class.HighsSparseMatrix, i32, double, %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", i32, i32, %"class.std::vector.8", %"class.std::vector.8", %"class.std::vector.13", %struct.HighsNameHash, %struct.HighsNameHash, i32, i32, %struct.HighsScale, i8, i8, i32, i8, %struct.HighsLpMods }
%class.HighsSparseMatrix = type { i32, i32, i32, %"class.std::vector.3", %"class.std::vector.3", %"class.std::vector.3", %"class.std::vector" }
%"class.std::vector.3" = type { %"struct.std::_Vector_base.4" }
%"struct.std::_Vector_base.4" = 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 }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.std::vector.8" = type { %"struct.std::_Vector_base.9" }
%"struct.std::_Vector_base.9" = type { %"struct.std::_Vector_base<std::__cxx11::basic_string<char>, std::allocator<std::__cxx11::basic_string<char>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::__cxx11::basic_string<char>, std::allocator<std::__cxx11::basic_string<char>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::__cxx11::basic_string<char>, std::allocator<std::__cxx11::basic_string<char>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::__cxx11::basic_string<char>, std::allocator<std::__cxx11::basic_string<char>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.13" = type { %"struct.std::_Vector_base.14" }
%"struct.std::_Vector_base.14" = type { %"struct.std::_Vector_base<HighsVarType, std::allocator<HighsVarType>>::_Vector_impl" }
%"struct.std::_Vector_base<HighsVarType, std::allocator<HighsVarType>>::_Vector_impl" = type { %"struct.std::_Vector_base<HighsVarType, std::allocator<HighsVarType>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HighsVarType, std::allocator<HighsVarType>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%struct.HighsNameHash = type { %"class.std::unordered_map" }
%"class.std::unordered_map" = type { %"class.std::_Hashtable" }
%"class.std::_Hashtable" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.std::__detail::_Hash_node_base" = type { ptr }
%"struct.std::__detail::_Prime_rehash_policy" = type { float, i64 }
%struct.HighsScale = type { i32, i8, i32, i32, double, %"class.std::vector", %"class.std::vector" }
%struct.HighsLpMods = type { %"class.std::vector.3", %"class.std::vector.3", %"class.std::vector", %"class.std::vector", %"class.std::vector.13", %"class.std::vector.3", %"class.std::vector", %"class.std::vector.3", %"class.std::vector", %"class.std::vector.3", %"class.std::vector", %"class.std::vector", %"class.std::vector" }
%struct.ICrashOptions = type { i8, i32, double, i32, i32, i8, i8, [6 x i8], %struct.HighsLogOptions }
%struct.HighsLogOptions = type <{ ptr, ptr, ptr, ptr, ptr, ptr, %"class.std::function", ptr, i8, [7 x i8] }>
%"class.std::function" = type { %"class.std::_Function_base", ptr }
%"class.std::_Function_base" = type { %"union.std::_Any_data", ptr }
%"union.std::_Any_data" = type { %"union.std::_Nocopy_types" }
%"union.std::_Nocopy_types" = type { { i64, i64 } }
%"class.std::vector.23" = type { %"struct.std::_Vector_base.24" }
%"struct.std::_Vector_base.24" = type { %"struct.std::_Vector_base<ICrashIterationDetails, std::allocator<ICrashIterationDetails>>::_Vector_impl" }
%"struct.std::_Vector_base<ICrashIterationDetails, std::allocator<ICrashIterationDetails>>::_Vector_impl" = type { %"struct.std::_Vector_base<ICrashIterationDetails, std::allocator<ICrashIterationDetails>>::_Vector_impl_data" }
%"struct.std::_Vector_base<ICrashIterationDetails, std::allocator<ICrashIterationDetails>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%struct.HighsSolution = type { i8, i8, %"class.std::vector", %"class.std::vector", %"class.std::vector", %"class.std::vector" }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = 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 }
%struct.ICrashIterationDetails = type { i32, double, double, double, double, double, double }
%"class.std::chrono::time_point" = type { %"class.std::chrono::duration" }
%"class.std::chrono::duration" = type { i64 }
%"class.std::chrono::duration.28" = type { double }

@.str.63 = external hidden unnamed_addr constant [73 x i8], align 1
@.str.90 = external hidden unnamed_addr constant [25 x i8], align 1
@__PRETTY_FUNCTION__._Z10callICrashRK7HighsLpRK13ICrashOptionsR10ICrashInfo = external hidden unnamed_addr constant [77 x i8], align 1
@.str.91 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.92 = external hidden unnamed_addr constant [45 x i8], align 1
@.str.93 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.94 = external hidden unnamed_addr constant [48 x i8], align 1

; 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 uwtable
declare dso_local noundef zeroext i1 @_Z12checkOptionsRK7HighsLp13ICrashOptions(ptr noundef nonnull align 8 dereferenceable(920), ptr noundef) local_unnamed_addr #1

declare void @_Z12highsLogUserRK15HighsLogOptions12HighsLogTypePKcz(ptr noundef nonnull align 8 dereferenceable(89), i32 noundef, ptr noundef, ...) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z12parseOptionsRK7HighsLp13ICrashOptions(ptr dead_on_unwind noalias writable sret(%struct.Quadratic) align 8, ptr noundef nonnull align 8 dereferenceable(920), ptr noundef) local_unnamed_addr #1

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN13ICrashOptionsC2ERKS_(ptr noundef nonnull align 8 dereferenceable(128), ptr noundef nonnull align 8 dereferenceable(128)) unnamed_addr #3 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN13ICrashOptionsD2Ev(ptr noundef nonnull align 8 dereferenceable(128)) unnamed_addr #4 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_Z10initializeR9QuadraticRK13ICrashOptions(ptr noundef nonnull align 8 dereferenceable(1256), ptr noundef nonnull align 8 dereferenceable(128)) local_unnamed_addr #1

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z6updateR9Quadratic(ptr noundef nonnull align 8 dereferenceable(1256)) local_unnamed_addr #1

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z11fillDetailsiRK9Quadratic(ptr dead_on_unwind noalias writable sret(%struct.ICrashIterationDetails) align 8, i32 noundef, ptr noundef nonnull align 8 dereferenceable(1256)) local_unnamed_addr #1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_Z14fillICrashInfoiR10ICrashInfo(i32 noundef, ptr noundef nonnull align 8 dereferenceable(104)) local_unnamed_addr #5

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z16updateParametersR9QuadraticRK13ICrashOptionsi(ptr noundef nonnull align 8 dereferenceable(1256), ptr noundef nonnull align 8 dereferenceable(128), i32 noundef) local_unnamed_addr #1

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_Z15solveSubproblemR9QuadraticRK13ICrashOptions(ptr noundef nonnull align 8 dereferenceable(1256), ptr noundef nonnull align 8 dereferenceable(128)) local_unnamed_addr #1

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z16reportSubproblem13ICrashOptionsRK9Quadratici(ptr noundef, ptr noundef nonnull align 8 dereferenceable(1256), i32 noundef) local_unnamed_addr #1

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z13reportOptionsRK13ICrashOptions(ptr noundef nonnull align 8 dereferenceable(128)) local_unnamed_addr #1

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_Z10callICrashRK7HighsLpRK13ICrashOptionsR10ICrashInfo(ptr noundef nonnull align 8 dereferenceable(920) %0, ptr noundef nonnull align 8 dereferenceable(128) %1, ptr noundef nonnull align 8 dereferenceable(104) %2) local_unnamed_addr #1 personality ptr @__gxx_personality_v0 {
  %4 = alloca %struct.ICrashOptions, align 8
  %5 = alloca %struct.Quadratic, align 8
  %6 = alloca %struct.ICrashOptions, align 8
  %7 = alloca %struct.ICrashOptions, align 8
  %8 = alloca %struct.ICrashIterationDetails, align 8
  %9 = alloca %"class.std::chrono::time_point", align 8
  %10 = alloca %"class.std::chrono::time_point", align 8
  %11 = alloca %"class.std::chrono::time_point", align 8
  %12 = alloca %"class.std::chrono::time_point", align 8
  %13 = alloca %"class.std::chrono::duration.28", align 8
  %14 = alloca %"class.std::chrono::duration.28", align 8
  %15 = alloca %"class.std::chrono::duration", align 8
  %16 = alloca %struct.ICrashOptions, align 8
  %17 = alloca %struct.ICrashIterationDetails, align 8
  %18 = alloca %"class.std::chrono::duration.28", align 8
  %19 = alloca %"class.std::chrono::duration", align 8
  call void @_ZN13ICrashOptionsC2ERKS_(ptr noundef nonnull align 8 dereferenceable(128) %4, ptr noundef nonnull align 8 dereferenceable(128) %1)
  %20 = invoke noundef zeroext i1 @_Z12checkOptionsRK7HighsLp13ICrashOptions(ptr noundef nonnull align 8 dereferenceable(920) %0, ptr noundef nonnull %4)
          to label %21 unwind label %22

21:                                               ; preds = %3
  call void @_ZN13ICrashOptionsD2Ev(ptr noundef nonnull align 8 dereferenceable(128) %4) #8
  br i1 %20, label %24, label %114

22:                                               ; preds = %3
  %23 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN13ICrashOptionsD2Ev(ptr noundef nonnull align 8 dereferenceable(128) %4) #8
  br label %115

24:                                               ; preds = %21
  %25 = getelementptr inbounds i8, ptr %0, i64 128
  %26 = call noundef zeroext i1 @_ZNK17HighsSparseMatrix9isColwiseEv(ptr noundef nonnull align 8 dereferenceable(112) %25)
  br i1 %26, label %28, label %27

27:                                               ; preds = %24
  call void @__assert_fail(ptr noundef nonnull @.str.90, ptr noundef nonnull @.str.63, i32 noundef 402, ptr noundef nonnull @__PRETTY_FUNCTION__._Z10callICrashRK7HighsLpRK13ICrashOptionsR10ICrashInfo) #9
  unreachable

28:                                               ; preds = %24
  call void @llvm.lifetime.start.p0(i64 1256, ptr nonnull %5) #8
  call void @_ZN13ICrashOptionsC2ERKS_(ptr noundef nonnull align 8 dereferenceable(128) %6, ptr noundef nonnull align 8 dereferenceable(128) %1)
  invoke void @_Z12parseOptionsRK7HighsLp13ICrashOptions(ptr dead_on_unwind nonnull writable sret(%struct.Quadratic) align 8 %5, ptr noundef nonnull align 8 dereferenceable(920) %0, ptr noundef nonnull %6)
          to label %29 unwind label %51

29:                                               ; preds = %28
  call void @_ZN13ICrashOptionsD2Ev(ptr noundef nonnull align 8 dereferenceable(128) %6) #8
  invoke void @_Z13reportOptionsRK13ICrashOptions(ptr noundef nonnull align 8 dereferenceable(128) %1)
          to label %30 unwind label %53

30:                                               ; preds = %29
  %31 = invoke noundef zeroext i1 @_Z10initializeR9QuadraticRK13ICrashOptions(ptr noundef nonnull align 8 dereferenceable(1256) %5, ptr noundef nonnull align 8 dereferenceable(128) %1)
          to label %32 unwind label %53

32:                                               ; preds = %30
  invoke void @_Z6updateR9Quadratic(ptr noundef nonnull align 8 dereferenceable(1256) %5)
          to label %33 unwind label %53

33:                                               ; preds = %32
  invoke void @_ZN13ICrashOptionsC2ERKS_(ptr noundef nonnull align 8 dereferenceable(128) %7, ptr noundef nonnull align 8 dereferenceable(128) %1)
          to label %34 unwind label %53

34:                                               ; preds = %33
  invoke void @_Z16reportSubproblem13ICrashOptionsRK9Quadratici(ptr noundef nonnull %7, ptr noundef nonnull align 8 dereferenceable(1256) %5, i32 noundef 0)
          to label %35 unwind label %55

35:                                               ; preds = %34
  call void @_ZN13ICrashOptionsD2Ev(ptr noundef nonnull align 8 dereferenceable(128) %7) #8
  %36 = getelementptr inbounds i8, ptr %5, i64 1048
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %8) #8
  invoke void @_Z11fillDetailsiRK9Quadratic(ptr dead_on_unwind nonnull writable sret(%struct.ICrashIterationDetails) align 8 %8, i32 noundef 0, ptr noundef nonnull align 8 dereferenceable(1256) %5)
          to label %37 unwind label %57

37:                                               ; preds = %35
  invoke void @_ZNSt6vectorI22ICrashIterationDetailsSaIS0_EE9push_backEOS0_(ptr noundef nonnull align 8 dereferenceable(24) %36, ptr noundef nonnull align 8 dereferenceable(56) %8)
          to label %38 unwind label %57

38:                                               ; preds = %37
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %8) #8
  %39 = getelementptr inbounds i8, ptr %5, i64 1216
  %40 = load double, ptr %39, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #8
  call void @_ZNSt6chrono10time_pointINS_3_V212system_clockENS_8durationIlSt5ratioILl1ELl1000000000EEEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %9)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #8
  call void @_ZNSt6chrono10time_pointINS_3_V212system_clockENS_8durationIlSt5ratioILl1ELl1000000000EEEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %10)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #8
  call void @_ZNSt6chrono10time_pointINS_3_V212system_clockENS_8durationIlSt5ratioILl1ELl1000000000EEEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %11)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #8
  call void @_ZNSt6chrono10time_pointINS_3_V212system_clockENS_8durationIlSt5ratioILl1ELl1000000000EEEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %12)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #8
  %41 = call i64 @_ZNSt6chrono3_V212system_clock3nowEv() #8
  store i64 %41, ptr %9, align 8, !tbaa !54
  %42 = getelementptr inbounds i8, ptr %1, i64 16
  %43 = load i32, ptr %42, align 8, !tbaa !55
  %.not82 = icmp slt i32 %43, 1
  br i1 %.not82, label %.loopexit, label %.lr.ph

.lr.ph:                                           ; preds = %38
  %44 = fmul double %40, 5.000000e+00
  br label %45

45:                                               ; preds = %.lr.ph, %92
  %indvars.iv = phi i64 [ 1, %.lr.ph ], [ %indvars.iv.next, %92 ]
  %46 = trunc nuw nsw i64 %indvars.iv to i32
  invoke void @_Z16updateParametersR9QuadraticRK13ICrashOptionsi(ptr noundef nonnull align 8 dereferenceable(1256) %5, ptr noundef nonnull align 8 dereferenceable(128) %1, i32 noundef %46)
          to label %47 unwind label %.loopexit65

47:                                               ; preds = %45
  %48 = call i64 @_ZNSt6chrono3_V212system_clock3nowEv() #8
  store i64 %48, ptr %11, align 8, !tbaa !54
  %49 = invoke noundef zeroext i1 @_Z15solveSubproblemR9QuadraticRK13ICrashOptions(ptr noundef nonnull align 8 dereferenceable(1256) %5, ptr noundef nonnull align 8 dereferenceable(128) %1)
          to label %50 unwind label %.loopexit66

50:                                               ; preds = %47
  br i1 %49, label %59, label %.thread

51:                                               ; preds = %28
  %52 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN13ICrashOptionsD2Ev(ptr noundef nonnull align 8 dereferenceable(128) %6) #8
  br label %113

53:                                               ; preds = %33, %32, %30, %29
  %54 = landingpad { ptr, i32 }
          cleanup
  br label %112

55:                                               ; preds = %34
  %56 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN13ICrashOptionsD2Ev(ptr noundef nonnull align 8 dereferenceable(128) %7) #8
  br label %112

57:                                               ; preds = %37, %35
  %58 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %8) #8
  br label %112

.loopexit65:                                      ; preds = %45
  %lpad.loopexit = landingpad { ptr, i32 }
          cleanup
  br label %111

.loopexit.split-lp:                               ; preds = %.loopexit, %104
  %lpad.loopexit.split-lp = landingpad { ptr, i32 }
          cleanup
  br label %111

.loopexit66:                                      ; preds = %47, %63, %65
  %lpad.loopexit68 = landingpad { ptr, i32 }
          cleanup
  br label %111

.loopexit.split-lp67:                             ; preds = %86, %90
  %lpad.loopexit.split-lp69 = landingpad { ptr, i32 }
          cleanup
  br label %111

59:                                               ; preds = %50
  %60 = call i64 @_ZNSt6chrono3_V212system_clock3nowEv() #8
  store i64 %60, ptr %12, align 8, !tbaa !54
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #8
  %61 = invoke i64 @_ZNSt6chronomiINS_3_V212system_clockENS_8durationIlSt5ratioILl1ELl1000000000EEEES6_EENSt11common_typeIJT0_T1_EE4typeERKNS_10time_pointIT_S8_EERKNSC_ISD_S9_EE(ptr noundef nonnull align 8 dereferenceable(8) %12, ptr noundef nonnull align 8 dereferenceable(8) %11)
          to label %62 unwind label %74

62:                                               ; preds = %59
  store i64 %61, ptr %15, align 8
  invoke void @_ZNSt6chrono8durationIdSt5ratioILl1ELl1EEEC2IlS1_ILl1ELl1000000000EEvEERKNS0_IT_T0_EE(ptr noundef nonnull align 8 dereferenceable(8) %14, ptr noundef nonnull align 8 dereferenceable(8) %15)
          to label %63 unwind label %74

63:                                               ; preds = %62
  %64 = load i64, ptr %14, align 8, !tbaa !56
  store i64 %64, ptr %13, align 8, !tbaa !56
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #8
  invoke void @_Z6updateR9Quadratic(ptr noundef nonnull align 8 dereferenceable(1256) %5)
          to label %65 unwind label %.loopexit66

65:                                               ; preds = %63
  invoke void @_ZN13ICrashOptionsC2ERKS_(ptr noundef nonnull align 8 dereferenceable(128) %16, ptr noundef nonnull align 8 dereferenceable(128) %1)
          to label %66 unwind label %.loopexit66

66:                                               ; preds = %65
  invoke void @_Z16reportSubproblem13ICrashOptionsRK9Quadratici(ptr noundef nonnull %16, ptr noundef nonnull align 8 dereferenceable(1256) %5, i32 noundef %46)
          to label %67 unwind label %76

67:                                               ; preds = %66
  call void @_ZN13ICrashOptionsD2Ev(ptr noundef nonnull align 8 dereferenceable(128) %16) #8
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %17) #8
  invoke void @_Z11fillDetailsiRK9Quadratic(ptr dead_on_unwind nonnull writable sret(%struct.ICrashIterationDetails) align 8 %17, i32 noundef %46, ptr noundef nonnull align 8 dereferenceable(1256) %5)
          to label %68 unwind label %78

68:                                               ; preds = %67
  invoke void @_ZNSt6vectorI22ICrashIterationDetailsSaIS0_EE9push_backEOS0_(ptr noundef nonnull align 8 dereferenceable(24) %36, ptr noundef nonnull align 8 dereferenceable(56) %17)
          to label %69 unwind label %78

69:                                               ; preds = %68
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %17) #8
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %70 = call noundef i64 @_ZNKSt6vectorI22ICrashIterationDetailsSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %36) #8
  %71 = and i64 %70, 4294967295
  %72 = icmp eq i64 %indvars.iv.next, %71
  br i1 %72, label %80, label %73

73:                                               ; preds = %69
  call void @__assert_fail(ptr noundef nonnull @.str.91, ptr noundef nonnull @.str.63, i32 noundef 435, ptr noundef nonnull @__PRETTY_FUNCTION__._Z10callICrashRK7HighsLpRK13ICrashOptionsR10ICrashInfo) #9
  unreachable

74:                                               ; preds = %62, %59
  %75 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #8
  br label %111

76:                                               ; preds = %66
  %77 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN13ICrashOptionsD2Ev(ptr noundef nonnull align 8 dereferenceable(128) %16) #8
  br label %111

78:                                               ; preds = %68, %67
  %79 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %17) #8
  br label %111

80:                                               ; preds = %69
  %81 = call noundef double @_ZNKSt6chrono8durationIdSt5ratioILl1ELl1EEE5countEv(ptr noundef nonnull align 8 dereferenceable(8) %13)
  %82 = call noundef nonnull align 8 dereferenceable(56) ptr @_ZNSt6vectorI22ICrashIterationDetailsSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %36, i64 noundef %indvars.iv) #8
  %83 = getelementptr inbounds i8, ptr %82, i64 48
  store double %81, ptr %83, align 8, !tbaa !57
  %84 = load double, ptr %39, align 8, !tbaa !5
  %85 = fcmp olt double %84, 1.000000e-08
  br i1 %85, label %86, label %88

86:                                               ; preds = %80
  %87 = getelementptr inbounds i8, ptr %1, i64 32
  invoke void (ptr, i32, ptr, ...) @_Z12highsLogUserRK15HighsLogOptions12HighsLogTypePKcz(ptr noundef nonnull align 8 dereferenceable(89) %87, i32 noundef 1, ptr noundef nonnull @.str.92, double noundef 1.000000e-08)
          to label %.loopexit unwind label %.loopexit.split-lp67

88:                                               ; preds = %80
  %89 = fcmp ogt double %84, %44
  br i1 %89, label %90, label %92

90:                                               ; preds = %88
  %91 = getelementptr inbounds i8, ptr %1, i64 32
  invoke void (ptr, i32, ptr, ...) @_Z12highsLogUserRK15HighsLogOptions12HighsLogTypePKcz(ptr noundef nonnull align 8 dereferenceable(89) %91, i32 noundef 1, ptr noundef nonnull @.str.93)
          to label %.thread unwind label %.loopexit.split-lp67

92:                                               ; preds = %88
  %93 = load i32, ptr %42, align 8, !tbaa !55
  %94 = sext i32 %93 to i64
  %.not.not = icmp slt i64 %indvars.iv, %94
  br i1 %.not.not, label %45, label %.loopexit, !llvm.loop !59

.loopexit:                                        ; preds = %92, %38, %86
  %.250 = phi i32 [ %46, %86 ], [ 0, %38 ], [ %46, %92 ]
  %95 = getelementptr inbounds i8, ptr %2, i64 48
  %96 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorI22ICrashIterationDetailsSaIS0_EEaSEOS2_(ptr noundef nonnull align 8 dereferenceable(24) %95, ptr noundef nonnull align 8 dereferenceable(24) %36) #8
  call void @_Z14fillICrashInfoiR10ICrashInfo(i32 noundef %.250, ptr noundef nonnull align 8 dereferenceable(104) %2)
  %97 = getelementptr inbounds i8, ptr %5, i64 1080
  %98 = getelementptr inbounds i8, ptr %2, i64 72
  %99 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIdSaIdEEaSERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %98, ptr noundef nonnull align 8 dereferenceable(24) %97)
          to label %100 unwind label %.loopexit.split-lp

100:                                              ; preds = %.loopexit
  %101 = call i64 @_ZNSt6chrono3_V212system_clock3nowEv() #8
  store i64 %101, ptr %10, align 8, !tbaa !54
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %18) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %19) #8
  %102 = invoke i64 @_ZNSt6chronomiINS_3_V212system_clockENS_8durationIlSt5ratioILl1ELl1000000000EEEES6_EENSt11common_typeIJT0_T1_EE4typeERKNS_10time_pointIT_S8_EERKNSC_ISD_S9_EE(ptr noundef nonnull align 8 dereferenceable(8) %10, ptr noundef nonnull align 8 dereferenceable(8) %9)
          to label %103 unwind label %109

103:                                              ; preds = %100
  store i64 %102, ptr %19, align 8
  invoke void @_ZNSt6chrono8durationIdSt5ratioILl1ELl1EEEC2IlS1_ILl1ELl1000000000EEvEERKNS0_IT_T0_EE(ptr noundef nonnull align 8 dereferenceable(8) %18, ptr noundef nonnull align 8 dereferenceable(8) %19)
          to label %104 unwind label %109

104:                                              ; preds = %103
  %105 = load i64, ptr %18, align 8, !tbaa !56
  store i64 %105, ptr %13, align 8, !tbaa !56
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #8
  %106 = call noundef double @_ZNKSt6chrono8durationIdSt5ratioILl1ELl1EEE5countEv(ptr noundef nonnull align 8 dereferenceable(8) %13)
  %107 = getelementptr inbounds i8, ptr %2, i64 96
  store double %106, ptr %107, align 8, !tbaa !61
  %108 = getelementptr inbounds i8, ptr %1, i64 32
  invoke void (ptr, i32, ptr, ...) @_Z12highsLogUserRK15HighsLogOptions12HighsLogTypePKcz(ptr noundef nonnull align 8 dereferenceable(89) %108, i32 noundef 1, ptr noundef nonnull @.str.94, double noundef %106)
          to label %.thread unwind label %.loopexit.split-lp

109:                                              ; preds = %103, %100
  %110 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #8
  br label %111

.thread:                                          ; preds = %50, %90, %104
  %.2 = phi i32 [ 0, %104 ], [ -1, %90 ], [ -1, %50 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #8
  call void @_ZN9QuadraticD2Ev(ptr noundef nonnull align 8 dereferenceable(1256) %5) #8
  call void @llvm.lifetime.end.p0(i64 1256, ptr nonnull %5) #8
  br label %114

111:                                              ; preds = %.loopexit66, %.loopexit.split-lp67, %.loopexit65, %.loopexit.split-lp, %74, %76, %78, %109
  %.pn54 = phi { ptr, i32 } [ %110, %109 ], [ %79, %78 ], [ %77, %76 ], [ %75, %74 ], [ %lpad.loopexit, %.loopexit65 ], [ %lpad.loopexit.split-lp, %.loopexit.split-lp ], [ %lpad.loopexit68, %.loopexit66 ], [ %lpad.loopexit.split-lp69, %.loopexit.split-lp67 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #8
  br label %112

112:                                              ; preds = %111, %57, %55, %53
  %.pn54.pn = phi { ptr, i32 } [ %.pn54, %111 ], [ %58, %57 ], [ %56, %55 ], [ %54, %53 ]
  call void @_ZN9QuadraticD2Ev(ptr noundef nonnull align 8 dereferenceable(1256) %5) #8
  br label %113

113:                                              ; preds = %112, %51
  %.pn54.pn.pn = phi { ptr, i32 } [ %.pn54.pn, %112 ], [ %52, %51 ]
  call void @llvm.lifetime.end.p0(i64 1256, ptr nonnull %5) #8
  br label %115

114:                                              ; preds = %21, %.thread
  %.3 = phi i32 [ %.2, %.thread ], [ -1, %21 ]
  ret i32 %.3

115:                                              ; preds = %113, %22
  %.pn54.pn.pn.pn = phi { ptr, i32 } [ %.pn54.pn.pn, %113 ], [ %23, %22 ]
  resume { ptr, i32 } %.pn54.pn.pn.pn
}

declare noundef zeroext i1 @_ZNK17HighsSparseMatrix9isColwiseEv(ptr noundef nonnull align 8 dereferenceable(112)) local_unnamed_addr #2

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

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

; Function Attrs: nounwind
declare i64 @_ZNSt6chrono3_V212system_clock3nowEv() local_unnamed_addr #7

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

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN9QuadraticD2Ev(ptr noundef nonnull align 8 dereferenceable(1256)) unnamed_addr #4 align 2

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { 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 #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 = { 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 #6 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { nounwind }
attributes #9 = { noreturn nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !23, i64 1216}
!6 = !{!"_ZTS9Quadratic", !7, i64 0, !44, i64 920, !49, i64 1048, !53, i64 1072, !23, i64 1176, !23, i64 1184, !11, i64 1192, !23, i64 1216, !23, i64 1224, !11, i64 1232}
!7 = !{!"_ZTS7HighsLp", !8, i64 0, !8, i64 4, !11, i64 8, !11, i64 32, !11, i64 56, !11, i64 80, !11, i64 104, !16, i64 128, !22, i64 240, !23, i64 248, !24, i64 256, !24, i64 288, !8, i64 320, !8, i64 324, !27, i64 328, !27, i64 352, !31, i64 376, !35, i64 400, !35, i64 456, !8, i64 512, !8, i64 516, !41, i64 520, !42, i64 592, !42, i64 593, !8, i64 596, !42, i64 600, !43, i64 608}
!8 = !{!"int", !9, i64 0}
!9 = !{!"omnipotent char", !10, i64 0}
!10 = !{!"Simple C++ TBAA"}
!11 = !{!"_ZTSSt6vectorIdSaIdEE", !12, i64 0}
!12 = !{!"_ZTSSt12_Vector_baseIdSaIdEE", !13, i64 0}
!13 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE12_Vector_implE", !14, i64 0}
!14 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE17_Vector_impl_dataE", !15, i64 0, !15, i64 8, !15, i64 16}
!15 = !{!"any pointer", !9, i64 0}
!16 = !{!"_ZTS17HighsSparseMatrix", !17, i64 0, !8, i64 4, !8, i64 8, !18, i64 16, !18, i64 40, !18, i64 64, !11, i64 88}
!17 = !{!"_ZTS12MatrixFormat", !9, i64 0}
!18 = !{!"_ZTSSt6vectorIiSaIiEE", !19, i64 0}
!19 = !{!"_ZTSSt12_Vector_baseIiSaIiEE", !20, i64 0}
!20 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE12_Vector_implE", !21, i64 0}
!21 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE17_Vector_impl_dataE", !15, i64 0, !15, i64 8, !15, i64 16}
!22 = !{!"_ZTS8ObjSense", !9, i64 0}
!23 = !{!"double", !9, i64 0}
!24 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !25, i64 0, !26, i64 8, !9, i64 16}
!25 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !15, i64 0}
!26 = !{!"long", !9, i64 0}
!27 = !{!"_ZTSSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE", !28, i64 0}
!28 = !{!"_ZTSSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE", !29, i64 0}
!29 = !{!"_ZTSNSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE12_Vector_implE", !30, i64 0}
!30 = !{!"_ZTSNSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_Vector_impl_dataE", !15, i64 0, !15, i64 8, !15, i64 16}
!31 = !{!"_ZTSSt6vectorI12HighsVarTypeSaIS0_EE", !32, i64 0}
!32 = !{!"_ZTSSt12_Vector_baseI12HighsVarTypeSaIS0_EE", !33, i64 0}
!33 = !{!"_ZTSNSt12_Vector_baseI12HighsVarTypeSaIS0_EE12_Vector_implE", !34, i64 0}
!34 = !{!"_ZTSNSt12_Vector_baseI12HighsVarTypeSaIS0_EE17_Vector_impl_dataE", !15, i64 0, !15, i64 8, !15, i64 16}
!35 = !{!"_ZTS13HighsNameHash", !36, i64 0}
!36 = !{!"_ZTSSt13unordered_mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4hashIS5_ESt8equal_toIS5_ESaISt4pairIKS5_iEEE", !37, i64 0}
!37 = !{!"_ZTSSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESaIS8_ENSt8__detail10_Select1stESt8equal_toIS5_ESt4hashIS5_ENSA_18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyENSA_17_Hashtable_traitsILb1ELb0ELb1EEEE", !15, i64 0, !26, i64 8, !38, i64 16, !26, i64 24, !39, i64 32, !15, i64 48}
!38 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !15, i64 0}
!39 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !40, i64 0, !26, i64 8}
!40 = !{!"float", !9, i64 0}
!41 = !{!"_ZTS10HighsScale", !8, i64 0, !42, i64 4, !8, i64 8, !8, i64 12, !23, i64 16, !11, i64 24, !11, i64 48}
!42 = !{!"bool", !9, i64 0}
!43 = !{!"_ZTS11HighsLpMods", !18, i64 0, !18, i64 24, !11, i64 48, !11, i64 72, !31, i64 96, !18, i64 120, !11, i64 144, !18, i64 168, !11, i64 192, !18, i64 216, !11, i64 240, !11, i64 264, !11, i64 288}
!44 = !{!"_ZTS13ICrashOptions", !42, i64 0, !45, i64 4, !23, i64 8, !8, i64 16, !8, i64 20, !42, i64 24, !42, i64 25, !46, i64 32}
!45 = !{!"_ZTS14ICrashStrategy", !9, i64 0}
!46 = !{!"_ZTS15HighsLogOptions", !15, i64 0, !15, i64 8, !15, i64 16, !15, i64 24, !15, i64 32, !15, i64 40, !47, i64 48, !15, i64 80, !42, i64 88}
!47 = !{!"_ZTSSt8functionIFviRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPK20HighsCallbackDataOutP19HighsCallbackDataInPvEE", !48, i64 0, !15, i64 24}
!48 = !{!"_ZTSSt14_Function_base", !9, i64 0, !15, i64 16}
!49 = !{!"_ZTSSt6vectorI22ICrashIterationDetailsSaIS0_EE", !50, i64 0}
!50 = !{!"_ZTSSt12_Vector_baseI22ICrashIterationDetailsSaIS0_EE", !51, i64 0}
!51 = !{!"_ZTSNSt12_Vector_baseI22ICrashIterationDetailsSaIS0_EE12_Vector_implE", !52, i64 0}
!52 = !{!"_ZTSNSt12_Vector_baseI22ICrashIterationDetailsSaIS0_EE17_Vector_impl_dataE", !15, i64 0, !15, i64 8, !15, i64 16}
!53 = !{!"_ZTS13HighsSolution", !42, i64 0, !42, i64 1, !11, i64 8, !11, i64 32, !11, i64 56, !11, i64 80}
!54 = !{!26, !26, i64 0}
!55 = !{!44, !8, i64 16}
!56 = !{!23, !23, i64 0}
!57 = !{!58, !23, i64 48}
!58 = !{!"_ZTS22ICrashIterationDetails", !8, i64 0, !23, i64 8, !23, i64 16, !23, i64 24, !23, i64 32, !23, i64 40, !23, i64 48}
!59 = distinct !{!59, !60}
!60 = !{!"llvm.loop.mustprogress"}
!61 = !{!62, !23, i64 96}
!62 = !{!"_ZTS10ICrashInfo", !8, i64 0, !23, i64 8, !23, i64 16, !23, i64 24, !23, i64 32, !23, i64 40, !49, i64 48, !11, i64 72, !23, i64 96}


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