; LLVM IR from cvanaret/Uno :: uno/model (ScaledModel)

; 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::__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::allocator" = type { i8 }
%"class.uno::Range" = type { %"class.uno::Collection", i64, i64 }
%"class.uno::Collection" = type { ptr }
%"class.uno::Collection<unsigned long>::iterator" = type { ptr, i64 }
%"class.uno::Model" = type { ptr, %"class.std::__cxx11::basic_string", i64, i64, double }
%"class.uno::ScaledModel" = type { %"class.uno::Model", %"class.std::unique_ptr", %"class.uno::Scaling", %"class.uno::Vector" }
%"class.std::unique_ptr" = type { %"struct.std::__uniq_ptr_data" }
%"struct.std::__uniq_ptr_data" = type { %"class.std::__uniq_ptr_impl" }
%"class.std::__uniq_ptr_impl" = type { %"class.std::tuple" }
%"class.std::tuple" = type { %"struct.std::_Tuple_impl" }
%"struct.std::_Tuple_impl" = type { %"struct.std::_Head_base.1" }
%"struct.std::_Head_base.1" = type { ptr }
%"class.uno::Scaling" = type { double, double, %"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 }
%"class.uno::Vector" = type { %"class.std::vector" }
%"class.uno::Iterate" = type <{ i64, i64, %"class.uno::Vector", %"class.uno::Multipliers", %"class.uno::Multipliers", double, %"struct.uno::Evaluations", i8, i8, i8, i8, [4 x i8], double, %"class.uno::DualResiduals", %"class.uno::DualResiduals", %"struct.uno::ProgressMeasures", i32, [4 x i8] }>
%"class.uno::Multipliers" = type { %"class.uno::Vector", %"class.uno::Vector", %"class.uno::Vector" }
%"struct.uno::Evaluations" = type { double, %"class.std::vector", %"class.uno::SparseVector", %"class.uno::RectangularMatrix" }
%"class.uno::SparseVector" = type { %"class.std::vector.13", %"class.std::vector", i64 }
%"class.std::vector.13" = type { %"struct.std::_Vector_base.14" }
%"struct.std::_Vector_base.14" = type { %"struct.std::_Vector_base<unsigned long, std::allocator<unsigned long>>::_Vector_impl" }
%"struct.std::_Vector_base<unsigned long, std::allocator<unsigned long>>::_Vector_impl" = type { %"struct.std::_Vector_base<unsigned long, std::allocator<unsigned long>>::_Vector_impl_data" }
%"struct.std::_Vector_base<unsigned long, std::allocator<unsigned long>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.uno::RectangularMatrix" = type { %"class.std::vector.18" }
%"class.std::vector.18" = type { %"struct.std::_Vector_base.19" }
%"struct.std::_Vector_base.19" = type { %"struct.std::_Vector_base<uno::SparseVector<double>, std::allocator<uno::SparseVector<double>>>::_Vector_impl" }
%"struct.std::_Vector_base<uno::SparseVector<double>, std::allocator<uno::SparseVector<double>>>::_Vector_impl" = type { %"struct.std::_Vector_base<uno::SparseVector<double>, std::allocator<uno::SparseVector<double>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<uno::SparseVector<double>, std::allocator<uno::SparseVector<double>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.uno::DualResiduals" = type { double, double, double, double, %"class.uno::LagrangianGradient" }
%"class.uno::LagrangianGradient" = type { %"class.uno::Vector", %"class.uno::Vector" }
%"struct.uno::ProgressMeasures" = type { double, %"class.std::function", double }
%"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 } }

@.str = external hidden unnamed_addr constant [11 x i8], align 1
@_ZTVN3uno11ScaledModelE = external dso_local unnamed_addr constant { [34 x ptr] }, align 8
@.str.1 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [73 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [72 x i8], align 1
@__PRETTY_FUNCTION__._ZN3uno11ScaledModelC2ESt10unique_ptrINS_5ModelESt14default_deleteIS2_EERNS_7IterateERKNS_7OptionsE = external hidden unnamed_addr constant [82 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [91 x i8], align 1

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3uno11ScaledModelC2ESt10unique_ptrINS_5ModelESt14default_deleteIS2_EERNS_7IterateERKNS_7OptionsE(ptr noundef nonnull align 8 dereferenceable(136) %0, ptr noundef %1, ptr noundef nonnull align 8 dereferenceable(532) %2, ptr noundef nonnull align 8 dereferenceable(145) %3) unnamed_addr #0 align 2 personality ptr @__gxx_personality_v0 {
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca %"class.std::__cxx11::basic_string", align 8
  %10 = alloca ptr, align 8
  %11 = alloca i32, align 4
  %12 = alloca %"class.std::__cxx11::basic_string", align 8
  %13 = alloca %"class.std::allocator", align 1
  %14 = alloca %"class.std::__cxx11::basic_string", align 8
  %15 = alloca %"class.std::allocator", align 1
  %16 = alloca ptr, align 8
  %17 = alloca %"class.uno::Range", align 8
  %18 = alloca %"class.uno::Collection<unsigned long>::iterator", align 8
  %19 = alloca %"class.uno::Collection<unsigned long>::iterator", align 8
  %20 = alloca i64, align 8
  %21 = alloca ptr, align 8
  %22 = alloca %"class.uno::Range", align 8
  %23 = alloca %"class.uno::Collection<unsigned long>::iterator", align 8
  %24 = alloca %"class.uno::Collection<unsigned long>::iterator", align 8
  %25 = alloca i64, 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
  store ptr %3, ptr %8, align 8, !tbaa !5
  %26 = load ptr, ptr %5, align 8
  %27 = call noundef ptr @_ZNKSt10unique_ptrIN3uno5ModelESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %1) #7
  %28 = getelementptr inbounds %"class.uno::Model", ptr %27, i32 0, i32 1
  call void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EERKS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %9, ptr noundef nonnull align 8 dereferenceable(32) %28, ptr noundef @.str)
  %29 = call noundef ptr @_ZNKSt10unique_ptrIN3uno5ModelESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %1) #7
  %30 = getelementptr inbounds %"class.uno::Model", ptr %29, i32 0, i32 2
  %31 = load i64, ptr %30, align 8, !tbaa !9
  %32 = call noundef ptr @_ZNKSt10unique_ptrIN3uno5ModelESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %1) #7
  %33 = getelementptr inbounds %"class.uno::Model", ptr %32, i32 0, i32 3
  %34 = load i64, ptr %33, align 8, !tbaa !15
  %35 = call noundef ptr @_ZNKSt10unique_ptrIN3uno5ModelESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %1) #7
  %36 = getelementptr inbounds %"class.uno::Model", ptr %35, i32 0, i32 4
  %37 = load double, ptr %36, align 8, !tbaa !16
  invoke void @_ZN3uno5ModelC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEmmd(ptr noundef nonnull align 8 dereferenceable(64) %26, ptr noundef %9, i64 noundef %31, i64 noundef %34, double noundef %37)
          to label %38 unwind label %105

38:                                               ; preds = %4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #7
  store ptr getelementptr inbounds inrange(-16, 256) ({ [34 x ptr] }, ptr @_ZTVN3uno11ScaledModelE, i32 0, i32 0, i32 2), ptr %26, align 8, !tbaa !17
  %39 = getelementptr inbounds %"class.uno::ScaledModel", ptr %26, i32 0, i32 1
  call void @_ZNSt10unique_ptrIN3uno5ModelESt14default_deleteIS1_EEC2EOS4_(ptr noundef nonnull align 8 dereferenceable(8) %39, ptr noundef nonnull align 8 dereferenceable(8) %1) #7
  %40 = getelementptr inbounds %"class.uno::ScaledModel", ptr %26, i32 0, i32 2
  %41 = getelementptr inbounds %"class.uno::ScaledModel", ptr %26, i32 0, i32 1
  %42 = call noundef ptr @_ZNKSt10unique_ptrIN3uno5ModelESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %41) #7
  %43 = getelementptr inbounds %"class.uno::Model", ptr %42, i32 0, i32 3
  %44 = load i64, ptr %43, align 8, !tbaa !15
  %45 = load ptr, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %12) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr %13) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %13) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %12, ptr noundef @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %13)
          to label %46 unwind label %109

