; LLVM IR from cvanaret/Uno :: uno/Uno.ll (ZN3uno3Uno5solveERKNS_5ModelERNS_7IterateERKNS_7OptionsERNS_13UserCallbacksE)

; 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.uno::Result" = type { i32, [4 x i8], %"class.uno::Iterate", i64, i64, i64, double, i64, i64, i64, i64, i64, i64 }
%"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::Vector" = type { %"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::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 } }
%"class.uno::Timer" = type { i64 }
%"class.uno::Statistics" = type { %"class.std::map.23", %"class.std::map.29", %"class.std::map.35" }
%"class.std::map.23" = type { %"class.std::_Rb_tree.24" }
%"class.std::_Rb_tree.24" = type { %"struct.std::_Rb_tree<int, std::pair<const int, std::__cxx11::basic_string<char>>, std::_Select1st<std::pair<const int, std::__cxx11::basic_string<char>>>, std::less<int>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<int, std::pair<const int, std::__cxx11::basic_string<char>>, std::_Select1st<std::pair<const int, std::__cxx11::basic_string<char>>>, std::less<int>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"struct.std::_Rb_tree_header" = type { %"struct.std::_Rb_tree_node_base", i64 }
%"struct.std::_Rb_tree_node_base" = type { i32, ptr, ptr, ptr }
%"class.std::map.29" = type { %"class.std::_Rb_tree.30" }
%"class.std::_Rb_tree.30" = type { %"struct.std::_Rb_tree<std::basic_string_view<char>, std::pair<const std::basic_string_view<char>, int>, std::_Select1st<std::pair<const std::basic_string_view<char>, int>>, std::less<std::basic_string_view<char>>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<std::basic_string_view<char>, std::pair<const std::basic_string_view<char>, int>, std::_Select1st<std::pair<const std::basic_string_view<char>, int>>, std::less<std::basic_string_view<char>>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"class.std::map.35" = type { %"class.std::_Rb_tree.36" }
%"class.std::_Rb_tree.36" = type { %"struct.std::_Rb_tree<std::basic_string_view<char>, std::pair<const std::basic_string_view<char>, std::__cxx11::basic_string<char>>, std::_Select1st<std::pair<const std::basic_string_view<char>, std::__cxx11::basic_string<char>>>, std::less<std::basic_string_view<char>>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<std::basic_string_view<char>, std::pair<const std::basic_string_view<char>, std::__cxx11::basic_string<char>>, std::_Select1st<std::pair<const std::basic_string_view<char>, std::__cxx11::basic_string<char>>>, std::less<std::basic_string_view<char>>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"struct.uno::WarmstartInformation" = type { i8, i8, i8, i8, i8, i8 }
%"class.std::basic_string_view" = type { i64, 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::allocator" = type { i8 }
%"class.uno::Uno" = type { %"class.std::unique_ptr", i64, double, i8, %"class.std::__cxx11::basic_string" }
%"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 }

@_ZN3uno6Logger5levelE = external dso_local global i32, align 4
@_ZTISt9exception = external constant ptr
@.str.3 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [43 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

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #1 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 #2 align 2

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 #1 align 2

; 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
define dso_local void @_ZN3uno3Uno5solveERKNS_5ModelERNS_7IterateERKNS_7OptionsERNS_13UserCallbacksE(ptr dead_on_unwind noalias writable sret(%"struct.uno::Result") align 8 %0, ptr noundef nonnull align 8 dereferenceable(64) %1, ptr noundef nonnull align 8 dereferenceable(64) %2, ptr noundef nonnull align 8 dereferenceable(532) %3, ptr noundef nonnull align 8 dereferenceable(145) %4, ptr noundef nonnull align 8 dereferenceable(8) %5) #2 align 2 personality ptr @__gxx_personality_v0 {
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca %"class.uno::Timer", align 8
  %14 = alloca %"class.uno::Statistics", align 8
  %15 = alloca %"struct.uno::WarmstartInformation", align 1
  %16 = alloca ptr, align 8
  %17 = alloca i32, align 4
  %18 = alloca i64, align 8
  %19 = alloca i32, align 4
  %20 = alloca %"class.uno::Iterate", align 8
  %21 = alloca i8, align 1
  %22 = alloca %"class.std::basic_string_view", align 8
  %23 = alloca i32, align 4
  %24 = alloca i8, align 1
  %25 = alloca ptr, align 8
  %26 = alloca %"class.std::basic_string_view", align 8
  %27 = alloca %"class.std::__cxx11::basic_string", align 8
  %28 = alloca %"class.std::allocator", align 1
  %29 = alloca i32, align 4
  %30 = alloca ptr, align 8
  %31 = alloca i8, align 1
  %32 = alloca ptr, align 8
  %33 = alloca i32, align 4
  %34 = alloca ptr, align 8
  %35 = alloca i8, align 1
  %36 = alloca i1, align 1
  store ptr %0, ptr %7, align 8
  store ptr %1, ptr %8, align 8, !tbaa !5
  store ptr %2, ptr %9, align 8, !tbaa !5
  store ptr %3, ptr %10, align 8, !tbaa !5
  store ptr %4, ptr %11, align 8, !tbaa !5
  store ptr %5, ptr %12, align 8, !tbaa !5
  %37 = load ptr, ptr %8, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #7
  call void @_ZN3uno5TimerC1Ev(ptr noundef nonnull align 8 dereferenceable(8) %13)
  call void @llvm.lifetime.start.p0(i64 144, ptr %14) #7
  %38 = load ptr, ptr %9, align 8, !tbaa !5
  %39 = load ptr, ptr %11, align 8, !tbaa !5
  call void @_ZN3uno3Uno17create_statisticsERKNS_5ModelERKNS_7OptionsE(ptr dead_on_unwind writable sret(%"class.uno::Statistics") align 8 %14, ptr noundef nonnull align 8 dereferenceable(64) %38, ptr noundef nonnull align 8 dereferenceable(145) %39)
  call void @llvm.lifetime.start.p0(i64 6, ptr %15) #7
  %40 = getelementptr inbounds %"struct.uno::WarmstartInformation", ptr %15, i32 0, i32 0
  store i8 1, ptr %40, align 1, !tbaa !9
  %41 = getelementptr inbounds %"struct.uno::WarmstartInformation", ptr %15, i32 0, i32 1
  store i8 1, ptr %41, align 1, !tbaa !12
  %42 = getelementptr inbounds %"struct.uno::WarmstartInformation", ptr %15, i32 0, i32 2
  store i8 1, ptr %42, align 1, !tbaa !13
  %43 = getelementptr inbounds %"struct.uno::WarmstartInformation", ptr %15, i32 0, i32 3
  store i8 1, ptr %43, align 1, !tbaa !14
  %44 = getelementptr inbounds %"struct.uno::WarmstartInformation", ptr %15, i32 0, i32 4
  store i8 1, ptr %44, align 1, !tbaa !15
  %45 = getelementptr inbounds %"struct.uno::WarmstartInformation", ptr %15, i32 0, i32 5
  store i8 1, ptr %45, align 1, !tbaa !16
  invoke void @_ZN3uno20WarmstartInformation21whole_problem_changedEv(ptr noundef nonnull align 1 dereferenceable(6) %15)
          to label %46 unwind label %104

46:                                               ; preds = %6
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #7
  store i64 0, ptr %18, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #7
  store i32 0, ptr %19, align 4, !tbaa !19
  %47 = load ptr, ptr %9, align 8, !tbaa !5
  %48 = load ptr, ptr %10, align 8, !tbaa !5
  %49 = load ptr, ptr %11, align 8, !tbaa !5
  invoke void @_ZN3uno3Uno10initializeERNS_10StatisticsERKNS_5ModelERNS_7IterateERKNS_7OptionsE(ptr noundef nonnull align 8 dereferenceable(64) %37, ptr noundef nonnull align 8 dereferenceable(144) %14, ptr noundef nonnull align 8 dereferenceable(64) %47, ptr noundef nonnull align 8 dereferenceable(532) %48, ptr noundef nonnull align 8 dereferenceable(145) %49)
          to label %50 unwind label %108

50:                                               ; preds = %46
  call void @llvm.lifetime.start.p0(i64 536, ptr %20) #7
  %51 = load ptr, ptr %10, align 8, !tbaa !5
  invoke void @_ZN3uno7IterateC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(532) %20, ptr noundef nonnull align 8 dereferenceable(532) %51)
          to label %52 unwind label %112

52:                                               ; preds = %50
  call void @llvm.lifetime.start.p0(i64 1, ptr %21) #7
  store i8 0, ptr %21, align 1, !tbaa !21
  br label %53

53:                                               ; preds = %102, %52
  %54 = load i8, ptr %21, align 1, !tbaa !21, !range !22, !noundef !23
  %55 = trunc i8 %54 to i1
  %56 = xor i1 %55, true
  br i1 %56, label %57, label %129

57:                                               ; preds = %53
  %58 = load i64, ptr %18, align 8, !tbaa !17
  %59 = add i64 %58, 1
  store i64 %59, ptr %18, align 8, !tbaa !17
  invoke void @_ZN3uno10Statistics14start_new_lineEv(ptr noundef nonnull align 8 dereferenceable(144) %14)
          to label %60 unwind label %116

60:                                               ; preds = %57
  call void @_ZNSt17basic_string_viewIcSt11char_traitsIcEEC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %22, ptr noundef @.str.3) #7
  %61 = load i64, ptr %18, align 8, !tbaa !17
  %62 = getelementptr inbounds { i64, ptr }, ptr %22, i32 0, i32 0
  %63 = load i64, ptr %62, align 8
  %64 = getelementptr inbounds { i64, ptr }, ptr %22, i32 0, i32 1
  %65 = load ptr, ptr %64, align 8
  invoke void @_ZN3uno10Statistics3setESt17basic_string_viewIcSt11char_traitsIcEEm(ptr noundef nonnull align 8 dereferenceable(144) %14, i64 %63, ptr %65, i64 noundef %61)
          to label %66 unwind label %116

66:                                               ; preds = %60
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #7
  store i32 4, ptr %23, align 4, !tbaa !24
  %67 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3unolsIA21_cEERKNS_5LevelES4_RKT_(ptr noundef nonnull align 4 dereferenceable(4) %23, ptr noundef nonnull align 1 dereferenceable(21) @.str.4)
          to label %68 unwind label %120

68:                                               ; preds = %66
  %69 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3unolsImEERKNS_5LevelES3_RT_(ptr noundef nonnull align 4 dereferenceable(4) %67, ptr noundef nonnull align 8 dereferenceable(8) %18)
          to label %70 unwind label %120

70:                                               ; preds = %68
  call void @llvm.lifetime.start.p0(i64 1, ptr %24) #7
  store i8 10, ptr %24, align 1, !tbaa !26
  %71 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3unolsIcEERKNS_5LevelES3_RKT_(ptr noundef nonnull align 4 dereferenceable(4) %69, ptr noundef nonnull align 1 dereferenceable(1) %24)
          to label %72 unwind label %124

72:                                               ; preds = %70
  call void @llvm.lifetime.end.p0(i64 1, ptr %24) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #7
  invoke void @_ZN3uno20WarmstartInformation15iterate_changedEv(ptr noundef nonnull align 1 dereferenceable(6) %15)
          to label %73 unwind label %116

73:                                               ; preds = %72
  %74 = getelementptr inbounds %"class.uno::Uno", ptr %37, i32 0, i32 0
  %75 = call noundef ptr @_ZNKSt10unique_ptrIN3uno22GlobalizationMechanismESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %74) #7
  %76 = load ptr, ptr %9, align 8, !tbaa !5
  %77 = load ptr, ptr %10, align 8, !tbaa !5
  %78 = load ptr, ptr %12, align 8, !tbaa !5
  %79 = load ptr, ptr %75, align 8, !tbaa !27
  %80 = getelementptr inbounds ptr, ptr %79, i64 3
  %81 = load ptr, ptr %80, align 8
  invoke void %81(ptr noundef nonnull align 8 dereferenceable(224) %75, ptr noundef nonnull align 8 dereferenceable(144) %14, ptr noundef nonnull align 8 dereferenceable(64) %76, ptr noundef nonnull align 8 dereferenceable(532) %77, ptr noundef nonnull align 8 dereferenceable(532) %20, ptr noundef nonnull align 1 dereferenceable(6) %15, ptr noundef nonnull align 8 dereferenceable(8) %78)
          to label %82 unwind label %116

82:                                               ; preds = %73
  %83 = getelementptr inbounds %"class.uno::Iterate", ptr %20, i32 0, i32 16
  %84 = load i32, ptr %83, align 8, !tbaa !29
  %85 = load i64, ptr %18, align 8, !tbaa !17
  %86 = invoke noundef double @_ZNK3uno5Timer12get_durationEv(ptr noundef nonnull align 8 dereferenceable(8) %13)
          to label %87 unwind label %116

87:                                               ; preds = %82
  %88 = invoke noundef zeroext i1 @_ZNK3uno3Uno20termination_criteriaENS_13IterateStatusEmdRNS_18OptimizationStatusE(ptr noundef nonnull align 8 dereferenceable(64) %37, i32 noundef %84, i64 noundef %85, double noundef %86, ptr noundef nonnull align 4 dereferenceable(4) %19)
          to label %89 unwind label %116

89:                                               ; preds = %87
  %90 = zext i1 %88 to i8
  store i8 %90, ptr %21, align 1, !tbaa !21
  %91 = load ptr, ptr %12, align 8, !tbaa !5
  %92 = getelementptr inbounds %"class.uno::Iterate", ptr %20, i32 0, i32 2
  %93 = load ptr, ptr %91, align 8, !tbaa !27
  %94 = getelementptr inbounds ptr, ptr %93, i64 3
  %95 = load ptr, ptr %94, align 8
  invoke void %95(ptr noundef nonnull align 8 dereferenceable(8) %91, ptr noundef nonnull align 8 dereferenceable(24) %92)
          to label %96 unwind label %116

96:                                               ; preds = %89
  %97 = load ptr, ptr %12, align 8, !tbaa !5
  %98 = getelementptr inbounds %"class.uno::Iterate", ptr %20, i32 0, i32 3
  %99 = load ptr, ptr %97, align 8, !tbaa !27
  %100 = getelementptr inbounds ptr, ptr %99, i64 4
  %101 = load ptr, ptr %100, align 8
  invoke void %101(ptr noundef nonnull align 8 dereferenceable(8) %97, ptr noundef nonnull align 8 dereferenceable(72) %98)
          to label %102 unwind label %116

102:                                              ; preds = %96
  %103 = load ptr, ptr %10, align 8, !tbaa !5
  call void @_ZSt4swapIN3uno7IterateEENSt9enable_ifIXsr6__and_ISt6__not_ISt15__is_tuple_likeIT_EESt21is_move_constructibleIS5_ESt18is_move_assignableIS5_EEE5valueEvE4typeERS5_SE_(ptr noundef nonnull align 8 dereferenceable(532) %103, ptr noundef nonnull align 8 dereferenceable(532) %20) #7
  br label %53, !llvm.loop !55

104:                                              ; preds = %6
  %105 = landingpad { ptr, i32 }
          cleanup
  %106 = extractvalue { ptr, i32 } %105, 0
  store ptr %106, ptr %16, align 8
  %107 = extractvalue { ptr, i32 } %105, 1
  store i32 %107, ptr %17, align 4
  br label %270

108:                                              ; preds = %46
  %109 = landingpad { ptr, i32 }
          cleanup
          catch ptr @_ZTISt9exception
  %110 = extractvalue { ptr, i32 } %109, 0
  store ptr %110, ptr %16, align 8
  %111 = extractvalue { ptr, i32 } %109, 1
  store i32 %111, ptr %17, align 4
  br label %212

112:                                              ; preds = %50
  %113 = landingpad { ptr, i32 }
          cleanup
          catch ptr @_ZTISt9exception
  %114 = extractvalue { ptr, i32 } %113, 0
  store ptr %114, ptr %16, align 8
  %115 = extractvalue { ptr, i32 } %113, 1
  store i32 %115, ptr %17, align 4
  br label %211

116:                                              ; preds = %96, %89, %87, %82, %73, %72, %60, %57
  %117 = landingpad { ptr, i32 }
          cleanup
          catch ptr @_ZTISt9exception
  %118 = extractvalue { ptr, i32 } %117, 0
  store ptr %118, ptr %16, align 8
  %119 = extractvalue { ptr, i32 } %117, 1
  store i32 %119, ptr %17, align 4
  br label %130

120:                                              ; preds = %68, %66
  %121 = landingpad { ptr, i32 }
          cleanup
          catch ptr @_ZTISt9exception
  %122 = extractvalue { ptr, i32 } %121, 0
  store ptr %122, ptr %16, align 8
  %123 = extractvalue { ptr, i32 } %121, 1
  store i32 %123, ptr %17, align 4
  br label %128

124:                                              ; preds = %70
  %125 = landingpad { ptr, i32 }
          cleanup
          catch ptr @_ZTISt9exception
  %126 = extractvalue { ptr, i32 } %125, 0
  store ptr %126, ptr %16, align 8
  %127 = extractvalue { ptr, i32 } %125, 1
  store i32 %127, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %24) #7
  br label %128

128:                                              ; preds = %124, %120
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #7
  br label %130

129:                                              ; preds = %53
  call void @llvm.lifetime.end.p0(i64 1, ptr %21) #7
  br label %178

130:                                              ; preds = %128, %116
  call void @llvm.lifetime.end.p0(i64 1, ptr %21) #7
  br label %131

131:                                              ; preds = %130
  %132 = load i32, ptr %17, align 4
  %133 = call i32 @llvm.eh.typeid.for.p0(ptr @_ZTISt9exception) #7
  %134 = icmp eq i32 %132, %133
  br i1 %134, label %135, label %210

135:                                              ; preds = %131
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #7
  %136 = load ptr, ptr %16, align 8
  %137 = call ptr @__cxa_begin_catch(ptr %136) #7
  store ptr %137, ptr %25, align 8
  invoke void @_ZN3uno10Statistics14start_new_lineEv(ptr noundef nonnull align 8 dereferenceable(144) %14)
          to label %138 unwind label %154

138:                                              ; preds = %135
  call void @_ZNSt17basic_string_viewIcSt11char_traitsIcEEC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %26, ptr noundef @.str.5) #7
  %139 = load ptr, ptr %25, align 8, !tbaa !5
  %140 = load ptr, ptr %139, align 8, !tbaa !27
  %141 = getelementptr inbounds ptr, ptr %140, i64 2
  %142 = load ptr, ptr %141, align 8
  %143 = call noundef ptr %142(ptr noundef nonnull align 8 dereferenceable(8) %139) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr %28) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %28) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef %143, ptr noundef nonnull align 1 dereferenceable(1) %28)
          to label %144 unwind label %158

