; LLVM IR from facebookresearch/StarSpace :: src (model)

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

%"class.std::chrono::time_point" = type { %"class.std::chrono::duration" }
%"class.std::chrono::duration" = type { i64 }
%"class.std::vector.11" = type { %"struct.std::_Vector_base.12" }
%"struct.std::_Vector_base.12" = type { %"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl" }
%"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl" = type { %"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::allocator.13" = type { i8 }
%"class.__gnu_cxx::__normal_iterator" = type { ptr }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl" }
%"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl" = type { %"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl_data" }
%"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::allocator" = type { i8 }
%"class.std::vector.37" = type { %"struct.std::_Vector_base.38" }
%"struct.std::_Vector_base.38" = type { %"struct.std::_Vector_base<long, std::allocator<long>>::_Vector_impl" }
%"struct.std::_Vector_base<long, std::allocator<long>>::_Vector_impl" = type { %"struct.std::_Vector_base<long, std::allocator<long>>::_Vector_impl_data" }
%"struct.std::_Vector_base<long, std::allocator<long>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::allocator.39" = type { i8 }
%class.anon = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%"class.std::vector.42" = type { %"struct.std::_Vector_base.43" }
%"struct.std::_Vector_base.43" = type { %"struct.std::_Vector_base<std::thread, std::allocator<std::thread>>::_Vector_impl" }
%"struct.std::_Vector_base<std::thread, std::allocator<std::thread>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::thread, std::allocator<std::thread>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::thread, std::allocator<std::thread>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::thread" = type { %"class.std::thread::id" }
%"class.std::thread::id" = type { i64 }
%class.anon.47 = type { %class.anon, i64, %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator" }
%class.anon.48 = type { ptr, ptr }
%"class.__gnu_cxx::__normal_iterator.49" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.50" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.51" = type { ptr }
%"struct.starspace::EmbedModel" = type { %"class.std::shared_ptr.0", %"class.std::shared_ptr.3", %"class.std::shared_ptr.3", %"class.std::shared_ptr", %"class.std::vector", %"class.std::vector" }
%"class.std::shared_ptr.0" = type { %"class.std::__shared_ptr.1" }
%"class.std::__shared_ptr.1" = type { ptr, %"class.std::__shared_count" }
%"class.std::__shared_count" = type { ptr }
%"class.std::shared_ptr.3" = type { %"class.std::__shared_ptr.4" }
%"class.std::__shared_ptr.4" = type { ptr, %"class.std::__shared_count" }
%"class.std::shared_ptr" = type { %"class.std::__shared_ptr" }
%"class.std::__shared_ptr" = type { ptr, %"class.std::__shared_count" }
%"class.starspace::Args" = type <{ %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", i8, [7 x i8], double, double, double, double, double, double, double, double, double, i64, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8 }>
%"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] }

@.str.4 = external hidden unnamed_addr constant [74 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [19 x i8], align 1
@__PRETTY_FUNCTION__._ZN9starspace10EmbedModel5trainESt10shared_ptrINS_17InternDataHandlerEEiNSt6chrono10time_pointINS4_3_V212system_clockENS4_8durationIlSt5ratioILl1ELl1000000000EEEEEEiffb = external hidden unnamed_addr constant [154 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [19 x i8], align 1

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) #1

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local noundef float @_ZN9starspace10EmbedModel5trainESt10shared_ptrINS_17InternDataHandlerEEiNSt6chrono10time_pointINS4_3_V212system_clockENS4_8durationIlSt5ratioILl1ELl1000000000EEEEEEiffb(ptr noundef nonnull align 8 dereferenceable(112) %0, ptr noundef %1, i32 noundef %2, i64 %3, i32 noundef %4, float noundef %5, float noundef %6, i1 noundef zeroext %7) #3 align 2 personality ptr @__gxx_personality_v0 {
  %9 = alloca %"class.std::chrono::time_point", align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca float, align 4
  %15 = alloca float, align 4
  %16 = alloca i8, align 1
  %17 = alloca i64, align 8
  %18 = alloca %"class.std::vector.11", align 8
  %19 = alloca %"class.std::allocator.13", align 1
  %20 = alloca ptr, align 8
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca ptr, align 8
  %24 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %25 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %26 = alloca ptr, align 8
  %27 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %28 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %29 = alloca i32, align 4
  %30 = alloca float, align 4
  %31 = alloca float, align 4
  %32 = alloca i64, align 8
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca %"class.std::vector", align 8
  %36 = alloca %"class.std::allocator", align 1
  %37 = alloca %"class.std::vector.37", align 8
  %38 = alloca %"class.std::allocator.39", align 1
  %39 = alloca %class.anon, align 8
  %40 = alloca %"class.std::vector.42", align 8
  %41 = alloca i8, align 1
  %42 = alloca i64, align 8
  %43 = alloca i64, align 8
  %44 = alloca i64, align 8
  %45 = alloca i64, align 8
  %46 = alloca i64, align 8
  %47 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %48 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %49 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %50 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %51 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %52 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %53 = alloca %"class.std::thread", align 8
  %54 = alloca %class.anon.47, align 8
  %55 = alloca %"class.std::thread", align 8
  %56 = alloca %class.anon.48, align 8
  %57 = alloca ptr, align 8
  %58 = alloca %"class.__gnu_cxx::__normal_iterator.49", align 8
  %59 = alloca %"class.__gnu_cxx::__normal_iterator.49", align 8
  %60 = alloca ptr, align 8
  %61 = alloca float, align 4
  %62 = alloca %"class.__gnu_cxx::__normal_iterator.50", align 8
  %63 = alloca %"class.__gnu_cxx::__normal_iterator.50", align 8
  %64 = alloca i64, align 8
  %65 = alloca %"class.__gnu_cxx::__normal_iterator.51", align 8
  %66 = alloca %"class.__gnu_cxx::__normal_iterator.51", align 8
  %67 = getelementptr inbounds %"class.std::chrono::time_point", ptr %9, i32 0, i32 0
  %68 = getelementptr inbounds %"class.std::chrono::duration", ptr %67, i32 0, i32 0
  store i64 %3, ptr %68, align 8
  store ptr %0, ptr %10, align 8, !tbaa !5
  store ptr %1, ptr %11, align 8, !tbaa !5
  store i32 %2, ptr %12, align 4, !tbaa !9
  store i32 %4, ptr %13, align 4, !tbaa !9
  store float %5, ptr %14, align 4, !tbaa !11
  store float %6, ptr %15, align 4, !tbaa !11
  %69 = zext i1 %7 to i8
  store i8 %69, ptr %16, align 1, !tbaa !13
  %70 = load ptr, ptr %10, align 8
  %71 = load float, ptr %14, align 4, !tbaa !11
  %72 = load float, ptr %15, align 4, !tbaa !11
  %73 = fcmp oge float %71, %72
  br i1 %73, label %74, label %75

74:                                               ; preds = %8
  br label %77

75:                                               ; preds = %8
  call void @__assert_fail(ptr noundef @.str.10, ptr noundef @.str.4, i32 noundef 167, ptr noundef @__PRETTY_FUNCTION__._ZN9starspace10EmbedModel5trainESt10shared_ptrINS_17InternDataHandlerEEiNSt6chrono10time_pointINS4_3_V212system_clockENS4_8durationIlSt5ratioILl1ELl1000000000EEEEEEiffb) #8
  unreachable

76:                                               ; No predecessors!
  br label %77

77:                                               ; preds = %76, %74
  %78 = load float, ptr %14, align 4, !tbaa !11
  %79 = fpext float %78 to double
  %80 = fcmp oge double %79, 0.000000e+00
  br i1 %80, label %81, label %82

81:                                               ; preds = %77
  br label %84

82:                                               ; preds = %77
  call void @__assert_fail(ptr noundef @.str.11, ptr noundef @.str.4, i32 noundef 168, ptr noundef @__PRETTY_FUNCTION__._ZN9starspace10EmbedModel5trainESt10shared_ptrINS_17InternDataHandlerEEiNSt6chrono10time_pointINS4_3_V212system_clockENS4_8durationIlSt5ratioILl1ELl1000000000EEEEEEiffb) #8
  unreachable

83:                                               ; No predecessors!
  br label %84

84:                                               ; preds = %83, %81
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #9
  %85 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN9starspace17InternDataHandlerELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %1) #9
  %86 = call noundef i64 @_ZNK9starspace17InternDataHandler7getSizeEv(ptr noundef nonnull align 8 dereferenceable(88) %85)
  store i64 %86, ptr %17, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 24, ptr %18) #9
  %87 = load i64, ptr %17, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 1, ptr %19) #9
  call void @_ZNSaIiEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %19) #9
  invoke void @_ZNSt6vectorIiSaIiEEC2EmRKS0_(ptr noundef nonnull align 8 dereferenceable(24) %18, i64 noundef %87, ptr noundef nonnull align 1 dereferenceable(1) %19)
          to label %88 unwind label %98

88:                                               ; preds = %84
  call void @_ZNSt15__new_allocatorIiED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %19) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %19) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #9
  store i32 0, ptr %22, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #9
  store ptr %18, ptr %23, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #9
  %89 = load ptr, ptr %23, align 8, !tbaa !5
  %90 = call ptr @_ZNSt6vectorIiSaIiEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %89) #9
  %91 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %24, i32 0, i32 0
  store ptr %90, ptr %91, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #9
  %92 = load ptr, ptr %23, align 8, !tbaa !5
  %93 = call ptr @_ZNSt6vectorIiSaIiEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %92) #9
  %94 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %25, i32 0, i32 0
  store ptr %93, ptr %94, align 8
  br label %95

95:                                               ; preds = %107, %88
  %96 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPiSt6vectorIiSaIiEEEEbRKNS_17__normal_iteratorIT_T0_EESA_(ptr noundef nonnull align 8 dereferenceable(8) %24, ptr noundef nonnull align 8 dereferenceable(8) %25) #9
  br i1 %96, label %102, label %97

