; 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::vector.52" = type { %"struct.std::_Vector_base.53" }
%"struct.std::_Vector_base.53" = type { %"struct.std::_Vector_base<starspace::Matrix<>, std::allocator<starspace::Matrix<>>>::_Vector_impl" }
%"struct.std::_Vector_base<starspace::Matrix<>, std::allocator<starspace::Matrix<>>>::_Vector_impl" = type { %"struct.std::_Vector_base<starspace::Matrix<>, std::allocator<starspace::Matrix<>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<starspace::Matrix<>, std::allocator<starspace::Matrix<>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::allocator.54" = type { i8 }
%"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.anon.62 = type { ptr }
%"class.std::vector.57" = type { %"struct.std::_Vector_base.58" }
%"struct.std::_Vector_base.58" = type { %"struct.std::_Vector_base<std::vector<std::pair<int, float>>, std::allocator<std::vector<std::pair<int, float>>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::vector<std::pair<int, float>>, std::allocator<std::vector<std::pair<int, float>>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::vector<std::pair<int, float>>, std::allocator<std::vector<std::pair<int, float>>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::vector<std::pair<int, float>>, std::allocator<std::vector<std::pair<int, float>>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.24" = type { %"struct.std::_Vector_base.25" }
%"struct.std::_Vector_base.25" = type { %"struct.std::_Vector_base<std::pair<int, float>, std::allocator<std::pair<int, float>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::pair<int, float>, std::allocator<std::pair<int, float>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::pair<int, float>, std::allocator<std::pair<int, float>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::pair<int, float>, std::allocator<std::pair<int, float>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"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.std::vector.63" = type { %"struct.std::_Vector_base.64" }
%"struct.std::_Vector_base.64" = type { %"struct.std::_Vector_base<std::vector<float>, std::allocator<std::vector<float>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::vector<float>, std::allocator<std::vector<float>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::vector<float>, std::allocator<std::vector<float>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::vector<float>, std::allocator<std::vector<float>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::allocator.65" = type { i8 }
%"class.std::vector.68" = type { %"struct.std::_Vector_base.69" }
%"struct.std::_Vector_base.69" = type { %"struct.std::_Vector_base<std::vector<bool>, std::allocator<std::vector<bool>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::vector<bool>, std::allocator<std::vector<bool>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::vector<bool>, std::allocator<std::vector<bool>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::vector<bool>, std::allocator<std::vector<bool>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.boost::numeric::ublas::zero_matrix" = type { i64, i64 }
%"struct.std::_Bit_reference" = type { ptr, i64 }
%"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] }
%"struct.starspace::ParseResults" = type { float, %"class.std::vector.24", %"class.std::vector.24", %"class.std::vector.57" }
%"struct.starspace::Matrix" = type { %"class.boost::numeric::ublas::matrix" }
%"class.boost::numeric::ublas::matrix" = type { i64, i64, %"class.boost::numeric::ublas::unbounded_array" }
%"class.boost::numeric::ublas::unbounded_array" = type { [8 x i8], i64, ptr }

@.str.4 = external hidden unnamed_addr constant [74 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [15 x i8], align 1
@__PRETTY_FUNCTION__._ZN9starspace10EmbedModel13trainOneBatchESt10shared_ptrINS_17InternDataHandlerEERKSt6vectorINS_12ParseResultsESaIS5_EEmfb = external hidden unnamed_addr constant [124 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [24 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
declare dso_local void @_ZN9starspace10EmbedModel10projectRHSERKSt6vectorISt4pairIifESaIS3_EERNS_6MatrixIfEE(ptr noundef nonnull align 8 dereferenceable(112), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(40)) #3 align 2

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

; 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 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 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 @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #0 align 2

; Function Attrs: mustprogress uwtable
define dso_local noundef float @_ZN9starspace10EmbedModel13trainOneBatchESt10shared_ptrINS_17InternDataHandlerEERKSt6vectorINS_12ParseResultsESaIS5_EEmfb(ptr noundef nonnull align 8 dereferenceable(112) %0, ptr noundef %1, ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef %3, float noundef %4, i1 noundef zeroext %5) #3 align 2 personality ptr @__gxx_personality_v0 {
  %7 = alloca float, align 4
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca i64, align 8
  %12 = alloca float, align 4
  %13 = alloca i8, align 1
  %14 = alloca i32, align 4
  %15 = alloca %"class.std::vector.52", align 8
  %16 = alloca %"class.std::allocator.54", align 1
  %17 = alloca ptr, align 8
  %18 = alloca i32, align 4
  %19 = alloca %"class.std::vector.52", align 8
  %20 = alloca %"class.std::allocator.54", align 1
  %21 = alloca %"class.std::vector", align 8
  %22 = alloca %"class.std::allocator", align 1
  %23 = alloca %"class.std::vector", align 8
  %24 = alloca float, align 4
  %25 = alloca %"class.std::allocator", align 1
  %26 = alloca i64, align 8
  %27 = alloca i32, align 4
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  %30 = alloca %class.anon.62, align 8
  %31 = alloca %"class.std::vector.52", align 8
  %32 = alloca %"class.std::allocator.54", align 1
  %33 = alloca %"class.std::vector.57", align 8
  %34 = alloca i32, align 4
  %35 = alloca %"class.std::vector.24", align 8
  %36 = alloca float, align 4
  %37 = alloca %"class.std::vector", align 8
  %38 = alloca %"class.std::allocator", align 1
  %39 = alloca %"class.std::vector.52", align 8
  %40 = alloca %"class.std::allocator.54", align 1
  %41 = alloca %"class.std::vector.11", align 8
  %42 = alloca %"class.std::allocator.13", align 1
  %43 = alloca %"class.std::vector.63", align 8
  %44 = alloca %"class.std::allocator.65", align 1
  %45 = alloca %"class.std::vector.68", align 8
  %46 = alloca i32, align 4
  %47 = alloca i32, align 4
  %48 = alloca %"class.boost::numeric::ublas::zero_matrix", align 8
  %49 = alloca float, align 4
  %50 = alloca i32, align 4
  %51 = alloca double, align 8
  %52 = alloca %"struct.std::_Bit_reference", align 8
  %53 = alloca i32, align 4
  %54 = alloca %"struct.std::_Bit_reference", align 8
  %55 = alloca %"class.std::vector.52", align 8
  %56 = alloca %"class.std::vector.52", align 8
  store ptr %0, ptr %8, align 8, !tbaa !5
  store ptr %1, ptr %9, align 8, !tbaa !5
  store ptr %2, ptr %10, align 8, !tbaa !5
  store i64 %3, ptr %11, align 8, !tbaa !9
  store float %4, ptr %12, align 4, !tbaa !11
  %57 = zext i1 %5 to i8
  store i8 %57, ptr %13, align 1, !tbaa !13
  %58 = load ptr, ptr %8, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #6
  %59 = load ptr, ptr %10, align 8, !tbaa !5
  %60 = call noundef i64 @_ZNKSt6vectorIN9starspace12ParseResultsESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %59) #6
  %61 = trunc i64 %60 to i32
  store i32 %61, ptr %14, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 24, ptr %15) #6
  %62 = load i32, ptr %14, align 4, !tbaa !15
  %63 = sext i32 %62 to i64
  call void @llvm.lifetime.start.p0(i64 1, ptr %16) #6
  call void @_ZNSaIN9starspace6MatrixIfEEEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %16) #6
  invoke void @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EEC2EmRKS3_(ptr noundef nonnull align 8 dereferenceable(24) %15, i64 noundef %63, ptr noundef nonnull align 1 dereferenceable(1) %16)
          to label %64 unwind label %85

64:                                               ; preds = %6
  call void @_ZNSt15__new_allocatorIN9starspace6MatrixIfEEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %16) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %16) #6
  call void @llvm.lifetime.start.p0(i64 24, ptr %19) #6
  %65 = load i32, ptr %14, align 4, !tbaa !15
  %66 = sext i32 %65 to i64
  call void @llvm.lifetime.start.p0(i64 1, ptr %20) #6
  call void @_ZNSaIN9starspace6MatrixIfEEEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %20) #6
  invoke void @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EEC2EmRKS3_(ptr noundef nonnull align 8 dereferenceable(24) %19, i64 noundef %66, ptr noundef nonnull align 1 dereferenceable(1) %20)
          to label %67 unwind label %89

67:                                               ; preds = %64
  call void @_ZNSt15__new_allocatorIN9starspace6MatrixIfEEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %20) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %20) #6
  call void @llvm.lifetime.start.p0(i64 24, ptr %21) #6
  %68 = load i32, ptr %14, align 4, !tbaa !15
  %69 = sext i32 %68 to i64
  call void @llvm.lifetime.start.p0(i64 1, ptr %22) #6
  call void @_ZNSaIfEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %22) #6
  invoke void @_ZNSt6vectorIfSaIfEEC2EmRKS0_(ptr noundef nonnull align 8 dereferenceable(24) %21, i64 noundef %69, ptr noundef nonnull align 1 dereferenceable(1) %22)
          to label %70 unwind label %93

70:                                               ; preds = %67
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %22) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %22) #6
  call void @llvm.lifetime.start.p0(i64 24, ptr %23) #6
  %71 = load i32, ptr %14, align 4, !tbaa !15
  %72 = sext i32 %71 to i64
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #6
  %73 = load float, ptr %12, align 4, !tbaa !11
  %74 = fneg float %73
  store float %74, ptr %24, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr %25) #6
  call void @_ZNSaIfEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %25) #6
  invoke void @_ZNSt6vectorIfSaIfEEC2EmRKfRKS0_(ptr noundef nonnull align 8 dereferenceable(24) %23, i64 noundef %72, ptr noundef nonnull align 4 dereferenceable(4) %24, ptr noundef nonnull align 1 dereferenceable(1) %25)
          to label %75 unwind label %97

75:                                               ; preds = %70
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %25) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %25) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #6
  %76 = getelementptr inbounds %"struct.starspace::EmbedModel", ptr %58, i32 0, i32 3
  %77 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN9starspace4ArgsELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %76) #6
  %78 = getelementptr inbounds %"class.starspace::Args", ptr %77, i32 0, i32 23
  %79 = load i64, ptr %78, align 8, !tbaa !17
  store i64 %79, ptr %26, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #6
  store i32 0, ptr %27, align 4, !tbaa !15
  br label %80

80:                                               ; preds = %141, %75
  %81 = load i32, ptr %27, align 4, !tbaa !15
  %82 = load i32, ptr %14, align 4, !tbaa !15
  %83 = icmp slt i32 %81, %82
  br i1 %83, label %101, label %84

84:                                               ; preds = %80
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #6
  br label %148

85:                                               ; preds = %6
  %86 = landingpad { ptr, i32 }
          cleanup
  %87 = extractvalue { ptr, i32 } %86, 0
  store ptr %87, ptr %17, align 8
  %88 = extractvalue { ptr, i32 } %86, 1
  store i32 %88, ptr %18, align 4
  call void @_ZNSt15__new_allocatorIN9starspace6MatrixIfEEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %16) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %16) #6
  br label %522

89:                                               ; preds = %64
  %90 = landingpad { ptr, i32 }
          cleanup
  %91 = extractvalue { ptr, i32 } %90, 0
  store ptr %91, ptr %17, align 8
  %92 = extractvalue { ptr, i32 } %90, 1
  store i32 %92, ptr %18, align 4
  call void @_ZNSt15__new_allocatorIN9starspace6MatrixIfEEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %20) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %20) #6
  br label %521

93:                                               ; preds = %67
  %94 = landingpad { ptr, i32 }
          cleanup
  %95 = extractvalue { ptr, i32 } %94, 0
  store ptr %95, ptr %17, align 8
  %96 = extractvalue { ptr, i32 } %94, 1
  store i32 %96, ptr %18, align 4
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %22) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %22) #6
  br label %520

97:                                               ; preds = %70
  %98 = landingpad { ptr, i32 }
          cleanup
  %99 = extractvalue { ptr, i32 } %98, 0
  store ptr %99, ptr %17, align 8
  %100 = extractvalue { ptr, i32 } %98, 1
  store i32 %100, ptr %18, align 4
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %25) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %25) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #6
  br label %519

