; LLVM IR from buresjan/optim_lbm :: nomad/ext/sgtelib/src (Surrogate_LOWESS)

; 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::basic_ostream" = type { ptr, %"class.std::basic_ios" }
%"class.std::basic_ios" = type { %"class.std::ios_base", ptr, i8, i8, ptr, ptr, ptr, ptr }
%"class.std::ios_base" = type { ptr, i64, i64, i32, i32, i32, ptr, %"struct.std::ios_base::_Words", [8 x %"struct.std::ios_base::_Words"], i32, ptr, %"class.std::locale" }
%"struct.std::ios_base::_Words" = type { ptr, i64 }
%"class.std::locale" = type { 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.SGTELIB::Matrix" = type { ptr, %"class.std::__cxx11::basic_string", i32, i32, ptr }
%"class.SGTELIB::Surrogate" = type <{ ptr, ptr, %"class.SGTELIB::Surrogate_Parameters", i32, i32, i32, i32, i32, i32, i8, [7 x i8], ptr, ptr, ptr, ptr, %"class.std::__cxx11::list", %"class.std::map", double, %"class.std::basic_ofstream", i8, [7 x i8] }>
%"class.SGTELIB::Surrogate_Parameters" = type { ptr, i32, i32, i32, i32, i32, double, i32, double, i32, i32, i32, %"class.SGTELIB::Matrix", i32, i32, i32, double, double, double, double, %"class.SGTELIB::Matrix", i32, i32, %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", i32, i32 }
%"class.std::__cxx11::list" = type { %"class.std::__cxx11::_List_base" }
%"class.std::__cxx11::_List_base" = type { %"struct.std::__cxx11::_List_base<int, std::allocator<int>>::_List_impl" }
%"struct.std::__cxx11::_List_base<int, std::allocator<int>>::_List_impl" = type { %"struct.std::__detail::_List_node_header" }
%"struct.std::__detail::_List_node_header" = type { %"struct.std::__detail::_List_node_base", i64 }
%"struct.std::__detail::_List_node_base" = type { ptr, ptr }
%"class.std::map" = type { %"class.std::_Rb_tree" }
%"class.std::_Rb_tree" = type { %"struct.std::_Rb_tree<SGTELIB::metric_t, std::pair<const SGTELIB::metric_t, SGTELIB::Matrix>, std::_Select1st<std::pair<const SGTELIB::metric_t, SGTELIB::Matrix>>, std::less<SGTELIB::metric_t>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<SGTELIB::metric_t, std::pair<const SGTELIB::metric_t, SGTELIB::Matrix>, std::_Select1st<std::pair<const SGTELIB::metric_t, SGTELIB::Matrix>>, std::less<SGTELIB::metric_t>>::_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::basic_ofstream" = type { %"class.std::basic_ostream.base", %"class.std::basic_filebuf", %"class.std::basic_ios" }
%"class.std::basic_ostream.base" = type { ptr }
%"class.std::basic_filebuf" = type { %"class.std::basic_streambuf", %union.pthread_mutex_t, %"class.std::__basic_file", i32, %struct.__mbstate_t, %struct.__mbstate_t, %struct.__mbstate_t, ptr, i64, i8, i8, i8, i8, ptr, ptr, i8, ptr, ptr, i64, ptr, ptr }
%"class.std::basic_streambuf" = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, %"class.std::locale" }
%union.pthread_mutex_t = type { %struct.__pthread_mutex_s }
%struct.__pthread_mutex_s = type { i32, i32, i32, i32, i32, i16, i16, %struct.__pthread_internal_list }
%struct.__pthread_internal_list = type { ptr, ptr }
%"class.std::__basic_file" = type <{ ptr, i8, [7 x i8] }>
%struct.__mbstate_t = type { i32, %union.anon.6 }
%union.anon.6 = type { i32 }
%"class.SGTELIB::Surrogate_LOWESS" = type { %"class.SGTELIB::Surrogate.base", i32, i32, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, %"class.SGTELIB::Matrix" }
%"class.SGTELIB::Surrogate.base" = type <{ ptr, ptr, %"class.SGTELIB::Surrogate_Parameters", i32, i32, i32, i32, i32, i32, i8, [7 x i8], ptr, ptr, ptr, ptr, %"class.std::__cxx11::list", %"class.std::map", double, %"class.std::basic_ofstream", i8 }>

@.str.2 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [53 x i8], align 1
@_ZTIN7SGTELIB9ExceptionE = external dso_local constant { ptr, ptr, ptr }, align 8
@_ZSt4cout = external global %"class.std::basic_ostream", align 8
@.str.5 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [3 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(...)

declare void @_ZN7SGTELIB6MatrixC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEii(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 8 dereferenceable(32), i32 noundef, i32 noundef) unnamed_addr #3

; 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 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 nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #0

; Function Attrs: nobuiltin nounwind
declare void @_ZdaPv(ptr noundef) #4

; Function Attrs: nounwind
declare void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56)) unnamed_addr #5

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) #6

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare { i64, i1 } @llvm.umul.with.overflow.i64(i64, i64) #7

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znam(i64 noundef) #8

declare noundef nonnull align 8 dereferenceable(56) ptr @_ZN7SGTELIB6MatrixaSERKS0_(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 8 dereferenceable(56)) #3

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK7SGTELIB6Matrix11get_nb_rowsEv(ptr noundef nonnull align 8 dereferenceable(56)) #9 align 2

declare void @_ZN7SGTELIB6MatrixC1ERKS0_(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 8 dereferenceable(56)) unnamed_addr #3

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN7SGTELIB16Surrogate_LOWESS32predict_private_objective_singleENS_6MatrixEiPd(ptr noundef nonnull align 8 dereferenceable(1128) %0, ptr noundef %1, i32 noundef %2, ptr noundef %3) #2 align 2 personality ptr @__gxx_personality_v0 {
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca ptr, align 8
  %9 = alloca %"class.std::__cxx11::basic_string", align 8
  %10 = alloca %"class.std::allocator", align 1
  %11 = alloca ptr, align 8
  %12 = alloca i32, align 4
  %13 = alloca %"class.std::__cxx11::basic_string", align 8
  %14 = alloca %"class.std::allocator", align 1
  %15 = alloca i1, align 1
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca double, align 8
  %22 = alloca %"class.SGTELIB::Matrix", align 8
  %23 = alloca %"class.SGTELIB::Matrix", align 8
  %24 = alloca %"class.std::__cxx11::basic_string", align 8
  %25 = alloca double, align 8
  %26 = alloca %"class.SGTELIB::Matrix", align 8
  %27 = alloca %"class.SGTELIB::Matrix", align 8
  %28 = alloca double, align 8
  %29 = alloca double, align 8
  %30 = alloca %"class.SGTELIB::Matrix", align 8
  %31 = alloca %"class.SGTELIB::Matrix", align 8
  %32 = alloca %"class.std::__cxx11::basic_string", align 8
  %33 = alloca %"class.std::allocator", align 1
  %34 = alloca %"class.std::__cxx11::basic_string", align 8
  %35 = alloca %"class.std::allocator", align 1
  %36 = alloca i1, align 1
  %37 = alloca double, align 8
  %38 = alloca double, align 8
  %39 = alloca %"class.SGTELIB::Matrix", align 8
  %40 = alloca double, align 8
  %41 = alloca double, align 8
  %42 = alloca %"class.SGTELIB::Matrix", align 8
  %43 = alloca double, align 8
  %44 = alloca double, align 8
  %45 = alloca i32, align 4
  %46 = alloca double, align 8
  %47 = alloca ptr, align 8
  %48 = alloca %"class.SGTELIB::Matrix", align 8
  %49 = alloca ptr, align 8
  %50 = alloca %"class.SGTELIB::Matrix", align 8
  %51 = alloca %"class.SGTELIB::Matrix", align 8
  %52 = alloca %"class.std::__cxx11::basic_string", align 8
  %53 = alloca %"class.std::allocator", align 1
  %54 = alloca i32, align 4
  %55 = alloca i32, align 4
  %56 = alloca %"class.SGTELIB::Matrix", align 8
  %57 = alloca double, align 8
  %58 = alloca double, align 8
  %59 = alloca double, align 8
  %60 = alloca i32, align 4
  %61 = alloca double, align 8
  %62 = alloca double, align 8
  %63 = alloca i8, align 1
  %64 = alloca i8, align 1
  %65 = alloca ptr, align 8
  %66 = alloca ptr, align 8
  %67 = alloca ptr, align 8
  %68 = alloca double, align 8
  %69 = alloca double, align 8
  %70 = alloca double, align 8
  %71 = alloca double, align 8
  %72 = alloca %"class.SGTELIB::Matrix", align 8
  %73 = alloca %"class.std::__cxx11::basic_string", align 8
  %74 = alloca %"class.std::allocator", align 1
  %75 = alloca %"class.SGTELIB::Matrix", align 8
  %76 = alloca %"class.std::__cxx11::basic_string", align 8
  %77 = alloca %"class.std::allocator", align 1
  %78 = alloca %"class.SGTELIB::Matrix", align 8
  %79 = alloca i8, align 1
  %80 = alloca i32, align 4
  store ptr %0, ptr %5, align 8, !tbaa !5
  store ptr %1, ptr %6, align 8, !tbaa !5
  store i32 %2, ptr %7, align 4, !tbaa !9
  store ptr %3, ptr %8, align 8, !tbaa !5
  %81 = load ptr, ptr %5, align 8
  %82 = call noundef i32 @_ZNK7SGTELIB6Matrix11get_nb_rowsEv(ptr noundef nonnull align 8 dereferenceable(56) %1)
  %83 = icmp ne i32 %82, 1
  br i1 %83, label %84, label %106

84:                                               ; preds = %4
  store i1 true, ptr %15, align 1
  %85 = call ptr @__cxa_allocate_exception(i64 112) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr %9) #10
  call void @llvm.lifetime.start.p0(i64 1, ptr %10) #10
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %10) #10
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %9, ptr noundef @.str.3, ptr noundef nonnull align 1 dereferenceable(1) %10)
          to label %86 unwind label %89

86:                                               ; preds = %84
  call void @llvm.lifetime.start.p0(i64 32, ptr %13) #10
  call void @llvm.lifetime.start.p0(i64 1, ptr %14) #10
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %14) #10
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %13, ptr noundef @.str.4, ptr noundef nonnull align 1 dereferenceable(1) %14)
          to label %87 unwind label %93

87:                                               ; preds = %86
  invoke void @_ZN7SGTELIB9ExceptionC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiS8_(ptr noundef nonnull align 8 dereferenceable(112) %85, ptr noundef nonnull align 8 dereferenceable(32) %9, i32 noundef 808, ptr noundef nonnull align 8 dereferenceable(32) %13)
          to label %88 unwind label %97

88:                                               ; preds = %87
  store i1 false, ptr %15, align 1
  invoke void @__cxa_throw(ptr %85, ptr @_ZTIN7SGTELIB9ExceptionE, ptr @_ZN7SGTELIB9ExceptionD2Ev) #11
          to label %1560 unwind label %97

89:                                               ; preds = %84
  %90 = landingpad { ptr, i32 }
          cleanup
  %91 = extractvalue { ptr, i32 } %90, 0
  store ptr %91, ptr %11, align 8
  %92 = extractvalue { ptr, i32 } %90, 1
  store i32 %92, ptr %12, align 4
  br label %102

93:                                               ; preds = %86
  %94 = landingpad { ptr, i32 }
          cleanup
  %95 = extractvalue { ptr, i32 } %94, 0
  store ptr %95, ptr %11, align 8
  %96 = extractvalue { ptr, i32 } %94, 1
  store i32 %96, ptr %12, align 4
  br label %101

97:                                               ; preds = %88, %87
  %98 = landingpad { ptr, i32 }
          cleanup
  %99 = extractvalue { ptr, i32 } %98, 0
  store ptr %99, ptr %11, align 8
  %100 = extractvalue { ptr, i32 } %98, 1
  store i32 %100, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %13) #10
  br label %101

101:                                              ; preds = %97, %93
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %14) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %14) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %13) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #10
  br label %102

102:                                              ; preds = %101, %89
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %10) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %10) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %9) #10
  %103 = load i1, ptr %15, align 1
  br i1 %103, label %104, label %105

104:                                              ; preds = %102
  call void @__cxa_free_exception(ptr %85) #10
  br label %105

105:                                              ; preds = %104, %102
  br label %1555

106:                                              ; preds = %4
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #10
  call void @llvm.lifetime.start.p0(i64 56, ptr %22) #10
  %107 = getelementptr inbounds %"class.SGTELIB::Surrogate", ptr %81, i32 0, i32 1
  %108 = load ptr, ptr %107, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 56, ptr %23) #10
  call void @_ZN7SGTELIB9Surrogate13get_matrix_XsEv(ptr dead_on_unwind writable sret(%"class.SGTELIB::Matrix") align 8 %23, ptr noundef nonnull align 8 dereferenceable(985) %81)
  %109 = getelementptr inbounds %"class.SGTELIB::Surrogate", ptr %81, i32 0, i32 2
  %110 = invoke noundef i32 @_ZNK7SGTELIB20Surrogate_Parameters17get_distance_typeEv(ptr noundef nonnull align 8 dereferenceable(312) %109)
          to label %111 unwind label %141

111:                                              ; preds = %106
  invoke void @_ZNK7SGTELIB11TrainingSet13get_distancesERKNS_6MatrixES3_NS_10distance_tE(ptr dead_on_unwind writable sret(%"class.SGTELIB::Matrix") align 8 %22, ptr noundef nonnull align 8 dereferenceable(504) %108, ptr noundef nonnull align 8 dereferenceable(56) %1, ptr noundef nonnull align 8 dereferenceable(56) %23, i32 noundef %110)
          to label %112 unwind label %141

112:                                              ; preds = %111
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %23) #10
  call void @llvm.lifetime.end.p0(i64 56, ptr %23) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr %24) #10
  %113 = getelementptr inbounds %"class.SGTELIB::Surrogate", ptr %81, i32 0, i32 2
  invoke void @_ZNK7SGTELIB20Surrogate_Parameters10get_presetB5cxx11Ev(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %24, ptr noundef nonnull align 8 dereferenceable(312) %113)
          to label %114 unwind label %145

114:                                              ; preds = %112
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #10
  %115 = getelementptr inbounds %"class.SGTELIB::Surrogate", ptr %81, i32 0, i32 7
  %116 = load i32, ptr %115, align 8, !tbaa !48
  %117 = sitofp i32 %116 to double
  %118 = load i32, ptr %7, align 4, !tbaa !9
  %119 = icmp ne i32 %118, -1
  %120 = uitofp i1 %119 to double
  %121 = fsub double %117, %120
  store double %121, ptr %25, align 8, !tbaa !49
  call void @llvm.lifetime.start.p0(i64 56, ptr %26) #10
  invoke void @_ZN7SGTELIB6MatrixC1ERKS0_(ptr noundef nonnull align 8 dereferenceable(56) %26, ptr noundef nonnull align 8 dereferenceable(56) %22)
          to label %122 unwind label %149

122:                                              ; preds = %114
  call void @llvm.lifetime.start.p0(i64 56, ptr %27) #10
  invoke void @_ZN7SGTELIB6Matrix15hadamard_squareERKS0_(ptr dead_on_unwind writable sret(%"class.SGTELIB::Matrix") align 8 %27, ptr noundef nonnull align 8 dereferenceable(56) %26)
          to label %123 unwind label %153

123:                                              ; preds = %122
  %124 = invoke noundef nonnull align 8 dereferenceable(56) ptr @_ZN7SGTELIB6MatrixaSERKS0_(ptr noundef nonnull align 8 dereferenceable(56) %26, ptr noundef nonnull align 8 dereferenceable(56) %27)
          to label %125 unwind label %157

125:                                              ; preds = %123
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %27) #10
  call void @llvm.lifetime.end.p0(i64 56, ptr %27) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #10
  %126 = invoke noundef double @_ZNK7SGTELIB6Matrix3sumEv(ptr noundef nonnull align 8 dereferenceable(56) %26)
          to label %127 unwind label %162

127:                                              ; preds = %125
  %128 = load double, ptr %25, align 8, !tbaa !49
  %129 = fdiv double %126, %128
  store double %129, ptr %28, align 8, !tbaa !49
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #10
  call void @llvm.lifetime.start.p0(i64 56, ptr %30) #10
  call void @llvm.lifetime.start.p0(i64 56, ptr %31) #10
  %130 = load double, ptr %28, align 8, !tbaa !49
  %131 = fneg double %130
  invoke void @_ZplRKN7SGTELIB6MatrixEd(ptr dead_on_unwind writable sret(%"class.SGTELIB::Matrix") align 8 %31, ptr noundef nonnull align 8 dereferenceable(56) %26, double noundef %131)
          to label %132 unwind label %166

132:                                              ; preds = %127
  invoke void @_ZN7SGTELIB6Matrix15hadamard_squareERKS0_(ptr dead_on_unwind writable sret(%"class.SGTELIB::Matrix") align 8 %30, ptr noundef nonnull align 8 dereferenceable(56) %31)
          to label %133 unwind label %170

133:                                              ; preds = %132
  %134 = invoke noundef double @_ZNK7SGTELIB6Matrix3sumEv(ptr noundef nonnull align 8 dereferenceable(56) %30)
          to label %135 unwind label %174

135:                                              ; preds = %133
  %136 = load double, ptr %25, align 8, !tbaa !49
  %137 = fdiv double %134, %136
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %30) #10
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %31) #10
  call void @llvm.lifetime.end.p0(i64 56, ptr %31) #10
  call void @llvm.lifetime.end.p0(i64 56, ptr %30) #10
  store double %137, ptr %29, align 8, !tbaa !49
  %138 = load double, ptr %29, align 8, !tbaa !49
  %139 = fcmp oeq double %138, 0.000000e+00
  br i1 %139, label %140, label %180

140:                                              ; preds = %135
  store double 1.000000e-13, ptr %29, align 8, !tbaa !49
  br label %180

141:                                              ; preds = %111, %106
  %142 = landingpad { ptr, i32 }
          cleanup
  %143 = extractvalue { ptr, i32 } %142, 0
  store ptr %143, ptr %11, align 8
  %144 = extractvalue { ptr, i32 } %142, 1
  store i32 %144, ptr %12, align 4
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %23) #10
  call void @llvm.lifetime.end.p0(i64 56, ptr %23) #10
  br label %1554

145:                                              ; preds = %112
  %146 = landingpad { ptr, i32 }
          cleanup
  %147 = extractvalue { ptr, i32 } %146, 0
  store ptr %147, ptr %11, align 8
  %148 = extractvalue { ptr, i32 } %146, 1
  store i32 %148, ptr %12, align 4
  br label %1553

149:                                              ; preds = %114
  %150 = landingpad { ptr, i32 }
          cleanup
  %151 = extractvalue { ptr, i32 } %150, 0
  store ptr %151, ptr %11, align 8
  %152 = extractvalue { ptr, i32 } %150, 1
  store i32 %152, ptr %12, align 4
  br label %1552

153:                                              ; preds = %122
  %154 = landingpad { ptr, i32 }
          cleanup
  %155 = extractvalue { ptr, i32 } %154, 0
  store ptr %155, ptr %11, align 8
  %156 = extractvalue { ptr, i32 } %154, 1
  store i32 %156, ptr %12, align 4
  br label %161

157:                                              ; preds = %123
  %158 = landingpad { ptr, i32 }
          cleanup
  %159 = extractvalue { ptr, i32 } %158, 0
  store ptr %159, ptr %11, align 8
  %160 = extractvalue { ptr, i32 } %158, 1
  store i32 %160, ptr %12, align 4
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %27) #10
  br label %161

161:                                              ; preds = %157, %153
  call void @llvm.lifetime.end.p0(i64 56, ptr %27) #10
  br label %1551

162:                                              ; preds = %125
  %163 = landingpad { ptr, i32 }
          cleanup
  %164 = extractvalue { ptr, i32 } %163, 0
  store ptr %164, ptr %11, align 8
  %165 = extractvalue { ptr, i32 } %163, 1
  store i32 %165, ptr %12, align 4
  br label %1550

166:                                              ; preds = %127
  %167 = landingpad { ptr, i32 }
          cleanup
  %168 = extractvalue { ptr, i32 } %167, 0
  store ptr %168, ptr %11, align 8
  %169 = extractvalue { ptr, i32 } %167, 1
  store i32 %169, ptr %12, align 4
  br label %179

170:                                              ; preds = %132
  %171 = landingpad { ptr, i32 }
          cleanup
  %172 = extractvalue { ptr, i32 } %171, 0
  store ptr %172, ptr %11, align 8
  %173 = extractvalue { ptr, i32 } %171, 1
  store i32 %173, ptr %12, align 4
  br label %178

174:                                              ; preds = %133
  %175 = landingpad { ptr, i32 }
          cleanup
  %176 = extractvalue { ptr, i32 } %175, 0
  store ptr %176, ptr %11, align 8
  %177 = extractvalue { ptr, i32 } %175, 1
  store i32 %177, ptr %12, align 4
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %30) #10
  br label %178

178:                                              ; preds = %174, %170
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %31) #10
  br label %179

179:                                              ; preds = %178, %166
  call void @llvm.lifetime.end.p0(i64 56, ptr %31) #10
  call void @llvm.lifetime.end.p0(i64 56, ptr %30) #10
  br label %1549

180:                                              ; preds = %140, %135
  %181 = load double, ptr %28, align 8, !tbaa !49
  %182 = fcmp olt double %181, 0.000000e+00
  br i1 %182, label %186, label %183

183:                                              ; preds = %180
  %184 = load double, ptr %29, align 8, !tbaa !49
  %185 = fcmp olt double %184, 0.000000e+00
  br i1 %185, label %186, label %226

186:                                              ; preds = %183, %180
  %187 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.5)
          to label %188 unwind label %205

188:                                              ; preds = %186
  %189 = load double, ptr %28, align 8, !tbaa !49
  %190 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %187, double noundef %189)
          to label %191 unwind label %205

191:                                              ; preds = %188
  %192 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %190, ptr noundef @.str.2)
          to label %193 unwind label %205

193:                                              ; preds = %191
  %194 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.6)
          to label %195 unwind label %205

195:                                              ; preds = %193
  %196 = load double, ptr %29, align 8, !tbaa !49
  %197 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %194, double noundef %196)
          to label %198 unwind label %205

198:                                              ; preds = %195
  %199 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %197, ptr noundef @.str.2)
          to label %200 unwind label %205

200:                                              ; preds = %198
  store i1 true, ptr %36, align 1
  %201 = call ptr @__cxa_allocate_exception(i64 112) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr %32) #10
  call void @llvm.lifetime.start.p0(i64 1, ptr %33) #10
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %33) #10
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %32, ptr noundef @.str.3, ptr noundef nonnull align 1 dereferenceable(1) %33)
          to label %202 unwind label %209

202:                                              ; preds = %200
  call void @llvm.lifetime.start.p0(i64 32, ptr %34) #10
  call void @llvm.lifetime.start.p0(i64 1, ptr %35) #10
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %35) #10
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %34, ptr noundef @.str.7, ptr noundef nonnull align 1 dereferenceable(1) %35)
          to label %203 unwind label %213

203:                                              ; preds = %202
  invoke void @_ZN7SGTELIB9ExceptionC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiS8_(ptr noundef nonnull align 8 dereferenceable(112) %201, ptr noundef nonnull align 8 dereferenceable(32) %32, i32 noundef 852, ptr noundef nonnull align 8 dereferenceable(32) %34)
          to label %204 unwind label %217

204:                                              ; preds = %203
  store i1 false, ptr %36, align 1
  invoke void @__cxa_throw(ptr %201, ptr @_ZTIN7SGTELIB9ExceptionE, ptr @_ZN7SGTELIB9ExceptionD2Ev) #11
          to label %1560 unwind label %217

205:                                              ; preds = %198, %195, %193, %191, %188, %186
  %206 = landingpad { ptr, i32 }
          cleanup
  %207 = extractvalue { ptr, i32 } %206, 0
  store ptr %207, ptr %11, align 8
  %208 = extractvalue { ptr, i32 } %206, 1
  store i32 %208, ptr %12, align 4
  br label %1549

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

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

217:                                              ; preds = %204, %203
  %218 = landingpad { ptr, i32 }
          cleanup
  %219 = extractvalue { ptr, i32 } %218, 0
  store ptr %219, ptr %11, align 8
  %220 = extractvalue { ptr, i32 } %218, 1
  store i32 %220, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #10
  br label %221

221:                                              ; preds = %217, %213
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %35) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %35) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %34) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %32) #10
  br label %222

222:                                              ; preds = %221, %209
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %33) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %33) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %32) #10
  %223 = load i1, ptr %36, align 1
  br i1 %223, label %224, label %225

224:                                              ; preds = %222
  call void @__cxa_free_exception(ptr %201) #10
  br label %225

225:                                              ; preds = %224, %222
  br label %1549

226:                                              ; preds = %183
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #10
  %227 = load double, ptr %28, align 8, !tbaa !49
  %228 = load double, ptr %28, align 8, !tbaa !49
  %229 = fmul double %227, %228
  %230 = load double, ptr %29, align 8, !tbaa !49
  %231 = fdiv double %229, %230
  store double %231, ptr %37, align 8, !tbaa !49
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #10
  %232 = load double, ptr %29, align 8, !tbaa !49
  %233 = load double, ptr %28, align 8, !tbaa !49
  %234 = fdiv double %232, %233
  store double %234, ptr %38, align 8, !tbaa !49
  %235 = invoke noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %24, ptr noundef @.str.8)
          to label %236 unwind label %255

236:                                              ; preds = %226
  br i1 %235, label %237, label %260

237:                                              ; preds = %236
  store i32 0, ptr %16, align 4, !tbaa !9
  br label %238

238:                                              ; preds = %252, %237
  %239 = load i32, ptr %16, align 4, !tbaa !9
  %240 = getelementptr inbounds %"class.SGTELIB::Surrogate", ptr %81, i32 0, i32 7
  %241 = load i32, ptr %240, align 8, !tbaa !48
  %242 = icmp slt i32 %239, %241
  br i1 %242, label %243, label %259

243:                                              ; preds = %238
  %244 = load i32, ptr %16, align 4, !tbaa !9
  %245 = invoke noundef double @_ZNK7SGTELIB6Matrix3getEi(ptr noundef nonnull align 8 dereferenceable(56) %22, i32 noundef %244)
          to label %246 unwind label %255

246:                                              ; preds = %243
  %247 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 5
  %248 = load ptr, ptr %247, align 8, !tbaa !50
  %249 = load i32, ptr %16, align 4, !tbaa !9
  %250 = sext i32 %249 to i64
  %251 = getelementptr inbounds double, ptr %248, i64 %250
  store double %245, ptr %251, align 8, !tbaa !49
  br label %252

252:                                              ; preds = %246
  %253 = load i32, ptr %16, align 4, !tbaa !9
  %254 = add nsw i32 %253, 1
  store i32 %254, ptr %16, align 4, !tbaa !9
  br label %238, !llvm.loop !52

255:                                              ; preds = %443, %429, %426, %417, %414, %357, %354, %316, %260, %243, %226
  %256 = landingpad { ptr, i32 }
          cleanup
  %257 = extractvalue { ptr, i32 } %256, 0
  store ptr %257, ptr %11, align 8
  %258 = extractvalue { ptr, i32 } %256, 1
  store i32 %258, ptr %12, align 4
  br label %1548

259:                                              ; preds = %238
  br label %473

260:                                              ; preds = %236
  %261 = invoke noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %24, ptr noundef @.str.9)
          to label %262 unwind label %255

262:                                              ; preds = %260
  br i1 %261, label %263, label %316

263:                                              ; preds = %262
  call void @llvm.lifetime.start.p0(i64 56, ptr %39) #10
  invoke void @_ZNK7SGTELIB6Matrix4rankEv(ptr dead_on_unwind writable sret(%"class.SGTELIB::Matrix") align 8 %39, ptr noundef nonnull align 8 dereferenceable(56) %22)
          to label %264 unwind label %277

264:                                              ; preds = %263
  store i32 0, ptr %16, align 4, !tbaa !9
  br label %265

265:                                              ; preds = %274, %264
  %266 = load i32, ptr %16, align 4, !tbaa !9
  %267 = invoke noundef double @_ZNK7SGTELIB6Matrix3getEi(ptr noundef nonnull align 8 dereferenceable(56) %39, i32 noundef %266)
          to label %268 unwind label %281

268:                                              ; preds = %265
  %269 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 1
  %270 = load i32, ptr %269, align 4, !tbaa !54
  %271 = sub nsw i32 %270, 1
  %272 = sitofp i32 %271 to double
  %273 = fcmp une double %267, %272
  br i1 %273, label %274, label %285

274:                                              ; preds = %268
  %275 = load i32, ptr %16, align 4, !tbaa !9
  %276 = add nsw i32 %275, 1
  store i32 %276, ptr %16, align 4, !tbaa !9
  br label %265, !llvm.loop !55

277:                                              ; preds = %263
  %278 = landingpad { ptr, i32 }
          cleanup
  %279 = extractvalue { ptr, i32 } %278, 0
  store ptr %279, ptr %11, align 8
  %280 = extractvalue { ptr, i32 } %278, 1
  store i32 %280, ptr %12, align 4
  br label %315

281:                                              ; preds = %265
  %282 = landingpad { ptr, i32 }
          cleanup
  %283 = extractvalue { ptr, i32 } %282, 0
  store ptr %283, ptr %11, align 8
  %284 = extractvalue { ptr, i32 } %282, 1
  store i32 %284, ptr %12, align 4
  br label %314

285:                                              ; preds = %268
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #10
  %286 = load i32, ptr %16, align 4, !tbaa !9
  %287 = invoke noundef double @_ZNK7SGTELIB6Matrix3getEi(ptr noundef nonnull align 8 dereferenceable(56) %22, i32 noundef %286)
          to label %288 unwind label %309

288:                                              ; preds = %285
  %289 = fmul double 2.000000e+00, %287
  store double %289, ptr %40, align 8, !tbaa !49
  store i32 0, ptr %16, align 4, !tbaa !9
  br label %290

290:                                              ; preds = %306, %288
  %291 = load i32, ptr %16, align 4, !tbaa !9
  %292 = getelementptr inbounds %"class.SGTELIB::Surrogate", ptr %81, i32 0, i32 7
  %293 = load i32, ptr %292, align 8, !tbaa !48
  %294 = icmp slt i32 %291, %293
  br i1 %294, label %295, label %313

295:                                              ; preds = %290
  %296 = load i32, ptr %16, align 4, !tbaa !9
  %297 = invoke noundef double @_ZNK7SGTELIB6Matrix3getEi(ptr noundef nonnull align 8 dereferenceable(56) %22, i32 noundef %296)
          to label %298 unwind label %309

298:                                              ; preds = %295
  %299 = load double, ptr %40, align 8, !tbaa !49
  %300 = fdiv double %297, %299
  %301 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 5
  %302 = load ptr, ptr %301, align 8, !tbaa !50
  %303 = load i32, ptr %16, align 4, !tbaa !9
  %304 = sext i32 %303 to i64
  %305 = getelementptr inbounds double, ptr %302, i64 %304
  store double %300, ptr %305, align 8, !tbaa !49
  br label %306

306:                                              ; preds = %298
  %307 = load i32, ptr %16, align 4, !tbaa !9
  %308 = add nsw i32 %307, 1
  store i32 %308, ptr %16, align 4, !tbaa !9
  br label %290, !llvm.loop !56

309:                                              ; preds = %295, %285
  %310 = landingpad { ptr, i32 }
          cleanup
  %311 = extractvalue { ptr, i32 } %310, 0
  store ptr %311, ptr %11, align 8
  %312 = extractvalue { ptr, i32 } %310, 1
  store i32 %312, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #10
  br label %314

313:                                              ; preds = %290
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #10
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %39) #10
  call void @llvm.lifetime.end.p0(i64 56, ptr %39) #10
  br label %472

314:                                              ; preds = %309, %281
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %39) #10
  br label %315

315:                                              ; preds = %314, %277
  call void @llvm.lifetime.end.p0(i64 56, ptr %39) #10
  br label %1548

316:                                              ; preds = %262
  %317 = invoke noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %24, ptr noundef @.str.10)
          to label %318 unwind label %255

318:                                              ; preds = %316
  br i1 %317, label %319, label %354

319:                                              ; preds = %318
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #10
  %320 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 1
  %321 = load i32, ptr %320, align 4, !tbaa !54
  %322 = sitofp i32 %321 to double
  %323 = load double, ptr %25, align 8, !tbaa !49
  %324 = fdiv double %322, %323
  %325 = load double, ptr %37, align 8, !tbaa !49
  %326 = load double, ptr %38, align 8, !tbaa !49
  %327 = invoke noundef double @_ZN7SGTELIB11gammacdfinvEddd(double noundef %324, double noundef %325, double noundef %326)
          to label %328 unwind label %349

328:                                              ; preds = %319
  %329 = call double @pow(double noundef %327, double noundef 5.000000e-01) #10
  store double %329, ptr %41, align 8, !tbaa !49
  store i32 0, ptr %16, align 4, !tbaa !9
  br label %330

330:                                              ; preds = %346, %328
  %331 = load i32, ptr %16, align 4, !tbaa !9
  %332 = getelementptr inbounds %"class.SGTELIB::Surrogate", ptr %81, i32 0, i32 7
  %333 = load i32, ptr %332, align 8, !tbaa !48
  %334 = icmp slt i32 %331, %333
  br i1 %334, label %335, label %353

335:                                              ; preds = %330
  %336 = load i32, ptr %16, align 4, !tbaa !9
  %337 = invoke noundef double @_ZNK7SGTELIB6Matrix3getEi(ptr noundef nonnull align 8 dereferenceable(56) %22, i32 noundef %336)
          to label %338 unwind label %349

338:                                              ; preds = %335
  %339 = load double, ptr %41, align 8, !tbaa !49
  %340 = fdiv double %337, %339
  %341 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 5
  %342 = load ptr, ptr %341, align 8, !tbaa !50
  %343 = load i32, ptr %16, align 4, !tbaa !9
  %344 = sext i32 %343 to i64
  %345 = getelementptr inbounds double, ptr %342, i64 %344
  store double %340, ptr %345, align 8, !tbaa !49
  br label %346

346:                                              ; preds = %338
  %347 = load i32, ptr %16, align 4, !tbaa !9
  %348 = add nsw i32 %347, 1
  store i32 %348, ptr %16, align 4, !tbaa !9
  br label %330, !llvm.loop !57

349:                                              ; preds = %335, %319
  %350 = landingpad { ptr, i32 }
          cleanup
  %351 = extractvalue { ptr, i32 } %350, 0
  store ptr %351, ptr %11, align 8
  %352 = extractvalue { ptr, i32 } %350, 1
  store i32 %352, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #10
  br label %1548

353:                                              ; preds = %330
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #10
  br label %471

354:                                              ; preds = %318
  %355 = invoke noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %24, ptr noundef @.str.11)
          to label %356 unwind label %255

356:                                              ; preds = %354
  br i1 %355, label %360, label %357

357:                                              ; preds = %356
  %358 = invoke noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %24, ptr noundef @.str.12)
          to label %359 unwind label %255

359:                                              ; preds = %357
  br i1 %358, label %360, label %414

360:                                              ; preds = %359, %356
  call void @llvm.lifetime.start.p0(i64 56, ptr %42) #10
  invoke void @_ZNK7SGTELIB6Matrix4rankEv(ptr dead_on_unwind writable sret(%"class.SGTELIB::Matrix") align 8 %42, ptr noundef nonnull align 8 dereferenceable(56) %22)
          to label %361 unwind label %379

361:                                              ; preds = %360
  store i32 0, ptr %16, align 4, !tbaa !9
  br label %362

362:                                              ; preds = %376, %361
  %363 = load i32, ptr %16, align 4, !tbaa !9
  %364 = getelementptr inbounds %"class.SGTELIB::Surrogate", ptr %81, i32 0, i32 7
  %365 = load i32, ptr %364, align 8, !tbaa !48
  %366 = icmp slt i32 %363, %365
  br i1 %366, label %367, label %387

367:                                              ; preds = %362
  %368 = load i32, ptr %16, align 4, !tbaa !9
  %369 = invoke noundef double @_ZNK7SGTELIB6Matrix3getEi(ptr noundef nonnull align 8 dereferenceable(56) %42, i32 noundef %368)
          to label %370 unwind label %383

370:                                              ; preds = %367
  %371 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 5
  %372 = load ptr, ptr %371, align 8, !tbaa !50
  %373 = load i32, ptr %16, align 4, !tbaa !9
  %374 = sext i32 %373 to i64
  %375 = getelementptr inbounds double, ptr %372, i64 %374
  store double %369, ptr %375, align 8, !tbaa !49
  br label %376

376:                                              ; preds = %370
  %377 = load i32, ptr %16, align 4, !tbaa !9
  %378 = add nsw i32 %377, 1
  store i32 %378, ptr %16, align 4, !tbaa !9
  br label %362, !llvm.loop !58

379:                                              ; preds = %360
  %380 = landingpad { ptr, i32 }
          cleanup
  %381 = extractvalue { ptr, i32 } %380, 0
  store ptr %381, ptr %11, align 8
  %382 = extractvalue { ptr, i32 } %380, 1
  store i32 %382, ptr %12, align 4
  br label %413

383:                                              ; preds = %387, %367
  %384 = landingpad { ptr, i32 }
          cleanup
  %385 = extractvalue { ptr, i32 } %384, 0
  store ptr %385, ptr %11, align 8
  %386 = extractvalue { ptr, i32 } %384, 1
  store i32 %386, ptr %12, align 4
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %42) #10
  br label %413

