; LLVM IR from CWI-EvolutionaryIntelligence/GOMEA :: gomea/src/common (linkage_model)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%"class.std::vector.9" = type { %"struct.std::_Vector_base.10" }
%"struct.std::_Vector_base.10" = type { %"struct.std::_Vector_base<std::vector<double>, std::allocator<std::vector<double>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::vector<double>, std::allocator<std::vector<double>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::vector<double>, std::allocator<std::vector<double>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::vector<double>, std::allocator<std::vector<double>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.20" = type { %"struct.std::_Vector_base.21" }
%"struct.std::_Vector_base.21" = type { %"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl" }
%"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl" = type { %"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl_data" }
%"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.45" = type { %"struct.std::_Vector_base.46" }
%"struct.std::_Vector_base.46" = 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.std::initializer_list" = type { ptr, i64 }
%"class.std::allocator.34" = type { i8 }
%"class.gomea::linkage_model_t" = type { ptr, %"class.std::vector", i64, %"class.std::vector", %"class.std::vector.4", %"class.std::vector.4", %"class.std::vector.4", i32, i8, i32, %"class.std::vector.4", %"class.std::vector.9", %"class.std::vector.14", i8, i32 }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<std::vector<int>, std::allocator<std::vector<int>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::vector<int>, std::allocator<std::vector<int>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::vector<int>, std::allocator<std::vector<int>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::vector<int>, std::allocator<std::vector<int>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.4" = type { %"struct.std::_Vector_base.5" }
%"struct.std::_Vector_base.5" = type { %"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl" }
%"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl" = type { %"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.14" = type { %"struct.std::_Vector_base.15" }
%"struct.std::_Vector_base.15" = type { %"struct.std::_Vector_base<std::set<int>, std::allocator<std::set<int>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::set<int>, std::allocator<std::set<int>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::set<int>, std::allocator<std::set<int>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::set<int>, std::allocator<std::set<int>>>::_Vector_impl_data" = type { ptr, ptr, ptr }

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

declare i32 @__gxx_personality_v0(...)

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN5gomea15linkage_model_t16computeNMIMatrixERSt6vectorIPNS_10solution_tIcEESaIS4_EEm(ptr dead_on_unwind noalias writable sret(%"class.std::vector.9") align 8 %0, ptr noundef nonnull align 8 dereferenceable(232) %1, ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef %3) #2 align 2 personality ptr @__gxx_personality_v0 {
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca i64, align 8
  %9 = alloca i1, align 1
  %10 = alloca ptr, align 8
  %11 = alloca i32, align 4
  %12 = alloca i64, align 8
  %13 = alloca double, align 8
  %14 = alloca i64, align 8
  %15 = alloca i32, align 4
  %16 = alloca i64, align 8
  %17 = alloca %"class.std::vector.20", align 8
  %18 = alloca %"class.std::vector.20", align 8
  %19 = alloca %"class.std::vector.20", align 8
  %20 = alloca i64, align 8
  %21 = alloca i64, align 8
  %22 = alloca i64, align 8
  %23 = alloca %"class.std::vector.45", align 8
  %24 = alloca %"class.std::initializer_list", align 8
  %25 = alloca [2 x i64], align 8
  %26 = alloca %"class.std::allocator.34", align 1
  %27 = alloca %"class.std::vector.45", align 8
  %28 = alloca %"class.std::initializer_list", align 8
  %29 = alloca [1 x i64], align 8
  %30 = alloca %"class.std::allocator.34", align 1
  %31 = alloca %"class.std::vector.45", align 8
  %32 = alloca %"class.std::initializer_list", align 8
  %33 = alloca [1 x i64], align 8
  %34 = alloca %"class.std::allocator.34", align 1
  %35 = alloca double, align 8
  %36 = alloca double, align 8
  %37 = alloca i64, align 8
  %38 = alloca i64, align 8
  %39 = alloca i64, align 8
  store ptr %0, ptr %5, align 8
  store ptr %1, ptr %6, align 8, !tbaa !5
  store ptr %2, ptr %7, align 8, !tbaa !5
  store i64 %3, ptr %8, align 8, !tbaa !9
  %40 = load ptr, ptr %6, align 8
  store i1 false, ptr %9, align 1
  call void @_ZNSt6vectorIS_IdSaIdEESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %0) #5
  %41 = getelementptr inbounds %"class.gomea::linkage_model_t", ptr %40, i32 0, i32 2
  %42 = load i64, ptr %41, align 8, !tbaa !11
  invoke void @_ZNSt6vectorIS_IdSaIdEESaIS1_EE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %0, i64 noundef %42)
          to label %43 unwind label %50

43:                                               ; preds = %4
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #5
  store i64 0, ptr %12, align 8, !tbaa !9
  br label %44

44:                                               ; preds = %60, %43
  %45 = load i64, ptr %12, align 8, !tbaa !9
  %46 = getelementptr inbounds %"class.gomea::linkage_model_t", ptr %40, i32 0, i32 2
  %47 = load i64, ptr %46, align 8, !tbaa !11
  %48 = icmp ult i64 %45, %47
  br i1 %48, label %54, label %49

49:                                               ; preds = %44
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #5
  br label %67

50:                                               ; preds = %4
  %51 = landingpad { ptr, i32 }
          cleanup
  %52 = extractvalue { ptr, i32 } %51, 0
  store ptr %52, ptr %10, align 8
  %53 = extractvalue { ptr, i32 } %51, 1
  store i32 %53, ptr %11, align 4
  br label %257

54:                                               ; preds = %44
  %55 = load i64, ptr %12, align 8, !tbaa !9
  %56 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_IdSaIdEESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %0, i64 noundef %55) #5
  %57 = getelementptr inbounds %"class.gomea::linkage_model_t", ptr %40, i32 0, i32 2
  %58 = load i64, ptr %57, align 8, !tbaa !11
  invoke void @_ZNSt6vectorIdSaIdEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %56, i64 noundef %58)
          to label %59 unwind label %63

59:                                               ; preds = %54
  br label %60

60:                                               ; preds = %59
  %61 = load i64, ptr %12, align 8, !tbaa !9
  %62 = add i64 %61, 1
  store i64 %62, ptr %12, align 8, !tbaa !9
  br label %44, !llvm.loop !32