97:                                               ; preds = %95
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #9
  br label %109

98:                                               ; preds = %84
  %99 = landingpad { ptr, i32 }
          cleanup
  %100 = extractvalue { ptr, i32 } %99, 0
  store ptr %100, ptr %20, align 8
  %101 = extractvalue { ptr, i32 } %99, 1
  store i32 %101, ptr %21, align 4
  call void @_ZNSt15__new_allocatorIiED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %19) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %19) #9
  br label %376

102:                                              ; preds = %95
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #9
  %103 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %24) #9
  store ptr %103, ptr %26, align 8, !tbaa !5
  %104 = load i32, ptr %22, align 4, !tbaa !9
  %105 = add nsw i32 %104, 1
  store i32 %105, ptr %22, align 4, !tbaa !9
  %106 = load ptr, ptr %26, align 8, !tbaa !5
  store i32 %104, ptr %106, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #9
  br label %107

107:                                              ; preds = %102
  %108 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %24) #9
  br label %95

109:                                              ; preds = %97
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #9
  %110 = call ptr @_ZNSt6vectorIiSaIiEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %18) #9
  %111 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %27, i32 0, i32 0
  store ptr %110, ptr %111, align 8
  %112 = call ptr @_ZNSt6vectorIiSaIiEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %18) #9
  %113 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %28, i32 0, i32 0
  store ptr %112, ptr %113, align 8
  %114 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %27, i32 0, i32 0
  %115 = load ptr, ptr %114, align 8
  %116 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %28, i32 0, i32 0
  %117 = load ptr, ptr %116, align 8
  invoke void @_ZSt14random_shuffleIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEEvT_S7_(ptr %115, ptr %117)
          to label %118 unwind label %133

118:                                              ; preds = %109
  %119 = getelementptr inbounds %"struct.starspace::EmbedModel", ptr %70, i32 0, i32 3
  %120 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN9starspace4ArgsELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %119) #9
  %121 = getelementptr inbounds %"class.starspace::Args", ptr %120, i32 0, i32 35
  %122 = load i32, ptr %121, align 4, !tbaa !17
  %123 = icmp eq i32 %122, 5
  br i1 %123, label %130, label %124

124:                                              ; preds = %118
  %125 = getelementptr inbounds %"struct.starspace::EmbedModel", ptr %70, i32 0, i32 3
  %126 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN9starspace4ArgsELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %125) #9
  %127 = getelementptr inbounds %"class.starspace::Args", ptr %126, i32 0, i32 48
  %128 = load i8, ptr %127, align 1, !tbaa !22, !range !23, !noundef !24
  %129 = trunc i8 %128 to i1
  br i1 %129, label %130, label %137

130:                                              ; preds = %124, %118
  %131 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN9starspace17InternDataHandlerELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %1) #9
  invoke void @_ZN9starspace17InternDataHandler17initWordNegativesEv(ptr noundef nonnull align 8 dereferenceable(88) %131)
          to label %132 unwind label %133

132:                                              ; preds = %130
  br label %137

133:                                              ; preds = %130, %109
  %134 = landingpad { ptr, i32 }
          cleanup
  %135 = extractvalue { ptr, i32 } %134, 0
  store ptr %135, ptr %20, align 8
  %136 = extractvalue { ptr, i32 } %134, 1
  store i32 %136, ptr %21, align 4
  br label %375

137:                                              ; preds = %132, %124
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #9
  store i32 1000, ptr %29, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #9
  %138 = load float, ptr %14, align 4, !tbaa !11
  %139 = load float, ptr %15, align 4, !tbaa !11
  %140 = fsub float %138, %139
  %141 = load i64, ptr %17, align 8, !tbaa !15
  %142 = udiv i64 %141, 1000
  %143 = uitofp i64 %142 to float
  %144 = fdiv float %140, %143
  store float %144, ptr %30, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #9
  %145 = getelementptr inbounds %"struct.starspace::EmbedModel", ptr %70, i32 0, i32 3
  %146 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN9starspace4ArgsELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %145) #9
  %147 = getelementptr inbounds %"class.starspace::Args", ptr %146, i32 0, i32 30
  %148 = load i32, ptr %147, align 8, !tbaa !25
  %149 = sext i32 %148 to i64
  store i64 %149, ptr %32, align 8, !tbaa !15
  %150 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3minImERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %17, ptr noundef nonnull align 8 dereferenceable(8) %32)
          to label %151 unwind label %191

151:                                              ; preds = %137
  %152 = load i64, ptr %150, align 8, !tbaa !15
  %153 = uitofp i64 %152 to float
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #9
  store float %153, ptr %31, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #9
  store i32 2, ptr %33, align 4, !tbaa !9
  %154 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %12, ptr noundef nonnull align 4 dereferenceable(4) %33)
          to label %155 unwind label %195

155:                                              ; preds = %151
  %156 = load i32, ptr %154, align 4, !tbaa !9
  store i32 %156, ptr %12, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #9
  %157 = load i32, ptr %12, align 4, !tbaa !9
  %158 = sub nsw i32 %157, 1
  store i32 %158, ptr %12, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #9
  %159 = load i64, ptr %17, align 8, !tbaa !15
  %160 = trunc i64 %159 to i32
  store i32 %160, ptr %34, align 4, !tbaa !9
  %161 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %12, ptr noundef nonnull align 4 dereferenceable(4) %34)
          to label %162 unwind label %199

162:                                              ; preds = %155
  %163 = load i32, ptr %161, align 4, !tbaa !9
  store i32 %163, ptr %12, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #9
  call void @llvm.lifetime.start.p0(i64 24, ptr %35) #9
  %164 = load i32, ptr %12, align 4, !tbaa !9
  %165 = sext i32 %164 to i64
  call void @llvm.lifetime.start.p0(i64 1, ptr %36) #9
  call void @_ZNSaIfEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %36) #9
  invoke void @_ZNSt6vectorIfSaIfEEC2EmRKS0_(ptr noundef nonnull align 8 dereferenceable(24) %35, i64 noundef %165, ptr noundef nonnull align 1 dereferenceable(1) %36)
          to label %166 unwind label %203

166:                                              ; preds = %162
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %36) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %36) #9
  call void @llvm.lifetime.start.p0(i64 24, ptr %37) #9
  %167 = load i32, ptr %12, align 4, !tbaa !9
  %168 = sext i32 %167 to i64
  call void @llvm.lifetime.start.p0(i64 1, ptr %38) #9
  call void @_ZNSaIlEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %38) #9
  invoke void @_ZNSt6vectorIlSaIlEEC2EmRKS0_(ptr noundef nonnull align 8 dereferenceable(24) %37, i64 noundef %168, ptr noundef nonnull align 1 dereferenceable(1) %38)
          to label %169 unwind label %207

169:                                              ; preds = %166
  call void @_ZNSt15__new_allocatorIlED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %38) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %38) #9
  call void @llvm.lifetime.start.p0(i64 80, ptr %39) #9
  %170 = getelementptr inbounds %class.anon, ptr %39, i32 0, i32 0
  store ptr %18, ptr %170, align 8, !tbaa !5
  %171 = getelementptr inbounds %class.anon, ptr %39, i32 0, i32 1
  store ptr %35, ptr %171, align 8, !tbaa !5
  %172 = getelementptr inbounds %class.anon, ptr %39, i32 0, i32 2
  store ptr %37, ptr %172, align 8, !tbaa !5
  %173 = getelementptr inbounds %class.anon, ptr %39, i32 0, i32 3
  store ptr %70, ptr %173, align 8, !tbaa !26
  %174 = getelementptr inbounds %class.anon, ptr %39, i32 0, i32 4
  store ptr %1, ptr %174, align 8, !tbaa !5
  %175 = getelementptr inbounds %class.anon, ptr %39, i32 0, i32 5
  store ptr %31, ptr %175, align 8, !tbaa !5
  %176 = getelementptr inbounds %class.anon, ptr %39, i32 0, i32 6
  store ptr %14, ptr %176, align 8, !tbaa !5
  %177 = getelementptr inbounds %class.anon, ptr %39, i32 0, i32 7
  store ptr %30, ptr %177, align 8, !tbaa !5
  %178 = getelementptr inbounds %class.anon, ptr %39, i32 0, i32 8
  store ptr %9, ptr %178, align 8, !tbaa !5
  %179 = getelementptr inbounds %class.anon, ptr %39, i32 0, i32 9
  store ptr %13, ptr %179, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr %40) #9
  call void @_ZNSt6vectorISt6threadSaIS0_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %40) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %41) #9
  store i8 0, ptr %41, align 1, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #9
  %180 = load i64, ptr %17, align 8, !tbaa !15
  %181 = load i32, ptr %12, align 4, !tbaa !9
  %182 = sext i32 %181 to i64
  %183 = udiv i64 %180, %182
  %184 = invoke noundef double @_ZSt4ceilImEN9__gnu_cxx11__enable_ifIXsr12__is_integerIT_EE7__valueEdE6__typeES2_(i64 noundef %183)
          to label %185 unwind label %211

185:                                              ; preds = %169
  %186 = fptoui double %184 to i64
  store i64 %186, ptr %42, align 8, !tbaa !15
  %187 = load i64, ptr %42, align 8, !tbaa !15
  %188 = icmp ugt i64 %187, 0
  br i1 %188, label %189, label %190

189:                                              ; preds = %185
  br label %216

190:                                              ; preds = %185
  call void @__assert_fail(ptr noundef @.str.12, ptr noundef @.str.4, i32 noundef 302, ptr noundef @__PRETTY_FUNCTION__._ZN9starspace10EmbedModel5trainESt10shared_ptrINS_17InternDataHandlerEEiNSt6chrono10time_pointINS4_3_V212system_clockENS4_8durationIlSt5ratioILl1ELl1000000000EEEEEEiffb) #8
  unreachable

191:                                              ; preds = %137
  %192 = landingpad { ptr, i32 }
          cleanup
  %193 = extractvalue { ptr, i32 } %192, 0
  store ptr %193, ptr %20, align 8
  %194 = extractvalue { ptr, i32 } %192, 1
  store i32 %194, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #9
  br label %374