46:                                               ; preds = %38
  %47 = invoke noundef double @_ZNK3uno7Options10get_doubleERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(145) %45, ptr noundef nonnull align 8 dereferenceable(32) %12)
          to label %48 unwind label %113

48:                                               ; preds = %46
  invoke void @_ZN3uno7ScalingC1Emd(ptr noundef nonnull align 8 dereferenceable(40) %40, i64 noundef %44, double noundef %47)
          to label %49 unwind label %113

49:                                               ; preds = %48
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %13) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %13) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %12) #7
  %50 = getelementptr inbounds %"class.uno::ScaledModel", ptr %26, i32 0, i32 3
  %51 = getelementptr inbounds %"class.uno::Model", ptr %26, i32 0, i32 3
  %52 = load i64, ptr %51, align 8, !tbaa !15
  invoke void @_ZN3uno6VectorIdEC2Em(ptr noundef nonnull align 8 dereferenceable(24) %50, i64 noundef %52)
          to label %53 unwind label %118

53:                                               ; preds = %49
  %54 = load ptr, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %14) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr %15) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %15) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %14, ptr noundef @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %15)
          to label %55 unwind label %122

55:                                               ; preds = %53
  %56 = invoke noundef zeroext i1 @_ZNK3uno7Options8get_boolERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(145) %54, ptr noundef nonnull align 8 dereferenceable(32) %14)
          to label %57 unwind label %126

57:                                               ; preds = %55
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %15) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %15) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %14) #7
  br i1 %56, label %58, label %176

58:                                               ; preds = %57
  %59 = load ptr, ptr %7, align 8, !tbaa !5
  %60 = getelementptr inbounds %"class.uno::ScaledModel", ptr %26, i32 0, i32 1
  %61 = call noundef nonnull align 8 dereferenceable(64) ptr @_ZNKSt10unique_ptrIN3uno5ModelESt14default_deleteIS1_EEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %60) #7
  invoke void @_ZN3uno7Iterate27evaluate_objective_gradientERKNS_5ModelE(ptr noundef nonnull align 8 dereferenceable(532) %59, ptr noundef nonnull align 8 dereferenceable(64) %61)
          to label %62 unwind label %131

62:                                               ; preds = %58
  %63 = load ptr, ptr %7, align 8, !tbaa !5
  %64 = getelementptr inbounds %"class.uno::ScaledModel", ptr %26, i32 0, i32 1
  %65 = call noundef nonnull align 8 dereferenceable(64) ptr @_ZNKSt10unique_ptrIN3uno5ModelESt14default_deleteIS1_EEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %64) #7
  invoke void @_ZN3uno7Iterate28evaluate_constraint_jacobianERKNS_5ModelE(ptr noundef nonnull align 8 dereferenceable(532) %63, ptr noundef nonnull align 8 dereferenceable(64) %65)
          to label %66 unwind label %131

66:                                               ; preds = %62
  %67 = getelementptr inbounds %"class.uno::ScaledModel", ptr %26, i32 0, i32 2
  %68 = load ptr, ptr %7, align 8, !tbaa !5
  %69 = getelementptr inbounds %"class.uno::Iterate", ptr %68, i32 0, i32 6
  %70 = getelementptr inbounds %"struct.uno::Evaluations", ptr %69, i32 0, i32 2
  %71 = load ptr, ptr %7, align 8, !tbaa !5
  %72 = getelementptr inbounds %"class.uno::Iterate", ptr %71, i32 0, i32 6
  %73 = getelementptr inbounds %"struct.uno::Evaluations", ptr %72, i32 0, i32 3
  invoke void @_ZN3uno7Scaling7computeERKNS_12SparseVectorIdEERKNS_17RectangularMatrixIdEE(ptr noundef nonnull align 8 dereferenceable(40) %67, ptr noundef nonnull align 8 dereferenceable(56) %70, ptr noundef nonnull align 8 dereferenceable(24) %73)
          to label %74 unwind label %131

74:                                               ; preds = %66
  %75 = load ptr, ptr %7, align 8, !tbaa !5
  %76 = getelementptr inbounds %"class.uno::Iterate", ptr %75, i32 0, i32 6
  %77 = getelementptr inbounds %"struct.uno::Evaluations", ptr %76, i32 0, i32 2
  %78 = getelementptr inbounds %"class.uno::ScaledModel", ptr %26, i32 0, i32 2
  %79 = invoke noundef double @_ZNK3uno7Scaling21get_objective_scalingEv(ptr noundef nonnull align 8 dereferenceable(40) %78)
          to label %80 unwind label %131

80:                                               ; preds = %74
  invoke void @_ZN3uno5scaleIdEEvRNS_12SparseVectorIT_EES2_(ptr noundef nonnull align 8 dereferenceable(56) %77, double noundef %79)
          to label %81 unwind label %131

81:                                               ; preds = %80
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #7
  call void @llvm.lifetime.start.p0(i64 24, ptr %17) #7
  %82 = getelementptr inbounds %"class.uno::ScaledModel", ptr %26, i32 0, i32 1
  %83 = call noundef ptr @_ZNKSt10unique_ptrIN3uno5ModelESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %82) #7
  %84 = getelementptr inbounds %"class.uno::Model", ptr %83, i32 0, i32 3
  %85 = load i64, ptr %84, align 8, !tbaa !15
  invoke void @_ZN3uno5RangeILNS_14RangeDirectionE0EEC2Em(ptr noundef nonnull align 8 dereferenceable(24) %17, i64 noundef %85)
          to label %86 unwind label %135

86:                                               ; preds = %81
  store ptr %17, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %18) #7
  %87 = load ptr, ptr %16, align 8, !tbaa !5
  %88 = invoke { ptr, i64 } @_ZNK3uno10CollectionImE5beginEv(ptr noundef nonnull align 8 dereferenceable(8) %87)
          to label %89 unwind label %139

89:                                               ; preds = %86
  %90 = getelementptr inbounds { ptr, i64 }, ptr %18, i32 0, i32 0
  %91 = extractvalue { ptr, i64 } %88, 0
  store ptr %91, ptr %90, align 8
  %92 = getelementptr inbounds { ptr, i64 }, ptr %18, i32 0, i32 1
  %93 = extractvalue { ptr, i64 } %88, 1
  store i64 %93, ptr %92, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr %19) #7
  %94 = load ptr, ptr %16, align 8, !tbaa !5
  %95 = invoke { ptr, i64 } @_ZNK3uno10CollectionImE3endEv(ptr noundef nonnull align 8 dereferenceable(8) %94)
          to label %96 unwind label %143

96:                                               ; preds = %89
  %97 = getelementptr inbounds { ptr, i64 }, ptr %19, i32 0, i32 0
  %98 = extractvalue { ptr, i64 } %95, 0
  store ptr %98, ptr %97, align 8
  %99 = getelementptr inbounds { ptr, i64 }, ptr %19, i32 0, i32 1
  %100 = extractvalue { ptr, i64 } %95, 1
  store i64 %100, ptr %99, align 8
  br label %101

101:                                              ; preds = %163, %96
  %102 = invoke noundef zeroext i1 @_ZN3unoneERKNS_10CollectionImE8iteratorES4_(ptr noundef nonnull align 8 dereferenceable(16) %18, ptr noundef nonnull align 8 dereferenceable(16) %19)
          to label %103 unwind label %143

103:                                              ; preds = %101
  br i1 %102, label %147, label %104

