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

; 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.SGTELIB::Matrix" = type { ptr, %"class.std::__cxx11::basic_string", i32, i32, 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.SGTELIB::TrainingSet" = type { ptr, i32, i32, i32, i8, ptr, i8, i32, double, double, i32, %"class.SGTELIB::Matrix", %"class.SGTELIB::Matrix", %"class.SGTELIB::Matrix", %"class.SGTELIB::Matrix", %"class.SGTELIB::Matrix", i32, i32, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, double }
%"class.std::allocator" = type { i8 }

@_ZSt4cout = external global %"class.std::basic_ostream", align 8
@.str.6 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [56 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.46 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.47 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.48 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.67 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.68 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.69 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.70 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.71 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.72 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.73 = external hidden unnamed_addr constant [16 x i8], align 1

; 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) #0

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef, ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #3 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 #4

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

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

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

; Function Attrs: nobuiltin nounwind
declare void @_ZdlPvm(ptr noundef, i64 noundef) #6

declare void @_ZN7SGTELIB6Matrix10set_randomEddb(ptr noundef nonnull align 8 dereferenceable(56), double noundef, double noundef, i1 noundef zeroext) #4

declare void @_ZN7SGTELIB11TrainingSetC1ERKNS_6MatrixES3_(ptr noundef nonnull align 8 dereferenceable(504), ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 8 dereferenceable(56)) unnamed_addr #4

declare noundef ptr @_ZN7SGTELIB17Surrogate_FactoryERNS_11TrainingSetERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(504), ptr noundef nonnull align 8 dereferenceable(32)) #4

declare noundef zeroext i1 @_ZN7SGTELIB9Surrogate5buildEv(ptr noundef nonnull align 8 dereferenceable(985)) #4

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

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

; Function Attrs: nounwind
declare void @_ZN7SGTELIB11TrainingSetD1Ev(ptr noundef nonnull align 8 dereferenceable(504)) unnamed_addr #7

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

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsIcSt11char_traitsIcESaIcEERSt13basic_ostreamIT_T0_ES7_RKNSt7__cxx1112basic_stringIS4_S5_T1_EE(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(32)) #0

declare void @_ZN7SGTELIB16surrogate_deleteEPNS_9SurrogateE(ptr noundef) #4

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN7SGTELIB14test_functionsERKNS_6MatrixE(ptr dead_on_unwind noalias writable sret(%"class.SGTELIB::Matrix") align 8, ptr noundef nonnull align 8 dereferenceable(56)) #3

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

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

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

declare void @_ZN7SGTELIB9Surrogate7predictERKNS_6MatrixEPS1_S4_S4_S4_(ptr noundef nonnull align 8 dereferenceable(985), ptr noundef nonnull align 8 dereferenceable(56), ptr noundef, ptr noundef, ptr noundef, ptr noundef) #4

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN7SGTELIB17check_matrix_diffEPKNS_6MatrixES2_(ptr noundef, ptr noundef) #3

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN7SGTELIB11test_updateERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_6MatrixE(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 8 dereferenceable(32) %1, ptr noundef nonnull align 8 dereferenceable(56) %2) #3 personality ptr @__gxx_personality_v0 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca %"class.SGTELIB::Matrix", align 8
  %10 = alloca i32, align 4
  %11 = alloca ptr, align 8
  %12 = alloca i32, align 4
  %13 = alloca %"class.SGTELIB::TrainingSet", align 8
  %14 = alloca ptr, align 8
  %15 = alloca i8, align 1
  %16 = alloca %"class.std::__cxx11::basic_string", align 8
  %17 = alloca %"class.std::__cxx11::basic_string", align 8
  %18 = alloca %"class.std::__cxx11::basic_string", align 8
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca %"class.SGTELIB::Matrix", align 8
  %22 = alloca %"class.std::__cxx11::basic_string", align 8
  %23 = alloca %"class.std::allocator", align 1
  %24 = alloca ptr, align 8
  %25 = alloca %"class.std::__cxx11::basic_string", align 8
  %26 = alloca %"class.std::allocator", align 1
  %27 = alloca i1, align 1
  %28 = alloca ptr, align 8
  %29 = alloca %"class.std::__cxx11::basic_string", align 8
  %30 = alloca %"class.std::allocator", align 1
  %31 = alloca i1, align 1
  %32 = alloca ptr, align 8
  %33 = alloca %"class.std::__cxx11::basic_string", align 8
  %34 = alloca %"class.std::allocator", align 1
  %35 = alloca i1, align 1
  %36 = alloca ptr, align 8
  %37 = alloca %"class.std::__cxx11::basic_string", align 8
  %38 = alloca %"class.std::allocator", align 1
  %39 = alloca i1, align 1
  %40 = alloca %"class.SGTELIB::TrainingSet", align 8
  %41 = alloca %"class.SGTELIB::Matrix", align 8
  %42 = alloca %"class.SGTELIB::Matrix", align 8
  %43 = alloca ptr, align 8
  %44 = alloca i32, align 4
  %45 = alloca %"class.SGTELIB::Matrix", align 8
  %46 = alloca %"class.SGTELIB::Matrix", align 8
  %47 = alloca ptr, align 8
  %48 = alloca %"class.std::__cxx11::basic_string", align 8
  %49 = alloca %"class.std::allocator", align 1
  %50 = alloca i1, align 1
  %51 = alloca ptr, align 8
  %52 = alloca %"class.std::__cxx11::basic_string", align 8
  %53 = alloca %"class.std::allocator", align 1
  %54 = alloca i1, align 1
  %55 = alloca ptr, align 8
  %56 = alloca %"class.std::__cxx11::basic_string", align 8
  %57 = alloca %"class.std::allocator", align 1
  %58 = alloca i1, align 1
  %59 = alloca ptr, align 8
  %60 = alloca %"class.std::__cxx11::basic_string", align 8
  %61 = alloca %"class.std::allocator", align 1
  %62 = alloca i1, align 1
  %63 = alloca %"class.std::allocator", align 1
  store ptr %0, ptr %4, align 8
  store ptr %1, ptr %5, align 8, !tbaa !5
  store ptr %2, ptr %6, align 8, !tbaa !5
  %64 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.15)
  %65 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.67)
  %66 = load ptr, ptr %5, align 8, !tbaa !5
  %67 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsIcSt11char_traitsIcESaIcEERSt13basic_ostreamIT_T0_ES7_RKNSt7__cxx1112basic_stringIS4_S5_T1_EE(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull align 8 dereferenceable(32) %66)
  %68 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %67, ptr noundef @.str.6)
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #9
  %69 = load ptr, ptr %6, align 8, !tbaa !5
  %70 = call noundef i32 @_ZNK7SGTELIB6Matrix11get_nb_rowsEv(ptr noundef nonnull align 8 dereferenceable(56) %69)
  store i32 %70, ptr %7, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #9
  %71 = load ptr, ptr %6, align 8, !tbaa !5
  %72 = call noundef i32 @_ZNK7SGTELIB6Matrix11get_nb_colsEv(ptr noundef nonnull align 8 dereferenceable(56) %71)
  store i32 %72, ptr %8, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 56, ptr %9) #9
  %73 = load ptr, ptr %6, align 8, !tbaa !5
  call void @_ZN7SGTELIB14test_functionsERKNS_6MatrixE(ptr dead_on_unwind writable sret(%"class.SGTELIB::Matrix") align 8 %9, ptr noundef nonnull align 8 dereferenceable(56) %73)
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #9
  %74 = invoke noundef i32 @_ZNK7SGTELIB6Matrix11get_nb_colsEv(ptr noundef nonnull align 8 dereferenceable(56) %9)
          to label %75 unwind label %98

75:                                               ; preds = %3
  store i32 %74, ptr %10, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 504, ptr %13) #9
  %76 = load ptr, ptr %6, align 8, !tbaa !5
  invoke void @_ZN7SGTELIB11TrainingSetC1ERKNS_6MatrixES3_(ptr noundef nonnull align 8 dereferenceable(504) %13, ptr noundef nonnull align 8 dereferenceable(56) %76, ptr noundef nonnull align 8 dereferenceable(56) %9)
          to label %77 unwind label %102

77:                                               ; preds = %75
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #9
  %78 = load ptr, ptr %5, align 8, !tbaa !5
  %79 = invoke noundef ptr @_ZN7SGTELIB17Surrogate_FactoryERNS_11TrainingSetERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(504) %13, ptr noundef nonnull align 8 dereferenceable(32) %78)
          to label %80 unwind label %106

80:                                               ; preds = %77
  store ptr %79, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %15) #9
  %81 = load ptr, ptr %14, align 8, !tbaa !5
  %82 = invoke noundef zeroext i1 @_ZN7SGTELIB9Surrogate5buildEv(ptr noundef nonnull align 8 dereferenceable(985) %81)
          to label %83 unwind label %110

83:                                               ; preds = %80
  %84 = zext i1 %82 to i8
  store i8 %84, ptr %15, align 1, !tbaa !11
  %85 = load i8, ptr %15, align 1, !tbaa !11, !range !13, !noundef !14
  %86 = trunc i8 %85 to i1
  br i1 %86, label %137, label %87

87:                                               ; preds = %83
  %88 = load ptr, ptr %14, align 8, !tbaa !5
  invoke void @_ZN7SGTELIB16surrogate_deleteEPNS_9SurrogateE(ptr noundef %88)
          to label %89 unwind label %110

89:                                               ; preds = %87
  call void @llvm.lifetime.start.p0(i64 32, ptr %16) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %17) #9
  %90 = load ptr, ptr %5, align 8, !tbaa !5
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_RKS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %17, ptr noundef @.str.68, ptr noundef nonnull align 8 dereferenceable(32) %90)
          to label %91 unwind label %114

91:                                               ; preds = %89
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %16, ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef @.str.32)
          to label %92 unwind label %118

92:                                               ; preds = %91
  %93 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsIcSt11char_traitsIcESaIcEERSt13basic_ostreamIT_T0_ES7_RKNSt7__cxx1112basic_stringIS4_S5_T1_EE(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull align 8 dereferenceable(32) %16)
          to label %94 unwind label %122

94:                                               ; preds = %92
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %17) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %16) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %18) #9
  %95 = load ptr, ptr %5, align 8, !tbaa !5
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_RKS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %18, ptr noundef @.str.68, ptr noundef nonnull align 8 dereferenceable(32) %95)
          to label %96 unwind label %128

96:                                               ; preds = %94
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 8 dereferenceable(32) %18, ptr noundef @.str.32)
          to label %97 unwind label %132

97:                                               ; preds = %96
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %18) #9
  store i32 1, ptr %19, align 4
  br label %491

98:                                               ; preds = %3
  %99 = landingpad { ptr, i32 }
          cleanup
  %100 = extractvalue { ptr, i32 } %99, 0
  store ptr %100, ptr %11, align 8
  %101 = extractvalue { ptr, i32 } %99, 1
  store i32 %101, ptr %12, align 4
  br label %495