101:                                              ; preds = %80
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #6
  %102 = load ptr, ptr %10, align 8, !tbaa !5
  %103 = load i32, ptr %27, align 4, !tbaa !15
  %104 = sext i32 %103 to i64
  %105 = call noundef nonnull align 8 dereferenceable(80) ptr @_ZNKSt6vectorIN9starspace12ParseResultsESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %102, i64 noundef %104) #6
  %106 = getelementptr inbounds %"struct.starspace::ParseResults", ptr %105, i32 0, i32 1
  store ptr %106, ptr %28, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #6
  %107 = load ptr, ptr %10, align 8, !tbaa !5
  %108 = load i32, ptr %27, align 4, !tbaa !15
  %109 = sext i32 %108 to i64
  %110 = call noundef nonnull align 8 dereferenceable(80) ptr @_ZNKSt6vectorIN9starspace12ParseResultsESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %107, i64 noundef %109) #6
  %111 = getelementptr inbounds %"struct.starspace::ParseResults", ptr %110, i32 0, i32 2
  store ptr %111, ptr %29, align 8, !tbaa !5
  %112 = load ptr, ptr %28, align 8, !tbaa !5
  %113 = load i32, ptr %27, align 4, !tbaa !15
  %114 = sext i32 %113 to i64
  %115 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %15, i64 noundef %114) #6
  invoke void @_ZN9starspace10EmbedModel10projectLHSERKSt6vectorISt4pairIifESaIS3_EERNS_6MatrixIfEE(ptr noundef nonnull align 8 dereferenceable(112) %58, ptr noundef nonnull align 8 dereferenceable(24) %112, ptr noundef nonnull align 8 dereferenceable(40) %115)
          to label %116 unwind label %144

116:                                              ; preds = %101
  %117 = load i32, ptr %27, align 4, !tbaa !15
  %118 = sext i32 %117 to i64
  %119 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %15, i64 noundef %118) #6
  invoke void @_ZN9starspace10EmbedModel5checkERKNS_6MatrixIfEE(ptr noundef nonnull align 8 dereferenceable(40) %119)
          to label %120 unwind label %144

120:                                              ; preds = %116
  %121 = load ptr, ptr %29, align 8, !tbaa !5
  %122 = load i32, ptr %27, align 4, !tbaa !15
  %123 = sext i32 %122 to i64
  %124 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %19, i64 noundef %123) #6
  invoke void @_ZN9starspace10EmbedModel10projectRHSERKSt6vectorISt4pairIifESaIS3_EERNS_6MatrixIfEE(ptr noundef nonnull align 8 dereferenceable(112) %58, ptr noundef nonnull align 8 dereferenceable(24) %121, ptr noundef nonnull align 8 dereferenceable(40) %124)
          to label %125 unwind label %144

125:                                              ; preds = %120
  %126 = load i32, ptr %27, align 4, !tbaa !15
  %127 = sext i32 %126 to i64
  %128 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %19, i64 noundef %127) #6
  invoke void @_ZN9starspace10EmbedModel5checkERKNS_6MatrixIfEE(ptr noundef nonnull align 8 dereferenceable(40) %128)
          to label %129 unwind label %144

129:                                              ; preds = %125
  %130 = load i32, ptr %27, align 4, !tbaa !15
  %131 = sext i32 %130 to i64
  %132 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %15, i64 noundef %131) #6
  %133 = load i32, ptr %27, align 4, !tbaa !15
  %134 = sext i32 %133 to i64
  %135 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %19, i64 noundef %134) #6
  %136 = invoke noundef float @_ZN9starspace10EmbedModel10similarityERNS_6MatrixIfEES3_(ptr noundef nonnull align 8 dereferenceable(112) %58, ptr noundef nonnull align 8 dereferenceable(40) %132, ptr noundef nonnull align 8 dereferenceable(40) %135)
          to label %137 unwind label %144

137:                                              ; preds = %129
  %138 = load i32, ptr %27, align 4, !tbaa !15
  %139 = sext i32 %138 to i64
  %140 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %21, i64 noundef %139) #6
  store float %136, ptr %140, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #6
  br label %141

141:                                              ; preds = %137
  %142 = load i32, ptr %27, align 4, !tbaa !15
  %143 = add nsw i32 %142, 1
  store i32 %143, ptr %27, align 4, !tbaa !15
  br label %80, !llvm.loop !22

144:                                              ; preds = %129, %125, %120, %116, %101
  %145 = landingpad { ptr, i32 }
          cleanup
  %146 = extractvalue { ptr, i32 } %145, 0
  store ptr %146, ptr %17, align 8
  %147 = extractvalue { ptr, i32 } %145, 1
  store i32 %147, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #6
  br label %518

148:                                              ; preds = %84
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #6
  %149 = getelementptr inbounds %class.anon.62, ptr %30, i32 0, i32 0
  store ptr %58, ptr %149, align 8, !tbaa !24
  call void @llvm.lifetime.start.p0(i64 24, ptr %31) #6
  %150 = load i64, ptr %11, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %32) #6
  call void @_ZNSaIN9starspace6MatrixIfEEEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %32) #6
  invoke void @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EEC2EmRKS3_(ptr noundef nonnull align 8 dereferenceable(24) %31, i64 noundef %150, ptr noundef nonnull align 1 dereferenceable(1) %32)
          to label %151 unwind label %158

151:                                              ; preds = %148
  call void @_ZNSt15__new_allocatorIN9starspace6MatrixIfEEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %32) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %32) #6
  call void @llvm.lifetime.start.p0(i64 24, ptr %33) #6
  call void @_ZNSt6vectorIS_ISt4pairIifESaIS1_EESaIS3_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %33) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #6
  store i32 0, ptr %34, align 4, !tbaa !15
  br label %152

152:                                              ; preds = %188, %151
  %153 = load i32, ptr %34, align 4, !tbaa !15
  %154 = zext i32 %153 to i64
  %155 = load i64, ptr %11, align 8, !tbaa !9
  %156 = icmp ult i64 %154, %155
  br i1 %156, label %162, label %157

157:                                              ; preds = %152
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #6
  br label %191

158:                                              ; preds = %148
  %159 = landingpad { ptr, i32 }
          cleanup
  %160 = extractvalue { ptr, i32 } %159, 0
  store ptr %160, ptr %17, align 8
  %161 = extractvalue { ptr, i32 } %159, 1
  store i32 %161, ptr %18, align 4
  call void @_ZNSt15__new_allocatorIN9starspace6MatrixIfEEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %32) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %32) #6
  br label %517

162:                                              ; preds = %152
  call void @llvm.lifetime.start.p0(i64 24, ptr %35) #6
  call void @_ZNSt6vectorISt4pairIifESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %35) #6
  %163 = load i8, ptr %13, align 1, !tbaa !13, !range !26, !noundef !27
  %164 = trunc i8 %163 to i1
  br i1 %164, label %165, label %172

165:                                              ; preds = %162
  %166 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN9starspace17InternDataHandlerELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %1) #6
  invoke void @_ZN9starspace17InternDataHandler13getRandomWordERSt6vectorISt4pairIifESaIS3_EE(ptr noundef nonnull align 8 dereferenceable(88) %166, ptr noundef nonnull align 8 dereferenceable(24) %35)
          to label %167 unwind label %168

167:                                              ; preds = %165
  br label %178

168:                                              ; preds = %186, %182, %178, %172, %165
  %169 = landingpad { ptr, i32 }
          cleanup
  %170 = extractvalue { ptr, i32 } %169, 0
  store ptr %170, ptr %17, align 8
  %171 = extractvalue { ptr, i32 } %169, 1
  store i32 %171, ptr %18, align 4
  call void @_ZNSt6vectorISt4pairIifESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %35) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %35) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #6
  br label %516

172:                                              ; preds = %162
  %173 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN9starspace17InternDataHandlerELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %1) #6
  %174 = load ptr, ptr %173, align 8, !tbaa !28
  %175 = getelementptr inbounds ptr, ptr %174, i64 2
  %176 = load ptr, ptr %175, align 8
  invoke void %176(ptr noundef nonnull align 8 dereferenceable(88) %173, ptr noundef nonnull align 8 dereferenceable(24) %35)
          to label %177 unwind label %168

177:                                              ; preds = %172
  br label %178

178:                                              ; preds = %177, %167
  %179 = load i32, ptr %34, align 4, !tbaa !15
  %180 = zext i32 %179 to i64
  %181 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %31, i64 noundef %180) #6
  invoke void @_ZN9starspace10EmbedModel10projectRHSERKSt6vectorISt4pairIifESaIS3_EERNS_6MatrixIfEE(ptr noundef nonnull align 8 dereferenceable(112) %58, ptr noundef nonnull align 8 dereferenceable(24) %35, ptr noundef nonnull align 8 dereferenceable(40) %181)
          to label %182 unwind label %168

182:                                              ; preds = %178
  %183 = load i32, ptr %34, align 4, !tbaa !15
  %184 = zext i32 %183 to i64
  %185 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %31, i64 noundef %184) #6
  invoke void @_ZN9starspace10EmbedModel5checkERKNS_6MatrixIfEE(ptr noundef nonnull align 8 dereferenceable(40) %185)
          to label %186 unwind label %168

186:                                              ; preds = %182
  invoke void @_ZNSt6vectorIS_ISt4pairIifESaIS1_EESaIS3_EE9push_backERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %33, ptr noundef nonnull align 8 dereferenceable(24) %35)
          to label %187 unwind label %168

187:                                              ; preds = %186
  call void @_ZNSt6vectorISt4pairIifESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %35) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %35) #6
  br label %188

188:                                              ; preds = %187
  %189 = load i32, ptr %34, align 4, !tbaa !15
  %190 = add i32 %189, 1
  store i32 %190, ptr %34, align 4, !tbaa !15
  br label %152, !llvm.loop !30

191:                                              ; preds = %157
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #6
  store float 0.000000e+00, ptr %36, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 24, ptr %37) #6
  %192 = load i32, ptr %14, align 4, !tbaa !15
  %193 = sext i32 %192 to i64
  call void @llvm.lifetime.start.p0(i64 1, ptr %38) #6
  call void @_ZNSaIfEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %38) #6
  invoke void @_ZNSt6vectorIfSaIfEEC2EmRKS0_(ptr noundef nonnull align 8 dereferenceable(24) %37, i64 noundef %193, ptr noundef nonnull align 1 dereferenceable(1) %38)
          to label %194 unwind label %212

194:                                              ; preds = %191
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %38) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %38) #6
  call void @llvm.lifetime.start.p0(i64 24, ptr %39) #6
  %195 = load i32, ptr %14, align 4, !tbaa !15
  %196 = sext i32 %195 to i64
  call void @llvm.lifetime.start.p0(i64 1, ptr %40) #6
  call void @_ZNSaIN9starspace6MatrixIfEEEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %40) #6
  invoke void @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EEC2EmRKS3_(ptr noundef nonnull align 8 dereferenceable(24) %39, i64 noundef %196, ptr noundef nonnull align 1 dereferenceable(1) %40)
          to label %197 unwind label %216

197:                                              ; preds = %194
  call void @_ZNSt15__new_allocatorIN9starspace6MatrixIfEEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %40) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %40) #6
  call void @llvm.lifetime.start.p0(i64 24, ptr %41) #6
  %198 = load i32, ptr %14, align 4, !tbaa !15
  %199 = sext i32 %198 to i64
  call void @llvm.lifetime.start.p0(i64 1, ptr %42) #6
  call void @_ZNSaIiEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %42) #6
  invoke void @_ZNSt6vectorIiSaIiEEC2EmRKS0_(ptr noundef nonnull align 8 dereferenceable(24) %41, i64 noundef %199, ptr noundef nonnull align 1 dereferenceable(1) %42)
          to label %200 unwind label %220

200:                                              ; preds = %197
  call void @_ZNSt15__new_allocatorIiED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %42) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %42) #6
  call void @llvm.lifetime.start.p0(i64 24, ptr %43) #6
  %201 = load i32, ptr %14, align 4, !tbaa !15
  %202 = sext i32 %201 to i64
  call void @llvm.lifetime.start.p0(i64 1, ptr %44) #6
  call void @_ZNSaISt6vectorIfSaIfEEEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %44) #6
  invoke void @_ZNSt6vectorIS_IfSaIfEESaIS1_EEC2EmRKS2_(ptr noundef nonnull align 8 dereferenceable(24) %43, i64 noundef %202, ptr noundef nonnull align 1 dereferenceable(1) %44)
          to label %203 unwind label %224

203:                                              ; preds = %200
  call void @_ZNSt15__new_allocatorISt6vectorIfSaIfEEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %44) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %44) #6
  call void @llvm.lifetime.start.p0(i64 24, ptr %45) #6
  call void @_ZNSt6vectorIS_IbSaIbEESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %45) #6
  %204 = load i32, ptr %14, align 4, !tbaa !15
  %205 = sext i32 %204 to i64
  invoke void @_ZNSt6vectorIS_IbSaIbEESaIS1_EE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %45, i64 noundef %205)
          to label %206 unwind label %228

206:                                              ; preds = %203
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #6
  store i32 0, ptr %46, align 4, !tbaa !15
  br label %207