195:                                              ; preds = %151
  %196 = landingpad { ptr, i32 }
          cleanup
  %197 = extractvalue { ptr, i32 } %196, 0
  store ptr %197, ptr %20, align 8
  %198 = extractvalue { ptr, i32 } %196, 1
  store i32 %198, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #9
  br label %374

199:                                              ; preds = %155
  %200 = landingpad { ptr, i32 }
          cleanup
  %201 = extractvalue { ptr, i32 } %200, 0
  store ptr %201, ptr %20, align 8
  %202 = extractvalue { ptr, i32 } %200, 1
  store i32 %202, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #9
  br label %374

203:                                              ; preds = %162
  %204 = landingpad { ptr, i32 }
          cleanup
  %205 = extractvalue { ptr, i32 } %204, 0
  store ptr %205, ptr %20, align 8
  %206 = extractvalue { ptr, i32 } %204, 1
  store i32 %206, ptr %21, align 4
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %36) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %36) #9
  br label %373

207:                                              ; preds = %166
  %208 = landingpad { ptr, i32 }
          cleanup
  %209 = extractvalue { ptr, i32 } %208, 0
  store ptr %209, ptr %20, align 8
  %210 = extractvalue { ptr, i32 } %208, 1
  store i32 %210, ptr %21, align 4
  call void @_ZNSt15__new_allocatorIlED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %38) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %38) #9
  br label %372

211:                                              ; preds = %169
  %212 = landingpad { ptr, i32 }
          cleanup
  %213 = extractvalue { ptr, i32 } %212, 0
  store ptr %213, ptr %20, align 8
  %214 = extractvalue { ptr, i32 } %212, 1
  store i32 %214, ptr %21, align 4
  br label %371

215:                                              ; No predecessors!
  br label %216

216:                                              ; preds = %215, %189
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #9
  store i64 0, ptr %43, align 8, !tbaa !15
  br label %217

217:                                              ; preds = %288, %216
  %218 = load i64, ptr %43, align 8, !tbaa !15
  %219 = load i32, ptr %12, align 4, !tbaa !9
  %220 = sext i32 %219 to i64
  %221 = icmp ult i64 %218, %220
  br i1 %221, label %223, label %222

222:                                              ; preds = %217
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #9
  br label %301

223:                                              ; preds = %217
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #9
  %224 = load i64, ptr %43, align 8, !tbaa !15
  %225 = load i64, ptr %42, align 8, !tbaa !15
  %226 = mul i64 %224, %225
  store i64 %226, ptr %44, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #9
  %227 = load i64, ptr %44, align 8, !tbaa !15
  %228 = load i64, ptr %42, align 8, !tbaa !15
  %229 = add i64 %227, %228
  store i64 %229, ptr %46, align 8, !tbaa !15
  %230 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3minImERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %46, ptr noundef nonnull align 8 dereferenceable(8) %17)
          to label %231 unwind label %238

231:                                              ; preds = %223
  %232 = load i64, ptr %230, align 8, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #9
  store i64 %232, ptr %45, align 8, !tbaa !15
  %233 = load i64, ptr %45, align 8, !tbaa !15
  %234 = load i64, ptr %44, align 8, !tbaa !15
  %235 = icmp uge i64 %233, %234
  br i1 %235, label %236, label %237

236:                                              ; preds = %231
  br label %243

237:                                              ; preds = %231
  call void @__assert_fail(ptr noundef @.str.13, ptr noundef @.str.4, i32 noundef 306, ptr noundef @__PRETTY_FUNCTION__._ZN9starspace10EmbedModel5trainESt10shared_ptrINS_17InternDataHandlerEEiNSt6chrono10time_pointINS4_3_V212system_clockENS4_8durationIlSt5ratioILl1ELl1000000000EEEEEEiffb) #8
  unreachable

238:                                              ; preds = %223
  %239 = landingpad { ptr, i32 }
          cleanup
  %240 = extractvalue { ptr, i32 } %239, 0
  store ptr %240, ptr %20, align 8
  %241 = extractvalue { ptr, i32 } %239, 1
  store i32 %241, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #9
  br label %300

242:                                              ; No predecessors!
  br label %243

243:                                              ; preds = %242, %236
  %244 = load i64, ptr %45, align 8, !tbaa !15
  %245 = load i64, ptr %17, align 8, !tbaa !15
  %246 = icmp ule i64 %244, %245
  br i1 %246, label %247, label %248

247:                                              ; preds = %243
  br label %250

248:                                              ; preds = %243
  call void @__assert_fail(ptr noundef @.str.14, ptr noundef @.str.4, i32 noundef 307, ptr noundef @__PRETTY_FUNCTION__._ZN9starspace10EmbedModel5trainESt10shared_ptrINS_17InternDataHandlerEEiNSt6chrono10time_pointINS4_3_V212system_clockENS4_8durationIlSt5ratioILl1ELl1000000000EEEEEEiffb) #8
  unreachable

249:                                              ; No predecessors!
  br label %250

250:                                              ; preds = %249, %247
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #9
  %251 = call ptr @_ZNSt6vectorIiSaIiEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %18) #9
  %252 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %48, i32 0, i32 0
  store ptr %251, ptr %252, align 8
  %253 = load i64, ptr %44, align 8, !tbaa !15
  %254 = call ptr @_ZNK9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEplEl(ptr noundef nonnull align 8 dereferenceable(8) %48, i64 noundef %253) #9
  %255 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %47, i32 0, i32 0
  store ptr %254, ptr %255, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #9
  %256 = call ptr @_ZNSt6vectorIiSaIiEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %18) #9
  %257 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %50, i32 0, i32 0
  store ptr %256, ptr %257, align 8
  %258 = load i64, ptr %45, align 8, !tbaa !15
  %259 = call ptr @_ZNK9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEplEl(ptr noundef nonnull align 8 dereferenceable(8) %50, i64 noundef %258) #9
  %260 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %49, i32 0, i32 0
  store ptr %259, ptr %260, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #9
  %261 = call ptr @_ZNSt6vectorIiSaIiEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %18) #9
  %262 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %51, i32 0, i32 0
  store ptr %261, ptr %262, align 8
  %263 = call noundef zeroext i1 @_ZN9__gnu_cxxgeIPiSt6vectorIiSaIiEEEEbRKNS_17__normal_iteratorIT_T0_EESA_(ptr noundef nonnull align 8 dereferenceable(8) %47, ptr noundef nonnull align 8 dereferenceable(8) %51) #9
  br i1 %263, label %264, label %265

264:                                              ; preds = %250
  br label %267

265:                                              ; preds = %250
  call void @__assert_fail(ptr noundef @.str.15, ptr noundef @.str.4, i32 noundef 310, ptr noundef @__PRETTY_FUNCTION__._ZN9starspace10EmbedModel5trainESt10shared_ptrINS_17InternDataHandlerEEiNSt6chrono10time_pointINS4_3_V212system_clockENS4_8durationIlSt5ratioILl1ELl1000000000EEEEEEiffb) #8
  unreachable

266:                                              ; No predecessors!
  br label %267

267:                                              ; preds = %266, %264
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #9
  %268 = call noundef zeroext i1 @_ZN9__gnu_cxxgeIPiSt6vectorIiSaIiEEEEbRKNS_17__normal_iteratorIT_T0_EESA_(ptr noundef nonnull align 8 dereferenceable(8) %49, ptr noundef nonnull align 8 dereferenceable(8) %47) #9
  br i1 %268, label %269, label %270

269:                                              ; preds = %267
  br label %272

270:                                              ; preds = %267
  call void @__assert_fail(ptr noundef @.str.16, ptr noundef @.str.4, i32 noundef 311, ptr noundef @__PRETTY_FUNCTION__._ZN9starspace10EmbedModel5trainESt10shared_ptrINS_17InternDataHandlerEEiNSt6chrono10time_pointINS4_3_V212system_clockENS4_8durationIlSt5ratioILl1ELl1000000000EEEEEEiffb) #8
  unreachable

271:                                              ; No predecessors!
  br label %272

272:                                              ; preds = %271, %269
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #9
  %273 = call ptr @_ZNSt6vectorIiSaIiEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %18) #9
  %274 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %52, i32 0, i32 0
  store ptr %273, ptr %274, align 8
  %275 = call noundef zeroext i1 @_ZN9__gnu_cxxleIPiSt6vectorIiSaIiEEEEbRKNS_17__normal_iteratorIT_T0_EESA_(ptr noundef nonnull align 8 dereferenceable(8) %49, ptr noundef nonnull align 8 dereferenceable(8) %52) #9
  br i1 %275, label %276, label %277

276:                                              ; preds = %272
  br label %279

277:                                              ; preds = %272
  call void @__assert_fail(ptr noundef @.str.17, ptr noundef @.str.4, i32 noundef 312, ptr noundef @__PRETTY_FUNCTION__._ZN9starspace10EmbedModel5trainESt10shared_ptrINS_17InternDataHandlerEEiNSt6chrono10time_pointINS4_3_V212system_clockENS4_8durationIlSt5ratioILl1ELl1000000000EEEEEEiffb) #8
  unreachable

278:                                              ; No predecessors!
  br label %279

279:                                              ; preds = %278, %276
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #9
  call void @llvm.lifetime.start.p0(i64 104, ptr %54) #9
  %280 = getelementptr inbounds %class.anon.47, ptr %54, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %280, ptr align 8 %39, i64 80, i1 false), !tbaa.struct !28
  %281 = getelementptr inbounds %class.anon.47, ptr %54, i32 0, i32 1
  %282 = load i64, ptr %43, align 8, !tbaa !15
  store i64 %282, ptr %281, align 8, !tbaa !29
  %283 = getelementptr inbounds %class.anon.47, ptr %54, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %283, ptr align 8 %47, i64 8, i1 false), !tbaa.struct !32
  %284 = getelementptr inbounds %class.anon.47, ptr %54, i32 0, i32 3
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %284, ptr align 8 %49, i64 8, i1 false), !tbaa.struct !32
  invoke void @"_ZNSt6threadC2IZN9starspace10EmbedModel5trainESt10shared_ptrINS1_17InternDataHandlerEEiNSt6chrono10time_pointINS6_3_V212system_clockENS6_8durationIlSt5ratioILl1ELl1000000000EEEEEEiffbE3$_1JEvEEOT_DpOT0_"(ptr noundef nonnull align 8 dereferenceable(8) %53, ptr noundef nonnull align 8 dereferenceable(104) %54)
          to label %285 unwind label %291