102:                                              ; preds = %75
  %103 = landingpad { ptr, i32 }
          cleanup
  %104 = extractvalue { ptr, i32 } %103, 0
  store ptr %104, ptr %11, align 8
  %105 = extractvalue { ptr, i32 } %103, 1
  store i32 %105, ptr %12, align 4
  br label %494

106:                                              ; preds = %77
  %107 = landingpad { ptr, i32 }
          cleanup
  %108 = extractvalue { ptr, i32 } %107, 0
  store ptr %108, ptr %11, align 8
  %109 = extractvalue { ptr, i32 } %107, 1
  store i32 %109, ptr %12, align 4
  br label %493

110:                                              ; preds = %87, %80
  %111 = landingpad { ptr, i32 }
          cleanup
  %112 = extractvalue { ptr, i32 } %111, 0
  store ptr %112, ptr %11, align 8
  %113 = extractvalue { ptr, i32 } %111, 1
  store i32 %113, ptr %12, align 4
  br label %492

114:                                              ; preds = %89
  %115 = landingpad { ptr, i32 }
          cleanup
  %116 = extractvalue { ptr, i32 } %115, 0
  store ptr %116, ptr %11, align 8
  %117 = extractvalue { ptr, i32 } %115, 1
  store i32 %117, ptr %12, align 4
  br label %127

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

122:                                              ; preds = %92
  %123 = landingpad { ptr, i32 }
          cleanup
  %124 = extractvalue { ptr, i32 } %123, 0
  store ptr %124, ptr %11, align 8
  %125 = extractvalue { ptr, i32 } %123, 1
  store i32 %125, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #9
  br label %126

126:                                              ; preds = %122, %118
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #9
  br label %127

127:                                              ; preds = %126, %114
  call void @llvm.lifetime.end.p0(i64 32, ptr %17) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %16) #9
  br label %492

128:                                              ; preds = %94
  %129 = landingpad { ptr, i32 }
          cleanup
  %130 = extractvalue { ptr, i32 } %129, 0
  store ptr %130, ptr %11, align 8
  %131 = extractvalue { ptr, i32 } %129, 1
  store i32 %131, ptr %12, align 4
  br label %136

132:                                              ; preds = %96
  %133 = landingpad { ptr, i32 }
          cleanup
  %134 = extractvalue { ptr, i32 } %133, 0
  store ptr %134, ptr %11, align 8
  %135 = extractvalue { ptr, i32 } %133, 1
  store i32 %135, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #9
  br label %136

136:                                              ; preds = %132, %128
  call void @llvm.lifetime.end.p0(i64 32, ptr %18) #9
  br label %492

137:                                              ; preds = %83
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #9
  store i32 3, ptr %20, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 56, ptr %21) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %22) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %23) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %23) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %22, ptr noundef @.str.9, ptr noundef nonnull align 1 dereferenceable(1) %23)
          to label %138 unwind label %183

138:                                              ; preds = %137
  %139 = load i32, ptr %8, align 4, !tbaa !9
  invoke void @_ZN7SGTELIB6MatrixC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEii(ptr noundef nonnull align 8 dereferenceable(56) %21, ptr noundef nonnull align 8 dereferenceable(32) %22, i32 noundef 3, i32 noundef %139)
          to label %140 unwind label %187

140:                                              ; preds = %138
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %23) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %23) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %22) #9
  invoke void @_ZN7SGTELIB6Matrix10set_randomEddb(ptr noundef nonnull align 8 dereferenceable(56) %21, double noundef -5.000000e+00, double noundef 5.000000e+00, i1 noundef zeroext false)
          to label %141 unwind label %192

141:                                              ; preds = %140
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #9
  %142 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 56) #10
          to label %143 unwind label %196

143:                                              ; preds = %141
  store i1 true, ptr %27, align 1
  call void @llvm.lifetime.start.p0(i64 32, ptr %25) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %26) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %26) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %25, ptr noundef @.str.45, ptr noundef nonnull align 1 dereferenceable(1) %26)
          to label %144 unwind label %200

144:                                              ; preds = %143
  %145 = load i32, ptr %10, align 4, !tbaa !9
  invoke void @_ZN7SGTELIB6MatrixC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEii(ptr noundef nonnull align 8 dereferenceable(56) %142, ptr noundef nonnull align 8 dereferenceable(32) %25, i32 noundef 3, i32 noundef %145)
          to label %146 unwind label %204

146:                                              ; preds = %144
  store i1 false, ptr %27, align 1
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %26) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %26) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %25) #9
  store ptr %142, ptr %24, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #9
  %147 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 56) #10
          to label %148 unwind label %212

148:                                              ; preds = %146
  store i1 true, ptr %31, align 1
  call void @llvm.lifetime.start.p0(i64 32, ptr %29) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %30) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %30) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %29, ptr noundef @.str.46, ptr noundef nonnull align 1 dereferenceable(1) %30)
          to label %149 unwind label %216

149:                                              ; preds = %148
  %150 = load i32, ptr %10, align 4, !tbaa !9
  invoke void @_ZN7SGTELIB6MatrixC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEii(ptr noundef nonnull align 8 dereferenceable(56) %147, ptr noundef nonnull align 8 dereferenceable(32) %29, i32 noundef 3, i32 noundef %150)
          to label %151 unwind label %220

151:                                              ; preds = %149
  store i1 false, ptr %31, align 1
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %30) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %30) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %29) #9
  store ptr %147, ptr %28, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #9
  %152 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 56) #10
          to label %153 unwind label %228

153:                                              ; preds = %151
  store i1 true, ptr %35, align 1
  call void @llvm.lifetime.start.p0(i64 32, ptr %33) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %34) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %34) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %33, ptr noundef @.str.47, ptr noundef nonnull align 1 dereferenceable(1) %34)
          to label %154 unwind label %232

154:                                              ; preds = %153
  %155 = load i32, ptr %10, align 4, !tbaa !9
  invoke void @_ZN7SGTELIB6MatrixC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEii(ptr noundef nonnull align 8 dereferenceable(56) %152, ptr noundef nonnull align 8 dereferenceable(32) %33, i32 noundef 3, i32 noundef %155)
          to label %156 unwind label %236

156:                                              ; preds = %154
  store i1 false, ptr %35, align 1
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %33) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %34) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %34) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %33) #9
  store ptr %152, ptr %32, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #9
  %157 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 56) #10
          to label %158 unwind label %244

158:                                              ; preds = %156
  store i1 true, ptr %39, align 1
  call void @llvm.lifetime.start.p0(i64 32, ptr %37) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %38) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %38) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %37, ptr noundef @.str.48, ptr noundef nonnull align 1 dereferenceable(1) %38)
          to label %159 unwind label %248

159:                                              ; preds = %158
  %160 = load i32, ptr %10, align 4, !tbaa !9
  invoke void @_ZN7SGTELIB6MatrixC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEii(ptr noundef nonnull align 8 dereferenceable(56) %157, ptr noundef nonnull align 8 dereferenceable(32) %37, i32 noundef 3, i32 noundef %160)
          to label %161 unwind label %252

161:                                              ; preds = %159
  store i1 false, ptr %39, align 1
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %38) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %38) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %37) #9
  store ptr %157, ptr %36, align 8, !tbaa !5
  %162 = load ptr, ptr %14, align 8, !tbaa !5
  %163 = load ptr, ptr %24, align 8, !tbaa !5
  %164 = load ptr, ptr %28, align 8, !tbaa !5
  %165 = load ptr, ptr %32, align 8, !tbaa !5
  %166 = load ptr, ptr %36, align 8, !tbaa !5
  invoke void @_ZN7SGTELIB9Surrogate7predictERKNS_6MatrixEPS1_S4_S4_S4_(ptr noundef nonnull align 8 dereferenceable(985) %162, ptr noundef nonnull align 8 dereferenceable(56) %21, ptr noundef %163, ptr noundef %164, ptr noundef %165, ptr noundef %166)
          to label %167 unwind label %244

167:                                              ; preds = %161
  call void @llvm.lifetime.start.p0(i64 504, ptr %40) #9
  call void @llvm.lifetime.start.p0(i64 56, ptr %41) #9
  %168 = load ptr, ptr %6, align 8, !tbaa !5
  invoke void @_ZNK7SGTELIB6Matrix7get_rowEi(ptr dead_on_unwind writable sret(%"class.SGTELIB::Matrix") align 8 %41, ptr noundef nonnull align 8 dereferenceable(56) %168, i32 noundef 0)
          to label %169 unwind label %260

169:                                              ; preds = %167
  call void @llvm.lifetime.start.p0(i64 56, ptr %42) #9
  invoke void @_ZNK7SGTELIB6Matrix7get_rowEi(ptr dead_on_unwind writable sret(%"class.SGTELIB::Matrix") align 8 %42, ptr noundef nonnull align 8 dereferenceable(56) %9, i32 noundef 0)
          to label %170 unwind label %264

170:                                              ; preds = %169
  invoke void @_ZN7SGTELIB11TrainingSetC1ERKNS_6MatrixES3_(ptr noundef nonnull align 8 dereferenceable(504) %40, ptr noundef nonnull align 8 dereferenceable(56) %41, ptr noundef nonnull align 8 dereferenceable(56) %42)
          to label %171 unwind label %268

171:                                              ; preds = %170
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %42) #9
  call void @llvm.lifetime.end.p0(i64 56, ptr %42) #9
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %41) #9
  call void @llvm.lifetime.end.p0(i64 56, ptr %41) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #9
  %172 = load ptr, ptr %5, align 8, !tbaa !5
  %173 = invoke noundef ptr @_ZN7SGTELIB17Surrogate_FactoryERNS_11TrainingSetERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(504) %40, ptr noundef nonnull align 8 dereferenceable(32) %172)
          to label %174 unwind label %274

174:                                              ; preds = %171
  store ptr %173, ptr %43, align 8, !tbaa !5
  %175 = load ptr, ptr %43, align 8, !tbaa !5
  %176 = invoke noundef zeroext i1 @_ZN7SGTELIB9Surrogate5buildEv(ptr noundef nonnull align 8 dereferenceable(985) %175)
          to label %177 unwind label %274

177:                                              ; preds = %174
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #9
  store i32 1, ptr %44, align 4, !tbaa !9
  br label %178

178:                                              ; preds = %289, %177
  %179 = load i32, ptr %44, align 4, !tbaa !9
  %180 = load i32, ptr %7, align 4, !tbaa !9
  %181 = icmp slt i32 %179, %180
  br i1 %181, label %278, label %182

182:                                              ; preds = %178
  store i32 2, ptr %19, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #9
  br label %311

183:                                              ; preds = %137
  %184 = landingpad { ptr, i32 }
          cleanup
  %185 = extractvalue { ptr, i32 } %184, 0
  store ptr %185, ptr %11, align 8
  %186 = extractvalue { ptr, i32 } %184, 1
  store i32 %186, ptr %12, align 4
  br label %191

