; LLVM IR from hoodoer/ENNEoS :: enneosEncoder/Cga.ll (ZN3Cga17RunXorTestAndExitEv)

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

%"class.std::basic_ostream" = type { ptr, %"class.std::basic_ios" }
%"class.std::basic_ios" = type { %"class.std::ios_base", ptr, i8, i8, ptr, ptr, ptr, ptr }
%"class.std::ios_base" = type { ptr, i64, i64, i32, i32, i32, ptr, %"struct.std::ios_base::_Words", [8 x %"struct.std::ios_base::_Words"], i32, ptr, %"class.std::locale" }
%"struct.std::ios_base::_Words" = type { ptr, i64 }
%"class.std::locale" = type { ptr }
%"class.std::vector.15" = type { %"struct.std::_Vector_base.16" }
%"struct.std::_Vector_base.16" = type { %"struct.std::_Vector_base<SLinkGene, std::allocator<SLinkGene>>::_Vector_impl" }
%"struct.std::_Vector_base<SLinkGene, std::allocator<SLinkGene>>::_Vector_impl" = type { %"struct.std::_Vector_base<SLinkGene, std::allocator<SLinkGene>>::_Vector_impl_data" }
%"struct.std::_Vector_base<SLinkGene, std::allocator<SLinkGene>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.10" = type { %"struct.std::_Vector_base.11" }
%"struct.std::_Vector_base.11" = type { %"struct.std::_Vector_base<SNeuronGene, std::allocator<SNeuronGene>>::_Vector_impl" }
%"struct.std::_Vector_base<SNeuronGene, std::allocator<SNeuronGene>>::_Vector_impl" = type { %"struct.std::_Vector_base<SNeuronGene, std::allocator<SNeuronGene>>::_Vector_impl_data" }
%"struct.std::_Vector_base<SNeuronGene, std::allocator<SNeuronGene>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.5" = type { %"struct.std::_Vector_base.6" }
%"struct.std::_Vector_base.6" = type { %"struct.std::_Vector_base<SplitDepth, std::allocator<SplitDepth>>::_Vector_impl" }
%"struct.std::_Vector_base<SplitDepth, std::allocator<SplitDepth>>::_Vector_impl" = type { %"struct.std::_Vector_base<SplitDepth, std::allocator<SplitDepth>>::_Vector_impl_data" }
%"struct.std::_Vector_base<SplitDepth, std::allocator<SplitDepth>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.25" = type { %"struct.std::_Vector_base.26" }
%"struct.std::_Vector_base.26" = type { %"struct.std::_Vector_base<CNeuralNet *, std::allocator<CNeuralNet *>>::_Vector_impl" }
%"struct.std::_Vector_base<CNeuralNet *, std::allocator<CNeuralNet *>>::_Vector_impl" = type { %"struct.std::_Vector_base<CNeuralNet *, std::allocator<CNeuralNet *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<CNeuralNet *, std::allocator<CNeuralNet *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.35" = type { %"struct.std::_Vector_base.36" }
%"struct.std::_Vector_base.36" = type { %"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl" }
%"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl" = type { %"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl_data" }
%"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.30" = type { %"struct.std::_Vector_base.31" }
%"struct.std::_Vector_base.31" = 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.CGenome = type <{ i32, [4 x i8], %"class.std::vector.10", %"class.std::vector.15", ptr, i32, [4 x i8], double, double, double, i32, i32, i32, [4 x i8] }>
%class.Cga = type <{ %"class.std::vector", %"class.std::vector", %"class.std::vector", %"class.std::vector", %"class.std::vector", %"class.std::vector.0", ptr, i32, i32, i32, i32, double, double, i32, [4 x i8], double, %"class.std::vector.5", %"class.std::vector.5", double, i8, i8, [2 x i8], i32, i8, [7 x i8] }>
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<CGenome, std::allocator<CGenome>>::_Vector_impl" }
%"struct.std::_Vector_base<CGenome, std::allocator<CGenome>>::_Vector_impl" = type { %"struct.std::_Vector_base<CGenome, std::allocator<CGenome>>::_Vector_impl_data" }
%"struct.std::_Vector_base<CGenome, std::allocator<CGenome>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.0" = type { %"struct.std::_Vector_base.1" }
%"struct.std::_Vector_base.1" = type { %"struct.std::_Vector_base<CSpecies, std::allocator<CSpecies>>::_Vector_impl" }
%"struct.std::_Vector_base<CSpecies, std::allocator<CSpecies>>::_Vector_impl" = type { %"struct.std::_Vector_base<CSpecies, std::allocator<CSpecies>>::_Vector_impl_data" }
%"struct.std::_Vector_base<CSpecies, std::allocator<CSpecies>>::_Vector_impl_data" = type { ptr, ptr, ptr }

@_ZSt4cout = external global %"class.std::basic_ostream", align 8
@.str.33 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [84 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [133 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.43 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.44 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.46 = external hidden unnamed_addr constant [45 x i8], align 1
@.str.47 = external hidden unnamed_addr constant [47 x i8], align 1

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

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

declare void @_ZN7CGenomeC1Eiii(ptr noundef nonnull align 8 dereferenceable(108), i32 noundef, i32 noundef, i32 noundef) unnamed_addr #2

declare i32 @__gxx_personality_v0(...)

; Function Attrs: nounwind
declare void @_ZN7CGenomeD1Ev(ptr noundef nonnull align 8 dereferenceable(108)) unnamed_addr #3

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK7CGenome5GenesEv(ptr dead_on_unwind noalias writable sret(%"class.std::vector.15") align 8, ptr noundef nonnull align 8 dereferenceable(108)) #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK7CGenome7NeuronsEv(ptr dead_on_unwind noalias writable sret(%"class.std::vector.10") align 8, ptr noundef nonnull align 8 dereferenceable(108)) #1 align 2

declare void @_ZN11CInnovationC1ESt6vectorI9SLinkGeneSaIS1_EES0_I11SNeuronGeneSaIS4_EE(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef, ptr noundef) unnamed_addr #2

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3Cga5SplitEddi(ptr dead_on_unwind noalias writable sret(%"class.std::vector.5") align 8, ptr noundef nonnull align 8 dereferenceable(265), double noundef, double noundef, i32 noundef) #1 align 2

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3Cga16CreatePhenotypesEv(ptr dead_on_unwind noalias writable sret(%"class.std::vector.25") align 8, ptr noundef nonnull align 8 dereferenceable(265)) #1 align 2

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3Cga5EpochERKSt6vectorIdSaIdEE(ptr dead_on_unwind noalias writable sret(%"class.std::vector.25") align 8, ptr noundef nonnull align 8 dereferenceable(265), ptr noundef nonnull align 8 dereferenceable(24)) #1 align 2

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_(ptr noundef nonnull align 8 dereferenceable(8)) #7

; Function Attrs: noreturn nounwind
declare void @exit(i32 noundef) #8

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_Z7RandIntii(i32 noundef, i32 noundef) #9

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

declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8), i32 noundef) #2

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3Cga17RunXorTestAndExitEv(ptr noundef nonnull align 8 dereferenceable(265) %0) #1 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca ptr, align 8
  %3 = alloca %"class.std::vector.25", align 8
  %4 = alloca %"class.std::vector.35", align 8
  %5 = alloca %"class.std::vector.35", align 8
  %6 = alloca %"class.std::vector.35", align 8
  %7 = alloca %"class.std::vector.30", align 8
  %8 = alloca %"class.std::vector.30", align 8
  %9 = alloca double, align 8
  %10 = alloca double, align 8
  %11 = alloca double, align 8
  %12 = alloca double, align 8
  %13 = alloca double, align 8
  %14 = alloca i32, align 4
  %15 = alloca i8, align 1
  %16 = alloca i32, align 4
  %17 = alloca [4 x i32], align 16
  %18 = alloca [2 x [4 x double]], align 16
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca ptr, align 8
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca %class.CGenome, align 8
  %25 = alloca %class.CGenome, align 8
  %26 = alloca %"class.std::vector.15", align 8
  %27 = alloca %"class.std::vector.10", align 8
  %28 = alloca i1, align 1
  %29 = alloca %"class.std::vector.5", align 8
  %30 = alloca %"class.std::vector.25", align 8
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca i32, align 4
  %37 = alloca i32, align 4
  %38 = alloca %"class.std::vector.35", align 8
  %39 = alloca i32, align 4
  %40 = alloca %"class.std::vector.25", align 8
  %41 = alloca float, align 4
  %42 = alloca float, align 4
  %43 = alloca i32, align 4
  %44 = alloca i32, align 4
  %45 = alloca float, align 4
  %46 = alloca float, align 4
  %47 = alloca i32, align 4
  %48 = alloca float, align 4
  %49 = alloca float, align 4
  %50 = alloca float, align 4
  %51 = alloca i32, align 4
  %52 = alloca float, align 4
  store ptr %0, ptr %2, align 8, !tbaa !5
  %53 = load ptr, ptr %2, align 8
  %54 = getelementptr inbounds %class.Cga, ptr %53, i32 0, i32 19
  store i8 1, ptr %54, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 24, ptr %3) #11
  call void @_ZNSt6vectorIP10CNeuralNetSaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %3) #11
  call void @llvm.lifetime.start.p0(i64 24, ptr %4) #11
  call void @_ZNSt6vectorIdSaIdEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %4) #11
  call void @llvm.lifetime.start.p0(i64 24, ptr %5) #11
  call void @_ZNSt6vectorIdSaIdEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #11
  call void @llvm.lifetime.start.p0(i64 24, ptr %6) #11
  call void @_ZNSt6vectorIdSaIdEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %6) #11
  call void @llvm.lifetime.start.p0(i64 24, ptr %7) #11
  call void @_ZNSt6vectorIiSaIiEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #11
  call void @llvm.lifetime.start.p0(i64 24, ptr %8) #11
  call void @_ZNSt6vectorIiSaIiEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %8) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #11
  call void @llvm.lifetime.start.p0(i64 1, ptr %15) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #11
  store i32 0, ptr %16, align 4, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 16, ptr %17) #11
  call void @llvm.lifetime.start.p0(i64 64, ptr %18) #11
  %55 = getelementptr inbounds [2 x [4 x double]], ptr %18, i64 0, i64 0
  %56 = getelementptr inbounds [4 x double], ptr %55, i64 0, i64 0
  store double 0.000000e+00, ptr %56, align 16, !tbaa !28
  %57 = getelementptr inbounds [2 x [4 x double]], ptr %18, i64 0, i64 1
  %58 = getelementptr inbounds [4 x double], ptr %57, i64 0, i64 0
  store double 0.000000e+00, ptr %58, align 16, !tbaa !28
  %59 = getelementptr inbounds [2 x [4 x double]], ptr %18, i64 0, i64 0
  %60 = getelementptr inbounds [4 x double], ptr %59, i64 0, i64 1
  store double 1.000000e+00, ptr %60, align 8, !tbaa !28
  %61 = getelementptr inbounds [2 x [4 x double]], ptr %18, i64 0, i64 1
  %62 = getelementptr inbounds [4 x double], ptr %61, i64 0, i64 1
  store double 0.000000e+00, ptr %62, align 8, !tbaa !28
  %63 = getelementptr inbounds [2 x [4 x double]], ptr %18, i64 0, i64 0
  %64 = getelementptr inbounds [4 x double], ptr %63, i64 0, i64 2
  store double 0.000000e+00, ptr %64, align 16, !tbaa !28
  %65 = getelementptr inbounds [2 x [4 x double]], ptr %18, i64 0, i64 1
  %66 = getelementptr inbounds [4 x double], ptr %65, i64 0, i64 2
  store double 1.000000e+00, ptr %66, align 16, !tbaa !28
  %67 = getelementptr inbounds [2 x [4 x double]], ptr %18, i64 0, i64 0
  %68 = getelementptr inbounds [4 x double], ptr %67, i64 0, i64 3
  store double 1.000000e+00, ptr %68, align 8, !tbaa !28
  %69 = getelementptr inbounds [2 x [4 x double]], ptr %18, i64 0, i64 1
  %70 = getelementptr inbounds [4 x double], ptr %69, i64 0, i64 3
  store double 1.000000e+00, ptr %70, align 8, !tbaa !28
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #11
  store i32 0, ptr %19, align 4, !tbaa !27
  br label %71

71:                                               ; preds = %449, %1
  %72 = load i32, ptr %19, align 4, !tbaa !27
  %73 = icmp slt i32 %72, 100
  br i1 %73, label %75, label %74

74:                                               ; preds = %71
  store i32 2, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #11
  br label %455

75:                                               ; preds = %71
  %76 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.33)
          to label %77 unwind label %109

77:                                               ; preds = %75
  %78 = load i32, ptr %19, align 4, !tbaa !27
  %79 = add nsw i32 %78, 1
  %80 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %76, i32 noundef %79)
          to label %81 unwind label %109

81:                                               ; preds = %77
  %82 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %80, ptr noundef @.str.34)
          to label %83 unwind label %109

83:                                               ; preds = %81
  %84 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %82, i32 noundef 100)
          to label %85 unwind label %109

85:                                               ; preds = %83
  %86 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %84, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %87 unwind label %109

87:                                               ; preds = %85
  %88 = getelementptr inbounds %class.Cga, ptr %53, i32 0, i32 0
  call void @_ZNSt6vectorI7CGenomeSaIS0_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %88) #11
  %89 = getelementptr inbounds %class.Cga, ptr %53, i32 0, i32 1
  call void @_ZNSt6vectorI7CGenomeSaIS0_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %89) #11
  %90 = getelementptr inbounds %class.Cga, ptr %53, i32 0, i32 2
  call void @_ZNSt6vectorI7CGenomeSaIS0_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %90) #11
  %91 = getelementptr inbounds %class.Cga, ptr %53, i32 0, i32 3
  call void @_ZNSt6vectorI7CGenomeSaIS0_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %91) #11
  %92 = getelementptr inbounds %class.Cga, ptr %53, i32 0, i32 5
  call void @_ZNSt6vectorI8CSpeciesSaIS0_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %92) #11
  %93 = getelementptr inbounds %class.Cga, ptr %53, i32 0, i32 16
  call void @_ZNSt6vectorI10SplitDepthSaIS0_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %93) #11
  %94 = getelementptr inbounds %class.Cga, ptr %53, i32 0, i32 17
  call void @_ZNSt6vectorI10SplitDepthSaIS0_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %94) #11
  %95 = getelementptr inbounds %class.Cga, ptr %53, i32 0, i32 7
  store i32 0, ptr %95, align 8, !tbaa !29
  %96 = getelementptr inbounds %class.Cga, ptr %53, i32 0, i32 6
  store ptr null, ptr %96, align 8, !tbaa !30
  %97 = getelementptr inbounds %class.Cga, ptr %53, i32 0, i32 8
  store i32 0, ptr %97, align 4, !tbaa !31
  %98 = getelementptr inbounds %class.Cga, ptr %53, i32 0, i32 9
  store i32 0, ptr %98, align 8, !tbaa !32
  %99 = getelementptr inbounds %class.Cga, ptr %53, i32 0, i32 13
  store i32 0, ptr %99, align 8, !tbaa !33
  %100 = getelementptr inbounds %class.Cga, ptr %53, i32 0, i32 15
  store double 0.000000e+00, ptr %100, align 8, !tbaa !34
  %101 = getelementptr inbounds %class.Cga, ptr %53, i32 0, i32 11
  store double 0.000000e+00, ptr %101, align 8, !tbaa !35
  %102 = getelementptr inbounds %class.Cga, ptr %53, i32 0, i32 12
  store double 0.000000e+00, ptr %102, align 8, !tbaa !36
  store i8 0, ptr %15, align 1, !tbaa !37
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #11
  store i32 0, ptr %23, align 4, !tbaa !27
  br label %103

103:                                              ; preds = %120, %87
  %104 = load i32, ptr %23, align 4, !tbaa !27
  %105 = getelementptr inbounds %class.Cga, ptr %53, i32 0, i32 10
  %106 = load i32, ptr %105, align 4, !tbaa !38
  %107 = icmp slt i32 %104, %106
  br i1 %107, label %113, label %108

108:                                              ; preds = %103
  store i32 5, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #11
  br label %132

109:                                              ; preds = %85, %83, %81, %77, %75
  %110 = landingpad { ptr, i32 }
          cleanup
  %111 = extractvalue { ptr, i32 } %110, 0
  store ptr %111, ptr %21, align 8
  %112 = extractvalue { ptr, i32 } %110, 1
  store i32 %112, ptr %22, align 4
  br label %454