285:                                              ; preds = %279
  %286 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorISt6threadSaIS0_EE12emplace_backIJS0_EEERS0_DpOT_(ptr noundef nonnull align 8 dereferenceable(24) %40, ptr noundef nonnull align 8 dereferenceable(8) %53)
          to label %287 unwind label %295

287:                                              ; preds = %285
  call void @_ZNSt6threadD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %53) #9
  call void @llvm.lifetime.end.p0(i64 104, ptr %54) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #9
  br label %288

288:                                              ; preds = %287
  %289 = load i64, ptr %43, align 8, !tbaa !15
  %290 = add i64 %289, 1
  store i64 %290, ptr %43, align 8, !tbaa !15
  br label %217, !llvm.loop !33

291:                                              ; preds = %279
  %292 = landingpad { ptr, i32 }
          cleanup
  %293 = extractvalue { ptr, i32 } %292, 0
  store ptr %293, ptr %20, align 8
  %294 = extractvalue { ptr, i32 } %292, 1
  store i32 %294, ptr %21, align 4
  br label %299

295:                                              ; preds = %285
  %296 = landingpad { ptr, i32 }
          cleanup
  %297 = extractvalue { ptr, i32 } %296, 0
  store ptr %297, ptr %20, align 8
  %298 = extractvalue { ptr, i32 } %296, 1
  store i32 %298, ptr %21, align 4
  call void @_ZNSt6threadD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %53) #9
  br label %299

299:                                              ; preds = %295, %291
  call void @llvm.lifetime.end.p0(i64 104, ptr %54) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #9
  br label %300

300:                                              ; preds = %299, %238
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #9
  br label %371

301:                                              ; preds = %222
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %56) #9
  %302 = getelementptr inbounds %class.anon.48, ptr %56, i32 0, i32 0
  store ptr %41, ptr %302, align 8, !tbaa !5
  %303 = getelementptr inbounds %class.anon.48, ptr %56, i32 0, i32 1
  store ptr %70, ptr %303, align 8, !tbaa !35
  invoke void @"_ZNSt6threadC2IZN9starspace10EmbedModel5trainESt10shared_ptrINS1_17InternDataHandlerEEiNSt6chrono10time_pointINS6_3_V212system_clockENS6_8durationIlSt5ratioILl1ELl1000000000EEEEEEiffbE3$_2JEvEEOT_DpOT0_"(ptr noundef nonnull align 8 dereferenceable(8) %55, ptr noundef nonnull align 8 dereferenceable(16) %56)
          to label %304 unwind label %314

304:                                              ; preds = %301
  call void @llvm.lifetime.end.p0(i64 16, ptr %56) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %57) #9
  store ptr %40, ptr %57, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %58) #9
  %305 = load ptr, ptr %57, align 8, !tbaa !5
  %306 = call ptr @_ZNSt6vectorISt6threadSaIS0_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %305) #9
  %307 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.49", ptr %58, i32 0, i32 0
  store ptr %306, ptr %307, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #9
  %308 = load ptr, ptr %57, align 8, !tbaa !5
  %309 = call ptr @_ZNSt6vectorISt6threadSaIS0_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %308) #9
  %310 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.49", ptr %59, i32 0, i32 0
  store ptr %309, ptr %310, align 8
  br label %311

311:                                              ; preds = %322, %304
  %312 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPSt6threadSt6vectorIS1_SaIS1_EEEEbRKNS_17__normal_iteratorIT_T0_EESB_(ptr noundef nonnull align 8 dereferenceable(8) %58, ptr noundef nonnull align 8 dereferenceable(8) %59) #9
  br i1 %312, label %318, label %313

313:                                              ; preds = %311
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #9
  br label %328

314:                                              ; preds = %301
  %315 = landingpad { ptr, i32 }
          cleanup
  %316 = extractvalue { ptr, i32 } %315, 0
  store ptr %316, ptr %20, align 8
  %317 = extractvalue { ptr, i32 } %315, 1
  store i32 %317, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %56) #9
  br label %370

318:                                              ; preds = %311
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #9
  %319 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPSt6threadSt6vectorIS1_SaIS1_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %58) #9
  store ptr %319, ptr %60, align 8, !tbaa !5
  %320 = load ptr, ptr %60, align 8, !tbaa !5
  invoke void @_ZNSt6thread4joinEv(ptr noundef nonnull align 8 dereferenceable(8) %320)
          to label %321 unwind label %324

321:                                              ; preds = %318
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #9
  br label %322

322:                                              ; preds = %321
  %323 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPSt6threadSt6vectorIS1_SaIS1_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %58) #9
  br label %311

324:                                              ; preds = %318
  %325 = landingpad { ptr, i32 }
          cleanup
  %326 = extractvalue { ptr, i32 } %325, 0
  store ptr %326, ptr %20, align 8
  %327 = extractvalue { ptr, i32 } %325, 1
  store i32 %327, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #9
  br label %369

328:                                              ; preds = %313
  store i8 1, ptr %41, align 1, !tbaa !13
  invoke void @_ZNSt6thread4joinEv(ptr noundef nonnull align 8 dereferenceable(8) %55)
          to label %329 unwind label %356

329:                                              ; preds = %328
  call void @llvm.lifetime.start.p0(i64 4, ptr %61) #9
  %330 = call ptr @_ZNSt6vectorIfSaIfEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %35) #9
  %331 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.50", ptr %62, i32 0, i32 0
  store ptr %330, ptr %331, align 8
  %332 = call ptr @_ZNSt6vectorIfSaIfEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %35) #9
  %333 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.50", ptr %63, i32 0, i32 0
  store ptr %332, ptr %333, align 8
  %334 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.50", ptr %62, i32 0, i32 0
  %335 = load ptr, ptr %334, align 8
  %336 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.50", ptr %63, i32 0, i32 0
  %337 = load ptr, ptr %336, align 8
  %338 = invoke noundef double @_ZSt10accumulateIN9__gnu_cxx17__normal_iteratorIPfSt6vectorIfSaIfEEEEdET0_T_S8_S7_(ptr %335, ptr %337, double noundef 0.000000e+00)
          to label %339 unwind label %360

339:                                              ; preds = %329
  %340 = fptrunc double %338 to float
  store float %340, ptr %61, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #9
  %341 = call ptr @_ZNSt6vectorIlSaIlEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %37) #9
  %342 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.51", ptr %65, i32 0, i32 0
  store ptr %341, ptr %342, align 8
  %343 = call ptr @_ZNSt6vectorIlSaIlEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %37) #9
  %344 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.51", ptr %66, i32 0, i32 0
  store ptr %343, ptr %344, align 8
  %345 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.51", ptr %65, i32 0, i32 0
  %346 = load ptr, ptr %345, align 8
  %347 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.51", ptr %66, i32 0, i32 0
  %348 = load ptr, ptr %347, align 8
  %349 = invoke noundef i32 @_ZSt10accumulateIN9__gnu_cxx17__normal_iteratorIPlSt6vectorIlSaIlEEEEiET0_T_S8_S7_(ptr %346, ptr %348, i32 noundef 0)
          to label %350 unwind label %364

350:                                              ; preds = %339
  %351 = sext i32 %349 to i64
  store i64 %351, ptr %64, align 8, !tbaa !15
  %352 = load float, ptr %61, align 4, !tbaa !11
  %353 = load i64, ptr %64, align 8, !tbaa !15
  %354 = sitofp i64 %353 to float
  %355 = fdiv float %352, %354
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #9
  call void @_ZNSt6threadD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %55) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %41) #9
  call void @_ZNSt6vectorISt6threadSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %40) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %40) #9
  call void @llvm.lifetime.end.p0(i64 80, ptr %39) #9
  call void @_ZNSt6vectorIlSaIlEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %37) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %37) #9
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %35) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %35) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #9
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %18) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %18) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #9
  ret float %355

356:                                              ; preds = %328
  %357 = landingpad { ptr, i32 }
          cleanup
  %358 = extractvalue { ptr, i32 } %357, 0
  store ptr %358, ptr %20, align 8
  %359 = extractvalue { ptr, i32 } %357, 1
  store i32 %359, ptr %21, align 4
  br label %369

360:                                              ; preds = %329
  %361 = landingpad { ptr, i32 }
          cleanup
  %362 = extractvalue { ptr, i32 } %361, 0
  store ptr %362, ptr %20, align 8
  %363 = extractvalue { ptr, i32 } %361, 1
  store i32 %363, ptr %21, align 4
  br label %368

364:                                              ; preds = %339
  %365 = landingpad { ptr, i32 }
          cleanup
  %366 = extractvalue { ptr, i32 } %365, 0
  store ptr %366, ptr %20, align 8
  %367 = extractvalue { ptr, i32 } %365, 1
  store i32 %367, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #9
  br label %368

368:                                              ; preds = %364, %360
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #9
  br label %369

369:                                              ; preds = %368, %356, %324
  call void @_ZNSt6threadD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %55) #9
  br label %370

370:                                              ; preds = %369, %314
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #9
  br label %371

371:                                              ; preds = %370, %300, %211
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %41) #9
  call void @_ZNSt6vectorISt6threadSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %40) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %40) #9
  call void @llvm.lifetime.end.p0(i64 80, ptr %39) #9
  call void @_ZNSt6vectorIlSaIlEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %37) #9
  br label %372