187:                                              ; preds = %138
  %188 = landingpad { ptr, i32 }
          cleanup
  %189 = extractvalue { ptr, i32 } %188, 0
  store ptr %189, ptr %11, align 8
  %190 = extractvalue { ptr, i32 } %188, 1
  store i32 %190, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #9
  br label %191

191:                                              ; preds = %187, %183
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %23) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %23) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %22) #9
  br label %490

192:                                              ; preds = %140
  %193 = landingpad { ptr, i32 }
          cleanup
  %194 = extractvalue { ptr, i32 } %193, 0
  store ptr %194, ptr %11, align 8
  %195 = extractvalue { ptr, i32 } %193, 1
  store i32 %195, ptr %12, align 4
  br label %489

196:                                              ; preds = %141
  %197 = landingpad { ptr, i32 }
          cleanup
  %198 = extractvalue { ptr, i32 } %197, 0
  store ptr %198, ptr %11, align 8
  %199 = extractvalue { ptr, i32 } %197, 1
  store i32 %199, ptr %12, align 4
  br label %488

200:                                              ; preds = %143
  %201 = landingpad { ptr, i32 }
          cleanup
  %202 = extractvalue { ptr, i32 } %201, 0
  store ptr %202, ptr %11, align 8
  %203 = extractvalue { ptr, i32 } %201, 1
  store i32 %203, ptr %12, align 4
  br label %208

204:                                              ; preds = %144
  %205 = landingpad { ptr, i32 }
          cleanup
  %206 = extractvalue { ptr, i32 } %205, 0
  store ptr %206, ptr %11, align 8
  %207 = extractvalue { ptr, i32 } %205, 1
  store i32 %207, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #9
  br label %208

208:                                              ; preds = %204, %200
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %26) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %26) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %25) #9
  %209 = load i1, ptr %27, align 1
  br i1 %209, label %210, label %211

210:                                              ; preds = %208
  call void @_ZdlPvm(ptr noundef %142, i64 noundef 56) #11
  br label %211

211:                                              ; preds = %210, %208
  br label %488

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

216:                                              ; preds = %148
  %217 = landingpad { ptr, i32 }
          cleanup
  %218 = extractvalue { ptr, i32 } %217, 0
  store ptr %218, ptr %11, align 8
  %219 = extractvalue { ptr, i32 } %217, 1
  store i32 %219, ptr %12, align 4
  br label %224

220:                                              ; preds = %149
  %221 = landingpad { ptr, i32 }
          cleanup
  %222 = extractvalue { ptr, i32 } %221, 0
  store ptr %222, ptr %11, align 8
  %223 = extractvalue { ptr, i32 } %221, 1
  store i32 %223, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #9
  br label %224

224:                                              ; preds = %220, %216
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %30) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %30) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %29) #9
  %225 = load i1, ptr %31, align 1
  br i1 %225, label %226, label %227

226:                                              ; preds = %224
  call void @_ZdlPvm(ptr noundef %147, i64 noundef 56) #11
  br label %227

227:                                              ; preds = %226, %224
  br label %487

228:                                              ; preds = %151
  %229 = landingpad { ptr, i32 }
          cleanup
  %230 = extractvalue { ptr, i32 } %229, 0
  store ptr %230, ptr %11, align 8
  %231 = extractvalue { ptr, i32 } %229, 1
  store i32 %231, ptr %12, align 4
  br label %486

232:                                              ; preds = %153
  %233 = landingpad { ptr, i32 }
          cleanup
  %234 = extractvalue { ptr, i32 } %233, 0
  store ptr %234, ptr %11, align 8
  %235 = extractvalue { ptr, i32 } %233, 1
  store i32 %235, ptr %12, align 4
  br label %240

236:                                              ; preds = %154
  %237 = landingpad { ptr, i32 }
          cleanup
  %238 = extractvalue { ptr, i32 } %237, 0
  store ptr %238, ptr %11, align 8
  %239 = extractvalue { ptr, i32 } %237, 1
  store i32 %239, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %33) #9
  br label %240

240:                                              ; preds = %236, %232
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %34) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %34) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %33) #9
  %241 = load i1, ptr %35, align 1
  br i1 %241, label %242, label %243

242:                                              ; preds = %240
  call void @_ZdlPvm(ptr noundef %152, i64 noundef 56) #11
  br label %243

243:                                              ; preds = %242, %240
  br label %486

244:                                              ; preds = %161, %156
  %245 = landingpad { ptr, i32 }
          cleanup
  %246 = extractvalue { ptr, i32 } %245, 0
  store ptr %246, ptr %11, align 8
  %247 = extractvalue { ptr, i32 } %245, 1
  store i32 %247, ptr %12, align 4
  br label %485

248:                                              ; preds = %158
  %249 = landingpad { ptr, i32 }
          cleanup
  %250 = extractvalue { ptr, i32 } %249, 0
  store ptr %250, ptr %11, align 8
  %251 = extractvalue { ptr, i32 } %249, 1
  store i32 %251, ptr %12, align 4
  br label %256

252:                                              ; preds = %159
  %253 = landingpad { ptr, i32 }
          cleanup
  %254 = extractvalue { ptr, i32 } %253, 0
  store ptr %254, ptr %11, align 8
  %255 = extractvalue { ptr, i32 } %253, 1
  store i32 %255, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #9
  br label %256

256:                                              ; preds = %252, %248
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %38) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %38) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %37) #9
  %257 = load i1, ptr %39, align 1
  br i1 %257, label %258, label %259

258:                                              ; preds = %256
  call void @_ZdlPvm(ptr noundef %157, i64 noundef 56) #11
  br label %259

259:                                              ; preds = %258, %256
  br label %485

260:                                              ; preds = %167
  %261 = landingpad { ptr, i32 }
          cleanup
  %262 = extractvalue { ptr, i32 } %261, 0
  store ptr %262, ptr %11, align 8
  %263 = extractvalue { ptr, i32 } %261, 1
  store i32 %263, ptr %12, align 4
  br label %273

264:                                              ; preds = %169
  %265 = landingpad { ptr, i32 }
          cleanup
  %266 = extractvalue { ptr, i32 } %265, 0
  store ptr %266, ptr %11, align 8
  %267 = extractvalue { ptr, i32 } %265, 1
  store i32 %267, ptr %12, align 4
  br label %272

268:                                              ; preds = %170
  %269 = landingpad { ptr, i32 }
          cleanup
  %270 = extractvalue { ptr, i32 } %269, 0
  store ptr %270, ptr %11, align 8
  %271 = extractvalue { ptr, i32 } %269, 1
  store i32 %271, ptr %12, align 4
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %42) #9
  br label %272

272:                                              ; preds = %268, %264
  call void @llvm.lifetime.end.p0(i64 56, ptr %42) #9
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %41) #9
  br label %273

273:                                              ; preds = %272, %260
  call void @llvm.lifetime.end.p0(i64 56, ptr %41) #9
  br label %484

274:                                              ; preds = %174, %171
  %275 = landingpad { ptr, i32 }
          cleanup
  %276 = extractvalue { ptr, i32 } %275, 0
  store ptr %276, ptr %11, align 8
  %277 = extractvalue { ptr, i32 } %275, 1
  store i32 %277, ptr %12, align 4
  br label %483

278:                                              ; preds = %178
  call void @llvm.lifetime.start.p0(i64 56, ptr %45) #9
  %279 = load ptr, ptr %6, align 8, !tbaa !5
  %280 = load i32, ptr %44, align 4, !tbaa !9
  invoke void @_ZNK7SGTELIB6Matrix7get_rowEi(ptr dead_on_unwind writable sret(%"class.SGTELIB::Matrix") align 8 %45, ptr noundef nonnull align 8 dereferenceable(56) %279, i32 noundef %280)
          to label %281 unwind label %292

281:                                              ; preds = %278
  call void @llvm.lifetime.start.p0(i64 56, ptr %46) #9
  %282 = load i32, ptr %44, align 4, !tbaa !9
  invoke void @_ZNK7SGTELIB6Matrix7get_rowEi(ptr dead_on_unwind writable sret(%"class.SGTELIB::Matrix") align 8 %46, ptr noundef nonnull align 8 dereferenceable(56) %9, i32 noundef %282)
          to label %283 unwind label %296

283:                                              ; preds = %281
  %284 = invoke noundef zeroext i1 @_ZN7SGTELIB11TrainingSet10add_pointsERKNS_6MatrixES3_(ptr noundef nonnull align 8 dereferenceable(504) %40, ptr noundef nonnull align 8 dereferenceable(56) %45, ptr noundef nonnull align 8 dereferenceable(56) %46)
          to label %285 unwind label %300

285:                                              ; preds = %283
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %46) #9
  call void @llvm.lifetime.end.p0(i64 56, ptr %46) #9
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %45) #9
  call void @llvm.lifetime.end.p0(i64 56, ptr %45) #9
  %286 = load ptr, ptr %43, align 8, !tbaa !5
  %287 = invoke noundef zeroext i1 @_ZN7SGTELIB9Surrogate5buildEv(ptr noundef nonnull align 8 dereferenceable(985) %286)
          to label %288 unwind label %306

288:                                              ; preds = %285
  br label %289

289:                                              ; preds = %288
  %290 = load i32, ptr %44, align 4, !tbaa !9
  %291 = add nsw i32 %290, 1
  store i32 %291, ptr %44, align 4, !tbaa !9
  br label %178, !llvm.loop !15

292:                                              ; preds = %278
  %293 = landingpad { ptr, i32 }
          cleanup
  %294 = extractvalue { ptr, i32 } %293, 0
  store ptr %294, ptr %11, align 8
  %295 = extractvalue { ptr, i32 } %293, 1
  store i32 %295, ptr %12, align 4
  br label %305

296:                                              ; preds = %281
  %297 = landingpad { ptr, i32 }
          cleanup
  %298 = extractvalue { ptr, i32 } %297, 0
  store ptr %298, ptr %11, align 8
  %299 = extractvalue { ptr, i32 } %297, 1
  store i32 %299, ptr %12, align 4
  br label %304

300:                                              ; preds = %283
  %301 = landingpad { ptr, i32 }
          cleanup
  %302 = extractvalue { ptr, i32 } %301, 0
  store ptr %302, ptr %11, align 8
  %303 = extractvalue { ptr, i32 } %301, 1
  store i32 %303, ptr %12, align 4
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %46) #9
  br label %304

304:                                              ; preds = %300, %296
  call void @llvm.lifetime.end.p0(i64 56, ptr %46) #9
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %45) #9
  br label %305

305:                                              ; preds = %304, %292
  call void @llvm.lifetime.end.p0(i64 56, ptr %45) #9
  br label %310

306:                                              ; preds = %285
  %307 = landingpad { ptr, i32 }
          cleanup
  %308 = extractvalue { ptr, i32 } %307, 0
  store ptr %308, ptr %11, align 8
  %309 = extractvalue { ptr, i32 } %307, 1
  store i32 %309, ptr %12, align 4
  br label %310