104:                                              ; preds = %103
  call void @llvm.lifetime.end.p0(i64 16, ptr %19) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %18) #7
  call void @_ZN3uno10CollectionImED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %17) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %17) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #7
  br label %171

105:                                              ; preds = %4
  %106 = landingpad { ptr, i32 }
          cleanup
  %107 = extractvalue { ptr, i32 } %106, 0
  store ptr %107, ptr %10, align 8
  %108 = extractvalue { ptr, i32 } %106, 1
  store i32 %108, ptr %11, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #7
  br label %250

109:                                              ; preds = %38
  %110 = landingpad { ptr, i32 }
          cleanup
  %111 = extractvalue { ptr, i32 } %110, 0
  store ptr %111, ptr %10, align 8
  %112 = extractvalue { ptr, i32 } %110, 1
  store i32 %112, ptr %11, align 4
  br label %117

113:                                              ; preds = %48, %46
  %114 = landingpad { ptr, i32 }
          cleanup
  %115 = extractvalue { ptr, i32 } %114, 0
  store ptr %115, ptr %10, align 8
  %116 = extractvalue { ptr, i32 } %114, 1
  store i32 %116, ptr %11, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #7
  br label %117

117:                                              ; preds = %113, %109
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %13) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %13) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %12) #7
  br label %249

118:                                              ; preds = %49
  %119 = landingpad { ptr, i32 }
          cleanup
  %120 = extractvalue { ptr, i32 } %119, 0
  store ptr %120, ptr %10, align 8
  %121 = extractvalue { ptr, i32 } %119, 1
  store i32 %121, ptr %11, align 4
  br label %248

122:                                              ; preds = %53
  %123 = landingpad { ptr, i32 }
          cleanup
  %124 = extractvalue { ptr, i32 } %123, 0
  store ptr %124, ptr %10, align 8
  %125 = extractvalue { ptr, i32 } %123, 1
  store i32 %125, ptr %11, align 4
  br label %130

126:                                              ; preds = %55
  %127 = landingpad { ptr, i32 }
          cleanup
  %128 = extractvalue { ptr, i32 } %127, 0
  store ptr %128, ptr %10, align 8
  %129 = extractvalue { ptr, i32 } %127, 1
  store i32 %129, ptr %11, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #7
  br label %130

130:                                              ; preds = %126, %122
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %15) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %15) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %14) #7
  br label %247

131:                                              ; preds = %176, %80, %74, %66, %62, %58
  %132 = landingpad { ptr, i32 }
          cleanup
  %133 = extractvalue { ptr, i32 } %132, 0
  store ptr %133, ptr %10, align 8
  %134 = extractvalue { ptr, i32 } %132, 1
  store i32 %134, ptr %11, align 4
  br label %247

135:                                              ; preds = %81
  %136 = landingpad { ptr, i32 }
          cleanup
  %137 = extractvalue { ptr, i32 } %136, 0
  store ptr %137, ptr %10, align 8
  %138 = extractvalue { ptr, i32 } %136, 1
  store i32 %138, ptr %11, align 4
  br label %170

139:                                              ; preds = %86
  %140 = landingpad { ptr, i32 }
          cleanup
  %141 = extractvalue { ptr, i32 } %140, 0
  store ptr %141, ptr %10, align 8
  %142 = extractvalue { ptr, i32 } %140, 1
  store i32 %142, ptr %11, align 4
  br label %169

143:                                              ; preds = %161, %101, %89
  %144 = landingpad { ptr, i32 }
          cleanup
  %145 = extractvalue { ptr, i32 } %144, 0
  store ptr %145, ptr %10, align 8
  %146 = extractvalue { ptr, i32 } %144, 1
  store i32 %146, ptr %11, align 4
  br label %168

147:                                              ; preds = %103
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #7
  %148 = invoke noundef i64 @_ZNK3uno10CollectionImE8iteratordeEv(ptr noundef nonnull align 8 dereferenceable(16) %18)
          to label %149 unwind label %164

149:                                              ; preds = %147
  store i64 %148, ptr %20, align 8, !tbaa !19
  %150 = load ptr, ptr %7, align 8, !tbaa !5
  %151 = getelementptr inbounds %"class.uno::Iterate", ptr %150, i32 0, i32 6
  %152 = getelementptr inbounds %"struct.uno::Evaluations", ptr %151, i32 0, i32 3
  %153 = load i64, ptr %20, align 8, !tbaa !19
  %154 = invoke noundef nonnull align 8 dereferenceable(56) ptr @_ZN3uno17RectangularMatrixIdEixEm(ptr noundef nonnull align 8 dereferenceable(24) %152, i64 noundef %153)
          to label %155 unwind label %164

155:                                              ; preds = %149
  %156 = getelementptr inbounds %"class.uno::ScaledModel", ptr %26, i32 0, i32 2
  %157 = load i64, ptr %20, align 8, !tbaa !19
  %158 = invoke noundef double @_ZNK3uno7Scaling22get_constraint_scalingEm(ptr noundef nonnull align 8 dereferenceable(40) %156, i64 noundef %157)
          to label %159 unwind label %164

159:                                              ; preds = %155
  invoke void @_ZN3uno5scaleIdEEvRNS_12SparseVectorIT_EES2_(ptr noundef nonnull align 8 dereferenceable(56) %154, double noundef %158)
          to label %160 unwind label %164

160:                                              ; preds = %159
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #7
  br label %161

161:                                              ; preds = %160
  %162 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN3uno10CollectionImE8iteratorppEv(ptr noundef nonnull align 8 dereferenceable(16) %18)
          to label %163 unwind label %143

163:                                              ; preds = %161
  br label %101

164:                                              ; preds = %159, %155, %149, %147
  %165 = landingpad { ptr, i32 }
          cleanup
  %166 = extractvalue { ptr, i32 } %165, 0
  store ptr %166, ptr %10, align 8
  %167 = extractvalue { ptr, i32 } %165, 1
  store i32 %167, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #7
  br label %168

168:                                              ; preds = %164, %143
  call void @llvm.lifetime.end.p0(i64 16, ptr %19) #7
  br label %169

169:                                              ; preds = %168, %139
  call void @llvm.lifetime.end.p0(i64 16, ptr %18) #7
  call void @_ZN3uno10CollectionImED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %17) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %17) #7
  br label %170

170:                                              ; preds = %169, %135
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #7
  br label %247

171:                                              ; preds = %104
  %172 = load ptr, ptr %7, align 8, !tbaa !5
  %173 = getelementptr inbounds %"class.uno::Iterate", ptr %172, i32 0, i32 9
  store i8 0, ptr %173, align 2, !tbaa !20
  %174 = load ptr, ptr %7, align 8, !tbaa !5
  %175 = getelementptr inbounds %"class.uno::Iterate", ptr %174, i32 0, i32 10
  store i8 0, ptr %175, align 1, !tbaa !46
  br label %176

176:                                              ; preds = %171, %57
  %177 = getelementptr inbounds %"class.uno::ScaledModel", ptr %26, i32 0, i32 2
  %178 = invoke noundef double @_ZNK3uno7Scaling21get_objective_scalingEv(ptr noundef nonnull align 8 dereferenceable(40) %177)
          to label %179 unwind label %131

179:                                              ; preds = %176
  %180 = fcmp olt double 0.000000e+00, %178
  br i1 %180, label %181, label %182

181:                                              ; preds = %179
  br label %182

182:                                              ; preds = %181, %179
  %183 = phi i1 [ false, %179 ], [ true, %181 ]
  br i1 %183, label %184, label %185

184:                                              ; preds = %182
  br label %187

185:                                              ; preds = %182
  call void @__assert_fail(ptr noundef @.str.4, ptr noundef @.str.5, i32 noundef 31, ptr noundef @__PRETTY_FUNCTION__._ZN3uno11ScaledModelC2ESt10unique_ptrINS_5ModelESt14default_deleteIS2_EERNS_7IterateERKNS_7OptionsE) #8
  unreachable