207:                                              ; preds = %470, %206
  %208 = load i32, ptr %46, align 4, !tbaa !15
  %209 = load i32, ptr %14, align 4, !tbaa !15
  %210 = icmp slt i32 %208, %209
  br i1 %210, label %232, label %211

211:                                              ; preds = %207
  store i32 8, ptr %47, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #6
  br label %474

212:                                              ; preds = %191
  %213 = landingpad { ptr, i32 }
          cleanup
  %214 = extractvalue { ptr, i32 } %213, 0
  store ptr %214, ptr %17, align 8
  %215 = extractvalue { ptr, i32 } %213, 1
  store i32 %215, ptr %18, align 4
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %38) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %38) #6
  br label %515

216:                                              ; preds = %194
  %217 = landingpad { ptr, i32 }
          cleanup
  %218 = extractvalue { ptr, i32 } %217, 0
  store ptr %218, ptr %17, align 8
  %219 = extractvalue { ptr, i32 } %217, 1
  store i32 %219, ptr %18, align 4
  call void @_ZNSt15__new_allocatorIN9starspace6MatrixIfEEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %40) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %40) #6
  br label %514

220:                                              ; preds = %197
  %221 = landingpad { ptr, i32 }
          cleanup
  %222 = extractvalue { ptr, i32 } %221, 0
  store ptr %222, ptr %17, align 8
  %223 = extractvalue { ptr, i32 } %221, 1
  store i32 %223, ptr %18, align 4
  call void @_ZNSt15__new_allocatorIiED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %42) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %42) #6
  br label %513

224:                                              ; preds = %200
  %225 = landingpad { ptr, i32 }
          cleanup
  %226 = extractvalue { ptr, i32 } %225, 0
  store ptr %226, ptr %17, align 8
  %227 = extractvalue { ptr, i32 } %225, 1
  store i32 %227, ptr %18, align 4
  call void @_ZNSt15__new_allocatorISt6vectorIfSaIfEEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %44) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %44) #6
  br label %512

228:                                              ; preds = %493, %479, %203
  %229 = landingpad { ptr, i32 }
          cleanup
  %230 = extractvalue { ptr, i32 } %229, 0
  store ptr %230, ptr %17, align 8
  %231 = extractvalue { ptr, i32 } %229, 1
  store i32 %231, ptr %18, align 4
  br label %511

232:                                              ; preds = %207
  %233 = load i32, ptr %46, align 4, !tbaa !15
  %234 = sext i32 %233 to i64
  %235 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %41, i64 noundef %234) #6
  store i32 0, ptr %235, align 4, !tbaa !15
  %236 = load i32, ptr %46, align 4, !tbaa !15
  %237 = sext i32 %236 to i64
  %238 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %37, i64 noundef %237) #6
  store float 0.000000e+00, ptr %238, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 16, ptr %48) #6
  %239 = load i64, ptr %26, align 8, !tbaa !9
  invoke void @_ZN5boost7numeric5ublas11zero_matrixIfSaIfEEC2Emm(ptr noundef nonnull align 8 dereferenceable(16) %48, i64 noundef 1, i64 noundef %239)
          to label %240 unwind label %263

240:                                              ; preds = %232
  %241 = load i32, ptr %46, align 4, !tbaa !15
  %242 = sext i32 %241 to i64
  %243 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %39, i64 noundef %242) #6
  %244 = getelementptr inbounds %"struct.starspace::Matrix", ptr %243, i32 0, i32 0
  %245 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN5boost7numeric5ublas6matrixIfNS1_15basic_row_majorImlEENS1_15unbounded_arrayIfSaIfEEEEaSINS1_11zero_matrixIfS6_EEEERS8_RKNS1_16matrix_containerIT_EE(ptr noundef nonnull align 8 dereferenceable(40) %244, ptr noundef nonnull align 1 dereferenceable(1) %48)
          to label %246 unwind label %267

246:                                              ; preds = %240
  call void @_ZN5boost7numeric5ublas16ublas_expressionINS1_11zero_matrixIfSaIfEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %48) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %48) #6
  %247 = load i32, ptr %46, align 4, !tbaa !15
  %248 = sext i32 %247 to i64
  %249 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNSt6vectorIS_IbSaIbEESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %45, i64 noundef %248) #6
  %250 = load i64, ptr %11, align 8, !tbaa !9
  invoke void @_ZNSt6vectorIbSaIbEE6resizeEmb(ptr noundef nonnull align 8 dereferenceable(40) %249, i64 noundef %250, i1 noundef zeroext false)
          to label %251 unwind label %272

251:                                              ; preds = %246
  %252 = load i32, ptr %46, align 4, !tbaa !15
  %253 = sext i32 %252 to i64
  %254 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_IfSaIfEESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %43, i64 noundef %253) #6
  %255 = load i64, ptr %11, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #6
  store float 0.000000e+00, ptr %49, align 4, !tbaa !11
  invoke void @_ZNSt6vectorIfSaIfEE6resizeEmRKf(ptr noundef nonnull align 8 dereferenceable(24) %254, i64 noundef %255, ptr noundef nonnull align 4 dereferenceable(4) %49)
          to label %256 unwind label %276

256:                                              ; preds = %251
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #6
  store i32 0, ptr %50, align 4, !tbaa !15
  br label %257

257:                                              ; preds = %385, %256
  %258 = load i32, ptr %50, align 4, !tbaa !15
  %259 = zext i32 %258 to i64
  %260 = load i64, ptr %11, align 8, !tbaa !9
  %261 = icmp ult i64 %259, %260
  br i1 %261, label %280, label %262

262:                                              ; preds = %257
  store i32 11, ptr %47, align 4
  br label %389

263:                                              ; preds = %232
  %264 = landingpad { ptr, i32 }
          cleanup
  %265 = extractvalue { ptr, i32 } %264, 0
  store ptr %265, ptr %17, align 8
  %266 = extractvalue { ptr, i32 } %264, 1
  store i32 %266, ptr %18, align 4
  br label %271

267:                                              ; preds = %240
  %268 = landingpad { ptr, i32 }
          cleanup
  %269 = extractvalue { ptr, i32 } %268, 0
  store ptr %269, ptr %17, align 8
  %270 = extractvalue { ptr, i32 } %268, 1
  store i32 %270, ptr %18, align 4
  call void @_ZN5boost7numeric5ublas16ublas_expressionINS1_11zero_matrixIfSaIfEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %48) #6
  br label %271

271:                                              ; preds = %267, %263
  call void @llvm.lifetime.end.p0(i64 16, ptr %48) #6
  br label %473

272:                                              ; preds = %414, %398, %246
  %273 = landingpad { ptr, i32 }
          cleanup
  %274 = extractvalue { ptr, i32 } %273, 0
  store ptr %274, ptr %17, align 8
  %275 = extractvalue { ptr, i32 } %273, 1
  store i32 %275, ptr %18, align 4
  br label %473

276:                                              ; preds = %251
  %277 = landingpad { ptr, i32 }
          cleanup
  %278 = extractvalue { ptr, i32 } %277, 0
  store ptr %278, ptr %17, align 8
  %279 = extractvalue { ptr, i32 } %277, 1
  store i32 %279, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #6
  br label %473

280:                                              ; preds = %257
  %281 = load i32, ptr %46, align 4, !tbaa !15
  %282 = sext i32 %281 to i64
  %283 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_IfSaIfEESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %43, i64 noundef %282) #6
  %284 = load i32, ptr %50, align 4, !tbaa !15
  %285 = zext i32 %284 to i64
  %286 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %283, i64 noundef %285) #6
  store float 0.000000e+00, ptr %286, align 4, !tbaa !11
  %287 = load ptr, ptr %10, align 8, !tbaa !5
  %288 = load i32, ptr %46, align 4, !tbaa !15
  %289 = sext i32 %288 to i64
  %290 = call noundef nonnull align 8 dereferenceable(80) ptr @_ZNKSt6vectorIN9starspace12ParseResultsESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %287, i64 noundef %289) #6
  %291 = getelementptr inbounds %"struct.starspace::ParseResults", ptr %290, i32 0, i32 2
  %292 = load i32, ptr %50, align 4, !tbaa !15
  %293 = zext i32 %292 to i64
  %294 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_ISt4pairIifESaIS1_EESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %33, i64 noundef %293) #6
  %295 = invoke noundef zeroext i1 @_ZSteqISt4pairIifESaIS1_EEbRKSt6vectorIT_T0_ES8_(ptr noundef nonnull align 8 dereferenceable(24) %291, ptr noundef nonnull align 8 dereferenceable(24) %294)
          to label %296 unwind label %298

296:                                              ; preds = %280
  br i1 %295, label %297, label %302

297:                                              ; preds = %296
  br label %385

298:                                              ; preds = %280
  %299 = landingpad { ptr, i32 }
          cleanup
  %300 = extractvalue { ptr, i32 } %299, 0
  store ptr %300, ptr %17, align 8
  %301 = extractvalue { ptr, i32 } %299, 1
  store i32 %301, ptr %18, align 4
  br label %390

302:                                              ; preds = %296
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #6
  %303 = load i32, ptr %46, align 4, !tbaa !15
  %304 = sext i32 %303 to i64
  %305 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %21, i64 noundef %304) #6
  %306 = load float, ptr %305, align 4, !tbaa !11
  %307 = load i32, ptr %46, align 4, !tbaa !15
  %308 = sext i32 %307 to i64
  %309 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %15, i64 noundef %308) #6
  %310 = load i32, ptr %50, align 4, !tbaa !15
  %311 = zext i32 %310 to i64
  %312 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %31, i64 noundef %311) #6
  %313 = invoke noundef float @_ZN9starspace10EmbedModel10similarityERNS_6MatrixIfEES3_(ptr noundef nonnull align 8 dereferenceable(112) %58, ptr noundef nonnull align 8 dereferenceable(40) %309, ptr noundef nonnull align 8 dereferenceable(40) %312)
          to label %314 unwind label %348

314:                                              ; preds = %302
  %315 = invoke noundef double @"_ZZN9starspace10EmbedModel13trainOneBatchESt10shared_ptrINS_17InternDataHandlerEERKSt6vectorINS_12ParseResultsESaIS5_EEmfbENK3$_0clEff"(ptr noundef nonnull align 8 dereferenceable(8) %30, float noundef %306, float noundef %313)
          to label %316 unwind label %348

316:                                              ; preds = %314
  store double %315, ptr %51, align 8, !tbaa !31
  %317 = load double, ptr %51, align 8, !tbaa !31
  %318 = fcmp ogt double %317, 0.000000e+00
  br i1 %318, label %319, label %381

319:                                              ; preds = %316
  %320 = load i32, ptr %46, align 4, !tbaa !15
  %321 = sext i32 %320 to i64
  %322 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %41, i64 noundef %321) #6
  %323 = load i32, ptr %322, align 4, !tbaa !15
  %324 = add nsw i32 %323, 1
  store i32 %324, ptr %322, align 4, !tbaa !15
  %325 = load double, ptr %51, align 8, !tbaa !31
  %326 = load i32, ptr %46, align 4, !tbaa !15
  %327 = sext i32 %326 to i64
  %328 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %37, i64 noundef %327) #6
  %329 = load float, ptr %328, align 4, !tbaa !11
  %330 = fpext float %329 to double
  %331 = fadd double %330, %325
  %332 = fptrunc double %331 to float
  store float %332, ptr %328, align 4, !tbaa !11
  %333 = load i32, ptr %46, align 4, !tbaa !15
  %334 = sext i32 %333 to i64
  %335 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %39, i64 noundef %334) #6
  %336 = load i32, ptr %50, align 4, !tbaa !15
  %337 = zext i32 %336 to i64
  %338 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %31, i64 noundef %337) #6
  invoke void @_ZN9starspace6MatrixIfE3addERKS1_f(ptr noundef nonnull align 8 dereferenceable(40) %335, ptr noundef nonnull align 8 dereferenceable(40) %338, float noundef 1.000000e+00)
          to label %339 unwind label %348

339:                                              ; preds = %319
  %340 = load i32, ptr %46, align 4, !tbaa !15
  %341 = sext i32 %340 to i64
  %342 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %37, i64 noundef %341) #6
  %343 = load float, ptr %342, align 4, !tbaa !11
  %344 = fpext float %343 to double
  %345 = fcmp oge double %344, 0.000000e+00
  br i1 %345, label %346, label %347

346:                                              ; preds = %339
  br label %353

347:                                              ; preds = %339
  call void @__assert_fail(ptr noundef @.str.18, ptr noundef @.str.4, i32 noundef 438, ptr noundef @__PRETTY_FUNCTION__._ZN9starspace10EmbedModel13trainOneBatchESt10shared_ptrINS_17InternDataHandlerEERKSt6vectorINS_12ParseResultsESaIS5_EEmfb) #7
  unreachable