63:                                               ; preds = %54
  %64 = landingpad { ptr, i32 }
          cleanup
  %65 = extractvalue { ptr, i32 } %64, 0
  store ptr %65, ptr %10, align 8
  %66 = extractvalue { ptr, i32 } %64, 1
  store i32 %66, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #5
  br label %257

67:                                               ; preds = %49
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #5
  store i64 0, ptr %14, align 8, !tbaa !9
  br label %68

68:                                               ; preds = %250, %67
  %69 = load i64, ptr %14, align 8, !tbaa !9
  %70 = getelementptr inbounds %"class.gomea::linkage_model_t", ptr %40, i32 0, i32 2
  %71 = load i64, ptr %70, align 8, !tbaa !11
  %72 = icmp ult i64 %69, %71
  br i1 %72, label %74, label %73

73:                                               ; preds = %68
  store i32 5, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #5
  br label %253

74:                                               ; preds = %68
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #5
  %75 = load i64, ptr %14, align 8, !tbaa !9
  %76 = add i64 %75, 1
  store i64 %76, ptr %16, align 8, !tbaa !9
  br label %77

77:                                               ; preds = %241, %74
  %78 = load i64, ptr %16, align 8, !tbaa !9
  %79 = getelementptr inbounds %"class.gomea::linkage_model_t", ptr %40, i32 0, i32 2
  %80 = load i64, ptr %79, align 8, !tbaa !11
  %81 = icmp ult i64 %78, %80
  br i1 %81, label %83, label %82

82:                                               ; preds = %77
  store i32 8, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #5
  br label %249

83:                                               ; preds = %77
  call void @llvm.lifetime.start.p0(i64 24, ptr %17) #5
  call void @_ZNSt6vectorIdSaIdEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %17) #5
  call void @llvm.lifetime.start.p0(i64 24, ptr %18) #5
  call void @_ZNSt6vectorIdSaIdEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %18) #5
  call void @llvm.lifetime.start.p0(i64 24, ptr %19) #5
  call void @_ZNSt6vectorIdSaIdEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %19) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #5
  call void @llvm.lifetime.start.p0(i64 24, ptr %23) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr %25) #5
  %84 = load i64, ptr %14, align 8, !tbaa !9
  store i64 %84, ptr %25, align 8, !tbaa !9
  %85 = getelementptr inbounds i64, ptr %25, i64 1
  %86 = load i64, ptr %16, align 8, !tbaa !9
  store i64 %86, ptr %85, align 8, !tbaa !9
  %87 = getelementptr inbounds %"class.std::initializer_list", ptr %24, i32 0, i32 0
  store ptr %25, ptr %87, align 8, !tbaa !34
  %88 = getelementptr inbounds %"class.std::initializer_list", ptr %24, i32 0, i32 1
  store i64 2, ptr %88, align 8, !tbaa !36
  call void @llvm.lifetime.start.p0(i64 1, ptr %26) #5
  call void @_ZNSaImEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %26) #5
  %89 = getelementptr inbounds { ptr, i64 }, ptr %24, i32 0, i32 0
  %90 = load ptr, ptr %89, align 8
  %91 = getelementptr inbounds { ptr, i64 }, ptr %24, i32 0, i32 1
  %92 = load i64, ptr %91, align 8
  invoke void @_ZNSt6vectorImSaImEEC2ESt16initializer_listImERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %23, ptr %90, i64 %92, ptr noundef nonnull align 1 dereferenceable(1) %26)
          to label %93 unwind label %128

93:                                               ; preds = %83
  call void @_ZNSt15__new_allocatorImED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %26) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %26) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %25) #5
  %94 = load ptr, ptr %7, align 8, !tbaa !5
  %95 = load i64, ptr %8, align 8, !tbaa !9
  invoke void @_ZN5gomea15linkage_model_t41estimateParametersForSingleBinaryMarginalERSt6vectorIPNS_10solution_tIcEESaIS4_EEmRS1_ImSaImEERmRS1_IdSaIdEE(ptr noundef nonnull align 8 dereferenceable(232) %40, ptr noundef nonnull align 8 dereferenceable(24) %94, i64 noundef %95, ptr noundef nonnull align 8 dereferenceable(24) %23, ptr noundef nonnull align 8 dereferenceable(8) %20, ptr noundef nonnull align 8 dereferenceable(24) %17)
          to label %96 unwind label %132

96:                                               ; preds = %93
  call void @llvm.lifetime.start.p0(i64 24, ptr %27) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #5
  %97 = load i64, ptr %14, align 8, !tbaa !9
  store i64 %97, ptr %29, align 8, !tbaa !9
  %98 = getelementptr inbounds %"class.std::initializer_list", ptr %28, i32 0, i32 0
  store ptr %29, ptr %98, align 8, !tbaa !34
  %99 = getelementptr inbounds %"class.std::initializer_list", ptr %28, i32 0, i32 1
  store i64 1, ptr %99, align 8, !tbaa !36
  call void @llvm.lifetime.start.p0(i64 1, ptr %30) #5
  call void @_ZNSaImEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %30) #5
  %100 = getelementptr inbounds { ptr, i64 }, ptr %28, i32 0, i32 0
  %101 = load ptr, ptr %100, align 8
  %102 = getelementptr inbounds { ptr, i64 }, ptr %28, i32 0, i32 1
  %103 = load i64, ptr %102, align 8
  invoke void @_ZNSt6vectorImSaImEEC2ESt16initializer_listImERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %27, ptr %101, i64 %103, ptr noundef nonnull align 1 dereferenceable(1) %30)
          to label %104 unwind label %136

104:                                              ; preds = %96
  call void @_ZNSt15__new_allocatorImED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %30) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %30) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #5
  %105 = load ptr, ptr %7, align 8, !tbaa !5
  %106 = load i64, ptr %8, align 8, !tbaa !9
  invoke void @_ZN5gomea15linkage_model_t41estimateParametersForSingleBinaryMarginalERSt6vectorIPNS_10solution_tIcEESaIS4_EEmRS1_ImSaImEERmRS1_IdSaIdEE(ptr noundef nonnull align 8 dereferenceable(232) %40, ptr noundef nonnull align 8 dereferenceable(24) %105, i64 noundef %106, ptr noundef nonnull align 8 dereferenceable(24) %27, ptr noundef nonnull align 8 dereferenceable(8) %21, ptr noundef nonnull align 8 dereferenceable(24) %18)
          to label %107 unwind label %140