310:                                              ; preds = %306, %305
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #9
  br label %483

311:                                              ; preds = %182
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #9
  %312 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 56) #10
          to label %313 unwind label %411

313:                                              ; preds = %311
  store i1 true, ptr %50, align 1
  call void @llvm.lifetime.start.p0(i64 32, ptr %48) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %49) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %49) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %48, ptr noundef @.str.69, ptr noundef nonnull align 1 dereferenceable(1) %49)
          to label %314 unwind label %415

314:                                              ; preds = %313
  %315 = load i32, ptr %10, align 4, !tbaa !9
  invoke void @_ZN7SGTELIB6MatrixC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEii(ptr noundef nonnull align 8 dereferenceable(56) %312, ptr noundef nonnull align 8 dereferenceable(32) %48, i32 noundef 3, i32 noundef %315)
          to label %316 unwind label %419

316:                                              ; preds = %314
  store i1 false, ptr %50, align 1
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %49) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %49) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %48) #9
  store ptr %312, ptr %47, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #9
  %317 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 56) #10
          to label %318 unwind label %427

318:                                              ; preds = %316
  store i1 true, ptr %54, align 1
  call void @llvm.lifetime.start.p0(i64 32, ptr %52) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %53) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %53) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %52, ptr noundef @.str.70, ptr noundef nonnull align 1 dereferenceable(1) %53)
          to label %319 unwind label %431

319:                                              ; preds = %318
  %320 = load i32, ptr %10, align 4, !tbaa !9
  invoke void @_ZN7SGTELIB6MatrixC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEii(ptr noundef nonnull align 8 dereferenceable(56) %317, ptr noundef nonnull align 8 dereferenceable(32) %52, i32 noundef 3, i32 noundef %320)
          to label %321 unwind label %435

321:                                              ; preds = %319
  store i1 false, ptr %54, align 1
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %52) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %53) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %53) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %52) #9
  store ptr %317, ptr %51, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #9
  %322 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 56) #10
          to label %323 unwind label %443

323:                                              ; preds = %321
  store i1 true, ptr %58, align 1
  call void @llvm.lifetime.start.p0(i64 32, ptr %56) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %57) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %57) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %56, ptr noundef @.str.71, ptr noundef nonnull align 1 dereferenceable(1) %57)
          to label %324 unwind label %447

324:                                              ; preds = %323
  %325 = load i32, ptr %10, align 4, !tbaa !9
  invoke void @_ZN7SGTELIB6MatrixC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEii(ptr noundef nonnull align 8 dereferenceable(56) %322, ptr noundef nonnull align 8 dereferenceable(32) %56, i32 noundef 3, i32 noundef %325)
          to label %326 unwind label %451

326:                                              ; preds = %324
  store i1 false, ptr %58, align 1
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %56) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %57) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %57) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %56) #9
  store ptr %322, ptr %55, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #9
  %327 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 56) #10
          to label %328 unwind label %459

328:                                              ; preds = %326
  store i1 true, ptr %62, align 1
  call void @llvm.lifetime.start.p0(i64 32, ptr %60) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %61) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %61) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %60, ptr noundef @.str.72, ptr noundef nonnull align 1 dereferenceable(1) %61)
          to label %329 unwind label %463

329:                                              ; preds = %328
  %330 = load i32, ptr %10, align 4, !tbaa !9
  invoke void @_ZN7SGTELIB6MatrixC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEii(ptr noundef nonnull align 8 dereferenceable(56) %327, ptr noundef nonnull align 8 dereferenceable(32) %60, i32 noundef 3, i32 noundef %330)
          to label %331 unwind label %467

331:                                              ; preds = %329
  store i1 false, ptr %62, align 1
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %60) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %61) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %61) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %60) #9
  store ptr %327, ptr %59, align 8, !tbaa !5
  %332 = load ptr, ptr %43, align 8, !tbaa !5
  %333 = load ptr, ptr %47, align 8, !tbaa !5
  %334 = load ptr, ptr %51, align 8, !tbaa !5
  %335 = load ptr, ptr %55, align 8, !tbaa !5
  %336 = load ptr, ptr %59, align 8, !tbaa !5
  invoke void @_ZN7SGTELIB9Surrogate7predictERKNS_6MatrixEPS1_S4_S4_S4_(ptr noundef nonnull align 8 dereferenceable(985) %332, ptr noundef nonnull align 8 dereferenceable(56) %21, ptr noundef %333, ptr noundef %334, ptr noundef %335, ptr noundef %336)
          to label %337 unwind label %459

337:                                              ; preds = %331
  %338 = load ptr, ptr %24, align 8, !tbaa !5
  %339 = load ptr, ptr %47, align 8, !tbaa !5
  invoke void @_ZN7SGTELIB17check_matrix_diffEPKNS_6MatrixES2_(ptr noundef %338, ptr noundef %339)
          to label %340 unwind label %459

340:                                              ; preds = %337
  %341 = load ptr, ptr %28, align 8, !tbaa !5
  %342 = load ptr, ptr %51, align 8, !tbaa !5
  invoke void @_ZN7SGTELIB17check_matrix_diffEPKNS_6MatrixES2_(ptr noundef %341, ptr noundef %342)
          to label %343 unwind label %459

343:                                              ; preds = %340
  %344 = load ptr, ptr %32, align 8, !tbaa !5
  %345 = load ptr, ptr %55, align 8, !tbaa !5
  invoke void @_ZN7SGTELIB17check_matrix_diffEPKNS_6MatrixES2_(ptr noundef %344, ptr noundef %345)
          to label %346 unwind label %459

346:                                              ; preds = %343
  %347 = load ptr, ptr %36, align 8, !tbaa !5
  %348 = load ptr, ptr %59, align 8, !tbaa !5
  invoke void @_ZN7SGTELIB17check_matrix_diffEPKNS_6MatrixES2_(ptr noundef %347, ptr noundef %348)
          to label %349 unwind label %459

349:                                              ; preds = %346
  %350 = load ptr, ptr %14, align 8, !tbaa !5
  invoke void @_ZN7SGTELIB16surrogate_deleteEPNS_9SurrogateE(ptr noundef %350)
          to label %351 unwind label %459

351:                                              ; preds = %349
  %352 = load ptr, ptr %43, align 8, !tbaa !5
  invoke void @_ZN7SGTELIB16surrogate_deleteEPNS_9SurrogateE(ptr noundef %352)
          to label %353 unwind label %459

353:                                              ; preds = %351
  %354 = load ptr, ptr %24, align 8, !tbaa !5
  %355 = icmp eq ptr %354, null
  br i1 %355, label %360, label %356

356:                                              ; preds = %353
  %357 = load ptr, ptr %354, align 8, !tbaa !17
  %358 = getelementptr inbounds ptr, ptr %357, i64 1
  %359 = load ptr, ptr %358, align 8
  call void %359(ptr noundef nonnull align 8 dereferenceable(56) %354) #9
  br label %360

360:                                              ; preds = %356, %353
  %361 = load ptr, ptr %28, align 8, !tbaa !5
  %362 = icmp eq ptr %361, null
  br i1 %362, label %367, label %363

363:                                              ; preds = %360
  %364 = load ptr, ptr %361, align 8, !tbaa !17
  %365 = getelementptr inbounds ptr, ptr %364, i64 1
  %366 = load ptr, ptr %365, align 8
  call void %366(ptr noundef nonnull align 8 dereferenceable(56) %361) #9
  br label %367

367:                                              ; preds = %363, %360
  %368 = load ptr, ptr %32, align 8, !tbaa !5
  %369 = icmp eq ptr %368, null
  br i1 %369, label %374, label %370

370:                                              ; preds = %367
  %371 = load ptr, ptr %368, align 8, !tbaa !17
  %372 = getelementptr inbounds ptr, ptr %371, i64 1
  %373 = load ptr, ptr %372, align 8
  call void %373(ptr noundef nonnull align 8 dereferenceable(56) %368) #9
  br label %374

374:                                              ; preds = %370, %367
  %375 = load ptr, ptr %36, align 8, !tbaa !5
  %376 = icmp eq ptr %375, null
  br i1 %376, label %381, label %377

377:                                              ; preds = %374
  %378 = load ptr, ptr %375, align 8, !tbaa !17
  %379 = getelementptr inbounds ptr, ptr %378, i64 1
  %380 = load ptr, ptr %379, align 8
  call void %380(ptr noundef nonnull align 8 dereferenceable(56) %375) #9
  br label %381

381:                                              ; preds = %377, %374
  %382 = load ptr, ptr %47, align 8, !tbaa !5
  %383 = icmp eq ptr %382, null
  br i1 %383, label %388, label %384

384:                                              ; preds = %381
  %385 = load ptr, ptr %382, align 8, !tbaa !17
  %386 = getelementptr inbounds ptr, ptr %385, i64 1
  %387 = load ptr, ptr %386, align 8
  call void %387(ptr noundef nonnull align 8 dereferenceable(56) %382) #9
  br label %388

388:                                              ; preds = %384, %381
  %389 = load ptr, ptr %51, align 8, !tbaa !5
  %390 = icmp eq ptr %389, null
  br i1 %390, label %395, label %391

391:                                              ; preds = %388
  %392 = load ptr, ptr %389, align 8, !tbaa !17
  %393 = getelementptr inbounds ptr, ptr %392, i64 1
  %394 = load ptr, ptr %393, align 8
  call void %394(ptr noundef nonnull align 8 dereferenceable(56) %389) #9
  br label %395

395:                                              ; preds = %391, %388
  %396 = load ptr, ptr %55, align 8, !tbaa !5
  %397 = icmp eq ptr %396, null
  br i1 %397, label %402, label %398

398:                                              ; preds = %395
  %399 = load ptr, ptr %396, align 8, !tbaa !17
  %400 = getelementptr inbounds ptr, ptr %399, i64 1
  %401 = load ptr, ptr %400, align 8
  call void %401(ptr noundef nonnull align 8 dereferenceable(56) %396) #9
  br label %402

402:                                              ; preds = %398, %395
  %403 = load ptr, ptr %59, align 8, !tbaa !5
  %404 = icmp eq ptr %403, null
  br i1 %404, label %409, label %405

405:                                              ; preds = %402
  %406 = load ptr, ptr %403, align 8, !tbaa !17
  %407 = getelementptr inbounds ptr, ptr %406, i64 1
  %408 = load ptr, ptr %407, align 8
  call void %408(ptr noundef nonnull align 8 dereferenceable(56) %403) #9
  br label %409

409:                                              ; preds = %405, %402
  call void @llvm.lifetime.start.p0(i64 1, ptr %63) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %63) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.73, ptr noundef nonnull align 1 dereferenceable(1) %63)
          to label %410 unwind label %475