186:                                              ; No predecessors!
  br label %187

187:                                              ; preds = %186, %184
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #7
  call void @llvm.lifetime.start.p0(i64 24, ptr %22) #7
  %188 = getelementptr inbounds %"class.uno::Model", ptr %26, i32 0, i32 3
  %189 = load i64, ptr %188, align 8, !tbaa !15
  invoke void @_ZN3uno5RangeILNS_14RangeDirectionE0EEC2Em(ptr noundef nonnull align 8 dereferenceable(24) %22, i64 noundef %189)
          to label %190 unwind label %209

190:                                              ; preds = %187
  store ptr %22, ptr %21, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %23) #7
  %191 = load ptr, ptr %21, align 8, !tbaa !5
  %192 = invoke { ptr, i64 } @_ZNK3uno10CollectionImE5beginEv(ptr noundef nonnull align 8 dereferenceable(8) %191)
          to label %193 unwind label %213

193:                                              ; preds = %190
  %194 = getelementptr inbounds { ptr, i64 }, ptr %23, i32 0, i32 0
  %195 = extractvalue { ptr, i64 } %192, 0
  store ptr %195, ptr %194, align 8
  %196 = getelementptr inbounds { ptr, i64 }, ptr %23, i32 0, i32 1
  %197 = extractvalue { ptr, i64 } %192, 1
  store i64 %197, ptr %196, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr %24) #7
  %198 = load ptr, ptr %21, align 8, !tbaa !5
  %199 = invoke { ptr, i64 } @_ZNK3uno10CollectionImE3endEv(ptr noundef nonnull align 8 dereferenceable(8) %198)
          to label %200 unwind label %217

200:                                              ; preds = %193
  %201 = getelementptr inbounds { ptr, i64 }, ptr %24, i32 0, i32 0
  %202 = extractvalue { ptr, i64 } %199, 0
  store ptr %202, ptr %201, align 8
  %203 = getelementptr inbounds { ptr, i64 }, ptr %24, i32 0, i32 1
  %204 = extractvalue { ptr, i64 } %199, 1
  store i64 %204, ptr %203, align 8
  br label %205

205:                                              ; preds = %242, %200
  %206 = invoke noundef zeroext i1 @_ZN3unoneERKNS_10CollectionImE8iteratorES4_(ptr noundef nonnull align 8 dereferenceable(16) %23, ptr noundef nonnull align 8 dereferenceable(16) %24)
          to label %207 unwind label %217

207:                                              ; preds = %205
  br i1 %206, label %221, label %208

208:                                              ; preds = %207
  call void @llvm.lifetime.end.p0(i64 16, ptr %24) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %23) #7
  call void @_ZN3uno10CollectionImED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %22) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %22) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #7
  br label %246

209:                                              ; preds = %187
  %210 = landingpad { ptr, i32 }
          cleanup
  %211 = extractvalue { ptr, i32 } %210, 0
  store ptr %211, ptr %10, align 8
  %212 = extractvalue { ptr, i32 } %210, 1
  store i32 %212, ptr %11, align 4
  br label %245

213:                                              ; preds = %190
  %214 = landingpad { ptr, i32 }
          cleanup
  %215 = extractvalue { ptr, i32 } %214, 0
  store ptr %215, ptr %10, align 8
  %216 = extractvalue { ptr, i32 } %214, 1
  store i32 %216, ptr %11, align 4
  br label %244

217:                                              ; preds = %240, %205, %193
  %218 = landingpad { ptr, i32 }
          cleanup
  %219 = extractvalue { ptr, i32 } %218, 0
  store ptr %219, ptr %10, align 8
  %220 = extractvalue { ptr, i32 } %218, 1
  store i32 %220, ptr %11, align 4
  br label %243

221:                                              ; preds = %207
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #7
  %222 = invoke noundef i64 @_ZNK3uno10CollectionImE8iteratordeEv(ptr noundef nonnull align 8 dereferenceable(16) %23)
          to label %223 unwind label %234

223:                                              ; preds = %221
  store i64 %222, ptr %25, align 8, !tbaa !19
  %224 = getelementptr inbounds %"class.uno::ScaledModel", ptr %26, i32 0, i32 2
  %225 = load i64, ptr %25, align 8, !tbaa !19
  %226 = invoke noundef double @_ZNK3uno7Scaling22get_constraint_scalingEm(ptr noundef nonnull align 8 dereferenceable(40) %224, i64 noundef %225)
          to label %227 unwind label %234

227:                                              ; preds = %223
  %228 = fcmp olt double 0.000000e+00, %226
  br i1 %228, label %229, label %230

229:                                              ; preds = %227
  br label %230

230:                                              ; preds = %229, %227
  %231 = phi i1 [ false, %227 ], [ true, %229 ]
  br i1 %231, label %232, label %233

232:                                              ; preds = %230
  br label %239

233:                                              ; preds = %230
  call void @__assert_fail(ptr noundef @.str.7, ptr noundef @.str.5, i32 noundef 33, ptr noundef @__PRETTY_FUNCTION__._ZN3uno11ScaledModelC2ESt10unique_ptrINS_5ModelESt14default_deleteIS2_EERNS_7IterateERKNS_7OptionsE) #8
  unreachable

234:                                              ; preds = %223, %221
  %235 = landingpad { ptr, i32 }
          cleanup
  %236 = extractvalue { ptr, i32 } %235, 0
  store ptr %236, ptr %10, align 8
  %237 = extractvalue { ptr, i32 } %235, 1
  store i32 %237, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #7
  br label %243

238:                                              ; No predecessors!
  br label %239

239:                                              ; preds = %238, %232
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #7
  br label %240

240:                                              ; preds = %239
  %241 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN3uno10CollectionImE8iteratorppEv(ptr noundef nonnull align 8 dereferenceable(16) %23)
          to label %242 unwind label %217

242:                                              ; preds = %240
  br label %205

243:                                              ; preds = %234, %217
  call void @llvm.lifetime.end.p0(i64 16, ptr %24) #7
  br label %244

244:                                              ; preds = %243, %213
  call void @llvm.lifetime.end.p0(i64 16, ptr %23) #7
  call void @_ZN3uno10CollectionImED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %22) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %22) #7
  br label %245

245:                                              ; preds = %244, %209
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #7
  br label %247

246:                                              ; preds = %208
  ret void

247:                                              ; preds = %245, %170, %131, %130
  call void @_ZN3uno6VectorIdED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %50) #7
  br label %248

248:                                              ; preds = %247, %118
  call void @_ZN3uno7ScalingD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %40) #7
  br label %249

249:                                              ; preds = %248, %117
  call void @_ZNSt10unique_ptrIN3uno5ModelESt14default_deleteIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %39) #7
  call void @_ZN3uno5ModelD2Ev(ptr noundef nonnull align 8 dereferenceable(64) %26) #7
  br label %250

250:                                              ; preds = %249, %105
  %251 = load ptr, ptr %10, align 8
  %252 = load i32, ptr %11, align 4
  %253 = insertvalue { ptr, i32 } poison, ptr %251, 0
  %254 = insertvalue { ptr, i32 } %253, i32 %252, 1
  resume { ptr, i32 } %254
}

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EERKS8_PKS5_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(32), ptr noundef) #1

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

declare void @_ZN3uno5ModelC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEmmd(ptr noundef nonnull align 8 dereferenceable(64), ptr noundef, i64 noundef, i64 noundef, double noundef) unnamed_addr #3

declare i32 @__gxx_personality_v0(...)

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

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

declare noundef double @_ZNK3uno7Options10get_doubleERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(145), ptr noundef nonnull align 8 dereferenceable(32)) #3

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

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

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

declare void @_ZN3uno7ScalingC1Emd(ptr noundef nonnull align 8 dereferenceable(40), i64 noundef, double noundef) unnamed_addr #3

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

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