348:                                              ; preds = %319, %314, %302
  %349 = landingpad { ptr, i32 }
          cleanup
  %350 = extractvalue { ptr, i32 } %349, 0
  store ptr %350, ptr %17, align 8
  %351 = extractvalue { ptr, i32 } %349, 1
  store i32 %351, ptr %18, align 4
  br label %388

352:                                              ; No predecessors!
  br label %353

353:                                              ; preds = %352, %346
  call void @llvm.lifetime.start.p0(i64 16, ptr %52) #6
  %354 = load i32, ptr %46, align 4, !tbaa !15
  %355 = sext i32 %354 to i64
  %356 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNSt6vectorIS_IbSaIbEESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %45, i64 noundef %355) #6
  %357 = load i32, ptr %50, align 4, !tbaa !15
  %358 = zext i32 %357 to i64
  %359 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %356, i64 noundef %358)
          to label %360 unwind label %376

360:                                              ; preds = %353
  %361 = getelementptr inbounds { ptr, i64 }, ptr %52, i32 0, i32 0
  %362 = extractvalue { ptr, i64 } %359, 0
  store ptr %362, ptr %361, align 8
  %363 = getelementptr inbounds { ptr, i64 }, ptr %52, i32 0, i32 1
  %364 = extractvalue { ptr, i64 } %359, 1
  store i64 %364, ptr %363, align 8
  %365 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt14_Bit_referenceaSEb(ptr noundef nonnull align 8 dereferenceable(16) %52, i1 noundef zeroext true) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %52) #6
  %366 = load i32, ptr %46, align 4, !tbaa !15
  %367 = sext i32 %366 to i64
  %368 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %41, i64 noundef %367) #6
  %369 = load i32, ptr %368, align 4, !tbaa !15
  %370 = getelementptr inbounds %"struct.starspace::EmbedModel", ptr %58, i32 0, i32 3
  %371 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN9starspace4ArgsELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %370) #6
  %372 = getelementptr inbounds %"class.starspace::Args", ptr %371, i32 0, i32 29
  %373 = load i32, ptr %372, align 4, !tbaa !32
  %374 = icmp eq i32 %369, %373
  br i1 %374, label %375, label %380

375:                                              ; preds = %360
  store i32 11, ptr %47, align 4
  br label %382

376:                                              ; preds = %353
  %377 = landingpad { ptr, i32 }
          cleanup
  %378 = extractvalue { ptr, i32 } %377, 0
  store ptr %378, ptr %17, align 8
  %379 = extractvalue { ptr, i32 } %377, 1
  store i32 %379, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %52) #6
  br label %388

380:                                              ; preds = %360
  br label %381

381:                                              ; preds = %380, %316
  store i32 0, ptr %47, align 4
  br label %382

382:                                              ; preds = %381, %375
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #6
  %383 = load i32, ptr %47, align 4
  switch i32 %383, label %389 [
    i32 0, label %384
  ]

384:                                              ; preds = %382
  br label %385

385:                                              ; preds = %384, %297
  %386 = load i32, ptr %50, align 4, !tbaa !15
  %387 = add i32 %386, 1
  store i32 %387, ptr %50, align 4, !tbaa !15
  br label %257, !llvm.loop !33

388:                                              ; preds = %376, %348
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #6
  br label %390

389:                                              ; preds = %382, %262
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #6
  br label %391

390:                                              ; preds = %388, %298
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #6
  br label %473

391:                                              ; preds = %389
  %392 = load i32, ptr %46, align 4, !tbaa !15
  %393 = sext i32 %392 to i64
  %394 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %41, i64 noundef %393) #6
  %395 = load i32, ptr %394, align 4, !tbaa !15
  %396 = icmp eq i32 %395, 0
  br i1 %396, label %397, label %398

397:                                              ; preds = %391
  br label %470

398:                                              ; preds = %391
  %399 = load i64, ptr %11, align 8, !tbaa !9
  %400 = uitofp i64 %399 to float
  %401 = load i32, ptr %46, align 4, !tbaa !15
  %402 = sext i32 %401 to i64
  %403 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %37, i64 noundef %402) #6
  %404 = load float, ptr %403, align 4, !tbaa !11
  %405 = fdiv float %404, %400
  store float %405, ptr %403, align 4, !tbaa !11
  %406 = load i32, ptr %46, align 4, !tbaa !15
  %407 = sext i32 %406 to i64
  %408 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %41, i64 noundef %407) #6
  %409 = load i32, ptr %46, align 4, !tbaa !15
  %410 = sext i32 %409 to i64
  %411 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %39, i64 noundef %410) #6
  %412 = getelementptr inbounds %"struct.starspace::Matrix", ptr %411, i32 0, i32 0
  %413 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN5boost7numeric5ublas6matrixIfNS1_15basic_row_majorImlEENS1_15unbounded_arrayIfSaIfEEEEdVIiEERS8_RKT_(ptr noundef nonnull align 8 dereferenceable(40) %412, ptr noundef nonnull align 4 dereferenceable(4) %408)
          to label %414 unwind label %272

414:                                              ; preds = %398
  %415 = load i32, ptr %46, align 4, !tbaa !15
  %416 = sext i32 %415 to i64
  %417 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %37, i64 noundef %416) #6
  %418 = load float, ptr %417, align 4, !tbaa !11
  %419 = load float, ptr %36, align 4, !tbaa !11
  %420 = fadd float %419, %418
  store float %420, ptr %36, align 4, !tbaa !11
  %421 = load i32, ptr %46, align 4, !tbaa !15
  %422 = sext i32 %421 to i64
  %423 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %39, i64 noundef %422) #6
  %424 = load i32, ptr %46, align 4, !tbaa !15
  %425 = sext i32 %424 to i64
  %426 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %19, i64 noundef %425) #6
  invoke void @_ZN9starspace6MatrixIfE3addERKS1_f(ptr noundef nonnull align 8 dereferenceable(40) %423, ptr noundef nonnull align 8 dereferenceable(40) %426, float noundef -1.000000e+00)
          to label %427 unwind label %272

427:                                              ; preds = %414
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #6
  store i32 0, ptr %53, align 4, !tbaa !15
  br label %428

428:                                              ; preds = %466, %427
  %429 = load i32, ptr %53, align 4, !tbaa !15
  %430 = zext i32 %429 to i64
  %431 = load i64, ptr %11, align 8, !tbaa !9
  %432 = icmp ult i64 %430, %431
  br i1 %432, label %434, label %433

433:                                              ; preds = %428
  store i32 14, ptr %47, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #6
  br label %469

434:                                              ; preds = %428
  call void @llvm.lifetime.start.p0(i64 16, ptr %54) #6
  %435 = load i32, ptr %46, align 4, !tbaa !15
  %436 = sext i32 %435 to i64
  %437 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNSt6vectorIS_IbSaIbEESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %45, i64 noundef %436) #6
  %438 = load i32, ptr %53, align 4, !tbaa !15
  %439 = zext i32 %438 to i64
  %440 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %437, i64 noundef %439)
          to label %441 unwind label %461

441:                                              ; preds = %434
  %442 = getelementptr inbounds { ptr, i64 }, ptr %54, i32 0, i32 0
  %443 = extractvalue { ptr, i64 } %440, 0
  store ptr %443, ptr %442, align 8
  %444 = getelementptr inbounds { ptr, i64 }, ptr %54, i32 0, i32 1
  %445 = extractvalue { ptr, i64 } %440, 1
  store i64 %445, ptr %444, align 8
  %446 = call noundef zeroext i1 @_ZNKSt14_Bit_referencecvbEv(ptr noundef nonnull align 8 dereferenceable(16) %54) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %54) #6
  br i1 %446, label %447, label %465

447:                                              ; preds = %441
  %448 = load float, ptr %12, align 4, !tbaa !11
  %449 = load i32, ptr %46, align 4, !tbaa !15
  %450 = sext i32 %449 to i64
  %451 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %41, i64 noundef %450) #6
  %452 = load i32, ptr %451, align 4, !tbaa !15
  %453 = sitofp i32 %452 to float
  %454 = fdiv float %448, %453
  %455 = load i32, ptr %46, align 4, !tbaa !15
  %456 = sext i32 %455 to i64
  %457 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_IfSaIfEESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %43, i64 noundef %456) #6
  %458 = load i32, ptr %53, align 4, !tbaa !15
  %459 = zext i32 %458 to i64
  %460 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %457, i64 noundef %459) #6
  store float %454, ptr %460, align 4, !tbaa !11
  br label %465

461:                                              ; preds = %434
  %462 = landingpad { ptr, i32 }
          cleanup
  %463 = extractvalue { ptr, i32 } %462, 0
  store ptr %463, ptr %17, align 8
  %464 = extractvalue { ptr, i32 } %462, 1
  store i32 %464, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %54) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #6
  br label %473

465:                                              ; preds = %447, %441
  br label %466

466:                                              ; preds = %465
  %467 = load i32, ptr %53, align 4, !tbaa !15
  %468 = add i32 %467, 1
  store i32 %468, ptr %53, align 4, !tbaa !15
  br label %428, !llvm.loop !34

469:                                              ; preds = %433
  br label %470

470:                                              ; preds = %469, %397
  %471 = load i32, ptr %46, align 4, !tbaa !15
  %472 = add nsw i32 %471, 1
  store i32 %472, ptr %46, align 4, !tbaa !15
  br label %207, !llvm.loop !35

473:                                              ; preds = %461, %390, %276, %272, %271
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #6
  br label %511

474:                                              ; preds = %211
  %475 = load float, ptr %36, align 4, !tbaa !11
  %476 = fpext float %475 to double
  %477 = fcmp oeq double %476, 0.000000e+00
  br i1 %477, label %478, label %479

478:                                              ; preds = %474
  store float 0.000000e+00, ptr %7, align 4
  store i32 1, ptr %47, align 4
  br label %509

479:                                              ; preds = %474
  %480 = load float, ptr %36, align 4, !tbaa !11
  %481 = invoke noundef zeroext i1 @_ZSt5isinff(float noundef %480)
          to label %482 unwind label %228

482:                                              ; preds = %479
  %483 = xor i1 %481, true
  br i1 %483, label %484, label %485

484:                                              ; preds = %482
  br label %487

485:                                              ; preds = %482
  call void @__assert_fail(ptr noundef @.str.19, ptr noundef @.str.4, i32 noundef 463, ptr noundef @__PRETTY_FUNCTION__._ZN9starspace10EmbedModel13trainOneBatchESt10shared_ptrINS_17InternDataHandlerEERKSt6vectorINS_12ParseResultsESaIS5_EEmfb) #7
  unreachable

486:                                              ; No predecessors!
  br label %487

487:                                              ; preds = %486, %484
  %488 = load float, ptr %12, align 4, !tbaa !11
  %489 = fpext float %488 to double
  %490 = fcmp oeq double %489, 0.000000e+00
  br i1 %490, label %491, label %493

491:                                              ; preds = %487
  %492 = load float, ptr %36, align 4, !tbaa !11
  store float %492, ptr %7, align 4
  store i32 1, ptr %47, align 4
  br label %509

493:                                              ; preds = %487
  %494 = load ptr, ptr %10, align 8, !tbaa !5
  invoke void @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(24) %55, ptr noundef nonnull align 8 dereferenceable(24) %39)
          to label %495 unwind label %228

495:                                              ; preds = %493
  invoke void @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(24) %56, ptr noundef nonnull align 8 dereferenceable(24) %15)
          to label %496 unwind label %500

496:                                              ; preds = %495
  %497 = load float, ptr %12, align 4, !tbaa !11
  invoke void @_ZN9starspace10EmbedModel8backwardERKSt6vectorINS_12ParseResultsESaIS2_EERKS1_IS1_ISt4pairIifESaIS8_EESaISA_EES1_INS_6MatrixIfEESaISG_EESI_RKS1_IiSaIiEEfRKS1_IfSaIfEERKS1_ISO_SaISO_EE(ptr noundef nonnull align 8 dereferenceable(112) %58, ptr noundef nonnull align 8 dereferenceable(24) %494, ptr noundef nonnull align 8 dereferenceable(24) %33, ptr noundef %55, ptr noundef %56, ptr noundef nonnull align 8 dereferenceable(24) %41, float noundef %497, ptr noundef nonnull align 8 dereferenceable(24) %23, ptr noundef nonnull align 8 dereferenceable(24) %43)
          to label %498 unwind label %504

498:                                              ; preds = %496
  call void @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %56) #6
  call void @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %55) #6
  %499 = load float, ptr %36, align 4, !tbaa !11
  store float %499, ptr %7, align 4
  store i32 1, ptr %47, align 4
  br label %509