107:                                              ; preds = %104
  call void @llvm.lifetime.start.p0(i64 24, ptr %31) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #5
  %108 = load i64, ptr %16, align 8, !tbaa !9
  store i64 %108, ptr %33, align 8, !tbaa !9
  %109 = getelementptr inbounds %"class.std::initializer_list", ptr %32, i32 0, i32 0
  store ptr %33, ptr %109, align 8, !tbaa !34
  %110 = getelementptr inbounds %"class.std::initializer_list", ptr %32, i32 0, i32 1
  store i64 1, ptr %110, align 8, !tbaa !36
  call void @llvm.lifetime.start.p0(i64 1, ptr %34) #5
  call void @_ZNSaImEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %34) #5
  %111 = getelementptr inbounds { ptr, i64 }, ptr %32, i32 0, i32 0
  %112 = load ptr, ptr %111, align 8
  %113 = getelementptr inbounds { ptr, i64 }, ptr %32, i32 0, i32 1
  %114 = load i64, ptr %113, align 8
  invoke void @_ZNSt6vectorImSaImEEC2ESt16initializer_listImERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %31, ptr %112, i64 %114, ptr noundef nonnull align 1 dereferenceable(1) %34)
          to label %115 unwind label %144

115:                                              ; preds = %107
  call void @_ZNSt15__new_allocatorImED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %34) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %34) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #5
  %116 = load ptr, ptr %7, align 8, !tbaa !5
  %117 = load i64, ptr %8, align 8, !tbaa !9
  invoke void @_ZN5gomea15linkage_model_t41estimateParametersForSingleBinaryMarginalERSt6vectorIPNS_10solution_tIcEESaIS4_EEmRS1_ImSaImEERmRS1_IdSaIdEE(ptr noundef nonnull align 8 dereferenceable(232) %40, ptr noundef nonnull align 8 dereferenceable(24) %116, i64 noundef %117, ptr noundef nonnull align 8 dereferenceable(24) %31, ptr noundef nonnull align 8 dereferenceable(8) %22, ptr noundef nonnull align 8 dereferenceable(24) %19)
          to label %118 unwind label %148

118:                                              ; preds = %115
  %119 = load i64, ptr %14, align 8, !tbaa !9
  %120 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_IdSaIdEESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %0, i64 noundef %119) #5
  %121 = load i64, ptr %16, align 8, !tbaa !9
  %122 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %120, i64 noundef %121) #5
  store double 0.000000e+00, ptr %122, align 8, !tbaa !37
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #5
  store double 0.000000e+00, ptr %35, align 8, !tbaa !37
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #5
  store double 0.000000e+00, ptr %36, align 8, !tbaa !37
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #5
  store i64 0, ptr %37, align 8, !tbaa !9
  br label %123

123:                                              ; preds = %166, %118
  %124 = load i64, ptr %37, align 8, !tbaa !9
  %125 = load i64, ptr %20, align 8, !tbaa !9
  %126 = icmp ult i64 %124, %125
  br i1 %126, label %152, label %127

127:                                              ; preds = %123
  store i32 11, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #5
  br label %169

128:                                              ; preds = %83
  %129 = landingpad { ptr, i32 }
          cleanup
  %130 = extractvalue { ptr, i32 } %129, 0
  store ptr %130, ptr %10, align 8
  %131 = extractvalue { ptr, i32 } %129, 1
  store i32 %131, ptr %11, align 4
  call void @_ZNSt15__new_allocatorImED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %26) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %26) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %25) #5
  br label %248

132:                                              ; preds = %93
  %133 = landingpad { ptr, i32 }
          cleanup
  %134 = extractvalue { ptr, i32 } %133, 0
  store ptr %134, ptr %10, align 8
  %135 = extractvalue { ptr, i32 } %133, 1
  store i32 %135, ptr %11, align 4
  br label %247

136:                                              ; preds = %96
  %137 = landingpad { ptr, i32 }
          cleanup
  %138 = extractvalue { ptr, i32 } %137, 0
  store ptr %138, ptr %10, align 8
  %139 = extractvalue { ptr, i32 } %137, 1
  store i32 %139, ptr %11, align 4
  call void @_ZNSt15__new_allocatorImED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %30) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %30) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #5
  br label %246

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

144:                                              ; preds = %107
  %145 = landingpad { ptr, i32 }
          cleanup
  %146 = extractvalue { ptr, i32 } %145, 0
  store ptr %146, ptr %10, align 8
  %147 = extractvalue { ptr, i32 } %145, 1
  store i32 %147, ptr %11, align 4
  call void @_ZNSt15__new_allocatorImED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %34) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %34) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #5
  br label %244

148:                                              ; preds = %115
  %149 = landingpad { ptr, i32 }
          cleanup
  %150 = extractvalue { ptr, i32 } %149, 0
  store ptr %150, ptr %10, align 8
  %151 = extractvalue { ptr, i32 } %149, 1
  store i32 %151, ptr %11, align 4
  call void @_ZNSt6vectorImSaImEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %31) #5
  br label %244

152:                                              ; preds = %123
  %153 = load i64, ptr %37, align 8, !tbaa !9
  %154 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %17, i64 noundef %153) #5
  %155 = load double, ptr %154, align 8, !tbaa !37
  store double %155, ptr %13, align 8, !tbaa !37
  %156 = load double, ptr %13, align 8, !tbaa !37
  %157 = fcmp ogt double %156, 0.000000e+00
  br i1 %157, label %158, label %165

158:                                              ; preds = %152
  %159 = load double, ptr %13, align 8, !tbaa !37
  %160 = fneg double %159
  %161 = load double, ptr %13, align 8, !tbaa !37
  %162 = call double @log2(double noundef %161) #5
  %163 = load double, ptr %36, align 8, !tbaa !37
  %164 = call double @llvm.fmuladd.f64(double %160, double %162, double %163)
  store double %164, ptr %36, align 8, !tbaa !37
  br label %165

165:                                              ; preds = %158, %152
  br label %166