113:                                              ; preds = %103
  %114 = getelementptr inbounds %class.Cga, ptr %53, i32 0, i32 0
  call void @llvm.lifetime.start.p0(i64 112, ptr %24) #11
  %115 = getelementptr inbounds %class.Cga, ptr %53, i32 0, i32 8
  %116 = load i32, ptr %115, align 4, !tbaa !31
  %117 = add nsw i32 %116, 1
  store i32 %117, ptr %115, align 4, !tbaa !31
  invoke void @_ZN7CGenomeC1Eiii(ptr noundef nonnull align 8 dereferenceable(108) %24, i32 noundef %116, i32 noundef 2, i32 noundef 1)
          to label %118 unwind label %123

118:                                              ; preds = %113
  invoke void @_ZNSt6vectorI7CGenomeSaIS0_EE9push_backEOS0_(ptr noundef nonnull align 8 dereferenceable(24) %114, ptr noundef nonnull align 8 dereferenceable(108) %24)
          to label %119 unwind label %127

119:                                              ; preds = %118
  call void @_ZN7CGenomeD1Ev(ptr noundef nonnull align 8 dereferenceable(108) %24) #11
  call void @llvm.lifetime.end.p0(i64 112, ptr %24) #11
  br label %120

120:                                              ; preds = %119
  %121 = load i32, ptr %23, align 4, !tbaa !27
  %122 = add nsw i32 %121, 1
  store i32 %122, ptr %23, align 4, !tbaa !27
  br label %103, !llvm.loop !39

123:                                              ; preds = %113
  %124 = landingpad { ptr, i32 }
          cleanup
  %125 = extractvalue { ptr, i32 } %124, 0
  store ptr %125, ptr %21, align 8
  %126 = extractvalue { ptr, i32 } %124, 1
  store i32 %126, ptr %22, align 4
  br label %131

127:                                              ; preds = %118
  %128 = landingpad { ptr, i32 }
          cleanup
  %129 = extractvalue { ptr, i32 } %128, 0
  store ptr %129, ptr %21, align 8
  %130 = extractvalue { ptr, i32 } %128, 1
  store i32 %130, ptr %22, align 4
  call void @_ZN7CGenomeD1Ev(ptr noundef nonnull align 8 dereferenceable(108) %24) #11
  br label %131

131:                                              ; preds = %127, %123
  call void @llvm.lifetime.end.p0(i64 112, ptr %24) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #11
  br label %454

132:                                              ; preds = %108
  call void @llvm.lifetime.start.p0(i64 112, ptr %25) #11
  invoke void @_ZN7CGenomeC1Eiii(ptr noundef nonnull align 8 dereferenceable(108) %25, i32 noundef 1, i32 noundef 2, i32 noundef 1)
          to label %133 unwind label %150

133:                                              ; preds = %132
  %134 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 32) #12
          to label %135 unwind label %154

135:                                              ; preds = %133
  store i1 true, ptr %28, align 1
  invoke void @_ZNK7CGenome5GenesEv(ptr dead_on_unwind writable sret(%"class.std::vector.15") align 8 %26, ptr noundef nonnull align 8 dereferenceable(108) %25)
          to label %136 unwind label %158

136:                                              ; preds = %135
  invoke void @_ZNK7CGenome7NeuronsEv(ptr dead_on_unwind writable sret(%"class.std::vector.10") align 8 %27, ptr noundef nonnull align 8 dereferenceable(108) %25)
          to label %137 unwind label %162

137:                                              ; preds = %136
  invoke void @_ZN11CInnovationC1ESt6vectorI9SLinkGeneSaIS1_EES0_I11SNeuronGeneSaIS4_EE(ptr noundef nonnull align 8 dereferenceable(32) %134, ptr noundef %26, ptr noundef %27)
          to label %138 unwind label %166

138:                                              ; preds = %137
  store i1 false, ptr %28, align 1
  %139 = getelementptr inbounds %class.Cga, ptr %53, i32 0, i32 6
  store ptr %134, ptr %139, align 8, !tbaa !30
  call void @_ZNSt6vectorI11SNeuronGeneSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %27) #11
  call void @_ZNSt6vectorI9SLinkGeneSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %26) #11
  call void @llvm.lifetime.start.p0(i64 24, ptr %29) #11
  invoke void @_ZN3Cga5SplitEddi(ptr dead_on_unwind writable sret(%"class.std::vector.5") align 8 %29, ptr noundef nonnull align 8 dereferenceable(265) %53, double noundef 0.000000e+00, double noundef 1.000000e+00, i32 noundef 0)
          to label %140 unwind label %175

140:                                              ; preds = %138
  %141 = getelementptr inbounds %class.Cga, ptr %53, i32 0, i32 16
  %142 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorI10SplitDepthSaIS0_EEaSEOS2_(ptr noundef nonnull align 8 dereferenceable(24) %141, ptr noundef nonnull align 8 dereferenceable(24) %29) #11
  call void @_ZNSt6vectorI10SplitDepthSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %29) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %29) #11
  %143 = getelementptr inbounds %class.Cga, ptr %53, i32 0, i32 18
  store double 3.000000e+00, ptr %143, align 8, !tbaa !41
  call void @llvm.lifetime.start.p0(i64 24, ptr %30) #11
  invoke void @_ZN3Cga16CreatePhenotypesEv(ptr dead_on_unwind writable sret(%"class.std::vector.25") align 8 %30, ptr noundef nonnull align 8 dereferenceable(265) %53)
          to label %144 unwind label %179

144:                                              ; preds = %140
  %145 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIP10CNeuralNetSaIS1_EEaSEOS3_(ptr noundef nonnull align 8 dereferenceable(24) %3, ptr noundef nonnull align 8 dereferenceable(24) %30) #11
  call void @_ZNSt6vectorIP10CNeuralNetSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %30) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %30) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #11
  store i32 0, ptr %31, align 4, !tbaa !27
  br label %146

146:                                              ; preds = %444, %144
  %147 = load i32, ptr %31, align 4, !tbaa !27
  %148 = icmp slt i32 %147, 500
  br i1 %148, label %183, label %149

149:                                              ; preds = %146
  store i32 8, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #11
  br label %448

150:                                              ; preds = %132
  %151 = landingpad { ptr, i32 }
          cleanup
  %152 = extractvalue { ptr, i32 } %151, 0
  store ptr %152, ptr %21, align 8
  %153 = extractvalue { ptr, i32 } %151, 1
  store i32 %153, ptr %22, align 4
  br label %453

154:                                              ; preds = %133
  %155 = landingpad { ptr, i32 }
          cleanup
  %156 = extractvalue { ptr, i32 } %155, 0
  store ptr %156, ptr %21, align 8
  %157 = extractvalue { ptr, i32 } %155, 1
  store i32 %157, ptr %22, align 4
  br label %452

158:                                              ; preds = %135
  %159 = landingpad { ptr, i32 }
          cleanup
  %160 = extractvalue { ptr, i32 } %159, 0
  store ptr %160, ptr %21, align 8
  %161 = extractvalue { ptr, i32 } %159, 1
  store i32 %161, ptr %22, align 4
  br label %171

162:                                              ; preds = %136
  %163 = landingpad { ptr, i32 }
          cleanup
  %164 = extractvalue { ptr, i32 } %163, 0
  store ptr %164, ptr %21, align 8
  %165 = extractvalue { ptr, i32 } %163, 1
  store i32 %165, ptr %22, align 4
  br label %170

166:                                              ; preds = %137
  %167 = landingpad { ptr, i32 }
          cleanup
  %168 = extractvalue { ptr, i32 } %167, 0
  store ptr %168, ptr %21, align 8
  %169 = extractvalue { ptr, i32 } %167, 1
  store i32 %169, ptr %22, align 4
  call void @_ZNSt6vectorI11SNeuronGeneSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %27) #11
  br label %170

170:                                              ; preds = %166, %162
  call void @_ZNSt6vectorI9SLinkGeneSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %26) #11
  br label %171

171:                                              ; preds = %170, %158
  %172 = load i1, ptr %28, align 1
  br i1 %172, label %173, label %174

173:                                              ; preds = %171
  call void @_ZdlPvm(ptr noundef %134, i64 noundef 32) #13
  br label %174

174:                                              ; preds = %173, %171
  br label %452

175:                                              ; preds = %138
  %176 = landingpad { ptr, i32 }
          cleanup
  %177 = extractvalue { ptr, i32 } %176, 0
  store ptr %177, ptr %21, align 8
  %178 = extractvalue { ptr, i32 } %176, 1
  store i32 %178, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 24, ptr %29) #11
  br label %452

179:                                              ; preds = %140
  %180 = landingpad { ptr, i32 }
          cleanup
  %181 = extractvalue { ptr, i32 } %180, 0
  store ptr %181, ptr %21, align 8
  %182 = extractvalue { ptr, i32 } %180, 1
  store i32 %182, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 24, ptr %30) #11
  br label %452

183:                                              ; preds = %146
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #11
  store i32 0, ptr %32, align 4, !tbaa !27
  br label %184

184:                                              ; preds = %192, %183
  %185 = load i32, ptr %32, align 4, !tbaa !27
  %186 = icmp slt i32 %185, 4
  br i1 %186, label %188, label %187

187:                                              ; preds = %184
  store i32 11, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #11
  br label %195

188:                                              ; preds = %184
  %189 = load i32, ptr %32, align 4, !tbaa !27
  %190 = sext i32 %189 to i64
  %191 = getelementptr inbounds [4 x i32], ptr %17, i64 0, i64 %190
  store i32 -1, ptr %191, align 4, !tbaa !27
  br label %192

192:                                              ; preds = %188
  %193 = load i32, ptr %32, align 4, !tbaa !27
  %194 = add nsw i32 %193, 1
  store i32 %194, ptr %32, align 4, !tbaa !27
  br label %184, !llvm.loop !42

195:                                              ; preds = %187
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #11
  store i32 0, ptr %33, align 4, !tbaa !27
  br label %196

196:                                              ; preds = %234, %195
  %197 = load i32, ptr %33, align 4, !tbaa !27
  %198 = icmp slt i32 %197, 4
  br i1 %198, label %200, label %199

199:                                              ; preds = %196
  store i32 14, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #11
  br label %238

200:                                              ; preds = %196
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #11
  %201 = invoke noundef i32 @_Z7RandIntii(i32 noundef 0, i32 noundef 3)
          to label %202 unwind label %207

202:                                              ; preds = %200
  store i32 %201, ptr %34, align 4, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #11
  store i32 0, ptr %35, align 4, !tbaa !27
  br label %203

203:                                              ; preds = %226, %202
  %204 = load i32, ptr %35, align 4, !tbaa !27
  %205 = icmp slt i32 %204, 4
  br i1 %205, label %211, label %206

206:                                              ; preds = %203
  store i32 17, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #11
  br label %229

207:                                              ; preds = %200
  %208 = landingpad { ptr, i32 }
          cleanup
  %209 = extractvalue { ptr, i32 } %208, 0
  store ptr %209, ptr %21, align 8
  %210 = extractvalue { ptr, i32 } %208, 1
  store i32 %210, ptr %22, align 4
  br label %237

211:                                              ; preds = %203
  %212 = load i32, ptr %34, align 4, !tbaa !27
  %213 = load i32, ptr %35, align 4, !tbaa !27
  %214 = sext i32 %213 to i64
  %215 = getelementptr inbounds [4 x i32], ptr %17, i64 0, i64 %214
  %216 = load i32, ptr %215, align 4, !tbaa !27
  %217 = icmp eq i32 %212, %216
  br i1 %217, label %218, label %225

218:                                              ; preds = %211
  %219 = invoke noundef i32 @_Z7RandIntii(i32 noundef 0, i32 noundef 3)
          to label %220 unwind label %221

220:                                              ; preds = %218
  store i32 %219, ptr %34, align 4, !tbaa !27
  store i32 -1, ptr %35, align 4, !tbaa !27
  br label %225

221:                                              ; preds = %218
  %222 = landingpad { ptr, i32 }
          cleanup
  %223 = extractvalue { ptr, i32 } %222, 0
  store ptr %223, ptr %21, align 8
  %224 = extractvalue { ptr, i32 } %222, 1
  store i32 %224, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #11
  br label %237

225:                                              ; preds = %220, %211
  br label %226

226:                                              ; preds = %225
  %227 = load i32, ptr %35, align 4, !tbaa !27
  %228 = add nsw i32 %227, 1
  store i32 %228, ptr %35, align 4, !tbaa !27
  br label %203, !llvm.loop !43

229:                                              ; preds = %206
  %230 = load i32, ptr %34, align 4, !tbaa !27
  %231 = load i32, ptr %33, align 4, !tbaa !27
  %232 = sext i32 %231 to i64
  %233 = getelementptr inbounds [4 x i32], ptr %17, i64 0, i64 %232
  store i32 %230, ptr %233, align 4, !tbaa !27
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #11
  br label %234

234:                                              ; preds = %229
  %235 = load i32, ptr %33, align 4, !tbaa !27
  %236 = add nsw i32 %235, 1
  store i32 %236, ptr %33, align 4, !tbaa !27
  br label %196, !llvm.loop !44

237:                                              ; preds = %221, %207
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #11
  br label %447

238:                                              ; preds = %199
  call void @_ZNSt6vectorIdSaIdEE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %6) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #11
  store i32 0, ptr %36, align 4, !tbaa !27
  br label %239

239:                                              ; preds = %429, %238
  %240 = load i32, ptr %36, align 4, !tbaa !27
  %241 = getelementptr inbounds %class.Cga, ptr %53, i32 0, i32 10
  %242 = load i32, ptr %241, align 4, !tbaa !38
  %243 = icmp slt i32 %240, %242
  br i1 %243, label %245, label %244

244:                                              ; preds = %239
  store i32 20, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #11
  br label %433

245:                                              ; preds = %239
  store double 0.000000e+00, ptr %13, align 8, !tbaa !28
  store i32 0, ptr %14, align 4, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #11
  store i32 0, ptr %37, align 4, !tbaa !27
  br label %246

246:                                              ; preds = %341, %245
  %247 = load i32, ptr %37, align 4, !tbaa !27
  %248 = icmp slt i32 %247, 4
  br i1 %248, label %250, label %249

249:                                              ; preds = %246
  store i32 23, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #11
  br label %345

250:                                              ; preds = %246
  call void @_ZNSt6vectorIdSaIdEE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %4) #11
  call void @_ZNSt6vectorIdSaIdEE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %5) #11
  %251 = getelementptr inbounds [2 x [4 x double]], ptr %18, i64 0, i64 0
  %252 = load i32, ptr %37, align 4, !tbaa !27
  %253 = sext i32 %252 to i64
  %254 = getelementptr inbounds [4 x i32], ptr %17, i64 0, i64 %253
  %255 = load i32, ptr %254, align 4, !tbaa !27
  %256 = sext i32 %255 to i64
  %257 = getelementptr inbounds [4 x double], ptr %251, i64 0, i64 %256
  %258 = load double, ptr %257, align 8, !tbaa !28
  store double %258, ptr %9, align 8, !tbaa !28
  %259 = getelementptr inbounds [2 x [4 x double]], ptr %18, i64 0, i64 1
  %260 = load i32, ptr %37, align 4, !tbaa !27
  %261 = sext i32 %260 to i64
  %262 = getelementptr inbounds [4 x i32], ptr %17, i64 0, i64 %261
  %263 = load i32, ptr %262, align 4, !tbaa !27
  %264 = sext i32 %263 to i64
  %265 = getelementptr inbounds [4 x double], ptr %259, i64 0, i64 %264
  %266 = load double, ptr %265, align 8, !tbaa !28
  store double %266, ptr %10, align 8, !tbaa !28
  invoke void @_ZNSt6vectorIdSaIdEE9push_backERKd(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %9)
          to label %267 unwind label %285

267:                                              ; preds = %250
  invoke void @_ZNSt6vectorIdSaIdEE9push_backERKd(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %10)
          to label %268 unwind label %285

268:                                              ; preds = %267
  call void @llvm.lifetime.start.p0(i64 24, ptr %38) #11
  %269 = load i32, ptr %36, align 4, !tbaa !27
  %270 = sext i32 %269 to i64
  %271 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP10CNeuralNetSaIS1_EE2atEm(ptr noundef nonnull align 8 dereferenceable(24) %3, i64 noundef %270)
          to label %272 unwind label %289

272:                                              ; preds = %268
  %273 = load ptr, ptr %271, align 8, !tbaa !5
  invoke void @_ZN10CNeuralNet6UpdateERKSt6vectorIdSaIdEENS_8run_typeE(ptr dead_on_unwind writable sret(%"class.std::vector.35") align 8 %38, ptr noundef nonnull align 8 dereferenceable(72) %273, ptr noundef nonnull align 8 dereferenceable(24) %4, i32 noundef 1)
          to label %274 unwind label %289