387:                                              ; preds = %362
  %388 = invoke noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %24, ptr noundef @.str.12)
          to label %389 unwind label %383

389:                                              ; preds = %387
  br i1 %388, label %390, label %412

390:                                              ; preds = %389
  store i32 0, ptr %16, align 4, !tbaa !9
  br label %391

391:                                              ; preds = %408, %390
  %392 = load i32, ptr %16, align 4, !tbaa !9
  %393 = getelementptr inbounds %"class.SGTELIB::Surrogate", ptr %81, i32 0, i32 7
  %394 = load i32, ptr %393, align 8, !tbaa !48
  %395 = icmp slt i32 %392, %394
  br i1 %395, label %396, label %411

396:                                              ; preds = %391
  %397 = getelementptr inbounds %"class.SGTELIB::Surrogate", ptr %81, i32 0, i32 7
  %398 = load i32, ptr %397, align 8, !tbaa !48
  %399 = sitofp i32 %398 to double
  %400 = fsub double %399, 1.000000e+00
  %401 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 5
  %402 = load ptr, ptr %401, align 8, !tbaa !50
  %403 = load i32, ptr %16, align 4, !tbaa !9
  %404 = sext i32 %403 to i64
  %405 = getelementptr inbounds double, ptr %402, i64 %404
  %406 = load double, ptr %405, align 8, !tbaa !49
  %407 = fdiv double %406, %400
  store double %407, ptr %405, align 8, !tbaa !49
  br label %408

408:                                              ; preds = %396
  %409 = load i32, ptr %16, align 4, !tbaa !9
  %410 = add nsw i32 %409, 1
  store i32 %410, ptr %16, align 4, !tbaa !9
  br label %391, !llvm.loop !59

411:                                              ; preds = %391
  br label %412

412:                                              ; preds = %411, %389
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %42) #10
  call void @llvm.lifetime.end.p0(i64 56, ptr %42) #10
  br label %470

413:                                              ; preds = %383, %379
  call void @llvm.lifetime.end.p0(i64 56, ptr %42) #10
  br label %1548

414:                                              ; preds = %359
  %415 = invoke noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %24, ptr noundef @.str.13)
          to label %416 unwind label %255

416:                                              ; preds = %414
  br i1 %415, label %420, label %417

417:                                              ; preds = %416
  %418 = invoke noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %24, ptr noundef @.str.14)
          to label %419 unwind label %255

419:                                              ; preds = %417
  br i1 %418, label %420, label %469

420:                                              ; preds = %419, %416
  store i32 0, ptr %16, align 4, !tbaa !9
  br label %421

421:                                              ; preds = %440, %420
  %422 = load i32, ptr %16, align 4, !tbaa !9
  %423 = getelementptr inbounds %"class.SGTELIB::Surrogate", ptr %81, i32 0, i32 7
  %424 = load i32, ptr %423, align 8, !tbaa !48
  %425 = icmp slt i32 %422, %424
  br i1 %425, label %426, label %443

426:                                              ; preds = %421
  %427 = load i32, ptr %16, align 4, !tbaa !9
  %428 = invoke noundef double @_ZNK7SGTELIB6Matrix3getEi(ptr noundef nonnull align 8 dereferenceable(56) %22, i32 noundef %427)
          to label %429 unwind label %255

429:                                              ; preds = %426
  %430 = call double @pow(double noundef %428, double noundef 2.000000e+00) #10
  %431 = load double, ptr %37, align 8, !tbaa !49
  %432 = load double, ptr %38, align 8, !tbaa !49
  %433 = invoke noundef double @_ZN7SGTELIB8gammacdfEddd(double noundef %430, double noundef %431, double noundef %432)
          to label %434 unwind label %255

434:                                              ; preds = %429
  %435 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 5
  %436 = load ptr, ptr %435, align 8, !tbaa !50
  %437 = load i32, ptr %16, align 4, !tbaa !9
  %438 = sext i32 %437 to i64
  %439 = getelementptr inbounds double, ptr %436, i64 %438
  store double %433, ptr %439, align 8, !tbaa !49
  br label %440

440:                                              ; preds = %434
  %441 = load i32, ptr %16, align 4, !tbaa !9
  %442 = add nsw i32 %441, 1
  store i32 %442, ptr %16, align 4, !tbaa !9
  br label %421, !llvm.loop !60

443:                                              ; preds = %421
  %444 = invoke noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %24, ptr noundef @.str.13)
          to label %445 unwind label %255

445:                                              ; preds = %443
  br i1 %444, label %446, label %468

446:                                              ; preds = %445
  store i32 0, ptr %16, align 4, !tbaa !9
  br label %447

447:                                              ; preds = %464, %446
  %448 = load i32, ptr %16, align 4, !tbaa !9
  %449 = getelementptr inbounds %"class.SGTELIB::Surrogate", ptr %81, i32 0, i32 7
  %450 = load i32, ptr %449, align 8, !tbaa !48
  %451 = icmp slt i32 %448, %450
  br i1 %451, label %452, label %467

452:                                              ; preds = %447
  %453 = getelementptr inbounds %"class.SGTELIB::Surrogate", ptr %81, i32 0, i32 7
  %454 = load i32, ptr %453, align 8, !tbaa !48
  %455 = sitofp i32 %454 to double
  %456 = fsub double %455, 1.000000e+00
  %457 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 5
  %458 = load ptr, ptr %457, align 8, !tbaa !50
  %459 = load i32, ptr %16, align 4, !tbaa !9
  %460 = sext i32 %459 to i64
  %461 = getelementptr inbounds double, ptr %458, i64 %460
  %462 = load double, ptr %461, align 8, !tbaa !49
  %463 = fmul double %462, %456
  store double %463, ptr %461, align 8, !tbaa !49
  br label %464

464:                                              ; preds = %452
  %465 = load i32, ptr %16, align 4, !tbaa !9
  %466 = add nsw i32 %465, 1
  store i32 %466, ptr %16, align 4, !tbaa !9
  br label %447, !llvm.loop !61

467:                                              ; preds = %447
  br label %468

468:                                              ; preds = %467, %445
  br label %469

469:                                              ; preds = %468, %419
  br label %470

470:                                              ; preds = %469, %412
  br label %471

471:                                              ; preds = %470, %353
  br label %472

472:                                              ; preds = %471, %313
  br label %473

473:                                              ; preds = %472, %259
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #10
  %474 = load double, ptr %29, align 8, !tbaa !49
  %475 = fcmp oeq double %474, 0.000000e+00
  br i1 %475, label %476, label %495

476:                                              ; preds = %473
  store i32 0, ptr %16, align 4, !tbaa !9
  br label %477

477:                                              ; preds = %488, %476
  %478 = load i32, ptr %16, align 4, !tbaa !9
  %479 = getelementptr inbounds %"class.SGTELIB::Surrogate", ptr %81, i32 0, i32 7
  %480 = load i32, ptr %479, align 8, !tbaa !48
  %481 = icmp slt i32 %478, %480
  br i1 %481, label %482, label %491

482:                                              ; preds = %477
  %483 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 5
  %484 = load ptr, ptr %483, align 8, !tbaa !50
  %485 = load i32, ptr %16, align 4, !tbaa !9
  %486 = sext i32 %485 to i64
  %487 = getelementptr inbounds double, ptr %484, i64 %486
  store double 1.000000e+00, ptr %487, align 8, !tbaa !49
  br label %488

488:                                              ; preds = %482
  %489 = load i32, ptr %16, align 4, !tbaa !9
  %490 = add nsw i32 %489, 1
  store i32 %490, ptr %16, align 4, !tbaa !9
  br label %477, !llvm.loop !62

491:                                              ; preds = %477
  %492 = getelementptr inbounds %"class.SGTELIB::Surrogate", ptr %81, i32 0, i32 7
  %493 = load i32, ptr %492, align 8, !tbaa !48
  %494 = sitofp i32 %493 to double
  store double %494, ptr %43, align 8, !tbaa !49
  br label %544

495:                                              ; preds = %473
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #10
  %496 = getelementptr inbounds %"class.SGTELIB::Surrogate", ptr %81, i32 0, i32 2
  %497 = invoke noundef double @_ZNK7SGTELIB20Surrogate_Parameters15get_kernel_coefEv(ptr noundef nonnull align 8 dereferenceable(312) %496)
          to label %498 unwind label %534

498:                                              ; preds = %495
  store double %497, ptr %44, align 8, !tbaa !49
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #10
  %499 = getelementptr inbounds %"class.SGTELIB::Surrogate", ptr %81, i32 0, i32 2
  %500 = invoke noundef i32 @_ZNK7SGTELIB20Surrogate_Parameters15get_kernel_typeEv(ptr noundef nonnull align 8 dereferenceable(312) %499)
          to label %501 unwind label %538

501:                                              ; preds = %498
  store i32 %500, ptr %45, align 4, !tbaa !63
  store double 0.000000e+00, ptr %43, align 8, !tbaa !49
  store i32 0, ptr %16, align 4, !tbaa !9
  br label %502

502:                                              ; preds = %531, %501
  %503 = load i32, ptr %16, align 4, !tbaa !9
  %504 = getelementptr inbounds %"class.SGTELIB::Surrogate", ptr %81, i32 0, i32 7
  %505 = load i32, ptr %504, align 8, !tbaa !48
  %506 = icmp slt i32 %503, %505
  br i1 %506, label %507, label %542

507:                                              ; preds = %502
  %508 = load i32, ptr %45, align 4, !tbaa !63
  %509 = load double, ptr %44, align 8, !tbaa !49
  %510 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 5
  %511 = load ptr, ptr %510, align 8, !tbaa !50
  %512 = load i32, ptr %16, align 4, !tbaa !9
  %513 = sext i32 %512 to i64
  %514 = getelementptr inbounds double, ptr %511, i64 %513
  %515 = load double, ptr %514, align 8, !tbaa !49
  %516 = invoke noundef double @_ZN7SGTELIB6kernelENS_8kernel_tEdd(i32 noundef %508, double noundef %509, double noundef %515)
          to label %517 unwind label %538

517:                                              ; preds = %507
  %518 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 5
  %519 = load ptr, ptr %518, align 8, !tbaa !50
  %520 = load i32, ptr %16, align 4, !tbaa !9
  %521 = sext i32 %520 to i64
  %522 = getelementptr inbounds double, ptr %519, i64 %521
  store double %516, ptr %522, align 8, !tbaa !49
  %523 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 5
  %524 = load ptr, ptr %523, align 8, !tbaa !50
  %525 = load i32, ptr %16, align 4, !tbaa !9
  %526 = sext i32 %525 to i64
  %527 = getelementptr inbounds double, ptr %524, i64 %526
  %528 = load double, ptr %527, align 8, !tbaa !49
  %529 = load double, ptr %43, align 8, !tbaa !49
  %530 = fadd double %529, %528
  store double %530, ptr %43, align 8, !tbaa !49
  br label %531

531:                                              ; preds = %517
  %532 = load i32, ptr %16, align 4, !tbaa !9
  %533 = add nsw i32 %532, 1
  store i32 %533, ptr %16, align 4, !tbaa !9
  br label %502, !llvm.loop !64

534:                                              ; preds = %495
  %535 = landingpad { ptr, i32 }
          cleanup
  %536 = extractvalue { ptr, i32 } %535, 0
  store ptr %536, ptr %11, align 8
  %537 = extractvalue { ptr, i32 } %535, 1
  store i32 %537, ptr %12, align 4
  br label %543

538:                                              ; preds = %507, %498
  %539 = landingpad { ptr, i32 }
          cleanup
  %540 = extractvalue { ptr, i32 } %539, 0
  store ptr %540, ptr %11, align 8
  %541 = extractvalue { ptr, i32 } %539, 1
  store i32 %541, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #10
  br label %543

542:                                              ; preds = %502
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #10
  br label %544

543:                                              ; preds = %538, %534
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #10
  br label %1547

544:                                              ; preds = %542, %491
  %545 = load i32, ptr %7, align 4, !tbaa !9
  %546 = icmp ne i32 %545, -1
  br i1 %546, label %547, label %561

547:                                              ; preds = %544
  %548 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 5
  %549 = load ptr, ptr %548, align 8, !tbaa !50
  %550 = load i32, ptr %7, align 4, !tbaa !9
  %551 = sext i32 %550 to i64
  %552 = getelementptr inbounds double, ptr %549, i64 %551
  %553 = load double, ptr %552, align 8, !tbaa !49
  %554 = load double, ptr %43, align 8, !tbaa !49
  %555 = fsub double %554, %553
  store double %555, ptr %43, align 8, !tbaa !49
  %556 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 5
  %557 = load ptr, ptr %556, align 8, !tbaa !50
  %558 = load i32, ptr %7, align 4, !tbaa !9
  %559 = sext i32 %558 to i64
  %560 = getelementptr inbounds double, ptr %557, i64 %559
  store double 0.000000e+00, ptr %560, align 8, !tbaa !49
  br label %561

561:                                              ; preds = %547, %544
  %562 = load double, ptr %43, align 8, !tbaa !49
  %563 = fcmp ogt double %562, 1.000000e-13
  br i1 %563, label %564, label %583

564:                                              ; preds = %561
  store i32 0, ptr %16, align 4, !tbaa !9
  br label %565

565:                                              ; preds = %579, %564
  %566 = load i32, ptr %16, align 4, !tbaa !9
  %567 = getelementptr inbounds %"class.SGTELIB::Surrogate", ptr %81, i32 0, i32 7
  %568 = load i32, ptr %567, align 8, !tbaa !48
  %569 = icmp slt i32 %566, %568
  br i1 %569, label %570, label %582

570:                                              ; preds = %565
  %571 = load double, ptr %43, align 8, !tbaa !49
  %572 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 5
  %573 = load ptr, ptr %572, align 8, !tbaa !50
  %574 = load i32, ptr %16, align 4, !tbaa !9
  %575 = sext i32 %574 to i64
  %576 = getelementptr inbounds double, ptr %573, i64 %575
  %577 = load double, ptr %576, align 8, !tbaa !49
  %578 = fdiv double %577, %571
  store double %578, ptr %576, align 8, !tbaa !49
  br label %579

579:                                              ; preds = %570
  %580 = load i32, ptr %16, align 4, !tbaa !9
  %581 = add nsw i32 %580, 1
  store i32 %581, ptr %16, align 4, !tbaa !9
  br label %565, !llvm.loop !65

582:                                              ; preds = %565
  br label %599

583:                                              ; preds = %561
  store i32 0, ptr %16, align 4, !tbaa !9
  br label %584

584:                                              ; preds = %595, %583
  %585 = load i32, ptr %16, align 4, !tbaa !9
  %586 = getelementptr inbounds %"class.SGTELIB::Surrogate", ptr %81, i32 0, i32 7
  %587 = load i32, ptr %586, align 8, !tbaa !48
  %588 = icmp slt i32 %585, %587
  br i1 %588, label %589, label %598

589:                                              ; preds = %584
  %590 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 5
  %591 = load ptr, ptr %590, align 8, !tbaa !50
  %592 = load i32, ptr %16, align 4, !tbaa !9
  %593 = sext i32 %592 to i64
  %594 = getelementptr inbounds double, ptr %591, i64 %593
  store double 1.000000e+00, ptr %594, align 8, !tbaa !49
  br label %595

595:                                              ; preds = %589
  %596 = load i32, ptr %16, align 4, !tbaa !9
  %597 = add nsw i32 %596, 1
  store i32 %597, ptr %16, align 4, !tbaa !9
  br label %584, !llvm.loop !66

598:                                              ; preds = %584
  br label %599

599:                                              ; preds = %598, %582
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #10
  %600 = getelementptr inbounds %"class.SGTELIB::Surrogate", ptr %81, i32 0, i32 2
  %601 = invoke noundef double @_ZNK7SGTELIB20Surrogate_Parameters9get_ridgeEv(ptr noundef nonnull align 8 dereferenceable(312) %600)
          to label %602 unwind label %615

602:                                              ; preds = %599
  store double %601, ptr %46, align 8, !tbaa !49
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #10
  call void @llvm.lifetime.start.p0(i64 56, ptr %48) #10
  invoke void @_ZN7SGTELIB9Surrogate13get_matrix_ZsEv(ptr dead_on_unwind writable sret(%"class.SGTELIB::Matrix") align 8 %48, ptr noundef nonnull align 8 dereferenceable(985) %81)
          to label %603 unwind label %619

603:                                              ; preds = %602
  store ptr %48, ptr %47, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #10
  call void @llvm.lifetime.start.p0(i64 56, ptr %50) #10
  invoke void @_ZN7SGTELIB9Surrogate13get_matrix_XsEv(ptr dead_on_unwind writable sret(%"class.SGTELIB::Matrix") align 8 %50, ptr noundef nonnull align 8 dereferenceable(985) %81)
          to label %604 unwind label %623

604:                                              ; preds = %603
  store ptr %50, ptr %49, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 56, ptr %51) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr %52) #10
  call void @llvm.lifetime.start.p0(i64 1, ptr %53) #10
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %53) #10
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %52, ptr noundef @.str.17, ptr noundef nonnull align 1 dereferenceable(1) %53)
          to label %605 unwind label %627

605:                                              ; preds = %604
  %606 = getelementptr inbounds %"class.SGTELIB::Surrogate", ptr %81, i32 0, i32 7
  %607 = load i32, ptr %606, align 8, !tbaa !48
  invoke void @_ZN7SGTELIB6MatrixC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEii(ptr noundef nonnull align 8 dereferenceable(56) %51, ptr noundef nonnull align 8 dereferenceable(32) %52, i32 noundef %607, i32 noundef 1)
          to label %608 unwind label %631

608:                                              ; preds = %605
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %52) #10
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %53) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %53) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %52) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #10
  store i32 0, ptr %54, align 4, !tbaa !9
  br label %609

609:                                              ; preds = %663, %608
  %610 = load i32, ptr %54, align 4, !tbaa !9
  %611 = getelementptr inbounds %"class.SGTELIB::Surrogate", ptr %81, i32 0, i32 4
  %612 = load i32, ptr %611, align 4, !tbaa !67
  %613 = icmp slt i32 %610, %612
  br i1 %613, label %636, label %614

614:                                              ; preds = %609
  store i32 37, ptr %55, align 4
  br label %666

615:                                              ; preds = %599
  %616 = landingpad { ptr, i32 }
          cleanup
  %617 = extractvalue { ptr, i32 } %616, 0
  store ptr %617, ptr %11, align 8
  %618 = extractvalue { ptr, i32 } %616, 1
  store i32 %618, ptr %12, align 4
  br label %1546

619:                                              ; preds = %602
  %620 = landingpad { ptr, i32 }
          cleanup
  %621 = extractvalue { ptr, i32 } %620, 0
  store ptr %621, ptr %11, align 8
  %622 = extractvalue { ptr, i32 } %620, 1
  store i32 %622, ptr %12, align 4
  br label %1545

623:                                              ; preds = %603
  %624 = landingpad { ptr, i32 }
          cleanup
  %625 = extractvalue { ptr, i32 } %624, 0
  store ptr %625, ptr %11, align 8
  %626 = extractvalue { ptr, i32 } %624, 1
  store i32 %626, ptr %12, align 4
  br label %1544

627:                                              ; preds = %604
  %628 = landingpad { ptr, i32 }
          cleanup
  %629 = extractvalue { ptr, i32 } %628, 0
  store ptr %629, ptr %11, align 8
  %630 = extractvalue { ptr, i32 } %628, 1
  store i32 %630, ptr %12, align 4
  br label %635

631:                                              ; preds = %605
  %632 = landingpad { ptr, i32 }
          cleanup
  %633 = extractvalue { ptr, i32 } %632, 0
  store ptr %633, ptr %11, align 8
  %634 = extractvalue { ptr, i32 } %632, 1
  store i32 %634, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %52) #10
  br label %635

635:                                              ; preds = %631, %627
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %53) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %53) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %52) #10
  br label %1543

636:                                              ; preds = %609
  %637 = getelementptr inbounds %"class.SGTELIB::Surrogate", ptr %81, i32 0, i32 1
  %638 = load ptr, ptr %637, align 8, !tbaa !11
  %639 = load i32, ptr %54, align 4, !tbaa !9
  %640 = invoke noundef i32 @_ZNK7SGTELIB11TrainingSet7get_bboEi(ptr noundef nonnull align 8 dereferenceable(504) %638, i32 noundef %639)
          to label %641 unwind label %649

641:                                              ; preds = %636
  %642 = icmp eq i32 %640, 0
  br i1 %642, label %643, label %662

643:                                              ; preds = %641
  call void @llvm.lifetime.start.p0(i64 56, ptr %56) #10
  %644 = load ptr, ptr %47, align 8, !tbaa !5
  %645 = load i32, ptr %54, align 4, !tbaa !9
  invoke void @_ZNK7SGTELIB6Matrix7get_colEi(ptr dead_on_unwind writable sret(%"class.SGTELIB::Matrix") align 8 %56, ptr noundef nonnull align 8 dereferenceable(56) %644, i32 noundef %645)
          to label %646 unwind label %653

646:                                              ; preds = %643
  %647 = invoke noundef nonnull align 8 dereferenceable(56) ptr @_ZN7SGTELIB6MatrixaSERKS0_(ptr noundef nonnull align 8 dereferenceable(56) %51, ptr noundef nonnull align 8 dereferenceable(56) %56)
          to label %648 unwind label %657

648:                                              ; preds = %646
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %56) #10
  call void @llvm.lifetime.end.p0(i64 56, ptr %56) #10
  store i32 37, ptr %55, align 4
  br label %666

649:                                              ; preds = %636
  %650 = landingpad { ptr, i32 }
          cleanup
  %651 = extractvalue { ptr, i32 } %650, 0
  store ptr %651, ptr %11, align 8
  %652 = extractvalue { ptr, i32 } %650, 1
  store i32 %652, ptr %12, align 4
  br label %667

653:                                              ; preds = %643
  %654 = landingpad { ptr, i32 }
          cleanup
  %655 = extractvalue { ptr, i32 } %654, 0
  store ptr %655, ptr %11, align 8
  %656 = extractvalue { ptr, i32 } %654, 1
  store i32 %656, ptr %12, align 4
  br label %661

657:                                              ; preds = %646
  %658 = landingpad { ptr, i32 }
          cleanup
  %659 = extractvalue { ptr, i32 } %658, 0
  store ptr %659, ptr %11, align 8
  %660 = extractvalue { ptr, i32 } %658, 1
  store i32 %660, ptr %12, align 4
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %56) #10
  br label %661

661:                                              ; preds = %657, %653
  call void @llvm.lifetime.end.p0(i64 56, ptr %56) #10
  br label %667

662:                                              ; preds = %641
  br label %663

663:                                              ; preds = %662
  %664 = load i32, ptr %54, align 4, !tbaa !9
  %665 = add nsw i32 %664, 1
  store i32 %665, ptr %54, align 4, !tbaa !9
  br label %609, !llvm.loop !68

666:                                              ; preds = %648, %614
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #10
  br label %668

667:                                              ; preds = %661, %649
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #10
  br label %1542

668:                                              ; preds = %666
  call void @llvm.lifetime.start.p0(i64 8, ptr %57) #10
  store double 0.000000e+00, ptr %57, align 8, !tbaa !49
  store i32 0, ptr %16, align 4, !tbaa !9
  br label %669

669:                                              ; preds = %866, %668
  %670 = load i32, ptr %16, align 4, !tbaa !9
  %671 = getelementptr inbounds %"class.SGTELIB::Surrogate", ptr %81, i32 0, i32 7
  %672 = load i32, ptr %671, align 8, !tbaa !48
  %673 = icmp slt i32 %670, %672
  br i1 %673, label %674, label %869

674:                                              ; preds = %669
  store i32 0, ptr %20, align 4, !tbaa !9
  %675 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 4
  %676 = load ptr, ptr %675, align 8, !tbaa !69
  %677 = load i32, ptr %16, align 4, !tbaa !9
  %678 = sext i32 %677 to i64
  %679 = getelementptr inbounds ptr, ptr %676, i64 %678
  %680 = load ptr, ptr %679, align 8, !tbaa !5
  %681 = load i32, ptr %20, align 4, !tbaa !9
  %682 = add nsw i32 %681, 1
  store i32 %682, ptr %20, align 4, !tbaa !9
  %683 = sext i32 %681 to i64
  %684 = getelementptr inbounds double, ptr %680, i64 %683
  store double 1.000000e+00, ptr %684, align 8, !tbaa !49
  %685 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 5
  %686 = load ptr, ptr %685, align 8, !tbaa !50
  %687 = load i32, ptr %16, align 4, !tbaa !9
  %688 = sext i32 %687 to i64
  %689 = getelementptr inbounds double, ptr %686, i64 %688
  %690 = load double, ptr %689, align 8, !tbaa !49
  %691 = fcmp ogt double %690, 1.000000e-13
  br i1 %691, label %692, label %845

692:                                              ; preds = %674
  %693 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 3
  %694 = load i32, ptr %693, align 4, !tbaa !70
  %695 = icmp sge i32 %694, 10
  br i1 %695, label %696, label %737

696:                                              ; preds = %692
  store i32 0, ptr %17, align 4, !tbaa !9
  br label %697

697:                                              ; preds = %729, %696
  %698 = load i32, ptr %17, align 4, !tbaa !9
  %699 = getelementptr inbounds %"class.SGTELIB::Surrogate", ptr %81, i32 0, i32 3
  %700 = load i32, ptr %699, align 8, !tbaa !71
  %701 = icmp slt i32 %698, %700
  br i1 %701, label %702, label %707

702:                                              ; preds = %697
  %703 = load i32, ptr %20, align 4, !tbaa !9
  %704 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 1
  %705 = load i32, ptr %704, align 4, !tbaa !54
  %706 = icmp slt i32 %703, %705
  br label %707

707:                                              ; preds = %702, %697
  %708 = phi i1 [ false, %697 ], [ %706, %702 ]
  br i1 %708, label %709, label %736

709:                                              ; preds = %707
  %710 = load ptr, ptr %49, align 8, !tbaa !5
  %711 = load i32, ptr %16, align 4, !tbaa !9
  %712 = load i32, ptr %17, align 4, !tbaa !9
  %713 = invoke noundef double @_ZNK7SGTELIB6Matrix3getEii(ptr noundef nonnull align 8 dereferenceable(56) %710, i32 noundef %711, i32 noundef %712)
          to label %714 unwind label %732

714:                                              ; preds = %709
  %715 = load i32, ptr %17, align 4, !tbaa !9
  %716 = invoke noundef double @_ZNK7SGTELIB6Matrix3getEii(ptr noundef nonnull align 8 dereferenceable(56) %1, i32 noundef 0, i32 noundef %715)
          to label %717 unwind label %732

717:                                              ; preds = %714
  %718 = fsub double %713, %716
  %719 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 4
  %720 = load ptr, ptr %719, align 8, !tbaa !69
  %721 = load i32, ptr %16, align 4, !tbaa !9
  %722 = sext i32 %721 to i64
  %723 = getelementptr inbounds ptr, ptr %720, i64 %722
  %724 = load ptr, ptr %723, align 8, !tbaa !5
  %725 = load i32, ptr %20, align 4, !tbaa !9
  %726 = add nsw i32 %725, 1
  store i32 %726, ptr %20, align 4, !tbaa !9
  %727 = sext i32 %725 to i64
  %728 = getelementptr inbounds double, ptr %724, i64 %727
  store double %718, ptr %728, align 8, !tbaa !49
  br label %729

729:                                              ; preds = %717
  %730 = load i32, ptr %17, align 4, !tbaa !9
  %731 = add nsw i32 %730, 1
  store i32 %731, ptr %17, align 4, !tbaa !9
  br label %697, !llvm.loop !72

732:                                              ; preds = %817, %811, %767, %762, %714, %709
  %733 = landingpad { ptr, i32 }
          cleanup
  %734 = extractvalue { ptr, i32 } %733, 0
  store ptr %734, ptr %11, align 8
  %735 = extractvalue { ptr, i32 } %733, 1
  store i32 %735, ptr %12, align 4
  br label %1541

736:                                              ; preds = %707
  br label %737

737:                                              ; preds = %736, %692
  %738 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 3
  %739 = load i32, ptr %738, align 4, !tbaa !70
  %740 = icmp sge i32 %739, 15
  br i1 %740, label %741, label %844

741:                                              ; preds = %737
  store i32 0, ptr %18, align 4, !tbaa !9
  br label %742

742:                                              ; preds = %840, %741
  %743 = load i32, ptr %18, align 4, !tbaa !9
  %744 = getelementptr inbounds %"class.SGTELIB::Surrogate", ptr %81, i32 0, i32 3
  %745 = load i32, ptr %744, align 8, !tbaa !71
  %746 = icmp slt i32 %743, %745
  br i1 %746, label %747, label %752

747:                                              ; preds = %742
  %748 = load i32, ptr %20, align 4, !tbaa !9
  %749 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 1
  %750 = load i32, ptr %749, align 4, !tbaa !54
  %751 = icmp slt i32 %748, %750
  br label %752

752:                                              ; preds = %747, %742
  %753 = phi i1 [ false, %742 ], [ %751, %747 ]
  br i1 %753, label %754, label %843

754:                                              ; preds = %752
  %755 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 12
  %756 = load ptr, ptr %755, align 8, !tbaa !73
  %757 = load i32, ptr %18, align 4, !tbaa !9
  %758 = sext i32 %757 to i64
  %759 = getelementptr inbounds i8, ptr %756, i64 %758
  %760 = load i8, ptr %759, align 1, !tbaa !74, !range !75, !noundef !76
  %761 = trunc i8 %760 to i1
  br i1 %761, label %762, label %839

762:                                              ; preds = %754
  %763 = load ptr, ptr %49, align 8, !tbaa !5
  %764 = load i32, ptr %16, align 4, !tbaa !9
  %765 = load i32, ptr %18, align 4, !tbaa !9
  %766 = invoke noundef double @_ZNK7SGTELIB6Matrix3getEii(ptr noundef nonnull align 8 dereferenceable(56) %763, i32 noundef %764, i32 noundef %765)
          to label %767 unwind label %732

767:                                              ; preds = %762
  %768 = load i32, ptr %18, align 4, !tbaa !9
  %769 = invoke noundef double @_ZNK7SGTELIB6Matrix3getEii(ptr noundef nonnull align 8 dereferenceable(56) %1, i32 noundef 0, i32 noundef %768)
          to label %770 unwind label %732

770:                                              ; preds = %767
  %771 = fsub double %766, %769
  store double %771, ptr %57, align 8, !tbaa !49
  %772 = load double, ptr %57, align 8, !tbaa !49
  %773 = load double, ptr %57, align 8, !tbaa !49
  %774 = fmul double %772, %773
  %775 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 4
  %776 = load ptr, ptr %775, align 8, !tbaa !69
  %777 = load i32, ptr %16, align 4, !tbaa !9
  %778 = sext i32 %777 to i64
  %779 = getelementptr inbounds ptr, ptr %776, i64 %778
  %780 = load ptr, ptr %779, align 8, !tbaa !5
  %781 = load i32, ptr %20, align 4, !tbaa !9
  %782 = add nsw i32 %781, 1
  store i32 %782, ptr %20, align 4, !tbaa !9
  %783 = sext i32 %781 to i64
  %784 = getelementptr inbounds double, ptr %780, i64 %783
  store double %774, ptr %784, align 8, !tbaa !49
  %785 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 3
  %786 = load i32, ptr %785, align 4, !tbaa !70
  %787 = icmp sge i32 %786, 20
  br i1 %787, label %788, label %838

788:                                              ; preds = %770
  %789 = load i32, ptr %18, align 4, !tbaa !9
  %790 = add nsw i32 %789, 1
  store i32 %790, ptr %19, align 4, !tbaa !9
  br label %791

791:                                              ; preds = %834, %788
  %792 = load i32, ptr %19, align 4, !tbaa !9
  %793 = getelementptr inbounds %"class.SGTELIB::Surrogate", ptr %81, i32 0, i32 3
  %794 = load i32, ptr %793, align 8, !tbaa !71
  %795 = icmp slt i32 %792, %794
  br i1 %795, label %796, label %801

796:                                              ; preds = %791
  %797 = load i32, ptr %20, align 4, !tbaa !9
  %798 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 1
  %799 = load i32, ptr %798, align 4, !tbaa !54
  %800 = icmp slt i32 %797, %799
  br label %801

801:                                              ; preds = %796, %791
  %802 = phi i1 [ false, %791 ], [ %800, %796 ]
  br i1 %802, label %803, label %837

803:                                              ; preds = %801
  %804 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 12
  %805 = load ptr, ptr %804, align 8, !tbaa !73
  %806 = load i32, ptr %19, align 4, !tbaa !9
  %807 = sext i32 %806 to i64
  %808 = getelementptr inbounds i8, ptr %805, i64 %807
  %809 = load i8, ptr %808, align 1, !tbaa !74, !range !75, !noundef !76
  %810 = trunc i8 %809 to i1
  br i1 %810, label %811, label %833

811:                                              ; preds = %803
  %812 = load double, ptr %57, align 8, !tbaa !49
  %813 = load ptr, ptr %49, align 8, !tbaa !5
  %814 = load i32, ptr %16, align 4, !tbaa !9
  %815 = load i32, ptr %19, align 4, !tbaa !9
  %816 = invoke noundef double @_ZNK7SGTELIB6Matrix3getEii(ptr noundef nonnull align 8 dereferenceable(56) %813, i32 noundef %814, i32 noundef %815)
          to label %817 unwind label %732

817:                                              ; preds = %811
  %818 = load i32, ptr %19, align 4, !tbaa !9
  %819 = invoke noundef double @_ZNK7SGTELIB6Matrix3getEii(ptr noundef nonnull align 8 dereferenceable(56) %1, i32 noundef 0, i32 noundef %818)
          to label %820 unwind label %732

820:                                              ; preds = %817
  %821 = fsub double %816, %819
  %822 = fmul double %812, %821
  %823 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 4
  %824 = load ptr, ptr %823, align 8, !tbaa !69
  %825 = load i32, ptr %16, align 4, !tbaa !9
  %826 = sext i32 %825 to i64
  %827 = getelementptr inbounds ptr, ptr %824, i64 %826
  %828 = load ptr, ptr %827, align 8, !tbaa !5
  %829 = load i32, ptr %20, align 4, !tbaa !9
  %830 = add nsw i32 %829, 1
  store i32 %830, ptr %20, align 4, !tbaa !9
  %831 = sext i32 %829 to i64
  %832 = getelementptr inbounds double, ptr %828, i64 %831
  store double %822, ptr %832, align 8, !tbaa !49
  br label %833

833:                                              ; preds = %820, %803
  br label %834

834:                                              ; preds = %833
  %835 = load i32, ptr %19, align 4, !tbaa !9
  %836 = add nsw i32 %835, 1
  store i32 %836, ptr %19, align 4, !tbaa !9
  br label %791, !llvm.loop !77

837:                                              ; preds = %801
  br label %838

838:                                              ; preds = %837, %770
  br label %839

839:                                              ; preds = %838, %754
  br label %840

840:                                              ; preds = %839
  %841 = load i32, ptr %18, align 4, !tbaa !9
  %842 = add nsw i32 %841, 1
  store i32 %842, ptr %18, align 4, !tbaa !9
  br label %742, !llvm.loop !78

843:                                              ; preds = %752
  br label %844

844:                                              ; preds = %843, %737
  br label %865

845:                                              ; preds = %674
  store i32 1, ptr %17, align 4, !tbaa !9
  br label %846

846:                                              ; preds = %861, %845
  %847 = load i32, ptr %17, align 4, !tbaa !9
  %848 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 1
  %849 = load i32, ptr %848, align 4, !tbaa !54
  %850 = icmp slt i32 %847, %849
  br i1 %850, label %851, label %864

851:                                              ; preds = %846
  %852 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 4
  %853 = load ptr, ptr %852, align 8, !tbaa !69
  %854 = load i32, ptr %16, align 4, !tbaa !9
  %855 = sext i32 %854 to i64
  %856 = getelementptr inbounds ptr, ptr %853, i64 %855
  %857 = load ptr, ptr %856, align 8, !tbaa !5
  %858 = load i32, ptr %17, align 4, !tbaa !9
  %859 = sext i32 %858 to i64
  %860 = getelementptr inbounds double, ptr %857, i64 %859
  store double 0.000000e+00, ptr %860, align 8, !tbaa !49
  br label %861

861:                                              ; preds = %851
  %862 = load i32, ptr %17, align 4, !tbaa !9
  %863 = add nsw i32 %862, 1
  store i32 %863, ptr %17, align 4, !tbaa !9
  br label %846, !llvm.loop !79

864:                                              ; preds = %846
  br label %865

865:                                              ; preds = %864, %844
  br label %866

866:                                              ; preds = %865
  %867 = load i32, ptr %16, align 4, !tbaa !9
  %868 = add nsw i32 %867, 1
  store i32 %868, ptr %16, align 4, !tbaa !9
  br label %669, !llvm.loop !80

869:                                              ; preds = %669
  store i32 0, ptr %16, align 4, !tbaa !9
  br label %870

870:                                              ; preds = %902, %869
  %871 = load i32, ptr %16, align 4, !tbaa !9
  %872 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 1
  %873 = load i32, ptr %872, align 4, !tbaa !54
  %874 = icmp slt i32 %871, %873
  br i1 %874, label %875, label %905

875:                                              ; preds = %870
  %876 = load i32, ptr %16, align 4, !tbaa !9
  store i32 %876, ptr %17, align 4, !tbaa !9
  br label %877

877:                                              ; preds = %892, %875
  %878 = load i32, ptr %17, align 4, !tbaa !9
  %879 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 1
  %880 = load i32, ptr %879, align 4, !tbaa !54
  %881 = icmp slt i32 %878, %880
  br i1 %881, label %882, label %895