166:                                              ; preds = %165
  %167 = load i64, ptr %37, align 8, !tbaa !9
  %168 = add i64 %167, 1
  store i64 %168, ptr %37, align 8, !tbaa !9
  br label %123, !llvm.loop !39

169:                                              ; preds = %127
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #5
  store i64 0, ptr %38, align 8, !tbaa !9
  br label %170

170:                                              ; preds = %189, %169
  %171 = load i64, ptr %38, align 8, !tbaa !9
  %172 = load i64, ptr %21, align 8, !tbaa !9
  %173 = icmp ult i64 %171, %172
  br i1 %173, label %175, label %174

174:                                              ; preds = %170
  store i32 14, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #5
  br label %192

175:                                              ; preds = %170
  %176 = load i64, ptr %38, align 8, !tbaa !9
  %177 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %18, i64 noundef %176) #5
  %178 = load double, ptr %177, align 8, !tbaa !37
  store double %178, ptr %13, align 8, !tbaa !37
  %179 = load double, ptr %13, align 8, !tbaa !37
  %180 = fcmp ogt double %179, 0.000000e+00
  br i1 %180, label %181, label %188

181:                                              ; preds = %175
  %182 = load double, ptr %13, align 8, !tbaa !37
  %183 = fneg double %182
  %184 = load double, ptr %13, align 8, !tbaa !37
  %185 = call double @log2(double noundef %184) #5
  %186 = load double, ptr %35, align 8, !tbaa !37
  %187 = call double @llvm.fmuladd.f64(double %183, double %185, double %186)
  store double %187, ptr %35, align 8, !tbaa !37
  br label %188

188:                                              ; preds = %181, %175
  br label %189

189:                                              ; preds = %188
  %190 = load i64, ptr %38, align 8, !tbaa !9
  %191 = add i64 %190, 1
  store i64 %191, ptr %38, align 8, !tbaa !9
  br label %170, !llvm.loop !40

192:                                              ; preds = %174
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #5
  store i64 0, ptr %39, align 8, !tbaa !9
  br label %193

193:                                              ; preds = %212, %192
  %194 = load i64, ptr %39, align 8, !tbaa !9
  %195 = load i64, ptr %22, align 8, !tbaa !9
  %196 = icmp ult i64 %194, %195
  br i1 %196, label %198, label %197

197:                                              ; preds = %193
  store i32 17, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #5
  br label %215

198:                                              ; preds = %193
  %199 = load i64, ptr %39, align 8, !tbaa !9
  %200 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %19, i64 noundef %199) #5
  %201 = load double, ptr %200, align 8, !tbaa !37
  store double %201, ptr %13, align 8, !tbaa !37
  %202 = load double, ptr %13, align 8, !tbaa !37
  %203 = fcmp ogt double %202, 0.000000e+00
  br i1 %203, label %204, label %211

204:                                              ; preds = %198
  %205 = load double, ptr %13, align 8, !tbaa !37
  %206 = fneg double %205
  %207 = load double, ptr %13, align 8, !tbaa !37
  %208 = call double @log2(double noundef %207) #5
  %209 = load double, ptr %35, align 8, !tbaa !37
  %210 = call double @llvm.fmuladd.f64(double %206, double %208, double %209)
  store double %210, ptr %35, align 8, !tbaa !37
  br label %211

211:                                              ; preds = %204, %198
  br label %212

212:                                              ; preds = %211
  %213 = load i64, ptr %39, align 8, !tbaa !9
  %214 = add i64 %213, 1
  store i64 %214, ptr %39, align 8, !tbaa !9
  br label %193, !llvm.loop !41

215:                                              ; preds = %197
  %216 = load i64, ptr %14, align 8, !tbaa !9
  %217 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_IdSaIdEESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %0, i64 noundef %216) #5
  %218 = load i64, ptr %16, align 8, !tbaa !9
  %219 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %217, i64 noundef %218) #5
  store double 0.000000e+00, ptr %219, align 8, !tbaa !37
  %220 = load double, ptr %36, align 8, !tbaa !37
  %221 = fcmp une double %220, 0.000000e+00
  br i1 %221, label %222, label %231

222:                                              ; preds = %215
  %223 = load double, ptr %35, align 8, !tbaa !37
  %224 = load double, ptr %36, align 8, !tbaa !37
  %225 = fdiv double %223, %224
  %226 = fsub double %225, 1.000000e+00
  %227 = load i64, ptr %14, align 8, !tbaa !9
  %228 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_IdSaIdEESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %0, i64 noundef %227) #5
  %229 = load i64, ptr %16, align 8, !tbaa !9
  %230 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %228, i64 noundef %229) #5
  store double %226, ptr %230, align 8, !tbaa !37
  br label %231

231:                                              ; preds = %222, %215
  %232 = load i64, ptr %14, align 8, !tbaa !9
  %233 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_IdSaIdEESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %0, i64 noundef %232) #5
  %234 = load i64, ptr %16, align 8, !tbaa !9
  %235 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %233, i64 noundef %234) #5
  %236 = load double, ptr %235, align 8, !tbaa !37
  %237 = load i64, ptr %16, align 8, !tbaa !9
  %238 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_IdSaIdEESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %0, i64 noundef %237) #5
  %239 = load i64, ptr %14, align 8, !tbaa !9
  %240 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %238, i64 noundef %239) #5
  store double %236, ptr %240, align 8, !tbaa !37
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #5
  call void @_ZNSt6vectorImSaImEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %31) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %31) #5
  call void @_ZNSt6vectorImSaImEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %27) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %27) #5
  call void @_ZNSt6vectorImSaImEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %23) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %23) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #5
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %19) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %19) #5
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %18) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %18) #5
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %17) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %17) #5
  br label %241

241:                                              ; preds = %231
  %242 = load i64, ptr %16, align 8, !tbaa !9
  %243 = add i64 %242, 1
  store i64 %243, ptr %16, align 8, !tbaa !9
  br label %77, !llvm.loop !42

244:                                              ; preds = %148, %144
  call void @llvm.lifetime.end.p0(i64 24, ptr %31) #5
  br label %245

245:                                              ; preds = %244, %140
  call void @_ZNSt6vectorImSaImEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %27) #5
  br label %246