144:                                              ; preds = %138
  %145 = getelementptr inbounds { i64, ptr }, ptr %26, i32 0, i32 0
  %146 = load i64, ptr %145, align 8
  %147 = getelementptr inbounds { i64, ptr }, ptr %26, i32 0, i32 1
  %148 = load ptr, ptr %147, align 8
  invoke void @_ZN3uno10Statistics3setESt17basic_string_viewIcSt11char_traitsIcEENSt7__cxx1112basic_stringIcS3_SaIcEEE(ptr noundef nonnull align 8 dereferenceable(144) %14, i64 %146, ptr %148, ptr noundef %27)
          to label %149 unwind label %162

149:                                              ; preds = %144
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %28) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %28) #7
  %150 = load i32, ptr @_ZN3uno6Logger5levelE, align 4, !tbaa !24
  %151 = icmp eq i32 %150, 3
  br i1 %151, label %152, label %167

152:                                              ; preds = %149
  invoke void @_ZN3uno10Statistics18print_current_lineEv(ptr noundef nonnull align 8 dereferenceable(144) %14)
          to label %153 unwind label %154

153:                                              ; preds = %152
  br label %167

154:                                              ; preds = %152, %135
  %155 = landingpad { ptr, i32 }
          cleanup
          catch ptr @_ZTISt9exception
  %156 = extractvalue { ptr, i32 } %155, 0
  store ptr %156, ptr %16, align 8
  %157 = extractvalue { ptr, i32 } %155, 1
  store i32 %157, ptr %17, align 4
  br label %196