410:                                              ; preds = %409
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %63) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %63) #9
  store i32 1, ptr %19, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #9
  call void @_ZN7SGTELIB11TrainingSetD1Ev(ptr noundef nonnull align 8 dereferenceable(504) %40) #9
  call void @llvm.lifetime.end.p0(i64 504, ptr %40) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #9
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %21) #9
  call void @llvm.lifetime.end.p0(i64 56, ptr %21) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #9
  br label %491

411:                                              ; preds = %311
  %412 = landingpad { ptr, i32 }
          cleanup
  %413 = extractvalue { ptr, i32 } %412, 0
  store ptr %413, ptr %11, align 8
  %414 = extractvalue { ptr, i32 } %412, 1
  store i32 %414, ptr %12, align 4
  br label %482

415:                                              ; preds = %313
  %416 = landingpad { ptr, i32 }
          cleanup
  %417 = extractvalue { ptr, i32 } %416, 0
  store ptr %417, ptr %11, align 8
  %418 = extractvalue { ptr, i32 } %416, 1
  store i32 %418, ptr %12, align 4
  br label %423

419:                                              ; preds = %314
  %420 = landingpad { ptr, i32 }
          cleanup
  %421 = extractvalue { ptr, i32 } %420, 0
  store ptr %421, ptr %11, align 8
  %422 = extractvalue { ptr, i32 } %420, 1
  store i32 %422, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #9
  br label %423

423:                                              ; preds = %419, %415
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %49) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %49) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %48) #9
  %424 = load i1, ptr %50, align 1
  br i1 %424, label %425, label %426

425:                                              ; preds = %423
  call void @_ZdlPvm(ptr noundef %312, i64 noundef 56) #11
  br label %426

426:                                              ; preds = %425, %423
  br label %482

427:                                              ; preds = %316
  %428 = landingpad { ptr, i32 }
          cleanup
  %429 = extractvalue { ptr, i32 } %428, 0
  store ptr %429, ptr %11, align 8
  %430 = extractvalue { ptr, i32 } %428, 1
  store i32 %430, ptr %12, align 4
  br label %481

431:                                              ; preds = %318
  %432 = landingpad { ptr, i32 }
          cleanup
  %433 = extractvalue { ptr, i32 } %432, 0
  store ptr %433, ptr %11, align 8
  %434 = extractvalue { ptr, i32 } %432, 1
  store i32 %434, ptr %12, align 4
  br label %439

435:                                              ; preds = %319
  %436 = landingpad { ptr, i32 }
          cleanup
  %437 = extractvalue { ptr, i32 } %436, 0
  store ptr %437, ptr %11, align 8
  %438 = extractvalue { ptr, i32 } %436, 1
  store i32 %438, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %52) #9
  br label %439

439:                                              ; preds = %435, %431
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %53) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %53) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %52) #9
  %440 = load i1, ptr %54, align 1
  br i1 %440, label %441, label %442

441:                                              ; preds = %439
  call void @_ZdlPvm(ptr noundef %317, i64 noundef 56) #11
  br label %442

442:                                              ; preds = %441, %439
  br label %481

443:                                              ; preds = %321
  %444 = landingpad { ptr, i32 }
          cleanup
  %445 = extractvalue { ptr, i32 } %444, 0
  store ptr %445, ptr %11, align 8
  %446 = extractvalue { ptr, i32 } %444, 1
  store i32 %446, ptr %12, align 4
  br label %480

447:                                              ; preds = %323
  %448 = landingpad { ptr, i32 }
          cleanup
  %449 = extractvalue { ptr, i32 } %448, 0
  store ptr %449, ptr %11, align 8
  %450 = extractvalue { ptr, i32 } %448, 1
  store i32 %450, ptr %12, align 4
  br label %455

451:                                              ; preds = %324
  %452 = landingpad { ptr, i32 }
          cleanup
  %453 = extractvalue { ptr, i32 } %452, 0
  store ptr %453, ptr %11, align 8
  %454 = extractvalue { ptr, i32 } %452, 1
  store i32 %454, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %56) #9
  br label %455

455:                                              ; preds = %451, %447
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %57) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %57) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %56) #9
  %456 = load i1, ptr %58, align 1
  br i1 %456, label %457, label %458

457:                                              ; preds = %455
  call void @_ZdlPvm(ptr noundef %322, i64 noundef 56) #11
  br label %458

458:                                              ; preds = %457, %455
  br label %480

459:                                              ; preds = %351, %349, %346, %343, %340, %337, %331, %326
  %460 = landingpad { ptr, i32 }
          cleanup
  %461 = extractvalue { ptr, i32 } %460, 0
  store ptr %461, ptr %11, align 8
  %462 = extractvalue { ptr, i32 } %460, 1
  store i32 %462, ptr %12, align 4
  br label %479

463:                                              ; preds = %328
  %464 = landingpad { ptr, i32 }
          cleanup
  %465 = extractvalue { ptr, i32 } %464, 0
  store ptr %465, ptr %11, align 8
  %466 = extractvalue { ptr, i32 } %464, 1
  store i32 %466, ptr %12, align 4
  br label %471

467:                                              ; preds = %329
  %468 = landingpad { ptr, i32 }
          cleanup
  %469 = extractvalue { ptr, i32 } %468, 0
  store ptr %469, ptr %11, align 8
  %470 = extractvalue { ptr, i32 } %468, 1
  store i32 %470, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %60) #9
  br label %471

471:                                              ; preds = %467, %463
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %61) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %61) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %60) #9
  %472 = load i1, ptr %62, align 1
  br i1 %472, label %473, label %474

473:                                              ; preds = %471
  call void @_ZdlPvm(ptr noundef %327, i64 noundef 56) #11
  br label %474

474:                                              ; preds = %473, %471
  br label %479

475:                                              ; preds = %409
  %476 = landingpad { ptr, i32 }
          cleanup
  %477 = extractvalue { ptr, i32 } %476, 0
  store ptr %477, ptr %11, align 8
  %478 = extractvalue { ptr, i32 } %476, 1
  store i32 %478, ptr %12, align 4
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %63) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %63) #9
  br label %479

479:                                              ; preds = %475, %474, %459
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #9
  br label %480

480:                                              ; preds = %479, %458, %443
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #9
  br label %481

481:                                              ; preds = %480, %442, %427
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #9
  br label %482

482:                                              ; preds = %481, %426, %411
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #9
  br label %483

483:                                              ; preds = %482, %310, %274
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #9
  call void @_ZN7SGTELIB11TrainingSetD1Ev(ptr noundef nonnull align 8 dereferenceable(504) %40) #9
  br label %484

484:                                              ; preds = %483, %273
  call void @llvm.lifetime.end.p0(i64 504, ptr %40) #9
  br label %485

485:                                              ; preds = %484, %259, %244
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #9
  br label %486

486:                                              ; preds = %485, %243, %228
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #9
  br label %487

487:                                              ; preds = %486, %227, %212
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #9
  br label %488

488:                                              ; preds = %487, %211, %196
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #9
  br label %489

489:                                              ; preds = %488, %192
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %21) #9
  br label %490

490:                                              ; preds = %489, %191
  call void @llvm.lifetime.end.p0(i64 56, ptr %21) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #9
  br label %492

491:                                              ; preds = %410, %97
  call void @llvm.lifetime.end.p0(i64 1, ptr %15) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #9
  call void @_ZN7SGTELIB11TrainingSetD1Ev(ptr noundef nonnull align 8 dereferenceable(504) %13) #9
  call void @llvm.lifetime.end.p0(i64 504, ptr %13) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #9
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %9) #9
  call void @llvm.lifetime.end.p0(i64 56, ptr %9) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #9
  ret void

492:                                              ; preds = %490, %136, %127, %110
  call void @llvm.lifetime.end.p0(i64 1, ptr %15) #9
  br label %493

493:                                              ; preds = %492, %106
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #9
  call void @_ZN7SGTELIB11TrainingSetD1Ev(ptr noundef nonnull align 8 dereferenceable(504) %13) #9
  br label %494

494:                                              ; preds = %493, %102
  call void @llvm.lifetime.end.p0(i64 504, ptr %13) #9
  br label %495

495:                                              ; preds = %494, %98
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #9
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %9) #9
  call void @llvm.lifetime.end.p0(i64 56, ptr %9) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #9
  br label %496

496:                                              ; preds = %495
  %497 = load ptr, ptr %11, align 8
  %498 = load i32, ptr %12, align 4
  %499 = insertvalue { ptr, i32 } poison, ptr %497, 0
  %500 = insertvalue { ptr, i32 } %499, i32 %498, 1
  resume { ptr, i32 } %500
}

declare noundef zeroext i1 @_ZN7SGTELIB11TrainingSet10add_pointsERKNS_6MatrixES3_(ptr noundef nonnull align 8 dereferenceable(504), ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 8 dereferenceable(56)) #4

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

attributes #0 = { 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 #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { 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 #4 = { "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 = { 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 #6 = { 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 #7 = { 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 #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 = { nounwind }
attributes #10 = { builtin allocsize(0) }
attributes #11 = { 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, !12, i64 0}
!12 = !{!"bool", !7, i64 0}
!13 = !{i8 0, i8 2}
!14 = !{}
!15 = distinct !{!15, !16}
!16 = !{!"llvm.loop.mustprogress"}
!17 = !{!18, !18, i64 0}
!18 = !{!"vtable pointer", !8, i64 0}


; 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.SGTELIB::Matrix" = type { ptr, %"class.std::__cxx11::basic_string", i32, i32, 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.SGTELIB::TrainingSet" = type { ptr, i32, i32, i32, i8, ptr, i8, i32, double, double, i32, %"class.SGTELIB::Matrix", %"class.SGTELIB::Matrix", %"class.SGTELIB::Matrix", %"class.SGTELIB::Matrix", %"class.SGTELIB::Matrix", i32, i32, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, double }
%"class.std::allocator" = type { i8 }