246:                                              ; preds = %245, %136
  call void @llvm.lifetime.end.p0(i64 24, ptr %27) #5
  br label %247

247:                                              ; preds = %246, %132
  call void @_ZNSt6vectorImSaImEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %23) #5
  br label %248

248:                                              ; preds = %247, %128
  call void @llvm.lifetime.end.p0(i64 24, ptr %23) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #5
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %19) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %19) #5
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %18) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %18) #5
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %17) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %17) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #5
  br label %257

249:                                              ; preds = %82
  br label %250

250:                                              ; preds = %249
  %251 = load i64, ptr %14, align 8, !tbaa !9
  %252 = add i64 %251, 1
  store i64 %252, ptr %14, align 8, !tbaa !9
  br label %68, !llvm.loop !43

253:                                              ; preds = %73
  store i1 true, ptr %9, align 1
  store i32 1, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #5
  %254 = load i1, ptr %9, align 1
  br i1 %254, label %256, label %255

255:                                              ; preds = %253
  call void @_ZNSt6vectorIS_IdSaIdEESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %0) #5
  br label %256

256:                                              ; preds = %255, %253
  ret void

257:                                              ; preds = %248, %63, %50
  call void @_ZNSt6vectorIS_IdSaIdEESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %0) #5
  br label %258

258:                                              ; preds = %257
  %259 = load ptr, ptr %10, align 8
  %260 = load i32, ptr %11, align 4
  %261 = insertvalue { ptr, i32 } poison, ptr %259, 0
  %262 = insertvalue { ptr, i32 } %261, i32 %260, 1
  resume { ptr, i32 } %262
}

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fmuladd.f64(double, double, double) #3

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

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

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

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

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

; Function Attrs: nounwind
declare double @log2(double noundef) #4

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt15__new_allocatorImED2Ev(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 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { 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 #5 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = !{!12, !10, i64 32}
!12 = !{!"_ZTSN5gomea15linkage_model_tE", !13, i64 8, !10, i64 32, !13, i64 40, !17, i64 64, !17, i64 88, !17, i64 112, !21, i64 136, !22, i64 140, !23, i64 144, !17, i64 152, !24, i64 176, !28, i64 200, !22, i64 224, !23, i64 228}
!13 = !{!"_ZTSSt6vectorIS_IiSaIiEESaIS1_EE", !14, i64 0}
!14 = !{!"_ZTSSt12_Vector_baseISt6vectorIiSaIiEESaIS2_EE", !15, i64 0}
!15 = !{!"_ZTSNSt12_Vector_baseISt6vectorIiSaIiEESaIS2_EE12_Vector_implE", !16, i64 0}
!16 = !{!"_ZTSNSt12_Vector_baseISt6vectorIiSaIiEESaIS2_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!17 = !{!"_ZTSSt6vectorIiSaIiEE", !18, i64 0}
!18 = !{!"_ZTSSt12_Vector_baseIiSaIiEE", !19, i64 0}
!19 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE12_Vector_implE", !20, i64 0}
!20 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!21 = !{!"_ZTSN5gomea7linkage18linkage_model_typeE", !7, i64 0}
!22 = !{!"bool", !7, i64 0}
!23 = !{!"int", !7, i64 0}
!24 = !{!"_ZTSSt6vectorIS_IdSaIdEESaIS1_EE", !25, i64 0}
!25 = !{!"_ZTSSt12_Vector_baseISt6vectorIdSaIdEESaIS2_EE", !26, i64 0}
!26 = !{!"_ZTSNSt12_Vector_baseISt6vectorIdSaIdEESaIS2_EE12_Vector_implE", !27, i64 0}
!27 = !{!"_ZTSNSt12_Vector_baseISt6vectorIdSaIdEESaIS2_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!28 = !{!"_ZTSSt6vectorISt3setIiSt4lessIiESaIiEESaIS4_EE", !29, i64 0}
!29 = !{!"_ZTSSt12_Vector_baseISt3setIiSt4lessIiESaIiEESaIS4_EE", !30, i64 0}
!30 = !{!"_ZTSNSt12_Vector_baseISt3setIiSt4lessIiESaIiEESaIS4_EE12_Vector_implE", !31, i64 0}
!31 = !{!"_ZTSNSt12_Vector_baseISt3setIiSt4lessIiESaIiEESaIS4_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!32 = distinct !{!32, !33}
!33 = !{!"llvm.loop.mustprogress"}
!34 = !{!35, !6, i64 0}
!35 = !{!"_ZTSSt16initializer_listImE", !6, i64 0, !10, i64 8}
!36 = !{!35, !10, i64 8}
!37 = !{!38, !38, i64 0}
!38 = !{!"double", !7, i64 0}
!39 = distinct !{!39, !33}
!40 = distinct !{!40, !33}
!41 = distinct !{!41, !33}
!42 = distinct !{!42, !33}
!43 = distinct !{!43, !33}


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

%"class.std::vector.9" = type { %"struct.std::_Vector_base.10" }
%"struct.std::_Vector_base.10" = type { %"struct.std::_Vector_base<std::vector<double>, std::allocator<std::vector<double>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::vector<double>, std::allocator<std::vector<double>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::vector<double>, std::allocator<std::vector<double>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::vector<double>, std::allocator<std::vector<double>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.20" = type { %"struct.std::_Vector_base.21" }
%"struct.std::_Vector_base.21" = type { %"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl" }
%"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl" = type { %"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl_data" }
%"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.45" = type { %"struct.std::_Vector_base.46" }
%"struct.std::_Vector_base.46" = 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.std::allocator.34" = type { i8 }

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

declare i32 @__gxx_personality_v0(...)

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN5gomea15linkage_model_t16computeNMIMatrixERSt6vectorIPNS_10solution_tIcEESaIS4_EEm(ptr dead_on_unwind noalias nonnull writable sret(%"class.std::vector.9") align 8 %0, ptr noundef nonnull align 8 dereferenceable(232) %1, ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef %3) local_unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %5 = alloca %"class.std::vector.20", align 8
  %6 = alloca %"class.std::vector.20", align 8
  %7 = alloca %"class.std::vector.20", align 8
  %8 = alloca i64, align 8
  %9 = alloca i64, align 8
  %10 = alloca i64, align 8
  %11 = alloca %"class.std::vector.45", align 8
  %12 = alloca [2 x i64], align 8
  %13 = alloca %"class.std::allocator.34", align 1
  %14 = alloca %"class.std::vector.45", align 8
  %15 = alloca [1 x i64], align 8
  %16 = alloca %"class.std::allocator.34", align 1
  %17 = alloca %"class.std::vector.45", align 8
  %18 = alloca [1 x i64], align 8
  %19 = alloca %"class.std::allocator.34", align 1
  tail call void @_ZNSt6vectorIS_IdSaIdEESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %0) #5
  %20 = getelementptr inbounds i8, ptr %1, i64 32
  %21 = load i64, ptr %20, align 8, !tbaa !5
  invoke void @_ZNSt6vectorIS_IdSaIdEESaIS1_EE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %0, i64 noundef %21)
          to label %.preheader89 unwind label %24

.preheader89:                                     ; preds = %4
  %22 = load i64, ptr %20, align 8, !tbaa !5
  %.not = icmp eq i64 %22, 0
  br i1 %.not, label %._crit_edge107, label %.lr.ph

.preheader88:                                     ; preds = %28
  %.not108 = icmp eq i64 %30, 0
  br i1 %.not108, label %._crit_edge107, label %.lr.ph106

.lr.ph106:                                        ; preds = %.preheader88
  %23 = getelementptr inbounds i8, ptr %12, i64 8
  br label %36

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

.lr.ph:                                           ; preds = %.preheader89, %28
  %.07490 = phi i64 [ %29, %28 ], [ 0, %.preheader89 ]
  %26 = tail call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_IdSaIdEESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %0, i64 noundef %.07490) #5
  %27 = load i64, ptr %20, align 8, !tbaa !5
  invoke void @_ZNSt6vectorIdSaIdEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %26, i64 noundef %27)
          to label %28 unwind label %32

28:                                               ; preds = %.lr.ph
  %29 = add nuw i64 %.07490, 1
  %30 = load i64, ptr %20, align 8, !tbaa !5
  %31 = icmp ult i64 %29, %30
  br i1 %31, label %.lr.ph, label %.preheader88, !llvm.loop !30

32:                                               ; preds = %.lr.ph
  %33 = landingpad { ptr, i32 }
          cleanup
  br label %118

.loopexit:                                        ; preds = %104, %36
  %34 = phi i64 [ %37, %36 ], [ %111, %104 ]
  %35 = icmp ult i64 %38, %34
  br i1 %35, label %36, label %._crit_edge107, !llvm.loop !32

36:                                               ; preds = %.lr.ph106, %.loopexit
  %37 = phi i64 [ %30, %.lr.ph106 ], [ %34, %.loopexit ]
  %.075105 = phi i64 [ 0, %.lr.ph106 ], [ %38, %.loopexit ]
  %38 = add nuw i64 %.075105, 1
  %39 = icmp ult i64 %38, %37
  br i1 %39, label %.lr.ph104, label %.loopexit

.lr.ph104:                                        ; preds = %36, %104
  %.076102 = phi i64 [ %110, %104 ], [ %38, %36 ]
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5) #5
  call void @_ZNSt6vectorIdSaIdEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #5
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %6) #5
  call void @_ZNSt6vectorIdSaIdEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %6) #5
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %7) #5
  call void @_ZNSt6vectorIdSaIdEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #5
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %11) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %12) #5
  store i64 %.075105, ptr %12, align 8, !tbaa !33
  store i64 %.076102, ptr %23, align 8, !tbaa !33
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %13) #5
  call void @_ZNSaImEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %13) #5
  invoke void @_ZNSt6vectorImSaImEEC2ESt16initializer_listImERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %11, ptr nonnull %12, i64 2, ptr noundef nonnull align 1 dereferenceable(1) %13)
          to label %40 unwind label %50