158:                                              ; preds = %138
  %159 = landingpad { ptr, i32 }
          cleanup
          catch ptr @_ZTISt9exception
  %160 = extractvalue { ptr, i32 } %159, 0
  store ptr %160, ptr %16, align 8
  %161 = extractvalue { ptr, i32 } %159, 1
  store i32 %161, ptr %17, align 4
  br label %166

162:                                              ; preds = %144
  %163 = landingpad { ptr, i32 }
          cleanup
          catch ptr @_ZTISt9exception
  %164 = extractvalue { ptr, i32 } %163, 0
  store ptr %164, ptr %16, align 8
  %165 = extractvalue { ptr, i32 } %163, 1
  store i32 %165, ptr %17, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #7
  br label %166

166:                                              ; preds = %162, %158
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %28) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %28) #7
  br label %196

167:                                              ; preds = %153, %149
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #7
  store i32 4, ptr %29, align 4, !tbaa !24
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #7
  %168 = load ptr, ptr %25, align 8, !tbaa !5
  %169 = load ptr, ptr %168, align 8, !tbaa !27
  %170 = getelementptr inbounds ptr, ptr %169, i64 2
  %171 = load ptr, ptr %170, align 8
  %172 = call noundef ptr %171(ptr noundef nonnull align 8 dereferenceable(8) %168) #7
  store ptr %172, ptr %30, align 8, !tbaa !5
  %173 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3unolsIPKcEERKNS_5LevelES5_RKT_(ptr noundef nonnull align 4 dereferenceable(4) %29, ptr noundef nonnull align 8 dereferenceable(8) %30)
          to label %174 unwind label %183

174:                                              ; preds = %167
  call void @llvm.lifetime.start.p0(i64 1, ptr %31) #7
  store i8 10, ptr %31, align 1, !tbaa !26
  %175 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3unolsIcEERKNS_5LevelES3_RKT_(ptr noundef nonnull align 4 dereferenceable(4) %173, ptr noundef nonnull align 1 dereferenceable(1) %31)
          to label %176 unwind label %187

176:                                              ; preds = %174
  call void @llvm.lifetime.end.p0(i64 1, ptr %31) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #7
  store i32 4, ptr %19, align 4, !tbaa !19
  invoke void @__cxa_end_catch()
          to label %177 unwind label %192

177:                                              ; preds = %176
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #7
  br label %178

178:                                              ; preds = %177, %129
  %179 = load i32, ptr @_ZN3uno6Logger5levelE, align 4, !tbaa !24
  %180 = icmp eq i32 %179, 3
  br i1 %180, label %181, label %203

181:                                              ; preds = %178
  invoke void @_ZN3uno10Statistics12print_footerEv(ptr noundef nonnull align 8 dereferenceable(144) %14)
          to label %182 unwind label %199

182:                                              ; preds = %181
  br label %203

183:                                              ; preds = %167
  %184 = landingpad { ptr, i32 }
          cleanup
          catch ptr @_ZTISt9exception
  %185 = extractvalue { ptr, i32 } %184, 0
  store ptr %185, ptr %16, align 8
  %186 = extractvalue { ptr, i32 } %184, 1
  store i32 %186, ptr %17, align 4
  br label %191

187:                                              ; preds = %174
  %188 = landingpad { ptr, i32 }
          cleanup
          catch ptr @_ZTISt9exception
  %189 = extractvalue { ptr, i32 } %188, 0
  store ptr %189, ptr %16, align 8
  %190 = extractvalue { ptr, i32 } %188, 1
  store i32 %190, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %31) #7
  br label %191

191:                                              ; preds = %187, %183
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #7
  br label %196

192:                                              ; preds = %176
  %193 = landingpad { ptr, i32 }
          cleanup
          catch ptr @_ZTISt9exception
  %194 = extractvalue { ptr, i32 } %193, 0
  store ptr %194, ptr %16, align 8
  %195 = extractvalue { ptr, i32 } %193, 1
  store i32 %195, ptr %17, align 4
  br label %198

196:                                              ; preds = %191, %166, %154
  invoke void @__cxa_end_catch()
          to label %197 unwind label %276

197:                                              ; preds = %196
  br label %198

198:                                              ; preds = %197, %192
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #7
  br label %210

199:                                              ; preds = %203, %181
  %200 = landingpad { ptr, i32 }
          cleanup
          catch ptr @_ZTISt9exception
  %201 = extractvalue { ptr, i32 } %200, 0
  store ptr %201, ptr %16, align 8
  %202 = extractvalue { ptr, i32 } %200, 1
  store i32 %202, ptr %17, align 4
  br label %210

203:                                              ; preds = %182, %178
  %204 = load ptr, ptr %9, align 8, !tbaa !5
  %205 = load ptr, ptr %10, align 8, !tbaa !5
  %206 = load ptr, ptr %10, align 8, !tbaa !5
  %207 = getelementptr inbounds %"class.uno::Iterate", ptr %206, i32 0, i32 16
  %208 = load i32, ptr %207, align 8, !tbaa !29
  invoke void @_ZN3uno3Uno19postprocess_iterateERKNS_5ModelERNS_7IterateENS_13IterateStatusE(ptr noundef nonnull align 8 dereferenceable(64) %204, ptr noundef nonnull align 8 dereferenceable(532) %205, i32 noundef %208)
          to label %209 unwind label %199

209:                                              ; preds = %203
  call void @_ZN3uno7IterateD2Ev(ptr noundef nonnull align 8 dereferenceable(532) %20) #7
  call void @llvm.lifetime.end.p0(i64 536, ptr %20) #7
  br label %231

210:                                              ; preds = %199, %198, %131
  call void @_ZN3uno7IterateD2Ev(ptr noundef nonnull align 8 dereferenceable(532) %20) #7
  br label %211

211:                                              ; preds = %210, %112
  call void @llvm.lifetime.end.p0(i64 536, ptr %20) #7
  br label %212

212:                                              ; preds = %211, %108
  %213 = load i32, ptr %17, align 4
  %214 = call i32 @llvm.eh.typeid.for.p0(ptr @_ZTISt9exception) #7
  %215 = icmp eq i32 %213, %214
  br i1 %215, label %216, label %269