500:                                              ; preds = %495
  %501 = landingpad { ptr, i32 }
          cleanup
  %502 = extractvalue { ptr, i32 } %501, 0
  store ptr %502, ptr %17, align 8
  %503 = extractvalue { ptr, i32 } %501, 1
  store i32 %503, ptr %18, align 4
  br label %508

504:                                              ; preds = %496
  %505 = landingpad { ptr, i32 }
          cleanup
  %506 = extractvalue { ptr, i32 } %505, 0
  store ptr %506, ptr %17, align 8
  %507 = extractvalue { ptr, i32 } %505, 1
  store i32 %507, ptr %18, align 4
  call void @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %56) #6
  br label %508

508:                                              ; preds = %504, %500
  call void @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %55) #6
  br label %511

509:                                              ; preds = %498, %491, %478
  call void @_ZNSt6vectorIS_IbSaIbEESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %45) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %45) #6
  call void @_ZNSt6vectorIS_IfSaIfEESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %43) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %43) #6
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %41) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %41) #6
  call void @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %39) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %39) #6
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %37) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %37) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #6
  call void @_ZNSt6vectorIS_ISt4pairIifESaIS1_EESaIS3_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %33) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %33) #6
  call void @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %31) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %31) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #6
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %23) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %23) #6
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %21) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %21) #6
  call void @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %19) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %19) #6
  call void @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %15) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %15) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #6
  %510 = load float, ptr %7, align 4
  ret float %510

511:                                              ; preds = %508, %473, %228
  call void @_ZNSt6vectorIS_IbSaIbEESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %45) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %45) #6
  call void @_ZNSt6vectorIS_IfSaIfEESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %43) #6
  br label %512

512:                                              ; preds = %511, %224
  call void @llvm.lifetime.end.p0(i64 24, ptr %43) #6
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %41) #6
  br label %513

513:                                              ; preds = %512, %220
  call void @llvm.lifetime.end.p0(i64 24, ptr %41) #6
  call void @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %39) #6
  br label %514

514:                                              ; preds = %513, %216
  call void @llvm.lifetime.end.p0(i64 24, ptr %39) #6
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %37) #6
  br label %515

515:                                              ; preds = %514, %212
  call void @llvm.lifetime.end.p0(i64 24, ptr %37) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #6
  br label %516

516:                                              ; preds = %515, %168
  call void @_ZNSt6vectorIS_ISt4pairIifESaIS1_EESaIS3_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %33) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %33) #6
  call void @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %31) #6
  br label %517

517:                                              ; preds = %516, %158
  call void @llvm.lifetime.end.p0(i64 24, ptr %31) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #6
  br label %518

518:                                              ; preds = %517, %144
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #6
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %23) #6
  br label %519

519:                                              ; preds = %518, %97
  call void @llvm.lifetime.end.p0(i64 24, ptr %23) #6
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %21) #6
  br label %520

520:                                              ; preds = %519, %93
  call void @llvm.lifetime.end.p0(i64 24, ptr %21) #6
  call void @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %19) #6
  br label %521

521:                                              ; preds = %520, %89
  call void @llvm.lifetime.end.p0(i64 24, ptr %19) #6
  call void @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %15) #6
  br label %522

522:                                              ; preds = %521, %85
  call void @llvm.lifetime.end.p0(i64 24, ptr %15) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #6
  br label %523

523:                                              ; preds = %522
  %524 = load ptr, ptr %17, align 8
  %525 = load i32, ptr %18, align 4
  %526 = insertvalue { ptr, i32 } poison, ptr %524, 0
  %527 = insertvalue { ptr, i32 } %526, i32 %525, 1
  resume { ptr, i32 } %527
}

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN9starspace10EmbedModel5checkERKNS_6MatrixIfEE(ptr noundef nonnull align 8 dereferenceable(40)) #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef float @_ZN9starspace10EmbedModel10similarityERNS_6MatrixIfEES3_(ptr noundef nonnull align 8 dereferenceable(112), ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(40)) #3 align 2

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

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

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

declare void @_ZN9starspace17InternDataHandler13getRandomWordERSt6vectorISt4pairIifESaIS3_EE(ptr noundef nonnull align 8 dereferenceable(88), ptr noundef nonnull align 8 dereferenceable(24)) #4

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIS_IfSaIfEESaIS1_EEC2EmRKS2_(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 @_ZNSt6vectorIS_IbSaIbEESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #0 align 2

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIbSaIbEE6resizeEmb(ptr noundef nonnull align 8 dereferenceable(40), i64 noundef, i1 noundef zeroext) #3 align 2

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZSteqISt4pairIifESaIS1_EEbRKSt6vectorIT_T0_ES8_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) #5

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

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef double @"_ZZN9starspace10EmbedModel13trainOneBatchESt10shared_ptrINS_17InternDataHandlerEERKSt6vectorINS_12ParseResultsESaIS5_EEmfbENK3$_0clEff"(ptr noundef nonnull align 8 dereferenceable(8), float noundef, float noundef) #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN9starspace6MatrixIfE3addERKS1_f(ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(40), float noundef) #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40), i64 noundef) #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt14_Bit_referenceaSEb(ptr noundef nonnull align 8 dereferenceable(16), i1 noundef zeroext) #0 align 2

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZSt5isinff(float noundef) #0

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIS_ISt4pairIifESaIS1_EESaIS3_EED2Ev(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_allocatorIN9starspace6MatrixIfEEED2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt15__new_allocatorISt6vectorIfSaIfEEED2Ev(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 = { "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 = { nounwind }
attributes #7 = { noreturn nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"float", !7, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"bool", !7, i64 0}
!15 = !{!16, !16, i64 0}
!16 = !{!"int", !7, i64 0}
!17 = !{!18, !10, i64 464}
!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, !10, i64 464, !16, i64 472, !16, i64 476, !16, i64 480, !16, i64 484, !16, i64 488, !16, i64 492, !16, i64 496, !16, i64 500, !16, i64 504, !16, i64 508, !16, i64 512, !16, i64 516, !16, i64 520, !16, i64 524, !16, 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, !10, i64 8, !7, i64 16}
!20 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !6, i64 0}
!21 = !{!"double", !7, i64 0}
!22 = distinct !{!22, !23}
!23 = !{!"llvm.loop.mustprogress"}
!24 = !{!25, !6, i64 0}
!25 = !{!"_ZTSZN9starspace10EmbedModel13trainOneBatchESt10shared_ptrINS_17InternDataHandlerEERKSt6vectorINS_12ParseResultsESaIS5_EEmfbE3$_0", !6, i64 0}
!26 = !{i8 0, i8 2}
!27 = !{}
!28 = !{!29, !29, i64 0}
!29 = !{!"vtable pointer", !8, i64 0}
!30 = distinct !{!30, !23}
!31 = !{!21, !21, i64 0}
!32 = !{!18, !16, i64 492}
!33 = distinct !{!33, !23}
!34 = distinct !{!34, !23}
!35 = distinct !{!35, !23}


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

%"class.std::vector.52" = type { %"struct.std::_Vector_base.53" }
%"struct.std::_Vector_base.53" = type { %"struct.std::_Vector_base<starspace::Matrix<>, std::allocator<starspace::Matrix<>>>::_Vector_impl" }
%"struct.std::_Vector_base<starspace::Matrix<>, std::allocator<starspace::Matrix<>>>::_Vector_impl" = type { %"struct.std::_Vector_base<starspace::Matrix<>, std::allocator<starspace::Matrix<>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<starspace::Matrix<>, std::allocator<starspace::Matrix<>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::allocator.54" = type { i8 }
%"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.anon.62 = type { ptr }
%"class.std::vector.57" = type { %"struct.std::_Vector_base.58" }
%"struct.std::_Vector_base.58" = type { %"struct.std::_Vector_base<std::vector<std::pair<int, float>>, std::allocator<std::vector<std::pair<int, float>>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::vector<std::pair<int, float>>, std::allocator<std::vector<std::pair<int, float>>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::vector<std::pair<int, float>>, std::allocator<std::vector<std::pair<int, float>>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::vector<std::pair<int, float>>, std::allocator<std::vector<std::pair<int, float>>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.24" = type { %"struct.std::_Vector_base.25" }
%"struct.std::_Vector_base.25" = type { %"struct.std::_Vector_base<std::pair<int, float>, std::allocator<std::pair<int, float>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::pair<int, float>, std::allocator<std::pair<int, float>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::pair<int, float>, std::allocator<std::pair<int, float>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::pair<int, float>, std::allocator<std::pair<int, float>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"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.std::vector.63" = type { %"struct.std::_Vector_base.64" }
%"struct.std::_Vector_base.64" = type { %"struct.std::_Vector_base<std::vector<float>, std::allocator<std::vector<float>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::vector<float>, std::allocator<std::vector<float>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::vector<float>, std::allocator<std::vector<float>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::vector<float>, std::allocator<std::vector<float>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::allocator.65" = type { i8 }
%"class.std::vector.68" = type { %"struct.std::_Vector_base.69" }
%"struct.std::_Vector_base.69" = type { %"struct.std::_Vector_base<std::vector<bool>, std::allocator<std::vector<bool>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::vector<bool>, std::allocator<std::vector<bool>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::vector<bool>, std::allocator<std::vector<bool>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::vector<bool>, std::allocator<std::vector<bool>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.boost::numeric::ublas::zero_matrix" = type { i64, i64 }
%"struct.std::_Bit_reference" = type { ptr, i64 }

@.str.4 = external hidden unnamed_addr constant [74 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [15 x i8], align 1
@__PRETTY_FUNCTION__._ZN9starspace10EmbedModel13trainOneBatchESt10shared_ptrINS_17InternDataHandlerEERKSt6vectorINS_12ParseResultsESaIS5_EEmfb = external hidden unnamed_addr constant [124 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [24 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
declare dso_local void @_ZN9starspace10EmbedModel10projectRHSERKSt6vectorISt4pairIifESaIS3_EERNS_6MatrixIfEE(ptr noundef nonnull align 8 dereferenceable(112), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(40)) local_unnamed_addr #3 align 2

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

; 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 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 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 @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #0 align 2

; Function Attrs: mustprogress uwtable
define dso_local noundef float @_ZN9starspace10EmbedModel13trainOneBatchESt10shared_ptrINS_17InternDataHandlerEERKSt6vectorINS_12ParseResultsESaIS5_EEmfb(ptr noundef nonnull align 8 dereferenceable(112) %0, ptr noundef %1, ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef %3, float noundef %4, i1 noundef zeroext %5) local_unnamed_addr #3 align 2 personality ptr @__gxx_personality_v0 {
  %7 = alloca %"class.std::vector.52", align 8
  %8 = alloca %"class.std::allocator.54", align 1
  %9 = alloca %"class.std::vector.52", align 8
  %10 = alloca %"class.std::allocator.54", align 1
  %11 = alloca %"class.std::vector", align 8
  %12 = alloca %"class.std::allocator", align 1
  %13 = alloca %"class.std::vector", align 8
  %14 = alloca float, align 4
  %15 = alloca %"class.std::allocator", align 1
  %16 = alloca %class.anon.62, align 8
  %17 = alloca %"class.std::vector.52", align 8
  %18 = alloca %"class.std::allocator.54", align 1
  %19 = alloca %"class.std::vector.57", align 8
  %20 = alloca %"class.std::vector.24", align 8
  %21 = alloca %"class.std::vector", align 8
  %22 = alloca %"class.std::allocator", align 1
  %23 = alloca %"class.std::vector.52", align 8
  %24 = alloca %"class.std::allocator.54", align 1
  %25 = alloca %"class.std::vector.11", align 8
  %26 = alloca %"class.std::allocator.13", align 1
  %27 = alloca %"class.std::vector.63", align 8
  %28 = alloca %"class.std::allocator.65", align 1
  %29 = alloca %"class.std::vector.68", align 8
  %30 = alloca %"class.boost::numeric::ublas::zero_matrix", align 8
  %31 = alloca float, align 4
  %32 = alloca %"struct.std::_Bit_reference", align 8
  %33 = alloca %"struct.std::_Bit_reference", align 8
  %34 = alloca %"class.std::vector.52", align 8
  %35 = alloca %"class.std::vector.52", align 8
  %36 = tail call noundef i64 @_ZNKSt6vectorIN9starspace12ParseResultsESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %2) #6
  %37 = trunc i64 %36 to i32
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %7) #6
  %sext = shl i64 %36, 32
  %38 = ashr exact i64 %sext, 32
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %8) #6
  call void @_ZNSaIN9starspace6MatrixIfEEEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %8) #6
  invoke void @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EEC2EmRKS3_(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %38, ptr noundef nonnull align 1 dereferenceable(1) %8)
          to label %39 unwind label %49

39:                                               ; preds = %6
  call void @_ZNSt15__new_allocatorIN9starspace6MatrixIfEEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %8) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %8) #6
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %9) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %10) #6
  call void @_ZNSaIN9starspace6MatrixIfEEEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %10) #6
  invoke void @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EEC2EmRKS3_(ptr noundef nonnull align 8 dereferenceable(24) %9, i64 noundef %38, ptr noundef nonnull align 1 dereferenceable(1) %10)
          to label %40 unwind label %51