40:                                               ; preds = %.lr.ph104
  call void @_ZNSt15__new_allocatorImED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %13) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %13) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %12) #5
  invoke void @_ZN5gomea15linkage_model_t41estimateParametersForSingleBinaryMarginalERSt6vectorIPNS_10solution_tIcEESaIS4_EEmRS1_ImSaImEERmRS1_IdSaIdEE(ptr noundef nonnull align 8 dereferenceable(232) %1, ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef %3, ptr noundef nonnull align 8 dereferenceable(24) %11, ptr noundef nonnull align 8 dereferenceable(8) %8, ptr noundef nonnull align 8 dereferenceable(24) %5)
          to label %41 unwind label %52

41:                                               ; preds = %40
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %14) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #5
  store i64 %.075105, ptr %15, align 8, !tbaa !33
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %16) #5
  call void @_ZNSaImEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %16) #5
  invoke void @_ZNSt6vectorImSaImEEC2ESt16initializer_listImERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %14, ptr nonnull %15, i64 1, ptr noundef nonnull align 1 dereferenceable(1) %16)
          to label %42 unwind label %54

42:                                               ; preds = %41
  call void @_ZNSt15__new_allocatorImED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %16) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %16) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #5
  invoke void @_ZN5gomea15linkage_model_t41estimateParametersForSingleBinaryMarginalERSt6vectorIPNS_10solution_tIcEESaIS4_EEmRS1_ImSaImEERmRS1_IdSaIdEE(ptr noundef nonnull align 8 dereferenceable(232) %1, ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef %3, ptr noundef nonnull align 8 dereferenceable(24) %14, ptr noundef nonnull align 8 dereferenceable(8) %9, ptr noundef nonnull align 8 dereferenceable(24) %6)
          to label %43 unwind label %56

43:                                               ; preds = %42
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %17) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %18) #5
  store i64 %.076102, ptr %18, align 8, !tbaa !33
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %19) #5
  call void @_ZNSaImEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %19) #5
  invoke void @_ZNSt6vectorImSaImEEC2ESt16initializer_listImERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %17, ptr nonnull %18, i64 1, ptr noundef nonnull align 1 dereferenceable(1) %19)
          to label %44 unwind label %58