274:                                              ; preds = %272
  %275 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIdSaIdEEaSEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(24) %38) #11
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %38) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %38) #11
  %276 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEE2atEm(ptr noundef nonnull align 8 dereferenceable(24) %5, i64 noundef 0)
          to label %277 unwind label %285

277:                                              ; preds = %274
  %278 = load double, ptr %276, align 8, !tbaa !28
  store double %278, ptr %11, align 8, !tbaa !28
  %279 = load double, ptr %9, align 8, !tbaa !28
  %280 = fcmp oeq double %279, 0.000000e+00
  br i1 %280, label %281, label %293

281:                                              ; preds = %277
  %282 = load double, ptr %10, align 8, !tbaa !28
  %283 = fcmp oeq double %282, 0.000000e+00
  br i1 %283, label %284, label %293

284:                                              ; preds = %281
  store double 0.000000e+00, ptr %12, align 8, !tbaa !28
  br label %317

285:                                              ; preds = %274, %267, %250
  %286 = landingpad { ptr, i32 }
          cleanup
  %287 = extractvalue { ptr, i32 } %286, 0
  store ptr %287, ptr %21, align 8
  %288 = extractvalue { ptr, i32 } %286, 1
  store i32 %288, ptr %22, align 4
  br label %344

289:                                              ; preds = %272, %268
  %290 = landingpad { ptr, i32 }
          cleanup
  %291 = extractvalue { ptr, i32 } %290, 0
  store ptr %291, ptr %21, align 8
  %292 = extractvalue { ptr, i32 } %290, 1
  store i32 %292, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 24, ptr %38) #11
  br label %344

293:                                              ; preds = %281, %277
  %294 = load double, ptr %9, align 8, !tbaa !28
  %295 = fcmp oeq double %294, 1.000000e+00
  br i1 %295, label %296, label %300

296:                                              ; preds = %293
  %297 = load double, ptr %10, align 8, !tbaa !28
  %298 = fcmp oeq double %297, 0.000000e+00
  br i1 %298, label %299, label %300

299:                                              ; preds = %296
  store double 1.000000e+00, ptr %12, align 8, !tbaa !28
  br label %316

300:                                              ; preds = %296, %293
  %301 = load double, ptr %9, align 8, !tbaa !28
  %302 = fcmp oeq double %301, 0.000000e+00
  br i1 %302, label %303, label %307

303:                                              ; preds = %300
  %304 = load double, ptr %10, align 8, !tbaa !28
  %305 = fcmp oeq double %304, 1.000000e+00
  br i1 %305, label %306, label %307

306:                                              ; preds = %303
  store double 1.000000e+00, ptr %12, align 8, !tbaa !28
  br label %315

307:                                              ; preds = %303, %300
  %308 = load double, ptr %9, align 8, !tbaa !28
  %309 = fcmp oeq double %308, 1.000000e+00
  br i1 %309, label %310, label %314

310:                                              ; preds = %307
  %311 = load double, ptr %10, align 8, !tbaa !28
  %312 = fcmp oeq double %311, 1.000000e+00
  br i1 %312, label %313, label %314

313:                                              ; preds = %310
  store double 0.000000e+00, ptr %12, align 8, !tbaa !28
  br label %314

314:                                              ; preds = %313, %310, %307
  br label %315

315:                                              ; preds = %314, %306
  br label %316

316:                                              ; preds = %315, %299
  br label %317

317:                                              ; preds = %316, %284
  %318 = load double, ptr %11, align 8, !tbaa !28
  %319 = fcmp oge double %318, 5.000000e-01
  br i1 %319, label %320, label %327

320:                                              ; preds = %317
  %321 = load double, ptr %12, align 8, !tbaa !28
  %322 = fcmp oeq double %321, 1.000000e+00
  br i1 %322, label %323, label %326

323:                                              ; preds = %320
  %324 = load i32, ptr %14, align 4, !tbaa !27
  %325 = add nsw i32 %324, 1
  store i32 %325, ptr %14, align 4, !tbaa !27
  br label %326

326:                                              ; preds = %323, %320
  br label %334

327:                                              ; preds = %317
  %328 = load double, ptr %12, align 8, !tbaa !28
  %329 = fcmp oeq double %328, 0.000000e+00
  br i1 %329, label %330, label %333

330:                                              ; preds = %327
  %331 = load i32, ptr %14, align 4, !tbaa !27
  %332 = add nsw i32 %331, 1
  store i32 %332, ptr %14, align 4, !tbaa !27
  br label %333

333:                                              ; preds = %330, %327
  br label %334

334:                                              ; preds = %333, %326
  %335 = load double, ptr %12, align 8, !tbaa !28
  %336 = load double, ptr %11, align 8, !tbaa !28
  %337 = fsub double %335, %336
  %338 = call double @llvm.fabs.f64(double %337)
  %339 = load double, ptr %13, align 8, !tbaa !28
  %340 = fadd double %339, %338
  store double %340, ptr %13, align 8, !tbaa !28
  br label %341

341:                                              ; preds = %334
  %342 = load i32, ptr %37, align 4, !tbaa !27
  %343 = add nsw i32 %342, 1
  store i32 %343, ptr %37, align 4, !tbaa !27
  br label %246, !llvm.loop !45

344:                                              ; preds = %289, %285
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #11
  br label %432

345:                                              ; preds = %249
  %346 = load i32, ptr %14, align 4, !tbaa !27
  %347 = icmp eq i32 %346, 4
  br i1 %347, label %348, label %422

348:                                              ; preds = %345
  %349 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.35)
          to label %350 unwind label %397

350:                                              ; preds = %348
  %351 = load i32, ptr %31, align 4, !tbaa !27
  %352 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %349, i32 noundef %351)
          to label %353 unwind label %397

353:                                              ; preds = %350
  %354 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %352, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %355 unwind label %397

355:                                              ; preds = %353
  %356 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.36)
          to label %357 unwind label %397

357:                                              ; preds = %355
  %358 = load i32, ptr %36, align 4, !tbaa !27
  %359 = sext i32 %358 to i64
  %360 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP10CNeuralNetSaIS1_EE2atEm(ptr noundef nonnull align 8 dereferenceable(24) %3, i64 noundef %359)
          to label %361 unwind label %397

361:                                              ; preds = %357
  %362 = load ptr, ptr %360, align 8, !tbaa !5
  %363 = invoke noundef i32 @_ZN10CNeuralNet22getNumberOfHiddenNodesEv(ptr noundef nonnull align 8 dereferenceable(72) %362)
          to label %364 unwind label %397

364:                                              ; preds = %361
  %365 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %356, i32 noundef %363)
          to label %366 unwind label %397

366:                                              ; preds = %364
  %367 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %365, ptr noundef @.str.37)
          to label %368 unwind label %397

368:                                              ; preds = %366
  %369 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %367, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %370 unwind label %397

370:                                              ; preds = %368
  %371 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %372 unwind label %397

372:                                              ; preds = %370
  %373 = load i32, ptr %16, align 4, !tbaa !27
  %374 = add nsw i32 %373, 1
  store i32 %374, ptr %16, align 4, !tbaa !27
  invoke void @_ZNSt6vectorIiSaIiEE9push_backERKi(ptr noundef nonnull align 8 dereferenceable(24) %7, ptr noundef nonnull align 4 dereferenceable(4) %31)
          to label %375 unwind label %397

375:                                              ; preds = %372
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #11
  %376 = load i32, ptr %36, align 4, !tbaa !27
  %377 = sext i32 %376 to i64
  %378 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP10CNeuralNetSaIS1_EE2atEm(ptr noundef nonnull align 8 dereferenceable(24) %3, i64 noundef %377)
          to label %379 unwind label %401

379:                                              ; preds = %375
  %380 = load ptr, ptr %378, align 8, !tbaa !5
  %381 = invoke noundef i32 @_ZN10CNeuralNet22getNumberOfHiddenNodesEv(ptr noundef nonnull align 8 dereferenceable(72) %380)
          to label %382 unwind label %401

382:                                              ; preds = %379
  store i32 %381, ptr %39, align 4, !tbaa !27
  invoke void @_ZNSt6vectorIiSaIiEE9push_backEOi(ptr noundef nonnull align 8 dereferenceable(24) %8, ptr noundef nonnull align 4 dereferenceable(4) %39)
          to label %383 unwind label %401

383:                                              ; preds = %382
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #11
  %384 = load i32, ptr %36, align 4, !tbaa !27
  %385 = sext i32 %384 to i64
  %386 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP10CNeuralNetSaIS1_EE2atEm(ptr noundef nonnull align 8 dereferenceable(24) %3, i64 noundef %385)
          to label %387 unwind label %397

387:                                              ; preds = %383
  %388 = load ptr, ptr %386, align 8, !tbaa !5
  %389 = invoke noundef i32 @_ZN10CNeuralNet22getNumberOfHiddenNodesEv(ptr noundef nonnull align 8 dereferenceable(72) %388)
          to label %390 unwind label %397

390:                                              ; preds = %387
  %391 = icmp eq i32 %389, 0
  br i1 %391, label %392, label %405

392:                                              ; preds = %390
  %393 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.38)
          to label %394 unwind label %397

394:                                              ; preds = %392
  %395 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %393, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %396 unwind label %397

396:                                              ; preds = %394
  call void @exit(i32 noundef 1) #14
  unreachable

397:                                              ; preds = %422, %416, %414, %409, %405, %394, %392, %387, %383, %372, %370, %368, %366, %364, %361, %357, %355, %353, %350, %348
  %398 = landingpad { ptr, i32 }
          cleanup
  %399 = extractvalue { ptr, i32 } %398, 0
  store ptr %399, ptr %21, align 8
  %400 = extractvalue { ptr, i32 } %398, 1
  store i32 %400, ptr %22, align 4
  br label %432

401:                                              ; preds = %382, %379, %375
  %402 = landingpad { ptr, i32 }
          cleanup
  %403 = extractvalue { ptr, i32 } %402, 0
  store ptr %403, ptr %21, align 8
  %404 = extractvalue { ptr, i32 } %402, 1
  store i32 %404, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #11
  br label %432

405:                                              ; preds = %390
  %406 = load i32, ptr %36, align 4, !tbaa !27
  %407 = sext i32 %406 to i64
  %408 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP10CNeuralNetSaIS1_EE2atEm(ptr noundef nonnull align 8 dereferenceable(24) %3, i64 noundef %407)
          to label %409 unwind label %397

409:                                              ; preds = %405
  %410 = load ptr, ptr %408, align 8, !tbaa !5
  %411 = invoke noundef i32 @_ZN10CNeuralNet31getNumberOfRecurrentConnectionsEv(ptr noundef nonnull align 8 dereferenceable(72) %410)
          to label %412 unwind label %397

412:                                              ; preds = %409
  %413 = icmp sgt i32 %411, 0
  br i1 %413, label %414, label %419

414:                                              ; preds = %412
  %415 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.39)
          to label %416 unwind label %397

416:                                              ; preds = %414
  %417 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %415, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %418 unwind label %397

418:                                              ; preds = %416
  call void @exit(i32 noundef 1) #14
  unreachable

419:                                              ; preds = %412
  store i8 1, ptr %15, align 1, !tbaa !37
  store i32 500, ptr %31, align 4, !tbaa !27
  %420 = getelementptr inbounds %class.Cga, ptr %53, i32 0, i32 10
  %421 = load i32, ptr %420, align 4, !tbaa !38
  store i32 %421, ptr %36, align 4, !tbaa !27
  br label %422

422:                                              ; preds = %419, %345
  %423 = load double, ptr %13, align 8, !tbaa !28
  %424 = fsub double 4.000000e+00, %423
  store double %424, ptr %13, align 8, !tbaa !28
  %425 = load double, ptr %13, align 8, !tbaa !28
  %426 = load double, ptr %13, align 8, !tbaa !28
  %427 = fmul double %425, %426
  store double %427, ptr %13, align 8, !tbaa !28
  invoke void @_ZNSt6vectorIdSaIdEE9push_backERKd(ptr noundef nonnull align 8 dereferenceable(24) %6, ptr noundef nonnull align 8 dereferenceable(8) %13)
          to label %428 unwind label %397

428:                                              ; preds = %422
  br label %429

429:                                              ; preds = %428
  %430 = load i32, ptr %36, align 4, !tbaa !27
  %431 = add nsw i32 %430, 1
  store i32 %431, ptr %36, align 4, !tbaa !27
  br label %239, !llvm.loop !46

432:                                              ; preds = %401, %397, %344
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #11
  br label %447

433:                                              ; preds = %244
  %434 = load i8, ptr %15, align 1, !tbaa !37, !range !47, !noundef !48
  %435 = trunc i8 %434 to i1
  br i1 %435, label %443, label %436

436:                                              ; preds = %433
  call void @llvm.lifetime.start.p0(i64 24, ptr %40) #11
  invoke void @_ZN3Cga5EpochERKSt6vectorIdSaIdEE(ptr dead_on_unwind writable sret(%"class.std::vector.25") align 8 %40, ptr noundef nonnull align 8 dereferenceable(265) %53, ptr noundef nonnull align 8 dereferenceable(24) %6)
          to label %437 unwind label %439

437:                                              ; preds = %436
  %438 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIP10CNeuralNetSaIS1_EEaSEOS3_(ptr noundef nonnull align 8 dereferenceable(24) %3, ptr noundef nonnull align 8 dereferenceable(24) %40) #11
  call void @_ZNSt6vectorIP10CNeuralNetSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %40) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %40) #11
  br label %443

439:                                              ; preds = %436
  %440 = landingpad { ptr, i32 }
          cleanup
  %441 = extractvalue { ptr, i32 } %440, 0
  store ptr %441, ptr %21, align 8
  %442 = extractvalue { ptr, i32 } %440, 1
  store i32 %442, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 24, ptr %40) #11
  br label %447

443:                                              ; preds = %437, %433
  br label %444

444:                                              ; preds = %443
  %445 = load i32, ptr %31, align 4, !tbaa !27
  %446 = add nsw i32 %445, 1
  store i32 %446, ptr %31, align 4, !tbaa !27
  br label %146, !llvm.loop !49

447:                                              ; preds = %439, %432, %237
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #11
  br label %452

448:                                              ; preds = %149
  call void @_ZN7CGenomeD1Ev(ptr noundef nonnull align 8 dereferenceable(108) %25) #11
  call void @llvm.lifetime.end.p0(i64 112, ptr %25) #11
  br label %449

449:                                              ; preds = %448
  %450 = load i32, ptr %19, align 4, !tbaa !27
  %451 = add nsw i32 %450, 1
  store i32 %451, ptr %19, align 4, !tbaa !27
  br label %71, !llvm.loop !50

452:                                              ; preds = %447, %179, %175, %174, %154
  call void @_ZN7CGenomeD1Ev(ptr noundef nonnull align 8 dereferenceable(108) %25) #11
  br label %453

453:                                              ; preds = %452, %150
  call void @llvm.lifetime.end.p0(i64 112, ptr %25) #11
  br label %454

454:                                              ; preds = %453, %131, %109
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #11
  br label %641

455:                                              ; preds = %74
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #11
  store float 0.000000e+00, ptr %41, align 4, !tbaa !51
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #11
  store float 0.000000e+00, ptr %42, align 4, !tbaa !51
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #11
  store i32 0, ptr %43, align 4, !tbaa !27
  br label %456

456:                                              ; preds = %471, %455
  %457 = load i32, ptr %43, align 4, !tbaa !27
  %458 = sext i32 %457 to i64
  %459 = call noundef i64 @_ZNKSt6vectorIiSaIiEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %7) #11
  %460 = icmp ult i64 %458, %459
  br i1 %460, label %462, label %461

461:                                              ; preds = %456
  store i32 26, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #11
  br label %478

462:                                              ; preds = %456
  %463 = load i32, ptr %43, align 4, !tbaa !27
  %464 = sext i32 %463 to i64
  %465 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEE2atEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %464)
          to label %466 unwind label %474

466:                                              ; preds = %462
  %467 = load i32, ptr %465, align 4, !tbaa !27
  %468 = sitofp i32 %467 to float
  %469 = load float, ptr %41, align 4, !tbaa !51
  %470 = fadd float %469, %468
  store float %470, ptr %41, align 4, !tbaa !51
  br label %471

471:                                              ; preds = %466
  %472 = load i32, ptr %43, align 4, !tbaa !27
  %473 = add nsw i32 %472, 1
  store i32 %473, ptr %43, align 4, !tbaa !27
  br label %456, !llvm.loop !53