declare noundef zeroext i1 @_ZNK3uno7Options8get_boolERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(145), ptr noundef nonnull align 8 dereferenceable(32)) #3

declare void @_ZN3uno7Iterate27evaluate_objective_gradientERKNS_5ModelE(ptr noundef nonnull align 8 dereferenceable(532), ptr noundef nonnull align 8 dereferenceable(64)) #3

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

declare void @_ZN3uno7Iterate28evaluate_constraint_jacobianERKNS_5ModelE(ptr noundef nonnull align 8 dereferenceable(532), ptr noundef nonnull align 8 dereferenceable(64)) #3

declare void @_ZN3uno7Scaling7computeERKNS_12SparseVectorIdEERKNS_17RectangularMatrixIdEE(ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 8 dereferenceable(24)) #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3uno5scaleIdEEvRNS_12SparseVectorIT_EES2_(ptr noundef nonnull align 8 dereferenceable(56), double noundef) #0

declare noundef double @_ZNK3uno7Scaling21get_objective_scalingEv(ptr noundef nonnull align 8 dereferenceable(40)) #3

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

; Function Attrs: mustprogress uwtable
declare dso_local { ptr, i64 } @_ZNK3uno10CollectionImE5beginEv(ptr noundef nonnull align 8 dereferenceable(8)) #0 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { ptr, i64 } @_ZNK3uno10CollectionImE3endEv(ptr noundef nonnull align 8 dereferenceable(8)) #0 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef i64 @_ZNK3uno10CollectionImE8iteratordeEv(ptr noundef nonnull align 8 dereferenceable(16)) #0 align 2

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

declare noundef double @_ZNK3uno7Scaling22get_constraint_scalingEm(ptr noundef nonnull align 8 dereferenceable(40), i64 noundef) #3

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3uno7ScalingD2Ev(ptr noundef nonnull align 8 dereferenceable(40)) unnamed_addr #6 align 2

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

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

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

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

attributes #0 = { 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 #1 = { 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 #2 = { 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 #3 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #5 = { 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 #6 = { 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 #7 = { nounwind }
attributes #8 = { 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, !13, i64 40}
!10 = !{!"_ZTSN3uno5ModelE", !11, i64 8, !13, i64 40, !13, i64 48, !14, i64 56}
!11 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !12, i64 0, !13, i64 8, !7, i64 16}
!12 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !6, i64 0}
!13 = !{!"long", !7, i64 0}
!14 = !{!"double", !7, i64 0}
!15 = !{!10, !13, i64 48}
!16 = !{!10, !14, i64 56}
!17 = !{!18, !18, i64 0}
!18 = !{!"vtable pointer", !8, i64 0}
!19 = !{!13, !13, i64 0}
!20 = !{!21, !39, i64 306}
!21 = !{!"_ZTSN3uno7IterateE", !13, i64 0, !13, i64 8, !22, i64 16, !27, i64 40, !27, i64 112, !14, i64 184, !28, i64 192, !39, i64 304, !39, i64 305, !39, i64 306, !39, i64 307, !14, i64 312, !40, i64 320, !40, i64 400, !42, i64 480, !45, i64 528}
!22 = !{!"_ZTSN3uno6VectorIdEE", !23, i64 0}
!23 = !{!"_ZTSSt6vectorIdSaIdEE", !24, i64 0}
!24 = !{!"_ZTSSt12_Vector_baseIdSaIdEE", !25, i64 0}
!25 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE12_Vector_implE", !26, i64 0}
!26 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!27 = !{!"_ZTSN3uno11MultipliersE", !22, i64 0, !22, i64 24, !22, i64 48}
!28 = !{!"_ZTSN3uno11EvaluationsE", !14, i64 0, !23, i64 8, !29, i64 32, !34, i64 88}
!29 = !{!"_ZTSN3uno12SparseVectorIdEE", !30, i64 0, !23, i64 24, !13, i64 48}
!30 = !{!"_ZTSSt6vectorImSaImEE", !31, i64 0}
!31 = !{!"_ZTSSt12_Vector_baseImSaImEE", !32, i64 0}
!32 = !{!"_ZTSNSt12_Vector_baseImSaImEE12_Vector_implE", !33, i64 0}
!33 = !{!"_ZTSNSt12_Vector_baseImSaImEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!34 = !{!"_ZTSN3uno17RectangularMatrixIdEE", !35, i64 0}
!35 = !{!"_ZTSSt6vectorIN3uno12SparseVectorIdEESaIS2_EE", !36, i64 0}
!36 = !{!"_ZTSSt12_Vector_baseIN3uno12SparseVectorIdEESaIS2_EE", !37, i64 0}
!37 = !{!"_ZTSNSt12_Vector_baseIN3uno12SparseVectorIdEESaIS2_EE12_Vector_implE", !38, i64 0}
!38 = !{!"_ZTSNSt12_Vector_baseIN3uno12SparseVectorIdEESaIS2_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!39 = !{!"bool", !7, i64 0}
!40 = !{!"_ZTSN3uno13DualResidualsE", !14, i64 0, !14, i64 8, !14, i64 16, !14, i64 24, !41, i64 32}
!41 = !{!"_ZTSN3uno18LagrangianGradientIdEE", !22, i64 0, !22, i64 24}
!42 = !{!"_ZTSN3uno16ProgressMeasuresE", !14, i64 0, !43, i64 8, !14, i64 40}
!43 = !{!"_ZTSSt8functionIFddEE", !44, i64 0, !6, i64 24}
!44 = !{!"_ZTSSt14_Function_base", !7, i64 0, !6, i64 16}
!45 = !{!"_ZTSN3uno13IterateStatusE", !7, i64 0}
!46 = !{!21, !39, i64 307}


; 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::__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::allocator" = type { i8 }
%"class.uno::Range" = type { %"class.uno::Collection", i64, i64 }
%"class.uno::Collection" = type { ptr }
%"class.uno::Collection<unsigned long>::iterator" = type { ptr, i64 }

@.str = external hidden unnamed_addr constant [11 x i8], align 1
@_ZTVN3uno11ScaledModelE = external dso_local unnamed_addr constant { [34 x ptr] }, align 8
@.str.1 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [73 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [72 x i8], align 1
@__PRETTY_FUNCTION__._ZN3uno11ScaledModelC2ESt10unique_ptrINS_5ModelESt14default_deleteIS2_EERNS_7IterateERKNS_7OptionsE = external hidden unnamed_addr constant [82 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [91 x i8], align 1

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3uno11ScaledModelC2ESt10unique_ptrINS_5ModelESt14default_deleteIS2_EERNS_7IterateERKNS_7OptionsE(ptr noundef nonnull align 8 dereferenceable(136) %0, ptr noundef nonnull %1, ptr noundef nonnull align 8 dereferenceable(532) %2, ptr noundef nonnull align 8 dereferenceable(145) %3) unnamed_addr #0 align 2 personality ptr @__gxx_personality_v0 {
  %5 = alloca %"class.std::__cxx11::basic_string", align 8
  %6 = alloca %"class.std::__cxx11::basic_string", align 8
  %7 = alloca %"class.std::allocator", align 1
  %8 = alloca %"class.std::__cxx11::basic_string", align 8
  %9 = alloca %"class.std::allocator", align 1
  %10 = alloca %"class.uno::Range", align 8
  %11 = alloca %"class.uno::Collection<unsigned long>::iterator", align 8
  %12 = alloca %"class.uno::Collection<unsigned long>::iterator", align 8
  %13 = alloca %"class.uno::Range", align 8
  %14 = alloca %"class.uno::Collection<unsigned long>::iterator", align 8
  %15 = alloca %"class.uno::Collection<unsigned long>::iterator", align 8
  %16 = tail call noundef ptr @_ZNKSt10unique_ptrIN3uno5ModelESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %1) #7
  %17 = getelementptr inbounds i8, ptr %16, i64 8
  call void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EERKS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %5, ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef nonnull @.str)
  %18 = call noundef ptr @_ZNKSt10unique_ptrIN3uno5ModelESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %1) #7
  %19 = getelementptr inbounds i8, ptr %18, i64 40
  %20 = load i64, ptr %19, align 8, !tbaa !5
  %21 = call noundef ptr @_ZNKSt10unique_ptrIN3uno5ModelESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %1) #7
  %22 = getelementptr inbounds i8, ptr %21, i64 48
  %23 = load i64, ptr %22, align 8, !tbaa !14
  %24 = call noundef ptr @_ZNKSt10unique_ptrIN3uno5ModelESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %1) #7
  %25 = getelementptr inbounds i8, ptr %24, i64 56
  %26 = load double, ptr %25, align 8, !tbaa !15
  invoke void @_ZN3uno5ModelC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEmmd(ptr noundef nonnull align 8 dereferenceable(64) %0, ptr noundef nonnull %5, i64 noundef %20, i64 noundef %23, double noundef %26)
          to label %27 unwind label %74