882:                                              ; preds = %877
  %883 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 6
  %884 = load ptr, ptr %883, align 8, !tbaa !81
  %885 = load i32, ptr %16, align 4, !tbaa !9
  %886 = sext i32 %885 to i64
  %887 = getelementptr inbounds ptr, ptr %884, i64 %886
  %888 = load ptr, ptr %887, align 8, !tbaa !5
  %889 = load i32, ptr %17, align 4, !tbaa !9
  %890 = sext i32 %889 to i64
  %891 = getelementptr inbounds double, ptr %888, i64 %890
  store double 0.000000e+00, ptr %891, align 8, !tbaa !49
  br label %892

892:                                              ; preds = %882
  %893 = load i32, ptr %17, align 4, !tbaa !9
  %894 = add nsw i32 %893, 1
  store i32 %894, ptr %17, align 4, !tbaa !9
  br label %877, !llvm.loop !82

895:                                              ; preds = %877
  %896 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 8
  %897 = load ptr, ptr %896, align 8, !tbaa !83
  %898 = load i32, ptr %16, align 4, !tbaa !9
  %899 = sext i32 %898 to i64
  %900 = getelementptr inbounds ptr, ptr %897, i64 %899
  %901 = load ptr, ptr %900, align 8, !tbaa !5
  store double 0.000000e+00, ptr %901, align 8, !tbaa !49
  br label %902

902:                                              ; preds = %895
  %903 = load i32, ptr %16, align 4, !tbaa !9
  %904 = add nsw i32 %903, 1
  store i32 %904, ptr %16, align 4, !tbaa !9
  br label %870, !llvm.loop !84

905:                                              ; preds = %870
  call void @llvm.lifetime.start.p0(i64 8, ptr %58) #10
  store i32 0, ptr %20, align 4, !tbaa !9
  br label %906

906:                                              ; preds = %993, %905
  %907 = load i32, ptr %20, align 4, !tbaa !9
  %908 = getelementptr inbounds %"class.SGTELIB::Surrogate", ptr %81, i32 0, i32 7
  %909 = load i32, ptr %908, align 8, !tbaa !48
  %910 = icmp slt i32 %907, %909
  br i1 %910, label %911, label %996

911:                                              ; preds = %906
  %912 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 5
  %913 = load ptr, ptr %912, align 8, !tbaa !50
  %914 = load i32, ptr %20, align 4, !tbaa !9
  %915 = sext i32 %914 to i64
  %916 = getelementptr inbounds double, ptr %913, i64 %915
  %917 = load double, ptr %916, align 8, !tbaa !49
  store double %917, ptr %58, align 8, !tbaa !49
  %918 = load double, ptr %58, align 8, !tbaa !49
  %919 = fcmp ogt double %918, 1.000000e-13
  br i1 %919, label %920, label %992

920:                                              ; preds = %911
  store i32 0, ptr %16, align 4, !tbaa !9
  br label %921

921:                                              ; preds = %984, %920
  %922 = load i32, ptr %16, align 4, !tbaa !9
  %923 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 1
  %924 = load i32, ptr %923, align 4, !tbaa !54
  %925 = icmp slt i32 %922, %924
  br i1 %925, label %926, label %991

926:                                              ; preds = %921
  %927 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 4
  %928 = load ptr, ptr %927, align 8, !tbaa !69
  %929 = load i32, ptr %20, align 4, !tbaa !9
  %930 = sext i32 %929 to i64
  %931 = getelementptr inbounds ptr, ptr %928, i64 %930
  %932 = load ptr, ptr %931, align 8, !tbaa !5
  %933 = load i32, ptr %16, align 4, !tbaa !9
  %934 = sext i32 %933 to i64
  %935 = getelementptr inbounds double, ptr %932, i64 %934
  %936 = load double, ptr %935, align 8, !tbaa !49
  %937 = load double, ptr %58, align 8, !tbaa !49
  %938 = fmul double %936, %937
  store double %938, ptr %21, align 8, !tbaa !49
  %939 = load i32, ptr %16, align 4, !tbaa !9
  store i32 %939, ptr %17, align 4, !tbaa !9
  br label %940

940:                                              ; preds = %968, %926
  %941 = load i32, ptr %17, align 4, !tbaa !9
  %942 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 1
  %943 = load i32, ptr %942, align 4, !tbaa !54
  %944 = icmp slt i32 %941, %943
  br i1 %944, label %945, label %971

945:                                              ; preds = %940
  %946 = load double, ptr %21, align 8, !tbaa !49
  %947 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 4
  %948 = load ptr, ptr %947, align 8, !tbaa !69
  %949 = load i32, ptr %20, align 4, !tbaa !9
  %950 = sext i32 %949 to i64
  %951 = getelementptr inbounds ptr, ptr %948, i64 %950
  %952 = load ptr, ptr %951, align 8, !tbaa !5
  %953 = load i32, ptr %17, align 4, !tbaa !9
  %954 = sext i32 %953 to i64
  %955 = getelementptr inbounds double, ptr %952, i64 %954
  %956 = load double, ptr %955, align 8, !tbaa !49
  %957 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 6
  %958 = load ptr, ptr %957, align 8, !tbaa !81
  %959 = load i32, ptr %16, align 4, !tbaa !9
  %960 = sext i32 %959 to i64
  %961 = getelementptr inbounds ptr, ptr %958, i64 %960
  %962 = load ptr, ptr %961, align 8, !tbaa !5
  %963 = load i32, ptr %17, align 4, !tbaa !9
  %964 = sext i32 %963 to i64
  %965 = getelementptr inbounds double, ptr %962, i64 %964
  %966 = load double, ptr %965, align 8, !tbaa !49
  %967 = call double @llvm.fmuladd.f64(double %946, double %956, double %966)
  store double %967, ptr %965, align 8, !tbaa !49
  br label %968

968:                                              ; preds = %945
  %969 = load i32, ptr %17, align 4, !tbaa !9
  %970 = add nsw i32 %969, 1
  store i32 %970, ptr %17, align 4, !tbaa !9
  br label %940, !llvm.loop !85

971:                                              ; preds = %940
  %972 = load double, ptr %21, align 8, !tbaa !49
  %973 = load i32, ptr %20, align 4, !tbaa !9
  %974 = invoke noundef double @_ZNK7SGTELIB6Matrix3getEii(ptr noundef nonnull align 8 dereferenceable(56) %51, i32 noundef %973, i32 noundef 0)
          to label %975 unwind label %987

975:                                              ; preds = %971
  %976 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 8
  %977 = load ptr, ptr %976, align 8, !tbaa !83
  %978 = load i32, ptr %16, align 4, !tbaa !9
  %979 = sext i32 %978 to i64
  %980 = getelementptr inbounds ptr, ptr %977, i64 %979
  %981 = load ptr, ptr %980, align 8, !tbaa !5
  %982 = load double, ptr %981, align 8, !tbaa !49
  %983 = call double @llvm.fmuladd.f64(double %972, double %974, double %982)
  store double %983, ptr %981, align 8, !tbaa !49
  br label %984

984:                                              ; preds = %975
  %985 = load i32, ptr %16, align 4, !tbaa !9
  %986 = add nsw i32 %985, 1
  store i32 %986, ptr %16, align 4, !tbaa !9
  br label %921, !llvm.loop !86

987:                                              ; preds = %971
  %988 = landingpad { ptr, i32 }
          cleanup
  %989 = extractvalue { ptr, i32 } %988, 0
  store ptr %989, ptr %11, align 8
  %990 = extractvalue { ptr, i32 } %988, 1
  store i32 %990, ptr %12, align 4
  br label %1540

991:                                              ; preds = %921
  br label %992

992:                                              ; preds = %991, %911
  br label %993

993:                                              ; preds = %992
  %994 = load i32, ptr %20, align 4, !tbaa !9
  %995 = add nsw i32 %994, 1
  store i32 %995, ptr %20, align 4, !tbaa !9
  br label %906, !llvm.loop !87

996:                                              ; preds = %906
  store i32 0, ptr %16, align 4, !tbaa !9
  br label %997

997:                                              ; preds = %1034, %996
  %998 = load i32, ptr %16, align 4, !tbaa !9
  %999 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 1
  %1000 = load i32, ptr %999, align 4, !tbaa !54
  %1001 = icmp slt i32 %998, %1000
  br i1 %1001, label %1002, label %1037

1002:                                             ; preds = %997
  %1003 = load i32, ptr %16, align 4, !tbaa !9
  %1004 = add nsw i32 %1003, 1
  store i32 %1004, ptr %17, align 4, !tbaa !9
  br label %1005

1005:                                             ; preds = %1030, %1002
  %1006 = load i32, ptr %17, align 4, !tbaa !9
  %1007 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 1
  %1008 = load i32, ptr %1007, align 4, !tbaa !54
  %1009 = icmp slt i32 %1006, %1008
  br i1 %1009, label %1010, label %1033

1010:                                             ; preds = %1005
  %1011 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 6
  %1012 = load ptr, ptr %1011, align 8, !tbaa !81
  %1013 = load i32, ptr %16, align 4, !tbaa !9
  %1014 = sext i32 %1013 to i64
  %1015 = getelementptr inbounds ptr, ptr %1012, i64 %1014
  %1016 = load ptr, ptr %1015, align 8, !tbaa !5
  %1017 = load i32, ptr %17, align 4, !tbaa !9
  %1018 = sext i32 %1017 to i64
  %1019 = getelementptr inbounds double, ptr %1016, i64 %1018
  %1020 = load double, ptr %1019, align 8, !tbaa !49
  %1021 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 6
  %1022 = load ptr, ptr %1021, align 8, !tbaa !81
  %1023 = load i32, ptr %17, align 4, !tbaa !9
  %1024 = sext i32 %1023 to i64
  %1025 = getelementptr inbounds ptr, ptr %1022, i64 %1024
  %1026 = load ptr, ptr %1025, align 8, !tbaa !5
  %1027 = load i32, ptr %16, align 4, !tbaa !9
  %1028 = sext i32 %1027 to i64
  %1029 = getelementptr inbounds double, ptr %1026, i64 %1028
  store double %1020, ptr %1029, align 8, !tbaa !49
  br label %1030

1030:                                             ; preds = %1010
  %1031 = load i32, ptr %17, align 4, !tbaa !9
  %1032 = add nsw i32 %1031, 1
  store i32 %1032, ptr %17, align 4, !tbaa !9
  br label %1005, !llvm.loop !88

1033:                                             ; preds = %1005
  br label %1034

1034:                                             ; preds = %1033
  %1035 = load i32, ptr %16, align 4, !tbaa !9
  %1036 = add nsw i32 %1035, 1
  store i32 %1036, ptr %16, align 4, !tbaa !9
  br label %997, !llvm.loop !89

1037:                                             ; preds = %997
  store i32 1, ptr %16, align 4, !tbaa !9
  br label %1038

1038:                                             ; preds = %1056, %1037
  %1039 = load i32, ptr %16, align 4, !tbaa !9
  %1040 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 1
  %1041 = load i32, ptr %1040, align 4, !tbaa !54
  %1042 = icmp slt i32 %1039, %1041
  br i1 %1042, label %1043, label %1059

1043:                                             ; preds = %1038
  %1044 = load double, ptr %46, align 8, !tbaa !49
  %1045 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 6
  %1046 = load ptr, ptr %1045, align 8, !tbaa !81
  %1047 = load i32, ptr %16, align 4, !tbaa !9
  %1048 = sext i32 %1047 to i64
  %1049 = getelementptr inbounds ptr, ptr %1046, i64 %1048
  %1050 = load ptr, ptr %1049, align 8, !tbaa !5
  %1051 = load i32, ptr %16, align 4, !tbaa !9
  %1052 = sext i32 %1051 to i64
  %1053 = getelementptr inbounds double, ptr %1050, i64 %1052
  %1054 = load double, ptr %1053, align 8, !tbaa !49
  %1055 = fadd double %1054, %1044
  store double %1055, ptr %1053, align 8, !tbaa !49
  br label %1056

1056:                                             ; preds = %1043
  %1057 = load i32, ptr %16, align 4, !tbaa !9
  %1058 = add nsw i32 %1057, 1
  store i32 %1058, ptr %16, align 4, !tbaa !9
  br label %1038, !llvm.loop !90

1059:                                             ; preds = %1038
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #10
  store double 0x3D719799812DEA11, ptr %59, align 8, !tbaa !49
  call void @llvm.lifetime.start.p0(i64 4, ptr %60) #10
  store i32 0, ptr %60, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #10
  store double 0.000000e+00, ptr %61, align 8, !tbaa !49
  call void @llvm.lifetime.start.p0(i64 8, ptr %62) #10
  store double -1.000000e+00, ptr %62, align 8, !tbaa !49
  store i32 0, ptr %16, align 4, !tbaa !9
  br label %1060

1060:                                             ; preds = %1098, %1059
  %1061 = load i32, ptr %16, align 4, !tbaa !9
  %1062 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 1
  %1063 = load i32, ptr %1062, align 4, !tbaa !54
  %1064 = icmp slt i32 %1061, %1063
  br i1 %1064, label %1065, label %1101

1065:                                             ; preds = %1060
  store i32 0, ptr %17, align 4, !tbaa !9
  br label %1066

1066:                                             ; preds = %1090, %1065
  %1067 = load i32, ptr %17, align 4, !tbaa !9
  %1068 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 1
  %1069 = load i32, ptr %1068, align 4, !tbaa !54
  %1070 = icmp slt i32 %1067, %1069
  br i1 %1070, label %1071, label %1093

1071:                                             ; preds = %1066
  %1072 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 6
  %1073 = load ptr, ptr %1072, align 8, !tbaa !81
  %1074 = load i32, ptr %16, align 4, !tbaa !9
  %1075 = sext i32 %1074 to i64
  %1076 = getelementptr inbounds ptr, ptr %1073, i64 %1075
  %1077 = load ptr, ptr %1076, align 8, !tbaa !5
  %1078 = load i32, ptr %17, align 4, !tbaa !9
  %1079 = sext i32 %1078 to i64
  %1080 = getelementptr inbounds double, ptr %1077, i64 %1079
  %1081 = load double, ptr %1080, align 8, !tbaa !49
  %1082 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 9
  %1083 = load ptr, ptr %1082, align 8, !tbaa !91
  %1084 = load i32, ptr %17, align 4, !tbaa !9
  %1085 = sext i32 %1084 to i64
  %1086 = getelementptr inbounds double, ptr %1083, i64 %1085
  %1087 = load double, ptr %1086, align 8, !tbaa !49
  %1088 = load double, ptr %62, align 8, !tbaa !49
  %1089 = call double @llvm.fmuladd.f64(double %1081, double %1087, double %1088)
  store double %1089, ptr %62, align 8, !tbaa !49
  br label %1090

1090:                                             ; preds = %1071
  %1091 = load i32, ptr %17, align 4, !tbaa !9
  %1092 = add nsw i32 %1091, 1
  store i32 %1092, ptr %17, align 4, !tbaa !9
  br label %1066, !llvm.loop !92

1093:                                             ; preds = %1066
  %1094 = load double, ptr %62, align 8, !tbaa !49
  %1095 = load double, ptr %62, align 8, !tbaa !49
  %1096 = load double, ptr %61, align 8, !tbaa !49
  %1097 = call double @llvm.fmuladd.f64(double %1094, double %1095, double %1096)
  store double %1097, ptr %61, align 8, !tbaa !49
  store double 0.000000e+00, ptr %62, align 8, !tbaa !49
  br label %1098

1098:                                             ; preds = %1093
  %1099 = load i32, ptr %16, align 4, !tbaa !9
  %1100 = add nsw i32 %1099, 1
  store i32 %1100, ptr %16, align 4, !tbaa !9
  br label %1060, !llvm.loop !93

1101:                                             ; preds = %1060
  %1102 = load double, ptr %61, align 8, !tbaa !49
  %1103 = call double @sqrt(double noundef %1102) #10
  store double %1103, ptr %61, align 8, !tbaa !49
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #10
  call void @llvm.lifetime.start.p0(i64 1, ptr %63) #10
  store i8 0, ptr %63, align 1, !tbaa !74
  call void @llvm.lifetime.start.p0(i64 1, ptr %64) #10
  store i8 0, ptr %64, align 1, !tbaa !74
  %1104 = load double, ptr %61, align 8, !tbaa !49
  %1105 = fcmp olt double %1104, 1.000000e-04
  br i1 %1105, label %1106, label %1107

1106:                                             ; preds = %1101
  store i8 1, ptr %64, align 1, !tbaa !74
  br label %1108

1107:                                             ; preds = %1101
  store i8 1, ptr %63, align 1, !tbaa !74
  br label %1108

1108:                                             ; preds = %1107, %1106
  %1109 = load i8, ptr %64, align 1, !tbaa !74, !range !75, !noundef !76
  %1110 = trunc i8 %1109 to i1
  br i1 %1110, label %1111, label %1401

1111:                                             ; preds = %1108
  call void @llvm.lifetime.start.p0(i64 8, ptr %65) #10
  %1112 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 1
  %1113 = load i32, ptr %1112, align 4, !tbaa !54
  %1114 = sext i32 %1113 to i64
  %1115 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %1114, i64 8)
  %1116 = extractvalue { i64, i1 } %1115, 1
  %1117 = extractvalue { i64, i1 } %1115, 0
  %1118 = select i1 %1116, i64 -1, i64 %1117
  %1119 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %1118) #12
          to label %1120 unwind label %1173

1120:                                             ; preds = %1111
  store ptr %1119, ptr %65, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %66) #10
  %1121 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 1
  %1122 = load i32, ptr %1121, align 4, !tbaa !54
  %1123 = sext i32 %1122 to i64
  %1124 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %1123, i64 8)
  %1125 = extractvalue { i64, i1 } %1124, 1
  %1126 = extractvalue { i64, i1 } %1124, 0
  %1127 = select i1 %1125, i64 -1, i64 %1126
  %1128 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %1127) #12
          to label %1129 unwind label %1177

1129:                                             ; preds = %1120
  store ptr %1128, ptr %66, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %67) #10
  %1130 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 1
  %1131 = load i32, ptr %1130, align 4, !tbaa !54
  %1132 = sext i32 %1131 to i64
  %1133 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %1132, i64 8)
  %1134 = extractvalue { i64, i1 } %1133, 1
  %1135 = extractvalue { i64, i1 } %1133, 0
  %1136 = select i1 %1134, i64 -1, i64 %1135
  %1137 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %1136) #12
          to label %1138 unwind label %1181

1138:                                             ; preds = %1129
  store ptr %1137, ptr %67, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %68) #10
  store double 0.000000e+00, ptr %68, align 8, !tbaa !49
  store double 1.000000e+00, ptr %21, align 8, !tbaa !49
  store i32 0, ptr %16, align 4, !tbaa !9
  br label %1139

1139:                                             ; preds = %1200, %1138
  %1140 = load i32, ptr %16, align 4, !tbaa !9
  %1141 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 1
  %1142 = load i32, ptr %1141, align 4, !tbaa !54
  %1143 = icmp slt i32 %1140, %1142
  br i1 %1143, label %1144, label %1203

1144:                                             ; preds = %1139
  store i32 0, ptr %17, align 4, !tbaa !9
  br label %1145

1145:                                             ; preds = %1170, %1144
  %1146 = load i32, ptr %17, align 4, !tbaa !9
  %1147 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 1
  %1148 = load i32, ptr %1147, align 4, !tbaa !54
  %1149 = icmp slt i32 %1146, %1148
  br i1 %1149, label %1150, label %1185

1150:                                             ; preds = %1145
  %1151 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 6
  %1152 = load ptr, ptr %1151, align 8, !tbaa !81
  %1153 = load i32, ptr %16, align 4, !tbaa !9
  %1154 = sext i32 %1153 to i64
  %1155 = getelementptr inbounds ptr, ptr %1152, i64 %1154
  %1156 = load ptr, ptr %1155, align 8, !tbaa !5
  %1157 = load i32, ptr %17, align 4, !tbaa !9
  %1158 = sext i32 %1157 to i64
  %1159 = getelementptr inbounds double, ptr %1156, i64 %1158
  %1160 = load double, ptr %1159, align 8, !tbaa !49
  %1161 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 9
  %1162 = load ptr, ptr %1161, align 8, !tbaa !91
  %1163 = load i32, ptr %17, align 4, !tbaa !9
  %1164 = sext i32 %1163 to i64
  %1165 = getelementptr inbounds double, ptr %1162, i64 %1164
  %1166 = load double, ptr %1165, align 8, !tbaa !49
  %1167 = load double, ptr %21, align 8, !tbaa !49
  %1168 = fneg double %1160
  %1169 = call double @llvm.fmuladd.f64(double %1168, double %1166, double %1167)
  store double %1169, ptr %21, align 8, !tbaa !49
  br label %1170

1170:                                             ; preds = %1150
  %1171 = load i32, ptr %17, align 4, !tbaa !9
  %1172 = add nsw i32 %1171, 1
  store i32 %1172, ptr %17, align 4, !tbaa !9
  br label %1145, !llvm.loop !94

1173:                                             ; preds = %1111
  %1174 = landingpad { ptr, i32 }
          cleanup
  %1175 = extractvalue { ptr, i32 } %1174, 0
  store ptr %1175, ptr %11, align 8
  %1176 = extractvalue { ptr, i32 } %1174, 1
  store i32 %1176, ptr %12, align 4
  br label %1400

1177:                                             ; preds = %1120
  %1178 = landingpad { ptr, i32 }
          cleanup
  %1179 = extractvalue { ptr, i32 } %1178, 0
  store ptr %1179, ptr %11, align 8
  %1180 = extractvalue { ptr, i32 } %1178, 1
  store i32 %1180, ptr %12, align 4
  br label %1399

1181:                                             ; preds = %1129
  %1182 = landingpad { ptr, i32 }
          cleanup
  %1183 = extractvalue { ptr, i32 } %1182, 0
  store ptr %1183, ptr %11, align 8
  %1184 = extractvalue { ptr, i32 } %1182, 1
  store i32 %1184, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #10
  br label %1399

1185:                                             ; preds = %1145
  %1186 = load double, ptr %21, align 8, !tbaa !49
  %1187 = load ptr, ptr %65, align 8, !tbaa !5
  %1188 = load i32, ptr %16, align 4, !tbaa !9
  %1189 = sext i32 %1188 to i64
  %1190 = getelementptr inbounds double, ptr %1187, i64 %1189
  store double %1186, ptr %1190, align 8, !tbaa !49
  %1191 = load double, ptr %21, align 8, !tbaa !49
  %1192 = load ptr, ptr %66, align 8, !tbaa !5
  %1193 = load i32, ptr %16, align 4, !tbaa !9
  %1194 = sext i32 %1193 to i64
  %1195 = getelementptr inbounds double, ptr %1192, i64 %1194
  store double %1191, ptr %1195, align 8, !tbaa !49
  %1196 = load double, ptr %21, align 8, !tbaa !49
  %1197 = load double, ptr %21, align 8, !tbaa !49
  %1198 = load double, ptr %68, align 8, !tbaa !49
  %1199 = call double @llvm.fmuladd.f64(double %1196, double %1197, double %1198)
  store double %1199, ptr %68, align 8, !tbaa !49
  store double 0.000000e+00, ptr %21, align 8, !tbaa !49
  br label %1200

1200:                                             ; preds = %1185
  %1201 = load i32, ptr %16, align 4, !tbaa !9
  %1202 = add nsw i32 %1201, 1
  store i32 %1202, ptr %16, align 4, !tbaa !9
  br label %1139, !llvm.loop !95

1203:                                             ; preds = %1139
  call void @llvm.lifetime.start.p0(i64 8, ptr %69) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %70) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %71) #10
  br label %1204

1204:                                             ; preds = %1383, %1203
  %1205 = load double, ptr %68, align 8, !tbaa !49
  %1206 = fcmp ogt double %1205, 0x3D719799812DEA11
  br i1 %1206, label %1207, label %1210

1207:                                             ; preds = %1204
  %1208 = load i32, ptr %60, align 4, !tbaa !9
  %1209 = icmp slt i32 %1208, 100
  br label %1210

1210:                                             ; preds = %1207, %1204
  %1211 = phi i1 [ false, %1204 ], [ %1209, %1207 ]
  br i1 %1211, label %1212, label %1386

1212:                                             ; preds = %1210
  store i32 0, ptr %16, align 4, !tbaa !9
  br label %1213

1213:                                             ; preds = %1251, %1212
  %1214 = load i32, ptr %16, align 4, !tbaa !9
  %1215 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 1
  %1216 = load i32, ptr %1215, align 4, !tbaa !54
  %1217 = icmp slt i32 %1214, %1216
  br i1 %1217, label %1218, label %1254

1218:                                             ; preds = %1213
  store double 0.000000e+00, ptr %21, align 8, !tbaa !49
  store i32 0, ptr %17, align 4, !tbaa !9
  br label %1219

1219:                                             ; preds = %1242, %1218
  %1220 = load i32, ptr %17, align 4, !tbaa !9
  %1221 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 1
  %1222 = load i32, ptr %1221, align 4, !tbaa !54
  %1223 = icmp slt i32 %1220, %1222
  br i1 %1223, label %1224, label %1245

1224:                                             ; preds = %1219
  %1225 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 6
  %1226 = load ptr, ptr %1225, align 8, !tbaa !81
  %1227 = load i32, ptr %16, align 4, !tbaa !9
  %1228 = sext i32 %1227 to i64
  %1229 = getelementptr inbounds ptr, ptr %1226, i64 %1228
  %1230 = load ptr, ptr %1229, align 8, !tbaa !5
  %1231 = load i32, ptr %17, align 4, !tbaa !9
  %1232 = sext i32 %1231 to i64
  %1233 = getelementptr inbounds double, ptr %1230, i64 %1232
  %1234 = load double, ptr %1233, align 8, !tbaa !49
  %1235 = load ptr, ptr %66, align 8, !tbaa !5
  %1236 = load i32, ptr %17, align 4, !tbaa !9
  %1237 = sext i32 %1236 to i64
  %1238 = getelementptr inbounds double, ptr %1235, i64 %1237
  %1239 = load double, ptr %1238, align 8, !tbaa !49
  %1240 = load double, ptr %21, align 8, !tbaa !49
  %1241 = call double @llvm.fmuladd.f64(double %1234, double %1239, double %1240)
  store double %1241, ptr %21, align 8, !tbaa !49
  br label %1242

1242:                                             ; preds = %1224
  %1243 = load i32, ptr %17, align 4, !tbaa !9
  %1244 = add nsw i32 %1243, 1
  store i32 %1244, ptr %17, align 4, !tbaa !9
  br label %1219, !llvm.loop !96

1245:                                             ; preds = %1219
  %1246 = load double, ptr %21, align 8, !tbaa !49
  %1247 = load ptr, ptr %67, align 8, !tbaa !5
  %1248 = load i32, ptr %16, align 4, !tbaa !9
  %1249 = sext i32 %1248 to i64
  %1250 = getelementptr inbounds double, ptr %1247, i64 %1249
  store double %1246, ptr %1250, align 8, !tbaa !49
  br label %1251

1251:                                             ; preds = %1245
  %1252 = load i32, ptr %16, align 4, !tbaa !9
  %1253 = add nsw i32 %1252, 1
  store i32 %1253, ptr %16, align 4, !tbaa !9
  br label %1213, !llvm.loop !97

1254:                                             ; preds = %1213
  store double 0.000000e+00, ptr %71, align 8, !tbaa !49
  store i32 0, ptr %16, align 4, !tbaa !9
  br label %1255

1255:                                             ; preds = %1273, %1254
  %1256 = load i32, ptr %16, align 4, !tbaa !9
  %1257 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 1
  %1258 = load i32, ptr %1257, align 4, !tbaa !54
  %1259 = icmp slt i32 %1256, %1258
  br i1 %1259, label %1260, label %1276

1260:                                             ; preds = %1255
  %1261 = load ptr, ptr %66, align 8, !tbaa !5
  %1262 = load i32, ptr %16, align 4, !tbaa !9
  %1263 = sext i32 %1262 to i64
  %1264 = getelementptr inbounds double, ptr %1261, i64 %1263
  %1265 = load double, ptr %1264, align 8, !tbaa !49
  %1266 = load ptr, ptr %67, align 8, !tbaa !5
  %1267 = load i32, ptr %16, align 4, !tbaa !9
  %1268 = sext i32 %1267 to i64
  %1269 = getelementptr inbounds double, ptr %1266, i64 %1268
  %1270 = load double, ptr %1269, align 8, !tbaa !49
  %1271 = load double, ptr %71, align 8, !tbaa !49
  %1272 = call double @llvm.fmuladd.f64(double %1265, double %1270, double %1271)
  store double %1272, ptr %71, align 8, !tbaa !49
  br label %1273

1273:                                             ; preds = %1260
  %1274 = load i32, ptr %16, align 4, !tbaa !9
  %1275 = add nsw i32 %1274, 1
  store i32 %1275, ptr %16, align 4, !tbaa !9
  br label %1255, !llvm.loop !98

1276:                                             ; preds = %1255
  %1277 = load double, ptr %68, align 8, !tbaa !49
  %1278 = load double, ptr %71, align 8, !tbaa !49
  %1279 = fdiv double %1277, %1278
  store double %1279, ptr %70, align 8, !tbaa !49
  store i32 0, ptr %16, align 4, !tbaa !9
  br label %1280

1280:                                             ; preds = %1299, %1276
  %1281 = load i32, ptr %16, align 4, !tbaa !9
  %1282 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 1
  %1283 = load i32, ptr %1282, align 4, !tbaa !54
  %1284 = icmp slt i32 %1281, %1283
  br i1 %1284, label %1285, label %1302

1285:                                             ; preds = %1280
  %1286 = load double, ptr %70, align 8, !tbaa !49
  %1287 = load ptr, ptr %66, align 8, !tbaa !5
  %1288 = load i32, ptr %16, align 4, !tbaa !9
  %1289 = sext i32 %1288 to i64
  %1290 = getelementptr inbounds double, ptr %1287, i64 %1289
  %1291 = load double, ptr %1290, align 8, !tbaa !49
  %1292 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 9
  %1293 = load ptr, ptr %1292, align 8, !tbaa !91
  %1294 = load i32, ptr %16, align 4, !tbaa !9
  %1295 = sext i32 %1294 to i64
  %1296 = getelementptr inbounds double, ptr %1293, i64 %1295
  %1297 = load double, ptr %1296, align 8, !tbaa !49
  %1298 = call double @llvm.fmuladd.f64(double %1286, double %1291, double %1297)
  store double %1298, ptr %1296, align 8, !tbaa !49
  br label %1299

1299:                                             ; preds = %1285
  %1300 = load i32, ptr %16, align 4, !tbaa !9
  %1301 = add nsw i32 %1300, 1
  store i32 %1301, ptr %16, align 4, !tbaa !9
  br label %1280, !llvm.loop !99

1302:                                             ; preds = %1280
  store i32 0, ptr %16, align 4, !tbaa !9
  br label %1303

1303:                                             ; preds = %1322, %1302
  %1304 = load i32, ptr %16, align 4, !tbaa !9
  %1305 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 1
  %1306 = load i32, ptr %1305, align 4, !tbaa !54
  %1307 = icmp slt i32 %1304, %1306
  br i1 %1307, label %1308, label %1325

1308:                                             ; preds = %1303
  %1309 = load double, ptr %70, align 8, !tbaa !49
  %1310 = load ptr, ptr %67, align 8, !tbaa !5
  %1311 = load i32, ptr %16, align 4, !tbaa !9
  %1312 = sext i32 %1311 to i64
  %1313 = getelementptr inbounds double, ptr %1310, i64 %1312
  %1314 = load double, ptr %1313, align 8, !tbaa !49
  %1315 = load ptr, ptr %65, align 8, !tbaa !5
  %1316 = load i32, ptr %16, align 4, !tbaa !9
  %1317 = sext i32 %1316 to i64
  %1318 = getelementptr inbounds double, ptr %1315, i64 %1317
  %1319 = load double, ptr %1318, align 8, !tbaa !49
  %1320 = fneg double %1309
  %1321 = call double @llvm.fmuladd.f64(double %1320, double %1314, double %1319)
  store double %1321, ptr %1318, align 8, !tbaa !49
  br label %1322

1322:                                             ; preds = %1308
  %1323 = load i32, ptr %16, align 4, !tbaa !9
  %1324 = add nsw i32 %1323, 1
  store i32 %1324, ptr %16, align 4, !tbaa !9
  br label %1303, !llvm.loop !100

1325:                                             ; preds = %1303
  %1326 = load double, ptr %68, align 8, !tbaa !49
  store double %1326, ptr %69, align 8, !tbaa !49
  store double 0.000000e+00, ptr %68, align 8, !tbaa !49
  store i32 0, ptr %16, align 4, !tbaa !9
  br label %1327

1327:                                             ; preds = %1345, %1325
  %1328 = load i32, ptr %16, align 4, !tbaa !9
  %1329 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 1
  %1330 = load i32, ptr %1329, align 4, !tbaa !54
  %1331 = icmp slt i32 %1328, %1330
  br i1 %1331, label %1332, label %1348

1332:                                             ; preds = %1327
  %1333 = load ptr, ptr %65, align 8, !tbaa !5
  %1334 = load i32, ptr %16, align 4, !tbaa !9
  %1335 = sext i32 %1334 to i64
  %1336 = getelementptr inbounds double, ptr %1333, i64 %1335
  %1337 = load double, ptr %1336, align 8, !tbaa !49
  %1338 = load ptr, ptr %65, align 8, !tbaa !5
  %1339 = load i32, ptr %16, align 4, !tbaa !9
  %1340 = sext i32 %1339 to i64
  %1341 = getelementptr inbounds double, ptr %1338, i64 %1340
  %1342 = load double, ptr %1341, align 8, !tbaa !49
  %1343 = load double, ptr %68, align 8, !tbaa !49
  %1344 = call double @llvm.fmuladd.f64(double %1337, double %1342, double %1343)
  store double %1344, ptr %68, align 8, !tbaa !49
  br label %1345

1345:                                             ; preds = %1332
  %1346 = load i32, ptr %16, align 4, !tbaa !9
  %1347 = add nsw i32 %1346, 1
  store i32 %1347, ptr %16, align 4, !tbaa !9
  br label %1327, !llvm.loop !101

1348:                                             ; preds = %1327
  %1349 = load double, ptr %68, align 8, !tbaa !49
  %1350 = fcmp ole double %1349, 0x3D719799812DEA11
  br i1 %1350, label %1351, label %1352

1351:                                             ; preds = %1348
  br label %1386

1352:                                             ; preds = %1348
  %1353 = load double, ptr %68, align 8, !tbaa !49
  %1354 = load double, ptr %69, align 8, !tbaa !49
  %1355 = fdiv double %1353, %1354
  store double %1355, ptr %21, align 8, !tbaa !49
  store i32 0, ptr %16, align 4, !tbaa !9
  br label %1356

1356:                                             ; preds = %1380, %1352
  %1357 = load i32, ptr %16, align 4, !tbaa !9
  %1358 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 1
  %1359 = load i32, ptr %1358, align 4, !tbaa !54
  %1360 = icmp slt i32 %1357, %1359
  br i1 %1360, label %1361, label %1383

1361:                                             ; preds = %1356
  %1362 = load double, ptr %21, align 8, !tbaa !49
  %1363 = load ptr, ptr %66, align 8, !tbaa !5
  %1364 = load i32, ptr %16, align 4, !tbaa !9
  %1365 = sext i32 %1364 to i64
  %1366 = getelementptr inbounds double, ptr %1363, i64 %1365
  %1367 = load double, ptr %1366, align 8, !tbaa !49
  %1368 = fmul double %1367, %1362
  store double %1368, ptr %1366, align 8, !tbaa !49
  %1369 = load ptr, ptr %65, align 8, !tbaa !5
  %1370 = load i32, ptr %16, align 4, !tbaa !9
  %1371 = sext i32 %1370 to i64
  %1372 = getelementptr inbounds double, ptr %1369, i64 %1371
  %1373 = load double, ptr %1372, align 8, !tbaa !49
  %1374 = load ptr, ptr %66, align 8, !tbaa !5
  %1375 = load i32, ptr %16, align 4, !tbaa !9
  %1376 = sext i32 %1375 to i64
  %1377 = getelementptr inbounds double, ptr %1374, i64 %1376
  %1378 = load double, ptr %1377, align 8, !tbaa !49
  %1379 = fadd double %1378, %1373
  store double %1379, ptr %1377, align 8, !tbaa !49
  br label %1380

1380:                                             ; preds = %1361
  %1381 = load i32, ptr %16, align 4, !tbaa !9
  %1382 = add nsw i32 %1381, 1
  store i32 %1382, ptr %16, align 4, !tbaa !9
  br label %1356, !llvm.loop !102

1383:                                             ; preds = %1356
  %1384 = load i32, ptr %60, align 4, !tbaa !9
  %1385 = add nsw i32 %1384, 1
  store i32 %1385, ptr %60, align 4, !tbaa !9
  br label %1204, !llvm.loop !103

1386:                                             ; preds = %1351, %1210
  %1387 = load ptr, ptr %65, align 8, !tbaa !5
  %1388 = icmp eq ptr %1387, null
  br i1 %1388, label %1390, label %1389

1389:                                             ; preds = %1386
  call void @_ZdaPv(ptr noundef %1387) #13
  br label %1390

1390:                                             ; preds = %1389, %1386
  %1391 = load ptr, ptr %66, align 8, !tbaa !5
  %1392 = icmp eq ptr %1391, null
  br i1 %1392, label %1394, label %1393