40:                                               ; preds = %39
  call void @_ZNSt15__new_allocatorIN9starspace6MatrixIfEEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %10) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %10) #6
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %11) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %12) #6
  call void @_ZNSaIfEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %12) #6
  invoke void @_ZNSt6vectorIfSaIfEEC2EmRKS0_(ptr noundef nonnull align 8 dereferenceable(24) %11, i64 noundef %38, ptr noundef nonnull align 1 dereferenceable(1) %12)
          to label %41 unwind label %53

41:                                               ; preds = %40
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %12) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %12) #6
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %13) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %14) #6
  %42 = fneg float %4
  store float %42, ptr %14, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %15) #6
  call void @_ZNSaIfEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %15) #6
  invoke void @_ZNSt6vectorIfSaIfEEC2EmRKfRKS0_(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef %38, ptr noundef nonnull align 4 dereferenceable(4) %14, ptr noundef nonnull align 1 dereferenceable(1) %15)
          to label %43 unwind label %55

43:                                               ; preds = %41
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %15) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %15) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %14) #6
  %44 = getelementptr inbounds i8, ptr %0, i64 48
  %45 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN9starspace4ArgsELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %44) #6
  %46 = getelementptr inbounds i8, ptr %45, i64 464
  %47 = load i64, ptr %46, align 8, !tbaa !9
  %48 = icmp sgt i32 %37, 0
  br i1 %48, label %.lr.ph.preheader, label %._crit_edge

.lr.ph.preheader:                                 ; preds = %43
  %wide.trip.count = and i64 %36, 2147483647
  br label %.lr.ph

._crit_edge:                                      ; preds = %72, %43
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %16) #6
  store ptr %0, ptr %16, align 8, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %17) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %18) #6
  call void @_ZNSaIN9starspace6MatrixIfEEEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %18) #6
  invoke void @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EEC2EmRKS3_(ptr noundef nonnull align 8 dereferenceable(24) %17, i64 noundef %3, ptr noundef nonnull align 1 dereferenceable(1) %18)
          to label %76 unwind label %89

49:                                               ; preds = %6
  %50 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIN9starspace6MatrixIfEEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %8) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %8) #6
  br label %262

51:                                               ; preds = %39
  %52 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIN9starspace6MatrixIfEEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %10) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %10) #6
  br label %261

53:                                               ; preds = %40
  %54 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %12) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %12) #6
  br label %260

55:                                               ; preds = %41
  %56 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %15) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %15) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %14) #6
  br label %259

.lr.ph:                                           ; preds = %.lr.ph.preheader, %72
  %indvars.iv = phi i64 [ 0, %.lr.ph.preheader ], [ %indvars.iv.next, %72 ]
  %57 = call noundef nonnull align 8 dereferenceable(80) ptr @_ZNKSt6vectorIN9starspace12ParseResultsESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef %indvars.iv) #6
  %58 = getelementptr inbounds i8, ptr %57, i64 8
  %59 = call noundef nonnull align 8 dereferenceable(80) ptr @_ZNKSt6vectorIN9starspace12ParseResultsESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef %indvars.iv) #6
  %60 = getelementptr inbounds i8, ptr %59, i64 32
  %61 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %indvars.iv) #6
  invoke void @_ZN9starspace10EmbedModel10projectLHSERKSt6vectorISt4pairIifESaIS3_EERNS_6MatrixIfEE(ptr noundef nonnull align 8 dereferenceable(112) %0, ptr noundef nonnull align 8 dereferenceable(24) %58, ptr noundef nonnull align 8 dereferenceable(40) %61)
          to label %62 unwind label %74

62:                                               ; preds = %.lr.ph
  %63 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %indvars.iv) #6
  invoke void @_ZN9starspace10EmbedModel5checkERKNS_6MatrixIfEE(ptr noundef nonnull align 8 dereferenceable(40) %63)
          to label %64 unwind label %74

64:                                               ; preds = %62
  %65 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %9, i64 noundef %indvars.iv) #6
  invoke void @_ZN9starspace10EmbedModel10projectRHSERKSt6vectorISt4pairIifESaIS3_EERNS_6MatrixIfEE(ptr noundef nonnull align 8 dereferenceable(112) %0, ptr noundef nonnull align 8 dereferenceable(24) %60, ptr noundef nonnull align 8 dereferenceable(40) %65)
          to label %66 unwind label %74

66:                                               ; preds = %64
  %67 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %9, i64 noundef %indvars.iv) #6
  invoke void @_ZN9starspace10EmbedModel5checkERKNS_6MatrixIfEE(ptr noundef nonnull align 8 dereferenceable(40) %67)
          to label %68 unwind label %74

68:                                               ; preds = %66
  %69 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %indvars.iv) #6
  %70 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %9, i64 noundef %indvars.iv) #6
  %71 = invoke noundef float @_ZN9starspace10EmbedModel10similarityERNS_6MatrixIfEES3_(ptr noundef nonnull align 8 dereferenceable(112) %0, ptr noundef nonnull align 8 dereferenceable(40) %69, ptr noundef nonnull align 8 dereferenceable(40) %70)
          to label %72 unwind label %74

72:                                               ; preds = %68
  %73 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %11, i64 noundef %indvars.iv) #6
  store float %71, ptr %73, align 4, !tbaa !5
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph, !llvm.loop !20

74:                                               ; preds = %68, %66, %64, %62, %.lr.ph
  %75 = landingpad { ptr, i32 }
          cleanup
  br label %258

76:                                               ; preds = %._crit_edge
  call void @_ZNSt15__new_allocatorIN9starspace6MatrixIfEEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %18) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %18) #6
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %19) #6
  call void @_ZNSt6vectorIS_ISt4pairIifESaIS1_EESaIS3_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %19) #6
  %.not = icmp eq i64 %3, 0
  br i1 %.not, label %._crit_edge163, label %.lr.ph162

.lr.ph162:                                        ; preds = %76
  br i1 %5, label %.lr.ph162.split.us, label %.lr.ph162.split

.lr.ph162.split.us:                               ; preds = %.lr.ph162, %84
  %77 = phi i64 [ %86, %84 ], [ 0, %.lr.ph162 ]
  %.0100160.us = phi i32 [ %85, %84 ], [ 0, %.lr.ph162 ]
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %20) #6
  call void @_ZNSt6vectorISt4pairIifESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %20) #6
  %78 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN9starspace17InternDataHandlerELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %1) #6
  invoke void @_ZN9starspace17InternDataHandler13getRandomWordERSt6vectorISt4pairIifESaIS3_EE(ptr noundef nonnull align 8 dereferenceable(88) %78, ptr noundef nonnull align 8 dereferenceable(24) %20)
          to label %79 unwind label %.split.us

79:                                               ; preds = %.lr.ph162.split.us
  %80 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %17, i64 noundef %77) #6
  invoke void @_ZN9starspace10EmbedModel10projectRHSERKSt6vectorISt4pairIifESaIS3_EERNS_6MatrixIfEE(ptr noundef nonnull align 8 dereferenceable(112) %0, ptr noundef nonnull align 8 dereferenceable(24) %20, ptr noundef nonnull align 8 dereferenceable(40) %80)
          to label %81 unwind label %.split.us

81:                                               ; preds = %79
  %82 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %17, i64 noundef %77) #6
  invoke void @_ZN9starspace10EmbedModel5checkERKNS_6MatrixIfEE(ptr noundef nonnull align 8 dereferenceable(40) %82)
          to label %83 unwind label %.split.us

83:                                               ; preds = %81
  invoke void @_ZNSt6vectorIS_ISt4pairIifESaIS1_EESaIS3_EE9push_backERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %19, ptr noundef nonnull align 8 dereferenceable(24) %20)
          to label %84 unwind label %.split.us

84:                                               ; preds = %83
  call void @_ZNSt6vectorISt4pairIifESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %20) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %20) #6
  %85 = add i32 %.0100160.us, 1
  %86 = zext i32 %85 to i64
  %87 = icmp ult i64 %86, %3
  br i1 %87, label %.lr.ph162.split.us, label %._crit_edge163, !llvm.loop !22

.split.us:                                        ; preds = %83, %81, %79, %.lr.ph162.split.us
  %88 = landingpad { ptr, i32 }
          cleanup
  br label %97

._crit_edge163:                                   ; preds = %103, %84, %76
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %21) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %22) #6
  call void @_ZNSaIfEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %22) #6
  invoke void @_ZNSt6vectorIfSaIfEEC2EmRKS0_(ptr noundef nonnull align 8 dereferenceable(24) %21, i64 noundef %38, ptr noundef nonnull align 1 dereferenceable(1) %22)
          to label %107 unwind label %115

89:                                               ; preds = %._crit_edge
  %90 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIN9starspace6MatrixIfEEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %18) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %18) #6
  br label %257

.lr.ph162.split:                                  ; preds = %.lr.ph162, %103
  %91 = phi i64 [ %105, %103 ], [ 0, %.lr.ph162 ]
  %.0100160 = phi i32 [ %104, %103 ], [ 0, %.lr.ph162 ]
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %20) #6
  call void @_ZNSt6vectorISt4pairIifESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %20) #6
  %92 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN9starspace17InternDataHandlerELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %1) #6
  %93 = load ptr, ptr %92, align 8, !tbaa !23
  %94 = getelementptr inbounds i8, ptr %93, i64 16
  %95 = load ptr, ptr %94, align 8
  invoke void %95(ptr noundef nonnull align 8 dereferenceable(88) %92, ptr noundef nonnull align 8 dereferenceable(24) %20)
          to label %98 unwind label %.split

.split:                                           ; preds = %102, %100, %98, %.lr.ph162.split
  %96 = landingpad { ptr, i32 }
          cleanup
  br label %97

97:                                               ; preds = %.split.us, %.split
  %.us-phi = phi { ptr, i32 } [ %96, %.split ], [ %88, %.split.us ]
  call void @_ZNSt6vectorISt4pairIifESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %20) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %20) #6
  br label %256

98:                                               ; preds = %.lr.ph162.split
  %99 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %17, i64 noundef %91) #6
  invoke void @_ZN9starspace10EmbedModel10projectRHSERKSt6vectorISt4pairIifESaIS3_EERNS_6MatrixIfEE(ptr noundef nonnull align 8 dereferenceable(112) %0, ptr noundef nonnull align 8 dereferenceable(24) %20, ptr noundef nonnull align 8 dereferenceable(40) %99)
          to label %100 unwind label %.split

100:                                              ; preds = %98
  %101 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %17, i64 noundef %91) #6
  invoke void @_ZN9starspace10EmbedModel5checkERKNS_6MatrixIfEE(ptr noundef nonnull align 8 dereferenceable(40) %101)
          to label %102 unwind label %.split

102:                                              ; preds = %100
  invoke void @_ZNSt6vectorIS_ISt4pairIifESaIS1_EESaIS3_EE9push_backERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %19, ptr noundef nonnull align 8 dereferenceable(24) %20)
          to label %103 unwind label %.split

103:                                              ; preds = %102
  call void @_ZNSt6vectorISt4pairIifESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %20) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %20) #6
  %104 = add i32 %.0100160, 1
  %105 = zext i32 %104 to i64
  %106 = icmp ult i64 %105, %3
  br i1 %106, label %.lr.ph162.split, label %._crit_edge163, !llvm.loop !22

107:                                              ; preds = %._crit_edge163
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %22) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %22) #6
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %23) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %24) #6
  call void @_ZNSaIN9starspace6MatrixIfEEEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %24) #6
  invoke void @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EEC2EmRKS3_(ptr noundef nonnull align 8 dereferenceable(24) %23, i64 noundef %38, ptr noundef nonnull align 1 dereferenceable(1) %24)
          to label %108 unwind label %117

108:                                              ; preds = %107
  call void @_ZNSt15__new_allocatorIN9starspace6MatrixIfEEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %24) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %24) #6
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %25) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %26) #6
  call void @_ZNSaIiEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %26) #6
  invoke void @_ZNSt6vectorIiSaIiEEC2EmRKS0_(ptr noundef nonnull align 8 dereferenceable(24) %25, i64 noundef %38, ptr noundef nonnull align 1 dereferenceable(1) %26)
          to label %109 unwind label %119

