; 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

; 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

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

77:                                               ; preds = %3
  store i1 true, ptr %13, align 1
  %78 = call ptr @__cxa_allocate_exception(i64 112) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr %7) #10
  call void @llvm.lifetime.start.p0(i64 1, ptr %8) #10
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %8) #10
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef @.str.3, ptr noundef nonnull align 1 dereferenceable(1) %8)
          to label %79 unwind label %82

79:                                               ; preds = %77
  call void @llvm.lifetime.start.p0(i64 32, ptr %11) #10
  call void @llvm.lifetime.start.p0(i64 1, ptr %12) #10
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %12) #10
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %11, ptr noundef @.str.4, ptr noundef nonnull align 1 dereferenceable(1) %12)
          to label %80 unwind label %86

80:                                               ; preds = %79
  invoke void @_ZN7SGTELIB9ExceptionC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiS8_(ptr noundef nonnull align 8 dereferenceable(112) %78, ptr noundef nonnull align 8 dereferenceable(32) %7, i32 noundef 295, ptr noundef nonnull align 8 dereferenceable(32) %11)
          to label %81 unwind label %90

81:                                               ; preds = %80
  store i1 false, ptr %13, align 1
  invoke void @__cxa_throw(ptr %78, ptr @_ZTIN7SGTELIB9ExceptionE, ptr @_ZN7SGTELIB9ExceptionD2Ev) #11
          to label %1554 unwind label %90

82:                                               ; preds = %77
  %83 = landingpad { ptr, i32 }
          cleanup
  %84 = extractvalue { ptr, i32 } %83, 0
  store ptr %84, ptr %9, align 8
  %85 = extractvalue { ptr, i32 } %83, 1
  store i32 %85, ptr %10, align 4
  br label %95

86:                                               ; preds = %79
  %87 = landingpad { ptr, i32 }
          cleanup
  %88 = extractvalue { ptr, i32 } %87, 0
  store ptr %88, ptr %9, align 8
  %89 = extractvalue { ptr, i32 } %87, 1
  store i32 %89, ptr %10, align 4
  br label %94

90:                                               ; preds = %81, %80
  %91 = landingpad { ptr, i32 }
          cleanup
  %92 = extractvalue { ptr, i32 } %91, 0
  store ptr %92, ptr %9, align 8
  %93 = extractvalue { ptr, i32 } %91, 1
  store i32 %93, ptr %10, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %11) #10
  br label %94

94:                                               ; preds = %90, %86
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %12) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %12) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %11) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #10
  br label %95

95:                                               ; preds = %94, %82
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %8) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %8) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %7) #10
  %96 = load i1, ptr %13, align 1
  br i1 %96, label %97, label %98

97:                                               ; preds = %95
  call void @__cxa_free_exception(ptr %78) #10
  br label %98

98:                                               ; preds = %97, %95
  br label %1549

99:                                               ; preds = %3
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #10
  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 8, ptr %19) #10
  call void @llvm.lifetime.start.p0(i64 56, ptr %20) #10
  %100 = getelementptr inbounds %"class.SGTELIB::Surrogate", ptr %74, i32 0, i32 1
  %101 = load ptr, ptr %100, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 56, ptr %21) #10
  call void @_ZN7SGTELIB9Surrogate13get_matrix_XsEv(ptr dead_on_unwind writable sret(%"class.SGTELIB::Matrix") align 8 %21, ptr noundef nonnull align 8 dereferenceable(985) %74)
  %102 = getelementptr inbounds %"class.SGTELIB::Surrogate", ptr %74, i32 0, i32 2
  %103 = invoke noundef i32 @_ZNK7SGTELIB20Surrogate_Parameters17get_distance_typeEv(ptr noundef nonnull align 8 dereferenceable(312) %102)
          to label %104 unwind label %134

104:                                              ; preds = %99
  invoke void @_ZNK7SGTELIB11TrainingSet13get_distancesERKNS_6MatrixES3_NS_10distance_tE(ptr dead_on_unwind writable sret(%"class.SGTELIB::Matrix") align 8 %20, ptr noundef nonnull align 8 dereferenceable(504) %101, ptr noundef nonnull align 8 dereferenceable(56) %1, ptr noundef nonnull align 8 dereferenceable(56) %21, i32 noundef %103)
          to label %105 unwind label %134

105:                                              ; preds = %104
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %21) #10
  call void @llvm.lifetime.end.p0(i64 56, ptr %21) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr %22) #10
  %106 = getelementptr inbounds %"class.SGTELIB::Surrogate", ptr %74, i32 0, i32 2
  invoke void @_ZNK7SGTELIB20Surrogate_Parameters10get_presetB5cxx11Ev(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %22, ptr noundef nonnull align 8 dereferenceable(312) %106)
          to label %107 unwind label %138

107:                                              ; preds = %105
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #10
  %108 = getelementptr inbounds %"class.SGTELIB::Surrogate", ptr %74, i32 0, i32 7
  %109 = load i32, ptr %108, align 8, !tbaa !48
  %110 = sitofp i32 %109 to double
  %111 = load i32, ptr %6, align 4, !tbaa !9
  %112 = icmp ne i32 %111, -1
  %113 = uitofp i1 %112 to double
  %114 = fsub double %110, %113
  store double %114, ptr %23, align 8, !tbaa !49
  call void @llvm.lifetime.start.p0(i64 56, ptr %24) #10
  invoke void @_ZN7SGTELIB6MatrixC1ERKS0_(ptr noundef nonnull align 8 dereferenceable(56) %24, ptr noundef nonnull align 8 dereferenceable(56) %20)
          to label %115 unwind label %142

115:                                              ; preds = %107
  call void @llvm.lifetime.start.p0(i64 56, ptr %25) #10
  invoke void @_ZN7SGTELIB6Matrix15hadamard_squareERKS0_(ptr dead_on_unwind writable sret(%"class.SGTELIB::Matrix") align 8 %25, ptr noundef nonnull align 8 dereferenceable(56) %24)
          to label %116 unwind label %146

116:                                              ; preds = %115
  %117 = invoke noundef nonnull align 8 dereferenceable(56) ptr @_ZN7SGTELIB6MatrixaSERKS0_(ptr noundef nonnull align 8 dereferenceable(56) %24, ptr noundef nonnull align 8 dereferenceable(56) %25)
          to label %118 unwind label %150

118:                                              ; preds = %116
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %25) #10
  call void @llvm.lifetime.end.p0(i64 56, ptr %25) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #10
  %119 = invoke noundef double @_ZNK7SGTELIB6Matrix3sumEv(ptr noundef nonnull align 8 dereferenceable(56) %24)
          to label %120 unwind label %155

120:                                              ; preds = %118
  %121 = load double, ptr %23, align 8, !tbaa !49
  %122 = fdiv double %119, %121
  store double %122, ptr %26, align 8, !tbaa !49
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #10
  call void @llvm.lifetime.start.p0(i64 56, ptr %28) #10
  call void @llvm.lifetime.start.p0(i64 56, ptr %29) #10
  %123 = load double, ptr %26, align 8, !tbaa !49
  %124 = fneg double %123
  invoke void @_ZplRKN7SGTELIB6MatrixEd(ptr dead_on_unwind writable sret(%"class.SGTELIB::Matrix") align 8 %29, ptr noundef nonnull align 8 dereferenceable(56) %24, double noundef %124)
          to label %125 unwind label %159

125:                                              ; preds = %120
  invoke void @_ZN7SGTELIB6Matrix15hadamard_squareERKS0_(ptr dead_on_unwind writable sret(%"class.SGTELIB::Matrix") align 8 %28, ptr noundef nonnull align 8 dereferenceable(56) %29)
          to label %126 unwind label %163

126:                                              ; preds = %125
  %127 = invoke noundef double @_ZNK7SGTELIB6Matrix3sumEv(ptr noundef nonnull align 8 dereferenceable(56) %28)
          to label %128 unwind label %167

128:                                              ; preds = %126
  %129 = load double, ptr %23, align 8, !tbaa !49
  %130 = fdiv double %127, %129
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %28) #10
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %29) #10
  call void @llvm.lifetime.end.p0(i64 56, ptr %29) #10
  call void @llvm.lifetime.end.p0(i64 56, ptr %28) #10
  store double %130, ptr %27, align 8, !tbaa !49
  %131 = load double, ptr %27, align 8, !tbaa !49
  %132 = fcmp oeq double %131, 0.000000e+00
  br i1 %132, label %133, label %173

133:                                              ; preds = %128
  store double 1.000000e-13, ptr %27, align 8, !tbaa !49
  br label %173

134:                                              ; preds = %104, %99
  %135 = landingpad { ptr, i32 }
          cleanup
  %136 = extractvalue { ptr, i32 } %135, 0
  store ptr %136, ptr %9, align 8
  %137 = extractvalue { ptr, i32 } %135, 1
  store i32 %137, ptr %10, align 4
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %21) #10
  call void @llvm.lifetime.end.p0(i64 56, ptr %21) #10
  br label %1548

138:                                              ; preds = %105
  %139 = landingpad { ptr, i32 }
          cleanup
  %140 = extractvalue { ptr, i32 } %139, 0
  store ptr %140, ptr %9, align 8
  %141 = extractvalue { ptr, i32 } %139, 1
  store i32 %141, ptr %10, align 4
  br label %1547

142:                                              ; preds = %107
  %143 = landingpad { ptr, i32 }
          cleanup
  %144 = extractvalue { ptr, i32 } %143, 0
  store ptr %144, ptr %9, align 8
  %145 = extractvalue { ptr, i32 } %143, 1
  store i32 %145, ptr %10, align 4
  br label %1546

146:                                              ; preds = %115
  %147 = landingpad { ptr, i32 }
          cleanup
  %148 = extractvalue { ptr, i32 } %147, 0
  store ptr %148, ptr %9, align 8
  %149 = extractvalue { ptr, i32 } %147, 1
  store i32 %149, ptr %10, align 4
  br label %154

150:                                              ; preds = %116
  %151 = landingpad { ptr, i32 }
          cleanup
  %152 = extractvalue { ptr, i32 } %151, 0
  store ptr %152, ptr %9, align 8
  %153 = extractvalue { ptr, i32 } %151, 1
  store i32 %153, ptr %10, align 4
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %25) #10
  br label %154

154:                                              ; preds = %150, %146
  call void @llvm.lifetime.end.p0(i64 56, ptr %25) #10
  br label %1545

155:                                              ; preds = %118
  %156 = landingpad { ptr, i32 }
          cleanup
  %157 = extractvalue { ptr, i32 } %156, 0
  store ptr %157, ptr %9, align 8
  %158 = extractvalue { ptr, i32 } %156, 1
  store i32 %158, ptr %10, align 4
  br label %1544

159:                                              ; preds = %120
  %160 = landingpad { ptr, i32 }
          cleanup
  %161 = extractvalue { ptr, i32 } %160, 0
  store ptr %161, ptr %9, align 8
  %162 = extractvalue { ptr, i32 } %160, 1
  store i32 %162, ptr %10, align 4
  br label %172

163:                                              ; preds = %125
  %164 = landingpad { ptr, i32 }
          cleanup
  %165 = extractvalue { ptr, i32 } %164, 0
  store ptr %165, ptr %9, align 8
  %166 = extractvalue { ptr, i32 } %164, 1
  store i32 %166, ptr %10, align 4
  br label %171

167:                                              ; preds = %126
  %168 = landingpad { ptr, i32 }
          cleanup
  %169 = extractvalue { ptr, i32 } %168, 0
  store ptr %169, ptr %9, align 8
  %170 = extractvalue { ptr, i32 } %168, 1
  store i32 %170, ptr %10, align 4
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %28) #10
  br label %171

171:                                              ; preds = %167, %163
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %29) #10
  br label %172

172:                                              ; preds = %171, %159
  call void @llvm.lifetime.end.p0(i64 56, ptr %29) #10
  call void @llvm.lifetime.end.p0(i64 56, ptr %28) #10
  br label %1543

173:                                              ; preds = %133, %128
  %174 = load double, ptr %26, align 8, !tbaa !49
  %175 = fcmp olt double %174, 0.000000e+00
  br i1 %175, label %179, label %176

176:                                              ; preds = %173
  %177 = load double, ptr %27, align 8, !tbaa !49
  %178 = fcmp olt double %177, 0.000000e+00
  br i1 %178, label %179, label %219

179:                                              ; preds = %176, %173
  %180 = 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 %181 unwind label %198

181:                                              ; preds = %179
  %182 = load double, ptr %26, align 8, !tbaa !49
  %183 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %180, double noundef %182)
          to label %184 unwind label %198

184:                                              ; preds = %181
  %185 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %183, ptr noundef @.str.2)
          to label %186 unwind label %198

186:                                              ; preds = %184
  %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.6)
          to label %188 unwind label %198

188:                                              ; preds = %186
  %189 = load double, ptr %27, 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 %198

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 %198

193:                                              ; preds = %191
  store i1 true, ptr %34, align 1
  %194 = call ptr @__cxa_allocate_exception(i64 112) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr %30) #10
  call void @llvm.lifetime.start.p0(i64 1, ptr %31) #10
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %31) #10
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %30, ptr noundef @.str.3, ptr noundef nonnull align 1 dereferenceable(1) %31)
          to label %195 unwind label %202

195:                                              ; preds = %193
  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.7, ptr noundef nonnull align 1 dereferenceable(1) %33)
          to label %196 unwind label %206

196:                                              ; preds = %195
  invoke void @_ZN7SGTELIB9ExceptionC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiS8_(ptr noundef nonnull align 8 dereferenceable(112) %194, ptr noundef nonnull align 8 dereferenceable(32) %30, i32 noundef 339, ptr noundef nonnull align 8 dereferenceable(32) %32)
          to label %197 unwind label %210

197:                                              ; preds = %196
  store i1 false, ptr %34, align 1
  invoke void @__cxa_throw(ptr %194, ptr @_ZTIN7SGTELIB9ExceptionE, ptr @_ZN7SGTELIB9ExceptionD2Ev) #11
          to label %1554 unwind label %210

198:                                              ; preds = %191, %188, %186, %184, %181, %179
  %199 = landingpad { ptr, i32 }
          cleanup
  %200 = extractvalue { ptr, i32 } %199, 0
  store ptr %200, ptr %9, align 8
  %201 = extractvalue { ptr, i32 } %199, 1
  store i32 %201, ptr %10, align 4
  br label %1543

202:                                              ; preds = %193
  %203 = landingpad { ptr, i32 }
          cleanup
  %204 = extractvalue { ptr, i32 } %203, 0
  store ptr %204, ptr %9, align 8
  %205 = extractvalue { ptr, i32 } %203, 1
  store i32 %205, ptr %10, align 4
  br label %215

206:                                              ; preds = %195
  %207 = landingpad { ptr, i32 }
          cleanup
  %208 = extractvalue { ptr, i32 } %207, 0
  store ptr %208, ptr %9, align 8
  %209 = extractvalue { ptr, i32 } %207, 1
  store i32 %209, ptr %10, align 4
  br label %214

210:                                              ; preds = %197, %196
  %211 = landingpad { ptr, i32 }
          cleanup
  %212 = extractvalue { ptr, i32 } %211, 0
  store ptr %212, ptr %9, align 8
  %213 = extractvalue { ptr, i32 } %211, 1
  store i32 %213, ptr %10, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %32) #10
  br label %214

214:                                              ; preds = %210, %206
  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
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #10
  br label %215

215:                                              ; preds = %214, %202
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %31) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %31) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %30) #10
  %216 = load i1, ptr %34, align 1
  br i1 %216, label %217, label %218

217:                                              ; preds = %215
  call void @__cxa_free_exception(ptr %194) #10
  br label %218

218:                                              ; preds = %217, %215
  br label %1543

219:                                              ; preds = %176
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #10
  %220 = load double, ptr %26, align 8, !tbaa !49
  %221 = load double, ptr %26, align 8, !tbaa !49
  %222 = fmul double %220, %221
  %223 = load double, ptr %27, align 8, !tbaa !49
  %224 = fdiv double %222, %223
  store double %224, ptr %35, align 8, !tbaa !49
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #10
  %225 = load double, ptr %27, align 8, !tbaa !49
  %226 = load double, ptr %26, align 8, !tbaa !49
  %227 = fdiv double %225, %226
  store double %227, ptr %36, align 8, !tbaa !49
  %228 = invoke noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %22, ptr noundef @.str.8)
          to label %229 unwind label %248

229:                                              ; preds = %219
  br i1 %228, label %230, label %253

230:                                              ; preds = %229
  store i32 0, ptr %14, align 4, !tbaa !9
  br label %231

231:                                              ; preds = %245, %230
  %232 = load i32, ptr %14, align 4, !tbaa !9
  %233 = getelementptr inbounds %"class.SGTELIB::Surrogate", ptr %74, i32 0, i32 7
  %234 = load i32, ptr %233, align 8, !tbaa !48
  %235 = icmp slt i32 %232, %234
  br i1 %235, label %236, label %252

236:                                              ; preds = %231
  %237 = load i32, ptr %14, align 4, !tbaa !9
  %238 = invoke noundef double @_ZNK7SGTELIB6Matrix3getEi(ptr noundef nonnull align 8 dereferenceable(56) %20, i32 noundef %237)
          to label %239 unwind label %248

239:                                              ; preds = %236
  %240 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 5
  %241 = load ptr, ptr %240, align 8, !tbaa !50
  %242 = load i32, ptr %14, align 4, !tbaa !9
  %243 = sext i32 %242 to i64
  %244 = getelementptr inbounds double, ptr %241, i64 %243
  store double %238, ptr %244, align 8, !tbaa !49
  br label %245

245:                                              ; preds = %239
  %246 = load i32, ptr %14, align 4, !tbaa !9
  %247 = add nsw i32 %246, 1
  store i32 %247, ptr %14, align 4, !tbaa !9
  br label %231, !llvm.loop !52

248:                                              ; preds = %436, %422, %419, %410, %407, %350, %347, %309, %253, %236, %219
  %249 = landingpad { ptr, i32 }
          cleanup
  %250 = extractvalue { ptr, i32 } %249, 0
  store ptr %250, ptr %9, align 8
  %251 = extractvalue { ptr, i32 } %249, 1
  store i32 %251, ptr %10, align 4
  br label %1542

252:                                              ; preds = %231
  br label %466

253:                                              ; preds = %229
  %254 = invoke noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %22, ptr noundef @.str.9)
          to label %255 unwind label %248

255:                                              ; preds = %253
  br i1 %254, label %256, label %309

256:                                              ; preds = %255
  call void @llvm.lifetime.start.p0(i64 56, ptr %37) #10
  invoke void @_ZNK7SGTELIB6Matrix4rankEv(ptr dead_on_unwind writable sret(%"class.SGTELIB::Matrix") align 8 %37, ptr noundef nonnull align 8 dereferenceable(56) %20)
          to label %257 unwind label %270

257:                                              ; preds = %256
  store i32 0, ptr %14, align 4, !tbaa !9
  br label %258

258:                                              ; preds = %267, %257
  %259 = load i32, ptr %14, align 4, !tbaa !9
  %260 = invoke noundef double @_ZNK7SGTELIB6Matrix3getEi(ptr noundef nonnull align 8 dereferenceable(56) %37, i32 noundef %259)
          to label %261 unwind label %274

261:                                              ; preds = %258
  %262 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 1
  %263 = load i32, ptr %262, align 4, !tbaa !54
  %264 = sub nsw i32 %263, 1
  %265 = sitofp i32 %264 to double
  %266 = fcmp une double %260, %265
  br i1 %266, label %267, label %278

267:                                              ; preds = %261
  %268 = load i32, ptr %14, align 4, !tbaa !9
  %269 = add nsw i32 %268, 1
  store i32 %269, ptr %14, align 4, !tbaa !9
  br label %258, !llvm.loop !55

270:                                              ; preds = %256
  %271 = landingpad { ptr, i32 }
          cleanup
  %272 = extractvalue { ptr, i32 } %271, 0
  store ptr %272, ptr %9, align 8
  %273 = extractvalue { ptr, i32 } %271, 1
  store i32 %273, ptr %10, align 4
  br label %308

274:                                              ; preds = %258
  %275 = landingpad { ptr, i32 }
          cleanup
  %276 = extractvalue { ptr, i32 } %275, 0
  store ptr %276, ptr %9, align 8
  %277 = extractvalue { ptr, i32 } %275, 1
  store i32 %277, ptr %10, align 4
  br label %307

278:                                              ; preds = %261
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #10
  %279 = load i32, ptr %14, align 4, !tbaa !9
  %280 = invoke noundef double @_ZNK7SGTELIB6Matrix3getEi(ptr noundef nonnull align 8 dereferenceable(56) %20, i32 noundef %279)
          to label %281 unwind label %302

281:                                              ; preds = %278
  %282 = fmul double 2.000000e+00, %280
  store double %282, ptr %38, align 8, !tbaa !49
  store i32 0, ptr %14, align 4, !tbaa !9
  br label %283

283:                                              ; preds = %299, %281
  %284 = load i32, ptr %14, align 4, !tbaa !9
  %285 = getelementptr inbounds %"class.SGTELIB::Surrogate", ptr %74, i32 0, i32 7
  %286 = load i32, ptr %285, align 8, !tbaa !48
  %287 = icmp slt i32 %284, %286
  br i1 %287, label %288, label %306

288:                                              ; preds = %283
  %289 = load i32, ptr %14, align 4, !tbaa !9
  %290 = invoke noundef double @_ZNK7SGTELIB6Matrix3getEi(ptr noundef nonnull align 8 dereferenceable(56) %20, i32 noundef %289)
          to label %291 unwind label %302

291:                                              ; preds = %288
  %292 = load double, ptr %38, align 8, !tbaa !49
  %293 = fdiv double %290, %292
  %294 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 5
  %295 = load ptr, ptr %294, align 8, !tbaa !50
  %296 = load i32, ptr %14, align 4, !tbaa !9
  %297 = sext i32 %296 to i64
  %298 = getelementptr inbounds double, ptr %295, i64 %297
  store double %293, ptr %298, align 8, !tbaa !49
  br label %299

299:                                              ; preds = %291
  %300 = load i32, ptr %14, align 4, !tbaa !9
  %301 = add nsw i32 %300, 1
  store i32 %301, ptr %14, align 4, !tbaa !9
  br label %283, !llvm.loop !56

302:                                              ; preds = %288, %278
  %303 = landingpad { ptr, i32 }
          cleanup
  %304 = extractvalue { ptr, i32 } %303, 0
  store ptr %304, ptr %9, align 8
  %305 = extractvalue { ptr, i32 } %303, 1
  store i32 %305, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #10
  br label %307

306:                                              ; preds = %283
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #10
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %37) #10
  call void @llvm.lifetime.end.p0(i64 56, ptr %37) #10
  br label %465

307:                                              ; preds = %302, %274
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %37) #10
  br label %308

308:                                              ; preds = %307, %270
  call void @llvm.lifetime.end.p0(i64 56, ptr %37) #10
  br label %1542

309:                                              ; preds = %255
  %310 = invoke noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %22, ptr noundef @.str.10)
          to label %311 unwind label %248

311:                                              ; preds = %309
  br i1 %310, label %312, label %347

312:                                              ; preds = %311
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #10
  %313 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 1
  %314 = load i32, ptr %313, align 4, !tbaa !54
  %315 = sitofp i32 %314 to double
  %316 = load double, ptr %23, align 8, !tbaa !49
  %317 = fdiv double %315, %316
  %318 = load double, ptr %35, align 8, !tbaa !49
  %319 = load double, ptr %36, align 8, !tbaa !49
  %320 = invoke noundef double @_ZN7SGTELIB11gammacdfinvEddd(double noundef %317, double noundef %318, double noundef %319)
          to label %321 unwind label %342

321:                                              ; preds = %312
  %322 = call double @pow(double noundef %320, double noundef 5.000000e-01) #10
  store double %322, ptr %39, align 8, !tbaa !49
  store i32 0, ptr %14, align 4, !tbaa !9
  br label %323

323:                                              ; preds = %339, %321
  %324 = load i32, ptr %14, align 4, !tbaa !9
  %325 = getelementptr inbounds %"class.SGTELIB::Surrogate", ptr %74, i32 0, i32 7
  %326 = load i32, ptr %325, align 8, !tbaa !48
  %327 = icmp slt i32 %324, %326
  br i1 %327, label %328, label %346

328:                                              ; preds = %323
  %329 = load i32, ptr %14, align 4, !tbaa !9
  %330 = invoke noundef double @_ZNK7SGTELIB6Matrix3getEi(ptr noundef nonnull align 8 dereferenceable(56) %20, i32 noundef %329)
          to label %331 unwind label %342

331:                                              ; preds = %328
  %332 = load double, ptr %39, align 8, !tbaa !49
  %333 = fdiv double %330, %332
  %334 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 5
  %335 = load ptr, ptr %334, align 8, !tbaa !50
  %336 = load i32, ptr %14, align 4, !tbaa !9
  %337 = sext i32 %336 to i64
  %338 = getelementptr inbounds double, ptr %335, i64 %337
  store double %333, ptr %338, align 8, !tbaa !49
  br label %339

339:                                              ; preds = %331
  %340 = load i32, ptr %14, align 4, !tbaa !9
  %341 = add nsw i32 %340, 1
  store i32 %341, ptr %14, align 4, !tbaa !9
  br label %323, !llvm.loop !57

342:                                              ; preds = %328, %312
  %343 = landingpad { ptr, i32 }
          cleanup
  %344 = extractvalue { ptr, i32 } %343, 0
  store ptr %344, ptr %9, align 8
  %345 = extractvalue { ptr, i32 } %343, 1
  store i32 %345, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #10
  br label %1542

346:                                              ; preds = %323
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #10
  br label %464

347:                                              ; preds = %311
  %348 = invoke noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %22, ptr noundef @.str.11)
          to label %349 unwind label %248

349:                                              ; preds = %347
  br i1 %348, label %353, label %350

350:                                              ; preds = %349
  %351 = invoke noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %22, ptr noundef @.str.12)
          to label %352 unwind label %248

352:                                              ; preds = %350
  br i1 %351, label %353, label %407

353:                                              ; preds = %352, %349
  call void @llvm.lifetime.start.p0(i64 56, ptr %40) #10
  invoke void @_ZNK7SGTELIB6Matrix4rankEv(ptr dead_on_unwind writable sret(%"class.SGTELIB::Matrix") align 8 %40, ptr noundef nonnull align 8 dereferenceable(56) %20)
          to label %354 unwind label %372

354:                                              ; preds = %353
  store i32 0, ptr %14, align 4, !tbaa !9
  br label %355

355:                                              ; preds = %369, %354
  %356 = load i32, ptr %14, align 4, !tbaa !9
  %357 = getelementptr inbounds %"class.SGTELIB::Surrogate", ptr %74, i32 0, i32 7
  %358 = load i32, ptr %357, align 8, !tbaa !48
  %359 = icmp slt i32 %356, %358
  br i1 %359, label %360, label %380

360:                                              ; preds = %355
  %361 = load i32, ptr %14, align 4, !tbaa !9
  %362 = invoke noundef double @_ZNK7SGTELIB6Matrix3getEi(ptr noundef nonnull align 8 dereferenceable(56) %40, i32 noundef %361)
          to label %363 unwind label %376

363:                                              ; preds = %360
  %364 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 5
  %365 = load ptr, ptr %364, align 8, !tbaa !50
  %366 = load i32, ptr %14, align 4, !tbaa !9
  %367 = sext i32 %366 to i64
  %368 = getelementptr inbounds double, ptr %365, i64 %367
  store double %362, ptr %368, align 8, !tbaa !49
  br label %369

369:                                              ; preds = %363
  %370 = load i32, ptr %14, align 4, !tbaa !9
  %371 = add nsw i32 %370, 1
  store i32 %371, ptr %14, align 4, !tbaa !9
  br label %355, !llvm.loop !58

372:                                              ; preds = %353
  %373 = landingpad { ptr, i32 }
          cleanup
  %374 = extractvalue { ptr, i32 } %373, 0
  store ptr %374, ptr %9, align 8
  %375 = extractvalue { ptr, i32 } %373, 1
  store i32 %375, ptr %10, align 4
  br label %406

376:                                              ; preds = %380, %360
  %377 = landingpad { ptr, i32 }
          cleanup
  %378 = extractvalue { ptr, i32 } %377, 0
  store ptr %378, ptr %9, align 8
  %379 = extractvalue { ptr, i32 } %377, 1
  store i32 %379, ptr %10, align 4
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %40) #10
  br label %406

380:                                              ; preds = %355
  %381 = invoke noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %22, ptr noundef @.str.12)
          to label %382 unwind label %376

382:                                              ; preds = %380
  br i1 %381, label %383, label %405

383:                                              ; preds = %382
  store i32 0, ptr %14, align 4, !tbaa !9
  br label %384

384:                                              ; preds = %401, %383
  %385 = load i32, ptr %14, align 4, !tbaa !9
  %386 = getelementptr inbounds %"class.SGTELIB::Surrogate", ptr %74, i32 0, i32 7
  %387 = load i32, ptr %386, align 8, !tbaa !48
  %388 = icmp slt i32 %385, %387
  br i1 %388, label %389, label %404

389:                                              ; preds = %384
  %390 = getelementptr inbounds %"class.SGTELIB::Surrogate", ptr %74, i32 0, i32 7
  %391 = load i32, ptr %390, align 8, !tbaa !48
  %392 = sitofp i32 %391 to double
  %393 = fsub double %392, 1.000000e+00
  %394 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 5
  %395 = load ptr, ptr %394, align 8, !tbaa !50
  %396 = load i32, ptr %14, align 4, !tbaa !9
  %397 = sext i32 %396 to i64
  %398 = getelementptr inbounds double, ptr %395, i64 %397
  %399 = load double, ptr %398, align 8, !tbaa !49
  %400 = fdiv double %399, %393
  store double %400, ptr %398, align 8, !tbaa !49
  br label %401

401:                                              ; preds = %389
  %402 = load i32, ptr %14, align 4, !tbaa !9
  %403 = add nsw i32 %402, 1
  store i32 %403, ptr %14, align 4, !tbaa !9
  br label %384, !llvm.loop !59

404:                                              ; preds = %384
  br label %405

405:                                              ; preds = %404, %382
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %40) #10
  call void @llvm.lifetime.end.p0(i64 56, ptr %40) #10
  br label %463

406:                                              ; preds = %376, %372
  call void @llvm.lifetime.end.p0(i64 56, ptr %40) #10
  br label %1542

407:                                              ; preds = %352
  %408 = invoke noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %22, ptr noundef @.str.13)
          to label %409 unwind label %248

409:                                              ; preds = %407
  br i1 %408, label %413, label %410

410:                                              ; preds = %409
  %411 = invoke noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %22, ptr noundef @.str.14)
          to label %412 unwind label %248

412:                                              ; preds = %410
  br i1 %411, label %413, label %462

413:                                              ; preds = %412, %409
  store i32 0, ptr %14, align 4, !tbaa !9
  br label %414

414:                                              ; preds = %433, %413
  %415 = load i32, ptr %14, align 4, !tbaa !9
  %416 = getelementptr inbounds %"class.SGTELIB::Surrogate", ptr %74, i32 0, i32 7
  %417 = load i32, ptr %416, align 8, !tbaa !48
  %418 = icmp slt i32 %415, %417
  br i1 %418, label %419, label %436

419:                                              ; preds = %414
  %420 = load i32, ptr %14, align 4, !tbaa !9
  %421 = invoke noundef double @_ZNK7SGTELIB6Matrix3getEi(ptr noundef nonnull align 8 dereferenceable(56) %20, i32 noundef %420)
          to label %422 unwind label %248

422:                                              ; preds = %419
  %423 = call double @pow(double noundef %421, double noundef 2.000000e+00) #10
  %424 = load double, ptr %35, align 8, !tbaa !49
  %425 = load double, ptr %36, align 8, !tbaa !49
  %426 = invoke noundef double @_ZN7SGTELIB8gammacdfEddd(double noundef %423, double noundef %424, double noundef %425)
          to label %427 unwind label %248

427:                                              ; preds = %422
  %428 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 5
  %429 = load ptr, ptr %428, align 8, !tbaa !50
  %430 = load i32, ptr %14, align 4, !tbaa !9
  %431 = sext i32 %430 to i64
  %432 = getelementptr inbounds double, ptr %429, i64 %431
  store double %426, ptr %432, align 8, !tbaa !49
  br label %433