1393:                                             ; preds = %1390
  call void @_ZdaPv(ptr noundef %1391) #13
  br label %1394

1394:                                             ; preds = %1393, %1390
  %1395 = load ptr, ptr %67, align 8, !tbaa !5
  %1396 = icmp eq ptr %1395, null
  br i1 %1396, label %1398, label %1397

1397:                                             ; preds = %1394
  call void @_ZdaPv(ptr noundef %1395) #13
  br label %1398

1398:                                             ; preds = %1397, %1394
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #10
  br label %1401

1399:                                             ; preds = %1181, %1177
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #10
  br label %1400

1400:                                             ; preds = %1399, %1173
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #10
  br label %1539

1401:                                             ; preds = %1398, %1108
  %1402 = load i8, ptr %63, align 1, !tbaa !74, !range !75, !noundef !76
  %1403 = trunc i8 %1402 to i1
  br i1 %1403, label %1404, label %1471

1404:                                             ; preds = %1401
  call void @llvm.lifetime.start.p0(i64 56, ptr %72) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr %73) #10
  call void @llvm.lifetime.start.p0(i64 1, ptr %74) #10
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %74) #10
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %73, ptr noundef @.str.15, ptr noundef nonnull align 1 dereferenceable(1) %74)
          to label %1405 unwind label %1436

1405:                                             ; preds = %1404
  %1406 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 1
  %1407 = load i32, ptr %1406, align 4, !tbaa !54
  %1408 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 1
  %1409 = load i32, ptr %1408, align 4, !tbaa !54
  %1410 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 6
  %1411 = load ptr, ptr %1410, align 8, !tbaa !81
  invoke void @_ZN7SGTELIB6MatrixC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiiPPd(ptr noundef nonnull align 8 dereferenceable(56) %72, ptr noundef nonnull align 8 dereferenceable(32) %73, i32 noundef %1407, i32 noundef %1409, ptr noundef %1411)
          to label %1412 unwind label %1440

1412:                                             ; preds = %1405
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %73) #10
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %74) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %74) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %73) #10
  call void @llvm.lifetime.start.p0(i64 56, ptr %75) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr %76) #10
  call void @llvm.lifetime.start.p0(i64 1, ptr %77) #10
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %77) #10
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %76, ptr noundef @.str.16, ptr noundef nonnull align 1 dereferenceable(1) %77)
          to label %1413 unwind label %1445

1413:                                             ; preds = %1412
  %1414 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 1
  %1415 = load i32, ptr %1414, align 4, !tbaa !54
  invoke void @_ZN7SGTELIB6MatrixC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEii(ptr noundef nonnull align 8 dereferenceable(56) %75, ptr noundef nonnull align 8 dereferenceable(32) %76, i32 noundef %1415, i32 noundef 1)
          to label %1416 unwind label %1449

1416:                                             ; preds = %1413
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %76) #10
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %77) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %77) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %76) #10
  invoke void @_ZN7SGTELIB6Matrix3setEiid(ptr noundef nonnull align 8 dereferenceable(56) %75, i32 noundef 0, i32 noundef 0, double noundef 1.000000e+00)
          to label %1417 unwind label %1454

1417:                                             ; preds = %1416
  call void @llvm.lifetime.start.p0(i64 56, ptr %78) #10
  invoke void @_ZN7SGTELIB6Matrix14cholesky_solveERKS0_S2_(ptr dead_on_unwind writable sret(%"class.SGTELIB::Matrix") align 8 %78, ptr noundef nonnull align 8 dereferenceable(56) %72, ptr noundef nonnull align 8 dereferenceable(56) %75)
          to label %1418 unwind label %1458

1418:                                             ; preds = %1417
  store i32 0, ptr %16, align 4, !tbaa !9
  br label %1419

1419:                                             ; preds = %1433, %1418
  %1420 = load i32, ptr %16, align 4, !tbaa !9
  %1421 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 1
  %1422 = load i32, ptr %1421, align 4, !tbaa !54
  %1423 = icmp slt i32 %1420, %1422
  br i1 %1423, label %1424, label %1466

1424:                                             ; preds = %1419
  %1425 = load i32, ptr %16, align 4, !tbaa !9
  %1426 = invoke noundef double @_ZNK7SGTELIB6Matrix3getEii(ptr noundef nonnull align 8 dereferenceable(56) %78, i32 noundef %1425, i32 noundef 0)
          to label %1427 unwind label %1462

1427:                                             ; preds = %1424
  %1428 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 9
  %1429 = load ptr, ptr %1428, align 8, !tbaa !91
  %1430 = load i32, ptr %16, align 4, !tbaa !9
  %1431 = sext i32 %1430 to i64
  %1432 = getelementptr inbounds double, ptr %1429, i64 %1431
  store double %1426, ptr %1432, align 8, !tbaa !49
  br label %1433

1433:                                             ; preds = %1427
  %1434 = load i32, ptr %16, align 4, !tbaa !9
  %1435 = add nsw i32 %1434, 1
  store i32 %1435, ptr %16, align 4, !tbaa !9
  br label %1419, !llvm.loop !104

1436:                                             ; preds = %1404
  %1437 = landingpad { ptr, i32 }
          cleanup
  %1438 = extractvalue { ptr, i32 } %1437, 0
  store ptr %1438, ptr %11, align 8
  %1439 = extractvalue { ptr, i32 } %1437, 1
  store i32 %1439, ptr %12, align 4
  br label %1444

1440:                                             ; preds = %1405
  %1441 = landingpad { ptr, i32 }
          cleanup
  %1442 = extractvalue { ptr, i32 } %1441, 0
  store ptr %1442, ptr %11, align 8
  %1443 = extractvalue { ptr, i32 } %1441, 1
  store i32 %1443, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %73) #10
  br label %1444

1444:                                             ; preds = %1440, %1436
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %74) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %74) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %73) #10
  br label %1470

1445:                                             ; preds = %1412
  %1446 = landingpad { ptr, i32 }
          cleanup
  %1447 = extractvalue { ptr, i32 } %1446, 0
  store ptr %1447, ptr %11, align 8
  %1448 = extractvalue { ptr, i32 } %1446, 1
  store i32 %1448, ptr %12, align 4
  br label %1453

1449:                                             ; preds = %1413
  %1450 = landingpad { ptr, i32 }
          cleanup
  %1451 = extractvalue { ptr, i32 } %1450, 0
  store ptr %1451, ptr %11, align 8
  %1452 = extractvalue { ptr, i32 } %1450, 1
  store i32 %1452, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %76) #10
  br label %1453

1453:                                             ; preds = %1449, %1445
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %77) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %77) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %76) #10
  br label %1469

1454:                                             ; preds = %1416
  %1455 = landingpad { ptr, i32 }
          cleanup
  %1456 = extractvalue { ptr, i32 } %1455, 0
  store ptr %1456, ptr %11, align 8
  %1457 = extractvalue { ptr, i32 } %1455, 1
  store i32 %1457, ptr %12, align 4
  br label %1468

1458:                                             ; preds = %1417
  %1459 = landingpad { ptr, i32 }
          cleanup
  %1460 = extractvalue { ptr, i32 } %1459, 0
  store ptr %1460, ptr %11, align 8
  %1461 = extractvalue { ptr, i32 } %1459, 1
  store i32 %1461, ptr %12, align 4
  br label %1467

1462:                                             ; preds = %1424
  %1463 = landingpad { ptr, i32 }
          cleanup
  %1464 = extractvalue { ptr, i32 } %1463, 0
  store ptr %1464, ptr %11, align 8
  %1465 = extractvalue { ptr, i32 } %1463, 1
  store i32 %1465, ptr %12, align 4
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %78) #10
  br label %1467

1466:                                             ; preds = %1419
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %78) #10
  call void @llvm.lifetime.end.p0(i64 56, ptr %78) #10
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %75) #10
  call void @llvm.lifetime.end.p0(i64 56, ptr %75) #10
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %72) #10
  call void @llvm.lifetime.end.p0(i64 56, ptr %72) #10
  br label %1471

1467:                                             ; preds = %1462, %1458
  call void @llvm.lifetime.end.p0(i64 56, ptr %78) #10
  br label %1468

1468:                                             ; preds = %1467, %1454
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %75) #10
  br label %1469

1469:                                             ; preds = %1468, %1453
  call void @llvm.lifetime.end.p0(i64 56, ptr %75) #10
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %72) #10
  br label %1470

1470:                                             ; preds = %1469, %1444
  call void @llvm.lifetime.end.p0(i64 56, ptr %72) #10
  br label %1539

1471:                                             ; preds = %1466, %1401
  call void @llvm.lifetime.start.p0(i64 1, ptr %79) #10
  store i8 0, ptr %79, align 1, !tbaa !74
  store i32 0, ptr %20, align 4, !tbaa !9
  br label %1472

1472:                                             ; preds = %1492, %1471
  %1473 = load i32, ptr %20, align 4, !tbaa !9
  %1474 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 1
  %1475 = load i32, ptr %1474, align 4, !tbaa !54
  %1476 = icmp slt i32 %1473, %1475
  br i1 %1476, label %1477, label %1495

1477:                                             ; preds = %1472
  %1478 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 9
  %1479 = load ptr, ptr %1478, align 8, !tbaa !91
  %1480 = load i32, ptr %20, align 4, !tbaa !9
  %1481 = sext i32 %1480 to i64
  %1482 = getelementptr inbounds double, ptr %1479, i64 %1481
  %1483 = load double, ptr %1482, align 8, !tbaa !49
  %1484 = invoke noundef zeroext i1 @_ZN7SGTELIB5isdefEd(double noundef %1483)
          to label %1485 unwind label %1487

1485:                                             ; preds = %1477
  br i1 %1484, label %1491, label %1486

1486:                                             ; preds = %1485
  store i8 1, ptr %79, align 1, !tbaa !74
  br label %1495

1487:                                             ; preds = %1477
  %1488 = landingpad { ptr, i32 }
          cleanup
  %1489 = extractvalue { ptr, i32 } %1488, 0
  store ptr %1489, ptr %11, align 8
  %1490 = extractvalue { ptr, i32 } %1488, 1
  store i32 %1490, ptr %12, align 4
  br label %1538

1491:                                             ; preds = %1485
  br label %1492

1492:                                             ; preds = %1491
  %1493 = load i32, ptr %20, align 4, !tbaa !9
  %1494 = add nsw i32 %1493, 1
  store i32 %1494, ptr %20, align 4, !tbaa !9
  br label %1472, !llvm.loop !105

1495:                                             ; preds = %1486, %1472
  %1496 = load i8, ptr %79, align 1, !tbaa !74, !range !75, !noundef !76
  %1497 = trunc i8 %1496 to i1
  br i1 %1497, label %1498, label %1509

1498:                                             ; preds = %1495
  call void @llvm.lifetime.start.p0(i64 4, ptr %80) #10
  %1499 = invoke noundef i32 @_ZN7SGTELIB6Matrix13get_min_indexEv(ptr noundef nonnull align 8 dereferenceable(56) %22)
          to label %1500 unwind label %1505

1500:                                             ; preds = %1498
  store i32 %1499, ptr %80, align 4, !tbaa !9
  %1501 = load i32, ptr %80, align 4, !tbaa !9
  %1502 = invoke noundef double @_ZNK7SGTELIB6Matrix3getEii(ptr noundef nonnull align 8 dereferenceable(56) %51, i32 noundef %1501, i32 noundef 0)
          to label %1503 unwind label %1505

1503:                                             ; preds = %1500
  %1504 = load ptr, ptr %8, align 8, !tbaa !5
  store double %1502, ptr %1504, align 8, !tbaa !49
  call void @llvm.lifetime.end.p0(i64 4, ptr %80) #10
  br label %1537

1505:                                             ; preds = %1500, %1498
  %1506 = landingpad { ptr, i32 }
          cleanup
  %1507 = extractvalue { ptr, i32 } %1506, 0
  store ptr %1507, ptr %11, align 8
  %1508 = extractvalue { ptr, i32 } %1506, 1
  store i32 %1508, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %80) #10
  br label %1538

1509:                                             ; preds = %1495
  store double 0.000000e+00, ptr %21, align 8, !tbaa !49
  store i32 0, ptr %20, align 4, !tbaa !9
  br label %1510

1510:                                             ; preds = %1531, %1509
  %1511 = load i32, ptr %20, align 4, !tbaa !9
  %1512 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 1
  %1513 = load i32, ptr %1512, align 4, !tbaa !54
  %1514 = icmp slt i32 %1511, %1513
  br i1 %1514, label %1515, label %1534

1515:                                             ; preds = %1510
  %1516 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 9
  %1517 = load ptr, ptr %1516, align 8, !tbaa !91
  %1518 = load i32, ptr %20, align 4, !tbaa !9
  %1519 = sext i32 %1518 to i64
  %1520 = getelementptr inbounds double, ptr %1517, i64 %1519
  %1521 = load double, ptr %1520, align 8, !tbaa !49
  %1522 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %81, i32 0, i32 8
  %1523 = load ptr, ptr %1522, align 8, !tbaa !83
  %1524 = load i32, ptr %20, align 4, !tbaa !9
  %1525 = sext i32 %1524 to i64
  %1526 = getelementptr inbounds ptr, ptr %1523, i64 %1525
  %1527 = load ptr, ptr %1526, align 8, !tbaa !5
  %1528 = load double, ptr %1527, align 8, !tbaa !49
  %1529 = load double, ptr %21, align 8, !tbaa !49
  %1530 = call double @llvm.fmuladd.f64(double %1521, double %1528, double %1529)
  store double %1530, ptr %21, align 8, !tbaa !49
  br label %1531

1531:                                             ; preds = %1515
  %1532 = load i32, ptr %20, align 4, !tbaa !9
  %1533 = add nsw i32 %1532, 1
  store i32 %1533, ptr %20, align 4, !tbaa !9
  br label %1510, !llvm.loop !106

1534:                                             ; preds = %1510
  %1535 = load double, ptr %21, align 8, !tbaa !49
  %1536 = load ptr, ptr %8, align 8, !tbaa !5
  store double %1535, ptr %1536, align 8, !tbaa !49
  br label %1537

1537:                                             ; preds = %1534, %1503
  call void @llvm.lifetime.end.p0(i64 1, ptr %79) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %64) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %63) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #10
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %51) #10
  call void @llvm.lifetime.end.p0(i64 56, ptr %51) #10
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %50) #10
  call void @llvm.lifetime.end.p0(i64 56, ptr %50) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #10
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %48) #10
  call void @llvm.lifetime.end.p0(i64 56, ptr %48) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #10
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %26) #10
  call void @llvm.lifetime.end.p0(i64 56, ptr %26) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %24) #10
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %22) #10
  call void @llvm.lifetime.end.p0(i64 56, ptr %22) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #10
  ret void

1538:                                             ; preds = %1505, %1487
  call void @llvm.lifetime.end.p0(i64 1, ptr %79) #10
  br label %1539

1539:                                             ; preds = %1538, %1470, %1400
  call void @llvm.lifetime.end.p0(i64 1, ptr %64) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %63) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #10
  br label %1540

1540:                                             ; preds = %1539, %987
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #10
  br label %1541

1541:                                             ; preds = %1540, %732
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #10
  br label %1542

1542:                                             ; preds = %1541, %667
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %51) #10
  br label %1543

1543:                                             ; preds = %1542, %635
  call void @llvm.lifetime.end.p0(i64 56, ptr %51) #10
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %50) #10
  call void @llvm.lifetime.end.p0(i64 56, ptr %50) #10
  br label %1544

1544:                                             ; preds = %1543, %623
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #10
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %48) #10
  call void @llvm.lifetime.end.p0(i64 56, ptr %48) #10
  br label %1545

1545:                                             ; preds = %1544, %619
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #10
  br label %1546

1546:                                             ; preds = %1545, %615
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #10
  br label %1547

1547:                                             ; preds = %1546, %543
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #10
  br label %1548

1548:                                             ; preds = %1547, %413, %349, %315, %255
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #10
  br label %1549

1549:                                             ; preds = %1548, %225, %205, %179
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #10
  br label %1550

1550:                                             ; preds = %1549, %162
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #10
  br label %1551

1551:                                             ; preds = %1550, %161
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %26) #10
  br label %1552

1552:                                             ; preds = %1551, %149
  call void @llvm.lifetime.end.p0(i64 56, ptr %26) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #10
  br label %1553

1553:                                             ; preds = %1552, %145
  call void @llvm.lifetime.end.p0(i64 32, ptr %24) #10
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %22) #10
  br label %1554

1554:                                             ; preds = %1553, %141
  call void @llvm.lifetime.end.p0(i64 56, ptr %22) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #10
  br label %1555

1555:                                             ; preds = %1554, %105
  %1556 = load ptr, ptr %11, align 8
  %1557 = load i32, ptr %12, align 4
  %1558 = insertvalue { ptr, i32 } poison, ptr %1556, 0
  %1559 = insertvalue { ptr, i32 } %1558, i32 %1557, 1
  resume { ptr, i32 } %1559

1560:                                             ; preds = %204, %88
  unreachable
}

declare void @_ZN7SGTELIB6Matrix3setEiid(ptr noundef nonnull align 8 dereferenceable(56), i32 noundef, i32 noundef, double noundef) #3

declare ptr @__cxa_allocate_exception(i64)

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN7SGTELIB9ExceptionC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiS8_(ptr noundef nonnull align 8 dereferenceable(112), ptr noundef nonnull align 8 dereferenceable(32), i32 noundef, ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #2 align 2

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

declare void @__cxa_throw(ptr, ptr, ptr)

declare void @__cxa_free_exception(ptr)

declare void @_ZNK7SGTELIB11TrainingSet13get_distancesERKNS_6MatrixES3_NS_10distance_tE(ptr dead_on_unwind writable sret(%"class.SGTELIB::Matrix") align 8, ptr noundef nonnull align 8 dereferenceable(504), ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 8 dereferenceable(56), i32 noundef) #3

declare void @_ZN7SGTELIB9Surrogate13get_matrix_XsEv(ptr dead_on_unwind writable sret(%"class.SGTELIB::Matrix") align 8, ptr noundef nonnull align 8 dereferenceable(985)) #3

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

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

declare void @_ZN7SGTELIB6Matrix15hadamard_squareERKS0_(ptr dead_on_unwind writable sret(%"class.SGTELIB::Matrix") align 8, ptr noundef nonnull align 8 dereferenceable(56)) #3

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

declare void @_ZplRKN7SGTELIB6MatrixEd(ptr dead_on_unwind writable sret(%"class.SGTELIB::Matrix") align 8, ptr noundef nonnull align 8 dereferenceable(56), double noundef) #3

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef) #9

declare noundef double @_ZNK7SGTELIB6Matrix3getEi(ptr noundef nonnull align 8 dereferenceable(56), i32 noundef) #3

declare void @_ZNK7SGTELIB6Matrix4rankEv(ptr dead_on_unwind writable sret(%"class.SGTELIB::Matrix") align 8, ptr noundef nonnull align 8 dereferenceable(56)) #3

; Function Attrs: nounwind
declare double @pow(double noundef, double noundef) #5

declare noundef double @_ZN7SGTELIB11gammacdfinvEddd(double noundef, double noundef, double noundef) #3

declare noundef double @_ZN7SGTELIB8gammacdfEddd(double noundef, double noundef, double noundef) #3

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

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

declare noundef double @_ZN7SGTELIB6kernelENS_8kernel_tEdd(i32 noundef, double noundef, double noundef) #3

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

declare void @_ZN7SGTELIB9Surrogate13get_matrix_ZsEv(ptr dead_on_unwind writable sret(%"class.SGTELIB::Matrix") align 8, ptr noundef nonnull align 8 dereferenceable(985)) #3

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef double @_ZNK7SGTELIB6Matrix3getEii(ptr noundef nonnull align 8 dereferenceable(56), i32 noundef, i32 noundef) #9 align 2

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

; Function Attrs: nounwind
declare double @sqrt(double noundef) #5

declare void @_ZN7SGTELIB6MatrixC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiiPPd(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 8 dereferenceable(32), i32 noundef, i32 noundef, ptr noundef) unnamed_addr #3

declare void @_ZN7SGTELIB6Matrix14cholesky_solveERKS0_S2_(ptr dead_on_unwind writable sret(%"class.SGTELIB::Matrix") align 8, ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 8 dereferenceable(56)) #3

declare noundef zeroext i1 @_ZN7SGTELIB5isdefEd(double noundef) #3

declare noundef i32 @_ZN7SGTELIB6Matrix13get_min_indexEv(ptr noundef nonnull align 8 dereferenceable(56)) #3

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

declare void @_ZNK7SGTELIB6Matrix7get_colEi(ptr dead_on_unwind writable sret(%"class.SGTELIB::Matrix") align 8, ptr noundef nonnull align 8 dereferenceable(56), i32 noundef) #3

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 = { nobuiltin 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 "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #8 = { nobuiltin allocsize(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 #9 = { 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 #10 = { nounwind }
attributes #11 = { noreturn }
attributes #12 = { builtin allocsize(0) }
attributes #13 = { builtin 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 = !{!"int", !7, i64 0}
!11 = !{!12, !6, i64 8}
!12 = !{!"_ZTSN7SGTELIB9SurrogateE", !6, i64 8, !13, i64 16, !10, i64 328, !10, i64 332, !10, i64 336, !10, i64 340, !10, i64 344, !10, i64 348, !26, i64 352, !6, i64 360, !6, i64 368, !6, i64 376, !6, i64 384, !27, i64 392, !32, i64 416, !17, i64 464, !40, i64 472, !26, i64 984}
!13 = !{!"_ZTSN7SGTELIB20Surrogate_ParametersE", !14, i64 8, !10, i64 12, !15, i64 16, !16, i64 20, !15, i64 24, !17, i64 32, !15, i64 40, !17, i64 48, !15, i64 56, !18, i64 60, !15, i64 64, !19, i64 72, !23, i64 128, !15, i64 132, !24, i64 136, !17, i64 144, !17, i64 152, !17, i64 160, !17, i64 168, !19, i64 176, !15, i64 232, !25, i64 236, !20, i64 240, !20, i64 272, !10, i64 304, !10, i64 308}
!14 = !{!"_ZTSN7SGTELIB7model_tE", !7, i64 0}
!15 = !{!"_ZTSN7SGTELIB14param_status_tE", !7, i64 0}
!16 = !{!"_ZTSN7SGTELIB8kernel_tE", !7, i64 0}
!17 = !{!"double", !7, i64 0}
!18 = !{!"_ZTSN7SGTELIB10distance_tE", !7, i64 0}
!19 = !{!"_ZTSN7SGTELIB6MatrixE", !20, i64 8, !10, i64 40, !10, i64 44, !6, i64 48}
!20 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !21, i64 0, !22, i64 8, !7, i64 16}
!21 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !6, i64 0}
!22 = !{!"long", !7, i64 0}
!23 = !{!"_ZTSN7SGTELIB8weight_tE", !7, i64 0}
!24 = !{!"_ZTSN7SGTELIB13uncertainty_tE", !7, i64 0}
!25 = !{!"_ZTSN7SGTELIB8metric_tE", !7, i64 0}
!26 = !{!"bool", !7, i64 0}
!27 = !{!"_ZTSNSt7__cxx114listIiSaIiEEE", !28, i64 0}
!28 = !{!"_ZTSNSt7__cxx1110_List_baseIiSaIiEEE", !29, i64 0}
!29 = !{!"_ZTSNSt7__cxx1110_List_baseIiSaIiEE10_List_implE", !30, i64 0}
!30 = !{!"_ZTSNSt8__detail17_List_node_headerE", !31, i64 0, !22, i64 16}
!31 = !{!"_ZTSNSt8__detail15_List_node_baseE", !6, i64 0, !6, i64 8}
!32 = !{!"_ZTSSt3mapIN7SGTELIB8metric_tENS0_6MatrixESt4lessIS1_ESaISt4pairIKS1_S2_EEE", !33, i64 0}
!33 = !{!"_ZTSSt8_Rb_treeIN7SGTELIB8metric_tESt4pairIKS1_NS0_6MatrixEESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE", !34, i64 0}
!34 = !{!"_ZTSNSt8_Rb_treeIN7SGTELIB8metric_tESt4pairIKS1_NS0_6MatrixEESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE13_Rb_tree_implIS9_Lb1EEE", !35, i64 0, !37, i64 8}
!35 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessIN7SGTELIB8metric_tEEE", !36, i64 0}
!36 = !{!"_ZTSSt4lessIN7SGTELIB8metric_tEE"}
!37 = !{!"_ZTSSt15_Rb_tree_header", !38, i64 0, !22, i64 32}
!38 = !{!"_ZTSSt18_Rb_tree_node_base", !39, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!39 = !{!"_ZTSSt14_Rb_tree_color", !7, i64 0}
!40 = !{!"_ZTSSt14basic_ofstreamIcSt11char_traitsIcEE", !41, i64 0, !42, i64 8}
!41 = !{!"_ZTSSo"}
!42 = !{!"_ZTSSt13basic_filebufIcSt11char_traitsIcEE", !43, i64 0, !7, i64 64, !45, i64 104, !46, i64 120, !47, i64 124, !47, i64 132, !47, i64 140, !6, i64 152, !22, i64 160, !26, i64 168, !26, i64 169, !26, i64 170, !7, i64 171, !6, i64 176, !6, i64 184, !26, i64 192, !6, i64 200, !6, i64 208, !22, i64 216, !6, i64 224, !6, i64 232}
!43 = !{!"_ZTSSt15basic_streambufIcSt11char_traitsIcEE", !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !44, i64 56}
!44 = !{!"_ZTSSt6locale", !6, i64 0}
!45 = !{!"_ZTSSt12__basic_fileIcE", !6, i64 0, !26, i64 8}
!46 = !{!"_ZTSSt13_Ios_Openmode", !7, i64 0}
!47 = !{!"_ZTS11__mbstate_t", !10, i64 0, !7, i64 4}
!48 = !{!12, !10, i64 344}
!49 = !{!17, !17, i64 0}
!50 = !{!51, !6, i64 1008}
!51 = !{!"_ZTSN7SGTELIB16Surrogate_LOWESSE", !12, i64 0, !10, i64 988, !10, i64 992, !10, i64 996, !6, i64 1000, !6, i64 1008, !6, i64 1016, !6, i64 1024, !6, i64 1032, !6, i64 1040, !6, i64 1048, !6, i64 1056, !6, i64 1064, !19, i64 1072}
!52 = distinct !{!52, !53}
!53 = !{!"llvm.loop.mustprogress"}
!54 = !{!51, !10, i64 988}
!55 = distinct !{!55, !53}
!56 = distinct !{!56, !53}
!57 = distinct !{!57, !53}
!58 = distinct !{!58, !53}
!59 = distinct !{!59, !53}
!60 = distinct !{!60, !53}
!61 = distinct !{!61, !53}
!62 = distinct !{!62, !53}
!63 = !{!16, !16, i64 0}
!64 = distinct !{!64, !53}
!65 = distinct !{!65, !53}
!66 = distinct !{!66, !53}
!67 = !{!12, !10, i64 332}
!68 = distinct !{!68, !53}
!69 = !{!51, !6, i64 1000}
!70 = !{!51, !10, i64 996}
!71 = !{!12, !10, i64 328}
!72 = distinct !{!72, !53}
!73 = !{!51, !6, i64 1064}
!74 = !{!26, !26, i64 0}
!75 = !{i8 0, i8 2}
!76 = !{}
!77 = distinct !{!77, !53}
!78 = distinct !{!78, !53}
!79 = distinct !{!79, !53}
!80 = distinct !{!80, !53}
!81 = !{!51, !6, i64 1016}
!82 = distinct !{!82, !53}
!83 = !{!51, !6, i64 1032}
!84 = distinct !{!84, !53}
!85 = distinct !{!85, !53}
!86 = distinct !{!86, !53}
!87 = distinct !{!87, !53}
!88 = distinct !{!88, !53}
!89 = distinct !{!89, !53}
!90 = distinct !{!90, !53}
!91 = !{!51, !6, i64 1040}
!92 = distinct !{!92, !53}
!93 = distinct !{!93, !53}
!94 = distinct !{!94, !53}
!95 = distinct !{!95, !53}
!96 = distinct !{!96, !53}
!97 = distinct !{!97, !53}
!98 = distinct !{!98, !53}
!99 = distinct !{!99, !53}
!100 = distinct !{!100, !53}
!101 = distinct !{!101, !53}
!102 = distinct !{!102, !53}
!103 = distinct !{!103, !53}
!104 = distinct !{!104, !53}
!105 = distinct !{!105, !53}
!106 = distinct !{!106, !53}


; 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::basic_ostream" = type { ptr, %"class.std::basic_ios" }
%"class.std::basic_ios" = type { %"class.std::ios_base", ptr, i8, i8, ptr, ptr, ptr, ptr }
%"class.std::ios_base" = type { ptr, i64, i64, i32, i32, i32, ptr, %"struct.std::ios_base::_Words", [8 x %"struct.std::ios_base::_Words"], i32, ptr, %"class.std::locale" }
%"struct.std::ios_base::_Words" = type { ptr, i64 }
%"class.std::locale" = type { 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.SGTELIB::Matrix" = type { ptr, %"class.std::__cxx11::basic_string", i32, i32, ptr }

@.str.2 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [53 x i8], align 1
@_ZTIN7SGTELIB9ExceptionE = external dso_local constant { ptr, ptr, ptr }, align 8
@_ZSt4cout = external global %"class.std::basic_ostream", align 8
@.str.5 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [3 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(...)

declare void @_ZN7SGTELIB6MatrixC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEii(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 8 dereferenceable(32), i32 noundef, i32 noundef) unnamed_addr #3

; 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 nounwind uwtable
declare dso_local void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1)) 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: nobuiltin nounwind
declare void @_ZdaPv(ptr noundef) local_unnamed_addr #4

; Function Attrs: nounwind
declare void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56)) unnamed_addr #5

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) local_unnamed_addr #6

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znam(i64 noundef) local_unnamed_addr #7

declare noundef nonnull align 8 dereferenceable(56) ptr @_ZN7SGTELIB6MatrixaSERKS0_(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 8 dereferenceable(56)) local_unnamed_addr #3

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

declare void @_ZN7SGTELIB6MatrixC1ERKS0_(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 8 dereferenceable(56)) unnamed_addr #3

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN7SGTELIB16Surrogate_LOWESS32predict_private_objective_singleENS_6MatrixEiPd(ptr noundef nonnull align 8 dereferenceable(1128) %0, ptr noundef nonnull %1, i32 noundef %2, ptr nocapture noundef writeonly %3) local_unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %5 = alloca %"class.std::__cxx11::basic_string", align 8
  %6 = alloca %"class.std::allocator", align 1
  %7 = alloca %"class.std::__cxx11::basic_string", align 8
  %8 = alloca %"class.std::allocator", align 1
  %9 = alloca %"class.SGTELIB::Matrix", align 8
  %10 = alloca %"class.SGTELIB::Matrix", align 8
  %11 = alloca %"class.std::__cxx11::basic_string", align 8
  %12 = alloca %"class.SGTELIB::Matrix", align 8
  %13 = alloca %"class.SGTELIB::Matrix", align 8
  %14 = alloca %"class.SGTELIB::Matrix", align 8
  %15 = alloca %"class.SGTELIB::Matrix", align 8
  %16 = alloca %"class.std::__cxx11::basic_string", align 8
  %17 = alloca %"class.std::allocator", align 1
  %18 = alloca %"class.std::__cxx11::basic_string", align 8
  %19 = alloca %"class.std::allocator", align 1
  %20 = alloca %"class.SGTELIB::Matrix", align 8
  %21 = alloca %"class.SGTELIB::Matrix", align 8
  %22 = alloca %"class.SGTELIB::Matrix", align 8
  %23 = alloca %"class.SGTELIB::Matrix", align 8
  %24 = alloca %"class.SGTELIB::Matrix", align 8
  %25 = alloca %"class.std::__cxx11::basic_string", align 8
  %26 = alloca %"class.std::allocator", align 1
  %27 = alloca %"class.SGTELIB::Matrix", align 8
  %28 = alloca %"class.SGTELIB::Matrix", align 8
  %29 = alloca %"class.std::__cxx11::basic_string", align 8
  %30 = alloca %"class.std::allocator", align 1
  %31 = alloca %"class.SGTELIB::Matrix", align 8
  %32 = alloca %"class.std::__cxx11::basic_string", align 8
  %33 = alloca %"class.std::allocator", align 1
  %34 = alloca %"class.SGTELIB::Matrix", align 8
  %35 = tail call noundef i32 @_ZNK7SGTELIB6Matrix11get_nb_rowsEv(ptr noundef nonnull align 8 dereferenceable(56) %1)
  %.not = icmp eq i32 %35, 1
  br i1 %.not, label %48, label %36

36:                                               ; preds = %4
  %37 = tail call ptr @__cxa_allocate_exception(i64 112) #13
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %5) #13
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %6) #13
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %6) #13
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %5, ptr noundef nonnull @.str.3, ptr noundef nonnull align 1 dereferenceable(1) %6)
          to label %38 unwind label %.thread

38:                                               ; preds = %36
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %7) #13
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %8) #13
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %8) #13
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef nonnull @.str.4, ptr noundef nonnull align 1 dereferenceable(1) %8)
          to label %39 unwind label %42

39:                                               ; preds = %38
  invoke void @_ZN7SGTELIB9ExceptionC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiS8_(ptr noundef nonnull align 8 dereferenceable(112) %37, ptr noundef nonnull align 8 dereferenceable(32) %5, i32 noundef 808, ptr noundef nonnull align 8 dereferenceable(32) %7)
          to label %40 unwind label %44

40:                                               ; preds = %39
  invoke void @__cxa_throw(ptr nonnull %37, ptr nonnull @_ZTIN7SGTELIB9ExceptionE, ptr nonnull @_ZN7SGTELIB9ExceptionD2Ev) #14
          to label %941 unwind label %44

.thread:                                          ; preds = %36
  %41 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %6) #13
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %6) #13
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %5) #13
  br label %47

42:                                               ; preds = %38
  %43 = landingpad { ptr, i32 }
          cleanup
  br label %46

44:                                               ; preds = %40, %39
  %.0318 = phi i1 [ false, %40 ], [ true, %39 ]
  %45 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #13
  br label %46

46:                                               ; preds = %42, %44
  %.1319 = phi i1 [ %.0318, %44 ], [ true, %42 ]
  %.pn438 = phi { ptr, i32 } [ %45, %44 ], [ %43, %42 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %8) #13
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %8) #13
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %7) #13
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %5) #13
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %6) #13
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %6) #13
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %5) #13
  br i1 %.1319, label %47, label %940

47:                                               ; preds = %.thread, %46
  %.pn438.pn453 = phi { ptr, i32 } [ %41, %.thread ], [ %.pn438, %46 ]
  call void @__cxa_free_exception(ptr %37) #13
  br label %940

48:                                               ; preds = %4
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %9) #13
  %49 = getelementptr inbounds i8, ptr %0, i64 8
  %50 = load ptr, ptr %49, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %10) #13
  call void @_ZN7SGTELIB9Surrogate13get_matrix_XsEv(ptr dead_on_unwind nonnull writable sret(%"class.SGTELIB::Matrix") align 8 %10, ptr noundef nonnull align 8 dereferenceable(985) %0)
  %51 = getelementptr inbounds i8, ptr %0, i64 16
  %52 = call noundef i32 @_ZNK7SGTELIB20Surrogate_Parameters17get_distance_typeEv(ptr noundef nonnull align 8 dereferenceable(312) %51)
  invoke void @_ZNK7SGTELIB11TrainingSet13get_distancesERKNS_6MatrixES3_NS_10distance_tE(ptr dead_on_unwind nonnull writable sret(%"class.SGTELIB::Matrix") align 8 %9, ptr noundef nonnull align 8 dereferenceable(504) %50, ptr noundef nonnull align 8 dereferenceable(56) %1, ptr noundef nonnull align 8 dereferenceable(56) %10, i32 noundef %52)
          to label %53 unwind label %77

53:                                               ; preds = %48
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %10) #13
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %10) #13
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %11) #13
  invoke void @_ZNK7SGTELIB20Surrogate_Parameters10get_presetB5cxx11Ev(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %11, ptr noundef nonnull align 8 dereferenceable(312) %51)
          to label %54 unwind label %79

54:                                               ; preds = %53
  %55 = getelementptr inbounds i8, ptr %0, i64 344
  %56 = load i32, ptr %55, align 8, !tbaa !46
  %57 = sitofp i32 %56 to double
  %58 = icmp ne i32 %2, -1
  %59 = uitofp i1 %58 to double
  %60 = fsub double %57, %59
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %12) #13
  invoke void @_ZN7SGTELIB6MatrixC1ERKS0_(ptr noundef nonnull align 8 dereferenceable(56) %12, ptr noundef nonnull align 8 dereferenceable(56) %9)
          to label %61 unwind label %81

61:                                               ; preds = %54
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %13) #13
  invoke void @_ZN7SGTELIB6Matrix15hadamard_squareERKS0_(ptr dead_on_unwind nonnull writable sret(%"class.SGTELIB::Matrix") align 8 %13, ptr noundef nonnull align 8 dereferenceable(56) %12)
          to label %62 unwind label %83

62:                                               ; preds = %61
  %63 = invoke noundef nonnull align 8 dereferenceable(56) ptr @_ZN7SGTELIB6MatrixaSERKS0_(ptr noundef nonnull align 8 dereferenceable(56) %12, ptr noundef nonnull align 8 dereferenceable(56) %13)
          to label %64 unwind label %85