372:                                              ; preds = %371, %207
  call void @llvm.lifetime.end.p0(i64 24, ptr %37) #9
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %35) #9
  br label %373

373:                                              ; preds = %372, %203
  call void @llvm.lifetime.end.p0(i64 24, ptr %35) #9
  br label %374

374:                                              ; preds = %373, %199, %195, %191
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #9
  br label %375

375:                                              ; preds = %374, %133
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %18) #9
  br label %376

376:                                              ; preds = %375, %98
  call void @llvm.lifetime.end.p0(i64 24, ptr %18) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #9
  br label %377

377:                                              ; preds = %376
  %378 = load ptr, ptr %20, align 8
  %379 = load i32, ptr %21, align 4
  %380 = insertvalue { ptr, i32 } poison, ptr %378, 0
  %381 = insertvalue { ptr, i32 } %380, i32 %379, 1
  resume { ptr, i32 } %381
}

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNK9starspace17InternDataHandler7getSizeEv(ptr noundef nonnull align 8 dereferenceable(88)) #0 align 2

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

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZSt14random_shuffleIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEEvT_S7_(ptr, ptr) #5

declare void @_ZN9starspace17InternDataHandler17initWordNegativesEv(ptr noundef nonnull align 8 dereferenceable(88)) #6

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

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

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef double @_ZSt4ceilImEN9__gnu_cxx11__enable_ifIXsr12__is_integerIT_EE7__valueEdE6__typeES2_(i64 noundef) #4

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

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

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

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #7

; Function Attrs: mustprogress uwtable
declare hidden void @"_ZNSt6threadC2IZN9starspace10EmbedModel5trainESt10shared_ptrINS1_17InternDataHandlerEEiNSt6chrono10time_pointINS6_3_V212system_clockENS6_8durationIlSt5ratioILl1ELl1000000000EEEEEEiffbE3$_1JEvEEOT_DpOT0_"(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(104)) unnamed_addr #3 align 2

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

; Function Attrs: mustprogress uwtable
declare hidden void @"_ZNSt6threadC2IZN9starspace10EmbedModel5trainESt10shared_ptrINS1_17InternDataHandlerEEiNSt6chrono10time_pointINS6_3_V212system_clockENS6_8durationIlSt5ratioILl1ELl1000000000EEEEEEiffbE3$_2JEvEEOT_DpOT0_"(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #3 align 2

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

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

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

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

declare void @_ZNSt6thread4joinEv(ptr noundef nonnull align 8 dereferenceable(8)) #6

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef double @_ZSt10accumulateIN9__gnu_cxx17__normal_iteratorIPfSt6vectorIfSaIfEEEEdET0_T_S8_S7_(ptr, ptr, double noundef) #4

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZSt10accumulateIN9__gnu_cxx17__normal_iteratorIPlSt6vectorIlSaIlEEEEiET0_T_S8_S7_(ptr, ptr, i32 noundef) #4

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

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

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

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

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

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

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

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

attributes #0 = { 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 #1 = { noreturn 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 #2 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
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 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { 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 #6 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #8 = { noreturn nounwind }
attributes #9 = { 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 = !{!"float", !7, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"bool", !7, i64 0}
!15 = !{!16, !16, i64 0}
!16 = !{!"long", !7, i64 0}
!17 = !{!18, !10, i64 516}
!18 = !{!"_ZTSN9starspace4ArgsE", !19, i64 0, !19, i64 32, !19, i64 64, !19, i64 96, !19, i64 128, !19, i64 160, !19, i64 192, !19, i64 224, !19, i64 256, !19, i64 288, !19, i64 320, !19, i64 352, !7, i64 384, !21, i64 392, !21, i64 400, !21, i64 408, !21, i64 416, !21, i64 424, !21, i64 432, !21, i64 440, !21, i64 448, !21, i64 456, !16, i64 464, !10, i64 472, !10, i64 476, !10, i64 480, !10, i64 484, !10, i64 488, !10, i64 492, !10, i64 496, !10, i64 500, !10, i64 504, !10, i64 508, !10, i64 512, !10, i64 516, !10, i64 520, !10, i64 524, !10, i64 528, !14, i64 532, !14, i64 533, !14, i64 534, !14, i64 535, !14, i64 536, !14, i64 537, !14, i64 538, !14, i64 539, !14, i64 540, !14, i64 541, !14, i64 542}
!19 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !20, i64 0, !16, i64 8, !7, i64 16}
!20 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !6, i64 0}
!21 = !{!"double", !7, i64 0}
!22 = !{!18, !14, i64 541}
!23 = !{i8 0, i8 2}
!24 = !{}
!25 = !{!18, !10, i64 496}
!26 = !{!27, !6, i64 24}
!27 = !{!"_ZTSZN9starspace10EmbedModel5trainESt10shared_ptrINS_17InternDataHandlerEEiNSt6chrono10time_pointINS4_3_V212system_clockENS4_8durationIlSt5ratioILl1ELl1000000000EEEEEEiffbE3$_0", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72}
!28 = !{i64 0, i64 8, !5, i64 8, i64 8, !5, i64 16, i64 8, !5, i64 24, i64 8, !5, i64 32, i64 8, !5, i64 40, i64 8, !5, i64 48, i64 8, !5, i64 56, i64 8, !5, i64 64, i64 8, !5, i64 72, i64 8, !5}
!29 = !{!30, !16, i64 80}
!30 = !{!"_ZTSZN9starspace10EmbedModel5trainESt10shared_ptrINS_17InternDataHandlerEEiNSt6chrono10time_pointINS4_3_V212system_clockENS4_8durationIlSt5ratioILl1ELl1000000000EEEEEEiffbE3$_1", !27, i64 0, !16, i64 80, !31, i64 88, !31, i64 96}
!31 = !{!"_ZTSN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEE", !6, i64 0}
!32 = !{i64 0, i64 8, !5}
!33 = distinct !{!33, !34}
!34 = !{!"llvm.loop.mustprogress"}
!35 = !{!36, !6, i64 8}
!36 = !{!"_ZTSZN9starspace10EmbedModel5trainESt10shared_ptrINS_17InternDataHandlerEEiNSt6chrono10time_pointINS4_3_V212system_clockENS4_8durationIlSt5ratioILl1ELl1000000000EEEEEEiffbE3$_2", !6, i64 0, !6, i64 8}


; 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::chrono::time_point" = type { %"class.std::chrono::duration" }
%"class.std::chrono::duration" = type { i64 }
%"class.std::vector.11" = type { %"struct.std::_Vector_base.12" }
%"struct.std::_Vector_base.12" = type { %"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl" }
%"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl" = type { %"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::allocator.13" = type { i8 }
%"class.__gnu_cxx::__normal_iterator" = type { ptr }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl" }
%"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl" = type { %"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl_data" }
%"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::allocator" = type { i8 }
%"class.std::vector.37" = type { %"struct.std::_Vector_base.38" }
%"struct.std::_Vector_base.38" = type { %"struct.std::_Vector_base<long, std::allocator<long>>::_Vector_impl" }
%"struct.std::_Vector_base<long, std::allocator<long>>::_Vector_impl" = type { %"struct.std::_Vector_base<long, std::allocator<long>>::_Vector_impl_data" }
%"struct.std::_Vector_base<long, std::allocator<long>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::allocator.39" = type { i8 }
%"class.std::vector.42" = type { %"struct.std::_Vector_base.43" }
%"struct.std::_Vector_base.43" = type { %"struct.std::_Vector_base<std::thread, std::allocator<std::thread>>::_Vector_impl" }
%"struct.std::_Vector_base<std::thread, std::allocator<std::thread>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::thread, std::allocator<std::thread>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::thread, std::allocator<std::thread>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::thread" = type { %"class.std::thread::id" }
%"class.std::thread::id" = type { i64 }
%class.anon.47 = type { %class.anon, i64, %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator" }
%class.anon = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%class.anon.48 = type { ptr, ptr }
%"class.__gnu_cxx::__normal_iterator.49" = type { ptr }

@.str.4 = external hidden unnamed_addr constant [74 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [19 x i8], align 1
@__PRETTY_FUNCTION__._ZN9starspace10EmbedModel5trainESt10shared_ptrINS_17InternDataHandlerEEiNSt6chrono10time_pointINS4_3_V212system_clockENS4_8durationIlSt5ratioILl1ELl1000000000EEEEEEiffb = external hidden unnamed_addr constant [154 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [19 x i8], align 1

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #1

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local noundef float @_ZN9starspace10EmbedModel5trainESt10shared_ptrINS_17InternDataHandlerEEiNSt6chrono10time_pointINS4_3_V212system_clockENS4_8durationIlSt5ratioILl1ELl1000000000EEEEEEiffb(ptr noundef nonnull align 8 dereferenceable(112) %0, ptr noundef %1, i32 noundef %2, i64 %3, i32 noundef %4, float noundef %5, float noundef %6, i1 noundef zeroext %7) local_unnamed_addr #3 align 2 personality ptr @__gxx_personality_v0 {
  %9 = alloca %"class.std::chrono::time_point", align 8
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca float, align 4
  %13 = alloca i64, align 8
  %14 = alloca %"class.std::vector.11", align 8
  %15 = alloca %"class.std::allocator.13", align 1
  %16 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %17 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %18 = alloca float, align 4
  %19 = alloca float, align 4
  %20 = alloca i64, align 8
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca %"class.std::vector", align 8
  %24 = alloca %"class.std::allocator", align 1
  %25 = alloca %"class.std::vector.37", align 8
  %26 = alloca %"class.std::allocator.39", align 1
  %27 = alloca %"class.std::vector.42", align 8
  %28 = alloca i8, align 1
  %29 = alloca i64, align 8
  %30 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %31 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %32 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %33 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %34 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %35 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %36 = alloca %"class.std::thread", align 8
  %37 = alloca %class.anon.47, align 8
  %38 = alloca %"class.std::thread", align 8
  %39 = alloca %class.anon.48, align 8
  %40 = alloca %"class.__gnu_cxx::__normal_iterator.49", align 8
  %41 = alloca %"class.__gnu_cxx::__normal_iterator.49", align 8
  store i64 %3, ptr %9, align 8
  store i32 %2, ptr %10, align 4, !tbaa !5
  store i32 %4, ptr %11, align 4, !tbaa !5
  store float %5, ptr %12, align 4, !tbaa !9
  %42 = fcmp ult float %5, %6
  br i1 %42, label %43, label %44

43:                                               ; preds = %8
  tail call void @__assert_fail(ptr noundef nonnull @.str.10, ptr noundef nonnull @.str.4, i32 noundef 167, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN9starspace10EmbedModel5trainESt10shared_ptrINS_17InternDataHandlerEEiNSt6chrono10time_pointINS4_3_V212system_clockENS4_8durationIlSt5ratioILl1ELl1000000000EEEEEEiffb) #7
  unreachable

44:                                               ; preds = %8
  %45 = fcmp ult float %5, 0.000000e+00
  br i1 %45, label %46, label %47

46:                                               ; preds = %44
  tail call void @__assert_fail(ptr noundef nonnull @.str.11, ptr noundef nonnull @.str.4, i32 noundef 168, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN9starspace10EmbedModel5trainESt10shared_ptrINS_17InternDataHandlerEEiNSt6chrono10time_pointINS4_3_V212system_clockENS4_8durationIlSt5ratioILl1ELl1000000000EEEEEEiffb) #7
  unreachable

47:                                               ; preds = %44
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #8
  %48 = tail call noundef ptr @_ZNKSt19__shared_ptr_accessIN9starspace17InternDataHandlerELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %1) #8
  %49 = tail call noundef i64 @_ZNK9starspace17InternDataHandler7getSizeEv(ptr noundef nonnull align 8 dereferenceable(88) %48)
  store i64 %49, ptr %13, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %14) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %15) #8
  call void @_ZNSaIiEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %15) #8
  invoke void @_ZNSt6vectorIiSaIiEEC2EmRKS0_(ptr noundef nonnull align 8 dereferenceable(24) %14, i64 noundef %49, ptr noundef nonnull align 1 dereferenceable(1) %15)
          to label %50 unwind label %56