216:                                              ; preds = %212
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #7
  %217 = load ptr, ptr %16, align 8
  %218 = call ptr @__cxa_begin_catch(ptr %217) #7
  store ptr %218, ptr %32, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #7
  store i32 1, ptr %33, align 4, !tbaa !24
  %219 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3unolsIA43_cEERKNS_5LevelES4_RKT_(ptr noundef nonnull align 4 dereferenceable(4) %33, ptr noundef nonnull align 1 dereferenceable(43) @.str.6)
          to label %220 unwind label %239

220:                                              ; preds = %216
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #7
  %221 = load ptr, ptr %32, align 8, !tbaa !5
  %222 = load ptr, ptr %221, align 8, !tbaa !27
  %223 = getelementptr inbounds ptr, ptr %222, i64 2
  %224 = load ptr, ptr %223, align 8
  %225 = call noundef ptr %224(ptr noundef nonnull align 8 dereferenceable(8) %221) #7
  store ptr %225, ptr %34, align 8, !tbaa !5
  %226 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3unolsIPKcEERKNS_5LevelES5_RKT_(ptr noundef nonnull align 4 dereferenceable(4) %219, ptr noundef nonnull align 8 dereferenceable(8) %34)
          to label %227 unwind label %243

227:                                              ; preds = %220
  call void @llvm.lifetime.start.p0(i64 1, ptr %35) #7
  store i8 10, ptr %35, align 1, !tbaa !26
  %228 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3unolsIcEERKNS_5LevelES3_RKT_(ptr noundef nonnull align 4 dereferenceable(4) %226, ptr noundef nonnull align 1 dereferenceable(1) %35)
          to label %229 unwind label %247

229:                                              ; preds = %227
  call void @llvm.lifetime.end.p0(i64 1, ptr %35) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #7
  store i32 3, ptr %19, align 4, !tbaa !19
  invoke void @__cxa_end_catch()
          to label %230 unwind label %253

230:                                              ; preds = %229
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #7
  br label %231

231:                                              ; preds = %230, %209
  store i1 false, ptr %36, align 1
  %232 = load ptr, ptr %9, align 8, !tbaa !5
  %233 = load i32, ptr %19, align 4, !tbaa !19
  %234 = load ptr, ptr %10, align 8, !tbaa !5
  %235 = load i64, ptr %18, align 8, !tbaa !17
  invoke void @_ZN3uno3Uno13create_resultERKNS_5ModelENS_18OptimizationStatusERNS_7IterateEmRKNS_5TimerE(ptr dead_on_unwind writable sret(%"struct.uno::Result") align 8 %0, ptr noundef nonnull align 8 dereferenceable(64) %37, ptr noundef nonnull align 8 dereferenceable(64) %232, i32 noundef %233, ptr noundef nonnull align 8 dereferenceable(532) %234, i64 noundef %235, ptr noundef nonnull align 8 dereferenceable(8) %13)
          to label %236 unwind label %259

236:                                              ; preds = %231
  invoke void @_ZN3uno3Uno26print_optimization_summaryERKNS_6ResultE(ptr noundef nonnull align 8 dereferenceable(64) %37, ptr noundef nonnull align 8 dereferenceable(624) %0)
          to label %237 unwind label %263

237:                                              ; preds = %236
  store i1 true, ptr %36, align 1
  %238 = load i1, ptr %36, align 1
  br i1 %238, label %268, label %267

239:                                              ; preds = %216
  %240 = landingpad { ptr, i32 }
          cleanup
  %241 = extractvalue { ptr, i32 } %240, 0
  store ptr %241, ptr %16, align 8
  %242 = extractvalue { ptr, i32 } %240, 1
  store i32 %242, ptr %17, align 4
  br label %252

243:                                              ; preds = %220
  %244 = landingpad { ptr, i32 }
          cleanup
  %245 = extractvalue { ptr, i32 } %244, 0
  store ptr %245, ptr %16, align 8
  %246 = extractvalue { ptr, i32 } %244, 1
  store i32 %246, ptr %17, align 4
  br label %251

247:                                              ; preds = %227
  %248 = landingpad { ptr, i32 }
          cleanup
  %249 = extractvalue { ptr, i32 } %248, 0
  store ptr %249, ptr %16, align 8
  %250 = extractvalue { ptr, i32 } %248, 1
  store i32 %250, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %35) #7
  br label %251

251:                                              ; preds = %247, %243
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #7
  br label %252

252:                                              ; preds = %251, %239
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #7
  invoke void @__cxa_end_catch()
          to label %257 unwind label %276

253:                                              ; preds = %229
  %254 = landingpad { ptr, i32 }
          cleanup
  %255 = extractvalue { ptr, i32 } %254, 0
  store ptr %255, ptr %16, align 8
  %256 = extractvalue { ptr, i32 } %254, 1
  store i32 %256, ptr %17, align 4
  br label %258

257:                                              ; preds = %252
  br label %258

258:                                              ; preds = %257, %253
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #7
  br label %269

259:                                              ; preds = %231
  %260 = landingpad { ptr, i32 }
          cleanup
  %261 = extractvalue { ptr, i32 } %260, 0
  store ptr %261, ptr %16, align 8
  %262 = extractvalue { ptr, i32 } %260, 1
  store i32 %262, ptr %17, align 4
  br label %269

263:                                              ; preds = %236
  %264 = landingpad { ptr, i32 }
          cleanup
  %265 = extractvalue { ptr, i32 } %264, 0
  store ptr %265, ptr %16, align 8
  %266 = extractvalue { ptr, i32 } %264, 1
  store i32 %266, ptr %17, align 4
  call void @_ZN3uno6ResultD2Ev(ptr noundef nonnull align 8 dereferenceable(624) %0) #7
  br label %269

267:                                              ; preds = %237
  call void @_ZN3uno6ResultD2Ev(ptr noundef nonnull align 8 dereferenceable(624) %0) #7
  br label %268

268:                                              ; preds = %267, %237
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #7
  call void @llvm.lifetime.end.p0(i64 6, ptr %15) #7
  call void @_ZN3uno10StatisticsD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %14) #7
  call void @llvm.lifetime.end.p0(i64 144, ptr %14) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #7
  ret void

269:                                              ; preds = %263, %259, %258, %212
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #7
  br label %270

270:                                              ; preds = %269, %104
  call void @llvm.lifetime.end.p0(i64 6, ptr %15) #7
  call void @_ZN3uno10StatisticsD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %14) #7
  call void @llvm.lifetime.end.p0(i64 144, ptr %14) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #7
  br label %271

271:                                              ; preds = %270
  %272 = load ptr, ptr %16, align 8
  %273 = load i32, ptr %17, align 4
  %274 = insertvalue { ptr, i32 } poison, ptr %272, 0
  %275 = insertvalue { ptr, i32 } %274, i32 %273, 1
  resume { ptr, i32 } %275

276:                                              ; preds = %252, %196
  %277 = landingpad { ptr, i32 }
          catch ptr null
  %278 = extractvalue { ptr, i32 } %277, 0
  call void @__clang_call_terminate(ptr %278) #8
  unreachable
}