433:                                              ; preds = %427
  %434 = load i32, ptr %14, align 4, !tbaa !9
  %435 = add nsw i32 %434, 1
  store i32 %435, ptr %14, align 4, !tbaa !9
  br label %414, !llvm.loop !60

436:                                              ; preds = %414
  %437 = invoke noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %22, ptr noundef @.str.13)
          to label %438 unwind label %248

438:                                              ; preds = %436
  br i1 %437, label %439, label %461

439:                                              ; preds = %438
  store i32 0, ptr %14, align 4, !tbaa !9
  br label %440

440:                                              ; preds = %457, %439
  %441 = load i32, ptr %14, align 4, !tbaa !9
  %442 = getelementptr inbounds %"class.SGTELIB::Surrogate", ptr %74, i32 0, i32 7
  %443 = load i32, ptr %442, align 8, !tbaa !48
  %444 = icmp slt i32 %441, %443
  br i1 %444, label %445, label %460

445:                                              ; preds = %440
  %446 = getelementptr inbounds %"class.SGTELIB::Surrogate", ptr %74, i32 0, i32 7
  %447 = load i32, ptr %446, align 8, !tbaa !48
  %448 = sitofp i32 %447 to double
  %449 = fsub double %448, 1.000000e+00
  %450 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 5
  %451 = load ptr, ptr %450, align 8, !tbaa !50
  %452 = load i32, ptr %14, align 4, !tbaa !9
  %453 = sext i32 %452 to i64
  %454 = getelementptr inbounds double, ptr %451, i64 %453
  %455 = load double, ptr %454, align 8, !tbaa !49
  %456 = fmul double %455, %449
  store double %456, ptr %454, align 8, !tbaa !49
  br label %457

457:                                              ; preds = %445
  %458 = load i32, ptr %14, align 4, !tbaa !9
  %459 = add nsw i32 %458, 1
  store i32 %459, ptr %14, align 4, !tbaa !9
  br label %440, !llvm.loop !61

460:                                              ; preds = %440
  br label %461

461:                                              ; preds = %460, %438
  br label %462

462:                                              ; preds = %461, %412
  br label %463

463:                                              ; preds = %462, %405
  br label %464

464:                                              ; preds = %463, %346
  br label %465

465:                                              ; preds = %464, %306
  br label %466

466:                                              ; preds = %465, %252
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #10
  %467 = load double, ptr %27, align 8, !tbaa !49
  %468 = fcmp oeq double %467, 0.000000e+00
  br i1 %468, label %469, label %488

469:                                              ; preds = %466
  store i32 0, ptr %14, align 4, !tbaa !9
  br label %470

470:                                              ; preds = %481, %469
  %471 = load i32, ptr %14, align 4, !tbaa !9
  %472 = getelementptr inbounds %"class.SGTELIB::Surrogate", ptr %74, i32 0, i32 7
  %473 = load i32, ptr %472, align 8, !tbaa !48
  %474 = icmp slt i32 %471, %473
  br i1 %474, label %475, label %484

475:                                              ; preds = %470
  %476 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 5
  %477 = load ptr, ptr %476, align 8, !tbaa !50
  %478 = load i32, ptr %14, align 4, !tbaa !9
  %479 = sext i32 %478 to i64
  %480 = getelementptr inbounds double, ptr %477, i64 %479
  store double 1.000000e+00, ptr %480, align 8, !tbaa !49
  br label %481

481:                                              ; preds = %475
  %482 = load i32, ptr %14, align 4, !tbaa !9
  %483 = add nsw i32 %482, 1
  store i32 %483, ptr %14, align 4, !tbaa !9
  br label %470, !llvm.loop !62

484:                                              ; preds = %470
  %485 = getelementptr inbounds %"class.SGTELIB::Surrogate", ptr %74, i32 0, i32 7
  %486 = load i32, ptr %485, align 8, !tbaa !48
  %487 = sitofp i32 %486 to double
  store double %487, ptr %41, align 8, !tbaa !49
  br label %537

488:                                              ; preds = %466
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #10
  %489 = getelementptr inbounds %"class.SGTELIB::Surrogate", ptr %74, i32 0, i32 2
  %490 = invoke noundef double @_ZNK7SGTELIB20Surrogate_Parameters15get_kernel_coefEv(ptr noundef nonnull align 8 dereferenceable(312) %489)
          to label %491 unwind label %527

491:                                              ; preds = %488
  store double %490, ptr %42, align 8, !tbaa !49
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #10
  %492 = getelementptr inbounds %"class.SGTELIB::Surrogate", ptr %74, i32 0, i32 2
  %493 = invoke noundef i32 @_ZNK7SGTELIB20Surrogate_Parameters15get_kernel_typeEv(ptr noundef nonnull align 8 dereferenceable(312) %492)
          to label %494 unwind label %531

494:                                              ; preds = %491
  store i32 %493, ptr %43, align 4, !tbaa !63
  store double 0.000000e+00, ptr %41, align 8, !tbaa !49
  store i32 0, ptr %14, align 4, !tbaa !9
  br label %495

495:                                              ; preds = %524, %494
  %496 = load i32, ptr %14, align 4, !tbaa !9
  %497 = getelementptr inbounds %"class.SGTELIB::Surrogate", ptr %74, i32 0, i32 7
  %498 = load i32, ptr %497, align 8, !tbaa !48
  %499 = icmp slt i32 %496, %498
  br i1 %499, label %500, label %535

500:                                              ; preds = %495
  %501 = load i32, ptr %43, align 4, !tbaa !63
  %502 = load double, ptr %42, align 8, !tbaa !49
  %503 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 5
  %504 = load ptr, ptr %503, align 8, !tbaa !50
  %505 = load i32, ptr %14, align 4, !tbaa !9
  %506 = sext i32 %505 to i64
  %507 = getelementptr inbounds double, ptr %504, i64 %506
  %508 = load double, ptr %507, align 8, !tbaa !49
  %509 = invoke noundef double @_ZN7SGTELIB6kernelENS_8kernel_tEdd(i32 noundef %501, double noundef %502, double noundef %508)
          to label %510 unwind label %531

510:                                              ; preds = %500
  %511 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 5
  %512 = load ptr, ptr %511, align 8, !tbaa !50
  %513 = load i32, ptr %14, align 4, !tbaa !9
  %514 = sext i32 %513 to i64
  %515 = getelementptr inbounds double, ptr %512, i64 %514
  store double %509, ptr %515, align 8, !tbaa !49
  %516 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 5
  %517 = load ptr, ptr %516, align 8, !tbaa !50
  %518 = load i32, ptr %14, align 4, !tbaa !9
  %519 = sext i32 %518 to i64
  %520 = getelementptr inbounds double, ptr %517, i64 %519
  %521 = load double, ptr %520, align 8, !tbaa !49
  %522 = load double, ptr %41, align 8, !tbaa !49
  %523 = fadd double %522, %521
  store double %523, ptr %41, align 8, !tbaa !49
  br label %524

524:                                              ; preds = %510
  %525 = load i32, ptr %14, align 4, !tbaa !9
  %526 = add nsw i32 %525, 1
  store i32 %526, ptr %14, align 4, !tbaa !9
  br label %495, !llvm.loop !64

527:                                              ; preds = %488
  %528 = landingpad { ptr, i32 }
          cleanup
  %529 = extractvalue { ptr, i32 } %528, 0
  store ptr %529, ptr %9, align 8
  %530 = extractvalue { ptr, i32 } %528, 1
  store i32 %530, ptr %10, align 4
  br label %536

531:                                              ; preds = %500, %491
  %532 = landingpad { ptr, i32 }
          cleanup
  %533 = extractvalue { ptr, i32 } %532, 0
  store ptr %533, ptr %9, align 8
  %534 = extractvalue { ptr, i32 } %532, 1
  store i32 %534, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #10
  br label %536

535:                                              ; preds = %495
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #10
  br label %537

536:                                              ; preds = %531, %527
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #10
  br label %1541

537:                                              ; preds = %535, %484
  %538 = load i32, ptr %6, align 4, !tbaa !9
  %539 = icmp ne i32 %538, -1
  br i1 %539, label %540, label %554

540:                                              ; preds = %537
  %541 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 5
  %542 = load ptr, ptr %541, align 8, !tbaa !50
  %543 = load i32, ptr %6, align 4, !tbaa !9
  %544 = sext i32 %543 to i64
  %545 = getelementptr inbounds double, ptr %542, i64 %544
  %546 = load double, ptr %545, align 8, !tbaa !49
  %547 = load double, ptr %41, align 8, !tbaa !49
  %548 = fsub double %547, %546
  store double %548, ptr %41, align 8, !tbaa !49
  %549 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 5
  %550 = load ptr, ptr %549, align 8, !tbaa !50
  %551 = load i32, ptr %6, align 4, !tbaa !9
  %552 = sext i32 %551 to i64
  %553 = getelementptr inbounds double, ptr %550, i64 %552
  store double 0.000000e+00, ptr %553, align 8, !tbaa !49
  br label %554

554:                                              ; preds = %540, %537
  %555 = load double, ptr %41, align 8, !tbaa !49
  %556 = fcmp ogt double %555, 1.000000e-13
  br i1 %556, label %557, label %576

557:                                              ; preds = %554
  store i32 0, ptr %14, align 4, !tbaa !9
  br label %558

558:                                              ; preds = %572, %557
  %559 = load i32, ptr %14, align 4, !tbaa !9
  %560 = getelementptr inbounds %"class.SGTELIB::Surrogate", ptr %74, i32 0, i32 7
  %561 = load i32, ptr %560, align 8, !tbaa !48
  %562 = icmp slt i32 %559, %561
  br i1 %562, label %563, label %575

563:                                              ; preds = %558
  %564 = load double, ptr %41, align 8, !tbaa !49
  %565 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 5
  %566 = load ptr, ptr %565, align 8, !tbaa !50
  %567 = load i32, ptr %14, align 4, !tbaa !9
  %568 = sext i32 %567 to i64
  %569 = getelementptr inbounds double, ptr %566, i64 %568
  %570 = load double, ptr %569, align 8, !tbaa !49
  %571 = fdiv double %570, %564
  store double %571, ptr %569, align 8, !tbaa !49
  br label %572

572:                                              ; preds = %563
  %573 = load i32, ptr %14, align 4, !tbaa !9
  %574 = add nsw i32 %573, 1
  store i32 %574, ptr %14, align 4, !tbaa !9
  br label %558, !llvm.loop !65

575:                                              ; preds = %558
  br label %592

576:                                              ; preds = %554
  store i32 0, ptr %14, align 4, !tbaa !9
  br label %577

577:                                              ; preds = %588, %576
  %578 = load i32, ptr %14, align 4, !tbaa !9
  %579 = getelementptr inbounds %"class.SGTELIB::Surrogate", ptr %74, i32 0, i32 7
  %580 = load i32, ptr %579, align 8, !tbaa !48
  %581 = icmp slt i32 %578, %580
  br i1 %581, label %582, label %591

582:                                              ; preds = %577
  %583 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 5
  %584 = load ptr, ptr %583, align 8, !tbaa !50
  %585 = load i32, ptr %14, align 4, !tbaa !9
  %586 = sext i32 %585 to i64
  %587 = getelementptr inbounds double, ptr %584, i64 %586
  store double 1.000000e+00, ptr %587, align 8, !tbaa !49
  br label %588

588:                                              ; preds = %582
  %589 = load i32, ptr %14, align 4, !tbaa !9
  %590 = add nsw i32 %589, 1
  store i32 %590, ptr %14, align 4, !tbaa !9
  br label %577, !llvm.loop !66

591:                                              ; preds = %577
  br label %592

592:                                              ; preds = %591, %575
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #10
  %593 = getelementptr inbounds %"class.SGTELIB::Surrogate", ptr %74, i32 0, i32 2
  %594 = invoke noundef double @_ZNK7SGTELIB20Surrogate_Parameters9get_ridgeEv(ptr noundef nonnull align 8 dereferenceable(312) %593)
          to label %595 unwind label %661

595:                                              ; preds = %592
  store double %594, ptr %44, align 8, !tbaa !49
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #10
  call void @llvm.lifetime.start.p0(i64 56, ptr %46) #10
  invoke void @_ZN7SGTELIB9Surrogate13get_matrix_ZsEv(ptr dead_on_unwind writable sret(%"class.SGTELIB::Matrix") align 8 %46, ptr noundef nonnull align 8 dereferenceable(985) %74)
          to label %596 unwind label %665

596:                                              ; preds = %595
  store ptr %46, ptr %45, align 8, !tbaa !5
  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_XsEv(ptr dead_on_unwind writable sret(%"class.SGTELIB::Matrix") align 8 %48, ptr noundef nonnull align 8 dereferenceable(985) %74)
          to label %597 unwind label %669

597:                                              ; preds = %596
  store ptr %48, ptr %47, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #10
  store double 0.000000e+00, ptr %49, align 8, !tbaa !49
  store i32 0, ptr %14, align 4, !tbaa !9
  br label %598

598:                                              ; preds = %807, %597
  %599 = load i32, ptr %14, align 4, !tbaa !9
  %600 = getelementptr inbounds %"class.SGTELIB::Surrogate", ptr %74, i32 0, i32 7
  %601 = load i32, ptr %600, align 8, !tbaa !48
  %602 = icmp slt i32 %599, %601
  br i1 %602, label %603, label %810

603:                                              ; preds = %598
  store i32 0, ptr %18, align 4, !tbaa !9
  %604 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 4
  %605 = load ptr, ptr %604, align 8, !tbaa !67
  %606 = load i32, ptr %14, align 4, !tbaa !9
  %607 = sext i32 %606 to i64
  %608 = getelementptr inbounds ptr, ptr %605, i64 %607
  %609 = load ptr, ptr %608, align 8, !tbaa !5
  %610 = load i32, ptr %18, align 4, !tbaa !9
  %611 = add nsw i32 %610, 1
  store i32 %611, ptr %18, align 4, !tbaa !9
  %612 = sext i32 %610 to i64
  %613 = getelementptr inbounds double, ptr %609, i64 %612
  store double 1.000000e+00, ptr %613, align 8, !tbaa !49
  %614 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 5
  %615 = load ptr, ptr %614, align 8, !tbaa !50
  %616 = load i32, ptr %14, align 4, !tbaa !9
  %617 = sext i32 %616 to i64
  %618 = getelementptr inbounds double, ptr %615, i64 %617
  %619 = load double, ptr %618, align 8, !tbaa !49
  %620 = fcmp ogt double %619, 1.000000e-13
  br i1 %620, label %621, label %786

621:                                              ; preds = %603
  %622 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 3
  %623 = load i32, ptr %622, align 4, !tbaa !68
  %624 = icmp sge i32 %623, 10
  br i1 %624, label %625, label %678

625:                                              ; preds = %621
  store i32 0, ptr %15, align 4, !tbaa !9
  br label %626

626:                                              ; preds = %658, %625
  %627 = load i32, ptr %15, align 4, !tbaa !9
  %628 = getelementptr inbounds %"class.SGTELIB::Surrogate", ptr %74, i32 0, i32 3
  %629 = load i32, ptr %628, align 8, !tbaa !69
  %630 = icmp slt i32 %627, %629
  br i1 %630, label %631, label %636

631:                                              ; preds = %626
  %632 = load i32, ptr %18, align 4, !tbaa !9
  %633 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 1
  %634 = load i32, ptr %633, align 4, !tbaa !54
  %635 = icmp slt i32 %632, %634
  br label %636

636:                                              ; preds = %631, %626
  %637 = phi i1 [ false, %626 ], [ %635, %631 ]
  br i1 %637, label %638, label %677

638:                                              ; preds = %636
  %639 = load ptr, ptr %47, align 8, !tbaa !5
  %640 = load i32, ptr %14, align 4, !tbaa !9
  %641 = load i32, ptr %15, align 4, !tbaa !9
  %642 = invoke noundef double @_ZNK7SGTELIB6Matrix3getEii(ptr noundef nonnull align 8 dereferenceable(56) %639, i32 noundef %640, i32 noundef %641)
          to label %643 unwind label %673

643:                                              ; preds = %638
  %644 = load i32, ptr %15, align 4, !tbaa !9
  %645 = invoke noundef double @_ZNK7SGTELIB6Matrix3getEii(ptr noundef nonnull align 8 dereferenceable(56) %1, i32 noundef 0, i32 noundef %644)
          to label %646 unwind label %673

646:                                              ; preds = %643
  %647 = fsub double %642, %645
  %648 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 4
  %649 = load ptr, ptr %648, align 8, !tbaa !67
  %650 = load i32, ptr %14, align 4, !tbaa !9
  %651 = sext i32 %650 to i64
  %652 = getelementptr inbounds ptr, ptr %649, i64 %651
  %653 = load ptr, ptr %652, align 8, !tbaa !5
  %654 = load i32, ptr %18, align 4, !tbaa !9
  %655 = add nsw i32 %654, 1
  store i32 %655, ptr %18, align 4, !tbaa !9
  %656 = sext i32 %654 to i64
  %657 = getelementptr inbounds double, ptr %653, i64 %656
  store double %647, ptr %657, align 8, !tbaa !49
  br label %658

658:                                              ; preds = %646
  %659 = load i32, ptr %15, align 4, !tbaa !9
  %660 = add nsw i32 %659, 1
  store i32 %660, ptr %15, align 4, !tbaa !9
  br label %626, !llvm.loop !70

661:                                              ; preds = %592
  %662 = landingpad { ptr, i32 }
          cleanup
  %663 = extractvalue { ptr, i32 } %662, 0
  store ptr %663, ptr %9, align 8
  %664 = extractvalue { ptr, i32 } %662, 1
  store i32 %664, ptr %10, align 4
  br label %1540

665:                                              ; preds = %595
  %666 = landingpad { ptr, i32 }
          cleanup
  %667 = extractvalue { ptr, i32 } %666, 0
  store ptr %667, ptr %9, align 8
  %668 = extractvalue { ptr, i32 } %666, 1
  store i32 %668, ptr %10, align 4
  br label %1539

669:                                              ; preds = %596
  %670 = landingpad { ptr, i32 }
          cleanup
  %671 = extractvalue { ptr, i32 } %670, 0
  store ptr %671, ptr %9, align 8
  %672 = extractvalue { ptr, i32 } %670, 1
  store i32 %672, ptr %10, align 4
  br label %1538

673:                                              ; preds = %758, %752, %708, %703, %643, %638
  %674 = landingpad { ptr, i32 }
          cleanup
  %675 = extractvalue { ptr, i32 } %674, 0
  store ptr %675, ptr %9, align 8
  %676 = extractvalue { ptr, i32 } %674, 1
  store i32 %676, ptr %10, align 4
  br label %1537

677:                                              ; preds = %636
  br label %678

678:                                              ; preds = %677, %621
  %679 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 3
  %680 = load i32, ptr %679, align 4, !tbaa !68
  %681 = icmp sge i32 %680, 15
  br i1 %681, label %682, label %785

682:                                              ; preds = %678
  store i32 0, ptr %16, align 4, !tbaa !9
  br label %683

683:                                              ; preds = %781, %682
  %684 = load i32, ptr %16, align 4, !tbaa !9
  %685 = getelementptr inbounds %"class.SGTELIB::Surrogate", ptr %74, i32 0, i32 3
  %686 = load i32, ptr %685, align 8, !tbaa !69
  %687 = icmp slt i32 %684, %686
  br i1 %687, label %688, label %693

688:                                              ; preds = %683
  %689 = load i32, ptr %18, align 4, !tbaa !9
  %690 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 1
  %691 = load i32, ptr %690, align 4, !tbaa !54
  %692 = icmp slt i32 %689, %691
  br label %693

693:                                              ; preds = %688, %683
  %694 = phi i1 [ false, %683 ], [ %692, %688 ]
  br i1 %694, label %695, label %784

695:                                              ; preds = %693
  %696 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 12
  %697 = load ptr, ptr %696, align 8, !tbaa !71
  %698 = load i32, ptr %16, align 4, !tbaa !9
  %699 = sext i32 %698 to i64
  %700 = getelementptr inbounds i8, ptr %697, i64 %699
  %701 = load i8, ptr %700, align 1, !tbaa !72, !range !73, !noundef !74
  %702 = trunc i8 %701 to i1
  br i1 %702, label %703, label %780

703:                                              ; preds = %695
  %704 = load ptr, ptr %47, align 8, !tbaa !5
  %705 = load i32, ptr %14, align 4, !tbaa !9
  %706 = load i32, ptr %16, align 4, !tbaa !9
  %707 = invoke noundef double @_ZNK7SGTELIB6Matrix3getEii(ptr noundef nonnull align 8 dereferenceable(56) %704, i32 noundef %705, i32 noundef %706)
          to label %708 unwind label %673

708:                                              ; preds = %703
  %709 = load i32, ptr %16, align 4, !tbaa !9
  %710 = invoke noundef double @_ZNK7SGTELIB6Matrix3getEii(ptr noundef nonnull align 8 dereferenceable(56) %1, i32 noundef 0, i32 noundef %709)
          to label %711 unwind label %673

711:                                              ; preds = %708
  %712 = fsub double %707, %710
  store double %712, ptr %49, align 8, !tbaa !49
  %713 = load double, ptr %49, align 8, !tbaa !49
  %714 = load double, ptr %49, align 8, !tbaa !49
  %715 = fmul double %713, %714
  %716 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 4
  %717 = load ptr, ptr %716, align 8, !tbaa !67
  %718 = load i32, ptr %14, align 4, !tbaa !9
  %719 = sext i32 %718 to i64
  %720 = getelementptr inbounds ptr, ptr %717, i64 %719
  %721 = load ptr, ptr %720, align 8, !tbaa !5
  %722 = load i32, ptr %18, align 4, !tbaa !9
  %723 = add nsw i32 %722, 1
  store i32 %723, ptr %18, align 4, !tbaa !9
  %724 = sext i32 %722 to i64
  %725 = getelementptr inbounds double, ptr %721, i64 %724
  store double %715, ptr %725, align 8, !tbaa !49
  %726 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 3
  %727 = load i32, ptr %726, align 4, !tbaa !68
  %728 = icmp sge i32 %727, 20
  br i1 %728, label %729, label %779

729:                                              ; preds = %711
  %730 = load i32, ptr %16, align 4, !tbaa !9
  %731 = add nsw i32 %730, 1
  store i32 %731, ptr %17, align 4, !tbaa !9
  br label %732

732:                                              ; preds = %775, %729
  %733 = load i32, ptr %17, align 4, !tbaa !9
  %734 = getelementptr inbounds %"class.SGTELIB::Surrogate", ptr %74, i32 0, i32 3
  %735 = load i32, ptr %734, align 8, !tbaa !69
  %736 = icmp slt i32 %733, %735
  br i1 %736, label %737, label %742

737:                                              ; preds = %732
  %738 = load i32, ptr %18, align 4, !tbaa !9
  %739 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 1
  %740 = load i32, ptr %739, align 4, !tbaa !54
  %741 = icmp slt i32 %738, %740
  br label %742

742:                                              ; preds = %737, %732
  %743 = phi i1 [ false, %732 ], [ %741, %737 ]
  br i1 %743, label %744, label %778

744:                                              ; preds = %742
  %745 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 12
  %746 = load ptr, ptr %745, align 8, !tbaa !71
  %747 = load i32, ptr %17, align 4, !tbaa !9
  %748 = sext i32 %747 to i64
  %749 = getelementptr inbounds i8, ptr %746, i64 %748
  %750 = load i8, ptr %749, align 1, !tbaa !72, !range !73, !noundef !74
  %751 = trunc i8 %750 to i1
  br i1 %751, label %752, label %774

752:                                              ; preds = %744
  %753 = load double, ptr %49, align 8, !tbaa !49
  %754 = load ptr, ptr %47, align 8, !tbaa !5
  %755 = load i32, ptr %14, align 4, !tbaa !9
  %756 = load i32, ptr %17, align 4, !tbaa !9
  %757 = invoke noundef double @_ZNK7SGTELIB6Matrix3getEii(ptr noundef nonnull align 8 dereferenceable(56) %754, i32 noundef %755, i32 noundef %756)
          to label %758 unwind label %673

758:                                              ; preds = %752
  %759 = load i32, ptr %17, align 4, !tbaa !9
  %760 = invoke noundef double @_ZNK7SGTELIB6Matrix3getEii(ptr noundef nonnull align 8 dereferenceable(56) %1, i32 noundef 0, i32 noundef %759)
          to label %761 unwind label %673

761:                                              ; preds = %758
  %762 = fsub double %757, %760
  %763 = fmul double %753, %762
  %764 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 4
  %765 = load ptr, ptr %764, align 8, !tbaa !67
  %766 = load i32, ptr %14, align 4, !tbaa !9
  %767 = sext i32 %766 to i64
  %768 = getelementptr inbounds ptr, ptr %765, i64 %767
  %769 = load ptr, ptr %768, align 8, !tbaa !5
  %770 = load i32, ptr %18, align 4, !tbaa !9
  %771 = add nsw i32 %770, 1
  store i32 %771, ptr %18, align 4, !tbaa !9
  %772 = sext i32 %770 to i64
  %773 = getelementptr inbounds double, ptr %769, i64 %772
  store double %763, ptr %773, align 8, !tbaa !49
  br label %774

774:                                              ; preds = %761, %744
  br label %775

775:                                              ; preds = %774
  %776 = load i32, ptr %17, align 4, !tbaa !9
  %777 = add nsw i32 %776, 1
  store i32 %777, ptr %17, align 4, !tbaa !9
  br label %732, !llvm.loop !75

778:                                              ; preds = %742
  br label %779

779:                                              ; preds = %778, %711
  br label %780

780:                                              ; preds = %779, %695
  br label %781

781:                                              ; preds = %780
  %782 = load i32, ptr %16, align 4, !tbaa !9
  %783 = add nsw i32 %782, 1
  store i32 %783, ptr %16, align 4, !tbaa !9
  br label %683, !llvm.loop !76

784:                                              ; preds = %693
  br label %785

785:                                              ; preds = %784, %678
  br label %806

786:                                              ; preds = %603
  store i32 1, ptr %15, align 4, !tbaa !9
  br label %787

787:                                              ; preds = %802, %786
  %788 = load i32, ptr %15, align 4, !tbaa !9
  %789 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 1
  %790 = load i32, ptr %789, align 4, !tbaa !54
  %791 = icmp slt i32 %788, %790
  br i1 %791, label %792, label %805

792:                                              ; preds = %787
  %793 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 4
  %794 = load ptr, ptr %793, align 8, !tbaa !67
  %795 = load i32, ptr %14, align 4, !tbaa !9
  %796 = sext i32 %795 to i64
  %797 = getelementptr inbounds ptr, ptr %794, i64 %796
  %798 = load ptr, ptr %797, align 8, !tbaa !5
  %799 = load i32, ptr %15, align 4, !tbaa !9
  %800 = sext i32 %799 to i64
  %801 = getelementptr inbounds double, ptr %798, i64 %800
  store double 0.000000e+00, ptr %801, align 8, !tbaa !49
  br label %802

802:                                              ; preds = %792
  %803 = load i32, ptr %15, align 4, !tbaa !9
  %804 = add nsw i32 %803, 1
  store i32 %804, ptr %15, align 4, !tbaa !9
  br label %787, !llvm.loop !77

805:                                              ; preds = %787
  br label %806

806:                                              ; preds = %805, %785
  br label %807

807:                                              ; preds = %806
  %808 = load i32, ptr %14, align 4, !tbaa !9
  %809 = add nsw i32 %808, 1
  store i32 %809, ptr %14, align 4, !tbaa !9
  br label %598, !llvm.loop !78

810:                                              ; preds = %598
  store i32 0, ptr %14, align 4, !tbaa !9
  br label %811

811:                                              ; preds = %856, %810
  %812 = load i32, ptr %14, align 4, !tbaa !9
  %813 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 1
  %814 = load i32, ptr %813, align 4, !tbaa !54
  %815 = icmp slt i32 %812, %814
  br i1 %815, label %816, label %859

816:                                              ; preds = %811
  %817 = load i32, ptr %14, align 4, !tbaa !9
  store i32 %817, ptr %15, align 4, !tbaa !9
  br label %818

818:                                              ; preds = %833, %816
  %819 = load i32, ptr %15, align 4, !tbaa !9
  %820 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 1
  %821 = load i32, ptr %820, align 4, !tbaa !54
  %822 = icmp slt i32 %819, %821
  br i1 %822, label %823, label %836

823:                                              ; preds = %818
  %824 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 6
  %825 = load ptr, ptr %824, align 8, !tbaa !79
  %826 = load i32, ptr %14, align 4, !tbaa !9
  %827 = sext i32 %826 to i64
  %828 = getelementptr inbounds ptr, ptr %825, i64 %827
  %829 = load ptr, ptr %828, align 8, !tbaa !5
  %830 = load i32, ptr %15, align 4, !tbaa !9
  %831 = sext i32 %830 to i64
  %832 = getelementptr inbounds double, ptr %829, i64 %831
  store double 0.000000e+00, ptr %832, align 8, !tbaa !49
  br label %833

833:                                              ; preds = %823
  %834 = load i32, ptr %15, align 4, !tbaa !9
  %835 = add nsw i32 %834, 1
  store i32 %835, ptr %15, align 4, !tbaa !9
  br label %818, !llvm.loop !80

836:                                              ; preds = %818
  store i32 0, ptr %15, align 4, !tbaa !9
  br label %837

837:                                              ; preds = %852, %836
  %838 = load i32, ptr %15, align 4, !tbaa !9
  %839 = getelementptr inbounds %"class.SGTELIB::Surrogate", ptr %74, i32 0, i32 4
  %840 = load i32, ptr %839, align 4, !tbaa !81
  %841 = icmp slt i32 %838, %840
  br i1 %841, label %842, label %855

842:                                              ; preds = %837
  %843 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 7
  %844 = load ptr, ptr %843, align 8, !tbaa !82
  %845 = load i32, ptr %14, align 4, !tbaa !9
  %846 = sext i32 %845 to i64
  %847 = getelementptr inbounds ptr, ptr %844, i64 %846
  %848 = load ptr, ptr %847, align 8, !tbaa !5
  %849 = load i32, ptr %15, align 4, !tbaa !9
  %850 = sext i32 %849 to i64
  %851 = getelementptr inbounds double, ptr %848, i64 %850
  store double 0.000000e+00, ptr %851, align 8, !tbaa !49
  br label %852

852:                                              ; preds = %842
  %853 = load i32, ptr %15, align 4, !tbaa !9
  %854 = add nsw i32 %853, 1
  store i32 %854, ptr %15, align 4, !tbaa !9
  br label %837, !llvm.loop !83

855:                                              ; preds = %837
  br label %856

856:                                              ; preds = %855
  %857 = load i32, ptr %14, align 4, !tbaa !9
  %858 = add nsw i32 %857, 1
  store i32 %858, ptr %14, align 4, !tbaa !9
  br label %811, !llvm.loop !84

859:                                              ; preds = %811
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #10
  store i32 0, ptr %18, align 4, !tbaa !9
  br label %860

860:                                              ; preds = %962, %859
  %861 = load i32, ptr %18, align 4, !tbaa !9
  %862 = getelementptr inbounds %"class.SGTELIB::Surrogate", ptr %74, i32 0, i32 7
  %863 = load i32, ptr %862, align 8, !tbaa !48
  %864 = icmp slt i32 %861, %863
  br i1 %864, label %865, label %965

865:                                              ; preds = %860
  %866 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 5
  %867 = load ptr, ptr %866, align 8, !tbaa !50
  %868 = load i32, ptr %18, align 4, !tbaa !9
  %869 = sext i32 %868 to i64
  %870 = getelementptr inbounds double, ptr %867, i64 %869
  %871 = load double, ptr %870, align 8, !tbaa !49
  store double %871, ptr %50, align 8, !tbaa !49
  %872 = load double, ptr %50, align 8, !tbaa !49
  %873 = fcmp ogt double %872, 1.000000e-13
  br i1 %873, label %874, label %961

874:                                              ; preds = %865
  store i32 0, ptr %14, align 4, !tbaa !9
  br label %875

875:                                              ; preds = %957, %874
  %876 = load i32, ptr %14, align 4, !tbaa !9
  %877 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 1
  %878 = load i32, ptr %877, align 4, !tbaa !54
  %879 = icmp slt i32 %876, %878
  br i1 %879, label %880, label %960