50:                                               ; preds = %47
  call void @_ZNSt15__new_allocatorIiED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %15) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %15) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %16) #8
  %51 = call ptr @_ZNSt6vectorIiSaIiEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %14) #8
  store ptr %51, ptr %16, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %17) #8
  %52 = call ptr @_ZNSt6vectorIiSaIiEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %14) #8
  store ptr %52, ptr %17, align 8
  %53 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPiSt6vectorIiSaIiEEEEbRKNS_17__normal_iteratorIT_T0_EESA_(ptr noundef nonnull align 8 dereferenceable(8) %16, ptr noundef nonnull align 8 dereferenceable(8) %17) #8
  br i1 %53, label %.lr.ph, label %._crit_edge

._crit_edge:                                      ; preds = %.lr.ph, %50
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #8
  %54 = call ptr @_ZNSt6vectorIiSaIiEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %14) #8
  %55 = call ptr @_ZNSt6vectorIiSaIiEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %14) #8
  invoke void @_ZSt14random_shuffleIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEEvT_S7_(ptr %54, ptr %55)
          to label %62 unwind label %75

56:                                               ; preds = %47
  %57 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIiED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %15) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %15) #8
  br label %188

.lr.ph:                                           ; preds = %50, %.lr.ph
  %.04058 = phi i32 [ %59, %.lr.ph ], [ 0, %50 ]
  %58 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %16) #8
  %59 = add nuw nsw i32 %.04058, 1
  store i32 %.04058, ptr %58, align 4, !tbaa !5
  %60 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %16) #8
  %61 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPiSt6vectorIiSaIiEEEEbRKNS_17__normal_iteratorIT_T0_EESA_(ptr noundef nonnull align 8 dereferenceable(8) %16, ptr noundef nonnull align 8 dereferenceable(8) %17) #8
  br i1 %61, label %.lr.ph, label %._crit_edge

62:                                               ; preds = %._crit_edge
  %63 = getelementptr inbounds i8, ptr %0, i64 48
  %64 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN9starspace4ArgsELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %63) #8
  %65 = getelementptr inbounds i8, ptr %64, i64 516
  %66 = load i32, ptr %65, align 4, !tbaa !13
  %67 = icmp eq i32 %66, 5
  br i1 %67, label %73, label %68

68:                                               ; preds = %62
  %69 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN9starspace4ArgsELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %63) #8
  %70 = getelementptr inbounds i8, ptr %69, i64 541
  %71 = load i8, ptr %70, align 1, !tbaa !20, !range !21, !noundef !22
  %72 = trunc nuw i8 %71 to i1
  br i1 %72, label %73, label %77

73:                                               ; preds = %68, %62
  %74 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN9starspace17InternDataHandlerELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %1) #8
  invoke void @_ZN9starspace17InternDataHandler17initWordNegativesEv(ptr noundef nonnull align 8 dereferenceable(88) %74)
          to label %77 unwind label %75

75:                                               ; preds = %73, %._crit_edge
  %76 = landingpad { ptr, i32 }
          cleanup
  br label %187

77:                                               ; preds = %73, %68
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %18) #8
  %78 = load float, ptr %12, align 4, !tbaa !9
  %79 = fsub float %78, %6
  %80 = load i64, ptr %13, align 8, !tbaa !11
  %81 = udiv i64 %80, 1000
  %82 = uitofp nneg i64 %81 to float
  %83 = fdiv float %79, %82
  store float %83, ptr %18, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %19) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %20) #8
  %84 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN9starspace4ArgsELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %63) #8
  %85 = getelementptr inbounds i8, ptr %84, i64 496
  %86 = load i32, ptr %85, align 8, !tbaa !23
  %87 = sext i32 %86 to i64
  store i64 %87, ptr %20, align 8, !tbaa !11
  %88 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3minImERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %13, ptr noundef nonnull align 8 dereferenceable(8) %20)
  %89 = load i64, ptr %88, align 8, !tbaa !11
  %90 = uitofp i64 %89 to float
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #8
  store float %90, ptr %19, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %21) #8
  store i32 2, ptr %21, align 4, !tbaa !5
  %91 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %10, ptr noundef nonnull align 4 dereferenceable(4) %21)
  %92 = load i32, ptr %91, align 4, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %21) #8
  %93 = add nsw i32 %92, -1
  store i32 %93, ptr %10, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %22) #8
  %94 = load i64, ptr %13, align 8, !tbaa !11
  %95 = trunc i64 %94 to i32
  store i32 %95, ptr %22, align 4, !tbaa !5
  %96 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %10, ptr noundef nonnull align 4 dereferenceable(4) %22)
  %97 = load i32, ptr %96, align 4, !tbaa !5
  store i32 %97, ptr %10, align 4, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %22) #8
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %23) #8
  %98 = sext i32 %97 to i64
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %24) #8
  call void @_ZNSaIfEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %24) #8
  invoke void @_ZNSt6vectorIfSaIfEEC2EmRKS0_(ptr noundef nonnull align 8 dereferenceable(24) %23, i64 noundef %98, ptr noundef nonnull align 1 dereferenceable(1) %24)
          to label %99 unwind label %114

99:                                               ; preds = %77
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %24) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %24) #8
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %25) #8
  %100 = load i32, ptr %10, align 4, !tbaa !5
  %101 = sext i32 %100 to i64
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %26) #8
  call void @_ZNSaIlEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %26) #8
  invoke void @_ZNSt6vectorIlSaIlEEC2EmRKS0_(ptr noundef nonnull align 8 dereferenceable(24) %25, i64 noundef %101, ptr noundef nonnull align 1 dereferenceable(1) %26)
          to label %102 unwind label %116

102:                                              ; preds = %99
  call void @_ZNSt15__new_allocatorIlED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %26) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %26) #8
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %27) #8
  call void @_ZNSt6vectorISt6threadSaIS0_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %27) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %28) #8
  store i8 0, ptr %28, align 1, !tbaa !24
  %103 = load i64, ptr %13, align 8, !tbaa !11
  %104 = load i32, ptr %10, align 4, !tbaa !5
  %105 = sext i32 %104 to i64
  %106 = udiv i64 %103, %105
  %107 = call noundef double @_ZSt4ceilImEN9__gnu_cxx11__enable_ifIXsr12__is_integerIT_EE7__valueEdE6__typeES2_(i64 noundef %106)
  %108 = fptoui double %107 to i64
  %.not = icmp eq i64 %108, 0
  br i1 %.not, label %113, label %.preheader

.preheader:                                       ; preds = %102
  %109 = load i32, ptr %10, align 4, !tbaa !5
  %.not65 = icmp eq i32 %109, 0
  br i1 %.not65, label %._crit_edge61, label %.lr.ph60

.lr.ph60:                                         ; preds = %.preheader
  %.sroa.5.0..sroa_idx = getelementptr inbounds i8, ptr %37, i64 8
  %.sroa.6.0..sroa_idx = getelementptr inbounds i8, ptr %37, i64 16
  %.sroa.7.0..sroa_idx = getelementptr inbounds i8, ptr %37, i64 24
  %.sroa.8.0..sroa_idx = getelementptr inbounds i8, ptr %37, i64 32
  %.sroa.9.0..sroa_idx = getelementptr inbounds i8, ptr %37, i64 40
  %.sroa.10.0..sroa_idx = getelementptr inbounds i8, ptr %37, i64 48
  %.sroa.11.0..sroa_idx = getelementptr inbounds i8, ptr %37, i64 56
  %.sroa.12.0..sroa_idx = getelementptr inbounds i8, ptr %37, i64 64
  %.sroa.13.0..sroa_idx = getelementptr inbounds i8, ptr %37, i64 72
  %110 = getelementptr inbounds i8, ptr %37, i64 80
  %111 = getelementptr inbounds i8, ptr %37, i64 88
  %112 = getelementptr inbounds i8, ptr %37, i64 96
  br label %119