44:                                               ; preds = %43
  call void @_ZNSt15__new_allocatorImED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %19) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %19) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #5
  invoke void @_ZN5gomea15linkage_model_t41estimateParametersForSingleBinaryMarginalERSt6vectorIPNS_10solution_tIcEESaIS4_EEmRS1_ImSaImEERmRS1_IdSaIdEE(ptr noundef nonnull align 8 dereferenceable(232) %1, ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef %3, ptr noundef nonnull align 8 dereferenceable(24) %17, ptr noundef nonnull align 8 dereferenceable(8) %10, ptr noundef nonnull align 8 dereferenceable(24) %7)
          to label %45 unwind label %60

45:                                               ; preds = %44
  %46 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_IdSaIdEESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %0, i64 noundef %.075105) #5
  %47 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %46, i64 noundef %.076102) #5
  store double 0.000000e+00, ptr %47, align 8, !tbaa !34
  %48 = load i64, ptr %8, align 8, !tbaa !33
  %.not109 = icmp eq i64 %48, 0
  br i1 %.not109, label %.preheader87, label %.lr.ph93

.preheader87:                                     ; preds = %69, %45
  %.061.lcssa = phi double [ 0.000000e+00, %45 ], [ %.1, %69 ]
  %49 = load i64, ptr %9, align 8, !tbaa !33
  %.not110 = icmp eq i64 %49, 0
  br i1 %.not110, label %.preheader, label %.lr.ph96

50:                                               ; preds = %.lr.ph104
  %51 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorImED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %13) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %13) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %12) #5
  br label %117

52:                                               ; preds = %40
  %53 = landingpad { ptr, i32 }
          cleanup
  br label %116

54:                                               ; preds = %41
  %55 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorImED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %16) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %16) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #5
  br label %115

56:                                               ; preds = %42
  %57 = landingpad { ptr, i32 }
          cleanup
  br label %114

58:                                               ; preds = %43
  %59 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorImED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %19) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %19) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #5
  br label %113

60:                                               ; preds = %44
  %61 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt6vectorImSaImEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %17) #5
  br label %113

.lr.ph93:                                         ; preds = %45, %69
  %.06092 = phi i64 [ %70, %69 ], [ 0, %45 ]
  %.06191 = phi double [ %.1, %69 ], [ 0.000000e+00, %45 ]
  %62 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %5, i64 noundef %.06092) #5
  %63 = load double, ptr %62, align 8, !tbaa !34
  %64 = fcmp ogt double %63, 0.000000e+00
  br i1 %64, label %65, label %69

65:                                               ; preds = %.lr.ph93
  %66 = fneg double %63
  %67 = call double @log2(double noundef %63) #5
  %68 = call double @llvm.fmuladd.f64(double %66, double %67, double %.06191)
  br label %69

69:                                               ; preds = %.lr.ph93, %65
  %.1 = phi double [ %68, %65 ], [ %.06191, %.lr.ph93 ]
  %70 = add nuw i64 %.06092, 1
  %71 = load i64, ptr %8, align 8, !tbaa !33
  %72 = icmp ult i64 %70, %71
  br i1 %72, label %.lr.ph93, label %.preheader87, !llvm.loop !36

.preheader:                                       ; preds = %81, %.preheader87
  %.062.lcssa = phi double [ 0.000000e+00, %.preheader87 ], [ %.163, %81 ]
  %73 = load i64, ptr %10, align 8, !tbaa !33
  %.not111 = icmp eq i64 %73, 0
  br i1 %.not111, label %._crit_edge, label %.lr.ph100

.lr.ph96:                                         ; preds = %.preheader87, %81
  %.05995 = phi i64 [ %82, %81 ], [ 0, %.preheader87 ]
  %.06294 = phi double [ %.163, %81 ], [ 0.000000e+00, %.preheader87 ]
  %74 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %6, i64 noundef %.05995) #5
  %75 = load double, ptr %74, align 8, !tbaa !34
  %76 = fcmp ogt double %75, 0.000000e+00
  br i1 %76, label %77, label %81

77:                                               ; preds = %.lr.ph96
  %78 = fneg double %75
  %79 = call double @log2(double noundef %75) #5
  %80 = call double @llvm.fmuladd.f64(double %78, double %79, double %.06294)
  br label %81

81:                                               ; preds = %.lr.ph96, %77
  %.163 = phi double [ %80, %77 ], [ %.06294, %.lr.ph96 ]
  %82 = add nuw i64 %.05995, 1
  %83 = load i64, ptr %9, align 8, !tbaa !33
  %84 = icmp ult i64 %82, %83
  br i1 %84, label %.lr.ph96, label %.preheader, !llvm.loop !37

._crit_edge:                                      ; preds = %95, %.preheader
  %.2.lcssa = phi double [ %.062.lcssa, %.preheader ], [ %.3, %95 ]
  %85 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_IdSaIdEESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %0, i64 noundef %.075105) #5
  %86 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %85, i64 noundef %.076102) #5
  store double 0.000000e+00, ptr %86, align 8, !tbaa !34
  %87 = fcmp une double %.061.lcssa, 0.000000e+00
  br i1 %87, label %99, label %104

.lr.ph100:                                        ; preds = %.preheader, %95
  %.099 = phi i64 [ %96, %95 ], [ 0, %.preheader ]
  %.298 = phi double [ %.3, %95 ], [ %.062.lcssa, %.preheader ]
  %88 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %.099) #5
  %89 = load double, ptr %88, align 8, !tbaa !34
  %90 = fcmp ogt double %89, 0.000000e+00
  br i1 %90, label %91, label %95

91:                                               ; preds = %.lr.ph100
  %92 = fneg double %89
  %93 = call double @log2(double noundef %89) #5
  %94 = call double @llvm.fmuladd.f64(double %92, double %93, double %.298)
  br label %95

95:                                               ; preds = %.lr.ph100, %91
  %.3 = phi double [ %94, %91 ], [ %.298, %.lr.ph100 ]
  %96 = add nuw i64 %.099, 1
  %97 = load i64, ptr %10, align 8, !tbaa !33
  %98 = icmp ult i64 %96, %97
  br i1 %98, label %.lr.ph100, label %._crit_edge, !llvm.loop !38

99:                                               ; preds = %._crit_edge
  %100 = fdiv double %.2.lcssa, %.061.lcssa
  %101 = fadd double %100, -1.000000e+00
  %102 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_IdSaIdEESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %0, i64 noundef %.075105) #5
  %103 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %102, i64 noundef %.076102) #5
  store double %101, ptr %103, align 8, !tbaa !34
  br label %104