880:                                              ; preds = %875
  %881 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 4
  %882 = load ptr, ptr %881, align 8, !tbaa !67
  %883 = load i32, ptr %18, align 4, !tbaa !9
  %884 = sext i32 %883 to i64
  %885 = getelementptr inbounds ptr, ptr %882, i64 %884
  %886 = load ptr, ptr %885, align 8, !tbaa !5
  %887 = load i32, ptr %14, align 4, !tbaa !9
  %888 = sext i32 %887 to i64
  %889 = getelementptr inbounds double, ptr %886, i64 %888
  %890 = load double, ptr %889, align 8, !tbaa !49
  %891 = load double, ptr %50, align 8, !tbaa !49
  %892 = fmul double %890, %891
  store double %892, ptr %19, align 8, !tbaa !49
  %893 = load i32, ptr %14, align 4, !tbaa !9
  store i32 %893, ptr %15, align 4, !tbaa !9
  br label %894

894:                                              ; preds = %922, %880
  %895 = load i32, ptr %15, align 4, !tbaa !9
  %896 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 1
  %897 = load i32, ptr %896, align 4, !tbaa !54
  %898 = icmp slt i32 %895, %897
  br i1 %898, label %899, label %925

899:                                              ; preds = %894
  %900 = load double, ptr %19, align 8, !tbaa !49
  %901 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 4
  %902 = load ptr, ptr %901, align 8, !tbaa !67
  %903 = load i32, ptr %18, align 4, !tbaa !9
  %904 = sext i32 %903 to i64
  %905 = getelementptr inbounds ptr, ptr %902, i64 %904
  %906 = load ptr, ptr %905, align 8, !tbaa !5
  %907 = load i32, ptr %15, align 4, !tbaa !9
  %908 = sext i32 %907 to i64
  %909 = getelementptr inbounds double, ptr %906, i64 %908
  %910 = load double, ptr %909, align 8, !tbaa !49
  %911 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 6
  %912 = load ptr, ptr %911, align 8, !tbaa !79
  %913 = load i32, ptr %14, align 4, !tbaa !9
  %914 = sext i32 %913 to i64
  %915 = getelementptr inbounds ptr, ptr %912, i64 %914
  %916 = load ptr, ptr %915, align 8, !tbaa !5
  %917 = load i32, ptr %15, align 4, !tbaa !9
  %918 = sext i32 %917 to i64
  %919 = getelementptr inbounds double, ptr %916, i64 %918
  %920 = load double, ptr %919, align 8, !tbaa !49
  %921 = call double @llvm.fmuladd.f64(double %900, double %910, double %920)
  store double %921, ptr %919, align 8, !tbaa !49
  br label %922

922:                                              ; preds = %899
  %923 = load i32, ptr %15, align 4, !tbaa !9
  %924 = add nsw i32 %923, 1
  store i32 %924, ptr %15, align 4, !tbaa !9
  br label %894, !llvm.loop !85

925:                                              ; preds = %894
  store i32 0, ptr %15, align 4, !tbaa !9
  br label %926

926:                                              ; preds = %949, %925
  %927 = load i32, ptr %15, align 4, !tbaa !9
  %928 = getelementptr inbounds %"class.SGTELIB::Surrogate", ptr %74, i32 0, i32 4
  %929 = load i32, ptr %928, align 4, !tbaa !81
  %930 = icmp slt i32 %927, %929
  br i1 %930, label %931, label %956

931:                                              ; preds = %926
  %932 = load double, ptr %19, align 8, !tbaa !49
  %933 = load ptr, ptr %45, align 8, !tbaa !5
  %934 = load i32, ptr %18, align 4, !tbaa !9
  %935 = load i32, ptr %15, align 4, !tbaa !9
  %936 = invoke noundef double @_ZNK7SGTELIB6Matrix3getEii(ptr noundef nonnull align 8 dereferenceable(56) %933, i32 noundef %934, i32 noundef %935)
          to label %937 unwind label %952

937:                                              ; preds = %931
  %938 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 7
  %939 = load ptr, ptr %938, align 8, !tbaa !82
  %940 = load i32, ptr %14, align 4, !tbaa !9
  %941 = sext i32 %940 to i64
  %942 = getelementptr inbounds ptr, ptr %939, i64 %941
  %943 = load ptr, ptr %942, align 8, !tbaa !5
  %944 = load i32, ptr %15, align 4, !tbaa !9
  %945 = sext i32 %944 to i64
  %946 = getelementptr inbounds double, ptr %943, i64 %945
  %947 = load double, ptr %946, align 8, !tbaa !49
  %948 = call double @llvm.fmuladd.f64(double %932, double %936, double %947)
  store double %948, ptr %946, align 8, !tbaa !49
  br label %949

949:                                              ; preds = %937
  %950 = load i32, ptr %15, align 4, !tbaa !9
  %951 = add nsw i32 %950, 1
  store i32 %951, ptr %15, align 4, !tbaa !9
  br label %926, !llvm.loop !86

952:                                              ; preds = %931
  %953 = landingpad { ptr, i32 }
          cleanup
  %954 = extractvalue { ptr, i32 } %953, 0
  store ptr %954, ptr %9, align 8
  %955 = extractvalue { ptr, i32 } %953, 1
  store i32 %955, ptr %10, align 4
  br label %1536

956:                                              ; preds = %926
  br label %957

957:                                              ; preds = %956
  %958 = load i32, ptr %14, align 4, !tbaa !9
  %959 = add nsw i32 %958, 1
  store i32 %959, ptr %14, align 4, !tbaa !9
  br label %875, !llvm.loop !87

960:                                              ; preds = %875
  br label %961

961:                                              ; preds = %960, %865
  br label %962

962:                                              ; preds = %961
  %963 = load i32, ptr %18, align 4, !tbaa !9
  %964 = add nsw i32 %963, 1
  store i32 %964, ptr %18, align 4, !tbaa !9
  br label %860, !llvm.loop !88

965:                                              ; preds = %860
  store i32 0, ptr %14, align 4, !tbaa !9
  br label %966

966:                                              ; preds = %1003, %965
  %967 = load i32, ptr %14, align 4, !tbaa !9
  %968 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 1
  %969 = load i32, ptr %968, align 4, !tbaa !54
  %970 = icmp slt i32 %967, %969
  br i1 %970, label %971, label %1006

971:                                              ; preds = %966
  %972 = load i32, ptr %14, align 4, !tbaa !9
  %973 = add nsw i32 %972, 1
  store i32 %973, ptr %15, align 4, !tbaa !9
  br label %974

974:                                              ; preds = %999, %971
  %975 = load i32, ptr %15, align 4, !tbaa !9
  %976 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 1
  %977 = load i32, ptr %976, align 4, !tbaa !54
  %978 = icmp slt i32 %975, %977
  br i1 %978, label %979, label %1002

979:                                              ; preds = %974
  %980 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 6
  %981 = load ptr, ptr %980, align 8, !tbaa !79
  %982 = load i32, ptr %14, align 4, !tbaa !9
  %983 = sext i32 %982 to i64
  %984 = getelementptr inbounds ptr, ptr %981, i64 %983
  %985 = load ptr, ptr %984, align 8, !tbaa !5
  %986 = load i32, ptr %15, align 4, !tbaa !9
  %987 = sext i32 %986 to i64
  %988 = getelementptr inbounds double, ptr %985, i64 %987
  %989 = load double, ptr %988, align 8, !tbaa !49
  %990 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 6
  %991 = load ptr, ptr %990, align 8, !tbaa !79
  %992 = load i32, ptr %15, align 4, !tbaa !9
  %993 = sext i32 %992 to i64
  %994 = getelementptr inbounds ptr, ptr %991, i64 %993
  %995 = load ptr, ptr %994, align 8, !tbaa !5
  %996 = load i32, ptr %14, align 4, !tbaa !9
  %997 = sext i32 %996 to i64
  %998 = getelementptr inbounds double, ptr %995, i64 %997
  store double %989, ptr %998, align 8, !tbaa !49
  br label %999

999:                                              ; preds = %979
  %1000 = load i32, ptr %15, align 4, !tbaa !9
  %1001 = add nsw i32 %1000, 1
  store i32 %1001, ptr %15, align 4, !tbaa !9
  br label %974, !llvm.loop !89

1002:                                             ; preds = %974
  br label %1003

1003:                                             ; preds = %1002
  %1004 = load i32, ptr %14, align 4, !tbaa !9
  %1005 = add nsw i32 %1004, 1
  store i32 %1005, ptr %14, align 4, !tbaa !9
  br label %966, !llvm.loop !90

1006:                                             ; preds = %966
  store i32 1, ptr %14, align 4, !tbaa !9
  br label %1007

1007:                                             ; preds = %1025, %1006
  %1008 = load i32, ptr %14, align 4, !tbaa !9
  %1009 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 1
  %1010 = load i32, ptr %1009, align 4, !tbaa !54
  %1011 = icmp slt i32 %1008, %1010
  br i1 %1011, label %1012, label %1028

1012:                                             ; preds = %1007
  %1013 = load double, ptr %44, align 8, !tbaa !49
  %1014 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 6
  %1015 = load ptr, ptr %1014, align 8, !tbaa !79
  %1016 = load i32, ptr %14, align 4, !tbaa !9
  %1017 = sext i32 %1016 to i64
  %1018 = getelementptr inbounds ptr, ptr %1015, i64 %1017
  %1019 = load ptr, ptr %1018, align 8, !tbaa !5
  %1020 = load i32, ptr %14, align 4, !tbaa !9
  %1021 = sext i32 %1020 to i64
  %1022 = getelementptr inbounds double, ptr %1019, i64 %1021
  %1023 = load double, ptr %1022, align 8, !tbaa !49
  %1024 = fadd double %1023, %1013
  store double %1024, ptr %1022, align 8, !tbaa !49
  br label %1025

1025:                                             ; preds = %1012
  %1026 = load i32, ptr %14, align 4, !tbaa !9
  %1027 = add nsw i32 %1026, 1
  store i32 %1027, ptr %14, align 4, !tbaa !9
  br label %1007, !llvm.loop !91

1028:                                             ; preds = %1007
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #10
  store double 0x3D719799812DEA11, ptr %51, align 8, !tbaa !49
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #10
  store i32 0, ptr %52, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #10
  store double 0.000000e+00, ptr %53, align 8, !tbaa !49
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #10
  store double -1.000000e+00, ptr %54, align 8, !tbaa !49
  store i32 0, ptr %14, align 4, !tbaa !9
  br label %1029

1029:                                             ; preds = %1067, %1028
  %1030 = load i32, ptr %14, align 4, !tbaa !9
  %1031 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 1
  %1032 = load i32, ptr %1031, align 4, !tbaa !54
  %1033 = icmp slt i32 %1030, %1032
  br i1 %1033, label %1034, label %1070

1034:                                             ; preds = %1029
  store i32 0, ptr %15, align 4, !tbaa !9
  br label %1035

1035:                                             ; preds = %1059, %1034
  %1036 = load i32, ptr %15, align 4, !tbaa !9
  %1037 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 1
  %1038 = load i32, ptr %1037, align 4, !tbaa !54
  %1039 = icmp slt i32 %1036, %1038
  br i1 %1039, label %1040, label %1062

1040:                                             ; preds = %1035
  %1041 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 6
  %1042 = load ptr, ptr %1041, align 8, !tbaa !79
  %1043 = load i32, ptr %14, align 4, !tbaa !9
  %1044 = sext i32 %1043 to i64
  %1045 = getelementptr inbounds ptr, ptr %1042, i64 %1044
  %1046 = load ptr, ptr %1045, align 8, !tbaa !5
  %1047 = load i32, ptr %15, align 4, !tbaa !9
  %1048 = sext i32 %1047 to i64
  %1049 = getelementptr inbounds double, ptr %1046, i64 %1048
  %1050 = load double, ptr %1049, align 8, !tbaa !49
  %1051 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 9
  %1052 = load ptr, ptr %1051, align 8, !tbaa !92
  %1053 = load i32, ptr %15, align 4, !tbaa !9
  %1054 = sext i32 %1053 to i64
  %1055 = getelementptr inbounds double, ptr %1052, i64 %1054
  %1056 = load double, ptr %1055, align 8, !tbaa !49
  %1057 = load double, ptr %54, align 8, !tbaa !49
  %1058 = call double @llvm.fmuladd.f64(double %1050, double %1056, double %1057)
  store double %1058, ptr %54, align 8, !tbaa !49
  br label %1059

1059:                                             ; preds = %1040
  %1060 = load i32, ptr %15, align 4, !tbaa !9
  %1061 = add nsw i32 %1060, 1
  store i32 %1061, ptr %15, align 4, !tbaa !9
  br label %1035, !llvm.loop !93

1062:                                             ; preds = %1035
  %1063 = load double, ptr %54, align 8, !tbaa !49
  %1064 = load double, ptr %54, align 8, !tbaa !49
  %1065 = load double, ptr %53, align 8, !tbaa !49
  %1066 = call double @llvm.fmuladd.f64(double %1063, double %1064, double %1065)
  store double %1066, ptr %53, align 8, !tbaa !49
  store double 0.000000e+00, ptr %54, align 8, !tbaa !49
  br label %1067

1067:                                             ; preds = %1062
  %1068 = load i32, ptr %14, align 4, !tbaa !9
  %1069 = add nsw i32 %1068, 1
  store i32 %1069, ptr %14, align 4, !tbaa !9
  br label %1029, !llvm.loop !94

1070:                                             ; preds = %1029
  %1071 = load double, ptr %53, align 8, !tbaa !49
  %1072 = call double @sqrt(double noundef %1071) #10
  store double %1072, ptr %53, align 8, !tbaa !49
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #10
  call void @llvm.lifetime.start.p0(i64 1, ptr %55) #10
  store i8 0, ptr %55, align 1, !tbaa !72
  call void @llvm.lifetime.start.p0(i64 1, ptr %56) #10
  store i8 0, ptr %56, align 1, !tbaa !72
  %1073 = load double, ptr %53, align 8, !tbaa !49
  %1074 = fcmp olt double %1073, 1.000000e-04
  br i1 %1074, label %1075, label %1076

1075:                                             ; preds = %1070
  store i8 1, ptr %56, align 1, !tbaa !72
  br label %1077

1076:                                             ; preds = %1070
  store i8 1, ptr %55, align 1, !tbaa !72
  br label %1077

1077:                                             ; preds = %1076, %1075
  %1078 = load i8, ptr %56, align 1, !tbaa !72, !range !73, !noundef !74
  %1079 = trunc i8 %1078 to i1
  br i1 %1079, label %1080, label %1370

1080:                                             ; preds = %1077
  call void @llvm.lifetime.start.p0(i64 8, ptr %57) #10
  %1081 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 1
  %1082 = load i32, ptr %1081, align 4, !tbaa !54
  %1083 = sext i32 %1082 to i64
  %1084 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %1083, i64 8)
  %1085 = extractvalue { i64, i1 } %1084, 1
  %1086 = extractvalue { i64, i1 } %1084, 0
  %1087 = select i1 %1085, i64 -1, i64 %1086
  %1088 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %1087) #12
          to label %1089 unwind label %1142

1089:                                             ; preds = %1080
  store ptr %1088, ptr %57, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %58) #10
  %1090 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 1
  %1091 = load i32, ptr %1090, align 4, !tbaa !54
  %1092 = sext i32 %1091 to i64
  %1093 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %1092, i64 8)
  %1094 = extractvalue { i64, i1 } %1093, 1
  %1095 = extractvalue { i64, i1 } %1093, 0
  %1096 = select i1 %1094, i64 -1, i64 %1095
  %1097 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %1096) #12
          to label %1098 unwind label %1146

1098:                                             ; preds = %1089
  store ptr %1097, ptr %58, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #10
  %1099 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 1
  %1100 = load i32, ptr %1099, align 4, !tbaa !54
  %1101 = sext i32 %1100 to i64
  %1102 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %1101, i64 8)
  %1103 = extractvalue { i64, i1 } %1102, 1
  %1104 = extractvalue { i64, i1 } %1102, 0
  %1105 = select i1 %1103, i64 -1, i64 %1104
  %1106 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %1105) #12
          to label %1107 unwind label %1150

1107:                                             ; preds = %1098
  store ptr %1106, ptr %59, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #10
  store double 0.000000e+00, ptr %60, align 8, !tbaa !49
  store double 1.000000e+00, ptr %19, align 8, !tbaa !49
  store i32 0, ptr %14, align 4, !tbaa !9
  br label %1108

1108:                                             ; preds = %1169, %1107
  %1109 = load i32, ptr %14, align 4, !tbaa !9
  %1110 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 1
  %1111 = load i32, ptr %1110, align 4, !tbaa !54
  %1112 = icmp slt i32 %1109, %1111
  br i1 %1112, label %1113, label %1172

1113:                                             ; preds = %1108
  store i32 0, ptr %15, align 4, !tbaa !9
  br label %1114

1114:                                             ; preds = %1139, %1113
  %1115 = load i32, ptr %15, align 4, !tbaa !9
  %1116 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 1
  %1117 = load i32, ptr %1116, align 4, !tbaa !54
  %1118 = icmp slt i32 %1115, %1117
  br i1 %1118, label %1119, label %1154

1119:                                             ; preds = %1114
  %1120 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 6
  %1121 = load ptr, ptr %1120, align 8, !tbaa !79
  %1122 = load i32, ptr %14, align 4, !tbaa !9
  %1123 = sext i32 %1122 to i64
  %1124 = getelementptr inbounds ptr, ptr %1121, i64 %1123
  %1125 = load ptr, ptr %1124, align 8, !tbaa !5
  %1126 = load i32, ptr %15, align 4, !tbaa !9
  %1127 = sext i32 %1126 to i64
  %1128 = getelementptr inbounds double, ptr %1125, i64 %1127
  %1129 = load double, ptr %1128, align 8, !tbaa !49
  %1130 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 9
  %1131 = load ptr, ptr %1130, align 8, !tbaa !92
  %1132 = load i32, ptr %15, align 4, !tbaa !9
  %1133 = sext i32 %1132 to i64
  %1134 = getelementptr inbounds double, ptr %1131, i64 %1133
  %1135 = load double, ptr %1134, align 8, !tbaa !49
  %1136 = load double, ptr %19, align 8, !tbaa !49
  %1137 = fneg double %1129
  %1138 = call double @llvm.fmuladd.f64(double %1137, double %1135, double %1136)
  store double %1138, ptr %19, align 8, !tbaa !49
  br label %1139

1139:                                             ; preds = %1119
  %1140 = load i32, ptr %15, align 4, !tbaa !9
  %1141 = add nsw i32 %1140, 1
  store i32 %1141, ptr %15, align 4, !tbaa !9
  br label %1114, !llvm.loop !95

1142:                                             ; preds = %1080
  %1143 = landingpad { ptr, i32 }
          cleanup
  %1144 = extractvalue { ptr, i32 } %1143, 0
  store ptr %1144, ptr %9, align 8
  %1145 = extractvalue { ptr, i32 } %1143, 1
  store i32 %1145, ptr %10, align 4
  br label %1369

1146:                                             ; preds = %1089
  %1147 = landingpad { ptr, i32 }
          cleanup
  %1148 = extractvalue { ptr, i32 } %1147, 0
  store ptr %1148, ptr %9, align 8
  %1149 = extractvalue { ptr, i32 } %1147, 1
  store i32 %1149, ptr %10, align 4
  br label %1368

1150:                                             ; preds = %1098
  %1151 = landingpad { ptr, i32 }
          cleanup
  %1152 = extractvalue { ptr, i32 } %1151, 0
  store ptr %1152, ptr %9, align 8
  %1153 = extractvalue { ptr, i32 } %1151, 1
  store i32 %1153, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #10
  br label %1368

1154:                                             ; preds = %1114
  %1155 = load double, ptr %19, align 8, !tbaa !49
  %1156 = load ptr, ptr %57, align 8, !tbaa !5
  %1157 = load i32, ptr %14, align 4, !tbaa !9
  %1158 = sext i32 %1157 to i64
  %1159 = getelementptr inbounds double, ptr %1156, i64 %1158
  store double %1155, ptr %1159, align 8, !tbaa !49
  %1160 = load double, ptr %19, align 8, !tbaa !49
  %1161 = load ptr, ptr %58, align 8, !tbaa !5
  %1162 = load i32, ptr %14, align 4, !tbaa !9
  %1163 = sext i32 %1162 to i64
  %1164 = getelementptr inbounds double, ptr %1161, i64 %1163
  store double %1160, ptr %1164, align 8, !tbaa !49
  %1165 = load double, ptr %19, align 8, !tbaa !49
  %1166 = load double, ptr %19, align 8, !tbaa !49
  %1167 = load double, ptr %60, align 8, !tbaa !49
  %1168 = call double @llvm.fmuladd.f64(double %1165, double %1166, double %1167)
  store double %1168, ptr %60, align 8, !tbaa !49
  store double 0.000000e+00, ptr %19, align 8, !tbaa !49
  br label %1169

1169:                                             ; preds = %1154
  %1170 = load i32, ptr %14, align 4, !tbaa !9
  %1171 = add nsw i32 %1170, 1
  store i32 %1171, ptr %14, align 4, !tbaa !9
  br label %1108, !llvm.loop !96

1172:                                             ; preds = %1108
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %62) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #10
  br label %1173

1173:                                             ; preds = %1352, %1172
  %1174 = load double, ptr %60, align 8, !tbaa !49
  %1175 = fcmp ogt double %1174, 0x3D719799812DEA11
  br i1 %1175, label %1176, label %1179

1176:                                             ; preds = %1173
  %1177 = load i32, ptr %52, align 4, !tbaa !9
  %1178 = icmp slt i32 %1177, 100
  br label %1179

1179:                                             ; preds = %1176, %1173
  %1180 = phi i1 [ false, %1173 ], [ %1178, %1176 ]
  br i1 %1180, label %1181, label %1355

1181:                                             ; preds = %1179
  store i32 0, ptr %14, align 4, !tbaa !9
  br label %1182

1182:                                             ; preds = %1220, %1181
  %1183 = load i32, ptr %14, align 4, !tbaa !9
  %1184 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 1
  %1185 = load i32, ptr %1184, align 4, !tbaa !54
  %1186 = icmp slt i32 %1183, %1185
  br i1 %1186, label %1187, label %1223

1187:                                             ; preds = %1182
  store double 0.000000e+00, ptr %19, align 8, !tbaa !49
  store i32 0, ptr %15, align 4, !tbaa !9
  br label %1188

1188:                                             ; preds = %1211, %1187
  %1189 = load i32, ptr %15, align 4, !tbaa !9
  %1190 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 1
  %1191 = load i32, ptr %1190, align 4, !tbaa !54
  %1192 = icmp slt i32 %1189, %1191
  br i1 %1192, label %1193, label %1214

1193:                                             ; preds = %1188
  %1194 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 6
  %1195 = load ptr, ptr %1194, align 8, !tbaa !79
  %1196 = load i32, ptr %14, align 4, !tbaa !9
  %1197 = sext i32 %1196 to i64
  %1198 = getelementptr inbounds ptr, ptr %1195, i64 %1197
  %1199 = load ptr, ptr %1198, align 8, !tbaa !5
  %1200 = load i32, ptr %15, align 4, !tbaa !9
  %1201 = sext i32 %1200 to i64
  %1202 = getelementptr inbounds double, ptr %1199, i64 %1201
  %1203 = load double, ptr %1202, align 8, !tbaa !49
  %1204 = load ptr, ptr %58, align 8, !tbaa !5
  %1205 = load i32, ptr %15, align 4, !tbaa !9
  %1206 = sext i32 %1205 to i64
  %1207 = getelementptr inbounds double, ptr %1204, i64 %1206
  %1208 = load double, ptr %1207, align 8, !tbaa !49
  %1209 = load double, ptr %19, align 8, !tbaa !49
  %1210 = call double @llvm.fmuladd.f64(double %1203, double %1208, double %1209)
  store double %1210, ptr %19, align 8, !tbaa !49
  br label %1211

1211:                                             ; preds = %1193
  %1212 = load i32, ptr %15, align 4, !tbaa !9
  %1213 = add nsw i32 %1212, 1
  store i32 %1213, ptr %15, align 4, !tbaa !9
  br label %1188, !llvm.loop !97

1214:                                             ; preds = %1188
  %1215 = load double, ptr %19, align 8, !tbaa !49
  %1216 = load ptr, ptr %59, align 8, !tbaa !5
  %1217 = load i32, ptr %14, align 4, !tbaa !9
  %1218 = sext i32 %1217 to i64
  %1219 = getelementptr inbounds double, ptr %1216, i64 %1218
  store double %1215, ptr %1219, align 8, !tbaa !49
  br label %1220

1220:                                             ; preds = %1214
  %1221 = load i32, ptr %14, align 4, !tbaa !9
  %1222 = add nsw i32 %1221, 1
  store i32 %1222, ptr %14, align 4, !tbaa !9
  br label %1182, !llvm.loop !98

1223:                                             ; preds = %1182
  store double 0.000000e+00, ptr %63, align 8, !tbaa !49
  store i32 0, ptr %14, align 4, !tbaa !9
  br label %1224

1224:                                             ; preds = %1242, %1223
  %1225 = load i32, ptr %14, align 4, !tbaa !9
  %1226 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 1
  %1227 = load i32, ptr %1226, align 4, !tbaa !54
  %1228 = icmp slt i32 %1225, %1227
  br i1 %1228, label %1229, label %1245

1229:                                             ; preds = %1224
  %1230 = load ptr, ptr %58, align 8, !tbaa !5
  %1231 = load i32, ptr %14, 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 %59, align 8, !tbaa !5
  %1236 = load i32, ptr %14, 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 %63, align 8, !tbaa !49
  %1241 = call double @llvm.fmuladd.f64(double %1234, double %1239, double %1240)
  store double %1241, ptr %63, align 8, !tbaa !49
  br label %1242

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

1245:                                             ; preds = %1224
  %1246 = load double, ptr %60, align 8, !tbaa !49
  %1247 = load double, ptr %63, align 8, !tbaa !49
  %1248 = fdiv double %1246, %1247
  store double %1248, ptr %62, align 8, !tbaa !49
  store i32 0, ptr %14, align 4, !tbaa !9
  br label %1249

1249:                                             ; preds = %1268, %1245
  %1250 = load i32, ptr %14, align 4, !tbaa !9
  %1251 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 1
  %1252 = load i32, ptr %1251, align 4, !tbaa !54
  %1253 = icmp slt i32 %1250, %1252
  br i1 %1253, label %1254, label %1271

1254:                                             ; preds = %1249
  %1255 = load double, ptr %62, align 8, !tbaa !49
  %1256 = load ptr, ptr %58, align 8, !tbaa !5
  %1257 = load i32, ptr %14, align 4, !tbaa !9
  %1258 = sext i32 %1257 to i64
  %1259 = getelementptr inbounds double, ptr %1256, i64 %1258
  %1260 = load double, ptr %1259, align 8, !tbaa !49
  %1261 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 9
  %1262 = load ptr, ptr %1261, align 8, !tbaa !92
  %1263 = load i32, ptr %14, align 4, !tbaa !9
  %1264 = sext i32 %1263 to i64
  %1265 = getelementptr inbounds double, ptr %1262, i64 %1264
  %1266 = load double, ptr %1265, align 8, !tbaa !49
  %1267 = call double @llvm.fmuladd.f64(double %1255, double %1260, double %1266)
  store double %1267, ptr %1265, align 8, !tbaa !49
  br label %1268

1268:                                             ; preds = %1254
  %1269 = load i32, ptr %14, align 4, !tbaa !9
  %1270 = add nsw i32 %1269, 1
  store i32 %1270, ptr %14, align 4, !tbaa !9
  br label %1249, !llvm.loop !100

1271:                                             ; preds = %1249
  store i32 0, ptr %14, align 4, !tbaa !9
  br label %1272

1272:                                             ; preds = %1291, %1271
  %1273 = load i32, ptr %14, align 4, !tbaa !9
  %1274 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 1
  %1275 = load i32, ptr %1274, align 4, !tbaa !54
  %1276 = icmp slt i32 %1273, %1275
  br i1 %1276, label %1277, label %1294

1277:                                             ; preds = %1272
  %1278 = load double, ptr %62, align 8, !tbaa !49
  %1279 = load ptr, ptr %59, align 8, !tbaa !5
  %1280 = load i32, ptr %14, align 4, !tbaa !9
  %1281 = sext i32 %1280 to i64
  %1282 = getelementptr inbounds double, ptr %1279, i64 %1281
  %1283 = load double, ptr %1282, align 8, !tbaa !49
  %1284 = load ptr, ptr %57, align 8, !tbaa !5
  %1285 = load i32, ptr %14, align 4, !tbaa !9
  %1286 = sext i32 %1285 to i64
  %1287 = getelementptr inbounds double, ptr %1284, i64 %1286
  %1288 = load double, ptr %1287, align 8, !tbaa !49
  %1289 = fneg double %1278
  %1290 = call double @llvm.fmuladd.f64(double %1289, double %1283, double %1288)
  store double %1290, ptr %1287, align 8, !tbaa !49
  br label %1291

1291:                                             ; preds = %1277
  %1292 = load i32, ptr %14, align 4, !tbaa !9
  %1293 = add nsw i32 %1292, 1
  store i32 %1293, ptr %14, align 4, !tbaa !9
  br label %1272, !llvm.loop !101

1294:                                             ; preds = %1272
  %1295 = load double, ptr %60, align 8, !tbaa !49
  store double %1295, ptr %61, align 8, !tbaa !49
  store double 0.000000e+00, ptr %60, align 8, !tbaa !49
  store i32 0, ptr %14, align 4, !tbaa !9
  br label %1296

1296:                                             ; preds = %1314, %1294
  %1297 = load i32, ptr %14, align 4, !tbaa !9
  %1298 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 1
  %1299 = load i32, ptr %1298, align 4, !tbaa !54
  %1300 = icmp slt i32 %1297, %1299
  br i1 %1300, label %1301, label %1317

1301:                                             ; preds = %1296
  %1302 = load ptr, ptr %57, align 8, !tbaa !5
  %1303 = load i32, ptr %14, align 4, !tbaa !9
  %1304 = sext i32 %1303 to i64
  %1305 = getelementptr inbounds double, ptr %1302, i64 %1304
  %1306 = load double, ptr %1305, align 8, !tbaa !49
  %1307 = load ptr, ptr %57, align 8, !tbaa !5
  %1308 = load i32, ptr %14, align 4, !tbaa !9
  %1309 = sext i32 %1308 to i64
  %1310 = getelementptr inbounds double, ptr %1307, i64 %1309
  %1311 = load double, ptr %1310, align 8, !tbaa !49
  %1312 = load double, ptr %60, align 8, !tbaa !49
  %1313 = call double @llvm.fmuladd.f64(double %1306, double %1311, double %1312)
  store double %1313, ptr %60, align 8, !tbaa !49
  br label %1314

1314:                                             ; preds = %1301
  %1315 = load i32, ptr %14, align 4, !tbaa !9
  %1316 = add nsw i32 %1315, 1
  store i32 %1316, ptr %14, align 4, !tbaa !9
  br label %1296, !llvm.loop !102

1317:                                             ; preds = %1296
  %1318 = load double, ptr %60, align 8, !tbaa !49
  %1319 = fcmp ole double %1318, 0x3D719799812DEA11
  br i1 %1319, label %1320, label %1321

1320:                                             ; preds = %1317
  br label %1355

1321:                                             ; preds = %1317
  %1322 = load double, ptr %60, align 8, !tbaa !49
  %1323 = load double, ptr %61, align 8, !tbaa !49
  %1324 = fdiv double %1322, %1323
  store double %1324, ptr %19, align 8, !tbaa !49
  store i32 0, ptr %14, align 4, !tbaa !9
  br label %1325

1325:                                             ; preds = %1349, %1321
  %1326 = load i32, ptr %14, align 4, !tbaa !9
  %1327 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 1
  %1328 = load i32, ptr %1327, align 4, !tbaa !54
  %1329 = icmp slt i32 %1326, %1328
  br i1 %1329, label %1330, label %1352