474:                                              ; preds = %462
  %475 = landingpad { ptr, i32 }
          cleanup
  %476 = extractvalue { ptr, i32 } %475, 0
  store ptr %476, ptr %21, align 8
  %477 = extractvalue { ptr, i32 } %475, 1
  store i32 %477, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #11
  br label %640

478:                                              ; preds = %461
  %479 = load i32, ptr %16, align 4, !tbaa !27
  %480 = sitofp i32 %479 to float
  %481 = load float, ptr %41, align 4, !tbaa !51
  %482 = fdiv float %481, %480
  store float %482, ptr %41, align 4, !tbaa !51
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #11
  store i32 0, ptr %44, align 4, !tbaa !27
  br label %483

483:                                              ; preds = %498, %478
  %484 = load i32, ptr %44, align 4, !tbaa !27
  %485 = sext i32 %484 to i64
  %486 = call noundef i64 @_ZNKSt6vectorIiSaIiEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %8) #11
  %487 = icmp ult i64 %485, %486
  br i1 %487, label %489, label %488

488:                                              ; preds = %483
  store i32 29, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #11
  br label %505

489:                                              ; preds = %483
  %490 = load i32, ptr %44, align 4, !tbaa !27
  %491 = sext i32 %490 to i64
  %492 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEE2atEm(ptr noundef nonnull align 8 dereferenceable(24) %8, i64 noundef %491)
          to label %493 unwind label %501

493:                                              ; preds = %489
  %494 = load i32, ptr %492, align 4, !tbaa !27
  %495 = sitofp i32 %494 to float
  %496 = load float, ptr %42, align 4, !tbaa !51
  %497 = fadd float %496, %495
  store float %497, ptr %42, align 4, !tbaa !51
  br label %498

498:                                              ; preds = %493
  %499 = load i32, ptr %44, align 4, !tbaa !27
  %500 = add nsw i32 %499, 1
  store i32 %500, ptr %44, align 4, !tbaa !27
  br label %483, !llvm.loop !54

501:                                              ; preds = %489
  %502 = landingpad { ptr, i32 }
          cleanup
  %503 = extractvalue { ptr, i32 } %502, 0
  store ptr %503, ptr %21, align 8
  %504 = extractvalue { ptr, i32 } %502, 1
  store i32 %504, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #11
  br label %640

505:                                              ; preds = %488
  %506 = load i32, ptr %16, align 4, !tbaa !27
  %507 = sitofp i32 %506 to float
  %508 = load float, ptr %42, align 4, !tbaa !51
  %509 = fdiv float %508, %507
  store float %509, ptr %42, align 4, !tbaa !51
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #11
  store float 0.000000e+00, ptr %45, align 4, !tbaa !51
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #11
  store float 0.000000e+00, ptr %46, align 4, !tbaa !51
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #11
  store i32 0, ptr %47, align 4, !tbaa !27
  br label %510

510:                                              ; preds = %529, %505
  %511 = load i32, ptr %47, align 4, !tbaa !27
  %512 = sext i32 %511 to i64
  %513 = call noundef i64 @_ZNKSt6vectorIiSaIiEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %7) #11
  %514 = icmp ult i64 %512, %513
  br i1 %514, label %516, label %515

515:                                              ; preds = %510
  store i32 32, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #11
  br label %536

516:                                              ; preds = %510
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #11
  %517 = load i32, ptr %47, align 4, !tbaa !27
  %518 = sext i32 %517 to i64
  %519 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEE2atEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %518)
          to label %520 unwind label %532

520:                                              ; preds = %516
  %521 = load i32, ptr %519, align 4, !tbaa !27
  %522 = sitofp i32 %521 to float
  %523 = load float, ptr %41, align 4, !tbaa !51
  %524 = fsub float %522, %523
  store float %524, ptr %48, align 4, !tbaa !51
  %525 = load float, ptr %48, align 4, !tbaa !51
  %526 = load float, ptr %48, align 4, !tbaa !51
  %527 = load float, ptr %45, align 4, !tbaa !51
  %528 = call float @llvm.fmuladd.f32(float %525, float %526, float %527)
  store float %528, ptr %45, align 4, !tbaa !51
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #11
  br label %529

529:                                              ; preds = %520
  %530 = load i32, ptr %47, align 4, !tbaa !27
  %531 = add nsw i32 %530, 1
  store i32 %531, ptr %47, align 4, !tbaa !27
  br label %510, !llvm.loop !55

532:                                              ; preds = %516
  %533 = landingpad { ptr, i32 }
          cleanup
  %534 = extractvalue { ptr, i32 } %533, 0
  store ptr %534, ptr %21, align 8
  %535 = extractvalue { ptr, i32 } %533, 1
  store i32 %535, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #11
  br label %639

536:                                              ; preds = %515
  %537 = load float, ptr %45, align 4, !tbaa !51
  %538 = call noundef i64 @_ZNKSt6vectorIiSaIiEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %7) #11
  %539 = sub i64 %538, 1
  %540 = uitofp i64 %539 to float
  %541 = fdiv float %537, %540
  %542 = invoke noundef float @_ZSt4sqrtf(float noundef %541)
          to label %543 unwind label %550

543:                                              ; preds = %536
  store float %542, ptr %46, align 4, !tbaa !51
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #11
  store float 0.000000e+00, ptr %49, align 4, !tbaa !51
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #11
  store float 0.000000e+00, ptr %50, align 4, !tbaa !51
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #11
  store i32 0, ptr %51, align 4, !tbaa !27
  br label %544

544:                                              ; preds = %567, %543
  %545 = load i32, ptr %51, align 4, !tbaa !27
  %546 = sext i32 %545 to i64
  %547 = call noundef i64 @_ZNKSt6vectorIiSaIiEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %8) #11
  %548 = icmp ult i64 %546, %547
  br i1 %548, label %554, label %549

549:                                              ; preds = %544
  store i32 35, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #11
  br label %574

550:                                              ; preds = %536
  %551 = landingpad { ptr, i32 }
          cleanup
  %552 = extractvalue { ptr, i32 } %551, 0
  store ptr %552, ptr %21, align 8
  %553 = extractvalue { ptr, i32 } %551, 1
  store i32 %553, ptr %22, align 4
  br label %639

554:                                              ; preds = %544
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #11
  %555 = load i32, ptr %51, align 4, !tbaa !27
  %556 = sext i32 %555 to i64
  %557 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEE2atEm(ptr noundef nonnull align 8 dereferenceable(24) %8, i64 noundef %556)
          to label %558 unwind label %570

558:                                              ; preds = %554
  %559 = load i32, ptr %557, align 4, !tbaa !27
  %560 = sitofp i32 %559 to float
  %561 = load float, ptr %42, align 4, !tbaa !51
  %562 = fsub float %560, %561
  store float %562, ptr %52, align 4, !tbaa !51
  %563 = load float, ptr %52, align 4, !tbaa !51
  %564 = load float, ptr %52, align 4, !tbaa !51
  %565 = load float, ptr %49, align 4, !tbaa !51
  %566 = call float @llvm.fmuladd.f32(float %563, float %564, float %565)
  store float %566, ptr %49, align 4, !tbaa !51
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #11
  br label %567

567:                                              ; preds = %558
  %568 = load i32, ptr %51, align 4, !tbaa !27
  %569 = add nsw i32 %568, 1
  store i32 %569, ptr %51, align 4, !tbaa !27
  br label %544, !llvm.loop !56

570:                                              ; preds = %554
  %571 = landingpad { ptr, i32 }
          cleanup
  %572 = extractvalue { ptr, i32 } %571, 0
  store ptr %572, ptr %21, align 8
  %573 = extractvalue { ptr, i32 } %571, 1
  store i32 %573, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #11
  br label %638

574:                                              ; preds = %549
  %575 = load float, ptr %49, align 4, !tbaa !51
  %576 = call noundef i64 @_ZNKSt6vectorIiSaIiEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %8) #11
  %577 = sub i64 %576, 1
  %578 = uitofp i64 %577 to float
  %579 = fdiv float %575, %578
  %580 = invoke noundef float @_ZSt4sqrtf(float noundef %579)
          to label %581 unwind label %634

581:                                              ; preds = %574
  store float %580, ptr %50, align 4, !tbaa !51
  %582 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.40)
          to label %583 unwind label %634

583:                                              ; preds = %581
  %584 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %582, i32 noundef 100)
          to label %585 unwind label %634

585:                                              ; preds = %583
  %586 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %584, ptr noundef @.str.41)
          to label %587 unwind label %634

587:                                              ; preds = %585
  %588 = load i32, ptr %16, align 4, !tbaa !27
  %589 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %586, i32 noundef %588)
          to label %590 unwind label %634

590:                                              ; preds = %587
  %591 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %589, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %592 unwind label %634

592:                                              ; preds = %590
  %593 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.42)
          to label %594 unwind label %634

594:                                              ; preds = %592
  %595 = load i32, ptr %16, align 4, !tbaa !27
  %596 = sitofp i32 %595 to float
  %597 = fdiv float %596, 1.000000e+02
  %598 = fpext float %597 to double
  %599 = fmul double 1.000000e+02, %598
  %600 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %593, double noundef %599)
          to label %601 unwind label %634

601:                                              ; preds = %594
  %602 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %600, ptr noundef @.str.43)
          to label %603 unwind label %634

603:                                              ; preds = %601
  %604 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %602, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %605 unwind label %634

605:                                              ; preds = %603
  %606 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.44)
          to label %607 unwind label %634

607:                                              ; preds = %605
  %608 = load float, ptr %41, align 4, !tbaa !51
  %609 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEf(ptr noundef nonnull align 8 dereferenceable(8) %606, float noundef %608)
          to label %610 unwind label %634

610:                                              ; preds = %607
  %611 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %609, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %612 unwind label %634

612:                                              ; preds = %610
  %613 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.45)
          to label %614 unwind label %634

614:                                              ; preds = %612
  %615 = load float, ptr %46, align 4, !tbaa !51
  %616 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEf(ptr noundef nonnull align 8 dereferenceable(8) %613, float noundef %615)
          to label %617 unwind label %634

617:                                              ; preds = %614
  %618 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %616, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %619 unwind label %634

619:                                              ; preds = %617
  %620 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.46)
          to label %621 unwind label %634

621:                                              ; preds = %619
  %622 = load float, ptr %42, align 4, !tbaa !51
  %623 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEf(ptr noundef nonnull align 8 dereferenceable(8) %620, float noundef %622)
          to label %624 unwind label %634

624:                                              ; preds = %621
  %625 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %623, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %626 unwind label %634

626:                                              ; preds = %624
  %627 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.47)
          to label %628 unwind label %634

628:                                              ; preds = %626
  %629 = load float, ptr %50, align 4, !tbaa !51
  %630 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEf(ptr noundef nonnull align 8 dereferenceable(8) %627, float noundef %629)
          to label %631 unwind label %634

631:                                              ; preds = %628
  %632 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %630, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %633 unwind label %634

633:                                              ; preds = %631
  call void @exit(i32 noundef 0) #14
  unreachable

634:                                              ; preds = %631, %628, %626, %624, %621, %619, %617, %614, %612, %610, %607, %605, %603, %601, %594, %592, %590, %587, %585, %583, %581, %574
  %635 = landingpad { ptr, i32 }
          cleanup
  %636 = extractvalue { ptr, i32 } %635, 0
  store ptr %636, ptr %21, align 8
  %637 = extractvalue { ptr, i32 } %635, 1
  store i32 %637, ptr %22, align 4
  br label %638

638:                                              ; preds = %634, %570
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #11
  br label %639

639:                                              ; preds = %638, %550, %532
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #11
  br label %640

640:                                              ; preds = %639, %501, %474
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #11
  br label %641

641:                                              ; preds = %640, %454
  call void @llvm.lifetime.end.p0(i64 64, ptr %18) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %17) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %15) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #11
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %8) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %8) #11
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %7) #11
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %6) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %6) #11
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %5) #11
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %4) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %4) #11
  call void @_ZNSt6vectorIP10CNeuralNetSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %3) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %3) #11
  br label %642

642:                                              ; preds = %641
  %643 = load ptr, ptr %21, align 8
  %644 = load i32, ptr %22, align 4
  %645 = insertvalue { ptr, i32 } poison, ptr %643, 0
  %646 = insertvalue { ptr, i32 } %645, i32 %644, 1
  resume { ptr, i32 } %646
}

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

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

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

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

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

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

declare void @_ZN10CNeuralNet6UpdateERKSt6vectorIdSaIdEENS_8run_typeE(ptr dead_on_unwind writable sret(%"class.std::vector.35") align 8, ptr noundef nonnull align 8 dereferenceable(72), ptr noundef nonnull align 8 dereferenceable(24), i32 noundef) #2

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

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

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

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

declare noundef i32 @_ZN10CNeuralNet22getNumberOfHiddenNodesEv(ptr noundef nonnull align 8 dereferenceable(72)) #2