64:                                               ; preds = %62
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %13) #13
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %13) #13
  %65 = invoke noundef double @_ZNK7SGTELIB6Matrix3sumEv(ptr noundef nonnull align 8 dereferenceable(56) %12)
          to label %66 unwind label %88

66:                                               ; preds = %64
  %67 = fdiv double %65, %60
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %14) #13
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %15) #13
  %68 = fneg double %67
  invoke void @_ZplRKN7SGTELIB6MatrixEd(ptr dead_on_unwind nonnull writable sret(%"class.SGTELIB::Matrix") align 8 %15, ptr noundef nonnull align 8 dereferenceable(56) %12, double noundef %68)
          to label %69 unwind label %90

69:                                               ; preds = %66
  invoke void @_ZN7SGTELIB6Matrix15hadamard_squareERKS0_(ptr dead_on_unwind nonnull writable sret(%"class.SGTELIB::Matrix") align 8 %14, ptr noundef nonnull align 8 dereferenceable(56) %15)
          to label %70 unwind label %92

70:                                               ; preds = %69
  %71 = invoke noundef double @_ZNK7SGTELIB6Matrix3sumEv(ptr noundef nonnull align 8 dereferenceable(56) %14)
          to label %72 unwind label %94

72:                                               ; preds = %70
  %73 = fdiv double %71, %60
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %14) #13
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %15) #13
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %15) #13
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %14) #13
  %74 = fcmp oeq double %73, 0.000000e+00
  %.0380 = select i1 %74, double 1.000000e-13, double %73
  %75 = fcmp olt double %67, 0.000000e+00
  %76 = fcmp olt double %.0380, 0.000000e+00
  %or.cond = select i1 %75, i1 true, i1 %76
  br i1 %or.cond, label %98, label %124

77:                                               ; preds = %48
  %78 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %10) #13
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %10) #13
  br label %939

79:                                               ; preds = %53
  %80 = landingpad { ptr, i32 }
          cleanup
  br label %938

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

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

85:                                               ; preds = %62
  %86 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %13) #13
  br label %87

87:                                               ; preds = %85, %83
  %.pn = phi { ptr, i32 } [ %86, %85 ], [ %84, %83 ]
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %13) #13
  br label %936

88:                                               ; preds = %64
  %89 = landingpad { ptr, i32 }
          cleanup
  br label %936

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

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

94:                                               ; preds = %70
  %95 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %14) #13
  br label %96

96:                                               ; preds = %94, %92
  %.pn395 = phi { ptr, i32 } [ %95, %94 ], [ %93, %92 ]
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %15) #13
  br label %97

97:                                               ; preds = %96, %90
  %.pn395.pn = phi { ptr, i32 } [ %.pn395, %96 ], [ %91, %90 ]
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %15) #13
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %14) #13
  br label %936

98:                                               ; preds = %72
  %99 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.5)
          to label %100 unwind label %115

100:                                              ; preds = %98
  %101 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %99, double noundef %67)
          to label %102 unwind label %115

102:                                              ; preds = %100
  %103 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %101, ptr noundef nonnull @.str.2)
          to label %104 unwind label %115

104:                                              ; preds = %102
  %105 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.6)
          to label %106 unwind label %115

106:                                              ; preds = %104
  %107 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %105, double noundef %.0380)
          to label %108 unwind label %115

108:                                              ; preds = %106
  %109 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %107, ptr noundef nonnull @.str.2)
          to label %110 unwind label %115

110:                                              ; preds = %108
  %111 = call ptr @__cxa_allocate_exception(i64 112) #13
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %16) #13
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %17) #13
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %17) #13
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef nonnull @.str.3, ptr noundef nonnull align 1 dereferenceable(1) %17)
          to label %112 unwind label %.thread454

112:                                              ; preds = %110
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %18) #13
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %19) #13
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %19) #13
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %18, ptr noundef nonnull @.str.7, ptr noundef nonnull align 1 dereferenceable(1) %19)
          to label %113 unwind label %118

113:                                              ; preds = %112
  invoke void @_ZN7SGTELIB9ExceptionC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiS8_(ptr noundef nonnull align 8 dereferenceable(112) %111, ptr noundef nonnull align 8 dereferenceable(32) %16, i32 noundef 852, ptr noundef nonnull align 8 dereferenceable(32) %18)
          to label %114 unwind label %120

114:                                              ; preds = %113
  invoke void @__cxa_throw(ptr nonnull %111, ptr nonnull @_ZTIN7SGTELIB9ExceptionE, ptr nonnull @_ZN7SGTELIB9ExceptionD2Ev) #14
          to label %941 unwind label %120

115:                                              ; preds = %108, %106, %104, %102, %100, %98
  %116 = landingpad { ptr, i32 }
          cleanup
  br label %936

.thread454:                                       ; preds = %110
  %117 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %17) #13
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %17) #13
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %16) #13
  br label %123

118:                                              ; preds = %112
  %119 = landingpad { ptr, i32 }
          cleanup
  br label %122

120:                                              ; preds = %114, %113
  %.0381 = phi i1 [ false, %114 ], [ true, %113 ]
  %121 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #13
  br label %122

122:                                              ; preds = %118, %120
  %.1382 = phi i1 [ %.0381, %120 ], [ true, %118 ]
  %.pn429 = phi { ptr, i32 } [ %121, %120 ], [ %119, %118 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %19) #13
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %19) #13
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #13
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #13
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %17) #13
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %17) #13
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %16) #13
  br i1 %.1382, label %123, label %936

123:                                              ; preds = %.thread454, %122
  %.pn429.pn457 = phi { ptr, i32 } [ %117, %.thread454 ], [ %.pn429, %122 ]
  call void @__cxa_free_exception(ptr %111) #13
  br label %936

124:                                              ; preds = %72
  %125 = fmul double %67, %67
  %126 = fdiv double %125, %.0380
  %127 = fdiv double %.0380, %67
  %128 = call noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %11, ptr noundef nonnull @.str.8)
  br i1 %128, label %.preheader487, label %141

.preheader487:                                    ; preds = %124
  %129 = load i32, ptr %55, align 8, !tbaa !46
  %130 = icmp sgt i32 %129, 0
  br i1 %130, label %.lr.ph528, label %.loopexit488

.lr.ph528:                                        ; preds = %.preheader487
  %131 = getelementptr inbounds i8, ptr %0, i64 1008
  br label %132

132:                                              ; preds = %.lr.ph528, %135
  %indvars.iv674 = phi i64 [ 0, %.lr.ph528 ], [ %indvars.iv.next675, %135 ]
  %133 = trunc nuw nsw i64 %indvars.iv674 to i32
  %134 = invoke noundef double @_ZNK7SGTELIB6Matrix3getEi(ptr noundef nonnull align 8 dereferenceable(56) %9, i32 noundef %133)
          to label %135 unwind label %.loopexit489

135:                                              ; preds = %132
  %136 = load ptr, ptr %131, align 8, !tbaa !47
  %137 = getelementptr inbounds double, ptr %136, i64 %indvars.iv674
  store double %134, ptr %137, align 8, !tbaa !49
  %indvars.iv.next675 = add nuw nsw i64 %indvars.iv674, 1
  %138 = load i32, ptr %55, align 8, !tbaa !46
  %139 = sext i32 %138 to i64
  %140 = icmp slt i64 %indvars.iv.next675, %139
  br i1 %140, label %132, label %.loopexit488, !llvm.loop !50

.loopexit489:                                     ; preds = %132
  %lpad.loopexit = landingpad { ptr, i32 }
          cleanup
  br label %936

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

141:                                              ; preds = %124
  %142 = call noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %11, ptr noundef nonnull @.str.9)
  br i1 %142, label %143, label %177

143:                                              ; preds = %141
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %20) #13
  invoke void @_ZNK7SGTELIB6Matrix4rankEv(ptr dead_on_unwind nonnull writable sret(%"class.SGTELIB::Matrix") align 8 %20, ptr noundef nonnull align 8 dereferenceable(56) %9)
          to label %.preheader495 unwind label %154

.preheader495:                                    ; preds = %143
  %144 = getelementptr inbounds i8, ptr %0, i64 988
  br label %145

145:                                              ; preds = %.preheader495, %152
  %.1325 = phi i32 [ %153, %152 ], [ 0, %.preheader495 ]
  %146 = invoke noundef double @_ZNK7SGTELIB6Matrix3getEi(ptr noundef nonnull align 8 dereferenceable(56) %20, i32 noundef %.1325)
          to label %147 unwind label %156

147:                                              ; preds = %145
  %148 = load i32, ptr %144, align 4, !tbaa !52
  %149 = add nsw i32 %148, -1
  %150 = sitofp i32 %149 to double
  %151 = fcmp une double %146, %150
  br i1 %151, label %152, label %158

152:                                              ; preds = %147
  %153 = add nuw nsw i32 %.1325, 1
  br label %145, !llvm.loop !53

154:                                              ; preds = %143
  %155 = landingpad { ptr, i32 }
          cleanup
  br label %176

156:                                              ; preds = %145
  %157 = landingpad { ptr, i32 }
          cleanup
  br label %175

158:                                              ; preds = %147
  %159 = invoke noundef double @_ZNK7SGTELIB6Matrix3getEi(ptr noundef nonnull align 8 dereferenceable(56) %9, i32 noundef %.1325)
          to label %160 unwind label %.loopexit.split-lp491

160:                                              ; preds = %158
  %161 = fmul double %159, 2.000000e+00
  %162 = load i32, ptr %55, align 8, !tbaa !46
  %163 = icmp sgt i32 %162, 0
  br i1 %163, label %.lr.ph525, label %._crit_edge526

.lr.ph525:                                        ; preds = %160
  %164 = getelementptr inbounds i8, ptr %0, i64 1008
  br label %165

165:                                              ; preds = %.lr.ph525, %168
  %indvars.iv671 = phi i64 [ 0, %.lr.ph525 ], [ %indvars.iv.next672, %168 ]
  %166 = trunc nuw nsw i64 %indvars.iv671 to i32
  %167 = invoke noundef double @_ZNK7SGTELIB6Matrix3getEi(ptr noundef nonnull align 8 dereferenceable(56) %9, i32 noundef %166)
          to label %168 unwind label %.loopexit490

168:                                              ; preds = %165
  %169 = fdiv double %167, %161
  %170 = load ptr, ptr %164, align 8, !tbaa !47
  %171 = getelementptr inbounds double, ptr %170, i64 %indvars.iv671
  store double %169, ptr %171, align 8, !tbaa !49
  %indvars.iv.next672 = add nuw nsw i64 %indvars.iv671, 1
  %172 = load i32, ptr %55, align 8, !tbaa !46
  %173 = sext i32 %172 to i64
  %174 = icmp slt i64 %indvars.iv.next672, %173
  br i1 %174, label %165, label %._crit_edge526, !llvm.loop !54

.loopexit490:                                     ; preds = %165
  %lpad.loopexit492 = landingpad { ptr, i32 }
          cleanup
  br label %175

.loopexit.split-lp491:                            ; preds = %158
  %lpad.loopexit.split-lp493 = landingpad { ptr, i32 }
          cleanup
  br label %175

._crit_edge526:                                   ; preds = %168, %160
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %20) #13
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %20) #13
  br label %.loopexit488

175:                                              ; preds = %.loopexit490, %.loopexit.split-lp491, %156
  %.pn400 = phi { ptr, i32 } [ %157, %156 ], [ %lpad.loopexit492, %.loopexit490 ], [ %lpad.loopexit.split-lp493, %.loopexit.split-lp491 ]
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %20) #13
  br label %176

176:                                              ; preds = %175, %154
  %.pn400.pn = phi { ptr, i32 } [ %.pn400, %175 ], [ %155, %154 ]
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %20) #13
  br label %936

177:                                              ; preds = %141
  %178 = call noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %11, ptr noundef nonnull @.str.10)
  br i1 %178, label %179, label %200

179:                                              ; preds = %177
  %180 = getelementptr inbounds i8, ptr %0, i64 988
  %181 = load i32, ptr %180, align 4, !tbaa !52
  %182 = sitofp i32 %181 to double
  %183 = fdiv double %182, %60
  %184 = invoke noundef double @_ZN7SGTELIB11gammacdfinvEddd(double noundef %183, double noundef %126, double noundef %127)
          to label %185 unwind label %.loopexit.split-lp498

185:                                              ; preds = %179
  %186 = call double @pow(double noundef %184, double noundef 5.000000e-01) #13
  %187 = load i32, ptr %55, align 8, !tbaa !46
  %188 = icmp sgt i32 %187, 0
  br i1 %188, label %.lr.ph522, label %.loopexit488

.lr.ph522:                                        ; preds = %185
  %189 = getelementptr inbounds i8, ptr %0, i64 1008
  br label %190

190:                                              ; preds = %.lr.ph522, %193
  %indvars.iv668 = phi i64 [ 0, %.lr.ph522 ], [ %indvars.iv.next669, %193 ]
  %191 = trunc nuw nsw i64 %indvars.iv668 to i32
  %192 = invoke noundef double @_ZNK7SGTELIB6Matrix3getEi(ptr noundef nonnull align 8 dereferenceable(56) %9, i32 noundef %191)
          to label %193 unwind label %.loopexit497

193:                                              ; preds = %190
  %194 = fdiv double %192, %186
  %195 = load ptr, ptr %189, align 8, !tbaa !47
  %196 = getelementptr inbounds double, ptr %195, i64 %indvars.iv668
  store double %194, ptr %196, align 8, !tbaa !49
  %indvars.iv.next669 = add nuw nsw i64 %indvars.iv668, 1
  %197 = load i32, ptr %55, align 8, !tbaa !46
  %198 = sext i32 %197 to i64
  %199 = icmp slt i64 %indvars.iv.next669, %198
  br i1 %199, label %190, label %.loopexit488, !llvm.loop !55

.loopexit497:                                     ; preds = %190
  %lpad.loopexit499 = landingpad { ptr, i32 }
          cleanup
  br label %936

.loopexit.split-lp498:                            ; preds = %179
  %lpad.loopexit.split-lp500 = landingpad { ptr, i32 }
          cleanup
  br label %936

200:                                              ; preds = %177
  %201 = call noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %11, ptr noundef nonnull @.str.11)
  br i1 %201, label %204, label %202

202:                                              ; preds = %200
  %203 = call noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %11, ptr noundef nonnull @.str.12)
  br i1 %203, label %204, label %235

204:                                              ; preds = %202, %200
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %21) #13
  invoke void @_ZNK7SGTELIB6Matrix4rankEv(ptr dead_on_unwind nonnull writable sret(%"class.SGTELIB::Matrix") align 8 %21, ptr noundef nonnull align 8 dereferenceable(56) %9)
          to label %.preheader504 unwind label %217

.preheader504:                                    ; preds = %204
  %205 = load i32, ptr %55, align 8, !tbaa !46
  %206 = icmp sgt i32 %205, 0
  br i1 %206, label %.lr.ph516, label %._crit_edge517

.lr.ph516:                                        ; preds = %.preheader504
  %207 = getelementptr inbounds i8, ptr %0, i64 1008
  br label %208

208:                                              ; preds = %.lr.ph516, %211
  %indvars.iv660 = phi i64 [ 0, %.lr.ph516 ], [ %indvars.iv.next661, %211 ]
  %209 = trunc nuw nsw i64 %indvars.iv660 to i32
  %210 = invoke noundef double @_ZNK7SGTELIB6Matrix3getEi(ptr noundef nonnull align 8 dereferenceable(56) %21, i32 noundef %209)
          to label %211 unwind label %219

211:                                              ; preds = %208
  %212 = load ptr, ptr %207, align 8, !tbaa !47
  %213 = getelementptr inbounds double, ptr %212, i64 %indvars.iv660
  store double %210, ptr %213, align 8, !tbaa !49
  %indvars.iv.next661 = add nuw nsw i64 %indvars.iv660, 1
  %214 = load i32, ptr %55, align 8, !tbaa !46
  %215 = sext i32 %214 to i64
  %216 = icmp slt i64 %indvars.iv.next661, %215
  br i1 %216, label %208, label %._crit_edge517, !llvm.loop !56

217:                                              ; preds = %204
  %218 = landingpad { ptr, i32 }
          cleanup
  br label %234

219:                                              ; preds = %208
  %220 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %21) #13
  br label %234

._crit_edge517:                                   ; preds = %211, %.preheader504
  %221 = call noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %11, ptr noundef nonnull @.str.12)
  br i1 %221, label %.preheader502, label %.loopexit503

.preheader502:                                    ; preds = %._crit_edge517
  %222 = load i32, ptr %55, align 8, !tbaa !46
  %223 = icmp sgt i32 %222, 0
  br i1 %223, label %.lr.ph519, label %.loopexit503

.lr.ph519:                                        ; preds = %.preheader502
  %224 = add nsw i32 %222, -1
  %225 = uitofp nneg i32 %224 to double
  %226 = getelementptr inbounds i8, ptr %0, i64 1008
  %227 = load ptr, ptr %226, align 8, !tbaa !47
  %wide.trip.count666 = zext nneg i32 %222 to i64
  %min.iters.check867 = icmp eq i32 %222, 1
  br i1 %min.iters.check867, label %scalar.ph866.preheader, label %vector.ph868

vector.ph868:                                     ; preds = %.lr.ph519
  %n.vec870 = and i64 %wide.trip.count666, 2147483646
  %broadcast.splatinsert875 = insertelement <2 x double> poison, double %225, i64 0
  %broadcast.splat876 = shufflevector <2 x double> %broadcast.splatinsert875, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body872

vector.body872:                                   ; preds = %vector.body872, %vector.ph868
  %index873 = phi i64 [ 0, %vector.ph868 ], [ %index.next877, %vector.body872 ]
  %228 = getelementptr inbounds double, ptr %227, i64 %index873
  %wide.load874 = load <2 x double>, ptr %228, align 8, !tbaa !49
  %229 = fdiv <2 x double> %wide.load874, %broadcast.splat876
  store <2 x double> %229, ptr %228, align 8, !tbaa !49
  %index.next877 = add nuw i64 %index873, 2
  %230 = icmp eq i64 %index.next877, %n.vec870
  br i1 %230, label %middle.block865, label %vector.body872, !llvm.loop !57

middle.block865:                                  ; preds = %vector.body872
  %cmp.n878 = icmp eq i64 %n.vec870, %wide.trip.count666
  br i1 %cmp.n878, label %.loopexit503, label %scalar.ph866.preheader

scalar.ph866.preheader:                           ; preds = %middle.block865, %.lr.ph519
  %indvars.iv663.ph = phi i64 [ 0, %.lr.ph519 ], [ %n.vec870, %middle.block865 ]
  br label %scalar.ph866

scalar.ph866:                                     ; preds = %scalar.ph866.preheader, %scalar.ph866
  %indvars.iv663 = phi i64 [ %indvars.iv.next664, %scalar.ph866 ], [ %indvars.iv663.ph, %scalar.ph866.preheader ]
  %231 = getelementptr inbounds double, ptr %227, i64 %indvars.iv663
  %232 = load double, ptr %231, align 8, !tbaa !49
  %233 = fdiv double %232, %225
  store double %233, ptr %231, align 8, !tbaa !49
  %indvars.iv.next664 = add nuw nsw i64 %indvars.iv663, 1
  %exitcond667.not = icmp eq i64 %indvars.iv.next664, %wide.trip.count666
  br i1 %exitcond667.not, label %.loopexit503, label %scalar.ph866, !llvm.loop !60

.loopexit503:                                     ; preds = %scalar.ph866, %middle.block865, %.preheader502, %._crit_edge517
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %21) #13
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %21) #13
  br label %.loopexit488

234:                                              ; preds = %219, %217
  %.pn398 = phi { ptr, i32 } [ %220, %219 ], [ %218, %217 ]
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %21) #13
  br label %936

235:                                              ; preds = %202
  %236 = call noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %11, ptr noundef nonnull @.str.13)
  br i1 %236, label %239, label %237

237:                                              ; preds = %235
  %238 = call noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %11, ptr noundef nonnull @.str.14)
  br i1 %238, label %239, label %.loopexit488

239:                                              ; preds = %237, %235
  %240 = load i32, ptr %55, align 8, !tbaa !46
  %241 = icmp sgt i32 %240, 0
  br i1 %241, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %239
  %242 = getelementptr inbounds i8, ptr %0, i64 1008
  br label %243

243:                                              ; preds = %.lr.ph, %248
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %248 ]
  %244 = trunc nuw nsw i64 %indvars.iv to i32
  %245 = invoke noundef double @_ZNK7SGTELIB6Matrix3getEi(ptr noundef nonnull align 8 dereferenceable(56) %9, i32 noundef %244)
          to label %246 unwind label %.loopexit.split-lp

246:                                              ; preds = %243
  %square = fmul double %245, %245
  %247 = invoke noundef double @_ZN7SGTELIB8gammacdfEddd(double noundef %square, double noundef %126, double noundef %127)
          to label %248 unwind label %.loopexit.split-lp

248:                                              ; preds = %246
  %249 = load ptr, ptr %242, align 8, !tbaa !47
  %250 = getelementptr inbounds double, ptr %249, i64 %indvars.iv
  store double %247, ptr %250, align 8, !tbaa !49
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %251 = load i32, ptr %55, align 8, !tbaa !46
  %252 = sext i32 %251 to i64
  %253 = icmp slt i64 %indvars.iv.next, %252
  br i1 %253, label %243, label %._crit_edge, !llvm.loop !61

._crit_edge:                                      ; preds = %248, %239
  %254 = call noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %11, ptr noundef nonnull @.str.13)
  br i1 %254, label %.preheader505, label %.loopexit488

.preheader505:                                    ; preds = %._crit_edge
  %255 = load i32, ptr %55, align 8, !tbaa !46
  %256 = icmp sgt i32 %255, 0
  br i1 %256, label %.lr.ph514, label %.loopexit488

.lr.ph514:                                        ; preds = %.preheader505
  %257 = add nsw i32 %255, -1
  %258 = uitofp nneg i32 %257 to double
  %259 = getelementptr inbounds i8, ptr %0, i64 1008
  %260 = load ptr, ptr %259, align 8, !tbaa !47
  %wide.trip.count = zext nneg i32 %255 to i64
  %min.iters.check = icmp ult i32 %255, 4
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.ph

vector.ph:                                        ; preds = %.lr.ph514
  %n.vec = and i64 %wide.trip.count, 2147483644
  %broadcast.splatinsert = insertelement <2 x double> poison, double %258, i64 0
  %broadcast.splat = shufflevector <2 x double> %broadcast.splatinsert, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %261 = getelementptr inbounds double, ptr %260, i64 %index
  %262 = getelementptr inbounds i8, ptr %261, i64 16
  %wide.load = load <2 x double>, ptr %261, align 8, !tbaa !49
  %wide.load864 = load <2 x double>, ptr %262, align 8, !tbaa !49
  %263 = fmul <2 x double> %wide.load, %broadcast.splat
  %264 = fmul <2 x double> %wide.load864, %broadcast.splat
  store <2 x double> %263, ptr %261, align 8, !tbaa !49
  store <2 x double> %264, ptr %262, align 8, !tbaa !49
  %index.next = add nuw i64 %index, 4
  %265 = icmp eq i64 %index.next, %n.vec
  br i1 %265, label %middle.block, label %vector.body, !llvm.loop !62

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %n.vec, %wide.trip.count
  br i1 %cmp.n, label %.loopexit488, label %scalar.ph.preheader

scalar.ph.preheader:                              ; preds = %middle.block, %.lr.ph514
  %indvars.iv657.ph = phi i64 [ 0, %.lr.ph514 ], [ %n.vec, %middle.block ]
  br label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph.preheader, %scalar.ph
  %indvars.iv657 = phi i64 [ %indvars.iv.next658, %scalar.ph ], [ %indvars.iv657.ph, %scalar.ph.preheader ]
  %266 = getelementptr inbounds double, ptr %260, i64 %indvars.iv657
  %267 = load double, ptr %266, align 8, !tbaa !49
  %268 = fmul double %267, %258
  store double %268, ptr %266, align 8, !tbaa !49
  %indvars.iv.next658 = add nuw nsw i64 %indvars.iv657, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next658, %wide.trip.count
  br i1 %exitcond.not, label %.loopexit488, label %scalar.ph, !llvm.loop !63

.loopexit488:                                     ; preds = %scalar.ph, %193, %135, %middle.block, %.preheader505, %185, %.preheader487, %237, %._crit_edge, %.loopexit503, %._crit_edge526
  %269 = call noundef double @_ZNK7SGTELIB20Surrogate_Parameters15get_kernel_coefEv(ptr noundef nonnull align 8 dereferenceable(312) %51)
  %270 = call noundef i32 @_ZNK7SGTELIB20Surrogate_Parameters15get_kernel_typeEv(ptr noundef nonnull align 8 dereferenceable(312) %51)
  %271 = load i32, ptr %55, align 8, !tbaa !46
  %272 = icmp sgt i32 %271, 0
  br i1 %272, label %.lr.ph532, label %._crit_edge533

.lr.ph532:                                        ; preds = %.loopexit488
  %273 = getelementptr inbounds i8, ptr %0, i64 1008
  %.pre = load ptr, ptr %273, align 8, !tbaa !47
  br label %274

274:                                              ; preds = %.lr.ph532, %279
  %275 = phi ptr [ %.pre, %.lr.ph532 ], [ %280, %279 ]
  %indvars.iv677 = phi i64 [ 0, %.lr.ph532 ], [ %indvars.iv.next678, %279 ]
  %.0384529 = phi double [ 0.000000e+00, %.lr.ph532 ], [ %282, %279 ]
  %276 = getelementptr inbounds double, ptr %275, i64 %indvars.iv677
  %277 = load double, ptr %276, align 8, !tbaa !49
  %278 = invoke noundef double @_ZN7SGTELIB6kernelENS_8kernel_tEdd(i32 noundef %270, double noundef %269, double noundef %277)
          to label %279 unwind label %286

279:                                              ; preds = %274
  %280 = load ptr, ptr %273, align 8, !tbaa !47
  %281 = getelementptr inbounds double, ptr %280, i64 %indvars.iv677
  store double %278, ptr %281, align 8, !tbaa !49
  %282 = fadd double %.0384529, %278
  %indvars.iv.next678 = add nuw nsw i64 %indvars.iv677, 1
  %283 = load i32, ptr %55, align 8, !tbaa !46
  %284 = sext i32 %283 to i64
  %285 = icmp slt i64 %indvars.iv.next678, %284
  br i1 %285, label %274, label %._crit_edge533, !llvm.loop !64

286:                                              ; preds = %274
  %287 = landingpad { ptr, i32 }
          cleanup
  br label %936

._crit_edge533:                                   ; preds = %279, %.loopexit488
  %288 = phi i32 [ %271, %.loopexit488 ], [ %283, %279 ]
  %.0384.lcssa = phi double [ 0.000000e+00, %.loopexit488 ], [ %282, %279 ]
  br i1 %58, label %289, label %296

289:                                              ; preds = %._crit_edge533
  %290 = getelementptr inbounds i8, ptr %0, i64 1008
  %291 = load ptr, ptr %290, align 8, !tbaa !47
  %292 = sext i32 %2 to i64
  %293 = getelementptr inbounds double, ptr %291, i64 %292
  %294 = load double, ptr %293, align 8, !tbaa !49
  %295 = fsub double %.0384.lcssa, %294
  store double 0.000000e+00, ptr %293, align 8, !tbaa !49
  br label %296

296:                                              ; preds = %289, %._crit_edge533
  %.2386 = phi double [ %295, %289 ], [ %.0384.lcssa, %._crit_edge533 ]
  %297 = fcmp ogt double %.2386, 1.000000e-13
  %298 = icmp sgt i32 %288, 0
  br i1 %297, label %.preheader483, label %.preheader485

.preheader485:                                    ; preds = %296
  br i1 %298, label %.lr.ph535, label %.loopexit484

.lr.ph535:                                        ; preds = %.preheader485
  %299 = getelementptr inbounds i8, ptr %0, i64 1008
  %300 = load ptr, ptr %299, align 8, !tbaa !47
  %wide.trip.count683 = zext nneg i32 %288 to i64
  %min.iters.check881 = icmp ult i32 %288, 4
  br i1 %min.iters.check881, label %scalar.ph880.preheader, label %vector.ph882

scalar.ph880.preheader:                           ; preds = %middle.block879, %.lr.ph535
  %indvars.iv680.ph = phi i64 [ 0, %.lr.ph535 ], [ %n.vec884, %middle.block879 ]
  br label %scalar.ph880

vector.ph882:                                     ; preds = %.lr.ph535
  %n.vec884 = and i64 %wide.trip.count683, 2147483644
  br label %vector.body886

vector.body886:                                   ; preds = %vector.body886, %vector.ph882
  %index887 = phi i64 [ 0, %vector.ph882 ], [ %index.next888, %vector.body886 ]
  %301 = getelementptr inbounds double, ptr %300, i64 %index887
  %302 = getelementptr inbounds i8, ptr %301, i64 16
  store <2 x double> <double 1.000000e+00, double 1.000000e+00>, ptr %301, align 8, !tbaa !49
  store <2 x double> <double 1.000000e+00, double 1.000000e+00>, ptr %302, align 8, !tbaa !49
  %index.next888 = add nuw i64 %index887, 4
  %303 = icmp eq i64 %index.next888, %n.vec884
  br i1 %303, label %middle.block879, label %vector.body886, !llvm.loop !65

middle.block879:                                  ; preds = %vector.body886
  %cmp.n889 = icmp eq i64 %n.vec884, %wide.trip.count683
  br i1 %cmp.n889, label %.loopexit484, label %scalar.ph880.preheader

.preheader483:                                    ; preds = %296
  br i1 %298, label %.lr.ph537, label %.loopexit484

.lr.ph537:                                        ; preds = %.preheader483
  %304 = getelementptr inbounds i8, ptr %0, i64 1008
  %305 = load ptr, ptr %304, align 8, !tbaa !47
  %wide.trip.count688 = zext nneg i32 %288 to i64
  %min.iters.check892 = icmp eq i32 %288, 1
  br i1 %min.iters.check892, label %scalar.ph891.preheader, label %vector.ph893

vector.ph893:                                     ; preds = %.lr.ph537
  %n.vec895 = and i64 %wide.trip.count688, 2147483646
  %broadcast.splatinsert900 = insertelement <2 x double> poison, double %.2386, i64 0
  %broadcast.splat901 = shufflevector <2 x double> %broadcast.splatinsert900, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body897

vector.body897:                                   ; preds = %vector.body897, %vector.ph893
  %index898 = phi i64 [ 0, %vector.ph893 ], [ %index.next902, %vector.body897 ]
  %306 = getelementptr inbounds double, ptr %305, i64 %index898
  %wide.load899 = load <2 x double>, ptr %306, align 8, !tbaa !49
  %307 = fdiv <2 x double> %wide.load899, %broadcast.splat901
  store <2 x double> %307, ptr %306, align 8, !tbaa !49
  %index.next902 = add nuw i64 %index898, 2
  %308 = icmp eq i64 %index.next902, %n.vec895
  br i1 %308, label %middle.block890, label %vector.body897, !llvm.loop !66

middle.block890:                                  ; preds = %vector.body897
  %cmp.n903 = icmp eq i64 %n.vec895, %wide.trip.count688
  br i1 %cmp.n903, label %.loopexit484, label %scalar.ph891.preheader

scalar.ph891.preheader:                           ; preds = %middle.block890, %.lr.ph537
  %indvars.iv685.ph = phi i64 [ 0, %.lr.ph537 ], [ %n.vec895, %middle.block890 ]
  br label %scalar.ph891

scalar.ph891:                                     ; preds = %scalar.ph891.preheader, %scalar.ph891
  %indvars.iv685 = phi i64 [ %indvars.iv.next686, %scalar.ph891 ], [ %indvars.iv685.ph, %scalar.ph891.preheader ]
  %309 = getelementptr inbounds double, ptr %305, i64 %indvars.iv685
  %310 = load double, ptr %309, align 8, !tbaa !49
  %311 = fdiv double %310, %.2386
  store double %311, ptr %309, align 8, !tbaa !49
  %indvars.iv.next686 = add nuw nsw i64 %indvars.iv685, 1
  %exitcond689.not = icmp eq i64 %indvars.iv.next686, %wide.trip.count688
  br i1 %exitcond689.not, label %.loopexit484, label %scalar.ph891, !llvm.loop !67

scalar.ph880:                                     ; preds = %scalar.ph880.preheader, %scalar.ph880
  %indvars.iv680 = phi i64 [ %indvars.iv.next681, %scalar.ph880 ], [ %indvars.iv680.ph, %scalar.ph880.preheader ]
  %312 = getelementptr inbounds double, ptr %300, i64 %indvars.iv680
  store double 1.000000e+00, ptr %312, align 8, !tbaa !49
  %indvars.iv.next681 = add nuw nsw i64 %indvars.iv680, 1
  %exitcond684.not = icmp eq i64 %indvars.iv.next681, %wide.trip.count683
  br i1 %exitcond684.not, label %.loopexit484, label %scalar.ph880, !llvm.loop !68

.loopexit484:                                     ; preds = %scalar.ph880, %scalar.ph891, %middle.block879, %middle.block890, %.preheader485, %.preheader483
  %313 = call noundef double @_ZNK7SGTELIB20Surrogate_Parameters9get_ridgeEv(ptr noundef nonnull align 8 dereferenceable(312) %51)
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %22) #13
  invoke void @_ZN7SGTELIB9Surrogate13get_matrix_ZsEv(ptr dead_on_unwind nonnull writable sret(%"class.SGTELIB::Matrix") align 8 %22, ptr noundef nonnull align 8 dereferenceable(985) %0)
          to label %314 unwind label %322

314:                                              ; preds = %.loopexit484
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %23) #13
  invoke void @_ZN7SGTELIB9Surrogate13get_matrix_XsEv(ptr dead_on_unwind nonnull writable sret(%"class.SGTELIB::Matrix") align 8 %23, ptr noundef nonnull align 8 dereferenceable(985) %0)
          to label %315 unwind label %324

315:                                              ; preds = %314
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %24) #13
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %25) #13
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %26) #13
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %26) #13
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %25, ptr noundef nonnull @.str.17, ptr noundef nonnull align 1 dereferenceable(1) %26)
          to label %316 unwind label %326

316:                                              ; preds = %315
  %317 = load i32, ptr %55, align 8, !tbaa !46
  invoke void @_ZN7SGTELIB6MatrixC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEii(ptr noundef nonnull align 8 dereferenceable(56) %24, ptr noundef nonnull align 8 dereferenceable(32) %25, i32 noundef %317, i32 noundef 1)
          to label %318 unwind label %328

318:                                              ; preds = %316
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #13
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %26) #13
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %26) #13
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %25) #13
  %319 = getelementptr inbounds i8, ptr %0, i64 332
  %320 = load i32, ptr %319, align 4, !tbaa !69
  %321 = icmp sgt i32 %320, 0
  br i1 %321, label %.lr.ph540, label %.loopexit482

322:                                              ; preds = %.loopexit484
  %323 = landingpad { ptr, i32 }
          cleanup
  br label %936

324:                                              ; preds = %314
  %325 = landingpad { ptr, i32 }
          cleanup
  br label %935

326:                                              ; preds = %315
  %327 = landingpad { ptr, i32 }
          cleanup
  br label %330

328:                                              ; preds = %316
  %329 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #13
  br label %330

330:                                              ; preds = %328, %326
  %.pn403 = phi { ptr, i32 } [ %329, %328 ], [ %327, %326 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %26) #13
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %26) #13
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %25) #13
  br label %934

.lr.ph540:                                        ; preds = %318, %346
  %.0375538 = phi i32 [ %347, %346 ], [ 0, %318 ]
  %331 = load ptr, ptr %49, align 8, !tbaa !5
  %332 = invoke noundef i32 @_ZNK7SGTELIB11TrainingSet7get_bboEi(ptr noundef nonnull align 8 dereferenceable(504) %331, i32 noundef %.0375538)
          to label %333 unwind label %339

333:                                              ; preds = %.lr.ph540
  %334 = icmp eq i32 %332, 0
  br i1 %334, label %335, label %346

335:                                              ; preds = %333
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %27) #13
  invoke void @_ZNK7SGTELIB6Matrix7get_colEi(ptr dead_on_unwind nonnull writable sret(%"class.SGTELIB::Matrix") align 8 %27, ptr noundef nonnull align 8 dereferenceable(56) %22, i32 noundef %.0375538)
          to label %336 unwind label %341

336:                                              ; preds = %335
  %337 = invoke noundef nonnull align 8 dereferenceable(56) ptr @_ZN7SGTELIB6MatrixaSERKS0_(ptr noundef nonnull align 8 dereferenceable(56) %24, ptr noundef nonnull align 8 dereferenceable(56) %27)
          to label %338 unwind label %343

338:                                              ; preds = %336
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %27) #13
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %27) #13
  br label %.loopexit482

339:                                              ; preds = %.lr.ph540
  %340 = landingpad { ptr, i32 }
          cleanup
  br label %933

341:                                              ; preds = %335
  %342 = landingpad { ptr, i32 }
          cleanup
  br label %345

343:                                              ; preds = %336
  %344 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %27) #13
  br label %345

345:                                              ; preds = %343, %341
  %.pn405 = phi { ptr, i32 } [ %344, %343 ], [ %342, %341 ]
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %27) #13
  br label %933

346:                                              ; preds = %333
  %347 = add nuw nsw i32 %.0375538, 1
  %348 = load i32, ptr %319, align 4, !tbaa !69
  %349 = icmp slt i32 %347, %348
  br i1 %349, label %.lr.ph540, label %.loopexit482, !llvm.loop !70