104:                                              ; preds = %99, %._crit_edge
  %105 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_IdSaIdEESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %0, i64 noundef %.075105) #5
  %106 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %105, i64 noundef %.076102) #5
  %107 = load double, ptr %106, align 8, !tbaa !34
  %108 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_IdSaIdEESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %0, i64 noundef %.076102) #5
  %109 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %108, i64 noundef %.075105) #5
  store double %107, ptr %109, align 8, !tbaa !34
  call void @_ZNSt6vectorImSaImEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %17) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %17) #5
  call void @_ZNSt6vectorImSaImEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %14) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %14) #5
  call void @_ZNSt6vectorImSaImEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %11) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #5
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7) #5
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %6) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6) #5
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #5
  %110 = add nuw i64 %.076102, 1
  %111 = load i64, ptr %20, align 8, !tbaa !5
  %112 = icmp ult i64 %110, %111
  br i1 %112, label %.lr.ph104, label %.loopexit, !llvm.loop !39

113:                                              ; preds = %60, %58
  %.pn = phi { ptr, i32 } [ %61, %60 ], [ %59, %58 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %17) #5
  br label %114

114:                                              ; preds = %113, %56
  %.pn.pn = phi { ptr, i32 } [ %.pn, %113 ], [ %57, %56 ]
  call void @_ZNSt6vectorImSaImEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %14) #5
  br label %115

115:                                              ; preds = %114, %54
  %.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn, %114 ], [ %55, %54 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %14) #5
  br label %116

116:                                              ; preds = %115, %52
  %.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn, %115 ], [ %53, %52 ]
  call void @_ZNSt6vectorImSaImEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #5
  br label %117

117:                                              ; preds = %116, %50
  %.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn.pn, %116 ], [ %51, %50 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %11) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #5
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7) #5
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %6) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6) #5
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #5
  br label %118

._crit_edge107:                                   ; preds = %.loopexit, %.preheader89, %.preheader88
  ret void

118:                                              ; preds = %117, %32, %24
  %.pn85 = phi { ptr, i32 } [ %33, %32 ], [ %.pn.pn.pn.pn.pn, %117 ], [ %25, %24 ]
  call void @_ZNSt6vectorIS_IdSaIdEESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %0) #5
  resume { ptr, i32 } %.pn85
}

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

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fmuladd.f64(double, double, double) #3

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

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

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

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

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

; Function Attrs: mustprogress nofree nounwind willreturn memory(write)
declare double @log2(double noundef) local_unnamed_addr #4

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

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { mustprogress nofree nounwind willreturn memory(write) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !14, i64 32}
!6 = !{!"_ZTSN5gomea15linkage_model_tE", !7, i64 8, !14, i64 32, !7, i64 40, !15, i64 64, !15, i64 88, !15, i64 112, !19, i64 136, !20, i64 140, !21, i64 144, !15, i64 152, !22, i64 176, !26, i64 200, !20, i64 224, !21, i64 228}
!7 = !{!"_ZTSSt6vectorIS_IiSaIiEESaIS1_EE", !8, i64 0}
!8 = !{!"_ZTSSt12_Vector_baseISt6vectorIiSaIiEESaIS2_EE", !9, i64 0}
!9 = !{!"_ZTSNSt12_Vector_baseISt6vectorIiSaIiEESaIS2_EE12_Vector_implE", !10, i64 0}
!10 = !{!"_ZTSNSt12_Vector_baseISt6vectorIiSaIiEESaIS2_EE17_Vector_impl_dataE", !11, i64 0, !11, i64 8, !11, i64 16}
!11 = !{!"any pointer", !12, i64 0}
!12 = !{!"omnipotent char", !13, i64 0}
!13 = !{!"Simple C++ TBAA"}
!14 = !{!"long", !12, i64 0}
!15 = !{!"_ZTSSt6vectorIiSaIiEE", !16, i64 0}
!16 = !{!"_ZTSSt12_Vector_baseIiSaIiEE", !17, i64 0}
!17 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE12_Vector_implE", !18, i64 0}
!18 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE17_Vector_impl_dataE", !11, i64 0, !11, i64 8, !11, i64 16}
!19 = !{!"_ZTSN5gomea7linkage18linkage_model_typeE", !12, i64 0}
!20 = !{!"bool", !12, i64 0}
!21 = !{!"int", !12, i64 0}
!22 = !{!"_ZTSSt6vectorIS_IdSaIdEESaIS1_EE", !23, i64 0}
!23 = !{!"_ZTSSt12_Vector_baseISt6vectorIdSaIdEESaIS2_EE", !24, i64 0}
!24 = !{!"_ZTSNSt12_Vector_baseISt6vectorIdSaIdEESaIS2_EE12_Vector_implE", !25, i64 0}
!25 = !{!"_ZTSNSt12_Vector_baseISt6vectorIdSaIdEESaIS2_EE17_Vector_impl_dataE", !11, i64 0, !11, i64 8, !11, i64 16}
!26 = !{!"_ZTSSt6vectorISt3setIiSt4lessIiESaIiEESaIS4_EE", !27, i64 0}
!27 = !{!"_ZTSSt12_Vector_baseISt3setIiSt4lessIiESaIiEESaIS4_EE", !28, i64 0}
!28 = !{!"_ZTSNSt12_Vector_baseISt3setIiSt4lessIiESaIiEESaIS4_EE12_Vector_implE", !29, i64 0}
!29 = !{!"_ZTSNSt12_Vector_baseISt3setIiSt4lessIiESaIiEESaIS4_EE17_Vector_impl_dataE", !11, i64 0, !11, i64 8, !11, i64 16}
!30 = distinct !{!30, !31}
!31 = !{!"llvm.loop.mustprogress"}
!32 = distinct !{!32, !31}
!33 = !{!14, !14, i64 0}
!34 = !{!35, !35, i64 0}
!35 = !{!"double", !12, i64 0}
!36 = distinct !{!36, !31}
!37 = distinct !{!37, !31}
!38 = distinct !{!38, !31}
!39 = distinct !{!39, !31}


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