declare noundef i32 @_ZN10CNeuralNet31getNumberOfRecurrentConnectionsEv(ptr noundef nonnull align 8 dereferenceable(72)) #2

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZSt4sqrtf(float noundef) #9

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

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEf(ptr noundef nonnull align 8 dereferenceable(8), float noundef) #1 align 2

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { 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 #4 = { nobuiltin allocsize(0) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { 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 #6 = { nobuiltin nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { 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 #8 = { 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 #9 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #10 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #11 = { nounwind }
attributes #12 = { builtin allocsize(0) }
attributes #13 = { builtin nounwind }
attributes #14 = { 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, !25, i64 256}
!10 = !{!"_ZTS3Cga", !11, i64 0, !11, i64 24, !11, i64 48, !11, i64 72, !11, i64 96, !15, i64 120, !6, i64 144, !19, i64 152, !19, i64 156, !19, i64 160, !19, i64 164, !20, i64 168, !20, i64 176, !19, i64 184, !20, i64 192, !21, i64 200, !21, i64 224, !20, i64 248, !25, i64 256, !25, i64 257, !26, i64 260, !25, i64 264}
!11 = !{!"_ZTSSt6vectorI7CGenomeSaIS0_EE", !12, i64 0}
!12 = !{!"_ZTSSt12_Vector_baseI7CGenomeSaIS0_EE", !13, i64 0}
!13 = !{!"_ZTSNSt12_Vector_baseI7CGenomeSaIS0_EE12_Vector_implE", !14, i64 0}
!14 = !{!"_ZTSNSt12_Vector_baseI7CGenomeSaIS0_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!15 = !{!"_ZTSSt6vectorI8CSpeciesSaIS0_EE", !16, i64 0}
!16 = !{!"_ZTSSt12_Vector_baseI8CSpeciesSaIS0_EE", !17, i64 0}
!17 = !{!"_ZTSNSt12_Vector_baseI8CSpeciesSaIS0_EE12_Vector_implE", !18, i64 0}
!18 = !{!"_ZTSNSt12_Vector_baseI8CSpeciesSaIS0_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!19 = !{!"int", !7, i64 0}
!20 = !{!"double", !7, i64 0}
!21 = !{!"_ZTSSt6vectorI10SplitDepthSaIS0_EE", !22, i64 0}
!22 = !{!"_ZTSSt12_Vector_baseI10SplitDepthSaIS0_EE", !23, i64 0}
!23 = !{!"_ZTSNSt12_Vector_baseI10SplitDepthSaIS0_EE12_Vector_implE", !24, i64 0}
!24 = !{!"_ZTSNSt12_Vector_baseI10SplitDepthSaIS0_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!25 = !{!"bool", !7, i64 0}
!26 = !{!"_ZTS13UnderFlowMode", !7, i64 0}
!27 = !{!19, !19, i64 0}
!28 = !{!20, !20, i64 0}
!29 = !{!10, !19, i64 152}
!30 = !{!10, !6, i64 144}
!31 = !{!10, !19, i64 156}
!32 = !{!10, !19, i64 160}
!33 = !{!10, !19, i64 184}
!34 = !{!10, !20, i64 192}
!35 = !{!10, !20, i64 168}
!36 = !{!10, !20, i64 176}
!37 = !{!25, !25, i64 0}
!38 = !{!10, !19, i64 164}
!39 = distinct !{!39, !40}
!40 = !{!"llvm.loop.mustprogress"}
!41 = !{!10, !20, i64 248}
!42 = distinct !{!42, !40}
!43 = distinct !{!43, !40}
!44 = distinct !{!44, !40}
!45 = distinct !{!45, !40}
!46 = distinct !{!46, !40}
!47 = !{i8 0, i8 2}
!48 = !{}
!49 = distinct !{!49, !40}
!50 = distinct !{!50, !40}
!51 = !{!52, !52, i64 0}
!52 = !{!"float", !7, i64 0}
!53 = distinct !{!53, !40}
!54 = distinct !{!54, !40}
!55 = distinct !{!55, !40}
!56 = distinct !{!56, !40}


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

%"class.std::basic_ostream" = type { ptr, %"class.std::basic_ios" }
%"class.std::basic_ios" = type { %"class.std::ios_base", ptr, i8, i8, ptr, ptr, ptr, ptr }
%"class.std::ios_base" = type { ptr, i64, i64, i32, i32, i32, ptr, %"struct.std::ios_base::_Words", [8 x %"struct.std::ios_base::_Words"], i32, ptr, %"class.std::locale" }
%"struct.std::ios_base::_Words" = type { ptr, i64 }
%"class.std::locale" = type { ptr }
%"class.std::vector.15" = type { %"struct.std::_Vector_base.16" }
%"struct.std::_Vector_base.16" = type { %"struct.std::_Vector_base<SLinkGene, std::allocator<SLinkGene>>::_Vector_impl" }
%"struct.std::_Vector_base<SLinkGene, std::allocator<SLinkGene>>::_Vector_impl" = type { %"struct.std::_Vector_base<SLinkGene, std::allocator<SLinkGene>>::_Vector_impl_data" }
%"struct.std::_Vector_base<SLinkGene, std::allocator<SLinkGene>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.10" = type { %"struct.std::_Vector_base.11" }
%"struct.std::_Vector_base.11" = type { %"struct.std::_Vector_base<SNeuronGene, std::allocator<SNeuronGene>>::_Vector_impl" }
%"struct.std::_Vector_base<SNeuronGene, std::allocator<SNeuronGene>>::_Vector_impl" = type { %"struct.std::_Vector_base<SNeuronGene, std::allocator<SNeuronGene>>::_Vector_impl_data" }
%"struct.std::_Vector_base<SNeuronGene, std::allocator<SNeuronGene>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.5" = type { %"struct.std::_Vector_base.6" }
%"struct.std::_Vector_base.6" = type { %"struct.std::_Vector_base<SplitDepth, std::allocator<SplitDepth>>::_Vector_impl" }
%"struct.std::_Vector_base<SplitDepth, std::allocator<SplitDepth>>::_Vector_impl" = type { %"struct.std::_Vector_base<SplitDepth, std::allocator<SplitDepth>>::_Vector_impl_data" }
%"struct.std::_Vector_base<SplitDepth, std::allocator<SplitDepth>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.25" = type { %"struct.std::_Vector_base.26" }
%"struct.std::_Vector_base.26" = type { %"struct.std::_Vector_base<CNeuralNet *, std::allocator<CNeuralNet *>>::_Vector_impl" }
%"struct.std::_Vector_base<CNeuralNet *, std::allocator<CNeuralNet *>>::_Vector_impl" = type { %"struct.std::_Vector_base<CNeuralNet *, std::allocator<CNeuralNet *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<CNeuralNet *, std::allocator<CNeuralNet *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.35" = type { %"struct.std::_Vector_base.36" }
%"struct.std::_Vector_base.36" = type { %"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl" }
%"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl" = type { %"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl_data" }
%"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.30" = type { %"struct.std::_Vector_base.31" }
%"struct.std::_Vector_base.31" = 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.CGenome = type <{ i32, [4 x i8], %"class.std::vector.10", %"class.std::vector.15", ptr, i32, [4 x i8], double, double, double, i32, i32, i32, [4 x i8] }>

@_ZSt4cout = external global %"class.std::basic_ostream", align 8
@.str.33 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [84 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [133 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.43 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.44 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.46 = external hidden unnamed_addr constant [45 x i8], align 1
@.str.47 = external hidden unnamed_addr constant [47 x i8], align 1

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

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

declare void @_ZN7CGenomeC1Eiii(ptr noundef nonnull align 8 dereferenceable(108), i32 noundef, i32 noundef, i32 noundef) unnamed_addr #2

declare i32 @__gxx_personality_v0(...)

; Function Attrs: nounwind
declare void @_ZN7CGenomeD1Ev(ptr noundef nonnull align 8 dereferenceable(108)) unnamed_addr #3

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK7CGenome5GenesEv(ptr dead_on_unwind noalias writable sret(%"class.std::vector.15") align 8, ptr noundef nonnull align 8 dereferenceable(108)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK7CGenome7NeuronsEv(ptr dead_on_unwind noalias writable sret(%"class.std::vector.10") align 8, ptr noundef nonnull align 8 dereferenceable(108)) local_unnamed_addr #1 align 2

declare void @_ZN11CInnovationC1ESt6vectorI9SLinkGeneSaIS1_EES0_I11SNeuronGeneSaIS4_EE(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef, ptr noundef) unnamed_addr #2

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3Cga5SplitEddi(ptr dead_on_unwind noalias writable sret(%"class.std::vector.5") align 8, ptr noundef nonnull align 8 dereferenceable(265), double noundef, double noundef, i32 noundef) local_unnamed_addr #1 align 2

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3Cga16CreatePhenotypesEv(ptr dead_on_unwind noalias writable sret(%"class.std::vector.25") align 8, ptr noundef nonnull align 8 dereferenceable(265)) local_unnamed_addr #1 align 2

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3Cga5EpochERKSt6vectorIdSaIdEE(ptr dead_on_unwind noalias writable sret(%"class.std::vector.25") align 8, ptr noundef nonnull align 8 dereferenceable(265), ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #1 align 2

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_(ptr noundef nonnull align 8 dereferenceable(8)) #7

; Function Attrs: noreturn nounwind
declare void @exit(i32 noundef) local_unnamed_addr #8

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_Z7RandIntii(i32 noundef, i32 noundef) local_unnamed_addr #9

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

declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8), i32 noundef) local_unnamed_addr #2

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

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

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

; Function Attrs: mustprogress noreturn uwtable
define dso_local void @_ZN3Cga17RunXorTestAndExitEv(ptr noundef nonnull align 8 dereferenceable(265) %0) local_unnamed_addr #10 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca %"class.std::vector.25", align 8
  %3 = alloca %"class.std::vector.35", align 8
  %4 = alloca %"class.std::vector.35", align 8
  %5 = alloca %"class.std::vector.35", align 8
  %6 = alloca %"class.std::vector.30", align 8
  %7 = alloca %"class.std::vector.30", align 8
  %8 = alloca double, align 8
  %9 = alloca double, align 8
  %10 = alloca double, align 8
  %11 = alloca [4 x i32], align 16
  %12 = alloca [2 x [4 x double]], align 16
  %13 = alloca %class.CGenome, align 8
  %14 = alloca %class.CGenome, align 8
  %15 = alloca %"class.std::vector.15", align 8
  %16 = alloca %"class.std::vector.10", align 8
  %17 = alloca %"class.std::vector.5", align 8
  %18 = alloca %"class.std::vector.25", align 8
  %19 = alloca i32, align 4
  %20 = alloca %"class.std::vector.35", align 8
  %21 = alloca i32, align 4
  %22 = alloca %"class.std::vector.25", align 8
  %23 = getelementptr inbounds i8, ptr %0, i64 256
  store i8 1, ptr %23, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %2) #13
  call void @_ZNSt6vectorIP10CNeuralNetSaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %2) #13
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %3) #13
  call void @_ZNSt6vectorIdSaIdEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %3) #13
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %4) #13
  call void @_ZNSt6vectorIdSaIdEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %4) #13
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5) #13
  call void @_ZNSt6vectorIdSaIdEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #13
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %6) #13
  call void @_ZNSt6vectorIiSaIiEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %6) #13
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %7) #13
  call void @_ZNSt6vectorIiSaIiEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #13
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %11) #13
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %12) #13
  %24 = getelementptr inbounds i8, ptr %12, i64 32
  store <2 x double> <double 0.000000e+00, double 1.000000e+00>, ptr %12, align 16, !tbaa !26
  store <2 x double> zeroinitializer, ptr %24, align 16, !tbaa !26
  %25 = getelementptr inbounds i8, ptr %12, i64 16
  %26 = getelementptr inbounds i8, ptr %12, i64 48
  store <2 x double> <double 0.000000e+00, double 1.000000e+00>, ptr %25, align 16, !tbaa !26
  store <2 x double> <double 1.000000e+00, double 1.000000e+00>, ptr %26, align 16, !tbaa !26
  %27 = getelementptr inbounds i8, ptr %0, i64 24
  %28 = getelementptr inbounds i8, ptr %0, i64 48
  %29 = getelementptr inbounds i8, ptr %0, i64 72
  %30 = getelementptr inbounds i8, ptr %0, i64 120
  %31 = getelementptr inbounds i8, ptr %0, i64 200
  %32 = getelementptr inbounds i8, ptr %0, i64 224
  %33 = getelementptr inbounds i8, ptr %0, i64 144
  %34 = getelementptr inbounds i8, ptr %0, i64 156
  %35 = getelementptr inbounds i8, ptr %0, i64 192
  %36 = getelementptr inbounds i8, ptr %0, i64 168
  %37 = getelementptr inbounds i8, ptr %0, i64 164
  %38 = getelementptr inbounds i8, ptr %0, i64 248
  %39 = getelementptr inbounds i8, ptr %11, i64 4
  %40 = getelementptr inbounds i8, ptr %11, i64 8
  %41 = getelementptr inbounds i8, ptr %11, i64 12
  br label %43

.preheader:                                       ; preds = %82
  %42 = call noundef i64 @_ZNKSt6vectorIiSaIiEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %6) #13
  %.not = icmp eq i64 %42, 0
  br i1 %.not, label %._crit_edge248, label %.lr.ph247

43:                                               ; preds = %1, %82
  %.0244 = phi double [ undef, %1 ], [ %.2.lcssa, %82 ]
  %.0119243 = phi i32 [ 0, %1 ], [ %46, %82 ]
  %.0120242 = phi i32 [ 0, %1 ], [ %.2122.lcssa, %82 ]
  %44 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.33)
          to label %45 unwind label %57

45:                                               ; preds = %43
  %46 = add nuw nsw i32 %.0119243, 1
  %47 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %44, i32 noundef %46)
          to label %48 unwind label %57

48:                                               ; preds = %45
  %49 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %47, ptr noundef nonnull @.str.34)
          to label %50 unwind label %57

50:                                               ; preds = %48
  %51 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %49, i32 noundef 100)
          to label %52 unwind label %57

52:                                               ; preds = %50
  %53 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %51, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %54 unwind label %57

54:                                               ; preds = %52
  call void @_ZNSt6vectorI7CGenomeSaIS0_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %0) #13
  call void @_ZNSt6vectorI7CGenomeSaIS0_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %27) #13
  call void @_ZNSt6vectorI7CGenomeSaIS0_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %28) #13
  call void @_ZNSt6vectorI7CGenomeSaIS0_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %29) #13
  call void @_ZNSt6vectorI8CSpeciesSaIS0_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %30) #13
  call void @_ZNSt6vectorI10SplitDepthSaIS0_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %31) #13
  call void @_ZNSt6vectorI10SplitDepthSaIS0_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %32) #13
  store double 0.000000e+00, ptr %35, align 8, !tbaa !27
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(20) %33, i8 0, i64 20, i1 false)
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(20) %36, i8 0, i64 20, i1 false)
  %55 = load i32, ptr %37, align 4, !tbaa !28
  %56 = icmp sgt i32 %55, 0
  br i1 %56, label %.lr.ph, label %._crit_edge

._crit_edge:                                      ; preds = %62, %54
  call void @llvm.lifetime.start.p0(i64 112, ptr nonnull %14) #13
  invoke void @_ZN7CGenomeC1Eiii(ptr noundef nonnull align 8 dereferenceable(108) %14, i32 noundef 1, i32 noundef 2, i32 noundef 1)
          to label %71 unwind label %83

57:                                               ; preds = %52, %50, %48, %45, %43
  %58 = landingpad { ptr, i32 }
          cleanup
  br label %492

.lr.ph:                                           ; preds = %54, %62
  %.0100222 = phi i32 [ %63, %62 ], [ 0, %54 ]
  call void @llvm.lifetime.start.p0(i64 112, ptr nonnull %13) #13
  %59 = load i32, ptr %34, align 4, !tbaa !29
  %60 = add nsw i32 %59, 1
  store i32 %60, ptr %34, align 4, !tbaa !29
  invoke void @_ZN7CGenomeC1Eiii(ptr noundef nonnull align 8 dereferenceable(108) %13, i32 noundef %59, i32 noundef 2, i32 noundef 1)
          to label %61 unwind label %66

61:                                               ; preds = %.lr.ph
  invoke void @_ZNSt6vectorI7CGenomeSaIS0_EE9push_backEOS0_(ptr noundef nonnull align 8 dereferenceable(24) %0, ptr noundef nonnull align 8 dereferenceable(108) %13)
          to label %62 unwind label %68

62:                                               ; preds = %61
  call void @_ZN7CGenomeD1Ev(ptr noundef nonnull align 8 dereferenceable(108) %13) #13
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %13) #13
  %63 = add nuw nsw i32 %.0100222, 1
  %64 = load i32, ptr %37, align 4, !tbaa !28
  %65 = icmp slt i32 %63, %64
  br i1 %65, label %.lr.ph, label %._crit_edge, !llvm.loop !30

66:                                               ; preds = %.lr.ph
  %67 = landingpad { ptr, i32 }
          cleanup
  br label %70

68:                                               ; preds = %61
  %69 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN7CGenomeD1Ev(ptr noundef nonnull align 8 dereferenceable(108) %13) #13
  br label %70

70:                                               ; preds = %68, %66
  %.pn145 = phi { ptr, i32 } [ %69, %68 ], [ %67, %66 ]
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %13) #13
  br label %492

71:                                               ; preds = %._crit_edge
  %72 = invoke noalias noundef nonnull dereferenceable(32) ptr @_Znwm(i64 noundef 32) #14
          to label %73 unwind label %85

73:                                               ; preds = %71
  invoke void @_ZNK7CGenome5GenesEv(ptr dead_on_unwind nonnull writable sret(%"class.std::vector.15") align 8 %15, ptr noundef nonnull align 8 dereferenceable(108) %14)
          to label %74 unwind label %87

74:                                               ; preds = %73
  invoke void @_ZNK7CGenome7NeuronsEv(ptr dead_on_unwind nonnull writable sret(%"class.std::vector.10") align 8 %16, ptr noundef nonnull align 8 dereferenceable(108) %14)
          to label %75 unwind label %89

75:                                               ; preds = %74
  invoke void @_ZN11CInnovationC1ESt6vectorI9SLinkGeneSaIS1_EES0_I11SNeuronGeneSaIS4_EE(ptr noundef nonnull align 8 dereferenceable(32) %72, ptr noundef nonnull %15, ptr noundef nonnull %16)
          to label %76 unwind label %91

76:                                               ; preds = %75
  store ptr %72, ptr %33, align 8, !tbaa !32
  call void @_ZNSt6vectorI11SNeuronGeneSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %16) #13
  call void @_ZNSt6vectorI9SLinkGeneSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %15) #13
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %17) #13
  invoke void @_ZN3Cga5SplitEddi(ptr dead_on_unwind nonnull writable sret(%"class.std::vector.5") align 8 %17, ptr noundef nonnull align 8 dereferenceable(265) %0, double noundef 0.000000e+00, double noundef 1.000000e+00, i32 noundef 0)
          to label %77 unwind label %95

77:                                               ; preds = %76
  %78 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorI10SplitDepthSaIS0_EEaSEOS2_(ptr noundef nonnull align 8 dereferenceable(24) %31, ptr noundef nonnull align 8 dereferenceable(24) %17) #13
  call void @_ZNSt6vectorI10SplitDepthSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %17) #13
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %17) #13
  store double 3.000000e+00, ptr %38, align 8, !tbaa !33
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %18) #13
  invoke void @_ZN3Cga16CreatePhenotypesEv(ptr dead_on_unwind nonnull writable sret(%"class.std::vector.25") align 8 %18, ptr noundef nonnull align 8 dereferenceable(265) %0)
          to label %79 unwind label %97

79:                                               ; preds = %77
  %80 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIP10CNeuralNetSaIS1_EEaSEOS3_(ptr noundef nonnull align 8 dereferenceable(24) %2, ptr noundef nonnull align 8 dereferenceable(24) %18) #13
  call void @_ZNSt6vectorIP10CNeuralNetSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %18) #13
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %18) #13
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %19) #13
  store i32 0, ptr %19, align 4, !tbaa !34
  br label %.preheader150