.loopexit482:                                     ; preds = %346, %318, %338
  %350 = load i32, ptr %55, align 8, !tbaa !46
  %351 = icmp sgt i32 %350, 0
  br i1 %351, label %.lr.ph561, label %.preheader476

.lr.ph561:                                        ; preds = %.loopexit482
  %352 = getelementptr inbounds i8, ptr %0, i64 1000
  %353 = getelementptr inbounds i8, ptr %0, i64 1008
  %354 = getelementptr inbounds i8, ptr %0, i64 988
  %355 = getelementptr inbounds i8, ptr %0, i64 996
  %356 = getelementptr inbounds i8, ptr %0, i64 328
  %357 = getelementptr inbounds i8, ptr %0, i64 1064
  %.pre807 = load ptr, ptr %352, align 8, !tbaa !71
  br label %367

.preheader476:                                    ; preds = %.critedge3, %.loopexit482
  %358 = phi i32 [ %350, %.loopexit482 ], [ %466, %.critedge3 ]
  %359 = getelementptr inbounds i8, ptr %0, i64 988
  %360 = load i32, ptr %359, align 4
  %361 = icmp sgt i32 %360, 0
  br i1 %361, label %.preheader475.lr.ph, label %.preheader474

.preheader475.lr.ph:                              ; preds = %.preheader476
  %362 = getelementptr inbounds i8, ptr %0, i64 1016
  %363 = load ptr, ptr %362, align 8, !tbaa !72
  %364 = getelementptr inbounds i8, ptr %0, i64 1032
  %365 = load ptr, ptr %364, align 8, !tbaa !73
  %wide.trip.count713 = zext nneg i32 %360 to i64
  %xtraiter = and i64 %wide.trip.count713, 1
  %366 = icmp eq i32 %360, 1
  br i1 %366, label %.preheader474.loopexit.unr-lcssa, label %.preheader475.lr.ph.new

.preheader475.lr.ph.new:                          ; preds = %.preheader475.lr.ph
  %unroll_iter = and i64 %wide.trip.count713, 2147483646
  br label %.preheader475

367:                                              ; preds = %.lr.ph561, %.critedge3
  %368 = phi ptr [ %.pre807, %.lr.ph561 ], [ %465, %.critedge3 ]
  %indvars.iv705 = phi i64 [ 0, %.lr.ph561 ], [ %indvars.iv.next706, %.critedge3 ]
  %369 = getelementptr inbounds ptr, ptr %368, i64 %indvars.iv705
  %370 = load ptr, ptr %369, align 8, !tbaa !74
  store double 1.000000e+00, ptr %370, align 8, !tbaa !49
  %371 = load ptr, ptr %353, align 8, !tbaa !47
  %372 = getelementptr inbounds double, ptr %371, i64 %indvars.iv705
  %373 = load double, ptr %372, align 8, !tbaa !49
  %374 = fcmp ogt double %373, 1.000000e-13
  br i1 %374, label %380, label %.preheader480

.preheader480:                                    ; preds = %367
  %375 = load i32, ptr %354, align 4, !tbaa !52
  %376 = icmp sgt i32 %375, 1
  br i1 %376, label %.lr.ph542.preheader, label %.critedge3

.lr.ph542.preheader:                              ; preds = %.preheader480
  %scevgep = getelementptr i8, ptr %370, i64 8
  %377 = add nsw i32 %375, -1
  %378 = zext nneg i32 %377 to i64
  %379 = shl nuw nsw i64 %378, 3
  call void @llvm.memset.p0.i64(ptr align 8 %scevgep, i8 0, i64 %379, i1 false), !tbaa !49
  br label %.critedge3

380:                                              ; preds = %367
  %381 = load i32, ptr %355, align 4, !tbaa !75
  %382 = icmp sgt i32 %381, 9
  br i1 %382, label %.preheader479, label %.critedge3

.preheader479:                                    ; preds = %380
  %383 = load i32, ptr %356, align 8
  %384 = icmp sgt i32 %383, 0
  %385 = load i32, ptr %354, align 4
  %386 = icmp sgt i32 %385, 1
  %or.cond444543 = select i1 %384, i1 %386, i1 false
  br i1 %or.cond444543, label %.lr.ph546.preheader, label %.critedge

.lr.ph546.preheader:                              ; preds = %.preheader479
  %387 = trunc nuw nsw i64 %indvars.iv705 to i32
  br label %.lr.ph546

.lr.ph546:                                        ; preds = %.lr.ph546.preheader, %.lr.ph546
  %indvars.iv693 = phi i64 [ 1, %.lr.ph546.preheader ], [ %indvars.iv.next694, %.lr.ph546 ]
  %.0350545 = phi i32 [ 0, %.lr.ph546.preheader ], [ %395, %.lr.ph546 ]
  %388 = call noundef double @_ZNK7SGTELIB6Matrix3getEii(ptr noundef nonnull align 8 dereferenceable(56) %23, i32 noundef %387, i32 noundef %.0350545)
  %389 = call noundef double @_ZNK7SGTELIB6Matrix3getEii(ptr noundef nonnull align 8 dereferenceable(56) %1, i32 noundef 0, i32 noundef %.0350545)
  %390 = fsub double %388, %389
  %391 = load ptr, ptr %352, align 8, !tbaa !71
  %392 = getelementptr inbounds ptr, ptr %391, i64 %indvars.iv705
  %393 = load ptr, ptr %392, align 8, !tbaa !74
  %indvars.iv.next694 = add nuw nsw i64 %indvars.iv693, 1
  %394 = getelementptr inbounds double, ptr %393, i64 %indvars.iv693
  store double %390, ptr %394, align 8, !tbaa !49
  %395 = add nuw nsw i32 %.0350545, 1
  %396 = load i32, ptr %356, align 8
  %397 = icmp slt i32 %395, %396
  %398 = load i32, ptr %354, align 4
  %399 = sext i32 %398 to i64
  %400 = icmp slt i64 %indvars.iv.next694, %399
  %or.cond444 = select i1 %397, i1 %400, i1 false
  br i1 %or.cond444, label %.lr.ph546, label %.critedge.loopexit, !llvm.loop !76

.critedge.loopexit:                               ; preds = %.lr.ph546
  %401 = trunc nuw nsw i64 %indvars.iv.next694 to i32
  %.pr.pre = load i32, ptr %355, align 4, !tbaa !75
  br label %.critedge

.critedge:                                        ; preds = %.critedge.loopexit, %.preheader479
  %402 = phi i32 [ %383, %.preheader479 ], [ %396, %.critedge.loopexit ]
  %.pr = phi i32 [ %381, %.preheader479 ], [ %.pr.pre, %.critedge.loopexit ]
  %403 = phi ptr [ %368, %.preheader479 ], [ %391, %.critedge.loopexit ]
  %.0366.lcssa = phi i32 [ 1, %.preheader479 ], [ %401, %.critedge.loopexit ]
  %404 = icmp sgt i32 %.pr, 14
  %405 = icmp sgt i32 %402, 0
  %or.cond637 = and i1 %404, %405
  br i1 %or.cond637, label %.lr.ph556.preheader, label %.critedge3

.lr.ph556.preheader:                              ; preds = %.critedge
  %406 = trunc nuw nsw i64 %indvars.iv705 to i32
  br label %.lr.ph556

.lr.ph556:                                        ; preds = %.lr.ph556.preheader, %.critedge5
  %407 = phi i32 [ %402, %.lr.ph556.preheader ], [ %461, %.critedge5 ]
  %408 = phi ptr [ %403, %.lr.ph556.preheader ], [ %462, %.critedge5 ]
  %indvars.iv701 = phi i64 [ 0, %.lr.ph556.preheader ], [ %indvars.iv.next702, %.critedge5 ]
  %indvars.iv696 = phi i64 [ 1, %.lr.ph556.preheader ], [ %indvars.iv.next697, %.critedge5 ]
  %.2368554 = phi i32 [ %.0366.lcssa, %.lr.ph556.preheader ], [ %.5371, %.critedge5 ]
  %409 = load i32, ptr %354, align 4, !tbaa !52
  %410 = icmp slt i32 %.2368554, %409
  br i1 %410, label %411, label %.critedge3

411:                                              ; preds = %.lr.ph556
  %412 = load ptr, ptr %357, align 8, !tbaa !77
  %413 = getelementptr inbounds i8, ptr %412, i64 %indvars.iv701
  %414 = load i8, ptr %413, align 1, !tbaa !78, !range !79, !noundef !80
  %415 = trunc nuw i8 %414 to i1
  br i1 %415, label %416, label %.critedge5

416:                                              ; preds = %411
  %417 = trunc nuw nsw i64 %indvars.iv701 to i32
  %418 = call noundef double @_ZNK7SGTELIB6Matrix3getEii(ptr noundef nonnull align 8 dereferenceable(56) %23, i32 noundef %406, i32 noundef %417)
  %419 = call noundef double @_ZNK7SGTELIB6Matrix3getEii(ptr noundef nonnull align 8 dereferenceable(56) %1, i32 noundef 0, i32 noundef %417)
  %420 = fsub double %418, %419
  %421 = fmul double %420, %420
  %422 = load ptr, ptr %352, align 8, !tbaa !71
  %423 = getelementptr inbounds ptr, ptr %422, i64 %indvars.iv705
  %424 = load ptr, ptr %423, align 8, !tbaa !74
  %425 = add nsw i32 %.2368554, 1
  %426 = sext i32 %.2368554 to i64
  %427 = getelementptr inbounds double, ptr %424, i64 %426
  store double %421, ptr %427, align 8, !tbaa !49
  %428 = load i32, ptr %355, align 4, !tbaa !75
  %429 = icmp sgt i32 %428, 19
  %.pre811 = load i32, ptr %356, align 8, !tbaa !81
  br i1 %429, label %.preheader477, label %.critedge5

.preheader477:                                    ; preds = %416
  %430 = add nuw nsw i64 %indvars.iv701, 1
  %431 = sext i32 %.pre811 to i64
  %432 = icmp slt i64 %430, %431
  %433 = load i32, ptr %354, align 4
  %434 = icmp slt i32 %425, %433
  %or.cond446549 = select i1 %432, i1 %434, i1 false
  br i1 %or.cond446549, label %.lr.ph552, label %.critedge5

.lr.ph552:                                        ; preds = %.preheader477, %454
  %435 = phi i32 [ %455, %454 ], [ %433, %.preheader477 ]
  %436 = phi i32 [ %456, %454 ], [ %.pre811, %.preheader477 ]
  %437 = phi ptr [ %457, %454 ], [ %422, %.preheader477 ]
  %indvars.iv698 = phi i64 [ %indvars.iv.next699, %454 ], [ %indvars.iv696, %.preheader477 ]
  %.3369550 = phi i32 [ %.4370, %454 ], [ %425, %.preheader477 ]
  %438 = load ptr, ptr %357, align 8, !tbaa !77
  %439 = getelementptr inbounds i8, ptr %438, i64 %indvars.iv698
  %440 = load i8, ptr %439, align 1, !tbaa !78, !range !79, !noundef !80
  %441 = trunc nuw i8 %440 to i1
  br i1 %441, label %442, label %454

442:                                              ; preds = %.lr.ph552
  %443 = trunc nuw nsw i64 %indvars.iv698 to i32
  %444 = call noundef double @_ZNK7SGTELIB6Matrix3getEii(ptr noundef nonnull align 8 dereferenceable(56) %23, i32 noundef %406, i32 noundef %443)
  %445 = call noundef double @_ZNK7SGTELIB6Matrix3getEii(ptr noundef nonnull align 8 dereferenceable(56) %1, i32 noundef 0, i32 noundef %443)
  %446 = fsub double %444, %445
  %447 = fmul double %420, %446
  %448 = load ptr, ptr %352, align 8, !tbaa !71
  %449 = getelementptr inbounds ptr, ptr %448, i64 %indvars.iv705
  %450 = load ptr, ptr %449, align 8, !tbaa !74
  %451 = add nsw i32 %.3369550, 1
  %452 = sext i32 %.3369550 to i64
  %453 = getelementptr inbounds double, ptr %450, i64 %452
  store double %447, ptr %453, align 8, !tbaa !49
  %.pre809 = load i32, ptr %356, align 8, !tbaa !81
  %.pre810 = load i32, ptr %354, align 4
  br label %454

454:                                              ; preds = %.lr.ph552, %442
  %455 = phi i32 [ %.pre810, %442 ], [ %435, %.lr.ph552 ]
  %456 = phi i32 [ %.pre809, %442 ], [ %436, %.lr.ph552 ]
  %457 = phi ptr [ %448, %442 ], [ %437, %.lr.ph552 ]
  %.4370 = phi i32 [ %451, %442 ], [ %.3369550, %.lr.ph552 ]
  %indvars.iv.next699 = add nuw nsw i64 %indvars.iv698, 1
  %458 = trunc nuw i64 %indvars.iv.next699 to i32
  %459 = icmp sgt i32 %456, %458
  %460 = icmp slt i32 %.4370, %455
  %or.cond446 = select i1 %459, i1 %460, i1 false
  br i1 %or.cond446, label %.lr.ph552, label %.critedge5, !llvm.loop !82

.critedge5:                                       ; preds = %454, %.preheader477, %411, %416
  %461 = phi i32 [ %.pre811, %416 ], [ %407, %411 ], [ %.pre811, %.preheader477 ], [ %456, %454 ]
  %462 = phi ptr [ %422, %416 ], [ %408, %411 ], [ %422, %.preheader477 ], [ %457, %454 ]
  %.5371 = phi i32 [ %425, %416 ], [ %.2368554, %411 ], [ %425, %.preheader477 ], [ %.4370, %454 ]
  %indvars.iv.next702 = add nuw nsw i64 %indvars.iv701, 1
  %463 = sext i32 %461 to i64
  %464 = icmp slt i64 %indvars.iv.next702, %463
  %indvars.iv.next697 = add nuw nsw i64 %indvars.iv696, 1
  br i1 %464, label %.lr.ph556, label %.critedge3, !llvm.loop !83

.critedge3:                                       ; preds = %.critedge5, %.lr.ph556, %.lr.ph542.preheader, %.preheader480, %380, %.critedge
  %465 = phi ptr [ %368, %.lr.ph542.preheader ], [ %368, %.preheader480 ], [ %368, %380 ], [ %403, %.critedge ], [ %462, %.critedge5 ], [ %408, %.lr.ph556 ]
  %indvars.iv.next706 = add nuw nsw i64 %indvars.iv705, 1
  %466 = load i32, ptr %55, align 8, !tbaa !46
  %467 = sext i32 %466 to i64
  %468 = icmp slt i64 %indvars.iv.next706, %467
  br i1 %468, label %367, label %.preheader476, !llvm.loop !84

.preheader475:                                    ; preds = %.preheader475, %.preheader475.lr.ph.new
  %indvar = phi i64 [ 0, %.preheader475.lr.ph.new ], [ %indvar.next.1, %.preheader475 ]
  %niter = phi i64 [ 0, %.preheader475.lr.ph.new ], [ %niter.next.1, %.preheader475 ]
  %469 = shl nuw nsw i64 %indvar, 3
  %470 = trunc i64 %indvar to i32
  %471 = xor i32 %470, -1
  %472 = add i32 %360, %471
  %473 = zext i32 %472 to i64
  %474 = shl nuw nsw i64 %473, 3
  %475 = add nuw nsw i64 %474, 8
  %476 = getelementptr inbounds ptr, ptr %363, i64 %indvar
  %477 = load ptr, ptr %476, align 8, !tbaa !74
  %scevgep708 = getelementptr i8, ptr %477, i64 %469
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(1) %scevgep708, i8 0, i64 %475, i1 false), !tbaa !49
  %478 = getelementptr inbounds ptr, ptr %365, i64 %indvar
  %479 = load ptr, ptr %478, align 8, !tbaa !74
  store double 0.000000e+00, ptr %479, align 8, !tbaa !49
  %indvar.next = or disjoint i64 %indvar, 1
  %480 = shl nuw nsw i64 %indvar.next, 3
  %481 = trunc i64 %indvar.next to i32
  %482 = xor i32 %481, -1
  %483 = add i32 %360, %482
  %484 = zext i32 %483 to i64
  %485 = shl nuw nsw i64 %484, 3
  %486 = add nuw nsw i64 %485, 8
  %487 = getelementptr inbounds ptr, ptr %363, i64 %indvar.next
  %488 = load ptr, ptr %487, align 8, !tbaa !74
  %scevgep708.1 = getelementptr i8, ptr %488, i64 %480
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(1) %scevgep708.1, i8 0, i64 %486, i1 false), !tbaa !49
  %489 = getelementptr inbounds ptr, ptr %365, i64 %indvar.next
  %490 = load ptr, ptr %489, align 8, !tbaa !74
  store double 0.000000e+00, ptr %490, align 8, !tbaa !49
  %indvar.next.1 = add nuw nsw i64 %indvar, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %.preheader474.loopexit.unr-lcssa, label %.preheader475, !llvm.loop !85

.preheader474.loopexit.unr-lcssa:                 ; preds = %.preheader475, %.preheader475.lr.ph
  %indvar.unr = phi i64 [ 0, %.preheader475.lr.ph ], [ %indvar.next.1, %.preheader475 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.preheader474, label %.preheader475.epil

.preheader475.epil:                               ; preds = %.preheader474.loopexit.unr-lcssa
  %491 = shl nuw nsw i64 %indvar.unr, 3
  %492 = trunc i64 %indvar.unr to i32
  %493 = xor i32 %492, -1
  %494 = add i32 %360, %493
  %495 = zext i32 %494 to i64
  %496 = shl nuw nsw i64 %495, 3
  %497 = add nuw nsw i64 %496, 8
  %498 = getelementptr inbounds ptr, ptr %363, i64 %indvar.unr
  %499 = load ptr, ptr %498, align 8, !tbaa !74
  %scevgep708.epil = getelementptr i8, ptr %499, i64 %491
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(1) %scevgep708.epil, i8 0, i64 %497, i1 false), !tbaa !49
  %500 = getelementptr inbounds ptr, ptr %365, i64 %indvar.unr
  %501 = load ptr, ptr %500, align 8, !tbaa !74
  store double 0.000000e+00, ptr %501, align 8, !tbaa !49
  br label %.preheader474

.preheader474:                                    ; preds = %.preheader475.epil, %.preheader474.loopexit.unr-lcssa, %.preheader476
  %502 = icmp sgt i32 %358, 0
  br i1 %502, label %.lr.ph569, label %.preheader471

.lr.ph569:                                        ; preds = %.preheader474
  %503 = getelementptr inbounds i8, ptr %0, i64 1008
  %504 = getelementptr inbounds i8, ptr %0, i64 1000
  %505 = getelementptr inbounds i8, ptr %0, i64 1016
  %506 = getelementptr inbounds i8, ptr %0, i64 1032
  %.pre812 = load i32, ptr %359, align 4
  br label %512

.preheader471:                                    ; preds = %.loopexit473, %.preheader474
  %507 = phi i32 [ %360, %.preheader474 ], [ %564, %.loopexit473 ]
  %508 = icmp sgt i32 %507, 0
  br i1 %508, label %.lr.ph574, label %._crit_edge586

.lr.ph574:                                        ; preds = %.preheader471
  %509 = getelementptr inbounds i8, ptr %0, i64 1016
  %510 = load ptr, ptr %509, align 8
  %511 = zext nneg i32 %507 to i64
  %wide.trip.count734 = zext nneg i32 %507 to i64
  br label %572

512:                                              ; preds = %.lr.ph569, %.loopexit473
  %513 = phi i32 [ %358, %.lr.ph569 ], [ %563, %.loopexit473 ]
  %514 = phi i32 [ %.pre812, %.lr.ph569 ], [ %564, %.loopexit473 ]
  %indvars.iv721 = phi i64 [ 0, %.lr.ph569 ], [ %indvars.iv.next722, %.loopexit473 ]
  %515 = load ptr, ptr %503, align 8, !tbaa !47
  %516 = getelementptr inbounds double, ptr %515, i64 %indvars.iv721
  %517 = load double, ptr %516, align 8, !tbaa !49
  %518 = fcmp ogt double %517, 1.000000e-13
  %519 = icmp sgt i32 %514, 0
  %or.cond639 = select i1 %518, i1 %519, i1 false
  br i1 %or.cond639, label %.lr.ph566.preheader, label %.loopexit473

.lr.ph566.preheader:                              ; preds = %512
  %520 = trunc nuw nsw i64 %indvars.iv721 to i32
  br label %.lr.ph566

.lr.ph566:                                        ; preds = %.lr.ph566.preheader, %.loopexit983
  %indvars.iv715 = phi i64 [ 0, %.lr.ph566.preheader ], [ %indvars.iv.next716, %.loopexit983 ]
  %521 = phi i32 [ %514, %.lr.ph566.preheader ], [ %560, %.loopexit983 ]
  %522 = add nuw i64 %indvars.iv715, 1
  %523 = load ptr, ptr %504, align 8, !tbaa !71
  %524 = getelementptr inbounds ptr, ptr %523, i64 %indvars.iv721
  %525 = load ptr, ptr %524, align 8, !tbaa !74
  %526 = getelementptr inbounds double, ptr %525, i64 %indvars.iv715
  %527 = load double, ptr %526, align 8, !tbaa !49
  %528 = fmul double %517, %527
  %529 = load ptr, ptr %505, align 8, !tbaa !72
  %530 = getelementptr inbounds ptr, ptr %529, i64 %indvars.iv715
  %531 = load ptr, ptr %530, align 8, !tbaa !74
  %532 = sext i32 %521 to i64
  %smax908 = call i64 @llvm.smax.i64(i64 %522, i64 %532)
  %533 = sub i64 %smax908, %indvars.iv715
  %min.iters.check911 = icmp ult i64 %533, 4
  br i1 %min.iters.check911, label %scalar.ph910.preheader, label %vector.memcheck

vector.memcheck:                                  ; preds = %.lr.ph566
  %534 = xor i64 %indvars.iv715, -1
  %535 = add nuw i64 %indvars.iv715, 1
  %536 = shl nuw nsw i64 %indvars.iv715, 3
  %537 = add nuw i64 %536, 8
  %scevgep904 = getelementptr i8, ptr %531, i64 %536
  %smax = call i64 @llvm.smax.i64(i64 %535, i64 %532)
  %538 = add i64 %smax, %534
  %539 = shl nsw i64 %538, 3
  %540 = add i64 %537, %539
  %scevgep905 = getelementptr i8, ptr %531, i64 %540
  %scevgep906 = getelementptr i8, ptr %525, i64 %536
  %scevgep907 = getelementptr i8, ptr %525, i64 %540
  %bound0 = icmp ult ptr %scevgep904, %scevgep907
  %bound1 = icmp ult ptr %scevgep906, %scevgep905
  %found.conflict = and i1 %bound0, %bound1
  br i1 %found.conflict, label %scalar.ph910.preheader, label %vector.ph912

vector.ph912:                                     ; preds = %vector.memcheck
  %n.vec914 = and i64 %533, -4
  %ind.end = add i64 %indvars.iv715, %n.vec914
  %broadcast.splatinsert922 = insertelement <2 x double> poison, double %528, i64 0
  %broadcast.splat923 = shufflevector <2 x double> %broadcast.splatinsert922, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body916

vector.body916:                                   ; preds = %vector.body916, %vector.ph912
  %index917 = phi i64 [ 0, %vector.ph912 ], [ %index.next924, %vector.body916 ]
  %offset.idx = add i64 %indvars.iv715, %index917
  %541 = getelementptr inbounds double, ptr %525, i64 %offset.idx
  %542 = getelementptr inbounds i8, ptr %541, i64 16
  %wide.load918 = load <2 x double>, ptr %541, align 8, !tbaa !49, !alias.scope !86
  %wide.load919 = load <2 x double>, ptr %542, align 8, !tbaa !49, !alias.scope !86
  %543 = getelementptr inbounds double, ptr %531, i64 %offset.idx
  %544 = getelementptr inbounds i8, ptr %543, i64 16
  %wide.load920 = load <2 x double>, ptr %543, align 8, !tbaa !49, !alias.scope !89, !noalias !86
  %wide.load921 = load <2 x double>, ptr %544, align 8, !tbaa !49, !alias.scope !89, !noalias !86
  %545 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat923, <2 x double> %wide.load918, <2 x double> %wide.load920)
  %546 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat923, <2 x double> %wide.load919, <2 x double> %wide.load921)
  store <2 x double> %545, ptr %543, align 8, !tbaa !49, !alias.scope !89, !noalias !86
  store <2 x double> %546, ptr %544, align 8, !tbaa !49, !alias.scope !89, !noalias !86
  %index.next924 = add nuw i64 %index917, 4
  %547 = icmp eq i64 %index.next924, %n.vec914
  br i1 %547, label %middle.block909, label %vector.body916, !llvm.loop !91

middle.block909:                                  ; preds = %vector.body916
  %cmp.n925 = icmp eq i64 %533, %n.vec914
  br i1 %cmp.n925, label %.loopexit983, label %scalar.ph910.preheader

scalar.ph910.preheader:                           ; preds = %middle.block909, %vector.memcheck, %.lr.ph566
  %indvars.iv717.ph = phi i64 [ %indvars.iv715, %vector.memcheck ], [ %indvars.iv715, %.lr.ph566 ], [ %ind.end, %middle.block909 ]
  br label %scalar.ph910

scalar.ph910:                                     ; preds = %scalar.ph910.preheader, %scalar.ph910
  %indvars.iv717 = phi i64 [ %indvars.iv.next718, %scalar.ph910 ], [ %indvars.iv717.ph, %scalar.ph910.preheader ]
  %548 = getelementptr inbounds double, ptr %525, i64 %indvars.iv717
  %549 = load double, ptr %548, align 8, !tbaa !49
  %550 = getelementptr inbounds double, ptr %531, i64 %indvars.iv717
  %551 = load double, ptr %550, align 8, !tbaa !49
  %552 = call double @llvm.fmuladd.f64(double %528, double %549, double %551)
  store double %552, ptr %550, align 8, !tbaa !49
  %indvars.iv.next718 = add nuw nsw i64 %indvars.iv717, 1
  %553 = icmp slt i64 %indvars.iv.next718, %532
  br i1 %553, label %scalar.ph910, label %.loopexit983, !llvm.loop !92

.loopexit983:                                     ; preds = %scalar.ph910, %middle.block909
  %554 = call noundef double @_ZNK7SGTELIB6Matrix3getEii(ptr noundef nonnull align 8 dereferenceable(56) %24, i32 noundef %520, i32 noundef 0)
  %555 = load ptr, ptr %506, align 8, !tbaa !73
  %556 = getelementptr inbounds ptr, ptr %555, i64 %indvars.iv715
  %557 = load ptr, ptr %556, align 8, !tbaa !74
  %558 = load double, ptr %557, align 8, !tbaa !49
  %559 = call double @llvm.fmuladd.f64(double %528, double %554, double %558)
  store double %559, ptr %557, align 8, !tbaa !49
  %indvars.iv.next716 = add nuw nsw i64 %indvars.iv715, 1
  %560 = load i32, ptr %359, align 4
  %561 = sext i32 %560 to i64
  %562 = icmp slt i64 %indvars.iv.next716, %561
  br i1 %562, label %.lr.ph566, label %.loopexit473.loopexit, !llvm.loop !93

.loopexit473.loopexit:                            ; preds = %.loopexit983
  %.pre813 = load i32, ptr %55, align 8, !tbaa !46
  br label %.loopexit473

.loopexit473:                                     ; preds = %.loopexit473.loopexit, %512
  %563 = phi i32 [ %.pre813, %.loopexit473.loopexit ], [ %513, %512 ]
  %564 = phi i32 [ %560, %.loopexit473.loopexit ], [ %514, %512 ]
  %indvars.iv.next722 = add nuw nsw i64 %indvars.iv721, 1
  %565 = sext i32 %563 to i64
  %566 = icmp slt i64 %indvars.iv.next722, %565
  br i1 %566, label %512, label %.preheader471, !llvm.loop !94

.loopexit470:                                     ; preds = %576, %572
  %indvars.iv.next725 = add nuw nsw i64 %indvars.iv724, 1
  %exitcond735.not = icmp eq i64 %indvars.iv.next732, %wide.trip.count734
  br i1 %exitcond735.not, label %.preheader469, label %572, !llvm.loop !95

.preheader469:                                    ; preds = %.loopexit470
  %.not840 = icmp eq i32 %507, 1
  br i1 %.not840, label %.preheader468, label %.lr.ph577

.lr.ph577:                                        ; preds = %.preheader469
  %567 = getelementptr inbounds i8, ptr %0, i64 1016
  %568 = load ptr, ptr %567, align 8, !tbaa !72
  %569 = add nsw i64 %wide.trip.count734, -1
  %570 = add nsw i64 %wide.trip.count734, -2
  %xtraiter1009 = and i64 %569, 3
  %571 = icmp ult i64 %570, 3
  br i1 %571, label %.preheader468.loopexit.unr-lcssa, label %.lr.ph577.new

.lr.ph577.new:                                    ; preds = %.lr.ph577
  %unroll_iter1011 = and i64 %569, -4
  br label %592

572:                                              ; preds = %.lr.ph574, %.loopexit470
  %indvars.iv731 = phi i64 [ 0, %.lr.ph574 ], [ %indvars.iv.next732, %.loopexit470 ]
  %indvars.iv724 = phi i64 [ 1, %.lr.ph574 ], [ %indvars.iv.next725, %.loopexit470 ]
  %indvars.iv.next732 = add nuw nsw i64 %indvars.iv731, 1
  %573 = icmp ult i64 %indvars.iv.next732, %511
  br i1 %573, label %.lr.ph572, label %.loopexit470

.lr.ph572:                                        ; preds = %572
  %574 = getelementptr inbounds ptr, ptr %510, i64 %indvars.iv731
  %575 = load ptr, ptr %574, align 8, !tbaa !74
  br label %576

576:                                              ; preds = %.lr.ph572, %576
  %indvars.iv726 = phi i64 [ %indvars.iv724, %.lr.ph572 ], [ %indvars.iv.next727, %576 ]
  %577 = getelementptr inbounds double, ptr %575, i64 %indvars.iv726
  %578 = load double, ptr %577, align 8, !tbaa !49
  %579 = getelementptr inbounds ptr, ptr %510, i64 %indvars.iv726
  %580 = load ptr, ptr %579, align 8, !tbaa !74
  %581 = getelementptr inbounds double, ptr %580, i64 %indvars.iv731
  store double %578, ptr %581, align 8, !tbaa !49
  %indvars.iv.next727 = add nuw nsw i64 %indvars.iv726, 1
  %exitcond730.not = icmp eq i64 %indvars.iv.next727, %wide.trip.count734
  br i1 %exitcond730.not, label %.loopexit470, label %576, !llvm.loop !96

.preheader468.loopexit.unr-lcssa:                 ; preds = %592, %.lr.ph577
  %indvars.iv736.unr = phi i64 [ 1, %.lr.ph577 ], [ %indvars.iv.next737.3, %592 ]
  %lcmp.mod1010.not = icmp eq i64 %xtraiter1009, 0
  br i1 %lcmp.mod1010.not, label %.preheader468, label %.epil.preheader

.epil.preheader:                                  ; preds = %.preheader468.loopexit.unr-lcssa, %.epil.preheader
  %indvars.iv736.epil = phi i64 [ %indvars.iv.next737.epil, %.epil.preheader ], [ %indvars.iv736.unr, %.preheader468.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.epil.preheader ], [ 0, %.preheader468.loopexit.unr-lcssa ]
  %582 = getelementptr inbounds ptr, ptr %568, i64 %indvars.iv736.epil
  %583 = load ptr, ptr %582, align 8, !tbaa !74
  %584 = getelementptr inbounds double, ptr %583, i64 %indvars.iv736.epil
  %585 = load double, ptr %584, align 8, !tbaa !49
  %586 = fadd double %313, %585
  store double %586, ptr %584, align 8, !tbaa !49
  %indvars.iv.next737.epil = add nuw nsw i64 %indvars.iv736.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter1009
  br i1 %epil.iter.cmp.not, label %.preheader468, label %.epil.preheader, !llvm.loop !97

.preheader468:                                    ; preds = %.preheader468.loopexit.unr-lcssa, %.epil.preheader, %.preheader469
  br i1 %508, label %.preheader467.lr.ph, label %._crit_edge586

.preheader467.lr.ph:                              ; preds = %.preheader468
  %587 = getelementptr inbounds i8, ptr %0, i64 1016
  %588 = load ptr, ptr %587, align 8
  %589 = getelementptr inbounds i8, ptr %0, i64 1040
  %590 = load ptr, ptr %589, align 8
  %wide.trip.count749 = zext nneg i32 %507 to i64
  %xtraiter1014 = and i64 %wide.trip.count734, 3
  %591 = icmp ult i32 %507, 4
  %unroll_iter1018 = and i64 %wide.trip.count734, 2147483644
  %lcmp.mod1016.not = icmp eq i64 %xtraiter1014, 0
  br label %.lr.ph580

592:                                              ; preds = %592, %.lr.ph577.new
  %indvars.iv736 = phi i64 [ 1, %.lr.ph577.new ], [ %indvars.iv.next737.3, %592 ]
  %niter1012 = phi i64 [ 0, %.lr.ph577.new ], [ %niter1012.next.3, %592 ]
  %593 = getelementptr inbounds ptr, ptr %568, i64 %indvars.iv736
  %594 = load ptr, ptr %593, align 8, !tbaa !74
  %595 = getelementptr inbounds double, ptr %594, i64 %indvars.iv736
  %596 = load double, ptr %595, align 8, !tbaa !49
  %597 = fadd double %313, %596
  store double %597, ptr %595, align 8, !tbaa !49
  %indvars.iv.next737 = add nuw nsw i64 %indvars.iv736, 1
  %598 = getelementptr inbounds ptr, ptr %568, i64 %indvars.iv.next737
  %599 = load ptr, ptr %598, align 8, !tbaa !74
  %600 = getelementptr inbounds double, ptr %599, i64 %indvars.iv.next737
  %601 = load double, ptr %600, align 8, !tbaa !49
  %602 = fadd double %313, %601
  store double %602, ptr %600, align 8, !tbaa !49
  %indvars.iv.next737.1 = add nuw nsw i64 %indvars.iv736, 2
  %603 = getelementptr inbounds ptr, ptr %568, i64 %indvars.iv.next737.1
  %604 = load ptr, ptr %603, align 8, !tbaa !74
  %605 = getelementptr inbounds double, ptr %604, i64 %indvars.iv.next737.1
  %606 = load double, ptr %605, align 8, !tbaa !49
  %607 = fadd double %313, %606
  store double %607, ptr %605, align 8, !tbaa !49
  %indvars.iv.next737.2 = add nuw nsw i64 %indvars.iv736, 3
  %608 = getelementptr inbounds ptr, ptr %568, i64 %indvars.iv.next737.2
  %609 = load ptr, ptr %608, align 8, !tbaa !74
  %610 = getelementptr inbounds double, ptr %609, i64 %indvars.iv.next737.2
  %611 = load double, ptr %610, align 8, !tbaa !49
  %612 = fadd double %313, %611
  store double %612, ptr %610, align 8, !tbaa !49
  %indvars.iv.next737.3 = add nuw nsw i64 %indvars.iv736, 4
  %niter1012.next.3 = add i64 %niter1012, 4
  %niter1012.ncmp.3 = icmp eq i64 %niter1012.next.3, %unroll_iter1011
  br i1 %niter1012.ncmp.3, label %.preheader468.loopexit.unr-lcssa, label %592, !llvm.loop !99

.lr.ph580:                                        ; preds = %._crit_edge581, %.preheader467.lr.ph
  %indvars.iv746 = phi i64 [ 0, %.preheader467.lr.ph ], [ %indvars.iv.next747, %._crit_edge581 ]
  %.0361584 = phi double [ -1.000000e+00, %.preheader467.lr.ph ], [ 0.000000e+00, %._crit_edge581 ]
  %.0363583 = phi double [ 0.000000e+00, %.preheader467.lr.ph ], [ %640, %._crit_edge581 ]
  %613 = getelementptr inbounds ptr, ptr %588, i64 %indvars.iv746
  %614 = load ptr, ptr %613, align 8, !tbaa !74
  br i1 %591, label %._crit_edge581.unr-lcssa, label %.lr.ph580.new

.lr.ph580.new:                                    ; preds = %.lr.ph580, %.lr.ph580.new
  %indvars.iv741 = phi i64 [ %indvars.iv.next742.3, %.lr.ph580.new ], [ 0, %.lr.ph580 ]
  %.1362578 = phi double [ %634, %.lr.ph580.new ], [ %.0361584, %.lr.ph580 ]
  %niter1019 = phi i64 [ %niter1019.next.3, %.lr.ph580.new ], [ 0, %.lr.ph580 ]
  %615 = getelementptr inbounds double, ptr %614, i64 %indvars.iv741
  %616 = load double, ptr %615, align 8, !tbaa !49
  %617 = getelementptr inbounds double, ptr %590, i64 %indvars.iv741
  %618 = load double, ptr %617, align 8, !tbaa !49
  %619 = call double @llvm.fmuladd.f64(double %616, double %618, double %.1362578)
  %indvars.iv.next742 = or disjoint i64 %indvars.iv741, 1
  %620 = getelementptr inbounds double, ptr %614, i64 %indvars.iv.next742
  %621 = load double, ptr %620, align 8, !tbaa !49
  %622 = getelementptr inbounds double, ptr %590, i64 %indvars.iv.next742
  %623 = load double, ptr %622, align 8, !tbaa !49
  %624 = call double @llvm.fmuladd.f64(double %621, double %623, double %619)
  %indvars.iv.next742.1 = or disjoint i64 %indvars.iv741, 2
  %625 = getelementptr inbounds double, ptr %614, i64 %indvars.iv.next742.1
  %626 = load double, ptr %625, align 8, !tbaa !49
  %627 = getelementptr inbounds double, ptr %590, i64 %indvars.iv.next742.1
  %628 = load double, ptr %627, align 8, !tbaa !49
  %629 = call double @llvm.fmuladd.f64(double %626, double %628, double %624)
  %indvars.iv.next742.2 = or disjoint i64 %indvars.iv741, 3
  %630 = getelementptr inbounds double, ptr %614, i64 %indvars.iv.next742.2
  %631 = load double, ptr %630, align 8, !tbaa !49
  %632 = getelementptr inbounds double, ptr %590, i64 %indvars.iv.next742.2
  %633 = load double, ptr %632, align 8, !tbaa !49
  %634 = call double @llvm.fmuladd.f64(double %631, double %633, double %629)
  %indvars.iv.next742.3 = add nuw nsw i64 %indvars.iv741, 4
  %niter1019.next.3 = add i64 %niter1019, 4
  %niter1019.ncmp.3 = icmp eq i64 %niter1019.next.3, %unroll_iter1018
  br i1 %niter1019.ncmp.3, label %._crit_edge581.unr-lcssa, label %.lr.ph580.new, !llvm.loop !100