27:                                               ; preds = %4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %5) #7
  store ptr getelementptr inbounds inrange(-16, 256) (i8, ptr @_ZTVN3uno11ScaledModelE, i64 16), ptr %0, align 8, !tbaa !16
  %28 = getelementptr inbounds i8, ptr %0, i64 64
  call void @_ZNSt10unique_ptrIN3uno5ModelESt14default_deleteIS1_EEC2EOS4_(ptr noundef nonnull align 8 dereferenceable(8) %28, ptr noundef nonnull align 8 dereferenceable(8) %1) #7
  %29 = getelementptr inbounds i8, ptr %0, i64 72
  %30 = call noundef ptr @_ZNKSt10unique_ptrIN3uno5ModelESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %28) #7
  %31 = getelementptr inbounds i8, ptr %30, i64 48
  %32 = load i64, ptr %31, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %6) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %7) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %7) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %7)
          to label %33 unwind label %76

33:                                               ; preds = %27
  %34 = invoke noundef double @_ZNK3uno7Options10get_doubleERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(145) %3, ptr noundef nonnull align 8 dereferenceable(32) %6)
          to label %35 unwind label %78

35:                                               ; preds = %33
  invoke void @_ZN3uno7ScalingC1Emd(ptr noundef nonnull align 8 dereferenceable(40) %29, i64 noundef %32, double noundef %34)
          to label %36 unwind label %78

36:                                               ; preds = %35
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %6) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %7) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %7) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %6) #7
  %37 = getelementptr inbounds i8, ptr %0, i64 112
  %38 = getelementptr inbounds i8, ptr %0, i64 48
  %39 = load i64, ptr %38, align 8, !tbaa !14
  invoke void @_ZN3uno6VectorIdEC2Em(ptr noundef nonnull align 8 dereferenceable(24) %37, i64 noundef %39)
          to label %40 unwind label %81

40:                                               ; preds = %36
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %8) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %9) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %9) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %8, ptr noundef nonnull @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %9)
          to label %41 unwind label %83

41:                                               ; preds = %40
  %42 = invoke noundef zeroext i1 @_ZNK3uno7Options8get_boolERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(145) %3, ptr noundef nonnull align 8 dereferenceable(32) %8)
          to label %43 unwind label %85

43:                                               ; preds = %41
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %9) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %9) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %8) #7
  br i1 %42, label %44, label %106

44:                                               ; preds = %43
  %45 = call noundef nonnull align 8 dereferenceable(64) ptr @_ZNKSt10unique_ptrIN3uno5ModelESt14default_deleteIS1_EEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %28) #7
  invoke void @_ZN3uno7Iterate27evaluate_objective_gradientERKNS_5ModelE(ptr noundef nonnull align 8 dereferenceable(532) %2, ptr noundef nonnull align 8 dereferenceable(64) %45)
          to label %46 unwind label %88

46:                                               ; preds = %44
  %47 = call noundef nonnull align 8 dereferenceable(64) ptr @_ZNKSt10unique_ptrIN3uno5ModelESt14default_deleteIS1_EEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %28) #7
  invoke void @_ZN3uno7Iterate28evaluate_constraint_jacobianERKNS_5ModelE(ptr noundef nonnull align 8 dereferenceable(532) %2, ptr noundef nonnull align 8 dereferenceable(64) %47)
          to label %48 unwind label %88

48:                                               ; preds = %46
  %49 = getelementptr inbounds i8, ptr %2, i64 224
  %50 = getelementptr inbounds i8, ptr %2, i64 280
  invoke void @_ZN3uno7Scaling7computeERKNS_12SparseVectorIdEERKNS_17RectangularMatrixIdEE(ptr noundef nonnull align 8 dereferenceable(40) %29, ptr noundef nonnull align 8 dereferenceable(56) %49, ptr noundef nonnull align 8 dereferenceable(24) %50)
          to label %51 unwind label %88

51:                                               ; preds = %48
  %52 = invoke noundef double @_ZNK3uno7Scaling21get_objective_scalingEv(ptr noundef nonnull align 8 dereferenceable(40) %29)
          to label %53 unwind label %88

53:                                               ; preds = %51
  invoke void @_ZN3uno5scaleIdEEvRNS_12SparseVectorIT_EES2_(ptr noundef nonnull align 8 dereferenceable(56) %49, double noundef %52)
          to label %54 unwind label %88

54:                                               ; preds = %53
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %10) #7
  %55 = call noundef ptr @_ZNKSt10unique_ptrIN3uno5ModelESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %28) #7
  %56 = getelementptr inbounds i8, ptr %55, i64 48
  %57 = load i64, ptr %56, align 8, !tbaa !14
  invoke void @_ZN3uno5RangeILNS_14RangeDirectionE0EEC2Em(ptr noundef nonnull align 8 dereferenceable(24) %10, i64 noundef %57)
          to label %58 unwind label %90

58:                                               ; preds = %54
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %11) #7
  %59 = invoke { ptr, i64 } @_ZNK3uno10CollectionImE5beginEv(ptr noundef nonnull align 8 dereferenceable(8) %10)
          to label %60 unwind label %92

60:                                               ; preds = %58
  %61 = extractvalue { ptr, i64 } %59, 0
  store ptr %61, ptr %11, align 8
  %62 = getelementptr inbounds i8, ptr %11, i64 8
  %63 = extractvalue { ptr, i64 } %59, 1
  store i64 %63, ptr %62, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %12) #7
  %64 = invoke { ptr, i64 } @_ZNK3uno10CollectionImE3endEv(ptr noundef nonnull align 8 dereferenceable(8) %10)
          to label %65 unwind label %.loopexit.split-lp47

65:                                               ; preds = %60
  %66 = extractvalue { ptr, i64 } %64, 0
  store ptr %66, ptr %12, align 8
  %67 = getelementptr inbounds i8, ptr %12, i64 8
  %68 = extractvalue { ptr, i64 } %64, 1
  store i64 %68, ptr %67, align 8
  br label %69

69:                                               ; preds = %100, %65
  %70 = call noundef zeroext i1 @_ZN3unoneERKNS_10CollectionImE8iteratorES4_(ptr noundef nonnull align 8 dereferenceable(16) %11, ptr noundef nonnull align 8 dereferenceable(16) %12)
  br i1 %70, label %94, label %71

71:                                               ; preds = %69
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %12) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #7
  call void @_ZN3uno10CollectionImED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %10) #7
  %72 = getelementptr inbounds i8, ptr %2, i64 306
  store i8 0, ptr %72, align 2, !tbaa !18
  %73 = getelementptr inbounds i8, ptr %2, i64 307
  store i8 0, ptr %73, align 1, !tbaa !44
  br label %106

74:                                               ; preds = %4
  %75 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %5) #7
  br label %147

76:                                               ; preds = %27
  %77 = landingpad { ptr, i32 }
          cleanup
  br label %80