1330:                                             ; preds = %1325
  %1331 = load double, ptr %19, align 8, !tbaa !49
  %1332 = load ptr, ptr %58, align 8, !tbaa !5
  %1333 = load i32, ptr %14, align 4, !tbaa !9
  %1334 = sext i32 %1333 to i64
  %1335 = getelementptr inbounds double, ptr %1332, i64 %1334
  %1336 = load double, ptr %1335, align 8, !tbaa !49
  %1337 = fmul double %1336, %1331
  store double %1337, ptr %1335, align 8, !tbaa !49
  %1338 = load ptr, ptr %57, align 8, !tbaa !5
  %1339 = load i32, ptr %14, 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 ptr, ptr %58, align 8, !tbaa !5
  %1344 = load i32, ptr %14, align 4, !tbaa !9
  %1345 = sext i32 %1344 to i64
  %1346 = getelementptr inbounds double, ptr %1343, i64 %1345
  %1347 = load double, ptr %1346, align 8, !tbaa !49
  %1348 = fadd double %1347, %1342
  store double %1348, ptr %1346, align 8, !tbaa !49
  br label %1349

1349:                                             ; preds = %1330
  %1350 = load i32, ptr %14, align 4, !tbaa !9
  %1351 = add nsw i32 %1350, 1
  store i32 %1351, ptr %14, align 4, !tbaa !9
  br label %1325, !llvm.loop !103

1352:                                             ; preds = %1325
  %1353 = load i32, ptr %52, align 4, !tbaa !9
  %1354 = add nsw i32 %1353, 1
  store i32 %1354, ptr %52, align 4, !tbaa !9
  br label %1173, !llvm.loop !104

1355:                                             ; preds = %1320, %1179
  %1356 = load ptr, ptr %57, align 8, !tbaa !5
  %1357 = icmp eq ptr %1356, null
  br i1 %1357, label %1359, label %1358

1358:                                             ; preds = %1355
  call void @_ZdaPv(ptr noundef %1356) #13
  br label %1359

1359:                                             ; preds = %1358, %1355
  %1360 = load ptr, ptr %58, align 8, !tbaa !5
  %1361 = icmp eq ptr %1360, null
  br i1 %1361, label %1363, label %1362

1362:                                             ; preds = %1359
  call void @_ZdaPv(ptr noundef %1360) #13
  br label %1363

1363:                                             ; preds = %1362, %1359
  %1364 = load ptr, ptr %59, align 8, !tbaa !5
  %1365 = icmp eq ptr %1364, null
  br i1 %1365, label %1367, label %1366

1366:                                             ; preds = %1363
  call void @_ZdaPv(ptr noundef %1364) #13
  br label %1367

1367:                                             ; preds = %1366, %1363
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #10
  call void @llvm.lifetime.end.p0(i64 8, 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
  br label %1370

1368:                                             ; preds = %1150, %1146
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #10
  br label %1369

1369:                                             ; preds = %1368, %1142
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #10
  br label %1535

1370:                                             ; preds = %1367, %1077
  %1371 = load i8, ptr %55, align 1, !tbaa !72, !range !73, !noundef !74
  %1372 = trunc i8 %1371 to i1
  br i1 %1372, label %1373, label %1440

1373:                                             ; preds = %1370
  call void @llvm.lifetime.start.p0(i64 56, ptr %64) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr %65) #10
  call void @llvm.lifetime.start.p0(i64 1, ptr %66) #10
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %66) #10
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %65, ptr noundef @.str.15, ptr noundef nonnull align 1 dereferenceable(1) %66)
          to label %1374 unwind label %1405

1374:                                             ; preds = %1373
  %1375 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 1
  %1376 = load i32, ptr %1375, align 4, !tbaa !54
  %1377 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 1
  %1378 = load i32, ptr %1377, align 4, !tbaa !54
  %1379 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 6
  %1380 = load ptr, ptr %1379, align 8, !tbaa !79
  invoke void @_ZN7SGTELIB6MatrixC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiiPPd(ptr noundef nonnull align 8 dereferenceable(56) %64, ptr noundef nonnull align 8 dereferenceable(32) %65, i32 noundef %1376, i32 noundef %1378, ptr noundef %1380)
          to label %1381 unwind label %1409

1381:                                             ; preds = %1374
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %65) #10
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %66) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %66) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %65) #10
  call void @llvm.lifetime.start.p0(i64 56, ptr %67) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr %68) #10
  call void @llvm.lifetime.start.p0(i64 1, ptr %69) #10
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %69) #10
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %68, ptr noundef @.str.16, ptr noundef nonnull align 1 dereferenceable(1) %69)
          to label %1382 unwind label %1414

1382:                                             ; preds = %1381
  %1383 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 1
  %1384 = load i32, ptr %1383, align 4, !tbaa !54
  invoke void @_ZN7SGTELIB6MatrixC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEii(ptr noundef nonnull align 8 dereferenceable(56) %67, ptr noundef nonnull align 8 dereferenceable(32) %68, i32 noundef %1384, i32 noundef 1)
          to label %1385 unwind label %1418

1385:                                             ; preds = %1382
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %68) #10
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %69) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %69) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %68) #10
  invoke void @_ZN7SGTELIB6Matrix3setEiid(ptr noundef nonnull align 8 dereferenceable(56) %67, i32 noundef 0, i32 noundef 0, double noundef 1.000000e+00)
          to label %1386 unwind label %1423

1386:                                             ; preds = %1385
  call void @llvm.lifetime.start.p0(i64 56, ptr %70) #10
  invoke void @_ZN7SGTELIB6Matrix14cholesky_solveERKS0_S2_(ptr dead_on_unwind writable sret(%"class.SGTELIB::Matrix") align 8 %70, ptr noundef nonnull align 8 dereferenceable(56) %64, ptr noundef nonnull align 8 dereferenceable(56) %67)
          to label %1387 unwind label %1427

1387:                                             ; preds = %1386
  store i32 0, ptr %14, align 4, !tbaa !9
  br label %1388

1388:                                             ; preds = %1402, %1387
  %1389 = load i32, ptr %14, align 4, !tbaa !9
  %1390 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 1
  %1391 = load i32, ptr %1390, align 4, !tbaa !54
  %1392 = icmp slt i32 %1389, %1391
  br i1 %1392, label %1393, label %1435

1393:                                             ; preds = %1388
  %1394 = load i32, ptr %14, align 4, !tbaa !9
  %1395 = invoke noundef double @_ZNK7SGTELIB6Matrix3getEii(ptr noundef nonnull align 8 dereferenceable(56) %70, i32 noundef %1394, i32 noundef 0)
          to label %1396 unwind label %1431

1396:                                             ; preds = %1393
  %1397 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 9
  %1398 = load ptr, ptr %1397, align 8, !tbaa !92
  %1399 = load i32, ptr %14, align 4, !tbaa !9
  %1400 = sext i32 %1399 to i64
  %1401 = getelementptr inbounds double, ptr %1398, i64 %1400
  store double %1395, ptr %1401, align 8, !tbaa !49
  br label %1402

1402:                                             ; preds = %1396
  %1403 = load i32, ptr %14, align 4, !tbaa !9
  %1404 = add nsw i32 %1403, 1
  store i32 %1404, ptr %14, align 4, !tbaa !9
  br label %1388, !llvm.loop !105

1405:                                             ; preds = %1373
  %1406 = landingpad { ptr, i32 }
          cleanup
  %1407 = extractvalue { ptr, i32 } %1406, 0
  store ptr %1407, ptr %9, align 8
  %1408 = extractvalue { ptr, i32 } %1406, 1
  store i32 %1408, ptr %10, align 4
  br label %1413

1409:                                             ; preds = %1374
  %1410 = landingpad { ptr, i32 }
          cleanup
  %1411 = extractvalue { ptr, i32 } %1410, 0
  store ptr %1411, ptr %9, align 8
  %1412 = extractvalue { ptr, i32 } %1410, 1
  store i32 %1412, ptr %10, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %65) #10
  br label %1413

1413:                                             ; preds = %1409, %1405
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %66) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %66) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %65) #10
  br label %1439

1414:                                             ; preds = %1381
  %1415 = landingpad { ptr, i32 }
          cleanup
  %1416 = extractvalue { ptr, i32 } %1415, 0
  store ptr %1416, ptr %9, align 8
  %1417 = extractvalue { ptr, i32 } %1415, 1
  store i32 %1417, ptr %10, align 4
  br label %1422

1418:                                             ; preds = %1382
  %1419 = landingpad { ptr, i32 }
          cleanup
  %1420 = extractvalue { ptr, i32 } %1419, 0
  store ptr %1420, ptr %9, align 8
  %1421 = extractvalue { ptr, i32 } %1419, 1
  store i32 %1421, ptr %10, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %68) #10
  br label %1422

1422:                                             ; preds = %1418, %1414
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %69) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %69) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %68) #10
  br label %1438

1423:                                             ; preds = %1385
  %1424 = landingpad { ptr, i32 }
          cleanup
  %1425 = extractvalue { ptr, i32 } %1424, 0
  store ptr %1425, ptr %9, align 8
  %1426 = extractvalue { ptr, i32 } %1424, 1
  store i32 %1426, ptr %10, align 4
  br label %1437

1427:                                             ; preds = %1386
  %1428 = landingpad { ptr, i32 }
          cleanup
  %1429 = extractvalue { ptr, i32 } %1428, 0
  store ptr %1429, ptr %9, align 8
  %1430 = extractvalue { ptr, i32 } %1428, 1
  store i32 %1430, ptr %10, align 4
  br label %1436

1431:                                             ; preds = %1393
  %1432 = landingpad { ptr, i32 }
          cleanup
  %1433 = extractvalue { ptr, i32 } %1432, 0
  store ptr %1433, ptr %9, align 8
  %1434 = extractvalue { ptr, i32 } %1432, 1
  store i32 %1434, ptr %10, align 4
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %70) #10
  br label %1436

1435:                                             ; preds = %1388
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %70) #10
  call void @llvm.lifetime.end.p0(i64 56, ptr %70) #10
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %67) #10
  call void @llvm.lifetime.end.p0(i64 56, ptr %67) #10
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %64) #10
  call void @llvm.lifetime.end.p0(i64 56, ptr %64) #10
  br label %1440

1436:                                             ; preds = %1431, %1427
  call void @llvm.lifetime.end.p0(i64 56, ptr %70) #10
  br label %1437

1437:                                             ; preds = %1436, %1423
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %67) #10
  br label %1438

1438:                                             ; preds = %1437, %1422
  call void @llvm.lifetime.end.p0(i64 56, ptr %67) #10
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %64) #10
  br label %1439

1439:                                             ; preds = %1438, %1413
  call void @llvm.lifetime.end.p0(i64 56, ptr %64) #10
  br label %1535

1440:                                             ; preds = %1435, %1370
  call void @llvm.lifetime.start.p0(i64 1, ptr %71) #10
  store i8 0, ptr %71, align 1, !tbaa !72
  store i32 0, ptr %18, align 4, !tbaa !9
  br label %1441

1441:                                             ; preds = %1461, %1440
  %1442 = load i32, ptr %18, align 4, !tbaa !9
  %1443 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 1
  %1444 = load i32, ptr %1443, align 4, !tbaa !54
  %1445 = icmp slt i32 %1442, %1444
  br i1 %1445, label %1446, label %1464

1446:                                             ; preds = %1441
  %1447 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 9
  %1448 = load ptr, ptr %1447, align 8, !tbaa !92
  %1449 = load i32, ptr %18, align 4, !tbaa !9
  %1450 = sext i32 %1449 to i64
  %1451 = getelementptr inbounds double, ptr %1448, i64 %1450
  %1452 = load double, ptr %1451, align 8, !tbaa !49
  %1453 = invoke noundef zeroext i1 @_ZN7SGTELIB5isdefEd(double noundef %1452)
          to label %1454 unwind label %1456

1454:                                             ; preds = %1446
  br i1 %1453, label %1460, label %1455

1455:                                             ; preds = %1454
  store i8 1, ptr %71, align 1, !tbaa !72
  br label %1464

1456:                                             ; preds = %1524, %1446
  %1457 = landingpad { ptr, i32 }
          cleanup
  %1458 = extractvalue { ptr, i32 } %1457, 0
  store ptr %1458, ptr %9, align 8
  %1459 = extractvalue { ptr, i32 } %1457, 1
  store i32 %1459, ptr %10, align 4
  br label %1534

1460:                                             ; preds = %1454
  br label %1461

1461:                                             ; preds = %1460
  %1462 = load i32, ptr %18, align 4, !tbaa !9
  %1463 = add nsw i32 %1462, 1
  store i32 %1463, ptr %18, align 4, !tbaa !9
  br label %1441, !llvm.loop !106

1464:                                             ; preds = %1455, %1441
  %1465 = load i8, ptr %71, align 1, !tbaa !72, !range !73, !noundef !74
  %1466 = trunc i8 %1465 to i1
  br i1 %1466, label %1467, label %1490

1467:                                             ; preds = %1464
  call void @llvm.lifetime.start.p0(i64 4, ptr %72) #10
  %1468 = invoke noundef i32 @_ZN7SGTELIB6Matrix13get_min_indexEv(ptr noundef nonnull align 8 dereferenceable(56) %20)
          to label %1469 unwind label %1476

1469:                                             ; preds = %1467
  store i32 %1468, ptr %72, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 56, ptr %73) #10
  %1470 = load ptr, ptr %45, align 8, !tbaa !5
  %1471 = load i32, ptr %72, align 4, !tbaa !9
  invoke void @_ZNK7SGTELIB6Matrix7get_rowEi(ptr dead_on_unwind writable sret(%"class.SGTELIB::Matrix") align 8 %73, ptr noundef nonnull align 8 dereferenceable(56) %1470, i32 noundef %1471)
          to label %1472 unwind label %1480

1472:                                             ; preds = %1469
  %1473 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 13
  %1474 = invoke noundef nonnull align 8 dereferenceable(56) ptr @_ZN7SGTELIB6MatrixaSERKS0_(ptr noundef nonnull align 8 dereferenceable(56) %1473, ptr noundef nonnull align 8 dereferenceable(56) %73)
          to label %1475 unwind label %1484

1475:                                             ; preds = %1472
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %73) #10
  call void @llvm.lifetime.end.p0(i64 56, ptr %73) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %72) #10
  br label %1533

1476:                                             ; preds = %1467
  %1477 = landingpad { ptr, i32 }
          cleanup
  %1478 = extractvalue { ptr, i32 } %1477, 0
  store ptr %1478, ptr %9, align 8
  %1479 = extractvalue { ptr, i32 } %1477, 1
  store i32 %1479, ptr %10, align 4
  br label %1489

1480:                                             ; preds = %1469
  %1481 = landingpad { ptr, i32 }
          cleanup
  %1482 = extractvalue { ptr, i32 } %1481, 0
  store ptr %1482, ptr %9, align 8
  %1483 = extractvalue { ptr, i32 } %1481, 1
  store i32 %1483, ptr %10, align 4
  br label %1488

1484:                                             ; preds = %1472
  %1485 = landingpad { ptr, i32 }
          cleanup
  %1486 = extractvalue { ptr, i32 } %1485, 0
  store ptr %1486, ptr %9, align 8
  %1487 = extractvalue { ptr, i32 } %1485, 1
  store i32 %1487, ptr %10, align 4
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %73) #10
  br label %1488

1488:                                             ; preds = %1484, %1480
  call void @llvm.lifetime.end.p0(i64 56, ptr %73) #10
  br label %1489

1489:                                             ; preds = %1488, %1476
  call void @llvm.lifetime.end.p0(i64 4, ptr %72) #10
  br label %1534

1490:                                             ; preds = %1464
  store i32 0, ptr %15, align 4, !tbaa !9
  br label %1491

1491:                                             ; preds = %1529, %1490
  %1492 = load i32, ptr %15, align 4, !tbaa !9
  %1493 = getelementptr inbounds %"class.SGTELIB::Surrogate", ptr %74, i32 0, i32 4
  %1494 = load i32, ptr %1493, align 4, !tbaa !81
  %1495 = icmp slt i32 %1492, %1494
  br i1 %1495, label %1496, label %1532

1496:                                             ; preds = %1491
  store double 0.000000e+00, ptr %19, align 8, !tbaa !49
  store i32 0, ptr %18, align 4, !tbaa !9
  br label %1497

1497:                                             ; preds = %1521, %1496
  %1498 = load i32, ptr %18, align 4, !tbaa !9
  %1499 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 1
  %1500 = load i32, ptr %1499, align 4, !tbaa !54
  %1501 = icmp slt i32 %1498, %1500
  br i1 %1501, label %1502, label %1524

1502:                                             ; preds = %1497
  %1503 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 9
  %1504 = load ptr, ptr %1503, align 8, !tbaa !92
  %1505 = load i32, ptr %18, align 4, !tbaa !9
  %1506 = sext i32 %1505 to i64
  %1507 = getelementptr inbounds double, ptr %1504, i64 %1506
  %1508 = load double, ptr %1507, align 8, !tbaa !49
  %1509 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 7
  %1510 = load ptr, ptr %1509, align 8, !tbaa !82
  %1511 = load i32, ptr %18, align 4, !tbaa !9
  %1512 = sext i32 %1511 to i64
  %1513 = getelementptr inbounds ptr, ptr %1510, i64 %1512
  %1514 = load ptr, ptr %1513, align 8, !tbaa !5
  %1515 = load i32, ptr %15, align 4, !tbaa !9
  %1516 = sext i32 %1515 to i64
  %1517 = getelementptr inbounds double, ptr %1514, i64 %1516
  %1518 = load double, ptr %1517, align 8, !tbaa !49
  %1519 = load double, ptr %19, align 8, !tbaa !49
  %1520 = call double @llvm.fmuladd.f64(double %1508, double %1518, double %1519)
  store double %1520, ptr %19, align 8, !tbaa !49
  br label %1521

1521:                                             ; preds = %1502
  %1522 = load i32, ptr %18, align 4, !tbaa !9
  %1523 = add nsw i32 %1522, 1
  store i32 %1523, ptr %18, align 4, !tbaa !9
  br label %1497, !llvm.loop !107

1524:                                             ; preds = %1497
  %1525 = getelementptr inbounds %"class.SGTELIB::Surrogate_LOWESS", ptr %74, i32 0, i32 13
  %1526 = load i32, ptr %15, align 4, !tbaa !9
  %1527 = load double, ptr %19, align 8, !tbaa !49
  invoke void @_ZN7SGTELIB6Matrix3setEiid(ptr noundef nonnull align 8 dereferenceable(56) %1525, i32 noundef 0, i32 noundef %1526, double noundef %1527)
          to label %1528 unwind label %1456

1528:                                             ; preds = %1524
  br label %1529

1529:                                             ; preds = %1528
  %1530 = load i32, ptr %15, align 4, !tbaa !9
  %1531 = add nsw i32 %1530, 1
  store i32 %1531, ptr %15, align 4, !tbaa !9
  br label %1491, !llvm.loop !108

1532:                                             ; preds = %1491
  br label %1533

1533:                                             ; preds = %1532, %1475
  call void @llvm.lifetime.end.p0(i64 1, ptr %71) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %56) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %55) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #10
  call void @llvm.lifetime.end.p0(i64 8, 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 @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %46) #10
  call void @llvm.lifetime.end.p0(i64 56, ptr %46) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #10
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %24) #10
  call void @llvm.lifetime.end.p0(i64 56, ptr %24) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %22) #10
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %20) #10
  call void @llvm.lifetime.end.p0(i64 56, ptr %20) #10
  call void @llvm.lifetime.end.p0(i64 8, 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
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #10
  ret void

1534:                                             ; preds = %1489, %1456
  call void @llvm.lifetime.end.p0(i64 1, ptr %71) #10
  br label %1535

1535:                                             ; preds = %1534, %1439, %1369
  call void @llvm.lifetime.end.p0(i64 1, ptr %56) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %55) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #10
  br label %1536

1536:                                             ; preds = %1535, %952
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #10
  br label %1537

1537:                                             ; preds = %1536, %673
  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 %1538

1538:                                             ; preds = %1537, %669
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #10
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %46) #10
  call void @llvm.lifetime.end.p0(i64 56, ptr %46) #10
  br label %1539

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

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

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

1542:                                             ; preds = %1541, %406, %342, %308, %248
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #10
  br label %1543

1543:                                             ; preds = %1542, %218, %198, %172
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #10
  br label %1544

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

1545:                                             ; preds = %1544, %154
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %24) #10
  br label %1546

1546:                                             ; preds = %1545, %142
  call void @llvm.lifetime.end.p0(i64 56, ptr %24) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #10
  br label %1547

1547:                                             ; preds = %1546, %138
  call void @llvm.lifetime.end.p0(i64 32, ptr %22) #10
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %20) #10
  br label %1548

1548:                                             ; preds = %1547, %134
  call void @llvm.lifetime.end.p0(i64 56, ptr %20) #10
  call void @llvm.lifetime.end.p0(i64 8, 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
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #10
  br label %1549

1549:                                             ; preds = %1548, %98
  %1550 = load ptr, ptr %9, align 8
  %1551 = load i32, ptr %10, align 4
  %1552 = insertvalue { ptr, i32 } poison, ptr %1550, 0
  %1553 = insertvalue { ptr, i32 } %1552, i32 %1551, 1
  resume { ptr, i32 } %1553

1554:                                             ; preds = %197, %81
  unreachable
}

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

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

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

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 = !{!51, !6, i64 1000}
!68 = !{!51, !10, i64 996}
!69 = !{!12, !10, i64 328}
!70 = distinct !{!70, !53}
!71 = !{!51, !6, i64 1064}
!72 = !{!26, !26, i64 0}
!73 = !{i8 0, i8 2}
!74 = !{}
!75 = distinct !{!75, !53}
!76 = distinct !{!76, !53}
!77 = distinct !{!77, !53}
!78 = distinct !{!78, !53}
!79 = !{!51, !6, i64 1016}
!80 = distinct !{!80, !53}
!81 = !{!12, !10, i64 332}
!82 = !{!51, !6, i64 1024}
!83 = distinct !{!83, !53}
!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 = distinct !{!91, !53}
!92 = !{!51, !6, i64 1040}
!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}
!107 = distinct !{!107, !53}
!108 = distinct !{!108, !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

; 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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN7SGTELIB16Surrogate_LOWESS22predict_private_singleENS_6MatrixEi(ptr noundef nonnull align 8 dereferenceable(1128) %0, ptr noundef nonnull %1, i32 noundef %2) local_unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca %"class.std::__cxx11::basic_string", align 8
  %5 = alloca %"class.std::allocator", align 1
  %6 = alloca %"class.std::__cxx11::basic_string", align 8
  %7 = alloca %"class.std::allocator", align 1
  %8 = alloca %"class.SGTELIB::Matrix", align 8
  %9 = alloca %"class.SGTELIB::Matrix", align 8
  %10 = alloca %"class.std::__cxx11::basic_string", align 8
  %11 = alloca %"class.SGTELIB::Matrix", 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.std::__cxx11::basic_string", align 8
  %16 = alloca %"class.std::allocator", align 1
  %17 = alloca %"class.std::__cxx11::basic_string", align 8
  %18 = alloca %"class.std::allocator", align 1
  %19 = alloca %"class.SGTELIB::Matrix", align 8
  %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.std::__cxx11::basic_string", align 8
  %25 = alloca %"class.std::allocator", align 1
  %26 = alloca %"class.SGTELIB::Matrix", align 8
  %27 = alloca %"class.std::__cxx11::basic_string", align 8
  %28 = alloca %"class.std::allocator", align 1
  %29 = alloca %"class.SGTELIB::Matrix", align 8
  %30 = alloca %"class.SGTELIB::Matrix", align 8
  %31 = tail call noundef i32 @_ZNK7SGTELIB6Matrix11get_nb_rowsEv(ptr noundef nonnull align 8 dereferenceable(56) %1)
  %.not = icmp eq i32 %31, 1
  br i1 %.not, label %44, label %32

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

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

35:                                               ; preds = %34
  invoke void @_ZN7SGTELIB9ExceptionC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiS8_(ptr noundef nonnull align 8 dereferenceable(112) %33, ptr noundef nonnull align 8 dereferenceable(32) %4, i32 noundef 295, ptr noundef nonnull align 8 dereferenceable(32) %6)
          to label %36 unwind label %40

36:                                               ; preds = %35
  invoke void @__cxa_throw(ptr nonnull %33, ptr nonnull @_ZTIN7SGTELIB9ExceptionE, ptr nonnull @_ZN7SGTELIB9ExceptionD2Ev) #14
          to label %939 unwind label %40

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

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

40:                                               ; preds = %36, %35
  %.0321 = phi i1 [ false, %36 ], [ true, %35 ]
  %41 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %6) #13
  br label %42

42:                                               ; preds = %38, %40
  %.1322 = phi i1 [ %.0321, %40 ], [ true, %38 ]
  %.pn438 = phi { ptr, i32 } [ %41, %40 ], [ %39, %38 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %7) #13
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %7) #13
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %6) #13
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %4) #13
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %5) #13
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %5) #13
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %4) #13
  br i1 %.1322, label %43, label %938

43:                                               ; preds = %.thread, %42
  %.pn438.pn453 = phi { ptr, i32 } [ %37, %.thread ], [ %.pn438, %42 ]
  call void @__cxa_free_exception(ptr %33) #13
  br label %938

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

49:                                               ; preds = %44
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %9) #13
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %9) #13
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %10) #13
  invoke void @_ZNK7SGTELIB20Surrogate_Parameters10get_presetB5cxx11Ev(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %10, ptr noundef nonnull align 8 dereferenceable(312) %47)
          to label %50 unwind label %75

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

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

58:                                               ; preds = %57
  %59 = invoke noundef nonnull align 8 dereferenceable(56) ptr @_ZN7SGTELIB6MatrixaSERKS0_(ptr noundef nonnull align 8 dereferenceable(56) %11, ptr noundef nonnull align 8 dereferenceable(56) %12)
          to label %60 unwind label %81

60:                                               ; preds = %58
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %12) #13
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %12) #13
  %61 = invoke noundef double @_ZNK7SGTELIB6Matrix3sumEv(ptr noundef nonnull align 8 dereferenceable(56) %11)
          to label %62 unwind label %84

62:                                               ; preds = %60
  %63 = fdiv double %61, %56
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %13) #13
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %14) #13
  %64 = fneg double %63
  invoke void @_ZplRKN7SGTELIB6MatrixEd(ptr dead_on_unwind nonnull writable sret(%"class.SGTELIB::Matrix") align 8 %14, ptr noundef nonnull align 8 dereferenceable(56) %11, double noundef %64)
          to label %65 unwind label %86

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

66:                                               ; preds = %65
  %67 = invoke noundef double @_ZNK7SGTELIB6Matrix3sumEv(ptr noundef nonnull align 8 dereferenceable(56) %13)
          to label %68 unwind label %90

68:                                               ; preds = %66
  %69 = fdiv double %67, %56
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %13) #13
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %14) #13
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %14) #13
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %13) #13
  %70 = fcmp oeq double %69, 0.000000e+00
  %.0385 = select i1 %70, double 1.000000e-13, double %69
  %71 = fcmp olt double %63, 0.000000e+00
  %72 = fcmp olt double %.0385, 0.000000e+00
  %or.cond = select i1 %71, i1 true, i1 %72
  br i1 %or.cond, label %94, label %120

73:                                               ; preds = %44
  %74 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %9) #13
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %9) #13
  br label %937

75:                                               ; preds = %49
  %76 = landingpad { ptr, i32 }
          cleanup
  br label %936

77:                                               ; preds = %50
  %78 = landingpad { ptr, i32 }
          cleanup
  br label %935

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

81:                                               ; preds = %58
  %82 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %12) #13
  br label %83

83:                                               ; preds = %81, %79
  %.pn = phi { ptr, i32 } [ %82, %81 ], [ %80, %79 ]
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %12) #13
  br label %934

84:                                               ; preds = %60
  %85 = landingpad { ptr, i32 }
          cleanup
  br label %934

86:                                               ; preds = %62
  %87 = landingpad { ptr, i32 }
          cleanup
  br label %93

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

90:                                               ; preds = %66
  %91 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %13) #13
  br label %92

92:                                               ; preds = %90, %88
  %.pn400 = phi { ptr, i32 } [ %91, %90 ], [ %89, %88 ]
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %14) #13
  br label %93

93:                                               ; preds = %92, %86
  %.pn400.pn = phi { ptr, i32 } [ %.pn400, %92 ], [ %87, %86 ]
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %14) #13
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %13) #13
  br label %934

94:                                               ; preds = %68
  %95 = 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 %96 unwind label %111

96:                                               ; preds = %94
  %97 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %95, double noundef %63)
          to label %98 unwind label %111

98:                                               ; preds = %96
  %99 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %97, ptr noundef nonnull @.str.2)
          to label %100 unwind label %111

100:                                              ; preds = %98
  %101 = 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 %102 unwind label %111

102:                                              ; preds = %100
  %103 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %101, double noundef %.0385)
          to label %104 unwind label %111

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

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

108:                                              ; preds = %106
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %17) #13
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %18) #13
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %18) #13
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef nonnull @.str.7, ptr noundef nonnull align 1 dereferenceable(1) %18)
          to label %109 unwind label %114

109:                                              ; preds = %108
  invoke void @_ZN7SGTELIB9ExceptionC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiS8_(ptr noundef nonnull align 8 dereferenceable(112) %107, ptr noundef nonnull align 8 dereferenceable(32) %15, i32 noundef 339, ptr noundef nonnull align 8 dereferenceable(32) %17)
          to label %110 unwind label %116

110:                                              ; preds = %109
  invoke void @__cxa_throw(ptr nonnull %107, ptr nonnull @_ZTIN7SGTELIB9ExceptionE, ptr nonnull @_ZN7SGTELIB9ExceptionD2Ev) #14
          to label %939 unwind label %116

111:                                              ; preds = %104, %102, %100, %98, %96, %94
  %112 = landingpad { ptr, i32 }
          cleanup
  br label %934

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

114:                                              ; preds = %108
  %115 = landingpad { ptr, i32 }
          cleanup
  br label %118

116:                                              ; preds = %110, %109
  %.0386 = phi i1 [ false, %110 ], [ true, %109 ]
  %117 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #13
  br label %118

118:                                              ; preds = %114, %116
  %.1387 = phi i1 [ %.0386, %116 ], [ true, %114 ]
  %.pn429 = phi { ptr, i32 } [ %117, %116 ], [ %115, %114 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %18) #13
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %18) #13
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %17) #13
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #13
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %16) #13
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %16) #13
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #13
  br i1 %.1387, label %119, label %934

119:                                              ; preds = %.thread454, %118
  %.pn429.pn457 = phi { ptr, i32 } [ %113, %.thread454 ], [ %.pn429, %118 ]
  call void @__cxa_free_exception(ptr %107) #13
  br label %934

120:                                              ; preds = %68
  %121 = fmul double %63, %63
  %122 = fdiv double %121, %.0385
  %123 = fdiv double %.0385, %63
  %124 = call noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef nonnull @.str.8)
  br i1 %124, label %.preheader491, label %137

.preheader491:                                    ; preds = %120
  %125 = load i32, ptr %51, align 8, !tbaa !46
  %126 = icmp sgt i32 %125, 0
  br i1 %126, label %.lr.ph534, label %.loopexit492

.lr.ph534:                                        ; preds = %.preheader491
  %127 = getelementptr inbounds i8, ptr %0, i64 1008
  br label %128

128:                                              ; preds = %.lr.ph534, %131
  %indvars.iv682 = phi i64 [ 0, %.lr.ph534 ], [ %indvars.iv.next683, %131 ]
  %129 = trunc nuw nsw i64 %indvars.iv682 to i32
  %130 = invoke noundef double @_ZNK7SGTELIB6Matrix3getEi(ptr noundef nonnull align 8 dereferenceable(56) %8, i32 noundef %129)
          to label %131 unwind label %.loopexit493

131:                                              ; preds = %128
  %132 = load ptr, ptr %127, align 8, !tbaa !47
  %133 = getelementptr inbounds double, ptr %132, i64 %indvars.iv682
  store double %130, ptr %133, align 8, !tbaa !49
  %indvars.iv.next683 = add nuw nsw i64 %indvars.iv682, 1
  %134 = load i32, ptr %51, align 8, !tbaa !46
  %135 = sext i32 %134 to i64
  %136 = icmp slt i64 %indvars.iv.next683, %135
  br i1 %136, label %128, label %.loopexit492, !llvm.loop !50