@_ZSt4cout = external global %"class.std::basic_ostream", align 8
@.str.6 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [56 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.46 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.47 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.48 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.67 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.68 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.69 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.70 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.71 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.72 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.73 = external hidden unnamed_addr constant [16 x i8], align 1

; 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 #0

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef, ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #3 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 #4

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

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

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

; Function Attrs: nobuiltin nounwind
declare void @_ZdlPvm(ptr noundef, i64 noundef) local_unnamed_addr #6

declare void @_ZN7SGTELIB6Matrix10set_randomEddb(ptr noundef nonnull align 8 dereferenceable(56), double noundef, double noundef, i1 noundef zeroext) local_unnamed_addr #4

declare void @_ZN7SGTELIB11TrainingSetC1ERKNS_6MatrixES3_(ptr noundef nonnull align 8 dereferenceable(504), ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 8 dereferenceable(56)) unnamed_addr #4

declare noundef ptr @_ZN7SGTELIB17Surrogate_FactoryERNS_11TrainingSetERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(504), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #4

declare noundef zeroext i1 @_ZN7SGTELIB9Surrogate5buildEv(ptr noundef nonnull align 8 dereferenceable(985)) local_unnamed_addr #4

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

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 #4

; Function Attrs: nounwind
declare void @_ZN7SGTELIB11TrainingSetD1Ev(ptr noundef nonnull align 8 dereferenceable(504)) unnamed_addr #7

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

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

declare void @_ZN7SGTELIB16surrogate_deleteEPNS_9SurrogateE(ptr noundef) local_unnamed_addr #4

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN7SGTELIB14test_functionsERKNS_6MatrixE(ptr dead_on_unwind noalias writable sret(%"class.SGTELIB::Matrix") align 8, ptr noundef nonnull align 8 dereferenceable(56)) local_unnamed_addr #3

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

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

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

declare void @_ZN7SGTELIB9Surrogate7predictERKNS_6MatrixEPS1_S4_S4_S4_(ptr noundef nonnull align 8 dereferenceable(985), ptr noundef nonnull align 8 dereferenceable(56), ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #4

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN7SGTELIB17check_matrix_diffEPKNS_6MatrixES2_(ptr noundef, ptr noundef) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN7SGTELIB11test_updateERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_6MatrixE(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 8 dereferenceable(32) %1, ptr noundef nonnull align 8 dereferenceable(56) %2) local_unnamed_addr #3 personality ptr @__gxx_personality_v0 {
  %4 = alloca %"class.SGTELIB::Matrix", align 8
  %5 = alloca %"class.SGTELIB::TrainingSet", align 8
  %6 = alloca %"class.std::__cxx11::basic_string", align 8
  %7 = alloca %"class.std::__cxx11::basic_string", align 8
  %8 = alloca %"class.std::__cxx11::basic_string", align 8
  %9 = alloca %"class.SGTELIB::Matrix", align 8
  %10 = alloca %"class.std::__cxx11::basic_string", align 8
  %11 = alloca %"class.std::allocator", align 1
  %12 = alloca %"class.std::__cxx11::basic_string", align 8
  %13 = alloca %"class.std::allocator", align 1
  %14 = alloca %"class.std::__cxx11::basic_string", align 8
  %15 = alloca %"class.std::allocator", align 1
  %16 = alloca %"class.std::__cxx11::basic_string", align 8
  %17 = alloca %"class.std::allocator", align 1
  %18 = alloca %"class.std::__cxx11::basic_string", align 8
  %19 = alloca %"class.std::allocator", align 1
  %20 = alloca %"class.SGTELIB::TrainingSet", align 8
  %21 = alloca %"class.SGTELIB::Matrix", align 8
  %22 = alloca %"class.SGTELIB::Matrix", align 8
  %23 = alloca %"class.SGTELIB::Matrix", align 8
  %24 = alloca %"class.SGTELIB::Matrix", align 8
  %25 = alloca %"class.std::__cxx11::basic_string", align 8
  %26 = alloca %"class.std::allocator", align 1
  %27 = alloca %"class.std::__cxx11::basic_string", align 8
  %28 = alloca %"class.std::allocator", align 1
  %29 = alloca %"class.std::__cxx11::basic_string", align 8
  %30 = alloca %"class.std::allocator", align 1
  %31 = alloca %"class.std::__cxx11::basic_string", align 8
  %32 = alloca %"class.std::allocator", align 1
  %33 = alloca %"class.std::allocator", align 1
  %34 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.15)
  %35 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.67)
  %36 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsIcSt11char_traitsIcESaIcEERSt13basic_ostreamIT_T0_ES7_RKNSt7__cxx1112basic_stringIS4_S5_T1_EE(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull align 8 dereferenceable(32) %1)
  %37 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %36, ptr noundef nonnull @.str.6)
  %38 = tail call noundef i32 @_ZNK7SGTELIB6Matrix11get_nb_rowsEv(ptr noundef nonnull align 8 dereferenceable(56) %2)
  %39 = tail call noundef i32 @_ZNK7SGTELIB6Matrix11get_nb_colsEv(ptr noundef nonnull align 8 dereferenceable(56) %2)
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %4) #9
  call void @_ZN7SGTELIB14test_functionsERKNS_6MatrixE(ptr dead_on_unwind nonnull writable sret(%"class.SGTELIB::Matrix") align 8 %4, ptr noundef nonnull align 8 dereferenceable(56) %2)
  %40 = call noundef i32 @_ZNK7SGTELIB6Matrix11get_nb_colsEv(ptr noundef nonnull align 8 dereferenceable(56) %4)
  call void @llvm.lifetime.start.p0(i64 504, ptr nonnull %5) #9
  invoke void @_ZN7SGTELIB11TrainingSetC1ERKNS_6MatrixES3_(ptr noundef nonnull align 8 dereferenceable(504) %5, ptr noundef nonnull align 8 dereferenceable(56) %2, ptr noundef nonnull align 8 dereferenceable(56) %4)
          to label %41 unwind label %54

41:                                               ; preds = %3
  %42 = invoke noundef ptr @_ZN7SGTELIB17Surrogate_FactoryERNS_11TrainingSetERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(504) %5, ptr noundef nonnull align 8 dereferenceable(32) %1)
          to label %43 unwind label %56

43:                                               ; preds = %41
  %44 = invoke noundef zeroext i1 @_ZN7SGTELIB9Surrogate5buildEv(ptr noundef nonnull align 8 dereferenceable(985) %42)
          to label %45 unwind label %58

45:                                               ; preds = %43
  br i1 %44, label %73, label %46

46:                                               ; preds = %45
  invoke void @_ZN7SGTELIB16surrogate_deleteEPNS_9SurrogateE(ptr noundef nonnull %42)
          to label %47 unwind label %58

47:                                               ; preds = %46
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %6) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %7) #9
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_RKS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %7, ptr noundef nonnull @.str.68, ptr noundef nonnull align 8 dereferenceable(32) %1)
          to label %48 unwind label %60

48:                                               ; preds = %47
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %6, ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef nonnull @.str.32)
          to label %49 unwind label %62

49:                                               ; preds = %48
  %50 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsIcSt11char_traitsIcESaIcEERSt13basic_ostreamIT_T0_ES7_RKNSt7__cxx1112basic_stringIS4_S5_T1_EE(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull align 8 dereferenceable(32) %6)
          to label %51 unwind label %64

51:                                               ; preds = %49
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %6) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %7) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %6) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %8) #9
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_RKS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %8, ptr noundef nonnull @.str.68, ptr noundef nonnull align 8 dereferenceable(32) %1)
          to label %52 unwind label %68

52:                                               ; preds = %51
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 8 dereferenceable(32) %8, ptr noundef nonnull @.str.32)
          to label %53 unwind label %70

53:                                               ; preds = %52
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %8) #9
  br label %245

54:                                               ; preds = %3
  %55 = landingpad { ptr, i32 }
          cleanup
  br label %247

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

58:                                               ; preds = %46, %43
  %59 = landingpad { ptr, i32 }
          cleanup
  br label %246

60:                                               ; preds = %47
  %61 = landingpad { ptr, i32 }
          cleanup
  br label %67

62:                                               ; preds = %48
  %63 = landingpad { ptr, i32 }
          cleanup
  br label %66

64:                                               ; preds = %49
  %65 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %6) #9
  br label %66

66:                                               ; preds = %64, %62
  %.pn = phi { ptr, i32 } [ %65, %64 ], [ %63, %62 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #9
  br label %67

67:                                               ; preds = %66, %60
  %.pn.pn = phi { ptr, i32 } [ %.pn, %66 ], [ %61, %60 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %7) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %6) #9
  br label %246

68:                                               ; preds = %51
  %69 = landingpad { ptr, i32 }
          cleanup
  br label %72

70:                                               ; preds = %52
  %71 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #9
  br label %72

72:                                               ; preds = %70, %68
  %.pn102 = phi { ptr, i32 } [ %71, %70 ], [ %69, %68 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %8) #9
  br label %246

73:                                               ; preds = %45
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %9) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %10) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %11) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %11) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef nonnull @.str.9, ptr noundef nonnull align 1 dereferenceable(1) %11)
          to label %74 unwind label %102

74:                                               ; preds = %73
  invoke void @_ZN7SGTELIB6MatrixC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEii(ptr noundef nonnull align 8 dereferenceable(56) %9, ptr noundef nonnull align 8 dereferenceable(32) %10, i32 noundef 3, i32 noundef %39)
          to label %75 unwind label %104

75:                                               ; preds = %74
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %11) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %11) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #9
  invoke void @_ZN7SGTELIB6Matrix10set_randomEddb(ptr noundef nonnull align 8 dereferenceable(56) %9, double noundef -5.000000e+00, double noundef 5.000000e+00, i1 noundef zeroext false)
          to label %76 unwind label %107

76:                                               ; preds = %75
  %77 = invoke noalias noundef nonnull dereferenceable(56) ptr @_Znwm(i64 noundef 56) #10
          to label %78 unwind label %109

78:                                               ; preds = %76
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %12) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %13) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %13) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %12, ptr noundef nonnull @.str.45, ptr noundef nonnull align 1 dereferenceable(1) %13)
          to label %79 unwind label %111

79:                                               ; preds = %78
  invoke void @_ZN7SGTELIB6MatrixC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEii(ptr noundef nonnull align 8 dereferenceable(56) %77, ptr noundef nonnull align 8 dereferenceable(32) %12, i32 noundef 3, i32 noundef %40)
          to label %80 unwind label %113

80:                                               ; preds = %79
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %13) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %13) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %12) #9
  %81 = invoke noalias noundef nonnull dereferenceable(56) ptr @_Znwm(i64 noundef 56) #10
          to label %82 unwind label %116

82:                                               ; preds = %80
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %14) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %15) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %15) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %14, ptr noundef nonnull @.str.46, ptr noundef nonnull align 1 dereferenceable(1) %15)
          to label %83 unwind label %118

83:                                               ; preds = %82
  invoke void @_ZN7SGTELIB6MatrixC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEii(ptr noundef nonnull align 8 dereferenceable(56) %81, ptr noundef nonnull align 8 dereferenceable(32) %14, i32 noundef 3, i32 noundef %40)
          to label %84 unwind label %120

84:                                               ; preds = %83
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %15) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %15) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %14) #9
  %85 = invoke noalias noundef nonnull dereferenceable(56) ptr @_Znwm(i64 noundef 56) #10
          to label %86 unwind label %123

86:                                               ; preds = %84
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %16) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %17) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %17) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef nonnull @.str.47, ptr noundef nonnull align 1 dereferenceable(1) %17)
          to label %87 unwind label %125

87:                                               ; preds = %86
  invoke void @_ZN7SGTELIB6MatrixC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEii(ptr noundef nonnull align 8 dereferenceable(56) %85, ptr noundef nonnull align 8 dereferenceable(32) %16, i32 noundef 3, i32 noundef %40)
          to label %88 unwind label %127