78:                                               ; preds = %35, %33
  %79 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %6) #7
  br label %80

80:                                               ; preds = %78, %76
  %.pn = phi { ptr, i32 } [ %79, %78 ], [ %77, %76 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %7) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %7) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %6) #7
  br label %146

81:                                               ; preds = %36
  %82 = landingpad { ptr, i32 }
          cleanup
  br label %145

83:                                               ; preds = %40
  %84 = landingpad { ptr, i32 }
          cleanup
  br label %87

85:                                               ; preds = %41
  %86 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #7
  br label %87

87:                                               ; preds = %85, %83
  %.pn32 = phi { ptr, i32 } [ %86, %85 ], [ %84, %83 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %9) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %9) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %8) #7
  br label %144

88:                                               ; preds = %106, %53, %51, %48, %46, %44
  %89 = landingpad { ptr, i32 }
          cleanup
  br label %144

90:                                               ; preds = %54
  %91 = landingpad { ptr, i32 }
          cleanup
  br label %144

92:                                               ; preds = %58
  %93 = landingpad { ptr, i32 }
          cleanup
  br label %105

.loopexit46:                                      ; preds = %100
  %lpad.loopexit48 = landingpad { ptr, i32 }
          cleanup
  br label %104

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

94:                                               ; preds = %69
  %95 = invoke noundef i64 @_ZNK3uno10CollectionImE8iteratordeEv(ptr noundef nonnull align 8 dereferenceable(16) %11)
          to label %96 unwind label %102

96:                                               ; preds = %94
  %97 = call noundef nonnull align 8 dereferenceable(56) ptr @_ZN3uno17RectangularMatrixIdEixEm(ptr noundef nonnull align 8 dereferenceable(24) %50, i64 noundef %95)
  %98 = invoke noundef double @_ZNK3uno7Scaling22get_constraint_scalingEm(ptr noundef nonnull align 8 dereferenceable(40) %29, i64 noundef %95)
          to label %99 unwind label %102

99:                                               ; preds = %96
  invoke void @_ZN3uno5scaleIdEEvRNS_12SparseVectorIT_EES2_(ptr noundef nonnull align 8 dereferenceable(56) %97, double noundef %98)
          to label %100 unwind label %102

100:                                              ; preds = %99
  %101 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN3uno10CollectionImE8iteratorppEv(ptr noundef nonnull align 8 dereferenceable(16) %11)
          to label %69 unwind label %.loopexit46

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

104:                                              ; preds = %.loopexit46, %.loopexit.split-lp47, %102
  %.pn38 = phi { ptr, i32 } [ %103, %102 ], [ %lpad.loopexit48, %.loopexit46 ], [ %lpad.loopexit.split-lp49, %.loopexit.split-lp47 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %12) #7
  br label %105

105:                                              ; preds = %104, %92
  %.pn38.pn = phi { ptr, i32 } [ %.pn38, %104 ], [ %93, %92 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #7
  call void @_ZN3uno10CollectionImED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %10) #7
  br label %144

106:                                              ; preds = %71, %43
  %107 = invoke noundef double @_ZNK3uno7Scaling21get_objective_scalingEv(ptr noundef nonnull align 8 dereferenceable(40) %29)
          to label %108 unwind label %88

108:                                              ; preds = %106
  %109 = fcmp ogt double %107, 0.000000e+00
  br i1 %109, label %111, label %110

110:                                              ; preds = %108
  call void @__assert_fail(ptr noundef nonnull @.str.4, ptr noundef nonnull @.str.5, i32 noundef 31, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN3uno11ScaledModelC2ESt10unique_ptrINS_5ModelESt14default_deleteIS2_EERNS_7IterateERKNS_7OptionsE) #8
  unreachable

111:                                              ; preds = %108
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %13) #7
  %112 = load i64, ptr %38, align 8, !tbaa !14
  invoke void @_ZN3uno5RangeILNS_14RangeDirectionE0EEC2Em(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef %112)
          to label %113 unwind label %127

113:                                              ; preds = %111
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %14) #7
  %114 = invoke { ptr, i64 } @_ZNK3uno10CollectionImE5beginEv(ptr noundef nonnull align 8 dereferenceable(8) %13)
          to label %115 unwind label %129

115:                                              ; preds = %113
  %116 = extractvalue { ptr, i64 } %114, 0
  store ptr %116, ptr %14, align 8
  %117 = getelementptr inbounds i8, ptr %14, i64 8
  %118 = extractvalue { ptr, i64 } %114, 1
  store i64 %118, ptr %117, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %15) #7
  %119 = invoke { ptr, i64 } @_ZNK3uno10CollectionImE3endEv(ptr noundef nonnull align 8 dereferenceable(8) %13)
          to label %120 unwind label %.loopexit.split-lp

120:                                              ; preds = %115
  %121 = extractvalue { ptr, i64 } %119, 0
  store ptr %121, ptr %15, align 8
  %122 = getelementptr inbounds i8, ptr %15, i64 8
  %123 = extractvalue { ptr, i64 } %119, 1
  store i64 %123, ptr %122, align 8
  br label %124

124:                                              ; preds = %140, %120
  %125 = call noundef zeroext i1 @_ZN3unoneERKNS_10CollectionImE8iteratorES4_(ptr noundef nonnull align 8 dereferenceable(16) %14, ptr noundef nonnull align 8 dereferenceable(16) %15)
  br i1 %125, label %131, label %126

126:                                              ; preds = %124
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %15) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %14) #7
  call void @_ZN3uno10CollectionImED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %13) #7
  ret void

127:                                              ; preds = %111
  %128 = landingpad { ptr, i32 }
          cleanup
  br label %144

129:                                              ; preds = %113
  %130 = landingpad { ptr, i32 }
          cleanup
  br label %143

.loopexit:                                        ; preds = %140
  %lpad.loopexit = landingpad { ptr, i32 }
          cleanup
  br label %142

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

131:                                              ; preds = %124
  %132 = invoke noundef i64 @_ZNK3uno10CollectionImE8iteratordeEv(ptr noundef nonnull align 8 dereferenceable(16) %14)
          to label %133 unwind label %138

133:                                              ; preds = %131
  %134 = invoke noundef double @_ZNK3uno7Scaling22get_constraint_scalingEm(ptr noundef nonnull align 8 dereferenceable(40) %29, i64 noundef %132)
          to label %135 unwind label %138

135:                                              ; preds = %133
  %136 = fcmp ogt double %134, 0.000000e+00
  br i1 %136, label %140, label %137

137:                                              ; preds = %135
  call void @__assert_fail(ptr noundef nonnull @.str.7, ptr noundef nonnull @.str.5, i32 noundef 33, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN3uno11ScaledModelC2ESt10unique_ptrINS_5ModelESt14default_deleteIS2_EERNS_7IterateERKNS_7OptionsE) #8
  unreachable

138:                                              ; preds = %133, %131
  %139 = landingpad { ptr, i32 }
          cleanup
  br label %142

140:                                              ; preds = %135
  %141 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN3uno10CollectionImE8iteratorppEv(ptr noundef nonnull align 8 dereferenceable(16) %14)
          to label %124 unwind label %.loopexit

142:                                              ; preds = %.loopexit, %.loopexit.split-lp, %138
  %.pn34 = phi { ptr, i32 } [ %139, %138 ], [ %lpad.loopexit, %.loopexit ], [ %lpad.loopexit.split-lp, %.loopexit.split-lp ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %15) #7
  br label %143

143:                                              ; preds = %142, %129
  %.pn34.pn = phi { ptr, i32 } [ %.pn34, %142 ], [ %130, %129 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %14) #7
  call void @_ZN3uno10CollectionImED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %13) #7
  br label %144