._crit_edge581.unr-lcssa:                         ; preds = %.lr.ph580.new, %.lr.ph580
  %.lcssa992.ph = phi double [ poison, %.lr.ph580 ], [ %634, %.lr.ph580.new ]
  %indvars.iv741.unr = phi i64 [ 0, %.lr.ph580 ], [ %indvars.iv.next742.3, %.lr.ph580.new ]
  %.1362578.unr = phi double [ %.0361584, %.lr.ph580 ], [ %634, %.lr.ph580.new ]
  br i1 %lcmp.mod1016.not, label %._crit_edge581, label %.epil.preheader1013

.epil.preheader1013:                              ; preds = %._crit_edge581.unr-lcssa, %.epil.preheader1013
  %indvars.iv741.epil = phi i64 [ %indvars.iv.next742.epil, %.epil.preheader1013 ], [ %indvars.iv741.unr, %._crit_edge581.unr-lcssa ]
  %.1362578.epil = phi double [ %639, %.epil.preheader1013 ], [ %.1362578.unr, %._crit_edge581.unr-lcssa ]
  %epil.iter1015 = phi i64 [ %epil.iter1015.next, %.epil.preheader1013 ], [ 0, %._crit_edge581.unr-lcssa ]
  %635 = getelementptr inbounds double, ptr %614, i64 %indvars.iv741.epil
  %636 = load double, ptr %635, align 8, !tbaa !49
  %637 = getelementptr inbounds double, ptr %590, i64 %indvars.iv741.epil
  %638 = load double, ptr %637, align 8, !tbaa !49
  %639 = call double @llvm.fmuladd.f64(double %636, double %638, double %.1362578.epil)
  %indvars.iv.next742.epil = add nuw nsw i64 %indvars.iv741.epil, 1
  %epil.iter1015.next = add i64 %epil.iter1015, 1
  %epil.iter1015.cmp.not = icmp eq i64 %epil.iter1015.next, %xtraiter1014
  br i1 %epil.iter1015.cmp.not, label %._crit_edge581, label %.epil.preheader1013, !llvm.loop !101

._crit_edge581:                                   ; preds = %.epil.preheader1013, %._crit_edge581.unr-lcssa
  %.lcssa992 = phi double [ %.lcssa992.ph, %._crit_edge581.unr-lcssa ], [ %639, %.epil.preheader1013 ]
  %640 = call double @llvm.fmuladd.f64(double %.lcssa992, double %.lcssa992, double %.0363583)
  %indvars.iv.next747 = add nuw nsw i64 %indvars.iv746, 1
  %exitcond750.not = icmp eq i64 %indvars.iv.next747, %wide.trip.count749
  br i1 %exitcond750.not, label %._crit_edge586, label %.lr.ph580, !llvm.loop !102

._crit_edge586:                                   ; preds = %._crit_edge581, %.preheader471, %.preheader468
  %.0363.lcssa = phi double [ 0.000000e+00, %.preheader468 ], [ 0.000000e+00, %.preheader471 ], [ %640, %._crit_edge581 ]
  %641 = call double @sqrt(double noundef %.0363.lcssa) #13
  %642 = fcmp uge double %641, 1.000000e-04
  br i1 %642, label %.critedge448, label %643

643:                                              ; preds = %._crit_edge586
  %644 = load i32, ptr %359, align 4, !tbaa !52
  %645 = sext i32 %644 to i64
  %646 = icmp slt i32 %644, 0
  %647 = shl nsw i64 %645, 3
  %648 = select i1 %646, i64 -1, i64 %647
  %649 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %648) #15
          to label %650 unwind label %695

650:                                              ; preds = %643
  %651 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %648) #15
          to label %652 unwind label %697

652:                                              ; preds = %650
  %653 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %648) #15
          to label %.preheader466 unwind label %699

.preheader466:                                    ; preds = %652
  %654 = icmp sgt i32 %644, 0
  br i1 %654, label %.preheader465.lr.ph, label %._crit_edge624

.preheader465.lr.ph:                              ; preds = %.preheader466
  %655 = getelementptr inbounds i8, ptr %0, i64 1016
  %656 = load ptr, ptr %655, align 8
  %657 = getelementptr inbounds i8, ptr %0, i64 1040
  %658 = load ptr, ptr %657, align 8
  %wide.trip.count759 = zext nneg i32 %644 to i64
  %xtraiter1021 = and i64 %wide.trip.count759, 3
  %659 = icmp ult i32 %644, 4
  %unroll_iter1025 = and i64 %wide.trip.count759, 2147483644
  %lcmp.mod1023.not = icmp eq i64 %xtraiter1021, 0
  br label %.lr.ph590

.lr.ph590:                                        ; preds = %._crit_edge591, %.preheader465.lr.ph
  %indvars.iv756 = phi i64 [ 0, %.preheader465.lr.ph ], [ %indvars.iv.next757, %._crit_edge591 ]
  %.0321595 = phi double [ 0.000000e+00, %.preheader465.lr.ph ], [ %709, %._crit_edge591 ]
  %.0376593 = phi double [ 1.000000e+00, %.preheader465.lr.ph ], [ 0.000000e+00, %._crit_edge591 ]
  %660 = getelementptr inbounds ptr, ptr %656, i64 %indvars.iv756
  %661 = load ptr, ptr %660, align 8, !tbaa !74
  br i1 %659, label %._crit_edge591.unr-lcssa, label %.lr.ph590.new

.preheader464:                                    ; preds = %._crit_edge591
  %662 = fcmp ogt double %709, 0x3D719799812DEA11
  br i1 %662, label %.preheader463.lr.ph, label %._crit_edge624

.preheader463.lr.ph:                              ; preds = %.preheader464
  %663 = getelementptr inbounds i8, ptr %0, i64 1016
  %664 = getelementptr inbounds i8, ptr %0, i64 1040
  %665 = load ptr, ptr %664, align 8
  %wide.trip.count769 = zext nneg i32 %644 to i64
  %wide.trip.count779 = zext nneg i32 %644 to i64
  %wide.trip.count784 = zext nneg i32 %644 to i64
  %wide.trip.count794 = zext nneg i32 %644 to i64
  %666 = shl nuw nsw i64 %wide.trip.count759, 3
  %scevgep961 = getelementptr i8, ptr %665, i64 %666
  %scevgep962 = getelementptr i8, ptr %651, i64 %666
  %xtraiter1028 = and i64 %wide.trip.count759, 3
  %667 = icmp ult i32 %644, 4
  %unroll_iter1032 = and i64 %wide.trip.count759, 2147483644
  %lcmp.mod1030.not = icmp eq i64 %xtraiter1028, 0
  %xtraiter1034 = and i64 %wide.trip.count759, 3
  %668 = icmp ult i32 %644, 4
  %unroll_iter1038 = and i64 %wide.trip.count759, 2147483644
  %lcmp.mod1036.not = icmp eq i64 %xtraiter1034, 0
  %min.iters.check968 = icmp ult i32 %644, 4
  %bound0963 = icmp ult ptr %665, %scevgep962
  %bound1964 = icmp ult ptr %651, %scevgep961
  %found.conflict965 = and i1 %bound0963, %bound1964
  %n.vec971 = and i64 %wide.trip.count759, 2147483644
  %cmp.n982 = icmp eq i64 %n.vec971, %wide.trip.count759
  %xtraiter1040 = and i64 %wide.trip.count759, 1
  %lcmp.mod1041.not = icmp eq i64 %xtraiter1040, 0
  %669 = add nsw i64 %wide.trip.count759, -1
  %min.iters.check945 = icmp ult i32 %644, 4
  %n.vec948 = and i64 %wide.trip.count759, 2147483644
  %cmp.n959 = icmp eq i64 %n.vec948, %wide.trip.count759
  %xtraiter1042 = and i64 %wide.trip.count759, 3
  %670 = icmp ult i32 %644, 4
  %unroll_iter1046 = and i64 %wide.trip.count759, 2147483644
  %lcmp.mod1044.not = icmp eq i64 %xtraiter1042, 0
  %min.iters.check928 = icmp ult i32 %644, 4
  %n.vec931 = and i64 %wide.trip.count759, 2147483644
  %cmp.n942 = icmp eq i64 %n.vec931, %wide.trip.count759
  br label %.preheader463

.lr.ph590.new:                                    ; preds = %.lr.ph590, %.lr.ph590.new
  %indvars.iv751 = phi i64 [ %indvars.iv.next752.3, %.lr.ph590.new ], [ 0, %.lr.ph590 ]
  %.1377588 = phi double [ %694, %.lr.ph590.new ], [ %.0376593, %.lr.ph590 ]
  %niter1026 = phi i64 [ %niter1026.next.3, %.lr.ph590.new ], [ 0, %.lr.ph590 ]
  %671 = getelementptr inbounds double, ptr %661, i64 %indvars.iv751
  %672 = load double, ptr %671, align 8, !tbaa !49
  %673 = getelementptr inbounds double, ptr %658, i64 %indvars.iv751
  %674 = load double, ptr %673, align 8, !tbaa !49
  %675 = fneg double %672
  %676 = call double @llvm.fmuladd.f64(double %675, double %674, double %.1377588)
  %indvars.iv.next752 = or disjoint i64 %indvars.iv751, 1
  %677 = getelementptr inbounds double, ptr %661, i64 %indvars.iv.next752
  %678 = load double, ptr %677, align 8, !tbaa !49
  %679 = getelementptr inbounds double, ptr %658, i64 %indvars.iv.next752
  %680 = load double, ptr %679, align 8, !tbaa !49
  %681 = fneg double %678
  %682 = call double @llvm.fmuladd.f64(double %681, double %680, double %676)
  %indvars.iv.next752.1 = or disjoint i64 %indvars.iv751, 2
  %683 = getelementptr inbounds double, ptr %661, i64 %indvars.iv.next752.1
  %684 = load double, ptr %683, align 8, !tbaa !49
  %685 = getelementptr inbounds double, ptr %658, i64 %indvars.iv.next752.1
  %686 = load double, ptr %685, align 8, !tbaa !49
  %687 = fneg double %684
  %688 = call double @llvm.fmuladd.f64(double %687, double %686, double %682)
  %indvars.iv.next752.2 = or disjoint i64 %indvars.iv751, 3
  %689 = getelementptr inbounds double, ptr %661, i64 %indvars.iv.next752.2
  %690 = load double, ptr %689, align 8, !tbaa !49
  %691 = getelementptr inbounds double, ptr %658, i64 %indvars.iv.next752.2
  %692 = load double, ptr %691, align 8, !tbaa !49
  %693 = fneg double %690
  %694 = call double @llvm.fmuladd.f64(double %693, double %692, double %688)
  %indvars.iv.next752.3 = add nuw nsw i64 %indvars.iv751, 4
  %niter1026.next.3 = add i64 %niter1026, 4
  %niter1026.ncmp.3 = icmp eq i64 %niter1026.next.3, %unroll_iter1025
  br i1 %niter1026.ncmp.3, label %._crit_edge591.unr-lcssa, label %.lr.ph590.new, !llvm.loop !103

695:                                              ; preds = %643
  %696 = landingpad { ptr, i32 }
          cleanup
  br label %933

697:                                              ; preds = %650
  %698 = landingpad { ptr, i32 }
          cleanup
  br label %933

699:                                              ; preds = %652
  %700 = landingpad { ptr, i32 }
          cleanup
  br label %933

._crit_edge591.unr-lcssa:                         ; preds = %.lr.ph590.new, %.lr.ph590
  %.lcssa990.ph = phi double [ poison, %.lr.ph590 ], [ %694, %.lr.ph590.new ]
  %indvars.iv751.unr = phi i64 [ 0, %.lr.ph590 ], [ %indvars.iv.next752.3, %.lr.ph590.new ]
  %.1377588.unr = phi double [ %.0376593, %.lr.ph590 ], [ %694, %.lr.ph590.new ]
  br i1 %lcmp.mod1023.not, label %._crit_edge591, label %.epil.preheader1020

.epil.preheader1020:                              ; preds = %._crit_edge591.unr-lcssa, %.epil.preheader1020
  %indvars.iv751.epil = phi i64 [ %indvars.iv.next752.epil, %.epil.preheader1020 ], [ %indvars.iv751.unr, %._crit_edge591.unr-lcssa ]
  %.1377588.epil = phi double [ %706, %.epil.preheader1020 ], [ %.1377588.unr, %._crit_edge591.unr-lcssa ]
  %epil.iter1022 = phi i64 [ %epil.iter1022.next, %.epil.preheader1020 ], [ 0, %._crit_edge591.unr-lcssa ]
  %701 = getelementptr inbounds double, ptr %661, i64 %indvars.iv751.epil
  %702 = load double, ptr %701, align 8, !tbaa !49
  %703 = getelementptr inbounds double, ptr %658, i64 %indvars.iv751.epil
  %704 = load double, ptr %703, align 8, !tbaa !49
  %705 = fneg double %702
  %706 = call double @llvm.fmuladd.f64(double %705, double %704, double %.1377588.epil)
  %indvars.iv.next752.epil = add nuw nsw i64 %indvars.iv751.epil, 1
  %epil.iter1022.next = add i64 %epil.iter1022, 1
  %epil.iter1022.cmp.not = icmp eq i64 %epil.iter1022.next, %xtraiter1021
  br i1 %epil.iter1022.cmp.not, label %._crit_edge591, label %.epil.preheader1020, !llvm.loop !104

._crit_edge591:                                   ; preds = %.epil.preheader1020, %._crit_edge591.unr-lcssa
  %.lcssa990 = phi double [ %.lcssa990.ph, %._crit_edge591.unr-lcssa ], [ %706, %.epil.preheader1020 ]
  %707 = getelementptr inbounds double, ptr %649, i64 %indvars.iv756
  store double %.lcssa990, ptr %707, align 8, !tbaa !49
  %708 = getelementptr inbounds double, ptr %651, i64 %indvars.iv756
  store double %.lcssa990, ptr %708, align 8, !tbaa !49
  %709 = call double @llvm.fmuladd.f64(double %.lcssa990, double %.lcssa990, double %.0321595)
  %indvars.iv.next757 = add nuw nsw i64 %indvars.iv756, 1
  %exitcond760.not = icmp eq i64 %indvars.iv.next757, %wide.trip.count759
  br i1 %exitcond760.not, label %.preheader464, label %.lr.ph590, !llvm.loop !105

.preheader463:                                    ; preds = %.preheader463.lr.ph, %._crit_edge621
  %.1322623 = phi double [ %709, %.preheader463.lr.ph ], [ %.lcssa989, %._crit_edge621 ]
  %.0364622 = phi i32 [ 0, %.preheader463.lr.ph ], [ %834, %._crit_edge621 ]
  br i1 %654, label %.preheader459.lr.ph, label %._crit_edge624

.preheader459.lr.ph:                              ; preds = %.preheader463
  %710 = load ptr, ptr %663, align 8
  br label %.preheader459.us

.preheader459.us:                                 ; preds = %._crit_edge600.us, %.preheader459.lr.ph
  %indvars.iv766 = phi i64 [ %indvars.iv.next767, %._crit_edge600.us ], [ 0, %.preheader459.lr.ph ]
  %711 = getelementptr inbounds ptr, ptr %710, i64 %indvars.iv766
  %712 = load ptr, ptr %711, align 8, !tbaa !74
  br i1 %667, label %._crit_edge600.us.unr-lcssa, label %.preheader459.us.new

.preheader459.us.new:                             ; preds = %.preheader459.us, %.preheader459.us.new
  %indvars.iv761 = phi i64 [ %indvars.iv.next762.3, %.preheader459.us.new ], [ 0, %.preheader459.us ]
  %.2378597.us = phi double [ %732, %.preheader459.us.new ], [ 0.000000e+00, %.preheader459.us ]
  %niter1033 = phi i64 [ %niter1033.next.3, %.preheader459.us.new ], [ 0, %.preheader459.us ]
  %713 = getelementptr inbounds double, ptr %712, i64 %indvars.iv761
  %714 = load double, ptr %713, align 8, !tbaa !49
  %715 = getelementptr inbounds double, ptr %651, i64 %indvars.iv761
  %716 = load double, ptr %715, align 8, !tbaa !49
  %717 = call double @llvm.fmuladd.f64(double %714, double %716, double %.2378597.us)
  %indvars.iv.next762 = or disjoint i64 %indvars.iv761, 1
  %718 = getelementptr inbounds double, ptr %712, i64 %indvars.iv.next762
  %719 = load double, ptr %718, align 8, !tbaa !49
  %720 = getelementptr inbounds double, ptr %651, i64 %indvars.iv.next762
  %721 = load double, ptr %720, align 8, !tbaa !49
  %722 = call double @llvm.fmuladd.f64(double %719, double %721, double %717)
  %indvars.iv.next762.1 = or disjoint i64 %indvars.iv761, 2
  %723 = getelementptr inbounds double, ptr %712, i64 %indvars.iv.next762.1
  %724 = load double, ptr %723, align 8, !tbaa !49
  %725 = getelementptr inbounds double, ptr %651, i64 %indvars.iv.next762.1
  %726 = load double, ptr %725, align 8, !tbaa !49
  %727 = call double @llvm.fmuladd.f64(double %724, double %726, double %722)
  %indvars.iv.next762.2 = or disjoint i64 %indvars.iv761, 3
  %728 = getelementptr inbounds double, ptr %712, i64 %indvars.iv.next762.2
  %729 = load double, ptr %728, align 8, !tbaa !49
  %730 = getelementptr inbounds double, ptr %651, i64 %indvars.iv.next762.2
  %731 = load double, ptr %730, align 8, !tbaa !49
  %732 = call double @llvm.fmuladd.f64(double %729, double %731, double %727)
  %indvars.iv.next762.3 = add nuw nsw i64 %indvars.iv761, 4
  %niter1033.next.3 = add i64 %niter1033, 4
  %niter1033.ncmp.3 = icmp eq i64 %niter1033.next.3, %unroll_iter1032
  br i1 %niter1033.ncmp.3, label %._crit_edge600.us.unr-lcssa, label %.preheader459.us.new, !llvm.loop !106

._crit_edge600.us.unr-lcssa:                      ; preds = %.preheader459.us.new, %.preheader459.us
  %.lcssa987.ph = phi double [ poison, %.preheader459.us ], [ %732, %.preheader459.us.new ]
  %indvars.iv761.unr = phi i64 [ 0, %.preheader459.us ], [ %indvars.iv.next762.3, %.preheader459.us.new ]
  %.2378597.us.unr = phi double [ 0.000000e+00, %.preheader459.us ], [ %732, %.preheader459.us.new ]
  br i1 %lcmp.mod1030.not, label %._crit_edge600.us, label %.epil.preheader1027

.epil.preheader1027:                              ; preds = %._crit_edge600.us.unr-lcssa, %.epil.preheader1027
  %indvars.iv761.epil = phi i64 [ %indvars.iv.next762.epil, %.epil.preheader1027 ], [ %indvars.iv761.unr, %._crit_edge600.us.unr-lcssa ]
  %.2378597.us.epil = phi double [ %737, %.epil.preheader1027 ], [ %.2378597.us.unr, %._crit_edge600.us.unr-lcssa ]
  %epil.iter1029 = phi i64 [ %epil.iter1029.next, %.epil.preheader1027 ], [ 0, %._crit_edge600.us.unr-lcssa ]
  %733 = getelementptr inbounds double, ptr %712, i64 %indvars.iv761.epil
  %734 = load double, ptr %733, align 8, !tbaa !49
  %735 = getelementptr inbounds double, ptr %651, i64 %indvars.iv761.epil
  %736 = load double, ptr %735, align 8, !tbaa !49
  %737 = call double @llvm.fmuladd.f64(double %734, double %736, double %.2378597.us.epil)
  %indvars.iv.next762.epil = add nuw nsw i64 %indvars.iv761.epil, 1
  %epil.iter1029.next = add i64 %epil.iter1029, 1
  %epil.iter1029.cmp.not = icmp eq i64 %epil.iter1029.next, %xtraiter1028
  br i1 %epil.iter1029.cmp.not, label %._crit_edge600.us, label %.epil.preheader1027, !llvm.loop !107

._crit_edge600.us:                                ; preds = %.epil.preheader1027, %._crit_edge600.us.unr-lcssa
  %.lcssa987 = phi double [ %.lcssa987.ph, %._crit_edge600.us.unr-lcssa ], [ %737, %.epil.preheader1027 ]
  %738 = getelementptr inbounds double, ptr %653, i64 %indvars.iv766
  store double %.lcssa987, ptr %738, align 8, !tbaa !49
  %indvars.iv.next767 = add nuw nsw i64 %indvars.iv766, 1
  %exitcond770.not = icmp eq i64 %indvars.iv.next767, %wide.trip.count769
  br i1 %exitcond770.not, label %.preheader462, label %.preheader459.us, !llvm.loop !108

.preheader462:                                    ; preds = %._crit_edge600.us
  br i1 %654, label %.lr.ph605.preheader, label %._crit_edge624

.lr.ph605.preheader:                              ; preds = %.preheader462
  br i1 %668, label %._crit_edge606.unr-lcssa, label %.lr.ph605

.lr.ph605:                                        ; preds = %.lr.ph605.preheader, %.lr.ph605
  %indvars.iv771 = phi i64 [ %indvars.iv.next772.3, %.lr.ph605 ], [ 0, %.lr.ph605.preheader ]
  %.0282604 = phi double [ %758, %.lr.ph605 ], [ 0.000000e+00, %.lr.ph605.preheader ]
  %niter1039 = phi i64 [ %niter1039.next.3, %.lr.ph605 ], [ 0, %.lr.ph605.preheader ]
  %739 = getelementptr inbounds double, ptr %651, i64 %indvars.iv771
  %740 = load double, ptr %739, align 8, !tbaa !49
  %741 = getelementptr inbounds double, ptr %653, i64 %indvars.iv771
  %742 = load double, ptr %741, align 8, !tbaa !49
  %743 = call double @llvm.fmuladd.f64(double %740, double %742, double %.0282604)
  %indvars.iv.next772 = or disjoint i64 %indvars.iv771, 1
  %744 = getelementptr inbounds double, ptr %651, i64 %indvars.iv.next772
  %745 = load double, ptr %744, align 8, !tbaa !49
  %746 = getelementptr inbounds double, ptr %653, i64 %indvars.iv.next772
  %747 = load double, ptr %746, align 8, !tbaa !49
  %748 = call double @llvm.fmuladd.f64(double %745, double %747, double %743)
  %indvars.iv.next772.1 = or disjoint i64 %indvars.iv771, 2
  %749 = getelementptr inbounds double, ptr %651, i64 %indvars.iv.next772.1
  %750 = load double, ptr %749, align 8, !tbaa !49
  %751 = getelementptr inbounds double, ptr %653, i64 %indvars.iv.next772.1
  %752 = load double, ptr %751, align 8, !tbaa !49
  %753 = call double @llvm.fmuladd.f64(double %750, double %752, double %748)
  %indvars.iv.next772.2 = or disjoint i64 %indvars.iv771, 3
  %754 = getelementptr inbounds double, ptr %651, i64 %indvars.iv.next772.2
  %755 = load double, ptr %754, align 8, !tbaa !49
  %756 = getelementptr inbounds double, ptr %653, i64 %indvars.iv.next772.2
  %757 = load double, ptr %756, align 8, !tbaa !49
  %758 = call double @llvm.fmuladd.f64(double %755, double %757, double %753)
  %indvars.iv.next772.3 = add nuw nsw i64 %indvars.iv771, 4
  %niter1039.next.3 = add i64 %niter1039, 4
  %niter1039.ncmp.3 = icmp eq i64 %niter1039.next.3, %unroll_iter1038
  br i1 %niter1039.ncmp.3, label %._crit_edge606.unr-lcssa, label %.lr.ph605, !llvm.loop !109

._crit_edge606.unr-lcssa:                         ; preds = %.lr.ph605, %.lr.ph605.preheader
  %.lcssa988.ph = phi double [ poison, %.lr.ph605.preheader ], [ %758, %.lr.ph605 ]
  %indvars.iv771.unr = phi i64 [ 0, %.lr.ph605.preheader ], [ %indvars.iv.next772.3, %.lr.ph605 ]
  %.0282604.unr = phi double [ 0.000000e+00, %.lr.ph605.preheader ], [ %758, %.lr.ph605 ]
  br i1 %lcmp.mod1036.not, label %._crit_edge606, label %.lr.ph605.epil

.lr.ph605.epil:                                   ; preds = %._crit_edge606.unr-lcssa, %.lr.ph605.epil
  %indvars.iv771.epil = phi i64 [ %indvars.iv.next772.epil, %.lr.ph605.epil ], [ %indvars.iv771.unr, %._crit_edge606.unr-lcssa ]
  %.0282604.epil = phi double [ %763, %.lr.ph605.epil ], [ %.0282604.unr, %._crit_edge606.unr-lcssa ]
  %epil.iter1035 = phi i64 [ %epil.iter1035.next, %.lr.ph605.epil ], [ 0, %._crit_edge606.unr-lcssa ]
  %759 = getelementptr inbounds double, ptr %651, i64 %indvars.iv771.epil
  %760 = load double, ptr %759, align 8, !tbaa !49
  %761 = getelementptr inbounds double, ptr %653, i64 %indvars.iv771.epil
  %762 = load double, ptr %761, align 8, !tbaa !49
  %763 = call double @llvm.fmuladd.f64(double %760, double %762, double %.0282604.epil)
  %indvars.iv.next772.epil = add nuw nsw i64 %indvars.iv771.epil, 1
  %epil.iter1035.next = add i64 %epil.iter1035, 1
  %epil.iter1035.cmp.not = icmp eq i64 %epil.iter1035.next, %xtraiter1034
  br i1 %epil.iter1035.cmp.not, label %._crit_edge606, label %.lr.ph605.epil, !llvm.loop !110

._crit_edge606:                                   ; preds = %.lr.ph605.epil, %._crit_edge606.unr-lcssa
  %.lcssa988 = phi double [ %.lcssa988.ph, %._crit_edge606.unr-lcssa ], [ %763, %.lr.ph605.epil ]
  %764 = fdiv double %.1322623, %.lcssa988
  br i1 %654, label %.lr.ph610.preheader, label %._crit_edge624

.lr.ph610.preheader:                              ; preds = %._crit_edge606
  %brmerge = select i1 %min.iters.check968, i1 true, i1 %found.conflict965
  br i1 %brmerge, label %.lr.ph610.preheader986, label %vector.ph969

.lr.ph610.preheader986:                           ; preds = %.lr.ph610.preheader, %middle.block966
  %indvars.iv776.ph = phi i64 [ 0, %.lr.ph610.preheader ], [ %n.vec971, %middle.block966 ]
  br i1 %lcmp.mod1041.not, label %.lr.ph610.prol.loopexit, label %.lr.ph610.prol

.lr.ph610.prol:                                   ; preds = %.lr.ph610.preheader986
  %765 = getelementptr inbounds double, ptr %651, i64 %indvars.iv776.ph
  %766 = load double, ptr %765, align 8, !tbaa !49
  %767 = getelementptr inbounds double, ptr %665, i64 %indvars.iv776.ph
  %768 = load double, ptr %767, align 8, !tbaa !49
  %769 = call double @llvm.fmuladd.f64(double %764, double %766, double %768)
  store double %769, ptr %767, align 8, !tbaa !49
  %indvars.iv.next777.prol = or disjoint i64 %indvars.iv776.ph, 1
  br label %.lr.ph610.prol.loopexit

.lr.ph610.prol.loopexit:                          ; preds = %.lr.ph610.prol, %.lr.ph610.preheader986
  %indvars.iv776.unr = phi i64 [ %indvars.iv776.ph, %.lr.ph610.preheader986 ], [ %indvars.iv.next777.prol, %.lr.ph610.prol ]
  %770 = icmp eq i64 %indvars.iv776.ph, %669
  br i1 %770, label %.preheader461, label %.lr.ph610

vector.ph969:                                     ; preds = %.lr.ph610.preheader
  %broadcast.splatinsert979 = insertelement <2 x double> poison, double %764, i64 0
  %broadcast.splat980 = shufflevector <2 x double> %broadcast.splatinsert979, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body973

vector.body973:                                   ; preds = %vector.body973, %vector.ph969
  %index974 = phi i64 [ 0, %vector.ph969 ], [ %index.next981, %vector.body973 ]
  %771 = getelementptr inbounds double, ptr %651, i64 %index974
  %772 = getelementptr inbounds i8, ptr %771, i64 16
  %wide.load975 = load <2 x double>, ptr %771, align 8, !tbaa !49, !alias.scope !111
  %wide.load976 = load <2 x double>, ptr %772, align 8, !tbaa !49, !alias.scope !111
  %773 = getelementptr inbounds double, ptr %665, i64 %index974
  %774 = getelementptr inbounds i8, ptr %773, i64 16
  %wide.load977 = load <2 x double>, ptr %773, align 8, !tbaa !49, !alias.scope !114, !noalias !111
  %wide.load978 = load <2 x double>, ptr %774, align 8, !tbaa !49, !alias.scope !114, !noalias !111
  %775 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat980, <2 x double> %wide.load975, <2 x double> %wide.load977)
  %776 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat980, <2 x double> %wide.load976, <2 x double> %wide.load978)
  store <2 x double> %775, ptr %773, align 8, !tbaa !49, !alias.scope !114, !noalias !111
  store <2 x double> %776, ptr %774, align 8, !tbaa !49, !alias.scope !114, !noalias !111
  %index.next981 = add nuw i64 %index974, 4
  %777 = icmp eq i64 %index.next981, %n.vec971
  br i1 %777, label %middle.block966, label %vector.body973, !llvm.loop !116

middle.block966:                                  ; preds = %vector.body973
  br i1 %cmp.n982, label %.preheader461, label %.lr.ph610.preheader986

.preheader461:                                    ; preds = %.lr.ph610.prol.loopexit, %.lr.ph610, %middle.block966
  br i1 %654, label %.lr.ph612, label %._crit_edge624

.lr.ph612:                                        ; preds = %.preheader461
  %778 = fneg double %764
  br i1 %min.iters.check945, label %scalar.ph944.preheader, label %vector.ph946

scalar.ph944.preheader:                           ; preds = %middle.block943, %.lr.ph612
  %indvars.iv781.ph = phi i64 [ 0, %.lr.ph612 ], [ %n.vec948, %middle.block943 ]
  br label %scalar.ph944

vector.ph946:                                     ; preds = %.lr.ph612
  %broadcast.splatinsert956 = insertelement <2 x double> poison, double %778, i64 0
  %broadcast.splat957 = shufflevector <2 x double> %broadcast.splatinsert956, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body950

vector.body950:                                   ; preds = %vector.body950, %vector.ph946
  %index951 = phi i64 [ 0, %vector.ph946 ], [ %index.next958, %vector.body950 ]
  %779 = getelementptr inbounds double, ptr %653, i64 %index951
  %780 = getelementptr inbounds i8, ptr %779, i64 16
  %wide.load952 = load <2 x double>, ptr %779, align 8, !tbaa !49
  %wide.load953 = load <2 x double>, ptr %780, align 8, !tbaa !49
  %781 = getelementptr inbounds double, ptr %649, i64 %index951
  %782 = getelementptr inbounds i8, ptr %781, i64 16
  %wide.load954 = load <2 x double>, ptr %781, align 8, !tbaa !49
  %wide.load955 = load <2 x double>, ptr %782, align 8, !tbaa !49
  %783 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat957, <2 x double> %wide.load952, <2 x double> %wide.load954)
  %784 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat957, <2 x double> %wide.load953, <2 x double> %wide.load955)
  store <2 x double> %783, ptr %781, align 8, !tbaa !49
  store <2 x double> %784, ptr %782, align 8, !tbaa !49
  %index.next958 = add nuw i64 %index951, 4
  %785 = icmp eq i64 %index.next958, %n.vec948
  br i1 %785, label %middle.block943, label %vector.body950, !llvm.loop !117

middle.block943:                                  ; preds = %vector.body950
  br i1 %cmp.n959, label %.preheader460, label %scalar.ph944.preheader

.lr.ph610:                                        ; preds = %.lr.ph610.prol.loopexit, %.lr.ph610
  %indvars.iv776 = phi i64 [ %indvars.iv.next777.1, %.lr.ph610 ], [ %indvars.iv776.unr, %.lr.ph610.prol.loopexit ]
  %786 = getelementptr inbounds double, ptr %651, i64 %indvars.iv776
  %787 = load double, ptr %786, align 8, !tbaa !49
  %788 = getelementptr inbounds double, ptr %665, i64 %indvars.iv776
  %789 = load double, ptr %788, align 8, !tbaa !49
  %790 = call double @llvm.fmuladd.f64(double %764, double %787, double %789)
  store double %790, ptr %788, align 8, !tbaa !49
  %indvars.iv.next777 = add nuw nsw i64 %indvars.iv776, 1
  %791 = getelementptr inbounds double, ptr %651, i64 %indvars.iv.next777
  %792 = load double, ptr %791, align 8, !tbaa !49
  %793 = getelementptr inbounds double, ptr %665, i64 %indvars.iv.next777
  %794 = load double, ptr %793, align 8, !tbaa !49
  %795 = call double @llvm.fmuladd.f64(double %764, double %792, double %794)
  store double %795, ptr %793, align 8, !tbaa !49
  %indvars.iv.next777.1 = add nuw nsw i64 %indvars.iv776, 2
  %exitcond780.not.1 = icmp eq i64 %indvars.iv.next777.1, %wide.trip.count779
  br i1 %exitcond780.not.1, label %.preheader461, label %.lr.ph610, !llvm.loop !118

.preheader460:                                    ; preds = %scalar.ph944, %middle.block943
  br i1 %654, label %.lr.ph615.preheader, label %._crit_edge624

.lr.ph615.preheader:                              ; preds = %.preheader460
  br i1 %670, label %._crit_edge616.unr-lcssa, label %.lr.ph615

scalar.ph944:                                     ; preds = %scalar.ph944.preheader, %scalar.ph944
  %indvars.iv781 = phi i64 [ %indvars.iv.next782, %scalar.ph944 ], [ %indvars.iv781.ph, %scalar.ph944.preheader ]
  %796 = getelementptr inbounds double, ptr %653, i64 %indvars.iv781
  %797 = load double, ptr %796, align 8, !tbaa !49
  %798 = getelementptr inbounds double, ptr %649, i64 %indvars.iv781
  %799 = load double, ptr %798, align 8, !tbaa !49
  %800 = call double @llvm.fmuladd.f64(double %778, double %797, double %799)
  store double %800, ptr %798, align 8, !tbaa !49
  %indvars.iv.next782 = add nuw nsw i64 %indvars.iv781, 1
  %exitcond785.not = icmp eq i64 %indvars.iv.next782, %wide.trip.count784
  br i1 %exitcond785.not, label %.preheader460, label %scalar.ph944, !llvm.loop !119

.lr.ph615:                                        ; preds = %.lr.ph615.preheader, %.lr.ph615
  %indvars.iv786 = phi i64 [ %indvars.iv.next787.3, %.lr.ph615 ], [ 0, %.lr.ph615.preheader ]
  %.2323614 = phi double [ %812, %.lr.ph615 ], [ 0.000000e+00, %.lr.ph615.preheader ]
  %niter1047 = phi i64 [ %niter1047.next.3, %.lr.ph615 ], [ 0, %.lr.ph615.preheader ]
  %801 = getelementptr inbounds double, ptr %649, i64 %indvars.iv786
  %802 = load double, ptr %801, align 8, !tbaa !49
  %803 = call double @llvm.fmuladd.f64(double %802, double %802, double %.2323614)
  %indvars.iv.next787 = or disjoint i64 %indvars.iv786, 1
  %804 = getelementptr inbounds double, ptr %649, i64 %indvars.iv.next787
  %805 = load double, ptr %804, align 8, !tbaa !49
  %806 = call double @llvm.fmuladd.f64(double %805, double %805, double %803)
  %indvars.iv.next787.1 = or disjoint i64 %indvars.iv786, 2
  %807 = getelementptr inbounds double, ptr %649, i64 %indvars.iv.next787.1
  %808 = load double, ptr %807, align 8, !tbaa !49
  %809 = call double @llvm.fmuladd.f64(double %808, double %808, double %806)
  %indvars.iv.next787.2 = or disjoint i64 %indvars.iv786, 3
  %810 = getelementptr inbounds double, ptr %649, i64 %indvars.iv.next787.2
  %811 = load double, ptr %810, align 8, !tbaa !49
  %812 = call double @llvm.fmuladd.f64(double %811, double %811, double %809)
  %indvars.iv.next787.3 = add nuw nsw i64 %indvars.iv786, 4
  %niter1047.next.3 = add i64 %niter1047, 4
  %niter1047.ncmp.3 = icmp eq i64 %niter1047.next.3, %unroll_iter1046
  br i1 %niter1047.ncmp.3, label %._crit_edge616.unr-lcssa, label %.lr.ph615, !llvm.loop !120