declare void @_ZN3uno5TimerC1Ev(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3uno3Uno17create_statisticsERKNS_5ModelERKNS_7OptionsE(ptr dead_on_unwind noalias writable sret(%"class.uno::Statistics") align 8, ptr noundef nonnull align 8 dereferenceable(64), ptr noundef nonnull align 8 dereferenceable(145)) #2 align 2

declare void @_ZN3uno20WarmstartInformation21whole_problem_changedEv(ptr noundef nonnull align 1 dereferenceable(6)) #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3uno3Uno10initializeERNS_10StatisticsERKNS_5ModelERNS_7IterateERKNS_7OptionsE(ptr noundef nonnull align 8 dereferenceable(64), ptr noundef nonnull align 8 dereferenceable(144), ptr noundef nonnull align 8 dereferenceable(64), ptr noundef nonnull align 8 dereferenceable(532), ptr noundef nonnull align 8 dereferenceable(145)) #2 align 2

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

declare void @_ZN3uno10Statistics14start_new_lineEv(ptr noundef nonnull align 8 dereferenceable(144)) #3

declare void @_ZN3uno10Statistics3setESt17basic_string_viewIcSt11char_traitsIcEEm(ptr noundef nonnull align 8 dereferenceable(144), i64, ptr, i64 noundef) #3

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZN3unolsIA21_cEERKNS_5LevelES4_RKT_(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(21)) #2

declare void @_ZN3uno20WarmstartInformation15iterate_changedEv(ptr noundef nonnull align 1 dereferenceable(6)) #3

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3uno3Uno20termination_criteriaENS_13IterateStatusEmdRNS_18OptimizationStatusE(ptr noundef nonnull align 8 dereferenceable(64), i32 noundef, i64 noundef, double noundef, ptr noundef nonnull align 4 dereferenceable(4)) #1 align 2

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

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

; Function Attrs: nounwind memory(none)
declare i32 @llvm.eh.typeid.for.p0(ptr) #5

declare ptr @__cxa_begin_catch(ptr)

declare void @_ZN3uno10Statistics3setESt17basic_string_viewIcSt11char_traitsIcEENSt7__cxx1112basic_stringIcS3_SaIcEEE(ptr noundef nonnull align 8 dereferenceable(144), i64, ptr, ptr noundef) #3

declare void @_ZN3uno10Statistics18print_current_lineEv(ptr noundef nonnull align 8 dereferenceable(144)) #3

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

declare void @__cxa_end_catch()

; Function Attrs: noinline noreturn nounwind uwtable
declare hidden void @__clang_call_terminate(ptr noundef) #6

declare void @_ZN3uno10Statistics12print_footerEv(ptr noundef nonnull align 8 dereferenceable(144)) #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3uno3Uno19postprocess_iterateERKNS_5ModelERNS_7IterateENS_13IterateStatusE(ptr noundef nonnull align 8 dereferenceable(64), ptr noundef nonnull align 8 dereferenceable(532), i32 noundef) #2 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZN3unolsIA43_cEERKNS_5LevelES4_RKT_(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(43)) #2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3uno3Uno13create_resultERKNS_5ModelENS_18OptimizationStatusERNS_7IterateEmRKNS_5TimerE(ptr dead_on_unwind noalias writable sret(%"struct.uno::Result") align 8, ptr noundef nonnull align 8 dereferenceable(64), ptr noundef nonnull align 8 dereferenceable(64), i32 noundef, ptr noundef nonnull align 8 dereferenceable(532), i64 noundef, ptr noundef nonnull align 8 dereferenceable(8)) #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3uno3Uno26print_optimization_summaryERKNS_6ResultE(ptr noundef nonnull align 8 dereferenceable(64), ptr noundef nonnull align 8 dereferenceable(624)) #2 align 2

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

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

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

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


; 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.uno::Result" = type { i32, [4 x i8], %"class.uno::Iterate", i64, i64, i64, double, i64, i64, i64, i64, i64, i64 }
%"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::Vector" = type { %"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::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 } }
%"class.uno::Timer" = type { i64 }
%"class.uno::Statistics" = type { %"class.std::map.23", %"class.std::map.29", %"class.std::map.35" }
%"class.std::map.23" = type { %"class.std::_Rb_tree.24" }
%"class.std::_Rb_tree.24" = type { %"struct.std::_Rb_tree<int, std::pair<const int, std::__cxx11::basic_string<char>>, std::_Select1st<std::pair<const int, std::__cxx11::basic_string<char>>>, std::less<int>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<int, std::pair<const int, std::__cxx11::basic_string<char>>, std::_Select1st<std::pair<const int, std::__cxx11::basic_string<char>>>, std::less<int>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"struct.std::_Rb_tree_header" = type { %"struct.std::_Rb_tree_node_base", i64 }
%"struct.std::_Rb_tree_node_base" = type { i32, ptr, ptr, ptr }
%"class.std::map.29" = type { %"class.std::_Rb_tree.30" }
%"class.std::_Rb_tree.30" = type { %"struct.std::_Rb_tree<std::basic_string_view<char>, std::pair<const std::basic_string_view<char>, int>, std::_Select1st<std::pair<const std::basic_string_view<char>, int>>, std::less<std::basic_string_view<char>>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<std::basic_string_view<char>, std::pair<const std::basic_string_view<char>, int>, std::_Select1st<std::pair<const std::basic_string_view<char>, int>>, std::less<std::basic_string_view<char>>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"class.std::map.35" = type { %"class.std::_Rb_tree.36" }
%"class.std::_Rb_tree.36" = type { %"struct.std::_Rb_tree<std::basic_string_view<char>, std::pair<const std::basic_string_view<char>, std::__cxx11::basic_string<char>>, std::_Select1st<std::pair<const std::basic_string_view<char>, std::__cxx11::basic_string<char>>>, std::less<std::basic_string_view<char>>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<std::basic_string_view<char>, std::pair<const std::basic_string_view<char>, std::__cxx11::basic_string<char>>, std::_Select1st<std::pair<const std::basic_string_view<char>, std::__cxx11::basic_string<char>>>, std::less<std::basic_string_view<char>>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"struct.uno::WarmstartInformation" = type { i8, i8, i8, i8, i8, i8 }
%"class.std::basic_string_view" = type { i64, 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::allocator" = type { i8 }

@_ZN3uno6Logger5levelE = external dso_local local_unnamed_addr global i32, align 4
@_ZTISt9exception = external constant ptr
@.str.3 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [43 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

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #1 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 #2 align 2

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 #1 align 2

; 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
define dso_local void @_ZN3uno3Uno5solveERKNS_5ModelERNS_7IterateERKNS_7OptionsERNS_13UserCallbacksE(ptr dead_on_unwind noalias writable sret(%"struct.uno::Result") align 8 %0, ptr noundef nonnull align 8 dereferenceable(64) %1, ptr noundef nonnull align 8 dereferenceable(64) %2, ptr noundef nonnull align 8 dereferenceable(532) %3, ptr noundef nonnull align 8 dereferenceable(145) %4, ptr noundef nonnull align 8 dereferenceable(8) %5) local_unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %7 = alloca %"class.uno::Timer", align 8
  %8 = alloca %"class.uno::Statistics", align 8
  %9 = alloca %"struct.uno::WarmstartInformation", align 1
  %10 = alloca i64, align 8
  %11 = alloca i32, align 4
  %12 = alloca %"class.uno::Iterate", align 8
  %13 = alloca %"class.std::basic_string_view", align 8
  %14 = alloca i32, align 4
  %15 = alloca i8, align 1
  %16 = alloca %"class.std::basic_string_view", align 8
  %17 = alloca %"class.std::__cxx11::basic_string", align 8
  %18 = alloca %"class.std::allocator", align 1
  %19 = alloca i32, align 4
  %20 = alloca ptr, align 8
  %21 = alloca i8, align 1
  %22 = alloca i32, align 4
  %23 = alloca ptr, align 8
  %24 = alloca i8, align 1
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #8
  call void @_ZN3uno5TimerC1Ev(ptr noundef nonnull align 8 dereferenceable(8) %7)
  call void @llvm.lifetime.start.p0(i64 144, ptr nonnull %8) #8
  call void @_ZN3uno3Uno17create_statisticsERKNS_5ModelERKNS_7OptionsE(ptr dead_on_unwind nonnull writable sret(%"class.uno::Statistics") align 8 %8, ptr noundef nonnull align 8 dereferenceable(64) %2, ptr noundef nonnull align 8 dereferenceable(145) %4)
  call void @llvm.lifetime.start.p0(i64 6, ptr nonnull %9) #8
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 1 dereferenceable(6) %9, i8 1, i64 6, i1 false)
  invoke void @_ZN3uno20WarmstartInformation21whole_problem_changedEv(ptr noundef nonnull align 1 dereferenceable(6) %9)
          to label %25 unwind label %63

25:                                               ; preds = %6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #8
  store i64 0, ptr %10, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %11) #8
  store i32 0, ptr %11, align 4, !tbaa !9
  invoke void @_ZN3uno3Uno10initializeERNS_10StatisticsERKNS_5ModelERNS_7IterateERKNS_7OptionsE(ptr noundef nonnull align 8 dereferenceable(64) %1, ptr noundef nonnull align 8 dereferenceable(144) %8, ptr noundef nonnull align 8 dereferenceable(64) %2, ptr noundef nonnull align 8 dereferenceable(532) %3, ptr noundef nonnull align 8 dereferenceable(145) %4)
          to label %26 unwind label %67

26:                                               ; preds = %25
  call void @llvm.lifetime.start.p0(i64 536, ptr nonnull %12) #8
  invoke void @_ZN3uno7IterateC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(532) %12, ptr noundef nonnull align 8 dereferenceable(532) %3)
          to label %.critedge.preheader unwind label %71

.critedge.preheader:                              ; preds = %26
  %27 = getelementptr inbounds i8, ptr %13, i64 8
  %28 = getelementptr inbounds i8, ptr %12, i64 528
  %29 = getelementptr inbounds i8, ptr %12, i64 16
  %30 = getelementptr inbounds i8, ptr %12, i64 40
  br label %.critedge

.critedge:                                        ; preds = %.critedge.preheader, %62
  %31 = load i64, ptr %10, align 8, !tbaa !5
  %32 = add i64 %31, 1
  store i64 %32, ptr %10, align 8, !tbaa !5
  invoke void @_ZN3uno10Statistics14start_new_lineEv(ptr noundef nonnull align 8 dereferenceable(144) %8)
          to label %33 unwind label %75

33:                                               ; preds = %.critedge
  call void @_ZNSt17basic_string_viewIcSt11char_traitsIcEEC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %13, ptr noundef @.str.3) #8
  %34 = load i64, ptr %10, align 8, !tbaa !5
  %35 = load i64, ptr %13, align 8
  %36 = load ptr, ptr %27, align 8
  invoke void @_ZN3uno10Statistics3setESt17basic_string_viewIcSt11char_traitsIcEEm(ptr noundef nonnull align 8 dereferenceable(144) %8, i64 %35, ptr %36, i64 noundef %34)
          to label %37 unwind label %75

37:                                               ; preds = %33
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %14) #8
  store i32 4, ptr %14, align 4, !tbaa !11
  %38 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3unolsIA21_cEERKNS_5LevelES4_RKT_(ptr noundef nonnull align 4 dereferenceable(4) %14, ptr noundef nonnull align 1 dereferenceable(21) @.str.4)
          to label %39 unwind label %77

39:                                               ; preds = %37
  %40 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3unolsImEERKNS_5LevelES3_RT_(ptr noundef nonnull align 4 dereferenceable(4) %38, ptr noundef nonnull align 8 dereferenceable(8) %10)
          to label %41 unwind label %77

41:                                               ; preds = %39
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %15) #8
  store i8 10, ptr %15, align 1, !tbaa !13
  %42 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3unolsIcEERKNS_5LevelES3_RKT_(ptr noundef nonnull align 4 dereferenceable(4) %40, ptr noundef nonnull align 1 dereferenceable(1) %15)
          to label %43 unwind label %79

43:                                               ; preds = %41
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %15) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %14) #8
  invoke void @_ZN3uno20WarmstartInformation15iterate_changedEv(ptr noundef nonnull align 1 dereferenceable(6) %9)
          to label %44 unwind label %75