144:                                              ; preds = %127, %143, %90, %105, %88, %87
  %.pn38.pn.pn.pn = phi { ptr, i32 } [ %89, %88 ], [ %.pn32, %87 ], [ %.pn38.pn, %105 ], [ %91, %90 ], [ %.pn34.pn, %143 ], [ %128, %127 ]
  call void @_ZN3uno6VectorIdED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %37) #7
  br label %145

145:                                              ; preds = %144, %81
  %.pn38.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn38.pn.pn.pn, %144 ], [ %82, %81 ]
  call void @_ZN3uno7ScalingD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %29) #7
  br label %146

146:                                              ; preds = %145, %80
  %.pn38.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn38.pn.pn.pn.pn, %145 ], [ %.pn, %80 ]
  call void @_ZNSt10unique_ptrIN3uno5ModelESt14default_deleteIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %28) #7
  call void @_ZN3uno5ModelD2Ev(ptr noundef nonnull align 8 dereferenceable(64) %0) #7
  br label %147

147:                                              ; preds = %146, %74
  %.pn38.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn38.pn.pn.pn.pn.pn, %146 ], [ %75, %74 ]
  resume { ptr, i32 } %.pn38.pn.pn.pn.pn.pn.pn
}

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EERKS8_PKS5_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(32), ptr noundef) local_unnamed_addr #1

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

declare void @_ZN3uno5ModelC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEmmd(ptr noundef nonnull align 8 dereferenceable(64), ptr noundef, i64 noundef, i64 noundef, double noundef) unnamed_addr #3

declare i32 @__gxx_personality_v0(...)

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

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

declare noundef double @_ZNK3uno7Options10get_doubleERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(145), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #3

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

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

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

declare void @_ZN3uno7ScalingC1Emd(ptr noundef nonnull align 8 dereferenceable(40), i64 noundef, double noundef) unnamed_addr #3

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

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

declare noundef zeroext i1 @_ZNK3uno7Options8get_boolERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(145), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #3

declare void @_ZN3uno7Iterate27evaluate_objective_gradientERKNS_5ModelE(ptr noundef nonnull align 8 dereferenceable(532), ptr noundef nonnull align 8 dereferenceable(64)) local_unnamed_addr #3

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

declare void @_ZN3uno7Iterate28evaluate_constraint_jacobianERKNS_5ModelE(ptr noundef nonnull align 8 dereferenceable(532), ptr noundef nonnull align 8 dereferenceable(64)) local_unnamed_addr #3

declare void @_ZN3uno7Scaling7computeERKNS_12SparseVectorIdEERKNS_17RectangularMatrixIdEE(ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3uno5scaleIdEEvRNS_12SparseVectorIT_EES2_(ptr noundef nonnull align 8 dereferenceable(56), double noundef) local_unnamed_addr #0

declare noundef double @_ZNK3uno7Scaling21get_objective_scalingEv(ptr noundef nonnull align 8 dereferenceable(40)) local_unnamed_addr #3

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

; Function Attrs: mustprogress uwtable
declare dso_local { ptr, i64 } @_ZNK3uno10CollectionImE5beginEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { ptr, i64 } @_ZNK3uno10CollectionImE3endEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #0 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef i64 @_ZNK3uno10CollectionImE8iteratordeEv(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #0 align 2

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

declare noundef double @_ZNK3uno7Scaling22get_constraint_scalingEm(ptr noundef nonnull align 8 dereferenceable(40), i64 noundef) local_unnamed_addr #3

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3uno7ScalingD2Ev(ptr noundef nonnull align 8 dereferenceable(40)) unnamed_addr #6 align 2

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

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

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

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

attributes #0 = { 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 #1 = { 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 #2 = { 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 #3 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #5 = { 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 #6 = { 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 #7 = { nounwind }
attributes #8 = { 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, !12, i64 40}
!6 = !{!"_ZTSN3uno5ModelE", !7, i64 8, !12, i64 40, !12, i64 48, !13, i64 56}
!7 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !8, i64 0, !12, i64 8, !10, i64 16}
!8 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !9, i64 0}
!9 = !{!"any pointer", !10, i64 0}
!10 = !{!"omnipotent char", !11, i64 0}
!11 = !{!"Simple C++ TBAA"}
!12 = !{!"long", !10, i64 0}
!13 = !{!"double", !10, i64 0}
!14 = !{!6, !12, i64 48}
!15 = !{!6, !13, i64 56}
!16 = !{!17, !17, i64 0}
!17 = !{!"vtable pointer", !11, i64 0}
!18 = !{!19, !37, i64 306}
!19 = !{!"_ZTSN3uno7IterateE", !12, i64 0, !12, i64 8, !20, i64 16, !25, i64 40, !25, i64 112, !13, i64 184, !26, i64 192, !37, i64 304, !37, i64 305, !37, i64 306, !37, i64 307, !13, i64 312, !38, i64 320, !38, i64 400, !40, i64 480, !43, i64 528}
!20 = !{!"_ZTSN3uno6VectorIdEE", !21, i64 0}
!21 = !{!"_ZTSSt6vectorIdSaIdEE", !22, i64 0}
!22 = !{!"_ZTSSt12_Vector_baseIdSaIdEE", !23, i64 0}
!23 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE12_Vector_implE", !24, i64 0}
!24 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE17_Vector_impl_dataE", !9, i64 0, !9, i64 8, !9, i64 16}
!25 = !{!"_ZTSN3uno11MultipliersE", !20, i64 0, !20, i64 24, !20, i64 48}
!26 = !{!"_ZTSN3uno11EvaluationsE", !13, i64 0, !21, i64 8, !27, i64 32, !32, i64 88}
!27 = !{!"_ZTSN3uno12SparseVectorIdEE", !28, i64 0, !21, i64 24, !12, i64 48}
!28 = !{!"_ZTSSt6vectorImSaImEE", !29, i64 0}
!29 = !{!"_ZTSSt12_Vector_baseImSaImEE", !30, i64 0}
!30 = !{!"_ZTSNSt12_Vector_baseImSaImEE12_Vector_implE", !31, i64 0}
!31 = !{!"_ZTSNSt12_Vector_baseImSaImEE17_Vector_impl_dataE", !9, i64 0, !9, i64 8, !9, i64 16}
!32 = !{!"_ZTSN3uno17RectangularMatrixIdEE", !33, i64 0}
!33 = !{!"_ZTSSt6vectorIN3uno12SparseVectorIdEESaIS2_EE", !34, i64 0}
!34 = !{!"_ZTSSt12_Vector_baseIN3uno12SparseVectorIdEESaIS2_EE", !35, i64 0}
!35 = !{!"_ZTSNSt12_Vector_baseIN3uno12SparseVectorIdEESaIS2_EE12_Vector_implE", !36, i64 0}
!36 = !{!"_ZTSNSt12_Vector_baseIN3uno12SparseVectorIdEESaIS2_EE17_Vector_impl_dataE", !9, i64 0, !9, i64 8, !9, i64 16}
!37 = !{!"bool", !10, i64 0}
!38 = !{!"_ZTSN3uno13DualResidualsE", !13, i64 0, !13, i64 8, !13, i64 16, !13, i64 24, !39, i64 32}
!39 = !{!"_ZTSN3uno18LagrangianGradientIdEE", !20, i64 0, !20, i64 24}
!40 = !{!"_ZTSN3uno16ProgressMeasuresE", !13, i64 0, !41, i64 8, !13, i64 40}
!41 = !{!"_ZTSSt8functionIFddEE", !42, i64 0, !9, i64 24}
!42 = !{!"_ZTSSt14_Function_base", !10, i64 0, !9, i64 16}
!43 = !{!"_ZTSN3uno13IterateStatusE", !10, i64 0}
!44 = !{!19, !37, i64 307}


; Effective O3 passes: EarlyCSEPass,GlobalOptPass,InferFunctionAttrsPass,InstCombinePass,LoopSimplifyPass,PostOrderFunctionAttrsPass,SROAPass,SimplifyCFGPass,TailCallElimPass