.loopexit493:                                     ; preds = %128
  %lpad.loopexit495 = landingpad { ptr, i32 }
          cleanup
  br label %934

.loopexit.split-lp494:                            ; preds = %239, %242
  %lpad.loopexit.split-lp496 = landingpad { ptr, i32 }
          cleanup
  br label %934

137:                                              ; preds = %120
  %138 = call noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef nonnull @.str.9)
  br i1 %138, label %139, label %173

139:                                              ; preds = %137
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %19) #13
  invoke void @_ZNK7SGTELIB6Matrix4rankEv(ptr dead_on_unwind nonnull writable sret(%"class.SGTELIB::Matrix") align 8 %19, ptr noundef nonnull align 8 dereferenceable(56) %8)
          to label %.preheader503 unwind label %150

.preheader503:                                    ; preds = %139
  %140 = getelementptr inbounds i8, ptr %0, i64 988
  br label %141

141:                                              ; preds = %.preheader503, %148
  %.1328 = phi i32 [ %149, %148 ], [ 0, %.preheader503 ]
  %142 = invoke noundef double @_ZNK7SGTELIB6Matrix3getEi(ptr noundef nonnull align 8 dereferenceable(56) %19, i32 noundef %.1328)
          to label %143 unwind label %152

143:                                              ; preds = %141
  %144 = load i32, ptr %140, align 4, !tbaa !52
  %145 = add nsw i32 %144, -1
  %146 = sitofp i32 %145 to double
  %147 = fcmp une double %142, %146
  br i1 %147, label %148, label %154

148:                                              ; preds = %143
  %149 = add nuw nsw i32 %.1328, 1
  br label %141, !llvm.loop !53

150:                                              ; preds = %139
  %151 = landingpad { ptr, i32 }
          cleanup
  br label %172

152:                                              ; preds = %141
  %153 = landingpad { ptr, i32 }
          cleanup
  br label %171

154:                                              ; preds = %143
  %155 = invoke noundef double @_ZNK7SGTELIB6Matrix3getEi(ptr noundef nonnull align 8 dereferenceable(56) %8, i32 noundef %.1328)
          to label %156 unwind label %.loopexit.split-lp499

156:                                              ; preds = %154
  %157 = fmul double %155, 2.000000e+00
  %158 = load i32, ptr %51, align 8, !tbaa !46
  %159 = icmp sgt i32 %158, 0
  br i1 %159, label %.lr.ph531, label %._crit_edge532

.lr.ph531:                                        ; preds = %156
  %160 = getelementptr inbounds i8, ptr %0, i64 1008
  br label %161

161:                                              ; preds = %.lr.ph531, %164
  %indvars.iv679 = phi i64 [ 0, %.lr.ph531 ], [ %indvars.iv.next680, %164 ]
  %162 = trunc nuw nsw i64 %indvars.iv679 to i32
  %163 = invoke noundef double @_ZNK7SGTELIB6Matrix3getEi(ptr noundef nonnull align 8 dereferenceable(56) %8, i32 noundef %162)
          to label %164 unwind label %.loopexit498

164:                                              ; preds = %161
  %165 = fdiv double %163, %157
  %166 = load ptr, ptr %160, align 8, !tbaa !47
  %167 = getelementptr inbounds double, ptr %166, i64 %indvars.iv679
  store double %165, ptr %167, align 8, !tbaa !49
  %indvars.iv.next680 = add nuw nsw i64 %indvars.iv679, 1
  %168 = load i32, ptr %51, align 8, !tbaa !46
  %169 = sext i32 %168 to i64
  %170 = icmp slt i64 %indvars.iv.next680, %169
  br i1 %170, label %161, label %._crit_edge532, !llvm.loop !54

.loopexit498:                                     ; preds = %161
  %lpad.loopexit500 = landingpad { ptr, i32 }
          cleanup
  br label %171

.loopexit.split-lp499:                            ; preds = %154
  %lpad.loopexit.split-lp501 = landingpad { ptr, i32 }
          cleanup
  br label %171

._crit_edge532:                                   ; preds = %164, %156
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %19) #13
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %19) #13
  br label %.loopexit492

171:                                              ; preds = %.loopexit498, %.loopexit.split-lp499, %152
  %.pn405 = phi { ptr, i32 } [ %153, %152 ], [ %lpad.loopexit500, %.loopexit498 ], [ %lpad.loopexit.split-lp501, %.loopexit.split-lp499 ]
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %19) #13
  br label %172

172:                                              ; preds = %171, %150
  %.pn405.pn = phi { ptr, i32 } [ %.pn405, %171 ], [ %151, %150 ]
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %19) #13
  br label %934

173:                                              ; preds = %137
  %174 = call noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef nonnull @.str.10)
  br i1 %174, label %175, label %196

175:                                              ; preds = %173
  %176 = getelementptr inbounds i8, ptr %0, i64 988
  %177 = load i32, ptr %176, align 4, !tbaa !52
  %178 = sitofp i32 %177 to double
  %179 = fdiv double %178, %56
  %180 = invoke noundef double @_ZN7SGTELIB11gammacdfinvEddd(double noundef %179, double noundef %122, double noundef %123)
          to label %181 unwind label %.loopexit.split-lp506

181:                                              ; preds = %175
  %182 = call double @pow(double noundef %180, double noundef 5.000000e-01) #13
  %183 = load i32, ptr %51, align 8, !tbaa !46
  %184 = icmp sgt i32 %183, 0
  br i1 %184, label %.lr.ph528, label %.loopexit492

.lr.ph528:                                        ; preds = %181
  %185 = getelementptr inbounds i8, ptr %0, i64 1008
  br label %186

186:                                              ; preds = %.lr.ph528, %189
  %indvars.iv676 = phi i64 [ 0, %.lr.ph528 ], [ %indvars.iv.next677, %189 ]
  %187 = trunc nuw nsw i64 %indvars.iv676 to i32
  %188 = invoke noundef double @_ZNK7SGTELIB6Matrix3getEi(ptr noundef nonnull align 8 dereferenceable(56) %8, i32 noundef %187)
          to label %189 unwind label %.loopexit505

189:                                              ; preds = %186
  %190 = fdiv double %188, %182
  %191 = load ptr, ptr %185, align 8, !tbaa !47
  %192 = getelementptr inbounds double, ptr %191, i64 %indvars.iv676
  store double %190, ptr %192, align 8, !tbaa !49
  %indvars.iv.next677 = add nuw nsw i64 %indvars.iv676, 1
  %193 = load i32, ptr %51, align 8, !tbaa !46
  %194 = sext i32 %193 to i64
  %195 = icmp slt i64 %indvars.iv.next677, %194
  br i1 %195, label %186, label %.loopexit492, !llvm.loop !55

.loopexit505:                                     ; preds = %186
  %lpad.loopexit507 = landingpad { ptr, i32 }
          cleanup
  br label %934

.loopexit.split-lp506:                            ; preds = %175
  %lpad.loopexit.split-lp508 = landingpad { ptr, i32 }
          cleanup
  br label %934

196:                                              ; preds = %173
  %197 = call noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef nonnull @.str.11)
  br i1 %197, label %200, label %198

198:                                              ; preds = %196
  %199 = call noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef nonnull @.str.12)
  br i1 %199, label %200, label %231

200:                                              ; preds = %198, %196
  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) %8)
          to label %.preheader512 unwind label %213

.preheader512:                                    ; preds = %200
  %201 = load i32, ptr %51, align 8, !tbaa !46
  %202 = icmp sgt i32 %201, 0
  br i1 %202, label %.lr.ph522, label %._crit_edge523

.lr.ph522:                                        ; preds = %.preheader512
  %203 = getelementptr inbounds i8, ptr %0, i64 1008
  br label %204

204:                                              ; preds = %.lr.ph522, %207
  %indvars.iv668 = phi i64 [ 0, %.lr.ph522 ], [ %indvars.iv.next669, %207 ]
  %205 = trunc nuw nsw i64 %indvars.iv668 to i32
  %206 = invoke noundef double @_ZNK7SGTELIB6Matrix3getEi(ptr noundef nonnull align 8 dereferenceable(56) %20, i32 noundef %205)
          to label %207 unwind label %215

207:                                              ; preds = %204
  %208 = load ptr, ptr %203, align 8, !tbaa !47
  %209 = getelementptr inbounds double, ptr %208, i64 %indvars.iv668
  store double %206, ptr %209, align 8, !tbaa !49
  %indvars.iv.next669 = add nuw nsw i64 %indvars.iv668, 1
  %210 = load i32, ptr %51, align 8, !tbaa !46
  %211 = sext i32 %210 to i64
  %212 = icmp slt i64 %indvars.iv.next669, %211
  br i1 %212, label %204, label %._crit_edge523, !llvm.loop !56

213:                                              ; preds = %200
  %214 = landingpad { ptr, i32 }
          cleanup
  br label %230

215:                                              ; preds = %204
  %216 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %20) #13
  br label %230

._crit_edge523:                                   ; preds = %207, %.preheader512
  %217 = call noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef nonnull @.str.12)
  br i1 %217, label %.preheader510, label %.loopexit511

.preheader510:                                    ; preds = %._crit_edge523
  %218 = load i32, ptr %51, align 8, !tbaa !46
  %219 = icmp sgt i32 %218, 0
  br i1 %219, label %.lr.ph525, label %.loopexit511

.lr.ph525:                                        ; preds = %.preheader510
  %220 = add nsw i32 %218, -1
  %221 = uitofp nneg i32 %220 to double
  %222 = getelementptr inbounds i8, ptr %0, i64 1008
  %223 = load ptr, ptr %222, align 8, !tbaa !47
  %wide.trip.count674 = zext nneg i32 %218 to i64
  %min.iters.check880 = icmp eq i32 %218, 1
  br i1 %min.iters.check880, label %scalar.ph879.preheader, label %vector.ph881

vector.ph881:                                     ; preds = %.lr.ph525
  %n.vec883 = and i64 %wide.trip.count674, 2147483646
  %broadcast.splatinsert888 = insertelement <2 x double> poison, double %221, i64 0
  %broadcast.splat889 = shufflevector <2 x double> %broadcast.splatinsert888, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body885

vector.body885:                                   ; preds = %vector.body885, %vector.ph881
  %index886 = phi i64 [ 0, %vector.ph881 ], [ %index.next890, %vector.body885 ]
  %224 = getelementptr inbounds double, ptr %223, i64 %index886
  %wide.load887 = load <2 x double>, ptr %224, align 8, !tbaa !49
  %225 = fdiv <2 x double> %wide.load887, %broadcast.splat889
  store <2 x double> %225, ptr %224, align 8, !tbaa !49
  %index.next890 = add nuw i64 %index886, 2
  %226 = icmp eq i64 %index.next890, %n.vec883
  br i1 %226, label %middle.block878, label %vector.body885, !llvm.loop !57

middle.block878:                                  ; preds = %vector.body885
  %cmp.n891 = icmp eq i64 %n.vec883, %wide.trip.count674
  br i1 %cmp.n891, label %.loopexit511, label %scalar.ph879.preheader

scalar.ph879.preheader:                           ; preds = %middle.block878, %.lr.ph525
  %indvars.iv671.ph = phi i64 [ 0, %.lr.ph525 ], [ %n.vec883, %middle.block878 ]
  br label %scalar.ph879

scalar.ph879:                                     ; preds = %scalar.ph879.preheader, %scalar.ph879
  %indvars.iv671 = phi i64 [ %indvars.iv.next672, %scalar.ph879 ], [ %indvars.iv671.ph, %scalar.ph879.preheader ]
  %227 = getelementptr inbounds double, ptr %223, i64 %indvars.iv671
  %228 = load double, ptr %227, align 8, !tbaa !49
  %229 = fdiv double %228, %221
  store double %229, ptr %227, align 8, !tbaa !49
  %indvars.iv.next672 = add nuw nsw i64 %indvars.iv671, 1
  %exitcond675.not = icmp eq i64 %indvars.iv.next672, %wide.trip.count674
  br i1 %exitcond675.not, label %.loopexit511, label %scalar.ph879, !llvm.loop !60

.loopexit511:                                     ; preds = %scalar.ph879, %middle.block878, %.preheader510, %._crit_edge523
  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 %.loopexit492

230:                                              ; preds = %215, %213
  %.pn403 = phi { ptr, i32 } [ %216, %215 ], [ %214, %213 ]
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %20) #13
  br label %934

231:                                              ; preds = %198
  %232 = call noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef nonnull @.str.13)
  br i1 %232, label %235, label %233

233:                                              ; preds = %231
  %234 = call noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef nonnull @.str.14)
  br i1 %234, label %235, label %.loopexit492

235:                                              ; preds = %233, %231
  %236 = load i32, ptr %51, align 8, !tbaa !46
  %237 = icmp sgt i32 %236, 0
  br i1 %237, label %.lr.ph, label %._crit_edge

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

239:                                              ; preds = %.lr.ph, %244
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %244 ]
  %240 = trunc nuw nsw i64 %indvars.iv to i32
  %241 = invoke noundef double @_ZNK7SGTELIB6Matrix3getEi(ptr noundef nonnull align 8 dereferenceable(56) %8, i32 noundef %240)
          to label %242 unwind label %.loopexit.split-lp494

242:                                              ; preds = %239
  %square = fmul double %241, %241
  %243 = invoke noundef double @_ZN7SGTELIB8gammacdfEddd(double noundef %square, double noundef %122, double noundef %123)
          to label %244 unwind label %.loopexit.split-lp494

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

._crit_edge:                                      ; preds = %244, %235
  %250 = call noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef nonnull @.str.13)
  br i1 %250, label %.preheader513, label %.loopexit492

.preheader513:                                    ; preds = %._crit_edge
  %251 = load i32, ptr %51, align 8, !tbaa !46
  %252 = icmp sgt i32 %251, 0
  br i1 %252, label %.lr.ph520, label %.loopexit492

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

vector.ph:                                        ; preds = %.lr.ph520
  %n.vec = and i64 %wide.trip.count, 2147483644
  %broadcast.splatinsert = insertelement <2 x double> poison, double %254, 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 ]
  %257 = getelementptr inbounds double, ptr %256, i64 %index
  %258 = getelementptr inbounds i8, ptr %257, i64 16
  %wide.load = load <2 x double>, ptr %257, align 8, !tbaa !49
  %wide.load877 = load <2 x double>, ptr %258, align 8, !tbaa !49
  %259 = fmul <2 x double> %wide.load, %broadcast.splat
  %260 = fmul <2 x double> %wide.load877, %broadcast.splat
  store <2 x double> %259, ptr %257, align 8, !tbaa !49
  store <2 x double> %260, ptr %258, align 8, !tbaa !49
  %index.next = add nuw i64 %index, 4
  %261 = icmp eq i64 %index.next, %n.vec
  br i1 %261, 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 %.loopexit492, label %scalar.ph.preheader

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

scalar.ph:                                        ; preds = %scalar.ph.preheader, %scalar.ph
  %indvars.iv665 = phi i64 [ %indvars.iv.next666, %scalar.ph ], [ %indvars.iv665.ph, %scalar.ph.preheader ]
  %262 = getelementptr inbounds double, ptr %256, i64 %indvars.iv665
  %263 = load double, ptr %262, align 8, !tbaa !49
  %264 = fmul double %263, %254
  store double %264, ptr %262, align 8, !tbaa !49
  %indvars.iv.next666 = add nuw nsw i64 %indvars.iv665, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next666, %wide.trip.count
  br i1 %exitcond.not, label %.loopexit492, label %scalar.ph, !llvm.loop !63

.loopexit492:                                     ; preds = %scalar.ph, %189, %131, %middle.block, %.preheader513, %181, %.preheader491, %233, %._crit_edge, %.loopexit511, %._crit_edge532
  %265 = call noundef double @_ZNK7SGTELIB20Surrogate_Parameters15get_kernel_coefEv(ptr noundef nonnull align 8 dereferenceable(312) %47)
  %266 = call noundef i32 @_ZNK7SGTELIB20Surrogate_Parameters15get_kernel_typeEv(ptr noundef nonnull align 8 dereferenceable(312) %47)
  %267 = load i32, ptr %51, align 8, !tbaa !46
  %268 = icmp sgt i32 %267, 0
  br i1 %268, label %.lr.ph538, label %._crit_edge539

.lr.ph538:                                        ; preds = %.loopexit492
  %269 = getelementptr inbounds i8, ptr %0, i64 1008
  %.pre = load ptr, ptr %269, align 8, !tbaa !47
  br label %270

270:                                              ; preds = %.lr.ph538, %275
  %271 = phi ptr [ %.pre, %.lr.ph538 ], [ %276, %275 ]
  %indvars.iv685 = phi i64 [ 0, %.lr.ph538 ], [ %indvars.iv.next686, %275 ]
  %.0389535 = phi double [ 0.000000e+00, %.lr.ph538 ], [ %278, %275 ]
  %272 = getelementptr inbounds double, ptr %271, i64 %indvars.iv685
  %273 = load double, ptr %272, align 8, !tbaa !49
  %274 = invoke noundef double @_ZN7SGTELIB6kernelENS_8kernel_tEdd(i32 noundef %266, double noundef %265, double noundef %273)
          to label %275 unwind label %282

275:                                              ; preds = %270
  %276 = load ptr, ptr %269, align 8, !tbaa !47
  %277 = getelementptr inbounds double, ptr %276, i64 %indvars.iv685
  store double %274, ptr %277, align 8, !tbaa !49
  %278 = fadd double %.0389535, %274
  %indvars.iv.next686 = add nuw nsw i64 %indvars.iv685, 1
  %279 = load i32, ptr %51, align 8, !tbaa !46
  %280 = sext i32 %279 to i64
  %281 = icmp slt i64 %indvars.iv.next686, %280
  br i1 %281, label %270, label %._crit_edge539, !llvm.loop !64

282:                                              ; preds = %270
  %283 = landingpad { ptr, i32 }
          cleanup
  br label %934

._crit_edge539:                                   ; preds = %275, %.loopexit492
  %284 = phi i32 [ %267, %.loopexit492 ], [ %279, %275 ]
  %.0389.lcssa = phi double [ 0.000000e+00, %.loopexit492 ], [ %278, %275 ]
  br i1 %54, label %285, label %292

285:                                              ; preds = %._crit_edge539
  %286 = getelementptr inbounds i8, ptr %0, i64 1008
  %287 = load ptr, ptr %286, align 8, !tbaa !47
  %288 = sext i32 %2 to i64
  %289 = getelementptr inbounds double, ptr %287, i64 %288
  %290 = load double, ptr %289, align 8, !tbaa !49
  %291 = fsub double %.0389.lcssa, %290
  store double 0.000000e+00, ptr %289, align 8, !tbaa !49
  br label %292

292:                                              ; preds = %285, %._crit_edge539
  %.2391 = phi double [ %291, %285 ], [ %.0389.lcssa, %._crit_edge539 ]
  %293 = fcmp ogt double %.2391, 1.000000e-13
  %294 = icmp sgt i32 %284, 0
  br i1 %293, label %.preheader487, label %.preheader489

.preheader489:                                    ; preds = %292
  br i1 %294, label %.lr.ph541, label %.loopexit488

.lr.ph541:                                        ; preds = %.preheader489
  %295 = getelementptr inbounds i8, ptr %0, i64 1008
  %296 = load ptr, ptr %295, align 8, !tbaa !47
  %wide.trip.count691 = zext nneg i32 %284 to i64
  %min.iters.check894 = icmp ult i32 %284, 4
  br i1 %min.iters.check894, label %scalar.ph893.preheader, label %vector.ph895

scalar.ph893.preheader:                           ; preds = %middle.block892, %.lr.ph541
  %indvars.iv688.ph = phi i64 [ 0, %.lr.ph541 ], [ %n.vec897, %middle.block892 ]
  br label %scalar.ph893

vector.ph895:                                     ; preds = %.lr.ph541
  %n.vec897 = and i64 %wide.trip.count691, 2147483644
  br label %vector.body899

vector.body899:                                   ; preds = %vector.body899, %vector.ph895
  %index900 = phi i64 [ 0, %vector.ph895 ], [ %index.next901, %vector.body899 ]
  %297 = getelementptr inbounds double, ptr %296, i64 %index900
  %298 = getelementptr inbounds i8, ptr %297, i64 16
  store <2 x double> <double 1.000000e+00, double 1.000000e+00>, ptr %297, align 8, !tbaa !49
  store <2 x double> <double 1.000000e+00, double 1.000000e+00>, ptr %298, align 8, !tbaa !49
  %index.next901 = add nuw i64 %index900, 4
  %299 = icmp eq i64 %index.next901, %n.vec897
  br i1 %299, label %middle.block892, label %vector.body899, !llvm.loop !65

middle.block892:                                  ; preds = %vector.body899
  %cmp.n902 = icmp eq i64 %n.vec897, %wide.trip.count691
  br i1 %cmp.n902, label %.loopexit488, label %scalar.ph893.preheader

.preheader487:                                    ; preds = %292
  br i1 %294, label %.lr.ph543, label %.loopexit488

.lr.ph543:                                        ; preds = %.preheader487
  %300 = getelementptr inbounds i8, ptr %0, i64 1008
  %301 = load ptr, ptr %300, align 8, !tbaa !47
  %wide.trip.count696 = zext nneg i32 %284 to i64
  %min.iters.check905 = icmp eq i32 %284, 1
  br i1 %min.iters.check905, label %scalar.ph904.preheader, label %vector.ph906

vector.ph906:                                     ; preds = %.lr.ph543
  %n.vec908 = and i64 %wide.trip.count696, 2147483646
  %broadcast.splatinsert913 = insertelement <2 x double> poison, double %.2391, i64 0
  %broadcast.splat914 = shufflevector <2 x double> %broadcast.splatinsert913, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body910

vector.body910:                                   ; preds = %vector.body910, %vector.ph906
  %index911 = phi i64 [ 0, %vector.ph906 ], [ %index.next915, %vector.body910 ]
  %302 = getelementptr inbounds double, ptr %301, i64 %index911
  %wide.load912 = load <2 x double>, ptr %302, align 8, !tbaa !49
  %303 = fdiv <2 x double> %wide.load912, %broadcast.splat914
  store <2 x double> %303, ptr %302, align 8, !tbaa !49
  %index.next915 = add nuw i64 %index911, 2
  %304 = icmp eq i64 %index.next915, %n.vec908
  br i1 %304, label %middle.block903, label %vector.body910, !llvm.loop !66

middle.block903:                                  ; preds = %vector.body910
  %cmp.n916 = icmp eq i64 %n.vec908, %wide.trip.count696
  br i1 %cmp.n916, label %.loopexit488, label %scalar.ph904.preheader

scalar.ph904.preheader:                           ; preds = %middle.block903, %.lr.ph543
  %indvars.iv693.ph = phi i64 [ 0, %.lr.ph543 ], [ %n.vec908, %middle.block903 ]
  br label %scalar.ph904

scalar.ph904:                                     ; preds = %scalar.ph904.preheader, %scalar.ph904
  %indvars.iv693 = phi i64 [ %indvars.iv.next694, %scalar.ph904 ], [ %indvars.iv693.ph, %scalar.ph904.preheader ]
  %305 = getelementptr inbounds double, ptr %301, i64 %indvars.iv693
  %306 = load double, ptr %305, align 8, !tbaa !49
  %307 = fdiv double %306, %.2391
  store double %307, ptr %305, align 8, !tbaa !49
  %indvars.iv.next694 = add nuw nsw i64 %indvars.iv693, 1
  %exitcond697.not = icmp eq i64 %indvars.iv.next694, %wide.trip.count696
  br i1 %exitcond697.not, label %.loopexit488, label %scalar.ph904, !llvm.loop !67

scalar.ph893:                                     ; preds = %scalar.ph893.preheader, %scalar.ph893
  %indvars.iv688 = phi i64 [ %indvars.iv.next689, %scalar.ph893 ], [ %indvars.iv688.ph, %scalar.ph893.preheader ]
  %308 = getelementptr inbounds double, ptr %296, i64 %indvars.iv688
  store double 1.000000e+00, ptr %308, align 8, !tbaa !49
  %indvars.iv.next689 = add nuw nsw i64 %indvars.iv688, 1
  %exitcond692.not = icmp eq i64 %indvars.iv.next689, %wide.trip.count691
  br i1 %exitcond692.not, label %.loopexit488, label %scalar.ph893, !llvm.loop !68

.loopexit488:                                     ; preds = %scalar.ph893, %scalar.ph904, %middle.block892, %middle.block903, %.preheader489, %.preheader487
  %309 = call noundef double @_ZNK7SGTELIB20Surrogate_Parameters9get_ridgeEv(ptr noundef nonnull align 8 dereferenceable(312) %47)
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %21) #13
  invoke void @_ZN7SGTELIB9Surrogate13get_matrix_ZsEv(ptr dead_on_unwind nonnull writable sret(%"class.SGTELIB::Matrix") align 8 %21, ptr noundef nonnull align 8 dereferenceable(985) %0)
          to label %310 unwind label %367

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

.preheader486:                                    ; preds = %310
  %311 = load i32, ptr %51, align 8, !tbaa !46
  %312 = icmp sgt i32 %311, 0
  br i1 %312, label %.lr.ph563, label %.preheader480

.lr.ph563:                                        ; preds = %.preheader486
  %313 = getelementptr inbounds i8, ptr %0, i64 1000
  %314 = getelementptr inbounds i8, ptr %0, i64 1008
  %315 = getelementptr inbounds i8, ptr %0, i64 988
  %316 = getelementptr inbounds i8, ptr %0, i64 996
  %317 = getelementptr inbounds i8, ptr %0, i64 328
  %318 = getelementptr inbounds i8, ptr %0, i64 1064
  %.pre824 = load ptr, ptr %313, align 8, !tbaa !69
  br label %333

.preheader480:                                    ; preds = %.critedge3, %.preheader486
  %319 = phi i32 [ %311, %.preheader486 ], [ %436, %.critedge3 ]
  %320 = getelementptr inbounds i8, ptr %0, i64 988
  %321 = load i32, ptr %320, align 4
  %322 = icmp sgt i32 %321, 0
  br i1 %322, label %.preheader479.lr.ph, label %.preheader477

.preheader479.lr.ph:                              ; preds = %.preheader480
  %323 = getelementptr inbounds i8, ptr %0, i64 1016
  %324 = load ptr, ptr %323, align 8, !tbaa !70
  %325 = getelementptr inbounds i8, ptr %0, i64 332
  %326 = load i32, ptr %325, align 4, !tbaa !71
  %327 = icmp sgt i32 %326, 0
  %328 = getelementptr inbounds i8, ptr %0, i64 1024
  %329 = load ptr, ptr %328, align 8
  %330 = zext i32 %326 to i64
  %331 = shl nuw nsw i64 %330, 3
  %wide.trip.count724 = zext nneg i32 %321 to i64
  %xtraiter = and i64 %wide.trip.count724, 1
  %332 = icmp eq i32 %321, 1
  br i1 %332, label %.preheader477.loopexit.unr-lcssa, label %.preheader479.lr.ph.new

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

333:                                              ; preds = %.lr.ph563, %.critedge3
  %334 = phi ptr [ %.pre824, %.lr.ph563 ], [ %435, %.critedge3 ]
  %indvars.iv713 = phi i64 [ 0, %.lr.ph563 ], [ %indvars.iv.next714, %.critedge3 ]
  %335 = getelementptr inbounds ptr, ptr %334, i64 %indvars.iv713
  %336 = load ptr, ptr %335, align 8, !tbaa !72
  store double 1.000000e+00, ptr %336, align 8, !tbaa !49
  %337 = load ptr, ptr %314, align 8, !tbaa !47
  %338 = getelementptr inbounds double, ptr %337, i64 %indvars.iv713
  %339 = load double, ptr %338, align 8, !tbaa !49
  %340 = fcmp ogt double %339, 1.000000e-13
  br i1 %340, label %346, label %.preheader484

.preheader484:                                    ; preds = %333
  %341 = load i32, ptr %315, align 4, !tbaa !52
  %342 = icmp sgt i32 %341, 1
  br i1 %342, label %.lr.ph545.preheader, label %.critedge3

.lr.ph545.preheader:                              ; preds = %.preheader484
  %scevgep = getelementptr i8, ptr %336, i64 8
  %343 = add nsw i32 %341, -1
  %344 = zext nneg i32 %343 to i64
  %345 = shl nuw nsw i64 %344, 3
  call void @llvm.memset.p0.i64(ptr align 8 %scevgep, i8 0, i64 %345, i1 false), !tbaa !49
  br label %.critedge3

346:                                              ; preds = %333
  %347 = load i32, ptr %316, align 4, !tbaa !73
  %348 = icmp sgt i32 %347, 9
  br i1 %348, label %.preheader483, label %.critedge3

.preheader483:                                    ; preds = %346
  %349 = load i32, ptr %317, align 8
  %350 = icmp sgt i32 %349, 0
  %351 = load i32, ptr %315, align 4
  %352 = icmp sgt i32 %351, 1
  %or.cond444546 = select i1 %350, i1 %352, i1 false
  br i1 %or.cond444546, label %.lr.ph549.preheader, label %.critedge

.lr.ph549.preheader:                              ; preds = %.preheader483
  %353 = trunc nuw nsw i64 %indvars.iv713 to i32
  br label %.lr.ph549

.lr.ph549:                                        ; preds = %.lr.ph549.preheader, %.lr.ph549
  %indvars.iv701 = phi i64 [ 1, %.lr.ph549.preheader ], [ %indvars.iv.next702, %.lr.ph549 ]
  %.0353548 = phi i32 [ 0, %.lr.ph549.preheader ], [ %361, %.lr.ph549 ]
  %354 = call noundef double @_ZNK7SGTELIB6Matrix3getEii(ptr noundef nonnull align 8 dereferenceable(56) %22, i32 noundef %353, i32 noundef %.0353548)
  %355 = call noundef double @_ZNK7SGTELIB6Matrix3getEii(ptr noundef nonnull align 8 dereferenceable(56) %1, i32 noundef 0, i32 noundef %.0353548)
  %356 = fsub double %354, %355
  %357 = load ptr, ptr %313, align 8, !tbaa !69
  %358 = getelementptr inbounds ptr, ptr %357, i64 %indvars.iv713
  %359 = load ptr, ptr %358, align 8, !tbaa !72
  %indvars.iv.next702 = add nuw nsw i64 %indvars.iv701, 1
  %360 = getelementptr inbounds double, ptr %359, i64 %indvars.iv701
  store double %356, ptr %360, align 8, !tbaa !49
  %361 = add nuw nsw i32 %.0353548, 1
  %362 = load i32, ptr %317, align 8
  %363 = icmp slt i32 %361, %362
  %364 = load i32, ptr %315, align 4
  %365 = sext i32 %364 to i64
  %366 = icmp slt i64 %indvars.iv.next702, %365
  %or.cond444 = select i1 %363, i1 %366, i1 false
  br i1 %or.cond444, label %.lr.ph549, label %.critedge.loopexit, !llvm.loop !74

367:                                              ; preds = %.loopexit488
  %368 = landingpad { ptr, i32 }
          cleanup
  br label %934

369:                                              ; preds = %310
  %370 = landingpad { ptr, i32 }
          cleanup
  br label %933

.critedge.loopexit:                               ; preds = %.lr.ph549
  %371 = trunc nuw nsw i64 %indvars.iv.next702 to i32
  %.pr.pre = load i32, ptr %316, align 4, !tbaa !73
  br label %.critedge

.critedge:                                        ; preds = %.critedge.loopexit, %.preheader483
  %372 = phi i32 [ %349, %.preheader483 ], [ %362, %.critedge.loopexit ]
  %.pr = phi i32 [ %347, %.preheader483 ], [ %.pr.pre, %.critedge.loopexit ]
  %373 = phi ptr [ %334, %.preheader483 ], [ %357, %.critedge.loopexit ]
  %.0372.lcssa = phi i32 [ 1, %.preheader483 ], [ %371, %.critedge.loopexit ]
  %374 = icmp sgt i32 %.pr, 14
  %375 = icmp sgt i32 %372, 0
  %or.cond647 = and i1 %374, %375
  br i1 %or.cond647, label %.lr.ph559.preheader, label %.critedge3

.lr.ph559.preheader:                              ; preds = %.critedge
  %376 = trunc nuw nsw i64 %indvars.iv713 to i32
  br label %.lr.ph559