.preheader150:                                    ; preds = %79, %384
  %.1241 = phi double [ %.0244, %79 ], [ %.2.lcssa, %384 ]
  %.1121240 = phi i32 [ %.0120242, %79 ], [ %.2122.lcssa, %384 ]
  %.0124239 = phi i1 [ false, %79 ], [ %.1125.lcssa, %384 ]
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %11, i8 -1, i64 16, i1 false), !tbaa !34
  %81 = call noundef i32 @_Z7RandIntii(i32 noundef 0, i32 noundef 3)
  br label %150

82:                                               ; preds = %384
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %19) #13
  call void @_ZN7CGenomeD1Ev(ptr noundef nonnull align 8 dereferenceable(108) %14) #13
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %14) #13
  %exitcond.not = icmp eq i32 %46, 100
  br i1 %exitcond.not, label %.preheader, label %43, !llvm.loop !35

83:                                               ; preds = %._crit_edge
  %84 = landingpad { ptr, i32 }
          cleanup
  br label %390

85:                                               ; preds = %71
  %86 = landingpad { ptr, i32 }
          cleanup
  br label %389

87:                                               ; preds = %73
  %88 = landingpad { ptr, i32 }
          cleanup
  br label %94

89:                                               ; preds = %74
  %90 = landingpad { ptr, i32 }
          cleanup
  br label %93

91:                                               ; preds = %75
  %92 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt6vectorI11SNeuronGeneSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %16) #13
  br label %93

93:                                               ; preds = %91, %89
  %.pn136 = phi { ptr, i32 } [ %92, %91 ], [ %90, %89 ]
  call void @_ZNSt6vectorI9SLinkGeneSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %15) #13
  br label %94

94:                                               ; preds = %87, %93
  %.pn136.pn = phi { ptr, i32 } [ %.pn136, %93 ], [ %88, %87 ]
  call void @_ZdlPvm(ptr noundef nonnull %72, i64 noundef 32) #15
  br label %389

95:                                               ; preds = %76
  %96 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %17) #13
  br label %389

97:                                               ; preds = %77
  %98 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %18) #13
  br label %389

.lr.ph235.preheader:                              ; preds = %147
  %99 = sext i32 %158 to i64
  %100 = getelementptr inbounds [4 x double], ptr %12, i64 0, i64 %99
  %101 = getelementptr inbounds [4 x double], ptr %24, i64 0, i64 %99
  %102 = sext i32 %120 to i64
  %103 = getelementptr inbounds [4 x double], ptr %12, i64 0, i64 %102
  %104 = getelementptr inbounds [4 x double], ptr %24, i64 0, i64 %102
  %105 = sext i32 %132 to i64
  %106 = getelementptr inbounds [4 x double], ptr %12, i64 0, i64 %105
  %107 = getelementptr inbounds [4 x double], ptr %24, i64 0, i64 %105
  %108 = sext i32 %144 to i64
  %109 = getelementptr inbounds [4 x double], ptr %12, i64 0, i64 %108
  %110 = getelementptr inbounds [4 x double], ptr %24, i64 0, i64 %108
  br label %.lr.ph235

.preheader149.1:                                  ; preds = %157
  store i32 %158, ptr %11, align 16, !tbaa !34
  %111 = call noundef i32 @_Z7RandIntii(i32 noundef 0, i32 noundef 3)
  br label %112

112:                                              ; preds = %119, %.preheader149.1
  %.094225.1 = phi i32 [ 0, %.preheader149.1 ], [ %121, %119 ]
  %.096224.1 = phi i32 [ %111, %.preheader149.1 ], [ %120, %119 ]
  %113 = sext i32 %.094225.1 to i64
  %114 = getelementptr inbounds [4 x i32], ptr %11, i64 0, i64 %113
  %115 = load i32, ptr %114, align 4, !tbaa !34
  %116 = icmp eq i32 %.096224.1, %115
  br i1 %116, label %117, label %119

117:                                              ; preds = %112
  %118 = call noundef i32 @_Z7RandIntii(i32 noundef 0, i32 noundef 3)
  br label %119

119:                                              ; preds = %117, %112
  %120 = phi i32 [ %118, %117 ], [ %.096224.1, %112 ]
  %.195.1 = phi i32 [ -1, %117 ], [ %.094225.1, %112 ]
  %121 = add nsw i32 %.195.1, 1
  %122 = icmp slt i32 %.195.1, 3
  br i1 %122, label %112, label %.preheader149.2, !llvm.loop !36

.preheader149.2:                                  ; preds = %119
  store i32 %120, ptr %39, align 4, !tbaa !34
  %123 = call noundef i32 @_Z7RandIntii(i32 noundef 0, i32 noundef 3)
  br label %124

124:                                              ; preds = %131, %.preheader149.2
  %.094225.2 = phi i32 [ 0, %.preheader149.2 ], [ %133, %131 ]
  %.096224.2 = phi i32 [ %123, %.preheader149.2 ], [ %132, %131 ]
  %125 = sext i32 %.094225.2 to i64
  %126 = getelementptr inbounds [4 x i32], ptr %11, i64 0, i64 %125
  %127 = load i32, ptr %126, align 4, !tbaa !34
  %128 = icmp eq i32 %.096224.2, %127
  br i1 %128, label %129, label %131

129:                                              ; preds = %124
  %130 = call noundef i32 @_Z7RandIntii(i32 noundef 0, i32 noundef 3)
  br label %131

131:                                              ; preds = %129, %124
  %132 = phi i32 [ %130, %129 ], [ %.096224.2, %124 ]
  %.195.2 = phi i32 [ -1, %129 ], [ %.094225.2, %124 ]
  %133 = add nsw i32 %.195.2, 1
  %134 = icmp slt i32 %.195.2, 3
  br i1 %134, label %124, label %.preheader149.3, !llvm.loop !36

.preheader149.3:                                  ; preds = %131
  store i32 %132, ptr %40, align 8, !tbaa !34
  %135 = call noundef i32 @_Z7RandIntii(i32 noundef 0, i32 noundef 3)
  br label %136

136:                                              ; preds = %143, %.preheader149.3
  %.094225.3 = phi i32 [ 0, %.preheader149.3 ], [ %145, %143 ]
  %.096224.3 = phi i32 [ %135, %.preheader149.3 ], [ %144, %143 ]
  %137 = sext i32 %.094225.3 to i64
  %138 = getelementptr inbounds [4 x i32], ptr %11, i64 0, i64 %137
  %139 = load i32, ptr %138, align 4, !tbaa !34
  %140 = icmp eq i32 %.096224.3, %139
  br i1 %140, label %141, label %143

141:                                              ; preds = %136
  %142 = call noundef i32 @_Z7RandIntii(i32 noundef 0, i32 noundef 3)
  br label %143

143:                                              ; preds = %141, %136
  %144 = phi i32 [ %142, %141 ], [ %.096224.3, %136 ]
  %.195.3 = phi i32 [ -1, %141 ], [ %.094225.3, %136 ]
  %145 = add nsw i32 %.195.3, 1
  %146 = icmp slt i32 %.195.3, 3
  br i1 %146, label %136, label %147, !llvm.loop !36

147:                                              ; preds = %143
  store i32 %144, ptr %41, align 4, !tbaa !34
  call void @_ZNSt6vectorIdSaIdEE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %5) #13
  %148 = load i32, ptr %37, align 4, !tbaa !28
  %149 = icmp sgt i32 %148, 0
  br i1 %149, label %.lr.ph235.preheader, label %._crit_edge236

150:                                              ; preds = %.preheader150, %157
  %.094225 = phi i32 [ 0, %.preheader150 ], [ %159, %157 ]
  %.096224 = phi i32 [ %81, %.preheader150 ], [ %158, %157 ]
  %151 = sext i32 %.094225 to i64
  %152 = getelementptr inbounds [4 x i32], ptr %11, i64 0, i64 %151
  %153 = load i32, ptr %152, align 4, !tbaa !34
  %154 = icmp eq i32 %.096224, %153
  br i1 %154, label %155, label %157

155:                                              ; preds = %150
  %156 = call noundef i32 @_Z7RandIntii(i32 noundef 0, i32 noundef 3)
  br label %157

157:                                              ; preds = %150, %155
  %158 = phi i32 [ %156, %155 ], [ %.096224, %150 ]
  %.195 = phi i32 [ -1, %155 ], [ %.094225, %150 ]
  %159 = add nsw i32 %.195, 1
  %160 = icmp slt i32 %.195, 3
  br i1 %160, label %150, label %.preheader149.1, !llvm.loop !36

._crit_edge236:                                   ; preds = %375, %147
  %.1125.lcssa = phi i1 [ %.0124239, %147 ], [ %.2126, %375 ]
  %.2122.lcssa = phi i32 [ %.1121240, %147 ], [ %.3123, %375 ]
  %.2.lcssa = phi double [ %.1241, %147 ], [ %.4.3, %375 ]
  br i1 %.1125.lcssa, label %384, label %379

.lr.ph235:                                        ; preds = %.lr.ph235.preheader, %375
  %.2233 = phi double [ %.4.3, %375 ], [ %.1241, %.lr.ph235.preheader ]
  %.092232 = phi i32 [ %376, %375 ], [ 0, %.lr.ph235.preheader ]
  %.2122231 = phi i32 [ %.3123, %375 ], [ %.1121240, %.lr.ph235.preheader ]
  %.1125230 = phi i1 [ %.2126, %375 ], [ %.0124239, %.lr.ph235.preheader ]
  store double 0.000000e+00, ptr %10, align 8, !tbaa !26
  %161 = sext i32 %.092232 to i64
  call void @_ZNSt6vectorIdSaIdEE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %3) #13
  call void @_ZNSt6vectorIdSaIdEE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %4) #13
  %162 = load double, ptr %100, align 8, !tbaa !26
  store double %162, ptr %8, align 8, !tbaa !26
  %163 = load double, ptr %101, align 8, !tbaa !26
  store double %163, ptr %9, align 8, !tbaa !26
  invoke void @_ZNSt6vectorIdSaIdEE9push_backERKd(ptr noundef nonnull align 8 dereferenceable(24) %3, ptr noundef nonnull align 8 dereferenceable(8) %8)
          to label %164 unwind label %178

164:                                              ; preds = %.lr.ph235
  invoke void @_ZNSt6vectorIdSaIdEE9push_backERKd(ptr noundef nonnull align 8 dereferenceable(24) %3, ptr noundef nonnull align 8 dereferenceable(8) %9)
          to label %165 unwind label %178

165:                                              ; preds = %164
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %20) #13
  %166 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP10CNeuralNetSaIS1_EE2atEm(ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef %161)
          to label %167 unwind label %180

167:                                              ; preds = %165
  %168 = load ptr, ptr %166, align 8, !tbaa !37
  invoke void @_ZN10CNeuralNet6UpdateERKSt6vectorIdSaIdEENS_8run_typeE(ptr dead_on_unwind nonnull writable sret(%"class.std::vector.35") align 8 %20, ptr noundef nonnull align 8 dereferenceable(72) %168, ptr noundef nonnull align 8 dereferenceable(24) %3, i32 noundef 1)
          to label %169 unwind label %180

169:                                              ; preds = %167
  %170 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIdSaIdEEaSEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(24) %20) #13
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %20) #13
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %20) #13
  %171 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEE2atEm(ptr noundef nonnull align 8 dereferenceable(24) %4, i64 noundef 0)
          to label %172 unwind label %178

172:                                              ; preds = %169
  %173 = load double, ptr %171, align 8, !tbaa !26
  %174 = load double, ptr %8, align 8, !tbaa !26
  %175 = fcmp oeq double %174, 0.000000e+00
  %176 = load double, ptr %9, align 8
  %177 = fcmp oeq double %176, 0.000000e+00
  %or.cond = select i1 %175, i1 %177, i1 false
  br i1 %or.cond, label %188, label %182

178:                                              ; preds = %282, %277, %270, %245, %240, %233, %208, %203, %196, %169, %164, %.lr.ph235
  %179 = landingpad { ptr, i32 }
          cleanup
  br label %388

180:                                              ; preds = %280, %278, %243, %241, %206, %204, %167, %165
  %181 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %20) #13
  br label %388

182:                                              ; preds = %172
  %183 = fcmp oeq double %174, 1.000000e+00
  %or.cond3 = select i1 %183, i1 %177, i1 false
  br i1 %or.cond3, label %188, label %184

184:                                              ; preds = %182
  %185 = fcmp oeq double %176, 1.000000e+00
  %or.cond5 = select i1 %175, i1 %185, i1 false
  br i1 %or.cond5, label %188, label %186

186:                                              ; preds = %184
  %or.cond7 = select i1 %183, i1 %185, i1 false
  br i1 %or.cond7, label %187, label %188

187:                                              ; preds = %186
  br label %188

188:                                              ; preds = %184, %182, %172, %186, %187
  %.4 = phi double [ 0.000000e+00, %187 ], [ %.2233, %186 ], [ 0.000000e+00, %172 ], [ 1.000000e+00, %182 ], [ 1.000000e+00, %184 ]
  %189 = fcmp ult double %173, 5.000000e-01
  br i1 %189, label %193, label %190

190:                                              ; preds = %188
  %191 = fcmp oeq double %.4, 1.000000e+00
  br i1 %191, label %192, label %196

192:                                              ; preds = %190
  br label %196

193:                                              ; preds = %188
  %194 = fcmp oeq double %.4, 0.000000e+00
  br i1 %194, label %195, label %196

195:                                              ; preds = %193
  br label %196

196:                                              ; preds = %193, %195, %190, %192
  %.184 = phi i32 [ 1, %192 ], [ 0, %190 ], [ 1, %195 ], [ 0, %193 ]
  %197 = fsub double %.4, %173
  %198 = call double @llvm.fabs.f64(double %197)
  %199 = load double, ptr %10, align 8, !tbaa !26
  %200 = fadd double %198, %199
  store double %200, ptr %10, align 8, !tbaa !26
  call void @_ZNSt6vectorIdSaIdEE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %3) #13
  call void @_ZNSt6vectorIdSaIdEE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %4) #13
  %201 = load double, ptr %103, align 8, !tbaa !26
  store double %201, ptr %8, align 8, !tbaa !26
  %202 = load double, ptr %104, align 8, !tbaa !26
  store double %202, ptr %9, align 8, !tbaa !26
  invoke void @_ZNSt6vectorIdSaIdEE9push_backERKd(ptr noundef nonnull align 8 dereferenceable(24) %3, ptr noundef nonnull align 8 dereferenceable(8) %8)
          to label %203 unwind label %178

203:                                              ; preds = %196
  invoke void @_ZNSt6vectorIdSaIdEE9push_backERKd(ptr noundef nonnull align 8 dereferenceable(24) %3, ptr noundef nonnull align 8 dereferenceable(8) %9)
          to label %204 unwind label %178

204:                                              ; preds = %203
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %20) #13
  %205 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP10CNeuralNetSaIS1_EE2atEm(ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef %161)
          to label %206 unwind label %180

206:                                              ; preds = %204
  %207 = load ptr, ptr %205, align 8, !tbaa !37
  invoke void @_ZN10CNeuralNet6UpdateERKSt6vectorIdSaIdEENS_8run_typeE(ptr dead_on_unwind nonnull writable sret(%"class.std::vector.35") align 8 %20, ptr noundef nonnull align 8 dereferenceable(72) %207, ptr noundef nonnull align 8 dereferenceable(24) %3, i32 noundef 1)
          to label %208 unwind label %180

208:                                              ; preds = %206
  %209 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIdSaIdEEaSEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(24) %20) #13
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %20) #13
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %20) #13
  %210 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEE2atEm(ptr noundef nonnull align 8 dereferenceable(24) %4, i64 noundef 0)
          to label %211 unwind label %178

211:                                              ; preds = %208
  %212 = load double, ptr %210, align 8, !tbaa !26
  %213 = load double, ptr %8, align 8, !tbaa !26
  %214 = fcmp oeq double %213, 0.000000e+00
  %215 = load double, ptr %9, align 8
  %216 = fcmp oeq double %215, 0.000000e+00
  %or.cond.1 = select i1 %214, i1 %216, i1 false
  br i1 %or.cond.1, label %223, label %217

217:                                              ; preds = %211
  %218 = fcmp oeq double %213, 1.000000e+00
  %or.cond3.1 = select i1 %218, i1 %216, i1 false
  br i1 %or.cond3.1, label %223, label %219