113:                                              ; preds = %102
  call void @__assert_fail(ptr noundef nonnull @.str.12, ptr noundef nonnull @.str.4, i32 noundef 302, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN9starspace10EmbedModel5trainESt10shared_ptrINS_17InternDataHandlerEEiNSt6chrono10time_pointINS4_3_V212system_clockENS4_8durationIlSt5ratioILl1ELl1000000000EEEEEEiffb) #7
  unreachable

114:                                              ; preds = %77
  %115 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %24) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %24) #8
  br label %186

116:                                              ; preds = %99
  %117 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIlED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %26) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %26) #8
  br label %185

._crit_edge61:                                    ; preds = %148, %.preheader
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %38) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %39) #8
  store ptr %28, ptr %39, align 8, !tbaa !25
  %118 = getelementptr inbounds i8, ptr %39, i64 8
  store ptr %0, ptr %118, align 8, !tbaa !26
  invoke void @"_ZNSt6threadC2IZN9starspace10EmbedModel5trainESt10shared_ptrINS1_17InternDataHandlerEEiNSt6chrono10time_pointINS6_3_V212system_clockENS6_8durationIlSt5ratioILl1ELl1000000000EEEEEEiffbE3$_2JEvEEOT_DpOT0_"(ptr noundef nonnull align 8 dereferenceable(8) %38, ptr noundef nonnull align 8 dereferenceable(16) %39)
          to label %158 unwind label %162

119:                                              ; preds = %.lr.ph60, %148
  %.04159 = phi i64 [ 0, %.lr.ph60 ], [ %149, %148 ]
  %120 = mul i64 %.04159, %108
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %29) #8
  %121 = add i64 %120, %108
  store i64 %121, ptr %29, align 8, !tbaa !11
  %122 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3minImERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %29, ptr noundef nonnull align 8 dereferenceable(8) %13)
  %123 = load i64, ptr %122, align 8, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %29) #8
  %.not49 = icmp ult i64 %123, %120
  br i1 %.not49, label %124, label %125

124:                                              ; preds = %119
  call void @__assert_fail(ptr noundef nonnull @.str.13, ptr noundef nonnull @.str.4, i32 noundef 306, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN9starspace10EmbedModel5trainESt10shared_ptrINS_17InternDataHandlerEEiNSt6chrono10time_pointINS4_3_V212system_clockENS4_8durationIlSt5ratioILl1ELl1000000000EEEEEEiffb) #7
  unreachable

125:                                              ; preds = %119
  %126 = load i64, ptr %13, align 8, !tbaa !11
  %.not50 = icmp ugt i64 %123, %126
  br i1 %.not50, label %127, label %128

127:                                              ; preds = %125
  call void @__assert_fail(ptr noundef nonnull @.str.14, ptr noundef nonnull @.str.4, i32 noundef 307, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN9starspace10EmbedModel5trainESt10shared_ptrINS_17InternDataHandlerEEiNSt6chrono10time_pointINS4_3_V212system_clockENS4_8durationIlSt5ratioILl1ELl1000000000EEEEEEiffb) #7
  unreachable

128:                                              ; preds = %125
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %30) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %31) #8
  %129 = call ptr @_ZNSt6vectorIiSaIiEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %14) #8
  store ptr %129, ptr %31, align 8
  %130 = call ptr @_ZNK9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEplEl(ptr noundef nonnull align 8 dereferenceable(8) %31, i64 noundef %120) #8
  store ptr %130, ptr %30, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %31) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %32) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %33) #8
  %131 = call ptr @_ZNSt6vectorIiSaIiEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %14) #8
  store ptr %131, ptr %33, align 8
  %132 = call ptr @_ZNK9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEplEl(ptr noundef nonnull align 8 dereferenceable(8) %33, i64 noundef %123) #8
  store ptr %132, ptr %32, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %33) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %34) #8
  %133 = call ptr @_ZNSt6vectorIiSaIiEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %14) #8
  store ptr %133, ptr %34, align 8
  %134 = call noundef zeroext i1 @_ZN9__gnu_cxxgeIPiSt6vectorIiSaIiEEEEbRKNS_17__normal_iteratorIT_T0_EESA_(ptr noundef nonnull align 8 dereferenceable(8) %30, ptr noundef nonnull align 8 dereferenceable(8) %34) #8
  br i1 %134, label %136, label %135

135:                                              ; preds = %128
  call void @__assert_fail(ptr noundef nonnull @.str.15, ptr noundef nonnull @.str.4, i32 noundef 310, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN9starspace10EmbedModel5trainESt10shared_ptrINS_17InternDataHandlerEEiNSt6chrono10time_pointINS4_3_V212system_clockENS4_8durationIlSt5ratioILl1ELl1000000000EEEEEEiffb) #7
  unreachable

136:                                              ; preds = %128
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %34) #8
  %137 = call noundef zeroext i1 @_ZN9__gnu_cxxgeIPiSt6vectorIiSaIiEEEEbRKNS_17__normal_iteratorIT_T0_EESA_(ptr noundef nonnull align 8 dereferenceable(8) %32, ptr noundef nonnull align 8 dereferenceable(8) %30) #8
  br i1 %137, label %139, label %138

138:                                              ; preds = %136
  call void @__assert_fail(ptr noundef nonnull @.str.16, ptr noundef nonnull @.str.4, i32 noundef 311, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN9starspace10EmbedModel5trainESt10shared_ptrINS_17InternDataHandlerEEiNSt6chrono10time_pointINS4_3_V212system_clockENS4_8durationIlSt5ratioILl1ELl1000000000EEEEEEiffb) #7
  unreachable

139:                                              ; preds = %136
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %35) #8
  %140 = call ptr @_ZNSt6vectorIiSaIiEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %14) #8
  store ptr %140, ptr %35, align 8
  %141 = call noundef zeroext i1 @_ZN9__gnu_cxxleIPiSt6vectorIiSaIiEEEEbRKNS_17__normal_iteratorIT_T0_EESA_(ptr noundef nonnull align 8 dereferenceable(8) %32, ptr noundef nonnull align 8 dereferenceable(8) %35) #8
  br i1 %141, label %143, label %142

142:                                              ; preds = %139
  call void @__assert_fail(ptr noundef nonnull @.str.17, ptr noundef nonnull @.str.4, i32 noundef 312, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN9starspace10EmbedModel5trainESt10shared_ptrINS_17InternDataHandlerEEiNSt6chrono10time_pointINS4_3_V212system_clockENS4_8durationIlSt5ratioILl1ELl1000000000EEEEEEiffb) #7
  unreachable

143:                                              ; preds = %139
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %35) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %36) #8
  call void @llvm.lifetime.start.p0(i64 104, ptr nonnull %37) #8
  store ptr %14, ptr %37, align 8, !tbaa !25
  store ptr %23, ptr %.sroa.5.0..sroa_idx, align 8, !tbaa !25
  store ptr %25, ptr %.sroa.6.0..sroa_idx, align 8, !tbaa !25
  store ptr %0, ptr %.sroa.7.0..sroa_idx, align 8, !tbaa !25
  store ptr %1, ptr %.sroa.8.0..sroa_idx, align 8, !tbaa !25
  store ptr %19, ptr %.sroa.9.0..sroa_idx, align 8, !tbaa !25
  store ptr %12, ptr %.sroa.10.0..sroa_idx, align 8, !tbaa !25
  store ptr %18, ptr %.sroa.11.0..sroa_idx, align 8, !tbaa !25
  store ptr %9, ptr %.sroa.12.0..sroa_idx, align 8, !tbaa !25
  store ptr %11, ptr %.sroa.13.0..sroa_idx, align 8, !tbaa !25
  store i64 %.04159, ptr %110, align 8, !tbaa !28
  %144 = load i64, ptr %30, align 8, !tbaa !25
  store i64 %144, ptr %111, align 8, !tbaa !25
  %145 = load i64, ptr %32, align 8, !tbaa !25
  store i64 %145, ptr %112, align 8, !tbaa !25
  invoke void @"_ZNSt6threadC2IZN9starspace10EmbedModel5trainESt10shared_ptrINS1_17InternDataHandlerEEiNSt6chrono10time_pointINS6_3_V212system_clockENS6_8durationIlSt5ratioILl1ELl1000000000EEEEEEiffbE3$_1JEvEEOT_DpOT0_"(ptr noundef nonnull align 8 dereferenceable(8) %36, ptr noundef nonnull align 8 dereferenceable(104) %37)
          to label %146 unwind label %153

146:                                              ; preds = %143
  %147 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorISt6threadSaIS0_EE12emplace_backIJS0_EEERS0_DpOT_(ptr noundef nonnull align 8 dereferenceable(24) %27, ptr noundef nonnull align 8 dereferenceable(8) %36)
          to label %148 unwind label %155

148:                                              ; preds = %146
  call void @_ZNSt6threadD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %36) #8
  call void @llvm.lifetime.end.p0(i64 104, ptr nonnull %37) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %36) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %32) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %30) #8
  %149 = add nuw i64 %.04159, 1
  %150 = load i32, ptr %10, align 4, !tbaa !5
  %151 = sext i32 %150 to i64
  %152 = icmp ult i64 %149, %151
  br i1 %152, label %119, label %._crit_edge61, !llvm.loop !32

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

155:                                              ; preds = %146
  %156 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt6threadD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %36) #8
  br label %157

157:                                              ; preds = %155, %153
  %.pn51 = phi { ptr, i32 } [ %156, %155 ], [ %154, %153 ]
  call void @llvm.lifetime.end.p0(i64 104, ptr nonnull %37) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %36) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %32) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %30) #8
  br label %184