.lr.ph559:                                        ; preds = %.lr.ph559.preheader, %.critedge5
  %377 = phi i32 [ %372, %.lr.ph559.preheader ], [ %431, %.critedge5 ]
  %378 = phi ptr [ %373, %.lr.ph559.preheader ], [ %432, %.critedge5 ]
  %indvars.iv709 = phi i64 [ 0, %.lr.ph559.preheader ], [ %indvars.iv.next710, %.critedge5 ]
  %indvars.iv704 = phi i64 [ 1, %.lr.ph559.preheader ], [ %indvars.iv.next705, %.critedge5 ]
  %.2374557 = phi i32 [ %.0372.lcssa, %.lr.ph559.preheader ], [ %.5377, %.critedge5 ]
  %379 = load i32, ptr %315, align 4, !tbaa !52
  %380 = icmp slt i32 %.2374557, %379
  br i1 %380, label %381, label %.critedge3

381:                                              ; preds = %.lr.ph559
  %382 = load ptr, ptr %318, align 8, !tbaa !75
  %383 = getelementptr inbounds i8, ptr %382, i64 %indvars.iv709
  %384 = load i8, ptr %383, align 1, !tbaa !76, !range !77, !noundef !78
  %385 = trunc nuw i8 %384 to i1
  br i1 %385, label %386, label %.critedge5

386:                                              ; preds = %381
  %387 = trunc nuw nsw i64 %indvars.iv709 to i32
  %388 = call noundef double @_ZNK7SGTELIB6Matrix3getEii(ptr noundef nonnull align 8 dereferenceable(56) %22, i32 noundef %376, i32 noundef %387)
  %389 = call noundef double @_ZNK7SGTELIB6Matrix3getEii(ptr noundef nonnull align 8 dereferenceable(56) %1, i32 noundef 0, i32 noundef %387)
  %390 = fsub double %388, %389
  %391 = fmul double %390, %390
  %392 = load ptr, ptr %313, align 8, !tbaa !69
  %393 = getelementptr inbounds ptr, ptr %392, i64 %indvars.iv713
  %394 = load ptr, ptr %393, align 8, !tbaa !72
  %395 = add nsw i32 %.2374557, 1
  %396 = sext i32 %.2374557 to i64
  %397 = getelementptr inbounds double, ptr %394, i64 %396
  store double %391, ptr %397, align 8, !tbaa !49
  %398 = load i32, ptr %316, align 4, !tbaa !73
  %399 = icmp sgt i32 %398, 19
  %.pre828 = load i32, ptr %317, align 8, !tbaa !79
  br i1 %399, label %.preheader481, label %.critedge5

.preheader481:                                    ; preds = %386
  %400 = add nuw nsw i64 %indvars.iv709, 1
  %401 = sext i32 %.pre828 to i64
  %402 = icmp slt i64 %400, %401
  %403 = load i32, ptr %315, align 4
  %404 = icmp slt i32 %395, %403
  %or.cond446552 = select i1 %402, i1 %404, i1 false
  br i1 %or.cond446552, label %.lr.ph555, label %.critedge5

.lr.ph555:                                        ; preds = %.preheader481, %424
  %405 = phi i32 [ %425, %424 ], [ %403, %.preheader481 ]
  %406 = phi i32 [ %426, %424 ], [ %.pre828, %.preheader481 ]
  %407 = phi ptr [ %427, %424 ], [ %392, %.preheader481 ]
  %indvars.iv706 = phi i64 [ %indvars.iv.next707, %424 ], [ %indvars.iv704, %.preheader481 ]
  %.3375553 = phi i32 [ %.4376, %424 ], [ %395, %.preheader481 ]
  %408 = load ptr, ptr %318, align 8, !tbaa !75
  %409 = getelementptr inbounds i8, ptr %408, i64 %indvars.iv706
  %410 = load i8, ptr %409, align 1, !tbaa !76, !range !77, !noundef !78
  %411 = trunc nuw i8 %410 to i1
  br i1 %411, label %412, label %424

412:                                              ; preds = %.lr.ph555
  %413 = trunc nuw nsw i64 %indvars.iv706 to i32
  %414 = call noundef double @_ZNK7SGTELIB6Matrix3getEii(ptr noundef nonnull align 8 dereferenceable(56) %22, i32 noundef %376, i32 noundef %413)
  %415 = call noundef double @_ZNK7SGTELIB6Matrix3getEii(ptr noundef nonnull align 8 dereferenceable(56) %1, i32 noundef 0, i32 noundef %413)
  %416 = fsub double %414, %415
  %417 = fmul double %390, %416
  %418 = load ptr, ptr %313, align 8, !tbaa !69
  %419 = getelementptr inbounds ptr, ptr %418, i64 %indvars.iv713
  %420 = load ptr, ptr %419, align 8, !tbaa !72
  %421 = add nsw i32 %.3375553, 1
  %422 = sext i32 %.3375553 to i64
  %423 = getelementptr inbounds double, ptr %420, i64 %422
  store double %417, ptr %423, align 8, !tbaa !49
  %.pre826 = load i32, ptr %317, align 8, !tbaa !79
  %.pre827 = load i32, ptr %315, align 4
  br label %424

424:                                              ; preds = %.lr.ph555, %412
  %425 = phi i32 [ %.pre827, %412 ], [ %405, %.lr.ph555 ]
  %426 = phi i32 [ %.pre826, %412 ], [ %406, %.lr.ph555 ]
  %427 = phi ptr [ %418, %412 ], [ %407, %.lr.ph555 ]
  %.4376 = phi i32 [ %421, %412 ], [ %.3375553, %.lr.ph555 ]
  %indvars.iv.next707 = add nuw nsw i64 %indvars.iv706, 1
  %428 = trunc nuw i64 %indvars.iv.next707 to i32
  %429 = icmp sgt i32 %426, %428
  %430 = icmp slt i32 %.4376, %425
  %or.cond446 = select i1 %429, i1 %430, i1 false
  br i1 %or.cond446, label %.lr.ph555, label %.critedge5, !llvm.loop !80

.critedge5:                                       ; preds = %424, %.preheader481, %381, %386
  %431 = phi i32 [ %.pre828, %386 ], [ %377, %381 ], [ %.pre828, %.preheader481 ], [ %426, %424 ]
  %432 = phi ptr [ %392, %386 ], [ %378, %381 ], [ %392, %.preheader481 ], [ %427, %424 ]
  %.5377 = phi i32 [ %395, %386 ], [ %.2374557, %381 ], [ %395, %.preheader481 ], [ %.4376, %424 ]
  %indvars.iv.next710 = add nuw nsw i64 %indvars.iv709, 1
  %433 = sext i32 %431 to i64
  %434 = icmp slt i64 %indvars.iv.next710, %433
  %indvars.iv.next705 = add nuw nsw i64 %indvars.iv704, 1
  br i1 %434, label %.lr.ph559, label %.critedge3, !llvm.loop !81

.critedge3:                                       ; preds = %.critedge5, %.lr.ph559, %.lr.ph545.preheader, %.preheader484, %346, %.critedge
  %435 = phi ptr [ %334, %.lr.ph545.preheader ], [ %334, %.preheader484 ], [ %334, %346 ], [ %373, %.critedge ], [ %432, %.critedge5 ], [ %378, %.lr.ph559 ]
  %indvars.iv.next714 = add nuw nsw i64 %indvars.iv713, 1
  %436 = load i32, ptr %51, align 8, !tbaa !46
  %437 = sext i32 %436 to i64
  %438 = icmp slt i64 %indvars.iv.next714, %437
  br i1 %438, label %333, label %.preheader480, !llvm.loop !82

.preheader479:                                    ; preds = %._crit_edge567.1, %.preheader479.lr.ph.new
  %indvar = phi i64 [ 0, %.preheader479.lr.ph.new ], [ %indvar.next.1, %._crit_edge567.1 ]
  %niter = phi i64 [ 0, %.preheader479.lr.ph.new ], [ %niter.next.1, %._crit_edge567.1 ]
  %439 = shl nuw nsw i64 %indvar, 3
  %440 = trunc i64 %indvar to i32
  %441 = xor i32 %440, -1
  %442 = add i32 %321, %441
  %443 = zext i32 %442 to i64
  %444 = shl nuw nsw i64 %443, 3
  %445 = add nuw nsw i64 %444, 8
  %446 = getelementptr inbounds ptr, ptr %324, i64 %indvar
  %447 = load ptr, ptr %446, align 8, !tbaa !72
  %scevgep716 = getelementptr i8, ptr %447, i64 %439
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(1) %scevgep716, i8 0, i64 %445, i1 false), !tbaa !49
  br i1 %327, label %.lr.ph566, label %._crit_edge567

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

.preheader479.epil:                               ; preds = %.preheader477.loopexit.unr-lcssa
  %448 = shl nuw nsw i64 %indvar.unr, 3
  %449 = trunc i64 %indvar.unr to i32
  %450 = xor i32 %449, -1
  %451 = add i32 %321, %450
  %452 = zext i32 %451 to i64
  %453 = shl nuw nsw i64 %452, 3
  %454 = add nuw nsw i64 %453, 8
  %455 = getelementptr inbounds ptr, ptr %324, i64 %indvar.unr
  %456 = load ptr, ptr %455, align 8, !tbaa !72
  %scevgep716.epil = getelementptr i8, ptr %456, i64 %448
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(1) %scevgep716.epil, i8 0, i64 %454, i1 false), !tbaa !49
  br i1 %327, label %.lr.ph566.epil, label %.preheader477.loopexit

.lr.ph566.epil:                                   ; preds = %.preheader479.epil
  %457 = getelementptr inbounds ptr, ptr %329, i64 %indvar.unr
  %458 = load ptr, ptr %457, align 8, !tbaa !72
  call void @llvm.memset.p0.i64(ptr align 8 %458, i8 0, i64 %331, i1 false), !tbaa !49
  br label %.preheader477.loopexit

.preheader477.loopexit:                           ; preds = %.preheader479.epil, %.lr.ph566.epil, %.preheader477.loopexit.unr-lcssa
  %.pre831.pre = load i32, ptr %320, align 4
  br label %.preheader477

.preheader477:                                    ; preds = %.preheader477.loopexit, %.preheader480
  %.pre831 = phi i32 [ %.pre831.pre, %.preheader477.loopexit ], [ %321, %.preheader480 ]
  %459 = icmp sgt i32 %319, 0
  br i1 %459, label %.lr.ph577, label %.preheader473

.lr.ph577:                                        ; preds = %.preheader477
  %460 = getelementptr inbounds i8, ptr %0, i64 1008
  %461 = getelementptr inbounds i8, ptr %0, i64 1000
  %462 = getelementptr inbounds i8, ptr %0, i64 1016
  %463 = getelementptr inbounds i8, ptr %0, i64 332
  %464 = getelementptr inbounds i8, ptr %0, i64 1024
  br label %483

.lr.ph566:                                        ; preds = %.preheader479
  %465 = getelementptr inbounds ptr, ptr %329, i64 %indvar
  %466 = load ptr, ptr %465, align 8, !tbaa !72
  call void @llvm.memset.p0.i64(ptr align 8 %466, i8 0, i64 %331, i1 false), !tbaa !49
  br label %._crit_edge567

._crit_edge567:                                   ; preds = %.lr.ph566, %.preheader479
  %indvar.next = or disjoint i64 %indvar, 1
  %467 = shl nuw nsw i64 %indvar.next, 3
  %468 = trunc i64 %indvar.next to i32
  %469 = xor i32 %468, -1
  %470 = add i32 %321, %469
  %471 = zext i32 %470 to i64
  %472 = shl nuw nsw i64 %471, 3
  %473 = add nuw nsw i64 %472, 8
  %474 = getelementptr inbounds ptr, ptr %324, i64 %indvar.next
  %475 = load ptr, ptr %474, align 8, !tbaa !72
  %scevgep716.1 = getelementptr i8, ptr %475, i64 %467
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(1) %scevgep716.1, i8 0, i64 %473, i1 false), !tbaa !49
  br i1 %327, label %.lr.ph566.1, label %._crit_edge567.1

.lr.ph566.1:                                      ; preds = %._crit_edge567
  %476 = getelementptr inbounds ptr, ptr %329, i64 %indvar.next
  %477 = load ptr, ptr %476, align 8, !tbaa !72
  call void @llvm.memset.p0.i64(ptr align 8 %477, i8 0, i64 %331, i1 false), !tbaa !49
  br label %._crit_edge567.1

._crit_edge567.1:                                 ; preds = %.lr.ph566.1, %._crit_edge567
  %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 %.preheader477.loopexit.unr-lcssa, label %.preheader479, !llvm.loop !83

.preheader473:                                    ; preds = %.loopexit476, %.preheader477
  %478 = phi i32 [ %.pre831, %.preheader477 ], [ %542, %.loopexit476 ]
  %479 = icmp sgt i32 %478, 0
  br i1 %479, label %.lr.ph582, label %._crit_edge594

.lr.ph582:                                        ; preds = %.preheader473
  %480 = getelementptr inbounds i8, ptr %0, i64 1016
  %481 = load ptr, ptr %480, align 8
  %482 = zext nneg i32 %478 to i64
  %wide.trip.count748 = zext nneg i32 %478 to i64
  br label %550

483:                                              ; preds = %.lr.ph577, %.loopexit476
  %484 = phi i32 [ %319, %.lr.ph577 ], [ %541, %.loopexit476 ]
  %485 = phi i32 [ %.pre831, %.lr.ph577 ], [ %542, %.loopexit476 ]
  %indvars.iv735 = phi i64 [ 0, %.lr.ph577 ], [ %indvars.iv.next736, %.loopexit476 ]
  %486 = load ptr, ptr %460, align 8, !tbaa !47
  %487 = getelementptr inbounds double, ptr %486, i64 %indvars.iv735
  %488 = load double, ptr %487, align 8, !tbaa !49
  %489 = fcmp ogt double %488, 1.000000e-13
  %490 = icmp sgt i32 %485, 0
  %or.cond649 = select i1 %489, i1 %490, i1 false
  br i1 %or.cond649, label %.lr.ph574.preheader, label %.loopexit476

.lr.ph574.preheader:                              ; preds = %483
  %491 = trunc nuw nsw i64 %indvars.iv735 to i32
  br label %.lr.ph574

.lr.ph574:                                        ; preds = %.lr.ph574.preheader, %._crit_edge572
  %indvars.iv726 = phi i64 [ 0, %.lr.ph574.preheader ], [ %indvars.iv.next727, %._crit_edge572 ]
  %492 = phi i32 [ %485, %.lr.ph574.preheader ], [ %538, %._crit_edge572 ]
  %493 = add nuw i64 %indvars.iv726, 1
  %494 = load ptr, ptr %461, align 8, !tbaa !69
  %495 = getelementptr inbounds ptr, ptr %494, i64 %indvars.iv735
  %496 = load ptr, ptr %495, align 8, !tbaa !72
  %497 = getelementptr inbounds double, ptr %496, i64 %indvars.iv726
  %498 = load double, ptr %497, align 8, !tbaa !49
  %499 = fmul double %488, %498
  %500 = load ptr, ptr %462, align 8, !tbaa !70
  %501 = getelementptr inbounds ptr, ptr %500, i64 %indvars.iv726
  %502 = load ptr, ptr %501, align 8, !tbaa !72
  %503 = sext i32 %492 to i64
  %smax921 = call i64 @llvm.smax.i64(i64 %493, i64 %503)
  %504 = sub i64 %smax921, %indvars.iv726
  %min.iters.check924 = icmp ult i64 %504, 4
  br i1 %min.iters.check924, label %scalar.ph923.preheader, label %vector.memcheck

scalar.ph923.preheader:                           ; preds = %middle.block922, %vector.memcheck, %.lr.ph574
  %indvars.iv728.ph = phi i64 [ %indvars.iv726, %vector.memcheck ], [ %indvars.iv726, %.lr.ph574 ], [ %ind.end, %middle.block922 ]
  br label %scalar.ph923

vector.memcheck:                                  ; preds = %.lr.ph574
  %505 = xor i64 %indvars.iv726, -1
  %506 = add nuw i64 %indvars.iv726, 1
  %507 = shl nuw nsw i64 %indvars.iv726, 3
  %508 = add nuw i64 %507, 8
  %scevgep917 = getelementptr i8, ptr %502, i64 %507
  %smax = call i64 @llvm.smax.i64(i64 %506, i64 %503)
  %509 = add i64 %smax, %505
  %510 = shl nsw i64 %509, 3
  %511 = add i64 %508, %510
  %scevgep918 = getelementptr i8, ptr %502, i64 %511
  %scevgep919 = getelementptr i8, ptr %496, i64 %507
  %scevgep920 = getelementptr i8, ptr %496, i64 %511
  %bound0 = icmp ult ptr %scevgep917, %scevgep920
  %bound1 = icmp ult ptr %scevgep919, %scevgep918
  %found.conflict = and i1 %bound0, %bound1
  br i1 %found.conflict, label %scalar.ph923.preheader, label %vector.ph925

vector.ph925:                                     ; preds = %vector.memcheck
  %n.vec927 = and i64 %504, -4
  %ind.end = add i64 %indvars.iv726, %n.vec927
  %broadcast.splatinsert935 = insertelement <2 x double> poison, double %499, i64 0
  %broadcast.splat936 = shufflevector <2 x double> %broadcast.splatinsert935, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body929

vector.body929:                                   ; preds = %vector.body929, %vector.ph925
  %index930 = phi i64 [ 0, %vector.ph925 ], [ %index.next937, %vector.body929 ]
  %offset.idx = add i64 %indvars.iv726, %index930
  %512 = getelementptr inbounds double, ptr %496, i64 %offset.idx
  %513 = getelementptr inbounds i8, ptr %512, i64 16
  %wide.load931 = load <2 x double>, ptr %512, align 8, !tbaa !49, !alias.scope !84
  %wide.load932 = load <2 x double>, ptr %513, align 8, !tbaa !49, !alias.scope !84
  %514 = getelementptr inbounds double, ptr %502, i64 %offset.idx
  %515 = getelementptr inbounds i8, ptr %514, i64 16
  %wide.load933 = load <2 x double>, ptr %514, align 8, !tbaa !49, !alias.scope !87, !noalias !84
  %wide.load934 = load <2 x double>, ptr %515, align 8, !tbaa !49, !alias.scope !87, !noalias !84
  %516 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat936, <2 x double> %wide.load931, <2 x double> %wide.load933)
  %517 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat936, <2 x double> %wide.load932, <2 x double> %wide.load934)
  store <2 x double> %516, ptr %514, align 8, !tbaa !49, !alias.scope !87, !noalias !84
  store <2 x double> %517, ptr %515, align 8, !tbaa !49, !alias.scope !87, !noalias !84
  %index.next937 = add nuw i64 %index930, 4
  %518 = icmp eq i64 %index.next937, %n.vec927
  br i1 %518, label %middle.block922, label %vector.body929, !llvm.loop !89

middle.block922:                                  ; preds = %vector.body929
  %cmp.n938 = icmp eq i64 %504, %n.vec927
  br i1 %cmp.n938, label %.preheader474, label %scalar.ph923.preheader

.preheader474:                                    ; preds = %scalar.ph923, %middle.block922
  %519 = load i32, ptr %463, align 4, !tbaa !71
  %520 = icmp sgt i32 %519, 0
  br i1 %520, label %.lr.ph571, label %._crit_edge572

scalar.ph923:                                     ; preds = %scalar.ph923.preheader, %scalar.ph923
  %indvars.iv728 = phi i64 [ %indvars.iv.next729, %scalar.ph923 ], [ %indvars.iv728.ph, %scalar.ph923.preheader ]
  %521 = getelementptr inbounds double, ptr %496, i64 %indvars.iv728
  %522 = load double, ptr %521, align 8, !tbaa !49
  %523 = getelementptr inbounds double, ptr %502, i64 %indvars.iv728
  %524 = load double, ptr %523, align 8, !tbaa !49
  %525 = call double @llvm.fmuladd.f64(double %499, double %522, double %524)
  store double %525, ptr %523, align 8, !tbaa !49
  %indvars.iv.next729 = add nuw nsw i64 %indvars.iv728, 1
  %526 = icmp slt i64 %indvars.iv.next729, %503
  br i1 %526, label %scalar.ph923, label %.preheader474, !llvm.loop !90

.lr.ph571:                                        ; preds = %.preheader474, %.lr.ph571
  %indvars.iv731 = phi i64 [ %indvars.iv.next732, %.lr.ph571 ], [ 0, %.preheader474 ]
  %527 = trunc nuw nsw i64 %indvars.iv731 to i32
  %528 = call noundef double @_ZNK7SGTELIB6Matrix3getEii(ptr noundef nonnull align 8 dereferenceable(56) %21, i32 noundef %491, i32 noundef %527)
  %529 = load ptr, ptr %464, align 8, !tbaa !91
  %530 = getelementptr inbounds ptr, ptr %529, i64 %indvars.iv726
  %531 = load ptr, ptr %530, align 8, !tbaa !72
  %532 = getelementptr inbounds double, ptr %531, i64 %indvars.iv731
  %533 = load double, ptr %532, align 8, !tbaa !49
  %534 = call double @llvm.fmuladd.f64(double %499, double %528, double %533)
  store double %534, ptr %532, align 8, !tbaa !49
  %indvars.iv.next732 = add nuw nsw i64 %indvars.iv731, 1
  %535 = load i32, ptr %463, align 4, !tbaa !71
  %536 = sext i32 %535 to i64
  %537 = icmp slt i64 %indvars.iv.next732, %536
  br i1 %537, label %.lr.ph571, label %._crit_edge572, !llvm.loop !92

._crit_edge572:                                   ; preds = %.lr.ph571, %.preheader474
  %indvars.iv.next727 = add nuw nsw i64 %indvars.iv726, 1
  %538 = load i32, ptr %320, align 4
  %539 = sext i32 %538 to i64
  %540 = icmp slt i64 %indvars.iv.next727, %539
  br i1 %540, label %.lr.ph574, label %.loopexit476.loopexit, !llvm.loop !93

.loopexit476.loopexit:                            ; preds = %._crit_edge572
  %.pre830 = load i32, ptr %51, align 8, !tbaa !46
  br label %.loopexit476

.loopexit476:                                     ; preds = %.loopexit476.loopexit, %483
  %541 = phi i32 [ %.pre830, %.loopexit476.loopexit ], [ %484, %483 ]
  %542 = phi i32 [ %538, %.loopexit476.loopexit ], [ %485, %483 ]
  %indvars.iv.next736 = add nuw nsw i64 %indvars.iv735, 1
  %543 = sext i32 %541 to i64
  %544 = icmp slt i64 %indvars.iv.next736, %543
  br i1 %544, label %483, label %.preheader473, !llvm.loop !94

.loopexit472:                                     ; preds = %554, %550
  %indvars.iv.next739 = add nuw nsw i64 %indvars.iv738, 1
  %exitcond749.not = icmp eq i64 %indvars.iv.next746, %wide.trip.count748
  br i1 %exitcond749.not, label %.preheader471, label %550, !llvm.loop !95

.preheader471:                                    ; preds = %.loopexit472
  %.not856 = icmp eq i32 %478, 1
  br i1 %.not856, label %.preheader470, label %.lr.ph585

.lr.ph585:                                        ; preds = %.preheader471
  %545 = getelementptr inbounds i8, ptr %0, i64 1016
  %546 = load ptr, ptr %545, align 8, !tbaa !70
  %547 = add nsw i64 %wide.trip.count748, -1
  %548 = add nsw i64 %wide.trip.count748, -2
  %xtraiter1018 = and i64 %547, 3
  %549 = icmp ult i64 %548, 3
  br i1 %549, label %.preheader470.loopexit.unr-lcssa, label %.lr.ph585.new

.lr.ph585.new:                                    ; preds = %.lr.ph585
  %unroll_iter1020 = and i64 %547, -4
  br label %570

550:                                              ; preds = %.lr.ph582, %.loopexit472
  %indvars.iv745 = phi i64 [ 0, %.lr.ph582 ], [ %indvars.iv.next746, %.loopexit472 ]
  %indvars.iv738 = phi i64 [ 1, %.lr.ph582 ], [ %indvars.iv.next739, %.loopexit472 ]
  %indvars.iv.next746 = add nuw nsw i64 %indvars.iv745, 1
  %551 = icmp ult i64 %indvars.iv.next746, %482
  br i1 %551, label %.lr.ph580, label %.loopexit472

.lr.ph580:                                        ; preds = %550
  %552 = getelementptr inbounds ptr, ptr %481, i64 %indvars.iv745
  %553 = load ptr, ptr %552, align 8, !tbaa !72
  br label %554

554:                                              ; preds = %.lr.ph580, %554
  %indvars.iv740 = phi i64 [ %indvars.iv738, %.lr.ph580 ], [ %indvars.iv.next741, %554 ]
  %555 = getelementptr inbounds double, ptr %553, i64 %indvars.iv740
  %556 = load double, ptr %555, align 8, !tbaa !49
  %557 = getelementptr inbounds ptr, ptr %481, i64 %indvars.iv740
  %558 = load ptr, ptr %557, align 8, !tbaa !72
  %559 = getelementptr inbounds double, ptr %558, i64 %indvars.iv745
  store double %556, ptr %559, align 8, !tbaa !49
  %indvars.iv.next741 = add nuw nsw i64 %indvars.iv740, 1
  %exitcond744.not = icmp eq i64 %indvars.iv.next741, %wide.trip.count748
  br i1 %exitcond744.not, label %.loopexit472, label %554, !llvm.loop !96

.preheader470.loopexit.unr-lcssa:                 ; preds = %570, %.lr.ph585
  %indvars.iv750.unr = phi i64 [ 1, %.lr.ph585 ], [ %indvars.iv.next751.3, %570 ]
  %lcmp.mod1019.not = icmp eq i64 %xtraiter1018, 0
  br i1 %lcmp.mod1019.not, label %.preheader470, label %.epil.preheader

.epil.preheader:                                  ; preds = %.preheader470.loopexit.unr-lcssa, %.epil.preheader
  %indvars.iv750.epil = phi i64 [ %indvars.iv.next751.epil, %.epil.preheader ], [ %indvars.iv750.unr, %.preheader470.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.epil.preheader ], [ 0, %.preheader470.loopexit.unr-lcssa ]
  %560 = getelementptr inbounds ptr, ptr %546, i64 %indvars.iv750.epil
  %561 = load ptr, ptr %560, align 8, !tbaa !72
  %562 = getelementptr inbounds double, ptr %561, i64 %indvars.iv750.epil
  %563 = load double, ptr %562, align 8, !tbaa !49
  %564 = fadd double %309, %563
  store double %564, ptr %562, align 8, !tbaa !49
  %indvars.iv.next751.epil = add nuw nsw i64 %indvars.iv750.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter1018
  br i1 %epil.iter.cmp.not, label %.preheader470, label %.epil.preheader, !llvm.loop !97

.preheader470:                                    ; preds = %.preheader470.loopexit.unr-lcssa, %.epil.preheader, %.preheader471
  br i1 %479, label %.preheader469.lr.ph, label %._crit_edge594

.preheader469.lr.ph:                              ; preds = %.preheader470
  %565 = getelementptr inbounds i8, ptr %0, i64 1016
  %566 = load ptr, ptr %565, align 8
  %567 = getelementptr inbounds i8, ptr %0, i64 1040
  %568 = load ptr, ptr %567, align 8
  %wide.trip.count763 = zext nneg i32 %478 to i64
  %xtraiter1023 = and i64 %wide.trip.count748, 3
  %569 = icmp ult i32 %478, 4
  %unroll_iter1027 = and i64 %wide.trip.count748, 2147483644
  %lcmp.mod1025.not = icmp eq i64 %xtraiter1023, 0
  br label %.lr.ph588

570:                                              ; preds = %570, %.lr.ph585.new
  %indvars.iv750 = phi i64 [ 1, %.lr.ph585.new ], [ %indvars.iv.next751.3, %570 ]
  %niter1021 = phi i64 [ 0, %.lr.ph585.new ], [ %niter1021.next.3, %570 ]
  %571 = getelementptr inbounds ptr, ptr %546, i64 %indvars.iv750
  %572 = load ptr, ptr %571, align 8, !tbaa !72
  %573 = getelementptr inbounds double, ptr %572, i64 %indvars.iv750
  %574 = load double, ptr %573, align 8, !tbaa !49
  %575 = fadd double %309, %574
  store double %575, ptr %573, align 8, !tbaa !49
  %indvars.iv.next751 = add nuw nsw i64 %indvars.iv750, 1
  %576 = getelementptr inbounds ptr, ptr %546, i64 %indvars.iv.next751
  %577 = load ptr, ptr %576, align 8, !tbaa !72
  %578 = getelementptr inbounds double, ptr %577, i64 %indvars.iv.next751
  %579 = load double, ptr %578, align 8, !tbaa !49
  %580 = fadd double %309, %579
  store double %580, ptr %578, align 8, !tbaa !49
  %indvars.iv.next751.1 = add nuw nsw i64 %indvars.iv750, 2
  %581 = getelementptr inbounds ptr, ptr %546, i64 %indvars.iv.next751.1
  %582 = load ptr, ptr %581, align 8, !tbaa !72
  %583 = getelementptr inbounds double, ptr %582, i64 %indvars.iv.next751.1
  %584 = load double, ptr %583, align 8, !tbaa !49
  %585 = fadd double %309, %584
  store double %585, ptr %583, align 8, !tbaa !49
  %indvars.iv.next751.2 = add nuw nsw i64 %indvars.iv750, 3
  %586 = getelementptr inbounds ptr, ptr %546, i64 %indvars.iv.next751.2
  %587 = load ptr, ptr %586, align 8, !tbaa !72
  %588 = getelementptr inbounds double, ptr %587, i64 %indvars.iv.next751.2
  %589 = load double, ptr %588, align 8, !tbaa !49
  %590 = fadd double %309, %589
  store double %590, ptr %588, align 8, !tbaa !49
  %indvars.iv.next751.3 = add nuw nsw i64 %indvars.iv750, 4
  %niter1021.next.3 = add i64 %niter1021, 4
  %niter1021.ncmp.3 = icmp eq i64 %niter1021.next.3, %unroll_iter1020
  br i1 %niter1021.ncmp.3, label %.preheader470.loopexit.unr-lcssa, label %570, !llvm.loop !99

.lr.ph588:                                        ; preds = %._crit_edge589, %.preheader469.lr.ph
  %indvars.iv760 = phi i64 [ 0, %.preheader469.lr.ph ], [ %indvars.iv.next761, %._crit_edge589 ]
  %.0367592 = phi double [ -1.000000e+00, %.preheader469.lr.ph ], [ 0.000000e+00, %._crit_edge589 ]
  %.0369591 = phi double [ 0.000000e+00, %.preheader469.lr.ph ], [ %618, %._crit_edge589 ]
  %591 = getelementptr inbounds ptr, ptr %566, i64 %indvars.iv760
  %592 = load ptr, ptr %591, align 8, !tbaa !72
  br i1 %569, label %._crit_edge589.unr-lcssa, label %.lr.ph588.new

.lr.ph588.new:                                    ; preds = %.lr.ph588, %.lr.ph588.new
  %indvars.iv755 = phi i64 [ %indvars.iv.next756.3, %.lr.ph588.new ], [ 0, %.lr.ph588 ]
  %.1368586 = phi double [ %612, %.lr.ph588.new ], [ %.0367592, %.lr.ph588 ]
  %niter1028 = phi i64 [ %niter1028.next.3, %.lr.ph588.new ], [ 0, %.lr.ph588 ]
  %593 = getelementptr inbounds double, ptr %592, i64 %indvars.iv755
  %594 = load double, ptr %593, align 8, !tbaa !49
  %595 = getelementptr inbounds double, ptr %568, i64 %indvars.iv755
  %596 = load double, ptr %595, align 8, !tbaa !49
  %597 = call double @llvm.fmuladd.f64(double %594, double %596, double %.1368586)
  %indvars.iv.next756 = or disjoint i64 %indvars.iv755, 1
  %598 = getelementptr inbounds double, ptr %592, i64 %indvars.iv.next756
  %599 = load double, ptr %598, align 8, !tbaa !49
  %600 = getelementptr inbounds double, ptr %568, i64 %indvars.iv.next756
  %601 = load double, ptr %600, align 8, !tbaa !49
  %602 = call double @llvm.fmuladd.f64(double %599, double %601, double %597)
  %indvars.iv.next756.1 = or disjoint i64 %indvars.iv755, 2
  %603 = getelementptr inbounds double, ptr %592, i64 %indvars.iv.next756.1
  %604 = load double, ptr %603, align 8, !tbaa !49
  %605 = getelementptr inbounds double, ptr %568, i64 %indvars.iv.next756.1
  %606 = load double, ptr %605, align 8, !tbaa !49
  %607 = call double @llvm.fmuladd.f64(double %604, double %606, double %602)
  %indvars.iv.next756.2 = or disjoint i64 %indvars.iv755, 3
  %608 = getelementptr inbounds double, ptr %592, i64 %indvars.iv.next756.2
  %609 = load double, ptr %608, align 8, !tbaa !49
  %610 = getelementptr inbounds double, ptr %568, i64 %indvars.iv.next756.2
  %611 = load double, ptr %610, align 8, !tbaa !49
  %612 = call double @llvm.fmuladd.f64(double %609, double %611, double %607)
  %indvars.iv.next756.3 = add nuw nsw i64 %indvars.iv755, 4
  %niter1028.next.3 = add i64 %niter1028, 4
  %niter1028.ncmp.3 = icmp eq i64 %niter1028.next.3, %unroll_iter1027
  br i1 %niter1028.ncmp.3, label %._crit_edge589.unr-lcssa, label %.lr.ph588.new, !llvm.loop !100