44:                                               ; preds = %43
  %45 = call noundef ptr @_ZNKSt10unique_ptrIN3uno22GlobalizationMechanismESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %1) #8
  %46 = load ptr, ptr %45, align 8, !tbaa !14
  %47 = getelementptr inbounds i8, ptr %46, i64 24
  %48 = load ptr, ptr %47, align 8
  invoke void %48(ptr noundef nonnull align 8 dereferenceable(224) %45, ptr noundef nonnull align 8 dereferenceable(144) %8, ptr noundef nonnull align 8 dereferenceable(64) %2, ptr noundef nonnull align 8 dereferenceable(532) %3, ptr noundef nonnull align 8 dereferenceable(532) %12, ptr noundef nonnull align 1 dereferenceable(6) %9, ptr noundef nonnull align 8 dereferenceable(8) %5)
          to label %49 unwind label %75

49:                                               ; preds = %44
  %50 = load i32, ptr %28, align 8, !tbaa !16
  %51 = load i64, ptr %10, align 8, !tbaa !5
  %52 = invoke noundef double @_ZNK3uno5Timer12get_durationEv(ptr noundef nonnull align 8 dereferenceable(8) %7)
          to label %53 unwind label %75

53:                                               ; preds = %49
  %54 = call noundef zeroext i1 @_ZNK3uno3Uno20termination_criteriaENS_13IterateStatusEmdRNS_18OptimizationStatusE(ptr noundef nonnull align 8 dereferenceable(64) %1, i32 noundef %50, i64 noundef %51, double noundef %52, ptr noundef nonnull align 4 dereferenceable(4) %11)
  %55 = load ptr, ptr %5, align 8, !tbaa !14
  %56 = getelementptr inbounds i8, ptr %55, i64 24
  %57 = load ptr, ptr %56, align 8
  invoke void %57(ptr noundef nonnull align 8 dereferenceable(8) %5, ptr noundef nonnull align 8 dereferenceable(24) %29)
          to label %58 unwind label %75

58:                                               ; preds = %53
  %59 = load ptr, ptr %5, align 8, !tbaa !14
  %60 = getelementptr inbounds i8, ptr %59, i64 32
  %61 = load ptr, ptr %60, align 8
  invoke void %61(ptr noundef nonnull align 8 dereferenceable(8) %5, ptr noundef nonnull align 8 dereferenceable(72) %30)
          to label %62 unwind label %75

62:                                               ; preds = %58
  call void @_ZSt4swapIN3uno7IterateEENSt9enable_ifIXsr6__and_ISt6__not_ISt15__is_tuple_likeIT_EESt21is_move_constructibleIS5_ESt18is_move_assignableIS5_EEE5valueEvE4typeERS5_SE_(ptr noundef nonnull align 8 dereferenceable(532) %3, ptr noundef nonnull align 8 dereferenceable(532) %12) #8
  br i1 %54, label %.loopexit, label %.critedge

63:                                               ; preds = %6
  %64 = landingpad { ptr, i32 }
          cleanup
  %65 = extractvalue { ptr, i32 } %64, 0
  %66 = extractvalue { ptr, i32 } %64, 1
  br label %178

67:                                               ; preds = %25
  %68 = landingpad { ptr, i32 }
          cleanup
          catch ptr @_ZTISt9exception
  %69 = extractvalue { ptr, i32 } %68, 0
  %70 = extractvalue { ptr, i32 } %68, 1
  br label %138

71:                                               ; preds = %26
  %72 = landingpad { ptr, i32 }
          cleanup
          catch ptr @_ZTISt9exception
  %73 = extractvalue { ptr, i32 } %72, 0
  %74 = extractvalue { ptr, i32 } %72, 1
  br label %137

75:                                               ; preds = %58, %53, %49, %44, %43, %33, %.critedge
  %76 = landingpad { ptr, i32 }
          cleanup
          catch ptr @_ZTISt9exception
  br label %82

77:                                               ; preds = %39, %37
  %78 = landingpad { ptr, i32 }
          cleanup
          catch ptr @_ZTISt9exception
  br label %81

79:                                               ; preds = %41
  %80 = landingpad { ptr, i32 }
          cleanup
          catch ptr @_ZTISt9exception
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %15) #8
  br label %81

81:                                               ; preds = %79, %77
  %.pn = phi { ptr, i32 } [ %80, %79 ], [ %78, %77 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %14) #8
  br label %82

82:                                               ; preds = %81, %75
  %.pn44 = phi { ptr, i32 } [ %76, %75 ], [ %.pn, %81 ]
  %.1 = extractvalue { ptr, i32 } %.pn44, 0
  %.129 = extractvalue { ptr, i32 } %.pn44, 1
  %83 = call i32 @llvm.eh.typeid.for.p0(ptr nonnull @_ZTISt9exception) #8
  %84 = icmp eq i32 %.129, %83
  br i1 %84, label %85, label %136

85:                                               ; preds = %82
  %86 = call ptr @__cxa_begin_catch(ptr %.1) #8
  invoke void @_ZN3uno10Statistics14start_new_lineEv(ptr noundef nonnull align 8 dereferenceable(144) %8)
          to label %87 unwind label %100

87:                                               ; preds = %85
  call void @_ZNSt17basic_string_viewIcSt11char_traitsIcEEC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %16, ptr noundef @.str.5) #8
  %88 = load ptr, ptr %86, align 8, !tbaa !14
  %89 = getelementptr inbounds i8, ptr %88, i64 16
  %90 = load ptr, ptr %89, align 8
  %91 = call noundef ptr %90(ptr noundef nonnull align 8 dereferenceable(8) %86) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %18) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %18) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef %91, ptr noundef nonnull align 1 dereferenceable(1) %18)
          to label %92 unwind label %102

92:                                               ; preds = %87
  %93 = load i64, ptr %16, align 8
  %94 = getelementptr inbounds i8, ptr %16, i64 8
  %95 = load ptr, ptr %94, align 8
  invoke void @_ZN3uno10Statistics3setESt17basic_string_viewIcSt11char_traitsIcEENSt7__cxx1112basic_stringIcS3_SaIcEEE(ptr noundef nonnull align 8 dereferenceable(144) %8, i64 %93, ptr %95, ptr noundef nonnull %17)
          to label %96 unwind label %104

96:                                               ; preds = %92
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %18) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %18) #8
  %97 = load i32, ptr @_ZN3uno6Logger5levelE, align 4, !tbaa !11
  %98 = icmp eq i32 %97, 3
  br i1 %98, label %99, label %107

99:                                               ; preds = %96
  invoke void @_ZN3uno10Statistics18print_current_lineEv(ptr noundef nonnull align 8 dereferenceable(144) %8)
          to label %107 unwind label %100

100:                                              ; preds = %99, %85
  %101 = landingpad { ptr, i32 }
          cleanup
          catch ptr @_ZTISt9exception
  br label %126

102:                                              ; preds = %87
  %103 = landingpad { ptr, i32 }
          cleanup
          catch ptr @_ZTISt9exception
  br label %106

104:                                              ; preds = %92
  %105 = landingpad { ptr, i32 }
          cleanup
          catch ptr @_ZTISt9exception
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #8
  br label %106

106:                                              ; preds = %104, %102
  %.pn46 = phi { ptr, i32 } [ %105, %104 ], [ %103, %102 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %18) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %18) #8
  br label %126