88:                                               ; preds = %87
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %17) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %17) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %16) #9
  %89 = invoke noalias noundef nonnull dereferenceable(56) ptr @_Znwm(i64 noundef 56) #10
          to label %90 unwind label %130

90:                                               ; preds = %88
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %18) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %19) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %19) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %18, ptr noundef nonnull @.str.48, ptr noundef nonnull align 1 dereferenceable(1) %19)
          to label %91 unwind label %132

91:                                               ; preds = %90
  invoke void @_ZN7SGTELIB6MatrixC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEii(ptr noundef nonnull align 8 dereferenceable(56) %89, ptr noundef nonnull align 8 dereferenceable(32) %18, i32 noundef 3, i32 noundef %40)
          to label %92 unwind label %134

92:                                               ; preds = %91
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %19) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %19) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #9
  invoke void @_ZN7SGTELIB9Surrogate7predictERKNS_6MatrixEPS1_S4_S4_S4_(ptr noundef nonnull align 8 dereferenceable(985) %42, ptr noundef nonnull align 8 dereferenceable(56) %9, ptr noundef nonnull %77, ptr noundef nonnull %81, ptr noundef nonnull %85, ptr noundef nonnull %89)
          to label %93 unwind label %130

93:                                               ; preds = %92
  call void @llvm.lifetime.start.p0(i64 504, ptr nonnull %20) #9
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %21) #9
  invoke void @_ZNK7SGTELIB6Matrix7get_rowEi(ptr dead_on_unwind nonnull writable sret(%"class.SGTELIB::Matrix") align 8 %21, ptr noundef nonnull align 8 dereferenceable(56) %2, i32 noundef 0)
          to label %94 unwind label %137

94:                                               ; preds = %93
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %22) #9
  invoke void @_ZNK7SGTELIB6Matrix7get_rowEi(ptr dead_on_unwind nonnull writable sret(%"class.SGTELIB::Matrix") align 8 %22, ptr noundef nonnull align 8 dereferenceable(56) %4, i32 noundef 0)
          to label %95 unwind label %139

95:                                               ; preds = %94
  invoke void @_ZN7SGTELIB11TrainingSetC1ERKNS_6MatrixES3_(ptr noundef nonnull align 8 dereferenceable(504) %20, ptr noundef nonnull align 8 dereferenceable(56) %21, ptr noundef nonnull align 8 dereferenceable(56) %22)
          to label %96 unwind label %141

96:                                               ; preds = %95
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %22) #9
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %22) #9
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %21) #9
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %21) #9
  %97 = invoke noundef ptr @_ZN7SGTELIB17Surrogate_FactoryERNS_11TrainingSetERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(504) %20, ptr noundef nonnull align 8 dereferenceable(32) %1)
          to label %98 unwind label %145

98:                                               ; preds = %96
  %99 = invoke noundef zeroext i1 @_ZN7SGTELIB9Surrogate5buildEv(ptr noundef nonnull align 8 dereferenceable(985) %97)
          to label %.preheader unwind label %145

.preheader:                                       ; preds = %98
  %100 = icmp sgt i32 %38, 1
  br i1 %100, label %.lr.ph, label %._crit_edge

._crit_edge:                                      ; preds = %152, %.preheader
  %101 = invoke noalias noundef nonnull dereferenceable(56) ptr @_Znwm(i64 noundef 56) #10
          to label %164 unwind label %211

102:                                              ; preds = %73
  %103 = landingpad { ptr, i32 }
          cleanup
  br label %106

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

106:                                              ; preds = %104, %102
  %.pn104 = phi { ptr, i32 } [ %105, %104 ], [ %103, %102 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %11) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %11) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #9
  br label %244

107:                                              ; preds = %75
  %108 = landingpad { ptr, i32 }
          cleanup
  br label %243

109:                                              ; preds = %76
  %110 = landingpad { ptr, i32 }
          cleanup
  br label %243

111:                                              ; preds = %78
  %112 = landingpad { ptr, i32 }
          cleanup
  br label %115

113:                                              ; preds = %79
  %114 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #9
  br label %115

115:                                              ; preds = %113, %111
  %.pn106 = phi { ptr, i32 } [ %114, %113 ], [ %112, %111 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %13) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %13) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %12) #9
  call void @_ZdlPvm(ptr noundef nonnull %77, i64 noundef 56) #11
  br label %243

116:                                              ; preds = %80
  %117 = landingpad { ptr, i32 }
          cleanup
  br label %243

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

120:                                              ; preds = %83
  %121 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #9
  br label %122

122:                                              ; preds = %120, %118
  %.pn108 = phi { ptr, i32 } [ %121, %120 ], [ %119, %118 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %15) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %15) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %14) #9
  call void @_ZdlPvm(ptr noundef nonnull %81, i64 noundef 56) #11
  br label %243

123:                                              ; preds = %84
  %124 = landingpad { ptr, i32 }
          cleanup
  br label %243

125:                                              ; preds = %86
  %126 = landingpad { ptr, i32 }
          cleanup
  br label %129

127:                                              ; preds = %87
  %128 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #9
  br label %129

129:                                              ; preds = %127, %125
  %.pn110 = phi { ptr, i32 } [ %128, %127 ], [ %126, %125 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %17) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %17) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %16) #9
  call void @_ZdlPvm(ptr noundef nonnull %85, i64 noundef 56) #11
  br label %243

130:                                              ; preds = %92, %88
  %131 = landingpad { ptr, i32 }
          cleanup
  br label %243

132:                                              ; preds = %90
  %133 = landingpad { ptr, i32 }
          cleanup
  br label %136

134:                                              ; preds = %91
  %135 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #9
  br label %136

136:                                              ; preds = %134, %132
  %.pn112 = phi { ptr, i32 } [ %135, %134 ], [ %133, %132 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %19) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %19) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #9
  call void @_ZdlPvm(ptr noundef nonnull %89, i64 noundef 56) #11
  br label %243

137:                                              ; preds = %93
  %138 = landingpad { ptr, i32 }
          cleanup
  br label %144

139:                                              ; preds = %94
  %140 = landingpad { ptr, i32 }
          cleanup
  br label %143

141:                                              ; preds = %95
  %142 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %22) #9
  br label %143

143:                                              ; preds = %141, %139
  %.pn114 = phi { ptr, i32 } [ %142, %141 ], [ %140, %139 ]
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %22) #9
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %21) #9
  br label %144

144:                                              ; preds = %143, %137
  %.pn114.pn = phi { ptr, i32 } [ %.pn114, %143 ], [ %138, %137 ]
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %21) #9
  br label %242

145:                                              ; preds = %98, %96
  %146 = landingpad { ptr, i32 }
          cleanup
  br label %241

.lr.ph:                                           ; preds = %.preheader, %152
  %.099146 = phi i32 [ %153, %152 ], [ 1, %.preheader ]
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %23) #9
  invoke void @_ZNK7SGTELIB6Matrix7get_rowEi(ptr dead_on_unwind nonnull writable sret(%"class.SGTELIB::Matrix") align 8 %23, ptr noundef nonnull align 8 dereferenceable(56) %2, i32 noundef %.099146)
          to label %147 unwind label %154

147:                                              ; preds = %.lr.ph
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %24) #9
  invoke void @_ZNK7SGTELIB6Matrix7get_rowEi(ptr dead_on_unwind nonnull writable sret(%"class.SGTELIB::Matrix") align 8 %24, ptr noundef nonnull align 8 dereferenceable(56) %4, i32 noundef %.099146)
          to label %148 unwind label %156

148:                                              ; preds = %147
  %149 = invoke noundef zeroext i1 @_ZN7SGTELIB11TrainingSet10add_pointsERKNS_6MatrixES3_(ptr noundef nonnull align 8 dereferenceable(504) %20, ptr noundef nonnull align 8 dereferenceable(56) %23, ptr noundef nonnull align 8 dereferenceable(56) %24)
          to label %150 unwind label %158

150:                                              ; preds = %148
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %24) #9
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %24) #9
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %23) #9
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %23) #9
  %151 = invoke noundef zeroext i1 @_ZN7SGTELIB9Surrogate5buildEv(ptr noundef nonnull align 8 dereferenceable(985) %97)
          to label %152 unwind label %162

152:                                              ; preds = %150
  %153 = add nuw nsw i32 %.099146, 1
  %exitcond.not = icmp eq i32 %153, %38
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph, !llvm.loop !5

154:                                              ; preds = %.lr.ph
  %155 = landingpad { ptr, i32 }
          cleanup
  br label %161

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

158:                                              ; preds = %148
  %159 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %24) #9
  br label %160

160:                                              ; preds = %158, %156
  %.pn130 = phi { ptr, i32 } [ %159, %158 ], [ %157, %156 ]
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %24) #9
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %23) #9
  br label %161

161:                                              ; preds = %160, %154
  %.pn130.pn = phi { ptr, i32 } [ %.pn130, %160 ], [ %155, %154 ]
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %23) #9
  br label %241

162:                                              ; preds = %150
  %163 = landingpad { ptr, i32 }
          cleanup
  br label %241

164:                                              ; preds = %._crit_edge
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %25) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %26) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %26) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %25, ptr noundef nonnull @.str.69, ptr noundef nonnull align 1 dereferenceable(1) %26)
          to label %165 unwind label %213

165:                                              ; preds = %164
  invoke void @_ZN7SGTELIB6MatrixC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEii(ptr noundef nonnull align 8 dereferenceable(56) %101, ptr noundef nonnull align 8 dereferenceable(32) %25, i32 noundef 3, i32 noundef %40)
          to label %166 unwind label %215

166:                                              ; preds = %165
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %26) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %26) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %25) #9
  %167 = invoke noalias noundef nonnull dereferenceable(56) ptr @_Znwm(i64 noundef 56) #10
          to label %168 unwind label %218

168:                                              ; preds = %166
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %27) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %28) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %28) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull @.str.70, ptr noundef nonnull align 1 dereferenceable(1) %28)
          to label %169 unwind label %220

169:                                              ; preds = %168
  invoke void @_ZN7SGTELIB6MatrixC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEii(ptr noundef nonnull align 8 dereferenceable(56) %167, ptr noundef nonnull align 8 dereferenceable(32) %27, i32 noundef 3, i32 noundef %40)
          to label %170 unwind label %222

170:                                              ; preds = %169
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %28) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %28) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %27) #9
  %171 = invoke noalias noundef nonnull dereferenceable(56) ptr @_Znwm(i64 noundef 56) #10
          to label %172 unwind label %225

172:                                              ; preds = %170
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %29) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %30) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %30) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %29, ptr noundef nonnull @.str.71, ptr noundef nonnull align 1 dereferenceable(1) %30)
          to label %173 unwind label %227

173:                                              ; preds = %172
  invoke void @_ZN7SGTELIB6MatrixC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEii(ptr noundef nonnull align 8 dereferenceable(56) %171, ptr noundef nonnull align 8 dereferenceable(32) %29, i32 noundef 3, i32 noundef %40)
          to label %174 unwind label %229