._crit_edge589.unr-lcssa:                         ; preds = %.lr.ph588.new, %.lr.ph588
  %.lcssa1003.ph = phi double [ poison, %.lr.ph588 ], [ %612, %.lr.ph588.new ]
  %indvars.iv755.unr = phi i64 [ 0, %.lr.ph588 ], [ %indvars.iv.next756.3, %.lr.ph588.new ]
  %.1368586.unr = phi double [ %.0367592, %.lr.ph588 ], [ %612, %.lr.ph588.new ]
  br i1 %lcmp.mod1025.not, label %._crit_edge589, label %.epil.preheader1022

.epil.preheader1022:                              ; preds = %._crit_edge589.unr-lcssa, %.epil.preheader1022
  %indvars.iv755.epil = phi i64 [ %indvars.iv.next756.epil, %.epil.preheader1022 ], [ %indvars.iv755.unr, %._crit_edge589.unr-lcssa ]
  %.1368586.epil = phi double [ %617, %.epil.preheader1022 ], [ %.1368586.unr, %._crit_edge589.unr-lcssa ]
  %epil.iter1024 = phi i64 [ %epil.iter1024.next, %.epil.preheader1022 ], [ 0, %._crit_edge589.unr-lcssa ]
  %613 = getelementptr inbounds double, ptr %592, i64 %indvars.iv755.epil
  %614 = load double, ptr %613, align 8, !tbaa !49
  %615 = getelementptr inbounds double, ptr %568, i64 %indvars.iv755.epil
  %616 = load double, ptr %615, align 8, !tbaa !49
  %617 = call double @llvm.fmuladd.f64(double %614, double %616, double %.1368586.epil)
  %indvars.iv.next756.epil = add nuw nsw i64 %indvars.iv755.epil, 1
  %epil.iter1024.next = add i64 %epil.iter1024, 1
  %epil.iter1024.cmp.not = icmp eq i64 %epil.iter1024.next, %xtraiter1023
  br i1 %epil.iter1024.cmp.not, label %._crit_edge589, label %.epil.preheader1022, !llvm.loop !101

._crit_edge589:                                   ; preds = %.epil.preheader1022, %._crit_edge589.unr-lcssa
  %.lcssa1003 = phi double [ %.lcssa1003.ph, %._crit_edge589.unr-lcssa ], [ %617, %.epil.preheader1022 ]
  %618 = call double @llvm.fmuladd.f64(double %.lcssa1003, double %.lcssa1003, double %.0369591)
  %indvars.iv.next761 = add nuw nsw i64 %indvars.iv760, 1
  %exitcond764.not = icmp eq i64 %indvars.iv.next761, %wide.trip.count763
  br i1 %exitcond764.not, label %._crit_edge594, label %.lr.ph588, !llvm.loop !102

._crit_edge594:                                   ; preds = %._crit_edge589, %.preheader473, %.preheader470
  %.0369.lcssa = phi double [ 0.000000e+00, %.preheader470 ], [ 0.000000e+00, %.preheader473 ], [ %618, %._crit_edge589 ]
  %619 = call double @sqrt(double noundef %.0369.lcssa) #13
  %620 = fcmp uge double %619, 1.000000e-04
  br i1 %620, label %.critedge448, label %621

621:                                              ; preds = %._crit_edge594
  %622 = load i32, ptr %320, align 4, !tbaa !52
  %623 = sext i32 %622 to i64
  %624 = icmp slt i32 %622, 0
  %625 = shl nsw i64 %623, 3
  %626 = select i1 %624, i64 -1, i64 %625
  %627 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %626) #15
          to label %628 unwind label %673

628:                                              ; preds = %621
  %629 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %626) #15
          to label %630 unwind label %675

630:                                              ; preds = %628
  %631 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %626) #15
          to label %.preheader468 unwind label %677

.preheader468:                                    ; preds = %630
  %632 = icmp sgt i32 %622, 0
  br i1 %632, label %.preheader467.lr.ph, label %._crit_edge632

.preheader467.lr.ph:                              ; preds = %.preheader468
  %633 = getelementptr inbounds i8, ptr %0, i64 1016
  %634 = load ptr, ptr %633, align 8
  %635 = getelementptr inbounds i8, ptr %0, i64 1040
  %636 = load ptr, ptr %635, align 8
  %wide.trip.count773 = zext nneg i32 %622 to i64
  %xtraiter1030 = and i64 %wide.trip.count773, 3
  %637 = icmp ult i32 %622, 4
  %unroll_iter1034 = and i64 %wide.trip.count773, 2147483644
  %lcmp.mod1032.not = icmp eq i64 %xtraiter1030, 0
  br label %.lr.ph598

.lr.ph598:                                        ; preds = %._crit_edge599, %.preheader467.lr.ph
  %indvars.iv770 = phi i64 [ 0, %.preheader467.lr.ph ], [ %indvars.iv.next771, %._crit_edge599 ]
  %.0324603 = phi double [ 0.000000e+00, %.preheader467.lr.ph ], [ %687, %._crit_edge599 ]
  %.0381601 = phi double [ 1.000000e+00, %.preheader467.lr.ph ], [ 0.000000e+00, %._crit_edge599 ]
  %638 = getelementptr inbounds ptr, ptr %634, i64 %indvars.iv770
  %639 = load ptr, ptr %638, align 8, !tbaa !72
  br i1 %637, label %._crit_edge599.unr-lcssa, label %.lr.ph598.new

.preheader466:                                    ; preds = %._crit_edge599
  %640 = fcmp ogt double %687, 0x3D719799812DEA11
  br i1 %640, label %.preheader465.lr.ph, label %._crit_edge632

.preheader465.lr.ph:                              ; preds = %.preheader466
  %641 = getelementptr inbounds i8, ptr %0, i64 1016
  %642 = getelementptr inbounds i8, ptr %0, i64 1040
  %643 = load ptr, ptr %642, align 8
  %wide.trip.count783 = zext nneg i32 %622 to i64
  %wide.trip.count793 = zext nneg i32 %622 to i64
  %wide.trip.count798 = zext nneg i32 %622 to i64
  %wide.trip.count808 = zext nneg i32 %622 to i64
  %644 = shl nuw nsw i64 %wide.trip.count773, 3
  %scevgep974 = getelementptr i8, ptr %643, i64 %644
  %scevgep975 = getelementptr i8, ptr %629, i64 %644
  %xtraiter1037 = and i64 %wide.trip.count773, 3
  %645 = icmp ult i32 %622, 4
  %unroll_iter1041 = and i64 %wide.trip.count773, 2147483644
  %lcmp.mod1039.not = icmp eq i64 %xtraiter1037, 0
  %xtraiter1043 = and i64 %wide.trip.count773, 3
  %646 = icmp ult i32 %622, 4
  %unroll_iter1047 = and i64 %wide.trip.count773, 2147483644
  %lcmp.mod1045.not = icmp eq i64 %xtraiter1043, 0
  %min.iters.check981 = icmp ult i32 %622, 4
  %bound0976 = icmp ult ptr %643, %scevgep975
  %bound1977 = icmp ult ptr %629, %scevgep974
  %found.conflict978 = and i1 %bound0976, %bound1977
  %n.vec984 = and i64 %wide.trip.count773, 2147483644
  %cmp.n995 = icmp eq i64 %n.vec984, %wide.trip.count773
  %xtraiter1049 = and i64 %wide.trip.count773, 1
  %lcmp.mod1050.not = icmp eq i64 %xtraiter1049, 0
  %647 = add nsw i64 %wide.trip.count773, -1
  %min.iters.check958 = icmp ult i32 %622, 4
  %n.vec961 = and i64 %wide.trip.count773, 2147483644
  %cmp.n972 = icmp eq i64 %n.vec961, %wide.trip.count773
  %xtraiter1051 = and i64 %wide.trip.count773, 3
  %648 = icmp ult i32 %622, 4
  %unroll_iter1055 = and i64 %wide.trip.count773, 2147483644
  %lcmp.mod1053.not = icmp eq i64 %xtraiter1051, 0
  %min.iters.check941 = icmp ult i32 %622, 4
  %n.vec944 = and i64 %wide.trip.count773, 2147483644
  %cmp.n955 = icmp eq i64 %n.vec944, %wide.trip.count773
  br label %.preheader465

.lr.ph598.new:                                    ; preds = %.lr.ph598, %.lr.ph598.new
  %indvars.iv765 = phi i64 [ %indvars.iv.next766.3, %.lr.ph598.new ], [ 0, %.lr.ph598 ]
  %.1382596 = phi double [ %672, %.lr.ph598.new ], [ %.0381601, %.lr.ph598 ]
  %niter1035 = phi i64 [ %niter1035.next.3, %.lr.ph598.new ], [ 0, %.lr.ph598 ]
  %649 = getelementptr inbounds double, ptr %639, i64 %indvars.iv765
  %650 = load double, ptr %649, align 8, !tbaa !49
  %651 = getelementptr inbounds double, ptr %636, i64 %indvars.iv765
  %652 = load double, ptr %651, align 8, !tbaa !49
  %653 = fneg double %650
  %654 = call double @llvm.fmuladd.f64(double %653, double %652, double %.1382596)
  %indvars.iv.next766 = or disjoint i64 %indvars.iv765, 1
  %655 = getelementptr inbounds double, ptr %639, i64 %indvars.iv.next766
  %656 = load double, ptr %655, align 8, !tbaa !49
  %657 = getelementptr inbounds double, ptr %636, i64 %indvars.iv.next766
  %658 = load double, ptr %657, align 8, !tbaa !49
  %659 = fneg double %656
  %660 = call double @llvm.fmuladd.f64(double %659, double %658, double %654)
  %indvars.iv.next766.1 = or disjoint i64 %indvars.iv765, 2
  %661 = getelementptr inbounds double, ptr %639, i64 %indvars.iv.next766.1
  %662 = load double, ptr %661, align 8, !tbaa !49
  %663 = getelementptr inbounds double, ptr %636, i64 %indvars.iv.next766.1
  %664 = load double, ptr %663, align 8, !tbaa !49
  %665 = fneg double %662
  %666 = call double @llvm.fmuladd.f64(double %665, double %664, double %660)
  %indvars.iv.next766.2 = or disjoint i64 %indvars.iv765, 3
  %667 = getelementptr inbounds double, ptr %639, i64 %indvars.iv.next766.2
  %668 = load double, ptr %667, align 8, !tbaa !49
  %669 = getelementptr inbounds double, ptr %636, i64 %indvars.iv.next766.2
  %670 = load double, ptr %669, align 8, !tbaa !49
  %671 = fneg double %668
  %672 = call double @llvm.fmuladd.f64(double %671, double %670, double %666)
  %indvars.iv.next766.3 = add nuw nsw i64 %indvars.iv765, 4
  %niter1035.next.3 = add i64 %niter1035, 4
  %niter1035.ncmp.3 = icmp eq i64 %niter1035.next.3, %unroll_iter1034
  br i1 %niter1035.ncmp.3, label %._crit_edge599.unr-lcssa, label %.lr.ph598.new, !llvm.loop !103

673:                                              ; preds = %621
  %674 = landingpad { ptr, i32 }
          cleanup
  br label %932

675:                                              ; preds = %628
  %676 = landingpad { ptr, i32 }
          cleanup
  br label %932

677:                                              ; preds = %630
  %678 = landingpad { ptr, i32 }
          cleanup
  br label %932

._crit_edge599.unr-lcssa:                         ; preds = %.lr.ph598.new, %.lr.ph598
  %.lcssa1001.ph = phi double [ poison, %.lr.ph598 ], [ %672, %.lr.ph598.new ]
  %indvars.iv765.unr = phi i64 [ 0, %.lr.ph598 ], [ %indvars.iv.next766.3, %.lr.ph598.new ]
  %.1382596.unr = phi double [ %.0381601, %.lr.ph598 ], [ %672, %.lr.ph598.new ]
  br i1 %lcmp.mod1032.not, label %._crit_edge599, label %.epil.preheader1029

.epil.preheader1029:                              ; preds = %._crit_edge599.unr-lcssa, %.epil.preheader1029
  %indvars.iv765.epil = phi i64 [ %indvars.iv.next766.epil, %.epil.preheader1029 ], [ %indvars.iv765.unr, %._crit_edge599.unr-lcssa ]
  %.1382596.epil = phi double [ %684, %.epil.preheader1029 ], [ %.1382596.unr, %._crit_edge599.unr-lcssa ]
  %epil.iter1031 = phi i64 [ %epil.iter1031.next, %.epil.preheader1029 ], [ 0, %._crit_edge599.unr-lcssa ]
  %679 = getelementptr inbounds double, ptr %639, i64 %indvars.iv765.epil
  %680 = load double, ptr %679, align 8, !tbaa !49
  %681 = getelementptr inbounds double, ptr %636, i64 %indvars.iv765.epil
  %682 = load double, ptr %681, align 8, !tbaa !49
  %683 = fneg double %680
  %684 = call double @llvm.fmuladd.f64(double %683, double %682, double %.1382596.epil)
  %indvars.iv.next766.epil = add nuw nsw i64 %indvars.iv765.epil, 1
  %epil.iter1031.next = add i64 %epil.iter1031, 1
  %epil.iter1031.cmp.not = icmp eq i64 %epil.iter1031.next, %xtraiter1030
  br i1 %epil.iter1031.cmp.not, label %._crit_edge599, label %.epil.preheader1029, !llvm.loop !104

._crit_edge599:                                   ; preds = %.epil.preheader1029, %._crit_edge599.unr-lcssa
  %.lcssa1001 = phi double [ %.lcssa1001.ph, %._crit_edge599.unr-lcssa ], [ %684, %.epil.preheader1029 ]
  %685 = getelementptr inbounds double, ptr %627, i64 %indvars.iv770
  store double %.lcssa1001, ptr %685, align 8, !tbaa !49
  %686 = getelementptr inbounds double, ptr %629, i64 %indvars.iv770
  store double %.lcssa1001, ptr %686, align 8, !tbaa !49
  %687 = call double @llvm.fmuladd.f64(double %.lcssa1001, double %.lcssa1001, double %.0324603)
  %indvars.iv.next771 = add nuw nsw i64 %indvars.iv770, 1
  %exitcond774.not = icmp eq i64 %indvars.iv.next771, %wide.trip.count773
  br i1 %exitcond774.not, label %.preheader466, label %.lr.ph598, !llvm.loop !105

.preheader465:                                    ; preds = %.preheader465.lr.ph, %._crit_edge629
  %.1325631 = phi double [ %687, %.preheader465.lr.ph ], [ %.lcssa1000, %._crit_edge629 ]
  %.0370630 = phi i32 [ 0, %.preheader465.lr.ph ], [ %812, %._crit_edge629 ]
  br i1 %632, label %.preheader461.lr.ph, label %._crit_edge632

.preheader461.lr.ph:                              ; preds = %.preheader465
  %688 = load ptr, ptr %641, align 8
  br label %.preheader461.us

.preheader461.us:                                 ; preds = %._crit_edge608.us, %.preheader461.lr.ph
  %indvars.iv780 = phi i64 [ %indvars.iv.next781, %._crit_edge608.us ], [ 0, %.preheader461.lr.ph ]
  %689 = getelementptr inbounds ptr, ptr %688, i64 %indvars.iv780
  %690 = load ptr, ptr %689, align 8, !tbaa !72
  br i1 %645, label %._crit_edge608.us.unr-lcssa, label %.preheader461.us.new

.preheader461.us.new:                             ; preds = %.preheader461.us, %.preheader461.us.new
  %indvars.iv775 = phi i64 [ %indvars.iv.next776.3, %.preheader461.us.new ], [ 0, %.preheader461.us ]
  %.2383605.us = phi double [ %710, %.preheader461.us.new ], [ 0.000000e+00, %.preheader461.us ]
  %niter1042 = phi i64 [ %niter1042.next.3, %.preheader461.us.new ], [ 0, %.preheader461.us ]
  %691 = getelementptr inbounds double, ptr %690, i64 %indvars.iv775
  %692 = load double, ptr %691, align 8, !tbaa !49
  %693 = getelementptr inbounds double, ptr %629, i64 %indvars.iv775
  %694 = load double, ptr %693, align 8, !tbaa !49
  %695 = call double @llvm.fmuladd.f64(double %692, double %694, double %.2383605.us)
  %indvars.iv.next776 = or disjoint i64 %indvars.iv775, 1
  %696 = getelementptr inbounds double, ptr %690, i64 %indvars.iv.next776
  %697 = load double, ptr %696, align 8, !tbaa !49
  %698 = getelementptr inbounds double, ptr %629, i64 %indvars.iv.next776
  %699 = load double, ptr %698, align 8, !tbaa !49
  %700 = call double @llvm.fmuladd.f64(double %697, double %699, double %695)
  %indvars.iv.next776.1 = or disjoint i64 %indvars.iv775, 2
  %701 = getelementptr inbounds double, ptr %690, i64 %indvars.iv.next776.1
  %702 = load double, ptr %701, align 8, !tbaa !49
  %703 = getelementptr inbounds double, ptr %629, i64 %indvars.iv.next776.1
  %704 = load double, ptr %703, align 8, !tbaa !49
  %705 = call double @llvm.fmuladd.f64(double %702, double %704, double %700)
  %indvars.iv.next776.2 = or disjoint i64 %indvars.iv775, 3
  %706 = getelementptr inbounds double, ptr %690, i64 %indvars.iv.next776.2
  %707 = load double, ptr %706, align 8, !tbaa !49
  %708 = getelementptr inbounds double, ptr %629, i64 %indvars.iv.next776.2
  %709 = load double, ptr %708, align 8, !tbaa !49
  %710 = call double @llvm.fmuladd.f64(double %707, double %709, double %705)
  %indvars.iv.next776.3 = add nuw nsw i64 %indvars.iv775, 4
  %niter1042.next.3 = add i64 %niter1042, 4
  %niter1042.ncmp.3 = icmp eq i64 %niter1042.next.3, %unroll_iter1041
  br i1 %niter1042.ncmp.3, label %._crit_edge608.us.unr-lcssa, label %.preheader461.us.new, !llvm.loop !106

._crit_edge608.us.unr-lcssa:                      ; preds = %.preheader461.us.new, %.preheader461.us
  %.lcssa998.ph = phi double [ poison, %.preheader461.us ], [ %710, %.preheader461.us.new ]
  %indvars.iv775.unr = phi i64 [ 0, %.preheader461.us ], [ %indvars.iv.next776.3, %.preheader461.us.new ]
  %.2383605.us.unr = phi double [ 0.000000e+00, %.preheader461.us ], [ %710, %.preheader461.us.new ]
  br i1 %lcmp.mod1039.not, label %._crit_edge608.us, label %.epil.preheader1036

.epil.preheader1036:                              ; preds = %._crit_edge608.us.unr-lcssa, %.epil.preheader1036
  %indvars.iv775.epil = phi i64 [ %indvars.iv.next776.epil, %.epil.preheader1036 ], [ %indvars.iv775.unr, %._crit_edge608.us.unr-lcssa ]
  %.2383605.us.epil = phi double [ %715, %.epil.preheader1036 ], [ %.2383605.us.unr, %._crit_edge608.us.unr-lcssa ]
  %epil.iter1038 = phi i64 [ %epil.iter1038.next, %.epil.preheader1036 ], [ 0, %._crit_edge608.us.unr-lcssa ]
  %711 = getelementptr inbounds double, ptr %690, i64 %indvars.iv775.epil
  %712 = load double, ptr %711, align 8, !tbaa !49
  %713 = getelementptr inbounds double, ptr %629, i64 %indvars.iv775.epil
  %714 = load double, ptr %713, align 8, !tbaa !49
  %715 = call double @llvm.fmuladd.f64(double %712, double %714, double %.2383605.us.epil)
  %indvars.iv.next776.epil = add nuw nsw i64 %indvars.iv775.epil, 1
  %epil.iter1038.next = add i64 %epil.iter1038, 1
  %epil.iter1038.cmp.not = icmp eq i64 %epil.iter1038.next, %xtraiter1037
  br i1 %epil.iter1038.cmp.not, label %._crit_edge608.us, label %.epil.preheader1036, !llvm.loop !107

._crit_edge608.us:                                ; preds = %.epil.preheader1036, %._crit_edge608.us.unr-lcssa
  %.lcssa998 = phi double [ %.lcssa998.ph, %._crit_edge608.us.unr-lcssa ], [ %715, %.epil.preheader1036 ]
  %716 = getelementptr inbounds double, ptr %631, i64 %indvars.iv780
  store double %.lcssa998, ptr %716, align 8, !tbaa !49
  %indvars.iv.next781 = add nuw nsw i64 %indvars.iv780, 1
  %exitcond784.not = icmp eq i64 %indvars.iv.next781, %wide.trip.count783
  br i1 %exitcond784.not, label %.preheader464, label %.preheader461.us, !llvm.loop !108

.preheader464:                                    ; preds = %._crit_edge608.us
  br i1 %632, label %.lr.ph613.preheader, label %._crit_edge632

.lr.ph613.preheader:                              ; preds = %.preheader464
  br i1 %646, label %._crit_edge614.unr-lcssa, label %.lr.ph613

.lr.ph613:                                        ; preds = %.lr.ph613.preheader, %.lr.ph613
  %indvars.iv785 = phi i64 [ %indvars.iv.next786.3, %.lr.ph613 ], [ 0, %.lr.ph613.preheader ]
  %.0288612 = phi double [ %736, %.lr.ph613 ], [ 0.000000e+00, %.lr.ph613.preheader ]
  %niter1048 = phi i64 [ %niter1048.next.3, %.lr.ph613 ], [ 0, %.lr.ph613.preheader ]
  %717 = getelementptr inbounds double, ptr %629, i64 %indvars.iv785
  %718 = load double, ptr %717, align 8, !tbaa !49
  %719 = getelementptr inbounds double, ptr %631, i64 %indvars.iv785
  %720 = load double, ptr %719, align 8, !tbaa !49
  %721 = call double @llvm.fmuladd.f64(double %718, double %720, double %.0288612)
  %indvars.iv.next786 = or disjoint i64 %indvars.iv785, 1
  %722 = getelementptr inbounds double, ptr %629, i64 %indvars.iv.next786
  %723 = load double, ptr %722, align 8, !tbaa !49
  %724 = getelementptr inbounds double, ptr %631, i64 %indvars.iv.next786
  %725 = load double, ptr %724, align 8, !tbaa !49
  %726 = call double @llvm.fmuladd.f64(double %723, double %725, double %721)
  %indvars.iv.next786.1 = or disjoint i64 %indvars.iv785, 2
  %727 = getelementptr inbounds double, ptr %629, i64 %indvars.iv.next786.1
  %728 = load double, ptr %727, align 8, !tbaa !49
  %729 = getelementptr inbounds double, ptr %631, i64 %indvars.iv.next786.1
  %730 = load double, ptr %729, align 8, !tbaa !49
  %731 = call double @llvm.fmuladd.f64(double %728, double %730, double %726)
  %indvars.iv.next786.2 = or disjoint i64 %indvars.iv785, 3
  %732 = getelementptr inbounds double, ptr %629, i64 %indvars.iv.next786.2
  %733 = load double, ptr %732, align 8, !tbaa !49
  %734 = getelementptr inbounds double, ptr %631, i64 %indvars.iv.next786.2
  %735 = load double, ptr %734, align 8, !tbaa !49
  %736 = call double @llvm.fmuladd.f64(double %733, double %735, double %731)
  %indvars.iv.next786.3 = add nuw nsw i64 %indvars.iv785, 4
  %niter1048.next.3 = add i64 %niter1048, 4
  %niter1048.ncmp.3 = icmp eq i64 %niter1048.next.3, %unroll_iter1047
  br i1 %niter1048.ncmp.3, label %._crit_edge614.unr-lcssa, label %.lr.ph613, !llvm.loop !109

._crit_edge614.unr-lcssa:                         ; preds = %.lr.ph613, %.lr.ph613.preheader
  %.lcssa999.ph = phi double [ poison, %.lr.ph613.preheader ], [ %736, %.lr.ph613 ]
  %indvars.iv785.unr = phi i64 [ 0, %.lr.ph613.preheader ], [ %indvars.iv.next786.3, %.lr.ph613 ]
  %.0288612.unr = phi double [ 0.000000e+00, %.lr.ph613.preheader ], [ %736, %.lr.ph613 ]
  br i1 %lcmp.mod1045.not, label %._crit_edge614, label %.lr.ph613.epil

.lr.ph613.epil:                                   ; preds = %._crit_edge614.unr-lcssa, %.lr.ph613.epil
  %indvars.iv785.epil = phi i64 [ %indvars.iv.next786.epil, %.lr.ph613.epil ], [ %indvars.iv785.unr, %._crit_edge614.unr-lcssa ]
  %.0288612.epil = phi double [ %741, %.lr.ph613.epil ], [ %.0288612.unr, %._crit_edge614.unr-lcssa ]
  %epil.iter1044 = phi i64 [ %epil.iter1044.next, %.lr.ph613.epil ], [ 0, %._crit_edge614.unr-lcssa ]
  %737 = getelementptr inbounds double, ptr %629, i64 %indvars.iv785.epil
  %738 = load double, ptr %737, align 8, !tbaa !49
  %739 = getelementptr inbounds double, ptr %631, i64 %indvars.iv785.epil
  %740 = load double, ptr %739, align 8, !tbaa !49
  %741 = call double @llvm.fmuladd.f64(double %738, double %740, double %.0288612.epil)
  %indvars.iv.next786.epil = add nuw nsw i64 %indvars.iv785.epil, 1
  %epil.iter1044.next = add i64 %epil.iter1044, 1
  %epil.iter1044.cmp.not = icmp eq i64 %epil.iter1044.next, %xtraiter1043
  br i1 %epil.iter1044.cmp.not, label %._crit_edge614, label %.lr.ph613.epil, !llvm.loop !110

._crit_edge614:                                   ; preds = %.lr.ph613.epil, %._crit_edge614.unr-lcssa
  %.lcssa999 = phi double [ %.lcssa999.ph, %._crit_edge614.unr-lcssa ], [ %741, %.lr.ph613.epil ]
  %742 = fdiv double %.1325631, %.lcssa999
  br i1 %632, label %.lr.ph618.preheader, label %._crit_edge632

.lr.ph618.preheader:                              ; preds = %._crit_edge614
  %brmerge = select i1 %min.iters.check981, i1 true, i1 %found.conflict978
  br i1 %brmerge, label %.lr.ph618.preheader997, label %vector.ph982

.lr.ph618.preheader997:                           ; preds = %.lr.ph618.preheader, %middle.block979
  %indvars.iv790.ph = phi i64 [ 0, %.lr.ph618.preheader ], [ %n.vec984, %middle.block979 ]
  br i1 %lcmp.mod1050.not, label %.lr.ph618.prol.loopexit, label %.lr.ph618.prol

.lr.ph618.prol:                                   ; preds = %.lr.ph618.preheader997
  %743 = getelementptr inbounds double, ptr %629, i64 %indvars.iv790.ph
  %744 = load double, ptr %743, align 8, !tbaa !49
  %745 = getelementptr inbounds double, ptr %643, i64 %indvars.iv790.ph
  %746 = load double, ptr %745, align 8, !tbaa !49
  %747 = call double @llvm.fmuladd.f64(double %742, double %744, double %746)
  store double %747, ptr %745, align 8, !tbaa !49
  %indvars.iv.next791.prol = or disjoint i64 %indvars.iv790.ph, 1
  br label %.lr.ph618.prol.loopexit

.lr.ph618.prol.loopexit:                          ; preds = %.lr.ph618.prol, %.lr.ph618.preheader997
  %indvars.iv790.unr = phi i64 [ %indvars.iv790.ph, %.lr.ph618.preheader997 ], [ %indvars.iv.next791.prol, %.lr.ph618.prol ]
  %748 = icmp eq i64 %indvars.iv790.ph, %647
  br i1 %748, label %.preheader463, label %.lr.ph618

vector.ph982:                                     ; preds = %.lr.ph618.preheader
  %broadcast.splatinsert992 = insertelement <2 x double> poison, double %742, i64 0
  %broadcast.splat993 = shufflevector <2 x double> %broadcast.splatinsert992, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body986

vector.body986:                                   ; preds = %vector.body986, %vector.ph982
  %index987 = phi i64 [ 0, %vector.ph982 ], [ %index.next994, %vector.body986 ]
  %749 = getelementptr inbounds double, ptr %629, i64 %index987
  %750 = getelementptr inbounds i8, ptr %749, i64 16
  %wide.load988 = load <2 x double>, ptr %749, align 8, !tbaa !49, !alias.scope !111
  %wide.load989 = load <2 x double>, ptr %750, align 8, !tbaa !49, !alias.scope !111
  %751 = getelementptr inbounds double, ptr %643, i64 %index987
  %752 = getelementptr inbounds i8, ptr %751, i64 16
  %wide.load990 = load <2 x double>, ptr %751, align 8, !tbaa !49, !alias.scope !114, !noalias !111
  %wide.load991 = load <2 x double>, ptr %752, align 8, !tbaa !49, !alias.scope !114, !noalias !111
  %753 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat993, <2 x double> %wide.load988, <2 x double> %wide.load990)
  %754 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat993, <2 x double> %wide.load989, <2 x double> %wide.load991)
  store <2 x double> %753, ptr %751, align 8, !tbaa !49, !alias.scope !114, !noalias !111
  store <2 x double> %754, ptr %752, align 8, !tbaa !49, !alias.scope !114, !noalias !111
  %index.next994 = add nuw i64 %index987, 4
  %755 = icmp eq i64 %index.next994, %n.vec984
  br i1 %755, label %middle.block979, label %vector.body986, !llvm.loop !116

middle.block979:                                  ; preds = %vector.body986
  br i1 %cmp.n995, label %.preheader463, label %.lr.ph618.preheader997

.preheader463:                                    ; preds = %.lr.ph618.prol.loopexit, %.lr.ph618, %middle.block979
  br i1 %632, label %.lr.ph620, label %._crit_edge632

.lr.ph620:                                        ; preds = %.preheader463
  %756 = fneg double %742
  br i1 %min.iters.check958, label %scalar.ph957.preheader, label %vector.ph959

scalar.ph957.preheader:                           ; preds = %middle.block956, %.lr.ph620
  %indvars.iv795.ph = phi i64 [ 0, %.lr.ph620 ], [ %n.vec961, %middle.block956 ]
  br label %scalar.ph957

vector.ph959:                                     ; preds = %.lr.ph620
  %broadcast.splatinsert969 = insertelement <2 x double> poison, double %756, i64 0
  %broadcast.splat970 = shufflevector <2 x double> %broadcast.splatinsert969, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body963