109:                                              ; preds = %108
  call void @_ZNSt15__new_allocatorIiED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %26) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %26) #6
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %27) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %28) #6
  call void @_ZNSaISt6vectorIfSaIfEEEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %28) #6
  invoke void @_ZNSt6vectorIS_IfSaIfEESaIS1_EEC2EmRKS2_(ptr noundef nonnull align 8 dereferenceable(24) %27, i64 noundef %38, ptr noundef nonnull align 1 dereferenceable(1) %28)
          to label %110 unwind label %121

110:                                              ; preds = %109
  call void @_ZNSt15__new_allocatorISt6vectorIfSaIfEEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %28) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %28) #6
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %29) #6
  call void @_ZNSt6vectorIS_IbSaIbEESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %29) #6
  invoke void @_ZNSt6vectorIS_IbSaIbEESaIS1_EE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %29, i64 noundef %38)
          to label %.preheader149 unwind label %123

.preheader149:                                    ; preds = %110
  br i1 %48, label %.lr.ph173, label %._crit_edge174.thread

.lr.ph173:                                        ; preds = %.preheader149
  %111 = getelementptr inbounds i8, ptr %32, i64 8
  %112 = uitofp nneg i64 %3 to float
  %113 = getelementptr inbounds i8, ptr %33, i64 8
  %wide.trip.count184 = and i64 %36, 2147483647
  br label %125

._crit_edge174:                                   ; preds = %.loopexit
  %114 = fcmp oeq float %.1, 0.000000e+00
  br i1 %114, label %._crit_edge174.thread, label %237

115:                                              ; preds = %._crit_edge163
  %116 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %22) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %22) #6
  br label %255

117:                                              ; preds = %107
  %118 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIN9starspace6MatrixIfEEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %24) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %24) #6
  br label %254

119:                                              ; preds = %108
  %120 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIiED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %26) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %26) #6
  br label %253

121:                                              ; preds = %109
  %122 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorISt6vectorIfSaIfEEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %28) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %28) #6
  br label %252

123:                                              ; preds = %242, %110
  %124 = landingpad { ptr, i32 }
          cleanup
  br label %251

125:                                              ; preds = %.lr.ph173, %.loopexit
  %indvars.iv181 = phi i64 [ 0, %.lr.ph173 ], [ %indvars.iv.next182, %.loopexit ]
  %.099171 = phi float [ 0.000000e+00, %.lr.ph173 ], [ %.1, %.loopexit ]
  %126 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %25, i64 noundef %indvars.iv181) #6
  store i32 0, ptr %126, align 4, !tbaa !25
  %127 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %21, i64 noundef %indvars.iv181) #6
  store float 0.000000e+00, ptr %127, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %30) #6
  invoke void @_ZN5boost7numeric5ublas11zero_matrixIfSaIfEEC2Emm(ptr noundef nonnull align 8 dereferenceable(16) %30, i64 noundef 1, i64 noundef %47)
          to label %128 unwind label %136

128:                                              ; preds = %125
  %129 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %23, i64 noundef %indvars.iv181) #6
  %130 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN5boost7numeric5ublas6matrixIfNS1_15basic_row_majorImlEENS1_15unbounded_arrayIfSaIfEEEEaSINS1_11zero_matrixIfS6_EEEERS8_RKNS1_16matrix_containerIT_EE(ptr noundef nonnull align 8 dereferenceable(40) %129, ptr noundef nonnull align 1 dereferenceable(1) %30)
          to label %131 unwind label %138

131:                                              ; preds = %128
  call void @_ZN5boost7numeric5ublas16ublas_expressionINS1_11zero_matrixIfSaIfEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %30) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %30) #6
  %132 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNSt6vectorIS_IbSaIbEESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %29, i64 noundef %indvars.iv181) #6
  invoke void @_ZNSt6vectorIbSaIbEE6resizeEmb(ptr noundef nonnull align 8 dereferenceable(40) %132, i64 noundef %3, i1 noundef zeroext false)
          to label %133 unwind label %141

133:                                              ; preds = %131
  %134 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_IfSaIfEESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %27, i64 noundef %indvars.iv181) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %31) #6
  store float 0.000000e+00, ptr %31, align 4, !tbaa !5
  invoke void @_ZNSt6vectorIfSaIfEE6resizeEmRKf(ptr noundef nonnull align 8 dereferenceable(24) %134, i64 noundef %3, ptr noundef nonnull align 4 dereferenceable(4) %31)
          to label %135 unwind label %143

135:                                              ; preds = %133
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %31) #6
  br i1 %.not, label %._crit_edge167, label %.lr.ph166

136:                                              ; preds = %125
  %137 = landingpad { ptr, i32 }
          cleanup
  br label %140

138:                                              ; preds = %128
  %139 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN5boost7numeric5ublas16ublas_expressionINS1_11zero_matrixIfSaIfEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %30) #6
  br label %140

140:                                              ; preds = %138, %136
  %.pn128 = phi { ptr, i32 } [ %139, %138 ], [ %137, %136 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %30) #6
  br label %251

141:                                              ; preds = %211, %204, %131
  %142 = landingpad { ptr, i32 }
          cleanup
  br label %251

143:                                              ; preds = %133
  %144 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %31) #6
  br label %251

.lr.ph166:                                        ; preds = %135, %.lr.ph166.backedge
  %145 = phi i64 [ %.be, %.lr.ph166.backedge ], [ 0, %135 ]
  %.096164 = phi i32 [ %.096164.be, %.lr.ph166.backedge ], [ 0, %135 ]
  %146 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_IfSaIfEESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %27, i64 noundef %indvars.iv181) #6
  %147 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %146, i64 noundef %145) #6
  store float 0.000000e+00, ptr %147, align 4, !tbaa !5
  %148 = call noundef nonnull align 8 dereferenceable(80) ptr @_ZNKSt6vectorIN9starspace12ParseResultsESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef %indvars.iv181) #6
  %149 = getelementptr inbounds i8, ptr %148, i64 32
  %150 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_ISt4pairIifESaIS1_EESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %19, i64 noundef %145) #6
  %151 = invoke noundef zeroext i1 @_ZSteqISt4pairIifESaIS1_EEbRKSt6vectorIT_T0_ES8_(ptr noundef nonnull align 8 dereferenceable(24) %149, ptr noundef nonnull align 8 dereferenceable(24) %150)
          to label %152 unwind label %153

152:                                              ; preds = %.lr.ph166
  br i1 %151, label %.critedge, label %155

153:                                              ; preds = %.lr.ph166
  %154 = landingpad { ptr, i32 }
          cleanup
  br label %251

155:                                              ; preds = %152
  %156 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %11, i64 noundef %indvars.iv181) #6
  %157 = load float, ptr %156, align 4, !tbaa !5
  %158 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %indvars.iv181) #6
  %159 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %17, i64 noundef %145) #6
  %160 = invoke noundef float @_ZN9starspace10EmbedModel10similarityERNS_6MatrixIfEES3_(ptr noundef nonnull align 8 dereferenceable(112) %0, ptr noundef nonnull align 8 dereferenceable(40) %158, ptr noundef nonnull align 8 dereferenceable(40) %159)
          to label %161 unwind label %181

161:                                              ; preds = %155
  %162 = invoke noundef double @"_ZZN9starspace10EmbedModel13trainOneBatchESt10shared_ptrINS_17InternDataHandlerEERKSt6vectorINS_12ParseResultsESaIS5_EEmfbENK3$_0clEff"(ptr noundef nonnull align 8 dereferenceable(8) %16, float noundef %157, float noundef %160)
          to label %163 unwind label %181

163:                                              ; preds = %161
  %164 = fcmp ogt double %162, 0.000000e+00
  br i1 %164, label %165, label %.critedge

165:                                              ; preds = %163
  %166 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %25, i64 noundef %indvars.iv181) #6
  %167 = load i32, ptr %166, align 4, !tbaa !25
  %168 = add nsw i32 %167, 1
  store i32 %168, ptr %166, align 4, !tbaa !25
  %169 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %21, i64 noundef %indvars.iv181) #6
  %170 = load float, ptr %169, align 4, !tbaa !5
  %171 = fpext float %170 to double
  %172 = fadd double %162, %171
  %173 = fptrunc double %172 to float
  store float %173, ptr %169, align 4, !tbaa !5
  %174 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %23, i64 noundef %indvars.iv181) #6
  %175 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %17, i64 noundef %145) #6
  invoke void @_ZN9starspace6MatrixIfE3addERKS1_f(ptr noundef nonnull align 8 dereferenceable(40) %174, ptr noundef nonnull align 8 dereferenceable(40) %175, float noundef 1.000000e+00)
          to label %176 unwind label %181

176:                                              ; preds = %165
  %177 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %21, i64 noundef %indvars.iv181) #6
  %178 = load float, ptr %177, align 4, !tbaa !5
  %179 = fcmp ult float %178, 0.000000e+00
  br i1 %179, label %180, label %183

180:                                              ; preds = %176
  call void @__assert_fail(ptr noundef nonnull @.str.18, ptr noundef nonnull @.str.4, i32 noundef 438, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN9starspace10EmbedModel13trainOneBatchESt10shared_ptrINS_17InternDataHandlerEERKSt6vectorINS_12ParseResultsESaIS5_EEmfb) #7
  unreachable

181:                                              ; preds = %165, %161, %155
  %182 = landingpad { ptr, i32 }
          cleanup
  br label %251

183:                                              ; preds = %176
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %32) #6
  %184 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNSt6vectorIS_IbSaIbEESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %29, i64 noundef %indvars.iv181) #6
  %185 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %184, i64 noundef %145)
          to label %186 unwind label %199

186:                                              ; preds = %183
  %187 = extractvalue { ptr, i64 } %185, 0
  store ptr %187, ptr %32, align 8
  %188 = extractvalue { ptr, i64 } %185, 1
  store i64 %188, ptr %111, align 8
  %189 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt14_Bit_referenceaSEb(ptr noundef nonnull align 8 dereferenceable(16) %32, i1 noundef zeroext true) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %32) #6
  %190 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %25, i64 noundef %indvars.iv181) #6
  %191 = load i32, ptr %190, align 4, !tbaa !25
  %192 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN9starspace4ArgsELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %44) #6
  %193 = getelementptr inbounds i8, ptr %192, i64 492
  %194 = load i32, ptr %193, align 4, !tbaa !26
  %195 = icmp ne i32 %191, %194
  %196 = add i32 %.096164, 1
  %197 = zext i32 %196 to i64
  %198 = icmp ult i64 %197, %3
  %or.cond = select i1 %195, i1 %198, i1 false
  br i1 %or.cond, label %.lr.ph166.backedge, label %._crit_edge167

199:                                              ; preds = %183
  %200 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %32) #6
  br label %251

.critedge:                                        ; preds = %163, %152
  %.old = add i32 %.096164, 1
  %.old175 = zext i32 %.old to i64
  %.old176 = icmp ult i64 %.old175, %3
  br i1 %.old176, label %.lr.ph166.backedge, label %._crit_edge167

.lr.ph166.backedge:                               ; preds = %.critedge, %186
  %.be = phi i64 [ %.old175, %.critedge ], [ %197, %186 ]
  %.096164.be = phi i32 [ %.old, %.critedge ], [ %196, %186 ]
  br label %.lr.ph166, !llvm.loop !27

._crit_edge167:                                   ; preds = %.critedge, %186, %135
  %201 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %25, i64 noundef %indvars.iv181) #6
  %202 = load i32, ptr %201, align 4, !tbaa !25
  %203 = icmp eq i32 %202, 0
  br i1 %203, label %.loopexit, label %204

204:                                              ; preds = %._crit_edge167
  %205 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %21, i64 noundef %indvars.iv181) #6
  %206 = load float, ptr %205, align 4, !tbaa !5
  %207 = fdiv float %206, %112
  store float %207, ptr %205, align 4, !tbaa !5
  %208 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %25, i64 noundef %indvars.iv181) #6
  %209 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %23, i64 noundef %indvars.iv181) #6
  %210 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN5boost7numeric5ublas6matrixIfNS1_15basic_row_majorImlEENS1_15unbounded_arrayIfSaIfEEEEdVIiEERS8_RKT_(ptr noundef nonnull align 8 dereferenceable(40) %209, ptr noundef nonnull align 4 dereferenceable(4) %208)
          to label %211 unwind label %141

211:                                              ; preds = %204
  %212 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %21, i64 noundef %indvars.iv181) #6
  %213 = load float, ptr %212, align 4, !tbaa !5
  %214 = fadd float %.099171, %213
  %215 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %23, i64 noundef %indvars.iv181) #6
  %216 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %9, i64 noundef %indvars.iv181) #6
  invoke void @_ZN9starspace6MatrixIfE3addERKS1_f(ptr noundef nonnull align 8 dereferenceable(40) %215, ptr noundef nonnull align 8 dereferenceable(40) %216, float noundef -1.000000e+00)
          to label %.preheader unwind label %141