174:                                              ; preds = %173
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %30) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %30) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %29) #9
  %175 = invoke noalias noundef nonnull dereferenceable(56) ptr @_Znwm(i64 noundef 56) #10
          to label %176 unwind label %232

176:                                              ; preds = %174
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %31) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %32) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %32) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %31, ptr noundef nonnull @.str.72, ptr noundef nonnull align 1 dereferenceable(1) %32)
          to label %177 unwind label %234

177:                                              ; preds = %176
  invoke void @_ZN7SGTELIB6MatrixC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEii(ptr noundef nonnull align 8 dereferenceable(56) %175, ptr noundef nonnull align 8 dereferenceable(32) %31, i32 noundef 3, i32 noundef %40)
          to label %178 unwind label %236

178:                                              ; preds = %177
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %31) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %32) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %32) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %31) #9
  invoke void @_ZN7SGTELIB9Surrogate7predictERKNS_6MatrixEPS1_S4_S4_S4_(ptr noundef nonnull align 8 dereferenceable(985) %97, ptr noundef nonnull align 8 dereferenceable(56) %9, ptr noundef nonnull %101, ptr noundef nonnull %167, ptr noundef nonnull %171, ptr noundef nonnull %175)
          to label %179 unwind label %232

179:                                              ; preds = %178
  invoke void @_ZN7SGTELIB17check_matrix_diffEPKNS_6MatrixES2_(ptr noundef nonnull %77, ptr noundef nonnull %101)
          to label %180 unwind label %232

180:                                              ; preds = %179
  invoke void @_ZN7SGTELIB17check_matrix_diffEPKNS_6MatrixES2_(ptr noundef nonnull %81, ptr noundef nonnull %167)
          to label %181 unwind label %232

181:                                              ; preds = %180
  invoke void @_ZN7SGTELIB17check_matrix_diffEPKNS_6MatrixES2_(ptr noundef nonnull %85, ptr noundef nonnull %171)
          to label %182 unwind label %232

182:                                              ; preds = %181
  invoke void @_ZN7SGTELIB17check_matrix_diffEPKNS_6MatrixES2_(ptr noundef nonnull %89, ptr noundef nonnull %175)
          to label %183 unwind label %232

183:                                              ; preds = %182
  invoke void @_ZN7SGTELIB16surrogate_deleteEPNS_9SurrogateE(ptr noundef nonnull %42)
          to label %184 unwind label %232

184:                                              ; preds = %183
  invoke void @_ZN7SGTELIB16surrogate_deleteEPNS_9SurrogateE(ptr noundef nonnull %97)
          to label %185 unwind label %232

185:                                              ; preds = %184
  %186 = load ptr, ptr %77, align 8, !tbaa !7
  %187 = getelementptr inbounds i8, ptr %186, i64 8
  %188 = load ptr, ptr %187, align 8
  call void %188(ptr noundef nonnull align 8 dereferenceable(56) %77) #9
  %189 = load ptr, ptr %81, align 8, !tbaa !7
  %190 = getelementptr inbounds i8, ptr %189, i64 8
  %191 = load ptr, ptr %190, align 8
  call void %191(ptr noundef nonnull align 8 dereferenceable(56) %81) #9
  %192 = load ptr, ptr %85, align 8, !tbaa !7
  %193 = getelementptr inbounds i8, ptr %192, i64 8
  %194 = load ptr, ptr %193, align 8
  call void %194(ptr noundef nonnull align 8 dereferenceable(56) %85) #9
  %195 = load ptr, ptr %89, align 8, !tbaa !7
  %196 = getelementptr inbounds i8, ptr %195, i64 8
  %197 = load ptr, ptr %196, align 8
  call void %197(ptr noundef nonnull align 8 dereferenceable(56) %89) #9
  %198 = load ptr, ptr %101, align 8, !tbaa !7
  %199 = getelementptr inbounds i8, ptr %198, i64 8
  %200 = load ptr, ptr %199, align 8
  call void %200(ptr noundef nonnull align 8 dereferenceable(56) %101) #9
  %201 = load ptr, ptr %167, align 8, !tbaa !7
  %202 = getelementptr inbounds i8, ptr %201, i64 8
  %203 = load ptr, ptr %202, align 8
  call void %203(ptr noundef nonnull align 8 dereferenceable(56) %167) #9
  %204 = load ptr, ptr %171, align 8, !tbaa !7
  %205 = getelementptr inbounds i8, ptr %204, i64 8
  %206 = load ptr, ptr %205, align 8
  call void %206(ptr noundef nonnull align 8 dereferenceable(56) %171) #9
  %207 = load ptr, ptr %175, align 8, !tbaa !7
  %208 = getelementptr inbounds i8, ptr %207, i64 8
  %209 = load ptr, ptr %208, align 8
  call void %209(ptr noundef nonnull align 8 dereferenceable(56) %175) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %33) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %33) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.73, ptr noundef nonnull align 1 dereferenceable(1) %33)
          to label %210 unwind label %239

210:                                              ; preds = %185
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %33) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %33) #9
  call void @_ZN7SGTELIB11TrainingSetD1Ev(ptr noundef nonnull align 8 dereferenceable(504) %20) #9
  call void @llvm.lifetime.end.p0(i64 504, ptr nonnull %20) #9
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %9) #9
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %9) #9
  br label %245

211:                                              ; preds = %._crit_edge
  %212 = landingpad { ptr, i32 }
          cleanup
  br label %241

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

215:                                              ; preds = %165
  %216 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #9
  br label %217

217:                                              ; preds = %215, %213
  %.pn117 = phi { ptr, i32 } [ %216, %215 ], [ %214, %213 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %26) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %26) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %25) #9
  call void @_ZdlPvm(ptr noundef nonnull %101, i64 noundef 56) #11
  br label %241

218:                                              ; preds = %166
  %219 = landingpad { ptr, i32 }
          cleanup
  br label %241

220:                                              ; preds = %168
  %221 = landingpad { ptr, i32 }
          cleanup
  br label %224

222:                                              ; preds = %169
  %223 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #9
  br label %224

224:                                              ; preds = %222, %220
  %.pn119 = phi { ptr, i32 } [ %223, %222 ], [ %221, %220 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %28) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %28) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %27) #9
  call void @_ZdlPvm(ptr noundef nonnull %167, i64 noundef 56) #11
  br label %241

225:                                              ; preds = %170
  %226 = landingpad { ptr, i32 }
          cleanup
  br label %241

227:                                              ; preds = %172
  %228 = landingpad { ptr, i32 }
          cleanup
  br label %231

229:                                              ; preds = %173
  %230 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #9
  br label %231

231:                                              ; preds = %229, %227
  %.pn121 = phi { ptr, i32 } [ %230, %229 ], [ %228, %227 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %30) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %30) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %29) #9
  call void @_ZdlPvm(ptr noundef nonnull %171, i64 noundef 56) #11
  br label %241

232:                                              ; preds = %184, %183, %182, %181, %180, %179, %178, %174
  %233 = landingpad { ptr, i32 }
          cleanup
  br label %241

234:                                              ; preds = %176
  %235 = landingpad { ptr, i32 }
          cleanup
  br label %238

236:                                              ; preds = %177
  %237 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %31) #9
  br label %238

238:                                              ; preds = %236, %234
  %.pn123 = phi { ptr, i32 } [ %237, %236 ], [ %235, %234 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %32) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %32) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %31) #9
  call void @_ZdlPvm(ptr noundef nonnull %175, i64 noundef 56) #11
  br label %241

239:                                              ; preds = %185
  %240 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %33) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %33) #9
  br label %241

241:                                              ; preds = %211, %217, %225, %231, %238, %239, %232, %224, %218, %161, %162, %145
  %.pn133.pn = phi { ptr, i32 } [ %146, %145 ], [ %163, %162 ], [ %.pn130.pn, %161 ], [ %.pn117, %217 ], [ %212, %211 ], [ %.pn119, %224 ], [ %219, %218 ], [ %.pn121, %231 ], [ %226, %225 ], [ %240, %239 ], [ %233, %232 ], [ %.pn123, %238 ]
  call void @_ZN7SGTELIB11TrainingSetD1Ev(ptr noundef nonnull align 8 dereferenceable(504) %20) #9
  br label %242

242:                                              ; preds = %241, %144
  %.pn133.pn.pn = phi { ptr, i32 } [ %.pn133.pn, %241 ], [ %.pn114.pn, %144 ]
  call void @llvm.lifetime.end.p0(i64 504, ptr nonnull %20) #9
  br label %243

243:                                              ; preds = %109, %115, %123, %129, %136, %242, %130, %122, %116, %107
  %.pn133.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %108, %107 ], [ %.pn106, %115 ], [ %110, %109 ], [ %.pn108, %122 ], [ %117, %116 ], [ %.pn110, %129 ], [ %124, %123 ], [ %.pn133.pn.pn, %242 ], [ %131, %130 ], [ %.pn112, %136 ]
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %9) #9
  br label %244

244:                                              ; preds = %243, %106
  %.pn133.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn133.pn.pn.pn.pn.pn.pn.pn, %243 ], [ %.pn104, %106 ]
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %9) #9
  br label %246

245:                                              ; preds = %210, %53
  call void @_ZN7SGTELIB11TrainingSetD1Ev(ptr noundef nonnull align 8 dereferenceable(504) %5) #9
  call void @llvm.lifetime.end.p0(i64 504, ptr nonnull %5) #9
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %4) #9
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %4) #9
  ret void

246:                                              ; preds = %58, %67, %72, %244, %56
  %.pn133.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %57, %56 ], [ %.pn133.pn.pn.pn.pn.pn.pn.pn.pn, %244 ], [ %.pn102, %72 ], [ %.pn.pn, %67 ], [ %59, %58 ]
  call void @_ZN7SGTELIB11TrainingSetD1Ev(ptr noundef nonnull align 8 dereferenceable(504) %5) #9
  br label %247

247:                                              ; preds = %246, %54
  %.pn133.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn133.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %246 ], [ %55, %54 ]
  call void @llvm.lifetime.end.p0(i64 504, ptr nonnull %5) #9
  call void @_ZN7SGTELIB6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(56) %4) #9
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %4) #9
  resume { ptr, i32 } %.pn133.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn
}

declare noundef zeroext i1 @_ZN7SGTELIB11TrainingSet10add_pointsERKNS_6MatrixES3_(ptr noundef nonnull align 8 dereferenceable(504), ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 8 dereferenceable(56)) local_unnamed_addr #4

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

attributes #0 = { 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 #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { 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 #4 = { "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 = { 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 #6 = { 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 #7 = { 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 #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 = { nounwind }
attributes #10 = { builtin allocsize(0) }
attributes #11 = { 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 = distinct !{!5, !6}
!6 = !{!"llvm.loop.mustprogress"}
!7 = !{!8, !8, i64 0}
!8 = !{!"vtable pointer", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}


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