219:                                              ; preds = %217
  %220 = fcmp oeq double %215, 1.000000e+00
  %or.cond5.1 = select i1 %214, i1 %220, i1 false
  br i1 %or.cond5.1, label %223, label %221

221:                                              ; preds = %219
  %or.cond7.1 = select i1 %218, i1 %220, i1 false
  br i1 %or.cond7.1, label %222, label %223

222:                                              ; preds = %221
  br label %223

223:                                              ; preds = %222, %221, %219, %217, %211
  %.4.1 = phi double [ 0.000000e+00, %222 ], [ %.4, %221 ], [ 0.000000e+00, %211 ], [ 1.000000e+00, %217 ], [ 1.000000e+00, %219 ]
  %224 = fcmp ult double %212, 5.000000e-01
  br i1 %224, label %229, label %225

225:                                              ; preds = %223
  %226 = fcmp oeq double %.4.1, 1.000000e+00
  br i1 %226, label %227, label %233

227:                                              ; preds = %225
  %228 = add nuw nsw i32 %.184, 1
  br label %233

229:                                              ; preds = %223
  %230 = fcmp oeq double %.4.1, 0.000000e+00
  br i1 %230, label %231, label %233

231:                                              ; preds = %229
  %232 = add nuw nsw i32 %.184, 1
  br label %233

233:                                              ; preds = %231, %229, %227, %225
  %.184.1 = phi i32 [ %228, %227 ], [ %.184, %225 ], [ %232, %231 ], [ %.184, %229 ]
  %234 = fsub double %.4.1, %212
  %235 = call double @llvm.fabs.f64(double %234)
  %236 = load double, ptr %10, align 8, !tbaa !26
  %237 = fadd double %235, %236
  store double %237, ptr %10, align 8, !tbaa !26
  call void @_ZNSt6vectorIdSaIdEE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %3) #13
  call void @_ZNSt6vectorIdSaIdEE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %4) #13
  %238 = load double, ptr %106, align 8, !tbaa !26
  store double %238, ptr %8, align 8, !tbaa !26
  %239 = load double, ptr %107, align 8, !tbaa !26
  store double %239, ptr %9, align 8, !tbaa !26
  invoke void @_ZNSt6vectorIdSaIdEE9push_backERKd(ptr noundef nonnull align 8 dereferenceable(24) %3, ptr noundef nonnull align 8 dereferenceable(8) %8)
          to label %240 unwind label %178

240:                                              ; preds = %233
  invoke void @_ZNSt6vectorIdSaIdEE9push_backERKd(ptr noundef nonnull align 8 dereferenceable(24) %3, ptr noundef nonnull align 8 dereferenceable(8) %9)
          to label %241 unwind label %178

241:                                              ; preds = %240
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %20) #13
  %242 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP10CNeuralNetSaIS1_EE2atEm(ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef %161)
          to label %243 unwind label %180

243:                                              ; preds = %241
  %244 = load ptr, ptr %242, align 8, !tbaa !37
  invoke void @_ZN10CNeuralNet6UpdateERKSt6vectorIdSaIdEENS_8run_typeE(ptr dead_on_unwind nonnull writable sret(%"class.std::vector.35") align 8 %20, ptr noundef nonnull align 8 dereferenceable(72) %244, ptr noundef nonnull align 8 dereferenceable(24) %3, i32 noundef 1)
          to label %245 unwind label %180

245:                                              ; preds = %243
  %246 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIdSaIdEEaSEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(24) %20) #13
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %20) #13
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %20) #13
  %247 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEE2atEm(ptr noundef nonnull align 8 dereferenceable(24) %4, i64 noundef 0)
          to label %248 unwind label %178

248:                                              ; preds = %245
  %249 = load double, ptr %247, align 8, !tbaa !26
  %250 = load double, ptr %8, align 8, !tbaa !26
  %251 = fcmp oeq double %250, 0.000000e+00
  %252 = load double, ptr %9, align 8
  %253 = fcmp oeq double %252, 0.000000e+00
  %or.cond.2 = select i1 %251, i1 %253, i1 false
  br i1 %or.cond.2, label %260, label %254

254:                                              ; preds = %248
  %255 = fcmp oeq double %250, 1.000000e+00
  %or.cond3.2 = select i1 %255, i1 %253, i1 false
  br i1 %or.cond3.2, label %260, label %256

256:                                              ; preds = %254
  %257 = fcmp oeq double %252, 1.000000e+00
  %or.cond5.2 = select i1 %251, i1 %257, i1 false
  br i1 %or.cond5.2, label %260, label %258

258:                                              ; preds = %256
  %or.cond7.2 = select i1 %255, i1 %257, i1 false
  br i1 %or.cond7.2, label %259, label %260

259:                                              ; preds = %258
  br label %260

260:                                              ; preds = %259, %258, %256, %254, %248
  %.4.2 = phi double [ 0.000000e+00, %259 ], [ %.4.1, %258 ], [ 0.000000e+00, %248 ], [ 1.000000e+00, %254 ], [ 1.000000e+00, %256 ]
  %261 = fcmp ult double %249, 5.000000e-01
  br i1 %261, label %266, label %262

262:                                              ; preds = %260
  %263 = fcmp oeq double %.4.2, 1.000000e+00
  br i1 %263, label %264, label %270

264:                                              ; preds = %262
  %265 = add nuw nsw i32 %.184.1, 1
  br label %270

266:                                              ; preds = %260
  %267 = fcmp oeq double %.4.2, 0.000000e+00
  br i1 %267, label %268, label %270

268:                                              ; preds = %266
  %269 = add nuw nsw i32 %.184.1, 1
  br label %270

270:                                              ; preds = %268, %266, %264, %262
  %.184.2 = phi i32 [ %265, %264 ], [ %.184.1, %262 ], [ %269, %268 ], [ %.184.1, %266 ]
  %271 = fsub double %.4.2, %249
  %272 = call double @llvm.fabs.f64(double %271)
  %273 = load double, ptr %10, align 8, !tbaa !26
  %274 = fadd double %272, %273
  store double %274, ptr %10, align 8, !tbaa !26
  call void @_ZNSt6vectorIdSaIdEE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %3) #13
  call void @_ZNSt6vectorIdSaIdEE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %4) #13
  %275 = load double, ptr %109, align 8, !tbaa !26
  store double %275, ptr %8, align 8, !tbaa !26
  %276 = load double, ptr %110, align 8, !tbaa !26
  store double %276, ptr %9, align 8, !tbaa !26
  invoke void @_ZNSt6vectorIdSaIdEE9push_backERKd(ptr noundef nonnull align 8 dereferenceable(24) %3, ptr noundef nonnull align 8 dereferenceable(8) %8)
          to label %277 unwind label %178

277:                                              ; preds = %270
  invoke void @_ZNSt6vectorIdSaIdEE9push_backERKd(ptr noundef nonnull align 8 dereferenceable(24) %3, ptr noundef nonnull align 8 dereferenceable(8) %9)
          to label %278 unwind label %178

278:                                              ; preds = %277
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %20) #13
  %279 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP10CNeuralNetSaIS1_EE2atEm(ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef %161)
          to label %280 unwind label %180

280:                                              ; preds = %278
  %281 = load ptr, ptr %279, align 8, !tbaa !37
  invoke void @_ZN10CNeuralNet6UpdateERKSt6vectorIdSaIdEENS_8run_typeE(ptr dead_on_unwind nonnull writable sret(%"class.std::vector.35") align 8 %20, ptr noundef nonnull align 8 dereferenceable(72) %281, ptr noundef nonnull align 8 dereferenceable(24) %3, i32 noundef 1)
          to label %282 unwind label %180

282:                                              ; preds = %280
  %283 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIdSaIdEEaSEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(24) %20) #13
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %20) #13
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %20) #13
  %284 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEE2atEm(ptr noundef nonnull align 8 dereferenceable(24) %4, i64 noundef 0)
          to label %285 unwind label %178

285:                                              ; preds = %282
  %286 = load double, ptr %284, align 8, !tbaa !26
  %287 = load double, ptr %8, align 8, !tbaa !26
  %288 = fcmp oeq double %287, 0.000000e+00
  %289 = load double, ptr %9, align 8
  %290 = fcmp oeq double %289, 0.000000e+00
  %or.cond.3 = select i1 %288, i1 %290, i1 false
  br i1 %or.cond.3, label %297, label %291

291:                                              ; preds = %285
  %292 = fcmp oeq double %287, 1.000000e+00
  %or.cond3.3 = select i1 %292, i1 %290, i1 false
  br i1 %or.cond3.3, label %297, label %293

293:                                              ; preds = %291
  %294 = fcmp oeq double %289, 1.000000e+00
  %or.cond5.3 = select i1 %288, i1 %294, i1 false
  br i1 %or.cond5.3, label %297, label %295

295:                                              ; preds = %293
  %or.cond7.3 = select i1 %292, i1 %294, i1 false
  br i1 %or.cond7.3, label %296, label %297

296:                                              ; preds = %295
  br label %297

297:                                              ; preds = %296, %295, %293, %291, %285
  %.4.3 = phi double [ 0.000000e+00, %296 ], [ %.4.2, %295 ], [ 0.000000e+00, %285 ], [ 1.000000e+00, %291 ], [ 1.000000e+00, %293 ]
  %298 = fcmp ult double %286, 5.000000e-01
  br i1 %298, label %303, label %299

299:                                              ; preds = %297
  %300 = fcmp oeq double %.4.3, 1.000000e+00
  br i1 %300, label %301, label %307

301:                                              ; preds = %299
  %302 = add nuw nsw i32 %.184.2, 1
  br label %307

303:                                              ; preds = %297
  %304 = fcmp oeq double %.4.3, 0.000000e+00
  br i1 %304, label %305, label %307

305:                                              ; preds = %303
  %306 = add nuw nsw i32 %.184.2, 1
  br label %307

307:                                              ; preds = %305, %303, %301, %299
  %.184.3 = phi i32 [ %302, %301 ], [ %.184.2, %299 ], [ %306, %305 ], [ %.184.2, %303 ]
  %308 = fsub double %.4.3, %286
  %309 = call double @llvm.fabs.f64(double %308)
  %310 = load double, ptr %10, align 8, !tbaa !26
  %311 = fadd double %309, %310
  store double %311, ptr %10, align 8, !tbaa !26
  %312 = icmp eq i32 %.184.3, 4
  br i1 %312, label %313, label %371

313:                                              ; preds = %307
  %314 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.35)
          to label %315 unwind label %.loopexit

315:                                              ; preds = %313
  %316 = load i32, ptr %19, align 4, !tbaa !34
  %317 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %314, i32 noundef %316)
          to label %318 unwind label %.loopexit

318:                                              ; preds = %315
  %319 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %317, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %320 unwind label %.loopexit

320:                                              ; preds = %318
  %321 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.36)
          to label %322 unwind label %.loopexit

322:                                              ; preds = %320
  %323 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP10CNeuralNetSaIS1_EE2atEm(ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef %161)
          to label %324 unwind label %.loopexit

324:                                              ; preds = %322
  %325 = load ptr, ptr %323, align 8, !tbaa !37
  %326 = invoke noundef i32 @_ZN10CNeuralNet22getNumberOfHiddenNodesEv(ptr noundef nonnull align 8 dereferenceable(72) %325)
          to label %327 unwind label %.loopexit

327:                                              ; preds = %324
  %328 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %321, i32 noundef %326)
          to label %329 unwind label %.loopexit

329:                                              ; preds = %327
  %330 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %328, ptr noundef nonnull @.str.37)
          to label %331 unwind label %.loopexit

331:                                              ; preds = %329
  %332 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %330, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %333 unwind label %.loopexit

333:                                              ; preds = %331
  %334 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %335 unwind label %.loopexit

335:                                              ; preds = %333
  %336 = add nsw i32 %.2122231, 1
  invoke void @_ZNSt6vectorIiSaIiEE9push_backERKi(ptr noundef nonnull align 8 dereferenceable(24) %6, ptr noundef nonnull align 4 dereferenceable(4) %19)
          to label %337 unwind label %.loopexit

337:                                              ; preds = %335
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %21) #13
  %338 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP10CNeuralNetSaIS1_EE2atEm(ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef %161)
          to label %339 unwind label %355

339:                                              ; preds = %337
  %340 = load ptr, ptr %338, align 8, !tbaa !37
  %341 = invoke noundef i32 @_ZN10CNeuralNet22getNumberOfHiddenNodesEv(ptr noundef nonnull align 8 dereferenceable(72) %340)
          to label %342 unwind label %355

342:                                              ; preds = %339
  store i32 %341, ptr %21, align 4, !tbaa !34
  invoke void @_ZNSt6vectorIiSaIiEE9push_backEOi(ptr noundef nonnull align 8 dereferenceable(24) %7, ptr noundef nonnull align 4 dereferenceable(4) %21)
          to label %343 unwind label %355

343:                                              ; preds = %342
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %21) #13
  %344 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP10CNeuralNetSaIS1_EE2atEm(ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef %161)
          to label %345 unwind label %.loopexit

345:                                              ; preds = %343
  %346 = load ptr, ptr %344, align 8, !tbaa !37
  %347 = invoke noundef i32 @_ZN10CNeuralNet22getNumberOfHiddenNodesEv(ptr noundef nonnull align 8 dereferenceable(72) %346)
          to label %348 unwind label %.loopexit

348:                                              ; preds = %345
  %349 = icmp eq i32 %347, 0
  br i1 %349, label %350, label %357

350:                                              ; preds = %348
  %351 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.38)
          to label %352 unwind label %.loopexit.split-lp

352:                                              ; preds = %350
  %353 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %351, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %354 unwind label %.loopexit.split-lp

354:                                              ; preds = %352
  call void @exit(i32 noundef 1) #16
  unreachable

.loopexit:                                        ; preds = %313, %315, %318, %320, %322, %324, %327, %329, %331, %333, %335, %343, %345, %357, %359, %371
  %lpad.loopexit = landingpad { ptr, i32 }
          cleanup
  br label %388

.loopexit.split-lp:                               ; preds = %350, %352, %364, %366
  %lpad.loopexit.split-lp = landingpad { ptr, i32 }
          cleanup
  br label %388

355:                                              ; preds = %342, %339, %337
  %356 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %21) #13
  br label %388

357:                                              ; preds = %348
  %358 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP10CNeuralNetSaIS1_EE2atEm(ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef %161)
          to label %359 unwind label %.loopexit

359:                                              ; preds = %357
  %360 = load ptr, ptr %358, align 8, !tbaa !37
  %361 = invoke noundef i32 @_ZN10CNeuralNet31getNumberOfRecurrentConnectionsEv(ptr noundef nonnull align 8 dereferenceable(72) %360)
          to label %362 unwind label %.loopexit

362:                                              ; preds = %359
  %363 = icmp sgt i32 %361, 0
  br i1 %363, label %364, label %369

364:                                              ; preds = %362
  %365 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.39)
          to label %366 unwind label %.loopexit.split-lp

366:                                              ; preds = %364
  %367 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %365, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %368 unwind label %.loopexit.split-lp

368:                                              ; preds = %366
  call void @exit(i32 noundef 1) #16
  unreachable

369:                                              ; preds = %362
  store i32 500, ptr %19, align 4, !tbaa !34
  %370 = load i32, ptr %37, align 4, !tbaa !28
  %.pre = load double, ptr %10, align 8, !tbaa !26
  br label %371

371:                                              ; preds = %369, %307
  %372 = phi double [ %.pre, %369 ], [ %311, %307 ]
  %.2126 = phi i1 [ true, %369 ], [ %.1125230, %307 ]
  %.3123 = phi i32 [ %336, %369 ], [ %.2122231, %307 ]
  %.193 = phi i32 [ %370, %369 ], [ %.092232, %307 ]
  %373 = fsub double 4.000000e+00, %372
  %374 = fmul double %373, %373
  store double %374, ptr %10, align 8, !tbaa !26
  invoke void @_ZNSt6vectorIdSaIdEE9push_backERKd(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %10)
          to label %375 unwind label %.loopexit

375:                                              ; preds = %371
  %376 = add nsw i32 %.193, 1
  %377 = load i32, ptr %37, align 4, !tbaa !28
  %378 = icmp slt i32 %376, %377
  br i1 %378, label %.lr.ph235, label %._crit_edge236, !llvm.loop !38

379:                                              ; preds = %._crit_edge236
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %22) #13
  invoke void @_ZN3Cga5EpochERKSt6vectorIdSaIdEE(ptr dead_on_unwind nonnull writable sret(%"class.std::vector.25") align 8 %22, ptr noundef nonnull align 8 dereferenceable(265) %0, ptr noundef nonnull align 8 dereferenceable(24) %5)
          to label %380 unwind label %382