158:                                              ; preds = %._crit_edge61
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %39) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %40) #8
  %159 = call ptr @_ZNSt6vectorISt6threadSaIS0_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %27) #8
  store ptr %159, ptr %40, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %41) #8
  %160 = call ptr @_ZNSt6vectorISt6threadSaIS0_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %27) #8
  store ptr %160, ptr %41, align 8
  %161 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPSt6threadSt6vectorIS1_SaIS1_EEEEbRKNS_17__normal_iteratorIT_T0_EESB_(ptr noundef nonnull align 8 dereferenceable(8) %40, ptr noundef nonnull align 8 dereferenceable(8) %41) #8
  br i1 %161, label %.lr.ph63, label %._crit_edge64

._crit_edge64:                                    ; preds = %165, %158
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %41) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %40) #8
  store i8 1, ptr %28, align 1, !tbaa !24
  invoke void @_ZNSt6thread4joinEv(ptr noundef nonnull align 8 dereferenceable(8) %38)
          to label %170 unwind label %180

162:                                              ; preds = %._crit_edge61
  %163 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %39) #8
  br label %183

.lr.ph63:                                         ; preds = %158, %165
  %164 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPSt6threadSt6vectorIS1_SaIS1_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %40) #8
  invoke void @_ZNSt6thread4joinEv(ptr noundef nonnull align 8 dereferenceable(8) %164)
          to label %165 unwind label %168

165:                                              ; preds = %.lr.ph63
  %166 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPSt6threadSt6vectorIS1_SaIS1_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %40) #8
  %167 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPSt6threadSt6vectorIS1_SaIS1_EEEEbRKNS_17__normal_iteratorIT_T0_EESB_(ptr noundef nonnull align 8 dereferenceable(8) %40, ptr noundef nonnull align 8 dereferenceable(8) %41) #8
  br i1 %167, label %.lr.ph63, label %._crit_edge64

168:                                              ; preds = %.lr.ph63
  %169 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %41) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %40) #8
  br label %182

170:                                              ; preds = %._crit_edge64
  %171 = call ptr @_ZNSt6vectorIfSaIfEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %23) #8
  %172 = call ptr @_ZNSt6vectorIfSaIfEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %23) #8
  %173 = call noundef double @_ZSt10accumulateIN9__gnu_cxx17__normal_iteratorIPfSt6vectorIfSaIfEEEEdET0_T_S8_S7_(ptr %171, ptr %172, double noundef 0.000000e+00)
  %174 = fptrunc double %173 to float
  %175 = call ptr @_ZNSt6vectorIlSaIlEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %25) #8
  %176 = call ptr @_ZNSt6vectorIlSaIlEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %25) #8
  %177 = call noundef i32 @_ZSt10accumulateIN9__gnu_cxx17__normal_iteratorIPlSt6vectorIlSaIlEEEEiET0_T_S8_S7_(ptr %175, ptr %176, i32 noundef 0)
  %178 = sitofp i32 %177 to float
  %179 = fdiv float %174, %178
  call void @_ZNSt6threadD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %38) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %38) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %28) #8
  call void @_ZNSt6vectorISt6threadSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %27) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %27) #8
  call void @_ZNSt6vectorIlSaIlEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %25) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %25) #8
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %23) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %23) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %19) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %18) #8
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %14) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %14) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #8
  ret float %179

180:                                              ; preds = %._crit_edge64
  %181 = landingpad { ptr, i32 }
          cleanup
  br label %182

182:                                              ; preds = %180, %168
  %.pn = phi { ptr, i32 } [ %169, %168 ], [ %181, %180 ]
  call void @_ZNSt6threadD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %38) #8
  br label %183

183:                                              ; preds = %182, %162
  %.pn.pn = phi { ptr, i32 } [ %.pn, %182 ], [ %163, %162 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %38) #8
  br label %184

184:                                              ; preds = %183, %157
  %.pn51.pn = phi { ptr, i32 } [ %.pn51, %157 ], [ %.pn.pn, %183 ]
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %28) #8
  call void @_ZNSt6vectorISt6threadSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %27) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %27) #8
  call void @_ZNSt6vectorIlSaIlEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %25) #8
  br label %185

185:                                              ; preds = %184, %116
  %.pn51.pn.pn = phi { ptr, i32 } [ %.pn51.pn, %184 ], [ %117, %116 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %25) #8
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %23) #8
  br label %186

186:                                              ; preds = %185, %114
  %.pn51.pn.pn.pn = phi { ptr, i32 } [ %.pn51.pn.pn, %185 ], [ %115, %114 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %23) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %19) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %18) #8
  br label %187

187:                                              ; preds = %186, %75
  %.pn51.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn51.pn.pn.pn, %186 ], [ %76, %75 ]
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %14) #8
  br label %188

188:                                              ; preds = %187, %56
  %.pn51.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn51.pn.pn.pn.pn, %187 ], [ %57, %56 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %14) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #8
  resume { ptr, i32 } %.pn51.pn.pn.pn.pn.pn
}

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNK9starspace17InternDataHandler7getSizeEv(ptr noundef nonnull align 8 dereferenceable(88)) local_unnamed_addr #0 align 2

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

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZSt14random_shuffleIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEEvT_S7_(ptr, ptr) local_unnamed_addr #5

declare void @_ZN9starspace17InternDataHandler17initWordNegativesEv(ptr noundef nonnull align 8 dereferenceable(88)) local_unnamed_addr #6

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

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

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef double @_ZSt4ceilImEN9__gnu_cxx11__enable_ifIXsr12__is_integerIT_EE7__valueEdE6__typeES2_(i64 noundef) local_unnamed_addr #4

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

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

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

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

; Function Attrs: mustprogress uwtable
declare hidden void @"_ZNSt6threadC2IZN9starspace10EmbedModel5trainESt10shared_ptrINS1_17InternDataHandlerEEiNSt6chrono10time_pointINS6_3_V212system_clockENS6_8durationIlSt5ratioILl1ELl1000000000EEEEEEiffbE3$_1JEvEEOT_DpOT0_"(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(104)) unnamed_addr #3 align 2

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

; Function Attrs: mustprogress uwtable
declare hidden void @"_ZNSt6threadC2IZN9starspace10EmbedModel5trainESt10shared_ptrINS1_17InternDataHandlerEEiNSt6chrono10time_pointINS6_3_V212system_clockENS6_8durationIlSt5ratioILl1ELl1000000000EEEEEEiffbE3$_2JEvEEOT_DpOT0_"(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #3 align 2

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

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

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

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

declare void @_ZNSt6thread4joinEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #6

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef double @_ZSt10accumulateIN9__gnu_cxx17__normal_iteratorIPfSt6vectorIfSaIfEEEEdET0_T_S8_S7_(ptr, ptr, double noundef) local_unnamed_addr #4

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZSt10accumulateIN9__gnu_cxx17__normal_iteratorIPlSt6vectorIlSaIlEEEEiET0_T_S8_S7_(ptr, ptr, i32 noundef) local_unnamed_addr #4

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

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

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

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

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

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

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

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

attributes #0 = { 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 #1 = { noreturn 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 #2 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
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 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { 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 #6 = { "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 = { noreturn nounwind }
attributes #8 = { 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 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"float", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"long", !7, i64 0}
!13 = !{!14, !6, i64 516}
!14 = !{!"_ZTSN9starspace4ArgsE", !15, i64 0, !15, i64 32, !15, i64 64, !15, i64 96, !15, i64 128, !15, i64 160, !15, i64 192, !15, i64 224, !15, i64 256, !15, i64 288, !15, i64 320, !15, i64 352, !7, i64 384, !18, i64 392, !18, i64 400, !18, i64 408, !18, i64 416, !18, i64 424, !18, i64 432, !18, i64 440, !18, i64 448, !18, i64 456, !12, i64 464, !6, i64 472, !6, i64 476, !6, i64 480, !6, i64 484, !6, i64 488, !6, i64 492, !6, i64 496, !6, i64 500, !6, i64 504, !6, i64 508, !6, i64 512, !6, i64 516, !6, i64 520, !6, i64 524, !6, i64 528, !19, i64 532, !19, i64 533, !19, i64 534, !19, i64 535, !19, i64 536, !19, i64 537, !19, i64 538, !19, i64 539, !19, i64 540, !19, i64 541, !19, i64 542}
!15 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !16, i64 0, !12, i64 8, !7, i64 16}
!16 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !17, i64 0}
!17 = !{!"any pointer", !7, i64 0}
!18 = !{!"double", !7, i64 0}
!19 = !{!"bool", !7, i64 0}
!20 = !{!14, !19, i64 541}
!21 = !{i8 0, i8 2}
!22 = !{}
!23 = !{!14, !6, i64 496}
!24 = !{!19, !19, i64 0}
!25 = !{!17, !17, i64 0}
!26 = !{!27, !17, i64 8}
!27 = !{!"_ZTSZN9starspace10EmbedModel5trainESt10shared_ptrINS_17InternDataHandlerEEiNSt6chrono10time_pointINS4_3_V212system_clockENS4_8durationIlSt5ratioILl1ELl1000000000EEEEEEiffbE3$_2", !17, i64 0, !17, i64 8}
!28 = !{!29, !12, i64 80}
!29 = !{!"_ZTSZN9starspace10EmbedModel5trainESt10shared_ptrINS_17InternDataHandlerEEiNSt6chrono10time_pointINS4_3_V212system_clockENS4_8durationIlSt5ratioILl1ELl1000000000EEEEEEiffbE3$_1", !30, i64 0, !12, i64 80, !31, i64 88, !31, i64 96}
!30 = !{!"_ZTSZN9starspace10EmbedModel5trainESt10shared_ptrINS_17InternDataHandlerEEiNSt6chrono10time_pointINS4_3_V212system_clockENS4_8durationIlSt5ratioILl1ELl1000000000EEEEEEiffbE3$_0", !17, i64 0, !17, i64 8, !17, i64 16, !17, i64 24, !17, i64 32, !17, i64 40, !17, i64 48, !17, i64 56, !17, i64 64, !17, i64 72}
!31 = !{!"_ZTSN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEE", !17, i64 0}
!32 = distinct !{!32, !33}
!33 = !{!"llvm.loop.mustprogress"}


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