.preheader:                                       ; preds = %211
  br i1 %.not, label %.loopexit, label %.lr.ph170

.lr.ph170:                                        ; preds = %.preheader, %233
  %217 = phi i64 [ %235, %233 ], [ 0, %.preheader ]
  %.0169 = phi i32 [ %234, %233 ], [ 0, %.preheader ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %33) #6
  %218 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNSt6vectorIS_IbSaIbEESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %29, i64 noundef %indvars.iv181) #6
  %219 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %218, i64 noundef %217)
          to label %220 unwind label %231

220:                                              ; preds = %.lr.ph170
  %221 = extractvalue { ptr, i64 } %219, 0
  store ptr %221, ptr %33, align 8
  %222 = extractvalue { ptr, i64 } %219, 1
  store i64 %222, ptr %113, align 8
  %223 = call noundef zeroext i1 @_ZNKSt14_Bit_referencecvbEv(ptr noundef nonnull align 8 dereferenceable(16) %33) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %33) #6
  br i1 %223, label %224, label %233

224:                                              ; preds = %220
  %225 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %25, i64 noundef %indvars.iv181) #6
  %226 = load i32, ptr %225, align 4, !tbaa !25
  %227 = sitofp i32 %226 to float
  %228 = fdiv float %4, %227
  %229 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_IfSaIfEESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %27, i64 noundef %indvars.iv181) #6
  %230 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %229, i64 noundef %217) #6
  store float %228, ptr %230, align 4, !tbaa !5
  br label %233

231:                                              ; preds = %.lr.ph170
  %232 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %33) #6
  br label %251

233:                                              ; preds = %220, %224
  %234 = add i32 %.0169, 1
  %235 = zext i32 %234 to i64
  %236 = icmp ult i64 %235, %3
  br i1 %236, label %.lr.ph170, label %.loopexit, !llvm.loop !28

.loopexit:                                        ; preds = %233, %.preheader, %._crit_edge167
  %.1 = phi float [ %.099171, %._crit_edge167 ], [ %214, %.preheader ], [ %214, %233 ]
  %indvars.iv.next182 = add nuw nsw i64 %indvars.iv181, 1
  %exitcond185.not = icmp eq i64 %indvars.iv.next182, %wide.trip.count184
  br i1 %exitcond185.not, label %._crit_edge174, label %125, !llvm.loop !29

237:                                              ; preds = %._crit_edge174
  %238 = call noundef zeroext i1 @_ZSt5isinff(float noundef %.1)
  br i1 %238, label %239, label %240

239:                                              ; preds = %237
  call void @__assert_fail(ptr noundef nonnull @.str.19, ptr noundef nonnull @.str.4, i32 noundef 463, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN9starspace10EmbedModel13trainOneBatchESt10shared_ptrINS_17InternDataHandlerEERKSt6vectorINS_12ParseResultsESaIS5_EEmfb) #7
  unreachable

240:                                              ; preds = %237
  %241 = fcmp oeq float %4, 0.000000e+00
  br i1 %241, label %._crit_edge174.thread, label %242

242:                                              ; preds = %240
  invoke void @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(24) %34, ptr noundef nonnull align 8 dereferenceable(24) %23)
          to label %243 unwind label %123

243:                                              ; preds = %242
  invoke void @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(24) %35, ptr noundef nonnull align 8 dereferenceable(24) %7)
          to label %244 unwind label %246

244:                                              ; preds = %243
  invoke void @_ZN9starspace10EmbedModel8backwardERKSt6vectorINS_12ParseResultsESaIS2_EERKS1_IS1_ISt4pairIifESaIS8_EESaISA_EES1_INS_6MatrixIfEESaISG_EESI_RKS1_IiSaIiEEfRKS1_IfSaIfEERKS1_ISO_SaISO_EE(ptr noundef nonnull align 8 dereferenceable(112) %0, ptr noundef nonnull align 8 dereferenceable(24) %2, ptr noundef nonnull align 8 dereferenceable(24) %19, ptr noundef nonnull %34, ptr noundef nonnull %35, ptr noundef nonnull align 8 dereferenceable(24) %25, float noundef %4, ptr noundef nonnull align 8 dereferenceable(24) %13, ptr noundef nonnull align 8 dereferenceable(24) %27)
          to label %245 unwind label %248

245:                                              ; preds = %244
  call void @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %35) #6
  call void @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %34) #6
  br label %._crit_edge174.thread

246:                                              ; preds = %243
  %247 = landingpad { ptr, i32 }
          cleanup
  br label %250

248:                                              ; preds = %244
  %249 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %35) #6
  br label %250

250:                                              ; preds = %248, %246
  %.pn = phi { ptr, i32 } [ %249, %248 ], [ %247, %246 ]
  call void @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %34) #6
  br label %251

._crit_edge174.thread:                            ; preds = %.preheader149, %240, %._crit_edge174, %245
  %.095 = phi float [ %.1, %245 ], [ 0.000000e+00, %._crit_edge174 ], [ %.1, %240 ], [ 0.000000e+00, %.preheader149 ]
  call void @_ZNSt6vectorIS_IbSaIbEESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %29) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %29) #6
  call void @_ZNSt6vectorIS_IfSaIfEESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %27) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %27) #6
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %25) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %25) #6
  call void @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %23) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %23) #6
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %21) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %21) #6
  call void @_ZNSt6vectorIS_ISt4pairIifESaIS1_EESaIS3_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %19) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %19) #6
  call void @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %17) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %17) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #6
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %13) #6
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %11) #6
  call void @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %9) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %9) #6
  call void @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7) #6
  ret float %.095

251:                                              ; preds = %140, %141, %143, %231, %181, %199, %153, %250, %123
  %.pn133.pn = phi { ptr, i32 } [ %.pn, %250 ], [ %124, %123 ], [ %232, %231 ], [ %142, %141 ], [ %144, %143 ], [ %.pn128, %140 ], [ %154, %153 ], [ %200, %199 ], [ %182, %181 ]
  call void @_ZNSt6vectorIS_IbSaIbEESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %29) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %29) #6
  call void @_ZNSt6vectorIS_IfSaIfEESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %27) #6
  br label %252

252:                                              ; preds = %251, %121
  %.pn133.pn.pn = phi { ptr, i32 } [ %.pn133.pn, %251 ], [ %122, %121 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %27) #6
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %25) #6
  br label %253

253:                                              ; preds = %252, %119
  %.pn133.pn.pn.pn = phi { ptr, i32 } [ %.pn133.pn.pn, %252 ], [ %120, %119 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %25) #6
  call void @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %23) #6
  br label %254

254:                                              ; preds = %253, %117
  %.pn133.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn133.pn.pn.pn, %253 ], [ %118, %117 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %23) #6
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %21) #6
  br label %255

255:                                              ; preds = %254, %115
  %.pn133.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn133.pn.pn.pn.pn, %254 ], [ %116, %115 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %21) #6
  br label %256

256:                                              ; preds = %255, %97
  %.pn140 = phi { ptr, i32 } [ %.us-phi, %97 ], [ %.pn133.pn.pn.pn.pn.pn, %255 ]
  call void @_ZNSt6vectorIS_ISt4pairIifESaIS1_EESaIS3_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %19) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %19) #6
  call void @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %17) #6
  br label %257

257:                                              ; preds = %256, %89
  %.pn140.pn = phi { ptr, i32 } [ %.pn140, %256 ], [ %90, %89 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %17) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #6
  br label %258

258:                                              ; preds = %257, %74
  %.pn143 = phi { ptr, i32 } [ %75, %74 ], [ %.pn140.pn, %257 ]
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #6
  br label %259

259:                                              ; preds = %258, %55
  %.pn143.pn = phi { ptr, i32 } [ %.pn143, %258 ], [ %56, %55 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %13) #6
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #6
  br label %260

260:                                              ; preds = %259, %53
  %.pn143.pn.pn = phi { ptr, i32 } [ %.pn143.pn, %259 ], [ %54, %53 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %11) #6
  call void @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %9) #6
  br label %261

261:                                              ; preds = %260, %51
  %.pn143.pn.pn.pn = phi { ptr, i32 } [ %.pn143.pn.pn, %260 ], [ %52, %51 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %9) #6
  call void @_ZNSt6vectorIN9starspace6MatrixIfEESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #6
  br label %262

262:                                              ; preds = %261, %49
  %.pn143.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn143.pn.pn.pn, %261 ], [ %50, %49 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7) #6
  resume { ptr, i32 } %.pn143.pn.pn.pn.pn
}

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN9starspace10EmbedModel5checkERKNS_6MatrixIfEE(ptr noundef nonnull align 8 dereferenceable(40)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef float @_ZN9starspace10EmbedModel10similarityERNS_6MatrixIfEES3_(ptr noundef nonnull align 8 dereferenceable(112), ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(40)) local_unnamed_addr #3 align 2

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

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

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

declare void @_ZN9starspace17InternDataHandler13getRandomWordERSt6vectorISt4pairIifESaIS3_EE(ptr noundef nonnull align 8 dereferenceable(88), ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #4

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIS_IfSaIfEESaIS1_EEC2EmRKS2_(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 @_ZNSt6vectorIS_IbSaIbEESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #0 align 2

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIbSaIbEE6resizeEmb(ptr noundef nonnull align 8 dereferenceable(40), i64 noundef, i1 noundef zeroext) local_unnamed_addr #3 align 2

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZSteqISt4pairIifESaIS1_EEbRKSt6vectorIT_T0_ES8_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #5

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

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef double @"_ZZN9starspace10EmbedModel13trainOneBatchESt10shared_ptrINS_17InternDataHandlerEERKSt6vectorINS_12ParseResultsESaIS5_EEmfbENK3$_0clEff"(ptr noundef nonnull align 8 dereferenceable(8), float noundef, float noundef) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN9starspace6MatrixIfE3addERKS1_f(ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(40), float noundef) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40), i64 noundef) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt14_Bit_referenceaSEb(ptr noundef nonnull align 8 dereferenceable(16), i1 noundef zeroext) local_unnamed_addr #0 align 2

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZSt5isinff(float noundef) local_unnamed_addr #0

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIS_ISt4pairIifESaIS1_EESaIS3_EED2Ev(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_allocatorIN9starspace6MatrixIfEEED2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt15__new_allocatorISt6vectorIfSaIfEEED2Ev(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 = { "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 = { nounwind }
attributes #7 = { noreturn 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 = !{!"float", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !14, i64 464}
!10 = !{!"_ZTSN9starspace4ArgsE", !11, i64 0, !11, i64 32, !11, i64 64, !11, i64 96, !11, i64 128, !11, i64 160, !11, i64 192, !11, i64 224, !11, i64 256, !11, i64 288, !11, i64 320, !11, i64 352, !7, i64 384, !15, i64 392, !15, i64 400, !15, i64 408, !15, i64 416, !15, i64 424, !15, i64 432, !15, i64 440, !15, i64 448, !15, i64 456, !14, i64 464, !16, i64 472, !16, i64 476, !16, i64 480, !16, i64 484, !16, i64 488, !16, i64 492, !16, i64 496, !16, i64 500, !16, i64 504, !16, i64 508, !16, i64 512, !16, i64 516, !16, i64 520, !16, i64 524, !16, i64 528, !17, i64 532, !17, i64 533, !17, i64 534, !17, i64 535, !17, i64 536, !17, i64 537, !17, i64 538, !17, i64 539, !17, i64 540, !17, i64 541, !17, i64 542}
!11 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !12, i64 0, !14, i64 8, !7, i64 16}
!12 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !13, i64 0}
!13 = !{!"any pointer", !7, i64 0}
!14 = !{!"long", !7, i64 0}
!15 = !{!"double", !7, i64 0}
!16 = !{!"int", !7, i64 0}
!17 = !{!"bool", !7, i64 0}
!18 = !{!19, !13, i64 0}
!19 = !{!"_ZTSZN9starspace10EmbedModel13trainOneBatchESt10shared_ptrINS_17InternDataHandlerEERKSt6vectorINS_12ParseResultsESaIS5_EEmfbE3$_0", !13, i64 0}
!20 = distinct !{!20, !21}
!21 = !{!"llvm.loop.mustprogress"}
!22 = distinct !{!22, !21}
!23 = !{!24, !24, i64 0}
!24 = !{!"vtable pointer", !8, i64 0}
!25 = !{!16, !16, i64 0}
!26 = !{!10, !16, i64 492}
!27 = distinct !{!27, !21}
!28 = distinct !{!28, !21}
!29 = distinct !{!29, !21}


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