._crit_edge616.unr-lcssa:                         ; preds = %.lr.ph615, %.lr.ph615.preheader
  %.lcssa989.ph = phi double [ poison, %.lr.ph615.preheader ], [ %812, %.lr.ph615 ]
  %indvars.iv786.unr = phi i64 [ 0, %.lr.ph615.preheader ], [ %indvars.iv.next787.3, %.lr.ph615 ]
  %.2323614.unr = phi double [ 0.000000e+00, %.lr.ph615.preheader ], [ %812, %.lr.ph615 ]
  br i1 %lcmp.mod1044.not, label %._crit_edge616, label %.lr.ph615.epil

.lr.ph615.epil:                                   ; preds = %._crit_edge616.unr-lcssa, %.lr.ph615.epil
  %indvars.iv786.epil = phi i64 [ %indvars.iv.next787.epil, %.lr.ph615.epil ], [ %indvars.iv786.unr, %._crit_edge616.unr-lcssa ]
  %.2323614.epil = phi double [ %815, %.lr.ph615.epil ], [ %.2323614.unr, %._crit_edge616.unr-lcssa ]
  %epil.iter1043 = phi i64 [ %epil.iter1043.next, %.lr.ph615.epil ], [ 0, %._crit_edge616.unr-lcssa ]
  %813 = getelementptr inbounds double, ptr %649, i64 %indvars.iv786.epil
  %814 = load double, ptr %813, align 8, !tbaa !49
  %815 = call double @llvm.fmuladd.f64(double %814, double %814, double %.2323614.epil)
  %indvars.iv.next787.epil = add nuw nsw i64 %indvars.iv786.epil, 1
  %epil.iter1043.next = add i64 %epil.iter1043, 1
  %epil.iter1043.cmp.not = icmp eq i64 %epil.iter1043.next, %xtraiter1042
  br i1 %epil.iter1043.cmp.not, label %._crit_edge616, label %.lr.ph615.epil, !llvm.loop !121

._crit_edge616:                                   ; preds = %.lr.ph615.epil, %._crit_edge616.unr-lcssa
  %.lcssa989 = phi double [ %.lcssa989.ph, %._crit_edge616.unr-lcssa ], [ %815, %.lr.ph615.epil ]
  %816 = fcmp ugt double %.lcssa989, 0x3D719799812DEA11
  br i1 %816, label %817, label %._crit_edge624

817:                                              ; preds = %._crit_edge616
  %818 = fdiv double %.lcssa989, %.1322623
  br i1 %654, label %.lr.ph620.preheader, label %._crit_edge621

.lr.ph620.preheader:                              ; preds = %817
  br i1 %min.iters.check928, label %.lr.ph620.preheader985, label %vector.ph929

vector.ph929:                                     ; preds = %.lr.ph620.preheader
  %broadcast.splatinsert937 = insertelement <2 x double> poison, double %818, i64 0
  %broadcast.splat938 = shufflevector <2 x double> %broadcast.splatinsert937, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body933

vector.body933:                                   ; preds = %vector.body933, %vector.ph929
  %index934 = phi i64 [ 0, %vector.ph929 ], [ %index.next941, %vector.body933 ]
  %819 = getelementptr inbounds double, ptr %651, i64 %index934
  %820 = getelementptr inbounds i8, ptr %819, i64 16
  %wide.load935 = load <2 x double>, ptr %819, align 8, !tbaa !49
  %wide.load936 = load <2 x double>, ptr %820, align 8, !tbaa !49
  %821 = fmul <2 x double> %broadcast.splat938, %wide.load935
  %822 = fmul <2 x double> %broadcast.splat938, %wide.load936
  %823 = getelementptr inbounds double, ptr %649, i64 %index934
  %824 = getelementptr inbounds i8, ptr %823, i64 16
  %wide.load939 = load <2 x double>, ptr %823, align 8, !tbaa !49
  %wide.load940 = load <2 x double>, ptr %824, align 8, !tbaa !49
  %825 = fadd <2 x double> %821, %wide.load939
  %826 = fadd <2 x double> %822, %wide.load940
  store <2 x double> %825, ptr %819, align 8, !tbaa !49
  store <2 x double> %826, ptr %820, align 8, !tbaa !49
  %index.next941 = add nuw i64 %index934, 4
  %827 = icmp eq i64 %index.next941, %n.vec931
  br i1 %827, label %middle.block926, label %vector.body933, !llvm.loop !122

middle.block926:                                  ; preds = %vector.body933
  br i1 %cmp.n942, label %._crit_edge621, label %.lr.ph620.preheader985

.lr.ph620.preheader985:                           ; preds = %middle.block926, %.lr.ph620.preheader
  %indvars.iv791.ph = phi i64 [ 0, %.lr.ph620.preheader ], [ %n.vec931, %middle.block926 ]
  br label %.lr.ph620

.lr.ph620:                                        ; preds = %.lr.ph620.preheader985, %.lr.ph620
  %indvars.iv791 = phi i64 [ %indvars.iv.next792, %.lr.ph620 ], [ %indvars.iv791.ph, %.lr.ph620.preheader985 ]
  %828 = getelementptr inbounds double, ptr %651, i64 %indvars.iv791
  %829 = load double, ptr %828, align 8, !tbaa !49
  %830 = fmul double %818, %829
  %831 = getelementptr inbounds double, ptr %649, i64 %indvars.iv791
  %832 = load double, ptr %831, align 8, !tbaa !49
  %833 = fadd double %830, %832
  store double %833, ptr %828, align 8, !tbaa !49
  %indvars.iv.next792 = add nuw nsw i64 %indvars.iv791, 1
  %exitcond795.not = icmp eq i64 %indvars.iv.next792, %wide.trip.count794
  br i1 %exitcond795.not, label %._crit_edge621, label %.lr.ph620, !llvm.loop !123

._crit_edge621:                                   ; preds = %.lr.ph620, %middle.block926, %817
  %834 = add nuw nsw i32 %.0364622, 1
  %835 = fcmp ogt double %.lcssa989, 0x3D719799812DEA11
  %836 = icmp ult i32 %.0364622, 99
  %837 = select i1 %835, i1 %836, i1 false
  br i1 %837, label %.preheader463, label %._crit_edge624, !llvm.loop !124

._crit_edge624:                                   ; preds = %.preheader463, %.preheader462, %._crit_edge606, %.preheader461, %.preheader460, %._crit_edge616, %._crit_edge621, %.preheader466, %.preheader464
  call void @_ZdaPv(ptr noundef nonnull %649) #16
  call void @_ZdaPv(ptr noundef nonnull %651) #16
  call void @_ZdaPv(ptr noundef nonnull %653) #16
  br label %875

.critedge448:                                     ; preds = %._crit_edge586
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %28) #13
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %29) #13
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %30) #13
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %30) #13
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %29, ptr noundef nonnull @.str.15, ptr noundef nonnull align 1 dereferenceable(1) %30)
          to label %838 unwind label %858

838:                                              ; preds = %.critedge448
  %839 = load i32, ptr %359, align 4, !tbaa !52
  %840 = getelementptr inbounds i8, ptr %0, i64 1016
  %841 = load ptr, ptr %840, align 8, !tbaa !72
  invoke void @_ZN7SGTELIB6MatrixC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiiPPd(ptr noundef nonnull align 8 dereferenceable(56) %28, ptr noundef nonnull align 8 dereferenceable(32) %29, i32 noundef %839, i32 noundef %839, ptr noundef %841)
          to label %842 unwind label %860

842:                                              ; preds = %838
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #13
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %30) #13
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %30) #13
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %29) #13
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %31) #13
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %32) #13
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %33) #13
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %33) #13
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %32, ptr noundef nonnull @.str.16, ptr noundef nonnull align 1 dereferenceable(1) %33)
          to label %843 unwind label %863

843:                                              ; preds = %842
  %844 = load i32, ptr %359, align 4, !tbaa !52
  invoke void @_ZN7SGTELIB6MatrixC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEii(ptr noundef nonnull align 8 dereferenceable(56) %31, ptr noundef nonnull align 8 dereferenceable(32) %32, i32 noundef %844, i32 noundef 1)
          to label %845 unwind label %865

845:                                              ; preds = %843
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %32) #13
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %33) #13
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %33) #13
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %32) #13
  invoke void @_ZN7SGTELIB6Matrix3setEiid(ptr noundef nonnull align 8 dereferenceable(56) %31, i32 noundef 0, i32 noundef 0, double noundef 1.000000e+00)
          to label %846 unwind label %868

846:                                              ; preds = %845
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %34) #13
  invoke void @_ZN7SGTELIB6Matrix14cholesky_solveERKS0_S2_(ptr dead_on_unwind nonnull writable sret(%"class.SGTELIB::Matrix") align 8 %34, ptr noundef nonnull align 8 dereferenceable(56) %28, ptr noundef nonnull align 8 dereferenceable(56) %31)
          to label %.preheader unwind label %870

.preheader:                                       ; preds = %846
  %847 = load i32, ptr %359, align 4, !tbaa !52
  %848 = icmp sgt i32 %847, 0
  br i1 %848, label %.lr.ph627, label %._crit_edge628

.lr.ph627:                                        ; preds = %.preheader
  %849 = getelementptr inbounds i8, ptr %0, i64 1040
  br label %850

850:                                              ; preds = %.lr.ph627, %850
  %indvars.iv796 = phi i64 [ 0, %.lr.ph627 ], [ %indvars.iv.next797, %850 ]
  %851 = trunc nuw nsw i64 %indvars.iv796 to i32
  %852 = call noundef double @_ZNK7SGTELIB6Matrix3getEii(ptr noundef nonnull align 8 dereferenceable(56) %34, i32 noundef %851, i32 noundef 0)
  %853 = load ptr, ptr %849, align 8, !tbaa !125
  %854 = getelementptr inbounds double, ptr %853, i64 %indvars.iv796
  store double %852, ptr %854, align 8, !tbaa !49
  %indvars.iv.next797 = add nuw nsw i64 %indvars.iv796, 1
  %855 = load i32, ptr %359, align 4, !tbaa !52
  %856 = sext i32 %855 to i64
  %857 = icmp slt i64 %indvars.iv.next797, %856
  br i1 %857, label %850, label %._crit_edge628, !llvm.loop !126

858:                                              ; preds = %.critedge448
  %859 = landingpad { ptr, i32 }
          cleanup
  br label %862

860:                                              ; preds = %838
  %861 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #13
  br label %862

862:                                              ; preds = %860, %858
  %.pn411 = phi { ptr, i32 } [ %861, %860 ], [ %859, %858 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %30) #13
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %30) #13
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %29) #13
  br label %874

863:                                              ; preds = %842
  %864 = landingpad { ptr, i32 }
          cleanup
  br label %867

865:                                              ; preds = %843
  %866 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %32) #13
  br label %867

867:                                              ; preds = %865, %863
  %.pn413 = phi { ptr, i32 } [ %866, %865 ], [ %864, %863 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %33) #13
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %33) #13
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %32) #13
  br label %873

868:                                              ; preds = %845
  %869 = landingpad { ptr, i32 }
          cleanup
  br label %872

870:                                              ; preds = %846
  %871 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %34) #13
  br label %872

._crit_edge628:                                   ; preds = %850, %.preheader
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %34) #13
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %34) #13
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %31) #13
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %31) #13
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %28) #13
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %28) #13
  br label %875

872:                                              ; preds = %870, %868
  %.pn415 = phi { ptr, i32 } [ %871, %870 ], [ %869, %868 ]
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %31) #13
  br label %873

873:                                              ; preds = %872, %867
  %.pn415.pn = phi { ptr, i32 } [ %.pn415, %872 ], [ %.pn413, %867 ]
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %31) #13
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %28) #13
  br label %874

874:                                              ; preds = %873, %862
  %.pn415.pn.pn = phi { ptr, i32 } [ %.pn415.pn, %873 ], [ %.pn411, %862 ]
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %28) #13
  br label %933

875:                                              ; preds = %._crit_edge624, %._crit_edge628
  %876 = load i32, ptr %359, align 4, !tbaa !52
  %877 = icmp sgt i32 %876, 0
  br i1 %877, label %.lr.ph631, label %.loopexit

.lr.ph631:                                        ; preds = %875
  %878 = getelementptr inbounds i8, ptr %0, i64 1040
  br label %889

879:                                              ; preds = %894
  %indvars.iv.next800 = add nuw nsw i64 %indvars.iv799, 1
  %880 = load i32, ptr %359, align 4, !tbaa !52
  %881 = sext i32 %880 to i64
  %882 = icmp slt i64 %indvars.iv.next800, %881
  br i1 %882, label %889, label %.critedge450.preheader, !llvm.loop !127

.critedge450.preheader:                           ; preds = %879
  %883 = icmp sgt i32 %880, 0
  br i1 %883, label %.lr.ph634, label %.loopexit

.lr.ph634:                                        ; preds = %.critedge450.preheader
  %884 = getelementptr inbounds i8, ptr %0, i64 1040
  %885 = load ptr, ptr %884, align 8, !tbaa !125
  %886 = getelementptr inbounds i8, ptr %0, i64 1032
  %887 = load ptr, ptr %886, align 8, !tbaa !73
  %wide.trip.count805 = zext nneg i32 %880 to i64
  %xtraiter1048 = and i64 %wide.trip.count805, 3
  %888 = icmp ult i32 %880, 4
  br i1 %888, label %.loopexit.loopexit.unr-lcssa, label %.lr.ph634.new

.lr.ph634.new:                                    ; preds = %.lr.ph634
  %unroll_iter1052 = and i64 %wide.trip.count805, 2147483644
  br label %.critedge450

889:                                              ; preds = %.lr.ph631, %879
  %indvars.iv799 = phi i64 [ 0, %.lr.ph631 ], [ %indvars.iv.next800, %879 ]
  %890 = load ptr, ptr %878, align 8, !tbaa !125
  %891 = getelementptr inbounds double, ptr %890, i64 %indvars.iv799
  %892 = load double, ptr %891, align 8, !tbaa !49
  %893 = invoke noundef zeroext i1 @_ZN7SGTELIB5isdefEd(double noundef %892)
          to label %894 unwind label %895

894:                                              ; preds = %889
  br i1 %893, label %879, label %897

895:                                              ; preds = %889
  %896 = landingpad { ptr, i32 }
          cleanup
  br label %933

897:                                              ; preds = %894
  %898 = invoke noundef i32 @_ZN7SGTELIB6Matrix13get_min_indexEv(ptr noundef nonnull align 8 dereferenceable(56) %9)
          to label %899 unwind label %901

899:                                              ; preds = %897
  %900 = call noundef double @_ZNK7SGTELIB6Matrix3getEii(ptr noundef nonnull align 8 dereferenceable(56) %24, i32 noundef %898, i32 noundef 0)
  br label %.loopexit

901:                                              ; preds = %897
  %902 = landingpad { ptr, i32 }
          cleanup
  br label %933

.critedge450:                                     ; preds = %.critedge450, %.lr.ph634.new
  %indvars.iv802 = phi i64 [ 0, %.lr.ph634.new ], [ %indvars.iv.next803.3, %.critedge450 ]
  %.3379632 = phi double [ 0.000000e+00, %.lr.ph634.new ], [ %926, %.critedge450 ]
  %niter1053 = phi i64 [ 0, %.lr.ph634.new ], [ %niter1053.next.3, %.critedge450 ]
  %903 = getelementptr inbounds double, ptr %885, i64 %indvars.iv802
  %904 = load double, ptr %903, align 8, !tbaa !49
  %905 = getelementptr inbounds ptr, ptr %887, i64 %indvars.iv802
  %906 = load ptr, ptr %905, align 8, !tbaa !74
  %907 = load double, ptr %906, align 8, !tbaa !49
  %908 = call double @llvm.fmuladd.f64(double %904, double %907, double %.3379632)
  %indvars.iv.next803 = or disjoint i64 %indvars.iv802, 1
  %909 = getelementptr inbounds double, ptr %885, i64 %indvars.iv.next803
  %910 = load double, ptr %909, align 8, !tbaa !49
  %911 = getelementptr inbounds ptr, ptr %887, i64 %indvars.iv.next803
  %912 = load ptr, ptr %911, align 8, !tbaa !74
  %913 = load double, ptr %912, align 8, !tbaa !49
  %914 = call double @llvm.fmuladd.f64(double %910, double %913, double %908)
  %indvars.iv.next803.1 = or disjoint i64 %indvars.iv802, 2
  %915 = getelementptr inbounds double, ptr %885, i64 %indvars.iv.next803.1
  %916 = load double, ptr %915, align 8, !tbaa !49
  %917 = getelementptr inbounds ptr, ptr %887, i64 %indvars.iv.next803.1
  %918 = load ptr, ptr %917, align 8, !tbaa !74
  %919 = load double, ptr %918, align 8, !tbaa !49
  %920 = call double @llvm.fmuladd.f64(double %916, double %919, double %914)
  %indvars.iv.next803.2 = or disjoint i64 %indvars.iv802, 3
  %921 = getelementptr inbounds double, ptr %885, i64 %indvars.iv.next803.2
  %922 = load double, ptr %921, align 8, !tbaa !49
  %923 = getelementptr inbounds ptr, ptr %887, i64 %indvars.iv.next803.2
  %924 = load ptr, ptr %923, align 8, !tbaa !74
  %925 = load double, ptr %924, align 8, !tbaa !49
  %926 = call double @llvm.fmuladd.f64(double %922, double %925, double %920)
  %indvars.iv.next803.3 = add nuw nsw i64 %indvars.iv802, 4
  %niter1053.next.3 = add i64 %niter1053, 4
  %niter1053.ncmp.3 = icmp eq i64 %niter1053.next.3, %unroll_iter1052
  br i1 %niter1053.ncmp.3, label %.loopexit.loopexit.unr-lcssa, label %.critedge450, !llvm.loop !128

.loopexit.loopexit.unr-lcssa:                     ; preds = %.critedge450, %.lr.ph634
  %.lcssa.ph = phi double [ poison, %.lr.ph634 ], [ %926, %.critedge450 ]
  %indvars.iv802.unr = phi i64 [ 0, %.lr.ph634 ], [ %indvars.iv.next803.3, %.critedge450 ]
  %.3379632.unr = phi double [ 0.000000e+00, %.lr.ph634 ], [ %926, %.critedge450 ]
  %lcmp.mod1050.not = icmp eq i64 %xtraiter1048, 0
  br i1 %lcmp.mod1050.not, label %.loopexit, label %.critedge450.epil

.critedge450.epil:                                ; preds = %.loopexit.loopexit.unr-lcssa, %.critedge450.epil
  %indvars.iv802.epil = phi i64 [ %indvars.iv.next803.epil, %.critedge450.epil ], [ %indvars.iv802.unr, %.loopexit.loopexit.unr-lcssa ]
  %.3379632.epil = phi double [ %932, %.critedge450.epil ], [ %.3379632.unr, %.loopexit.loopexit.unr-lcssa ]
  %epil.iter1049 = phi i64 [ %epil.iter1049.next, %.critedge450.epil ], [ 0, %.loopexit.loopexit.unr-lcssa ]
  %927 = getelementptr inbounds double, ptr %885, i64 %indvars.iv802.epil
  %928 = load double, ptr %927, align 8, !tbaa !49
  %929 = getelementptr inbounds ptr, ptr %887, i64 %indvars.iv802.epil
  %930 = load ptr, ptr %929, align 8, !tbaa !74
  %931 = load double, ptr %930, align 8, !tbaa !49
  %932 = call double @llvm.fmuladd.f64(double %928, double %931, double %.3379632.epil)
  %indvars.iv.next803.epil = add nuw nsw i64 %indvars.iv802.epil, 1
  %epil.iter1049.next = add i64 %epil.iter1049, 1
  %epil.iter1049.cmp.not = icmp eq i64 %epil.iter1049.next, %xtraiter1048
  br i1 %epil.iter1049.cmp.not, label %.loopexit, label %.critedge450.epil, !llvm.loop !129

.loopexit:                                        ; preds = %.loopexit.loopexit.unr-lcssa, %.critedge450.epil, %875, %.critedge450.preheader, %899
  %storemerge = phi double [ %900, %899 ], [ 0.000000e+00, %.critedge450.preheader ], [ 0.000000e+00, %875 ], [ %.lcssa.ph, %.loopexit.loopexit.unr-lcssa ], [ %932, %.critedge450.epil ]
  store double %storemerge, ptr %3, align 8, !tbaa !49
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %24) #13
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %24) #13
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %23) #13
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %23) #13
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %22) #13
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %22) #13
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %12) #13
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %12) #13
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %11) #13
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %11) #13
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %9) #13
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %9) #13
  ret void

933:                                              ; preds = %874, %697, %699, %695, %901, %895, %339, %345
  %.pn419.pn.pn = phi { ptr, i32 } [ %.pn405, %345 ], [ %340, %339 ], [ %.pn415.pn.pn, %874 ], [ %696, %695 ], [ %700, %699 ], [ %698, %697 ], [ %902, %901 ], [ %896, %895 ]
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %24) #13
  br label %934

934:                                              ; preds = %933, %330
  %.pn419.pn.pn.pn = phi { ptr, i32 } [ %.pn419.pn.pn, %933 ], [ %.pn403, %330 ]
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %24) #13
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %23) #13
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %23) #13
  br label %935

935:                                              ; preds = %934, %324
  %.pn419.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn419.pn.pn.pn, %934 ], [ %325, %324 ]
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %22) #13
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %22) #13
  br label %936

936:                                              ; preds = %.loopexit497, %.loopexit.split-lp498, %.loopexit489, %.loopexit.split-lp, %88, %176, %234, %322, %935, %286, %122, %123, %115, %97, %87
  %.pn429.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn, %87 ], [ %89, %88 ], [ %.pn429.pn457, %123 ], [ %.pn429, %122 ], [ %116, %115 ], [ %.pn395.pn, %97 ], [ %.pn400.pn, %176 ], [ %.pn398, %234 ], [ %287, %286 ], [ %.pn419.pn.pn.pn.pn, %935 ], [ %323, %322 ], [ %lpad.loopexit, %.loopexit489 ], [ %lpad.loopexit.split-lp, %.loopexit.split-lp ], [ %lpad.loopexit499, %.loopexit497 ], [ %lpad.loopexit.split-lp500, %.loopexit.split-lp498 ]
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %12) #13
  br label %937

937:                                              ; preds = %936, %81
  %.pn429.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn429.pn.pn.pn.pn, %936 ], [ %82, %81 ]
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %12) #13
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %11) #13
  br label %938

938:                                              ; preds = %937, %79
  %.pn429.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn429.pn.pn.pn.pn.pn, %937 ], [ %80, %79 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %11) #13
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %9) #13
  br label %939

939:                                              ; preds = %938, %77
  %.pn429.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn429.pn.pn.pn.pn.pn.pn, %938 ], [ %78, %77 ]
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %9) #13
  br label %940

940:                                              ; preds = %46, %47, %939
  %.pn438.pn.pn = phi { ptr, i32 } [ %.pn438.pn453, %47 ], [ %.pn438, %46 ], [ %.pn429.pn.pn.pn.pn.pn.pn.pn, %939 ]
  resume { ptr, i32 } %.pn438.pn.pn

941:                                              ; preds = %114, %40
  unreachable
}

declare void @_ZN7SGTELIB6Matrix3setEiid(ptr noundef nonnull align 8 dereferenceable(56), i32 noundef, i32 noundef, double noundef) local_unnamed_addr #3

declare ptr @__cxa_allocate_exception(i64) local_unnamed_addr

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN7SGTELIB9ExceptionC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiS8_(ptr noundef nonnull align 8 dereferenceable(112), ptr noundef nonnull align 8 dereferenceable(32), i32 noundef, ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #2 align 2

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

declare void @__cxa_throw(ptr, ptr, ptr) local_unnamed_addr

declare void @__cxa_free_exception(ptr) local_unnamed_addr

declare void @_ZNK7SGTELIB11TrainingSet13get_distancesERKNS_6MatrixES3_NS_10distance_tE(ptr dead_on_unwind writable sret(%"class.SGTELIB::Matrix") align 8, ptr noundef nonnull align 8 dereferenceable(504), ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 8 dereferenceable(56), i32 noundef) local_unnamed_addr #3

declare void @_ZN7SGTELIB9Surrogate13get_matrix_XsEv(ptr dead_on_unwind writable sret(%"class.SGTELIB::Matrix") align 8, ptr noundef nonnull align 8 dereferenceable(985)) local_unnamed_addr #3

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

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

declare void @_ZN7SGTELIB6Matrix15hadamard_squareERKS0_(ptr dead_on_unwind writable sret(%"class.SGTELIB::Matrix") align 8, ptr noundef nonnull align 8 dereferenceable(56)) local_unnamed_addr #3

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

declare void @_ZplRKN7SGTELIB6MatrixEd(ptr dead_on_unwind writable sret(%"class.SGTELIB::Matrix") align 8, ptr noundef nonnull align 8 dereferenceable(56), double noundef) local_unnamed_addr #3

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef) local_unnamed_addr #8

declare noundef double @_ZNK7SGTELIB6Matrix3getEi(ptr noundef nonnull align 8 dereferenceable(56), i32 noundef) local_unnamed_addr #3

declare void @_ZNK7SGTELIB6Matrix4rankEv(ptr dead_on_unwind writable sret(%"class.SGTELIB::Matrix") align 8, ptr noundef nonnull align 8 dereferenceable(56)) local_unnamed_addr #3

; Function Attrs: mustprogress nofree nounwind willreturn memory(write)
declare double @pow(double noundef, double noundef) local_unnamed_addr #9

declare noundef double @_ZN7SGTELIB11gammacdfinvEddd(double noundef, double noundef, double noundef) local_unnamed_addr #3

declare noundef double @_ZN7SGTELIB8gammacdfEddd(double noundef, double noundef, double noundef) local_unnamed_addr #3

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

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

declare noundef double @_ZN7SGTELIB6kernelENS_8kernel_tEdd(i32 noundef, double noundef, double noundef) local_unnamed_addr #3

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

declare void @_ZN7SGTELIB9Surrogate13get_matrix_ZsEv(ptr dead_on_unwind writable sret(%"class.SGTELIB::Matrix") align 8, ptr noundef nonnull align 8 dereferenceable(985)) local_unnamed_addr #3

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef double @_ZNK7SGTELIB6Matrix3getEii(ptr noundef nonnull align 8 dereferenceable(56), i32 noundef, i32 noundef) local_unnamed_addr #8 align 2

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

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

declare void @_ZN7SGTELIB6MatrixC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiiPPd(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 8 dereferenceable(32), i32 noundef, i32 noundef, ptr noundef) unnamed_addr #3

declare void @_ZN7SGTELIB6Matrix14cholesky_solveERKS0_S2_(ptr dead_on_unwind writable sret(%"class.SGTELIB::Matrix") align 8, ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 8 dereferenceable(56)) local_unnamed_addr #3

declare noundef zeroext i1 @_ZN7SGTELIB5isdefEd(double noundef) local_unnamed_addr #3

declare noundef i32 @_ZN7SGTELIB6Matrix13get_min_indexEv(ptr noundef nonnull align 8 dereferenceable(56)) local_unnamed_addr #3

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

declare void @_ZNK7SGTELIB6Matrix7get_colEi(ptr dead_on_unwind writable sret(%"class.SGTELIB::Matrix") align 8, ptr noundef nonnull align 8 dereferenceable(56), i32 noundef) local_unnamed_addr #3

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i64 @llvm.smax.i64(i64, i64) #12

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <2 x double> @llvm.fmuladd.v2f64(<2 x double>, <2 x double>, <2 x double>) #12

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 = { nobuiltin 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 "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { nobuiltin allocsize(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 #8 = { 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 #9 = { 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 #10 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #11 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #12 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #13 = { nounwind }
attributes #14 = { noreturn }
attributes #15 = { builtin allocsize(0) }
attributes #16 = { builtin 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, !7, i64 8}
!6 = !{!"_ZTSN7SGTELIB9SurrogateE", !7, i64 8, !10, i64 16, !12, i64 328, !12, i64 332, !12, i64 336, !12, i64 340, !12, i64 344, !12, i64 348, !24, i64 352, !7, i64 360, !7, i64 368, !7, i64 376, !7, i64 384, !25, i64 392, !30, i64 416, !15, i64 464, !38, i64 472, !24, i64 984}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"_ZTSN7SGTELIB20Surrogate_ParametersE", !11, i64 8, !12, i64 12, !13, i64 16, !14, i64 20, !13, i64 24, !15, i64 32, !13, i64 40, !15, i64 48, !13, i64 56, !16, i64 60, !13, i64 64, !17, i64 72, !21, i64 128, !13, i64 132, !22, i64 136, !15, i64 144, !15, i64 152, !15, i64 160, !15, i64 168, !17, i64 176, !13, i64 232, !23, i64 236, !18, i64 240, !18, i64 272, !12, i64 304, !12, i64 308}
!11 = !{!"_ZTSN7SGTELIB7model_tE", !8, i64 0}
!12 = !{!"int", !8, i64 0}
!13 = !{!"_ZTSN7SGTELIB14param_status_tE", !8, i64 0}
!14 = !{!"_ZTSN7SGTELIB8kernel_tE", !8, i64 0}
!15 = !{!"double", !8, i64 0}
!16 = !{!"_ZTSN7SGTELIB10distance_tE", !8, i64 0}
!17 = !{!"_ZTSN7SGTELIB6MatrixE", !18, i64 8, !12, i64 40, !12, i64 44, !7, i64 48}
!18 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !19, i64 0, !20, i64 8, !8, i64 16}
!19 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !7, i64 0}
!20 = !{!"long", !8, i64 0}
!21 = !{!"_ZTSN7SGTELIB8weight_tE", !8, i64 0}
!22 = !{!"_ZTSN7SGTELIB13uncertainty_tE", !8, i64 0}
!23 = !{!"_ZTSN7SGTELIB8metric_tE", !8, i64 0}
!24 = !{!"bool", !8, i64 0}
!25 = !{!"_ZTSNSt7__cxx114listIiSaIiEEE", !26, i64 0}
!26 = !{!"_ZTSNSt7__cxx1110_List_baseIiSaIiEEE", !27, i64 0}
!27 = !{!"_ZTSNSt7__cxx1110_List_baseIiSaIiEE10_List_implE", !28, i64 0}
!28 = !{!"_ZTSNSt8__detail17_List_node_headerE", !29, i64 0, !20, i64 16}
!29 = !{!"_ZTSNSt8__detail15_List_node_baseE", !7, i64 0, !7, i64 8}
!30 = !{!"_ZTSSt3mapIN7SGTELIB8metric_tENS0_6MatrixESt4lessIS1_ESaISt4pairIKS1_S2_EEE", !31, i64 0}
!31 = !{!"_ZTSSt8_Rb_treeIN7SGTELIB8metric_tESt4pairIKS1_NS0_6MatrixEESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE", !32, i64 0}
!32 = !{!"_ZTSNSt8_Rb_treeIN7SGTELIB8metric_tESt4pairIKS1_NS0_6MatrixEESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE13_Rb_tree_implIS9_Lb1EEE", !33, i64 0, !35, i64 8}
!33 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessIN7SGTELIB8metric_tEEE", !34, i64 0}
!34 = !{!"_ZTSSt4lessIN7SGTELIB8metric_tEE"}
!35 = !{!"_ZTSSt15_Rb_tree_header", !36, i64 0, !20, i64 32}
!36 = !{!"_ZTSSt18_Rb_tree_node_base", !37, i64 0, !7, i64 8, !7, i64 16, !7, i64 24}
!37 = !{!"_ZTSSt14_Rb_tree_color", !8, i64 0}
!38 = !{!"_ZTSSt14basic_ofstreamIcSt11char_traitsIcEE", !39, i64 0, !40, i64 8}
!39 = !{!"_ZTSSo"}
!40 = !{!"_ZTSSt13basic_filebufIcSt11char_traitsIcEE", !41, i64 0, !8, i64 64, !43, i64 104, !44, i64 120, !45, i64 124, !45, i64 132, !45, i64 140, !7, i64 152, !20, i64 160, !24, i64 168, !24, i64 169, !24, i64 170, !8, i64 171, !7, i64 176, !7, i64 184, !24, i64 192, !7, i64 200, !7, i64 208, !20, i64 216, !7, i64 224, !7, i64 232}
!41 = !{!"_ZTSSt15basic_streambufIcSt11char_traitsIcEE", !7, i64 8, !7, i64 16, !7, i64 24, !7, i64 32, !7, i64 40, !7, i64 48, !42, i64 56}
!42 = !{!"_ZTSSt6locale", !7, i64 0}
!43 = !{!"_ZTSSt12__basic_fileIcE", !7, i64 0, !24, i64 8}
!44 = !{!"_ZTSSt13_Ios_Openmode", !8, i64 0}
!45 = !{!"_ZTS11__mbstate_t", !12, i64 0, !8, i64 4}
!46 = !{!6, !12, i64 344}
!47 = !{!48, !7, i64 1008}
!48 = !{!"_ZTSN7SGTELIB16Surrogate_LOWESSE", !6, i64 0, !12, i64 988, !12, i64 992, !12, i64 996, !7, i64 1000, !7, i64 1008, !7, i64 1016, !7, i64 1024, !7, i64 1032, !7, i64 1040, !7, i64 1048, !7, i64 1056, !7, i64 1064, !17, i64 1072}
!49 = !{!15, !15, i64 0}
!50 = distinct !{!50, !51}
!51 = !{!"llvm.loop.mustprogress"}
!52 = !{!48, !12, i64 988}
!53 = distinct !{!53, !51}
!54 = distinct !{!54, !51}
!55 = distinct !{!55, !51}
!56 = distinct !{!56, !51}
!57 = distinct !{!57, !51, !58, !59}
!58 = !{!"llvm.loop.isvectorized", i32 1}
!59 = !{!"llvm.loop.unroll.runtime.disable"}
!60 = distinct !{!60, !51, !59, !58}
!61 = distinct !{!61, !51}
!62 = distinct !{!62, !51, !58, !59}
!63 = distinct !{!63, !51, !59, !58}
!64 = distinct !{!64, !51}
!65 = distinct !{!65, !51, !58, !59}
!66 = distinct !{!66, !51, !58, !59}
!67 = distinct !{!67, !51, !59, !58}
!68 = distinct !{!68, !51, !59, !58}
!69 = !{!6, !12, i64 332}
!70 = distinct !{!70, !51}
!71 = !{!48, !7, i64 1000}
!72 = !{!48, !7, i64 1016}
!73 = !{!48, !7, i64 1032}
!74 = !{!7, !7, i64 0}
!75 = !{!48, !12, i64 996}
!76 = distinct !{!76, !51}
!77 = !{!48, !7, i64 1064}
!78 = !{!24, !24, i64 0}
!79 = !{i8 0, i8 2}
!80 = !{}
!81 = !{!6, !12, i64 328}
!82 = distinct !{!82, !51}
!83 = distinct !{!83, !51}
!84 = distinct !{!84, !51}
!85 = distinct !{!85, !51}
!86 = !{!87}
!87 = distinct !{!87, !88}
!88 = distinct !{!88, !"LVerDomain"}
!89 = !{!90}
!90 = distinct !{!90, !88}
!91 = distinct !{!91, !51, !58, !59}
!92 = distinct !{!92, !51, !58}
!93 = distinct !{!93, !51}
!94 = distinct !{!94, !51}
!95 = distinct !{!95, !51}
!96 = distinct !{!96, !51}
!97 = distinct !{!97, !98}
!98 = !{!"llvm.loop.unroll.disable"}
!99 = distinct !{!99, !51}
!100 = distinct !{!100, !51}
!101 = distinct !{!101, !98}
!102 = distinct !{!102, !51}
!103 = distinct !{!103, !51}
!104 = distinct !{!104, !98}
!105 = distinct !{!105, !51}
!106 = distinct !{!106, !51}
!107 = distinct !{!107, !98}
!108 = distinct !{!108, !51}
!109 = distinct !{!109, !51}
!110 = distinct !{!110, !98}
!111 = !{!112}
!112 = distinct !{!112, !113}
!113 = distinct !{!113, !"LVerDomain"}
!114 = !{!115}
!115 = distinct !{!115, !113}
!116 = distinct !{!116, !51, !58, !59}
!117 = distinct !{!117, !51, !58, !59}
!118 = distinct !{!118, !51, !58}
!119 = distinct !{!119, !51, !59, !58}
!120 = distinct !{!120, !51}
!121 = distinct !{!121, !98}
!122 = distinct !{!122, !51, !58, !59}
!123 = distinct !{!123, !51, !59, !58}
!124 = distinct !{!124, !51}
!125 = !{!48, !7, i64 1040}
!126 = distinct !{!126, !51}
!127 = distinct !{!127, !51}
!128 = distinct !{!128, !51}
!129 = distinct !{!129, !98}


; Effective O3 passes: CorrelatedValuePropagationPass,DSEPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopIdiomRecognizePass,LoopInstSimplifyPass,LoopLoadEliminationPass,LoopRotatePass,LoopSimplifyCFGPass,LoopSimplifyPass,LoopUnrollPass,LoopVectorizePass,PostOrderFunctionAttrsPass,ReassociatePass,SCCPPass,SROAPass,SimplifyCFGPass,TailCallElimPass