vector.body963:                                   ; preds = %vector.body963, %vector.ph959
  %index964 = phi i64 [ 0, %vector.ph959 ], [ %index.next971, %vector.body963 ]
  %757 = getelementptr inbounds double, ptr %631, i64 %index964
  %758 = getelementptr inbounds i8, ptr %757, i64 16
  %wide.load965 = load <2 x double>, ptr %757, align 8, !tbaa !49
  %wide.load966 = load <2 x double>, ptr %758, align 8, !tbaa !49
  %759 = getelementptr inbounds double, ptr %627, i64 %index964
  %760 = getelementptr inbounds i8, ptr %759, i64 16
  %wide.load967 = load <2 x double>, ptr %759, align 8, !tbaa !49
  %wide.load968 = load <2 x double>, ptr %760, align 8, !tbaa !49
  %761 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat970, <2 x double> %wide.load965, <2 x double> %wide.load967)
  %762 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat970, <2 x double> %wide.load966, <2 x double> %wide.load968)
  store <2 x double> %761, ptr %759, align 8, !tbaa !49
  store <2 x double> %762, ptr %760, align 8, !tbaa !49
  %index.next971 = add nuw i64 %index964, 4
  %763 = icmp eq i64 %index.next971, %n.vec961
  br i1 %763, label %middle.block956, label %vector.body963, !llvm.loop !117

middle.block956:                                  ; preds = %vector.body963
  br i1 %cmp.n972, label %.preheader462, label %scalar.ph957.preheader

.lr.ph618:                                        ; preds = %.lr.ph618.prol.loopexit, %.lr.ph618
  %indvars.iv790 = phi i64 [ %indvars.iv.next791.1, %.lr.ph618 ], [ %indvars.iv790.unr, %.lr.ph618.prol.loopexit ]
  %764 = getelementptr inbounds double, ptr %629, i64 %indvars.iv790
  %765 = load double, ptr %764, align 8, !tbaa !49
  %766 = getelementptr inbounds double, ptr %643, i64 %indvars.iv790
  %767 = load double, ptr %766, align 8, !tbaa !49
  %768 = call double @llvm.fmuladd.f64(double %742, double %765, double %767)
  store double %768, ptr %766, align 8, !tbaa !49
  %indvars.iv.next791 = add nuw nsw i64 %indvars.iv790, 1
  %769 = getelementptr inbounds double, ptr %629, i64 %indvars.iv.next791
  %770 = load double, ptr %769, align 8, !tbaa !49
  %771 = getelementptr inbounds double, ptr %643, i64 %indvars.iv.next791
  %772 = load double, ptr %771, align 8, !tbaa !49
  %773 = call double @llvm.fmuladd.f64(double %742, double %770, double %772)
  store double %773, ptr %771, align 8, !tbaa !49
  %indvars.iv.next791.1 = add nuw nsw i64 %indvars.iv790, 2
  %exitcond794.not.1 = icmp eq i64 %indvars.iv.next791.1, %wide.trip.count793
  br i1 %exitcond794.not.1, label %.preheader463, label %.lr.ph618, !llvm.loop !118

.preheader462:                                    ; preds = %scalar.ph957, %middle.block956
  br i1 %632, label %.lr.ph623.preheader, label %._crit_edge632

.lr.ph623.preheader:                              ; preds = %.preheader462
  br i1 %648, label %._crit_edge624.unr-lcssa, label %.lr.ph623

scalar.ph957:                                     ; preds = %scalar.ph957.preheader, %scalar.ph957
  %indvars.iv795 = phi i64 [ %indvars.iv.next796, %scalar.ph957 ], [ %indvars.iv795.ph, %scalar.ph957.preheader ]
  %774 = getelementptr inbounds double, ptr %631, i64 %indvars.iv795
  %775 = load double, ptr %774, align 8, !tbaa !49
  %776 = getelementptr inbounds double, ptr %627, i64 %indvars.iv795
  %777 = load double, ptr %776, align 8, !tbaa !49
  %778 = call double @llvm.fmuladd.f64(double %756, double %775, double %777)
  store double %778, ptr %776, align 8, !tbaa !49
  %indvars.iv.next796 = add nuw nsw i64 %indvars.iv795, 1
  %exitcond799.not = icmp eq i64 %indvars.iv.next796, %wide.trip.count798
  br i1 %exitcond799.not, label %.preheader462, label %scalar.ph957, !llvm.loop !119

.lr.ph623:                                        ; preds = %.lr.ph623.preheader, %.lr.ph623
  %indvars.iv800 = phi i64 [ %indvars.iv.next801.3, %.lr.ph623 ], [ 0, %.lr.ph623.preheader ]
  %.2326622 = phi double [ %790, %.lr.ph623 ], [ 0.000000e+00, %.lr.ph623.preheader ]
  %niter1056 = phi i64 [ %niter1056.next.3, %.lr.ph623 ], [ 0, %.lr.ph623.preheader ]
  %779 = getelementptr inbounds double, ptr %627, i64 %indvars.iv800
  %780 = load double, ptr %779, align 8, !tbaa !49
  %781 = call double @llvm.fmuladd.f64(double %780, double %780, double %.2326622)
  %indvars.iv.next801 = or disjoint i64 %indvars.iv800, 1
  %782 = getelementptr inbounds double, ptr %627, i64 %indvars.iv.next801
  %783 = load double, ptr %782, align 8, !tbaa !49
  %784 = call double @llvm.fmuladd.f64(double %783, double %783, double %781)
  %indvars.iv.next801.1 = or disjoint i64 %indvars.iv800, 2
  %785 = getelementptr inbounds double, ptr %627, i64 %indvars.iv.next801.1
  %786 = load double, ptr %785, align 8, !tbaa !49
  %787 = call double @llvm.fmuladd.f64(double %786, double %786, double %784)
  %indvars.iv.next801.2 = or disjoint i64 %indvars.iv800, 3
  %788 = getelementptr inbounds double, ptr %627, i64 %indvars.iv.next801.2
  %789 = load double, ptr %788, align 8, !tbaa !49
  %790 = call double @llvm.fmuladd.f64(double %789, double %789, double %787)
  %indvars.iv.next801.3 = add nuw nsw i64 %indvars.iv800, 4
  %niter1056.next.3 = add i64 %niter1056, 4
  %niter1056.ncmp.3 = icmp eq i64 %niter1056.next.3, %unroll_iter1055
  br i1 %niter1056.ncmp.3, label %._crit_edge624.unr-lcssa, label %.lr.ph623, !llvm.loop !120

._crit_edge624.unr-lcssa:                         ; preds = %.lr.ph623, %.lr.ph623.preheader
  %.lcssa1000.ph = phi double [ poison, %.lr.ph623.preheader ], [ %790, %.lr.ph623 ]
  %indvars.iv800.unr = phi i64 [ 0, %.lr.ph623.preheader ], [ %indvars.iv.next801.3, %.lr.ph623 ]
  %.2326622.unr = phi double [ 0.000000e+00, %.lr.ph623.preheader ], [ %790, %.lr.ph623 ]
  br i1 %lcmp.mod1053.not, label %._crit_edge624, label %.lr.ph623.epil

.lr.ph623.epil:                                   ; preds = %._crit_edge624.unr-lcssa, %.lr.ph623.epil
  %indvars.iv800.epil = phi i64 [ %indvars.iv.next801.epil, %.lr.ph623.epil ], [ %indvars.iv800.unr, %._crit_edge624.unr-lcssa ]
  %.2326622.epil = phi double [ %793, %.lr.ph623.epil ], [ %.2326622.unr, %._crit_edge624.unr-lcssa ]
  %epil.iter1052 = phi i64 [ %epil.iter1052.next, %.lr.ph623.epil ], [ 0, %._crit_edge624.unr-lcssa ]
  %791 = getelementptr inbounds double, ptr %627, i64 %indvars.iv800.epil
  %792 = load double, ptr %791, align 8, !tbaa !49
  %793 = call double @llvm.fmuladd.f64(double %792, double %792, double %.2326622.epil)
  %indvars.iv.next801.epil = add nuw nsw i64 %indvars.iv800.epil, 1
  %epil.iter1052.next = add i64 %epil.iter1052, 1
  %epil.iter1052.cmp.not = icmp eq i64 %epil.iter1052.next, %xtraiter1051
  br i1 %epil.iter1052.cmp.not, label %._crit_edge624, label %.lr.ph623.epil, !llvm.loop !121

._crit_edge624:                                   ; preds = %.lr.ph623.epil, %._crit_edge624.unr-lcssa
  %.lcssa1000 = phi double [ %.lcssa1000.ph, %._crit_edge624.unr-lcssa ], [ %793, %.lr.ph623.epil ]
  %794 = fcmp ugt double %.lcssa1000, 0x3D719799812DEA11
  br i1 %794, label %795, label %._crit_edge632

795:                                              ; preds = %._crit_edge624
  %796 = fdiv double %.lcssa1000, %.1325631
  br i1 %632, label %.lr.ph628.preheader, label %._crit_edge629

.lr.ph628.preheader:                              ; preds = %795
  br i1 %min.iters.check941, label %.lr.ph628.preheader996, label %vector.ph942

vector.ph942:                                     ; preds = %.lr.ph628.preheader
  %broadcast.splatinsert950 = insertelement <2 x double> poison, double %796, i64 0
  %broadcast.splat951 = shufflevector <2 x double> %broadcast.splatinsert950, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body946

vector.body946:                                   ; preds = %vector.body946, %vector.ph942
  %index947 = phi i64 [ 0, %vector.ph942 ], [ %index.next954, %vector.body946 ]
  %797 = getelementptr inbounds double, ptr %629, i64 %index947
  %798 = getelementptr inbounds i8, ptr %797, i64 16
  %wide.load948 = load <2 x double>, ptr %797, align 8, !tbaa !49
  %wide.load949 = load <2 x double>, ptr %798, align 8, !tbaa !49
  %799 = fmul <2 x double> %broadcast.splat951, %wide.load948
  %800 = fmul <2 x double> %broadcast.splat951, %wide.load949
  %801 = getelementptr inbounds double, ptr %627, i64 %index947
  %802 = getelementptr inbounds i8, ptr %801, i64 16
  %wide.load952 = load <2 x double>, ptr %801, align 8, !tbaa !49
  %wide.load953 = load <2 x double>, ptr %802, align 8, !tbaa !49
  %803 = fadd <2 x double> %799, %wide.load952
  %804 = fadd <2 x double> %800, %wide.load953
  store <2 x double> %803, ptr %797, align 8, !tbaa !49
  store <2 x double> %804, ptr %798, align 8, !tbaa !49
  %index.next954 = add nuw i64 %index947, 4
  %805 = icmp eq i64 %index.next954, %n.vec944
  br i1 %805, label %middle.block939, label %vector.body946, !llvm.loop !122

middle.block939:                                  ; preds = %vector.body946
  br i1 %cmp.n955, label %._crit_edge629, label %.lr.ph628.preheader996

.lr.ph628.preheader996:                           ; preds = %middle.block939, %.lr.ph628.preheader
  %indvars.iv805.ph = phi i64 [ 0, %.lr.ph628.preheader ], [ %n.vec944, %middle.block939 ]
  br label %.lr.ph628

.lr.ph628:                                        ; preds = %.lr.ph628.preheader996, %.lr.ph628
  %indvars.iv805 = phi i64 [ %indvars.iv.next806, %.lr.ph628 ], [ %indvars.iv805.ph, %.lr.ph628.preheader996 ]
  %806 = getelementptr inbounds double, ptr %629, i64 %indvars.iv805
  %807 = load double, ptr %806, align 8, !tbaa !49
  %808 = fmul double %796, %807
  %809 = getelementptr inbounds double, ptr %627, i64 %indvars.iv805
  %810 = load double, ptr %809, align 8, !tbaa !49
  %811 = fadd double %808, %810
  store double %811, ptr %806, align 8, !tbaa !49
  %indvars.iv.next806 = add nuw nsw i64 %indvars.iv805, 1
  %exitcond809.not = icmp eq i64 %indvars.iv.next806, %wide.trip.count808
  br i1 %exitcond809.not, label %._crit_edge629, label %.lr.ph628, !llvm.loop !123

._crit_edge629:                                   ; preds = %.lr.ph628, %middle.block939, %795
  %812 = add nuw nsw i32 %.0370630, 1
  %813 = fcmp ogt double %.lcssa1000, 0x3D719799812DEA11
  %814 = icmp ult i32 %.0370630, 99
  %815 = select i1 %813, i1 %814, i1 false
  br i1 %815, label %.preheader465, label %._crit_edge632, !llvm.loop !124

._crit_edge632:                                   ; preds = %.preheader465, %.preheader464, %._crit_edge614, %.preheader463, %.preheader462, %._crit_edge624, %._crit_edge629, %.preheader468, %.preheader466
  call void @_ZdaPv(ptr noundef nonnull %627) #16
  call void @_ZdaPv(ptr noundef nonnull %629) #16
  call void @_ZdaPv(ptr noundef nonnull %631) #16
  br label %853

.critedge448:                                     ; preds = %._crit_edge594
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %23) #13
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %24) #13
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %25) #13
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %25) #13
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %24, ptr noundef nonnull @.str.15, ptr noundef nonnull align 1 dereferenceable(1) %25)
          to label %816 unwind label %836

816:                                              ; preds = %.critedge448
  %817 = load i32, ptr %320, align 4, !tbaa !52
  %818 = getelementptr inbounds i8, ptr %0, i64 1016
  %819 = load ptr, ptr %818, align 8, !tbaa !70
  invoke void @_ZN7SGTELIB6MatrixC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiiPPd(ptr noundef nonnull align 8 dereferenceable(56) %23, ptr noundef nonnull align 8 dereferenceable(32) %24, i32 noundef %817, i32 noundef %817, ptr noundef %819)
          to label %820 unwind label %838

820:                                              ; preds = %816
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #13
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %25) #13
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %25) #13
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %24) #13
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %26) #13
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %27) #13
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %28) #13
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %28) #13
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull @.str.16, ptr noundef nonnull align 1 dereferenceable(1) %28)
          to label %821 unwind label %841

821:                                              ; preds = %820
  %822 = load i32, ptr %320, align 4, !tbaa !52
  invoke void @_ZN7SGTELIB6MatrixC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEii(ptr noundef nonnull align 8 dereferenceable(56) %26, ptr noundef nonnull align 8 dereferenceable(32) %27, i32 noundef %822, i32 noundef 1)
          to label %823 unwind label %843

823:                                              ; preds = %821
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #13
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %28) #13
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %28) #13
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %27) #13
  invoke void @_ZN7SGTELIB6Matrix3setEiid(ptr noundef nonnull align 8 dereferenceable(56) %26, i32 noundef 0, i32 noundef 0, double noundef 1.000000e+00)
          to label %824 unwind label %846

824:                                              ; preds = %823
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %29) #13
  invoke void @_ZN7SGTELIB6Matrix14cholesky_solveERKS0_S2_(ptr dead_on_unwind nonnull writable sret(%"class.SGTELIB::Matrix") align 8 %29, ptr noundef nonnull align 8 dereferenceable(56) %23, ptr noundef nonnull align 8 dereferenceable(56) %26)
          to label %.preheader460 unwind label %848

.preheader460:                                    ; preds = %824
  %825 = load i32, ptr %320, align 4, !tbaa !52
  %826 = icmp sgt i32 %825, 0
  br i1 %826, label %.lr.ph635, label %._crit_edge636

.lr.ph635:                                        ; preds = %.preheader460
  %827 = getelementptr inbounds i8, ptr %0, i64 1040
  br label %828

828:                                              ; preds = %.lr.ph635, %828
  %indvars.iv810 = phi i64 [ 0, %.lr.ph635 ], [ %indvars.iv.next811, %828 ]
  %829 = trunc nuw nsw i64 %indvars.iv810 to i32
  %830 = call noundef double @_ZNK7SGTELIB6Matrix3getEii(ptr noundef nonnull align 8 dereferenceable(56) %29, i32 noundef %829, i32 noundef 0)
  %831 = load ptr, ptr %827, align 8, !tbaa !125
  %832 = getelementptr inbounds double, ptr %831, i64 %indvars.iv810
  store double %830, ptr %832, align 8, !tbaa !49
  %indvars.iv.next811 = add nuw nsw i64 %indvars.iv810, 1
  %833 = load i32, ptr %320, align 4, !tbaa !52
  %834 = sext i32 %833 to i64
  %835 = icmp slt i64 %indvars.iv.next811, %834
  br i1 %835, label %828, label %._crit_edge636, !llvm.loop !126

836:                                              ; preds = %.critedge448
  %837 = landingpad { ptr, i32 }
          cleanup
  br label %840

838:                                              ; preds = %816
  %839 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #13
  br label %840

840:                                              ; preds = %838, %836
  %.pn411 = phi { ptr, i32 } [ %839, %838 ], [ %837, %836 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %25) #13
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %25) #13
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %24) #13
  br label %852

841:                                              ; preds = %820
  %842 = landingpad { ptr, i32 }
          cleanup
  br label %845

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

845:                                              ; preds = %843, %841
  %.pn413 = phi { ptr, i32 } [ %844, %843 ], [ %842, %841 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %28) #13
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %28) #13
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %27) #13
  br label %851

846:                                              ; preds = %823
  %847 = landingpad { ptr, i32 }
          cleanup
  br label %850

848:                                              ; preds = %824
  %849 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %29) #13
  br label %850

._crit_edge636:                                   ; preds = %828, %.preheader460
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %29) #13
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %29) #13
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %26) #13
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %26) #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 %853

850:                                              ; preds = %848, %846
  %.pn415 = phi { ptr, i32 } [ %849, %848 ], [ %847, %846 ]
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %26) #13
  br label %851

851:                                              ; preds = %850, %845
  %.pn415.pn = phi { ptr, i32 } [ %.pn415, %850 ], [ %.pn413, %845 ]
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %26) #13
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %23) #13
  br label %852

852:                                              ; preds = %851, %840
  %.pn415.pn.pn = phi { ptr, i32 } [ %.pn415.pn, %851 ], [ %.pn411, %840 ]
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %23) #13
  br label %932

853:                                              ; preds = %._crit_edge632, %._crit_edge636
  %854 = load i32, ptr %320, align 4, !tbaa !52
  %855 = icmp sgt i32 %854, 0
  br i1 %855, label %.lr.ph639, label %.critedge450.preheader

.lr.ph639:                                        ; preds = %853
  %856 = getelementptr inbounds i8, ptr %0, i64 1040
  br label %867

857:                                              ; preds = %872
  %indvars.iv.next814 = add nuw nsw i64 %indvars.iv813, 1
  %858 = load i32, ptr %320, align 4, !tbaa !52
  %859 = sext i32 %858 to i64
  %860 = icmp slt i64 %indvars.iv.next814, %859
  br i1 %860, label %867, label %.critedge450.preheader, !llvm.loop !127

.critedge450.preheader:                           ; preds = %857, %853
  %861 = getelementptr inbounds i8, ptr %0, i64 332
  %862 = load i32, ptr %861, align 4, !tbaa !71
  %863 = icmp sgt i32 %862, 0
  br i1 %863, label %.preheader.lr.ph, label %.loopexit

.preheader.lr.ph:                                 ; preds = %.critedge450.preheader
  %864 = getelementptr inbounds i8, ptr %0, i64 1040
  %865 = getelementptr inbounds i8, ptr %0, i64 1024
  %866 = getelementptr inbounds i8, ptr %0, i64 1072
  br label %.preheader

867:                                              ; preds = %.lr.ph639, %857
  %indvars.iv813 = phi i64 [ 0, %.lr.ph639 ], [ %indvars.iv.next814, %857 ]
  %868 = load ptr, ptr %856, align 8, !tbaa !125
  %869 = getelementptr inbounds double, ptr %868, i64 %indvars.iv813
  %870 = load double, ptr %869, align 8, !tbaa !49
  %871 = invoke noundef zeroext i1 @_ZN7SGTELIB5isdefEd(double noundef %870)
          to label %872 unwind label %.loopexit.split-lp

872:                                              ; preds = %867
  br i1 %871, label %857, label %873

.loopexit459:                                     ; preds = %._crit_edge643
  %lpad.loopexit = landingpad { ptr, i32 }
          cleanup
  br label %932

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

873:                                              ; preds = %872
  %874 = invoke noundef i32 @_ZN7SGTELIB6Matrix13get_min_indexEv(ptr noundef nonnull align 8 dereferenceable(56) %8)
          to label %875 unwind label %880

875:                                              ; preds = %873
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %30) #13
  invoke void @_ZNK7SGTELIB6Matrix7get_rowEi(ptr dead_on_unwind nonnull writable sret(%"class.SGTELIB::Matrix") align 8 %30, ptr noundef nonnull align 8 dereferenceable(56) %21, i32 noundef %874)
          to label %876 unwind label %882

876:                                              ; preds = %875
  %877 = getelementptr inbounds i8, ptr %0, i64 1072
  %878 = invoke noundef nonnull align 8 dereferenceable(56) ptr @_ZN7SGTELIB6MatrixaSERKS0_(ptr noundef nonnull align 8 dereferenceable(56) %877, ptr noundef nonnull align 8 dereferenceable(56) %30)
          to label %879 unwind label %884

879:                                              ; preds = %876
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %30) #13
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %30) #13
  br label %.loopexit

880:                                              ; preds = %873
  %881 = landingpad { ptr, i32 }
          cleanup
  br label %932

882:                                              ; preds = %875
  %883 = landingpad { ptr, i32 }
          cleanup
  br label %886

884:                                              ; preds = %876
  %885 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %30) #13
  br label %886

886:                                              ; preds = %884, %882
  %.pn419 = phi { ptr, i32 } [ %885, %884 ], [ %883, %882 ]
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %30) #13
  br label %932

.preheader:                                       ; preds = %.preheader.lr.ph, %.critedge450
  %indvars.iv821 = phi i64 [ 0, %.preheader.lr.ph ], [ %indvars.iv.next822, %.critedge450 ]
  %887 = load i32, ptr %320, align 4, !tbaa !52
  %888 = icmp sgt i32 %887, 0
  br i1 %888, label %.lr.ph642, label %._crit_edge643

.lr.ph642:                                        ; preds = %.preheader
  %889 = load ptr, ptr %864, align 8, !tbaa !125
  %890 = load ptr, ptr %865, align 8, !tbaa !91
  %wide.trip.count819 = zext nneg i32 %887 to i64
  %xtraiter1058 = and i64 %wide.trip.count819, 3
  %891 = icmp ult i32 %887, 4
  br i1 %891, label %._crit_edge643.loopexit.unr-lcssa, label %.lr.ph642.new

.lr.ph642.new:                                    ; preds = %.lr.ph642
  %unroll_iter1062 = and i64 %wide.trip.count819, 2147483644
  br label %892

892:                                              ; preds = %892, %.lr.ph642.new
  %indvars.iv816 = phi i64 [ 0, %.lr.ph642.new ], [ %indvars.iv.next817.3, %892 ]
  %.3384640 = phi double [ 0.000000e+00, %.lr.ph642.new ], [ %920, %892 ]
  %niter1063 = phi i64 [ 0, %.lr.ph642.new ], [ %niter1063.next.3, %892 ]
  %893 = getelementptr inbounds double, ptr %889, i64 %indvars.iv816
  %894 = load double, ptr %893, align 8, !tbaa !49
  %895 = getelementptr inbounds ptr, ptr %890, i64 %indvars.iv816
  %896 = load ptr, ptr %895, align 8, !tbaa !72
  %897 = getelementptr inbounds double, ptr %896, i64 %indvars.iv821
  %898 = load double, ptr %897, align 8, !tbaa !49
  %899 = call double @llvm.fmuladd.f64(double %894, double %898, double %.3384640)
  %indvars.iv.next817 = or disjoint i64 %indvars.iv816, 1
  %900 = getelementptr inbounds double, ptr %889, i64 %indvars.iv.next817
  %901 = load double, ptr %900, align 8, !tbaa !49
  %902 = getelementptr inbounds ptr, ptr %890, i64 %indvars.iv.next817
  %903 = load ptr, ptr %902, align 8, !tbaa !72
  %904 = getelementptr inbounds double, ptr %903, i64 %indvars.iv821
  %905 = load double, ptr %904, align 8, !tbaa !49
  %906 = call double @llvm.fmuladd.f64(double %901, double %905, double %899)
  %indvars.iv.next817.1 = or disjoint i64 %indvars.iv816, 2
  %907 = getelementptr inbounds double, ptr %889, i64 %indvars.iv.next817.1
  %908 = load double, ptr %907, align 8, !tbaa !49
  %909 = getelementptr inbounds ptr, ptr %890, i64 %indvars.iv.next817.1
  %910 = load ptr, ptr %909, align 8, !tbaa !72
  %911 = getelementptr inbounds double, ptr %910, i64 %indvars.iv821
  %912 = load double, ptr %911, align 8, !tbaa !49
  %913 = call double @llvm.fmuladd.f64(double %908, double %912, double %906)
  %indvars.iv.next817.2 = or disjoint i64 %indvars.iv816, 3
  %914 = getelementptr inbounds double, ptr %889, i64 %indvars.iv.next817.2
  %915 = load double, ptr %914, align 8, !tbaa !49
  %916 = getelementptr inbounds ptr, ptr %890, i64 %indvars.iv.next817.2
  %917 = load ptr, ptr %916, align 8, !tbaa !72
  %918 = getelementptr inbounds double, ptr %917, i64 %indvars.iv821
  %919 = load double, ptr %918, align 8, !tbaa !49
  %920 = call double @llvm.fmuladd.f64(double %915, double %919, double %913)
  %indvars.iv.next817.3 = add nuw nsw i64 %indvars.iv816, 4
  %niter1063.next.3 = add i64 %niter1063, 4
  %niter1063.ncmp.3 = icmp eq i64 %niter1063.next.3, %unroll_iter1062
  br i1 %niter1063.ncmp.3, label %._crit_edge643.loopexit.unr-lcssa, label %892, !llvm.loop !128

._crit_edge643.loopexit.unr-lcssa:                ; preds = %892, %.lr.ph642
  %.lcssa.ph = phi double [ poison, %.lr.ph642 ], [ %920, %892 ]
  %indvars.iv816.unr = phi i64 [ 0, %.lr.ph642 ], [ %indvars.iv.next817.3, %892 ]
  %.3384640.unr = phi double [ 0.000000e+00, %.lr.ph642 ], [ %920, %892 ]
  %lcmp.mod1060.not = icmp eq i64 %xtraiter1058, 0
  br i1 %lcmp.mod1060.not, label %._crit_edge643, label %.epil.preheader1057

.epil.preheader1057:                              ; preds = %._crit_edge643.loopexit.unr-lcssa, %.epil.preheader1057
  %indvars.iv816.epil = phi i64 [ %indvars.iv.next817.epil, %.epil.preheader1057 ], [ %indvars.iv816.unr, %._crit_edge643.loopexit.unr-lcssa ]
  %.3384640.epil = phi double [ %927, %.epil.preheader1057 ], [ %.3384640.unr, %._crit_edge643.loopexit.unr-lcssa ]
  %epil.iter1059 = phi i64 [ %epil.iter1059.next, %.epil.preheader1057 ], [ 0, %._crit_edge643.loopexit.unr-lcssa ]
  %921 = getelementptr inbounds double, ptr %889, i64 %indvars.iv816.epil
  %922 = load double, ptr %921, align 8, !tbaa !49
  %923 = getelementptr inbounds ptr, ptr %890, i64 %indvars.iv816.epil
  %924 = load ptr, ptr %923, align 8, !tbaa !72
  %925 = getelementptr inbounds double, ptr %924, i64 %indvars.iv821
  %926 = load double, ptr %925, align 8, !tbaa !49
  %927 = call double @llvm.fmuladd.f64(double %922, double %926, double %.3384640.epil)
  %indvars.iv.next817.epil = add nuw nsw i64 %indvars.iv816.epil, 1
  %epil.iter1059.next = add i64 %epil.iter1059, 1
  %epil.iter1059.cmp.not = icmp eq i64 %epil.iter1059.next, %xtraiter1058
  br i1 %epil.iter1059.cmp.not, label %._crit_edge643, label %.epil.preheader1057, !llvm.loop !129

._crit_edge643:                                   ; preds = %._crit_edge643.loopexit.unr-lcssa, %.epil.preheader1057, %.preheader
  %.3384.lcssa = phi double [ 0.000000e+00, %.preheader ], [ %.lcssa.ph, %._crit_edge643.loopexit.unr-lcssa ], [ %927, %.epil.preheader1057 ]
  %928 = trunc nuw nsw i64 %indvars.iv821 to i32
  invoke void @_ZN7SGTELIB6Matrix3setEiid(ptr noundef nonnull align 8 dereferenceable(56) %866, i32 noundef 0, i32 noundef %928, double noundef %.3384.lcssa)
          to label %.critedge450 unwind label %.loopexit459

.critedge450:                                     ; preds = %._crit_edge643
  %indvars.iv.next822 = add nuw nsw i64 %indvars.iv821, 1
  %929 = load i32, ptr %861, align 4, !tbaa !71
  %930 = sext i32 %929 to i64
  %931 = icmp slt i64 %indvars.iv.next822, %930
  br i1 %931, label %.preheader, label %.loopexit, !llvm.loop !130

.loopexit:                                        ; preds = %.critedge450, %.critedge450.preheader, %879
  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) %21) #13
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %21) #13
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %11) #13
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %11) #13
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #13
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #13
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %8) #13
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %8) #13
  ret void

932:                                              ; preds = %.loopexit459, %.loopexit.split-lp, %886, %880, %673, %677, %675, %852
  %.pn419.pn.pn.pn = phi { ptr, i32 } [ %.pn415.pn.pn, %852 ], [ %674, %673 ], [ %678, %677 ], [ %676, %675 ], [ %.pn419, %886 ], [ %881, %880 ], [ %lpad.loopexit, %.loopexit459 ], [ %lpad.loopexit.split-lp, %.loopexit.split-lp ]
  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 %933

933:                                              ; preds = %932, %369
  %.pn419.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn419.pn.pn.pn, %932 ], [ %370, %369 ]
  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 %934

934:                                              ; preds = %.loopexit505, %.loopexit.split-lp506, %.loopexit493, %.loopexit.split-lp494, %84, %172, %230, %367, %933, %282, %118, %119, %111, %93, %83
  %.pn429.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn, %83 ], [ %85, %84 ], [ %.pn429.pn457, %119 ], [ %.pn429, %118 ], [ %112, %111 ], [ %.pn400.pn, %93 ], [ %.pn405.pn, %172 ], [ %.pn403, %230 ], [ %283, %282 ], [ %.pn419.pn.pn.pn.pn, %933 ], [ %368, %367 ], [ %lpad.loopexit495, %.loopexit493 ], [ %lpad.loopexit.split-lp496, %.loopexit.split-lp494 ], [ %lpad.loopexit507, %.loopexit505 ], [ %lpad.loopexit.split-lp508, %.loopexit.split-lp506 ]
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %11) #13
  br label %935

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

936:                                              ; preds = %935, %75
  %.pn429.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn429.pn.pn.pn.pn.pn, %935 ], [ %76, %75 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #13
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %8) #13
  br label %937

937:                                              ; preds = %936, %73
  %.pn429.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn429.pn.pn.pn.pn.pn.pn, %936 ], [ %74, %73 ]
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %8) #13
  br label %938

938:                                              ; preds = %42, %43, %937
  %.pn438.pn.pn = phi { ptr, i32 } [ %.pn438.pn453, %43 ], [ %.pn438, %42 ], [ %.pn429.pn.pn.pn.pn.pn.pn.pn, %937 ]
  resume { ptr, i32 } %.pn438.pn.pn

939:                                              ; preds = %110, %36
  unreachable
}

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

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

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: 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 = !{!48, !7, i64 1000}
!70 = !{!48, !7, i64 1016}
!71 = !{!6, !12, i64 332}
!72 = !{!7, !7, i64 0}
!73 = !{!48, !12, i64 996}
!74 = distinct !{!74, !51}
!75 = !{!48, !7, i64 1064}
!76 = !{!24, !24, i64 0}
!77 = !{i8 0, i8 2}
!78 = !{}
!79 = !{!6, !12, i64 328}
!80 = distinct !{!80, !51}
!81 = distinct !{!81, !51}
!82 = distinct !{!82, !51}
!83 = distinct !{!83, !51}
!84 = !{!85}
!85 = distinct !{!85, !86}
!86 = distinct !{!86, !"LVerDomain"}
!87 = !{!88}
!88 = distinct !{!88, !86}
!89 = distinct !{!89, !51, !58, !59}
!90 = distinct !{!90, !51, !58}
!91 = !{!48, !7, i64 1024}
!92 = distinct !{!92, !51}
!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}
!130 = distinct !{!130, !51}


; 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