380:                                              ; preds = %379
  %381 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIP10CNeuralNetSaIS1_EEaSEOS3_(ptr noundef nonnull align 8 dereferenceable(24) %2, ptr noundef nonnull align 8 dereferenceable(24) %22) #13
  call void @_ZNSt6vectorIP10CNeuralNetSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %22) #13
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %22) #13
  br label %384

382:                                              ; preds = %379
  %383 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %22) #13
  br label %388

384:                                              ; preds = %._crit_edge236, %380
  %385 = load i32, ptr %19, align 4, !tbaa !34
  %386 = add nsw i32 %385, 1
  store i32 %386, ptr %19, align 4, !tbaa !34
  %387 = icmp slt i32 %385, 499
  br i1 %387, label %.preheader150, label %82, !llvm.loop !39

388:                                              ; preds = %.loopexit, %.loopexit.split-lp, %355, %180, %178, %382
  %.pn139.pn.pn = phi { ptr, i32 } [ %383, %382 ], [ %356, %355 ], [ %179, %178 ], [ %181, %180 ], [ %lpad.loopexit, %.loopexit ], [ %lpad.loopexit.split-lp, %.loopexit.split-lp ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %19) #13
  br label %389

389:                                              ; preds = %94, %388, %97, %95, %85
  %.pn139.pn.pn.pn = phi { ptr, i32 } [ %.pn139.pn.pn, %388 ], [ %98, %97 ], [ %96, %95 ], [ %.pn136.pn, %94 ], [ %86, %85 ]
  call void @_ZN7CGenomeD1Ev(ptr noundef nonnull align 8 dereferenceable(108) %14) #13
  br label %390

390:                                              ; preds = %389, %83
  %.pn139.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn139.pn.pn.pn, %389 ], [ %84, %83 ]
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %14) #13
  br label %492

._crit_edge248:                                   ; preds = %395, %.preheader
  %.090.lcssa = phi float [ 0.000000e+00, %.preheader ], [ %398, %395 ]
  %391 = sitofp i32 %.2122.lcssa to float
  %392 = fdiv float %.090.lcssa, %391
  %393 = call noundef i64 @_ZNKSt6vectorIiSaIiEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %7) #13
  %.not268 = icmp eq i64 %393, 0
  br i1 %.not268, label %._crit_edge254, label %.lr.ph253

.lr.ph247:                                        ; preds = %.preheader, %395
  %indvars.iv = phi i64 [ %indvars.iv.next, %395 ], [ 0, %.preheader ]
  %.090245 = phi float [ %398, %395 ], [ 0.000000e+00, %.preheader ]
  %394 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEE2atEm(ptr noundef nonnull align 8 dereferenceable(24) %6, i64 noundef %indvars.iv)
          to label %395 unwind label %401

395:                                              ; preds = %.lr.ph247
  %396 = load i32, ptr %394, align 4, !tbaa !34
  %397 = sitofp i32 %396 to float
  %398 = fadd float %.090245, %397
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %399 = call noundef i64 @_ZNKSt6vectorIiSaIiEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %6) #13
  %400 = icmp ugt i64 %399, %indvars.iv.next
  br i1 %400, label %.lr.ph247, label %._crit_edge248, !llvm.loop !40

401:                                              ; preds = %.lr.ph247
  %402 = landingpad { ptr, i32 }
          cleanup
  br label %492

._crit_edge254:                                   ; preds = %406, %._crit_edge248
  %.089.lcssa = phi float [ 0.000000e+00, %._crit_edge248 ], [ %409, %406 ]
  %403 = fdiv float %.089.lcssa, %391
  %404 = call noundef i64 @_ZNKSt6vectorIiSaIiEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %6) #13
  %.not269 = icmp eq i64 %404, 0
  br i1 %.not269, label %._crit_edge260, label %.lr.ph259

.lr.ph253:                                        ; preds = %._crit_edge248, %406
  %indvars.iv297 = phi i64 [ %indvars.iv.next298, %406 ], [ 0, %._crit_edge248 ]
  %.089250 = phi float [ %409, %406 ], [ 0.000000e+00, %._crit_edge248 ]
  %405 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEE2atEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %indvars.iv297)
          to label %406 unwind label %412

406:                                              ; preds = %.lr.ph253
  %407 = load i32, ptr %405, align 4, !tbaa !34
  %408 = sitofp i32 %407 to float
  %409 = fadd float %.089250, %408
  %indvars.iv.next298 = add nuw nsw i64 %indvars.iv297, 1
  %410 = call noundef i64 @_ZNKSt6vectorIiSaIiEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %7) #13
  %411 = icmp ugt i64 %410, %indvars.iv.next298
  br i1 %411, label %.lr.ph253, label %._crit_edge254, !llvm.loop !41

412:                                              ; preds = %.lr.ph253
  %413 = landingpad { ptr, i32 }
          cleanup
  br label %492

._crit_edge260:                                   ; preds = %421, %._crit_edge254
  %.086.lcssa = phi float [ 0.000000e+00, %._crit_edge254 ], [ %425, %421 ]
  %414 = call noundef i64 @_ZNKSt6vectorIiSaIiEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %6) #13
  %415 = add i64 %414, -1
  %416 = uitofp i64 %415 to float
  %417 = fdiv float %.086.lcssa, %416
  %418 = call noundef float @_ZSt4sqrtf(float noundef %417)
  %419 = call noundef i64 @_ZNKSt6vectorIiSaIiEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %7) #13
  %.not270 = icmp eq i64 %419, 0
  br i1 %.not270, label %._crit_edge266, label %.lr.ph265

.lr.ph259:                                        ; preds = %._crit_edge254, %421
  %indvars.iv300 = phi i64 [ %indvars.iv.next301, %421 ], [ 0, %._crit_edge254 ]
  %.086256 = phi float [ %425, %421 ], [ 0.000000e+00, %._crit_edge254 ]
  %420 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEE2atEm(ptr noundef nonnull align 8 dereferenceable(24) %6, i64 noundef %indvars.iv300)
          to label %421 unwind label %428

421:                                              ; preds = %.lr.ph259
  %422 = load i32, ptr %420, align 4, !tbaa !34
  %423 = sitofp i32 %422 to float
  %424 = fsub float %423, %392
  %425 = call float @llvm.fmuladd.f32(float %424, float %424, float %.086256)
  %indvars.iv.next301 = add nuw nsw i64 %indvars.iv300, 1
  %426 = call noundef i64 @_ZNKSt6vectorIiSaIiEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %6) #13
  %427 = icmp ugt i64 %426, %indvars.iv.next301
  br i1 %427, label %.lr.ph259, label %._crit_edge260, !llvm.loop !42

428:                                              ; preds = %.lr.ph259
  %429 = landingpad { ptr, i32 }
          cleanup
  br label %492

._crit_edge266:                                   ; preds = %437, %._crit_edge260
  %.082.lcssa = phi float [ 0.000000e+00, %._crit_edge260 ], [ %441, %437 ]
  %430 = call noundef i64 @_ZNKSt6vectorIiSaIiEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %7) #13
  %431 = add i64 %430, -1
  %432 = uitofp i64 %431 to float
  %433 = fdiv float %.082.lcssa, %432
  %434 = call noundef float @_ZSt4sqrtf(float noundef %433)
  %435 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.40)
          to label %446 unwind label %490

.lr.ph265:                                        ; preds = %._crit_edge260, %437
  %indvars.iv303 = phi i64 [ %indvars.iv.next304, %437 ], [ 0, %._crit_edge260 ]
  %.082262 = phi float [ %441, %437 ], [ 0.000000e+00, %._crit_edge260 ]
  %436 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEE2atEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %indvars.iv303)
          to label %437 unwind label %444

437:                                              ; preds = %.lr.ph265
  %438 = load i32, ptr %436, align 4, !tbaa !34
  %439 = sitofp i32 %438 to float
  %440 = fsub float %439, %403
  %441 = call float @llvm.fmuladd.f32(float %440, float %440, float %.082262)
  %indvars.iv.next304 = add nuw nsw i64 %indvars.iv303, 1
  %442 = call noundef i64 @_ZNKSt6vectorIiSaIiEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %7) #13
  %443 = icmp ugt i64 %442, %indvars.iv.next304
  br i1 %443, label %.lr.ph265, label %._crit_edge266, !llvm.loop !43

444:                                              ; preds = %.lr.ph265
  %445 = landingpad { ptr, i32 }
          cleanup
  br label %492

446:                                              ; preds = %._crit_edge266
  %447 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %435, i32 noundef 100)
          to label %448 unwind label %490

448:                                              ; preds = %446
  %449 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %447, ptr noundef nonnull @.str.41)
          to label %450 unwind label %490

450:                                              ; preds = %448
  %451 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %449, i32 noundef %.2122.lcssa)
          to label %452 unwind label %490

452:                                              ; preds = %450
  %453 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %451, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %454 unwind label %490

454:                                              ; preds = %452
  %455 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.42)
          to label %456 unwind label %490

456:                                              ; preds = %454
  %457 = fdiv float %391, 1.000000e+02
  %458 = fpext float %457 to double
  %459 = fmul double %458, 1.000000e+02
  %460 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %455, double noundef %459)
          to label %461 unwind label %490

461:                                              ; preds = %456
  %462 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %460, ptr noundef nonnull @.str.43)
          to label %463 unwind label %490

463:                                              ; preds = %461
  %464 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %462, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %465 unwind label %490

465:                                              ; preds = %463
  %466 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.44)
          to label %467 unwind label %490

467:                                              ; preds = %465
  %468 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEf(ptr noundef nonnull align 8 dereferenceable(8) %466, float noundef %392)
          to label %469 unwind label %490

469:                                              ; preds = %467
  %470 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %468, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %471 unwind label %490

471:                                              ; preds = %469
  %472 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.45)
          to label %473 unwind label %490

473:                                              ; preds = %471
  %474 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEf(ptr noundef nonnull align 8 dereferenceable(8) %472, float noundef %418)
          to label %475 unwind label %490

475:                                              ; preds = %473
  %476 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %474, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %477 unwind label %490

477:                                              ; preds = %475
  %478 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.46)
          to label %479 unwind label %490

479:                                              ; preds = %477
  %480 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEf(ptr noundef nonnull align 8 dereferenceable(8) %478, float noundef %403)
          to label %481 unwind label %490

481:                                              ; preds = %479
  %482 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %480, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %483 unwind label %490

483:                                              ; preds = %481
  %484 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.47)
          to label %485 unwind label %490

485:                                              ; preds = %483
  %486 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEf(ptr noundef nonnull align 8 dereferenceable(8) %484, float noundef %434)
          to label %487 unwind label %490

487:                                              ; preds = %485
  %488 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %486, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %489 unwind label %490

489:                                              ; preds = %487
  call void @exit(i32 noundef 0) #16
  unreachable

490:                                              ; preds = %487, %485, %483, %481, %479, %477, %475, %473, %471, %469, %467, %465, %463, %461, %456, %454, %452, %450, %448, %446, %._crit_edge266
  %491 = landingpad { ptr, i32 }
          cleanup
  br label %492

492:                                              ; preds = %401, %412, %444, %490, %428, %57, %70, %390
  %.pn145.pn.pn = phi { ptr, i32 } [ %.pn145, %70 ], [ %.pn139.pn.pn.pn.pn, %390 ], [ %58, %57 ], [ %402, %401 ], [ %413, %412 ], [ %429, %428 ], [ %445, %444 ], [ %491, %490 ]
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %12) #13
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #13
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #13
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7) #13
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %6) #13
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6) #13
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #13
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #13
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %4) #13
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) #13
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %3) #13
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %3) #13
  call void @_ZNSt6vectorIP10CNeuralNetSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %2) #13
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %2) #13
  resume { ptr, i32 } %.pn145.pn.pn
}

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

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

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

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

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

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

declare void @_ZN10CNeuralNet6UpdateERKSt6vectorIdSaIdEENS_8run_typeE(ptr dead_on_unwind writable sret(%"class.std::vector.35") align 8, ptr noundef nonnull align 8 dereferenceable(72), ptr noundef nonnull align 8 dereferenceable(24), i32 noundef) local_unnamed_addr #2

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

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

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

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

declare noundef i32 @_ZN10CNeuralNet22getNumberOfHiddenNodesEv(ptr noundef nonnull align 8 dereferenceable(72)) local_unnamed_addr #2

declare noundef i32 @_ZN10CNeuralNet31getNumberOfRecurrentConnectionsEv(ptr noundef nonnull align 8 dereferenceable(72)) local_unnamed_addr #2

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

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.fmuladd.f32(float, float, float) #11

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZSt4sqrtf(float noundef) local_unnamed_addr #9

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

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #12

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { 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 #4 = { nobuiltin allocsize(0) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { 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 #6 = { nobuiltin nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { 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 #8 = { 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 #9 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #10 = { mustprogress noreturn 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 #11 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #12 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #13 = { nounwind }
attributes #14 = { builtin allocsize(0) }
attributes #15 = { builtin nounwind }
attributes #16 = { 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, !24, i64 256}
!6 = !{!"_ZTS3Cga", !7, i64 0, !7, i64 24, !7, i64 48, !7, i64 72, !7, i64 96, !14, i64 120, !11, i64 144, !18, i64 152, !18, i64 156, !18, i64 160, !18, i64 164, !19, i64 168, !19, i64 176, !18, i64 184, !19, i64 192, !20, i64 200, !20, i64 224, !19, i64 248, !24, i64 256, !24, i64 257, !25, i64 260, !24, i64 264}
!7 = !{!"_ZTSSt6vectorI7CGenomeSaIS0_EE", !8, i64 0}
!8 = !{!"_ZTSSt12_Vector_baseI7CGenomeSaIS0_EE", !9, i64 0}
!9 = !{!"_ZTSNSt12_Vector_baseI7CGenomeSaIS0_EE12_Vector_implE", !10, i64 0}
!10 = !{!"_ZTSNSt12_Vector_baseI7CGenomeSaIS0_EE17_Vector_impl_dataE", !11, i64 0, !11, i64 8, !11, i64 16}
!11 = !{!"any pointer", !12, i64 0}
!12 = !{!"omnipotent char", !13, i64 0}
!13 = !{!"Simple C++ TBAA"}
!14 = !{!"_ZTSSt6vectorI8CSpeciesSaIS0_EE", !15, i64 0}
!15 = !{!"_ZTSSt12_Vector_baseI8CSpeciesSaIS0_EE", !16, i64 0}
!16 = !{!"_ZTSNSt12_Vector_baseI8CSpeciesSaIS0_EE12_Vector_implE", !17, i64 0}
!17 = !{!"_ZTSNSt12_Vector_baseI8CSpeciesSaIS0_EE17_Vector_impl_dataE", !11, i64 0, !11, i64 8, !11, i64 16}
!18 = !{!"int", !12, i64 0}
!19 = !{!"double", !12, i64 0}
!20 = !{!"_ZTSSt6vectorI10SplitDepthSaIS0_EE", !21, i64 0}
!21 = !{!"_ZTSSt12_Vector_baseI10SplitDepthSaIS0_EE", !22, i64 0}
!22 = !{!"_ZTSNSt12_Vector_baseI10SplitDepthSaIS0_EE12_Vector_implE", !23, i64 0}
!23 = !{!"_ZTSNSt12_Vector_baseI10SplitDepthSaIS0_EE17_Vector_impl_dataE", !11, i64 0, !11, i64 8, !11, i64 16}
!24 = !{!"bool", !12, i64 0}
!25 = !{!"_ZTS13UnderFlowMode", !12, i64 0}
!26 = !{!19, !19, i64 0}
!27 = !{!6, !19, i64 192}
!28 = !{!6, !18, i64 164}
!29 = !{!6, !18, i64 156}
!30 = distinct !{!30, !31}
!31 = !{!"llvm.loop.mustprogress"}
!32 = !{!6, !11, i64 144}
!33 = !{!6, !19, i64 248}
!34 = !{!18, !18, i64 0}
!35 = distinct !{!35, !31}
!36 = distinct !{!36, !31}
!37 = !{!11, !11, i64 0}
!38 = distinct !{!38, !31}
!39 = distinct !{!39, !31}
!40 = distinct !{!40, !31}
!41 = distinct !{!41, !31}
!42 = distinct !{!42, !31}
!43 = distinct !{!43, !31}


; Effective O3 passes: AggressiveInstCombinePass,CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopIdiomRecognizePass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,MemCpyOptPass,PostOrderFunctionAttrsPass,ReassociatePass,SCCPPass,SLPVectorizerPass,SROAPass,SimplifyCFGPass