107:                                              ; preds = %99, %96
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %19) #8
  store i32 4, ptr %19, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %20) #8
  %108 = load ptr, ptr %86, align 8, !tbaa !14
  %109 = getelementptr inbounds i8, ptr %108, i64 16
  %110 = load ptr, ptr %109, align 8
  %111 = call noundef ptr %110(ptr noundef nonnull align 8 dereferenceable(8) %86) #8
  store ptr %111, ptr %20, align 8, !tbaa !44
  %112 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3unolsIPKcEERKNS_5LevelES5_RKT_(ptr noundef nonnull align 4 dereferenceable(4) %19, ptr noundef nonnull align 8 dereferenceable(8) %20)
          to label %113 unwind label %119

113:                                              ; preds = %107
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %21) #8
  store i8 10, ptr %21, align 1, !tbaa !13
  %114 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3unolsIcEERKNS_5LevelES3_RKT_(ptr noundef nonnull align 4 dereferenceable(4) %112, ptr noundef nonnull align 1 dereferenceable(1) %21)
          to label %115 unwind label %121

115:                                              ; preds = %113
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %21) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %19) #8
  store i32 4, ptr %11, align 4, !tbaa !9
  invoke void @__cxa_end_catch()
          to label %.loopexit unwind label %124

.loopexit:                                        ; preds = %62, %115
  %116 = load i32, ptr @_ZN3uno6Logger5levelE, align 4, !tbaa !11
  %117 = icmp eq i32 %116, 3
  br i1 %117, label %118, label %132

118:                                              ; preds = %.loopexit
  invoke void @_ZN3uno10Statistics12print_footerEv(ptr noundef nonnull align 8 dereferenceable(144) %8)
          to label %132 unwind label %128

119:                                              ; preds = %107
  %120 = landingpad { ptr, i32 }
          cleanup
          catch ptr @_ZTISt9exception
  br label %123

121:                                              ; preds = %113
  %122 = landingpad { ptr, i32 }
          cleanup
          catch ptr @_ZTISt9exception
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %21) #8
  br label %123

123:                                              ; preds = %121, %119
  %.pn48 = phi { ptr, i32 } [ %122, %121 ], [ %120, %119 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %19) #8
  br label %126

124:                                              ; preds = %115
  %125 = landingpad { ptr, i32 }
          cleanup
          catch ptr @_ZTISt9exception
  br label %127

126:                                              ; preds = %123, %106, %100
  %.pn48.pn = phi { ptr, i32 } [ %.pn48, %123 ], [ %101, %100 ], [ %.pn46, %106 ]
  invoke void @__cxa_end_catch()
          to label %127 unwind label %181

127:                                              ; preds = %126, %124
  %.pn51 = phi { ptr, i32 } [ %125, %124 ], [ %.pn48.pn, %126 ]
  %.5 = extractvalue { ptr, i32 } %.pn51, 0
  %.533 = extractvalue { ptr, i32 } %.pn51, 1
  br label %136

128:                                              ; preds = %132, %118
  %129 = landingpad { ptr, i32 }
          cleanup
          catch ptr @_ZTISt9exception
  %130 = extractvalue { ptr, i32 } %129, 0
  %131 = extractvalue { ptr, i32 } %129, 1
  br label %136

132:                                              ; preds = %118, %.loopexit
  %133 = getelementptr inbounds i8, ptr %3, i64 528
  %134 = load i32, ptr %133, align 8, !tbaa !16
  invoke void @_ZN3uno3Uno19postprocess_iterateERKNS_5ModelERNS_7IterateENS_13IterateStatusE(ptr noundef nonnull align 8 dereferenceable(64) %2, ptr noundef nonnull align 8 dereferenceable(532) %3, i32 noundef %134)
          to label %135 unwind label %128

135:                                              ; preds = %132
  call void @_ZN3uno7IterateD2Ev(ptr noundef nonnull align 8 dereferenceable(532) %12) #8
  call void @llvm.lifetime.end.p0(i64 536, ptr nonnull %12) #8
  br label %153

136:                                              ; preds = %128, %127, %82
  %.634 = phi i32 [ %131, %128 ], [ %.533, %127 ], [ %.129, %82 ]
  %.6 = phi ptr [ %130, %128 ], [ %.5, %127 ], [ %.1, %82 ]
  call void @_ZN3uno7IterateD2Ev(ptr noundef nonnull align 8 dereferenceable(532) %12) #8
  br label %137

137:                                              ; preds = %136, %71
  %.735 = phi i32 [ %.634, %136 ], [ %74, %71 ]
  %.7 = phi ptr [ %.6, %136 ], [ %73, %71 ]
  call void @llvm.lifetime.end.p0(i64 536, ptr nonnull %12) #8
  br label %138

138:                                              ; preds = %137, %67
  %.836 = phi i32 [ %.735, %137 ], [ %70, %67 ]
  %.8 = phi ptr [ %.7, %137 ], [ %69, %67 ]
  %139 = call i32 @llvm.eh.typeid.for.p0(ptr nonnull @_ZTISt9exception) #8
  %140 = icmp eq i32 %.836, %139
  br i1 %140, label %141, label %177

141:                                              ; preds = %138
  %142 = call ptr @__cxa_begin_catch(ptr %.8) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %22) #8
  store i32 1, ptr %22, align 4, !tbaa !11
  %143 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3unolsIA43_cEERKNS_5LevelES4_RKT_(ptr noundef nonnull align 4 dereferenceable(4) %22, ptr noundef nonnull align 1 dereferenceable(43) @.str.6)
          to label %144 unwind label %157

144:                                              ; preds = %141
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %23) #8
  %145 = load ptr, ptr %142, align 8, !tbaa !14
  %146 = getelementptr inbounds i8, ptr %145, i64 16
  %147 = load ptr, ptr %146, align 8
  %148 = call noundef ptr %147(ptr noundef nonnull align 8 dereferenceable(8) %142) #8
  store ptr %148, ptr %23, align 8, !tbaa !44
  %149 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3unolsIPKcEERKNS_5LevelES5_RKT_(ptr noundef nonnull align 4 dereferenceable(4) %143, ptr noundef nonnull align 8 dereferenceable(8) %23)
          to label %150 unwind label %159

150:                                              ; preds = %144
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %24) #8
  store i8 10, ptr %24, align 1, !tbaa !13
  %151 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3unolsIcEERKNS_5LevelES3_RKT_(ptr noundef nonnull align 4 dereferenceable(4) %149, ptr noundef nonnull align 1 dereferenceable(1) %24)
          to label %152 unwind label %161

152:                                              ; preds = %150
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %24) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %22) #8
  store i32 3, ptr %11, align 4, !tbaa !9
  invoke void @__cxa_end_catch()
          to label %153 unwind label %165

153:                                              ; preds = %152, %135
  %154 = load i32, ptr %11, align 4, !tbaa !9
  %155 = load i64, ptr %10, align 8, !tbaa !5
  invoke void @_ZN3uno3Uno13create_resultERKNS_5ModelENS_18OptimizationStatusERNS_7IterateEmRKNS_5TimerE(ptr dead_on_unwind writable sret(%"struct.uno::Result") align 8 %0, ptr noundef nonnull align 8 dereferenceable(64) %1, ptr noundef nonnull align 8 dereferenceable(64) %2, i32 noundef %154, ptr noundef nonnull align 8 dereferenceable(532) %3, i64 noundef %155, ptr noundef nonnull align 8 dereferenceable(8) %7)
          to label %156 unwind label %168

156:                                              ; preds = %153
  invoke void @_ZN3uno3Uno26print_optimization_summaryERKNS_6ResultE(ptr noundef nonnull align 8 dereferenceable(64) %1, ptr noundef nonnull align 8 dereferenceable(624) %0)
          to label %176 unwind label %172

157:                                              ; preds = %141
  %158 = landingpad { ptr, i32 }
          cleanup
  br label %164

159:                                              ; preds = %144
  %160 = landingpad { ptr, i32 }
          cleanup
  br label %163

161:                                              ; preds = %150
  %162 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %24) #8
  br label %163

163:                                              ; preds = %161, %159
  %.pn53 = phi { ptr, i32 } [ %162, %161 ], [ %160, %159 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #8
  br label %164

164:                                              ; preds = %163, %157
  %.pn53.pn = phi { ptr, i32 } [ %.pn53, %163 ], [ %158, %157 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %22) #8
  invoke void @__cxa_end_catch()
          to label %167 unwind label %181

165:                                              ; preds = %152
  %166 = landingpad { ptr, i32 }
          cleanup
  br label %167

167:                                              ; preds = %164, %165
  %.pn56 = phi { ptr, i32 } [ %166, %165 ], [ %.pn53.pn, %164 ]
  %.11 = extractvalue { ptr, i32 } %.pn56, 0
  %.1139 = extractvalue { ptr, i32 } %.pn56, 1
  br label %177

168:                                              ; preds = %153
  %169 = landingpad { ptr, i32 }
          cleanup
  %170 = extractvalue { ptr, i32 } %169, 0
  %171 = extractvalue { ptr, i32 } %169, 1
  br label %177

172:                                              ; preds = %156
  %173 = landingpad { ptr, i32 }
          cleanup
  %174 = extractvalue { ptr, i32 } %173, 0
  %175 = extractvalue { ptr, i32 } %173, 1
  call void @_ZN3uno6ResultD2Ev(ptr noundef nonnull align 8 dereferenceable(624) %0) #8
  br label %177

176:                                              ; preds = %156
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #8
  call void @llvm.lifetime.end.p0(i64 6, ptr nonnull %9) #8
  call void @_ZN3uno10StatisticsD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %8) #8
  call void @llvm.lifetime.end.p0(i64 144, ptr nonnull %8) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #8
  ret void

177:                                              ; preds = %172, %168, %167, %138
  %.1240 = phi i32 [ %175, %172 ], [ %171, %168 ], [ %.1139, %167 ], [ %.836, %138 ]
  %.12 = phi ptr [ %174, %172 ], [ %170, %168 ], [ %.11, %167 ], [ %.8, %138 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #8
  br label %178

178:                                              ; preds = %177, %63
  %.1341 = phi i32 [ %.1240, %177 ], [ %66, %63 ]
  %.13 = phi ptr [ %.12, %177 ], [ %65, %63 ]
  call void @llvm.lifetime.end.p0(i64 6, ptr nonnull %9) #8
  call void @_ZN3uno10StatisticsD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %8) #8
  call void @llvm.lifetime.end.p0(i64 144, ptr nonnull %8) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #8
  %179 = insertvalue { ptr, i32 } poison, ptr %.13, 0
  %180 = insertvalue { ptr, i32 } %179, i32 %.1341, 1
  resume { ptr, i32 } %180

181:                                              ; preds = %164, %126
  %182 = landingpad { ptr, i32 }
          catch ptr null
  %183 = extractvalue { ptr, i32 } %182, 0
  call void @__clang_call_terminate(ptr %183) #9
  unreachable
}

declare void @_ZN3uno5TimerC1Ev(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3uno3Uno17create_statisticsERKNS_5ModelERKNS_7OptionsE(ptr dead_on_unwind noalias writable sret(%"class.uno::Statistics") align 8, ptr noundef nonnull align 8 dereferenceable(64), ptr noundef nonnull align 8 dereferenceable(145)) local_unnamed_addr #2 align 2

declare void @_ZN3uno20WarmstartInformation21whole_problem_changedEv(ptr noundef nonnull align 1 dereferenceable(6)) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3uno3Uno10initializeERNS_10StatisticsERKNS_5ModelERNS_7IterateERKNS_7OptionsE(ptr noundef nonnull align 8 dereferenceable(64), ptr noundef nonnull align 8 dereferenceable(144), ptr noundef nonnull align 8 dereferenceable(64), ptr noundef nonnull align 8 dereferenceable(532), ptr noundef nonnull align 8 dereferenceable(145)) local_unnamed_addr #2 align 2

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

declare void @_ZN3uno10Statistics14start_new_lineEv(ptr noundef nonnull align 8 dereferenceable(144)) local_unnamed_addr #3

declare void @_ZN3uno10Statistics3setESt17basic_string_viewIcSt11char_traitsIcEEm(ptr noundef nonnull align 8 dereferenceable(144), i64, ptr, i64 noundef) local_unnamed_addr #3

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZN3unolsIA21_cEERKNS_5LevelES4_RKT_(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(21)) local_unnamed_addr #2

declare void @_ZN3uno20WarmstartInformation15iterate_changedEv(ptr noundef nonnull align 1 dereferenceable(6)) local_unnamed_addr #3

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3uno3Uno20termination_criteriaENS_13IterateStatusEmdRNS_18OptimizationStatusE(ptr noundef nonnull align 8 dereferenceable(64), i32 noundef, i64 noundef, double noundef, ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #1 align 2

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

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

; Function Attrs: nofree nosync nounwind memory(none)
declare i32 @llvm.eh.typeid.for.p0(ptr) #5

declare ptr @__cxa_begin_catch(ptr) local_unnamed_addr

declare void @_ZN3uno10Statistics3setESt17basic_string_viewIcSt11char_traitsIcEENSt7__cxx1112basic_stringIcS3_SaIcEEE(ptr noundef nonnull align 8 dereferenceable(144), i64, ptr, ptr noundef) local_unnamed_addr #3

declare void @_ZN3uno10Statistics18print_current_lineEv(ptr noundef nonnull align 8 dereferenceable(144)) local_unnamed_addr #3

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

declare void @__cxa_end_catch() local_unnamed_addr

; Function Attrs: noinline noreturn nounwind uwtable
declare hidden void @__clang_call_terminate(ptr noundef) local_unnamed_addr #6

declare void @_ZN3uno10Statistics12print_footerEv(ptr noundef nonnull align 8 dereferenceable(144)) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3uno3Uno19postprocess_iterateERKNS_5ModelERNS_7IterateENS_13IterateStatusE(ptr noundef nonnull align 8 dereferenceable(64), ptr noundef nonnull align 8 dereferenceable(532), i32 noundef) local_unnamed_addr #2 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZN3unolsIA43_cEERKNS_5LevelES4_RKT_(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(43)) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3uno3Uno13create_resultERKNS_5ModelENS_18OptimizationStatusERNS_7IterateEmRKNS_5TimerE(ptr dead_on_unwind noalias writable sret(%"struct.uno::Result") align 8, ptr noundef nonnull align 8 dereferenceable(64), ptr noundef nonnull align 8 dereferenceable(64), i32 noundef, ptr noundef nonnull align 8 dereferenceable(532), i64 noundef, ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3uno3Uno26print_optimization_summaryERKNS_6ResultE(ptr noundef nonnull align 8 dereferenceable(64), ptr noundef nonnull align 8 dereferenceable(624)) local_unnamed_addr #2 align 2

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

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

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #7

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { "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 = { nofree nosync nounwind memory(none) }
attributes #6 = { noinline noreturn nounwind uwtable "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 = { nocallback nofree nounwind willreturn memory(argmem: write) }
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, !6, i64 0}
!6 = !{!"long", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"_ZTSN3uno18OptimizationStatusE", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"_ZTSN3uno5LevelE", !7, i64 0}
!13 = !{!7, !7, i64 0}
!14 = !{!15, !15, i64 0}
!15 = !{!"vtable pointer", !8, i64 0}
!16 = !{!17, !43, i64 528}
!17 = !{!"_ZTSN3uno7IterateE", !6, i64 0, !6, i64 8, !18, i64 16, !24, i64 40, !24, i64 112, !25, i64 184, !26, i64 192, !37, i64 304, !37, i64 305, !37, i64 306, !37, i64 307, !25, i64 312, !38, i64 320, !38, i64 400, !40, i64 480, !43, i64 528}
!18 = !{!"_ZTSN3uno6VectorIdEE", !19, i64 0}
!19 = !{!"_ZTSSt6vectorIdSaIdEE", !20, i64 0}
!20 = !{!"_ZTSSt12_Vector_baseIdSaIdEE", !21, i64 0}
!21 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE12_Vector_implE", !22, i64 0}
!22 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE17_Vector_impl_dataE", !23, i64 0, !23, i64 8, !23, i64 16}
!23 = !{!"any pointer", !7, i64 0}
!24 = !{!"_ZTSN3uno11MultipliersE", !18, i64 0, !18, i64 24, !18, i64 48}
!25 = !{!"double", !7, i64 0}
!26 = !{!"_ZTSN3uno11EvaluationsE", !25, i64 0, !19, i64 8, !27, i64 32, !32, i64 88}
!27 = !{!"_ZTSN3uno12SparseVectorIdEE", !28, i64 0, !19, i64 24, !6, 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", !23, i64 0, !23, i64 8, !23, 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", !23, i64 0, !23, i64 8, !23, i64 16}
!37 = !{!"bool", !7, i64 0}
!38 = !{!"_ZTSN3uno13DualResidualsE", !25, i64 0, !25, i64 8, !25, i64 16, !25, i64 24, !39, i64 32}
!39 = !{!"_ZTSN3uno18LagrangianGradientIdEE", !18, i64 0, !18, i64 24}
!40 = !{!"_ZTSN3uno16ProgressMeasuresE", !25, i64 0, !41, i64 8, !25, i64 40}
!41 = !{!"_ZTSSt8functionIFddEE", !42, i64 0, !23, i64 24}
!42 = !{!"_ZTSSt14_Function_base", !7, i64 0, !23, i64 16}
!43 = !{!"_ZTSN3uno13IterateStatusE", !7, i64 0}
!44 = !{!23, !23, i64 0}


; Effective O3 passes: EarlyCSEPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LICMPass,LoopSimplifyPass,LoopUnrollPass,MemCpyOptPass,SROAPass,SimplifyCFGPass