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

; 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.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.__gnu_cxx::__normal_iterator" = type { ptr }
%"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.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.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.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.__gnu_cxx::__normal_iterator.46" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.45" = type { 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.__gnu_cxx::__normal_iterator.47" = type { ptr }
%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.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 }
%"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 }

@_ZSt4cout = external global %"class.std::basic_ostream", align 8
@.str = external hidden unnamed_addr constant [37 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [59 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [77 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [77 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [88 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [12 x i8], align 1

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

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

declare i32 @__gxx_personality_v0(...)

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZN3Cga17CalculateNetDepthERK7CGenome(ptr noundef nonnull align 8 dereferenceable(265), ptr noundef nonnull align 8 dereferenceable(108)) #3 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN7CGenome8SetDepthEi(ptr noundef nonnull align 8 dereferenceable(108), i32 noundef) #0 align 2

declare noundef ptr @_ZN7CGenome15CreatePhenotypeEv(ptr noundef nonnull align 8 dereferenceable(108)) #4

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3Cga5EpochERKSt6vectorIdSaIdEE(ptr dead_on_unwind noalias writable sret(%"class.std::vector.25") align 8 %0, ptr noundef nonnull align 8 dereferenceable(265) %1, ptr noundef nonnull align 8 dereferenceable(24) %2) #3 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %8 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %9 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca %"class.std::vector", align 8
  %13 = alloca i32, align 4
  %14 = alloca %class.CGenome, align 8
  %15 = alloca ptr, align 8
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i8, align 1
  %20 = alloca %class.CGenome, align 8
  %21 = alloca %class.CGenome, align 8
  %22 = alloca %class.CGenome, align 8
  %23 = alloca %class.CGenome, align 8
  %24 = alloca i32, align 4
  %25 = alloca %class.CGenome, align 8
  %26 = alloca %class.CGenome, align 8
  %27 = alloca i32, align 4
  %28 = alloca %"class.__gnu_cxx::__normal_iterator.46", align 8
  %29 = alloca %"class.__gnu_cxx::__normal_iterator.45", align 8
  %30 = alloca %"class.__gnu_cxx::__normal_iterator.45", align 8
  %31 = alloca %"class.__gnu_cxx::__normal_iterator.45", align 8
  %32 = alloca %"class.std::vector.30", align 8
  %33 = alloca i32, align 4
  %34 = alloca %class.CGenome, align 8
  %35 = alloca i8, align 1
  %36 = alloca %class.CGenome, align 8
  %37 = alloca i32, align 4
  %38 = alloca i32, align 4
  %39 = alloca i32, align 4
  %40 = alloca i32, align 4
  %41 = alloca %class.CGenome, align 8
  %42 = alloca i32, align 4
  %43 = alloca i8, align 1
  %44 = alloca i32, align 4
  %45 = alloca %class.CGenome, align 8
  %46 = alloca i32, align 4
  %47 = alloca %"class.std::vector.30", align 8
  %48 = alloca i32, align 4
  %49 = alloca i32, align 4
  %50 = alloca %"class.__gnu_cxx::__normal_iterator.47", align 8
  %51 = alloca %"class.__gnu_cxx::__normal_iterator.47", align 8
  %52 = alloca i32, align 4
  %53 = alloca i32, align 4
  %54 = alloca %class.CGenome, align 8
  %55 = alloca i32, align 4
  %56 = alloca i1, align 1
  %57 = alloca i32, align 4
  %58 = alloca i32, align 4
  %59 = alloca ptr, align 8
  store ptr %0, ptr %4, align 8
  store ptr %1, ptr %5, align 8, !tbaa !5
  store ptr %2, ptr %6, align 8, !tbaa !5
  %60 = load ptr, ptr %5, align 8
  %61 = load ptr, ptr %6, align 8, !tbaa !5
  %62 = call noundef i64 @_ZNKSt6vectorIdSaIdEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %61) #8
  %63 = getelementptr inbounds %class.Cga, ptr %60, i32 0, i32 0
  %64 = call noundef i64 @_ZNKSt6vectorI7CGenomeSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %63) #8
  %65 = icmp ne i64 %62, %64
  br i1 %65, label %66, label %69

66:                                               ; preds = %3
  %67 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str)
  %68 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %67, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  call void @exit(i32 noundef 1) #9
  unreachable

69:                                               ; preds = %3
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #8
  %70 = getelementptr inbounds %class.Cga, ptr %60, i32 0, i32 5
  %71 = call ptr @_ZNSt6vectorI8CSpeciesSaIS0_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %70) #8
  %72 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %7, i32 0, i32 0
  store ptr %71, ptr %72, align 8
  br label %73

73:                                               ; preds = %78, %69
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #8
  %74 = getelementptr inbounds %class.Cga, ptr %60, i32 0, i32 5
  %75 = call ptr @_ZNSt6vectorI8CSpeciesSaIS0_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %74) #8
  %76 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %8, i32 0, i32 0
  store ptr %75, ptr %76, align 8
  %77 = call noundef zeroext i1 @_ZN9__gnu_cxxneIP8CSpeciesSt6vectorIS1_SaIS1_EEEEbRKNS_17__normal_iteratorIT_T0_EESB_(ptr noundef nonnull align 8 dereferenceable(8) %7, ptr noundef nonnull align 8 dereferenceable(8) %8) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #8
  br i1 %77, label %78, label %83

78:                                               ; preds = %73
  %79 = call noundef ptr @_ZNK9__gnu_cxx17__normal_iteratorIP8CSpeciesSt6vectorIS1_SaIS1_EEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #8
  call void @_ZN8CSpecies5PurgeEv(ptr noundef nonnull align 8 dereferenceable(168) %79)
  %80 = call noundef ptr @_ZNK9__gnu_cxx17__normal_iteratorIP8CSpeciesSt6vectorIS1_SaIS1_EEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #8
  call void @_ZN8CSpecies16AgeOneGenerationEv(ptr noundef nonnull align 8 dereferenceable(168) %80)
  %81 = call ptr @_ZN9__gnu_cxx17__normal_iteratorIP8CSpeciesSt6vectorIS1_SaIS1_EEEppEi(ptr noundef nonnull align 8 dereferenceable(8) %7, i32 noundef 0) #8
  %82 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %9, i32 0, i32 0
  store ptr %81, ptr %82, align 8
  br label %73, !llvm.loop !9

83:                                               ; preds = %73
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #8
  store i32 0, ptr %10, align 4, !tbaa !11
  br label %84

84:                                               ; preds = %96, %83
  %85 = load i32, ptr %10, align 4, !tbaa !11
  %86 = sext i32 %85 to i64
  %87 = getelementptr inbounds %class.Cga, ptr %60, i32 0, i32 0
  %88 = call noundef i64 @_ZNKSt6vectorI7CGenomeSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %87) #8
  %89 = icmp ult i64 %86, %88
  br i1 %89, label %91, label %90

90:                                               ; preds = %84
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #8
  br label %99

91:                                               ; preds = %84
  %92 = getelementptr inbounds %class.Cga, ptr %60, i32 0, i32 0
  %93 = load i32, ptr %10, align 4, !tbaa !11
  %94 = sext i32 %93 to i64
  %95 = call noundef nonnull align 8 dereferenceable(108) ptr @_ZNSt6vectorI7CGenomeSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %92, i64 noundef %94) #8
  call void @_ZN7CGenome15DeletePhenotypeEv(ptr noundef nonnull align 8 dereferenceable(108) %95)
  br label %96

96:                                               ; preds = %91
  %97 = load i32, ptr %10, align 4, !tbaa !11
  %98 = add nsw i32 %97, 1
  store i32 %98, ptr %10, align 4, !tbaa !11
  br label %84, !llvm.loop !13

99:                                               ; preds = %90
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #8
  store i32 0, ptr %11, align 4, !tbaa !11
  br label %100

100:                                              ; preds = %117, %99
  %101 = load i32, ptr %11, align 4, !tbaa !11
  %102 = sext i32 %101 to i64
  %103 = getelementptr inbounds %class.Cga, ptr %60, i32 0, i32 0
  %104 = call noundef i64 @_ZNKSt6vectorI7CGenomeSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %103) #8
  %105 = icmp ult i64 %102, %104
  br i1 %105, label %107, label %106

106:                                              ; preds = %100
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #8
  br label %120

107:                                              ; preds = %100
  %108 = getelementptr inbounds %class.Cga, ptr %60, i32 0, i32 0
  %109 = load i32, ptr %11, align 4, !tbaa !11
  %110 = sext i32 %109 to i64
  %111 = call noundef nonnull align 8 dereferenceable(108) ptr @_ZNSt6vectorI7CGenomeSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %108, i64 noundef %110) #8
  %112 = load ptr, ptr %6, align 8, !tbaa !5
  %113 = load i32, ptr %11, align 4, !tbaa !11
  %114 = sext i32 %113 to i64
  %115 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %112, i64 noundef %114) #8
  %116 = load double, ptr %115, align 8, !tbaa !14
  call void @_ZN7CGenome10SetFitnessEd(ptr noundef nonnull align 8 dereferenceable(108) %111, double noundef %116)
  br label %117

117:                                              ; preds = %107
  %118 = load i32, ptr %11, align 4, !tbaa !11
  %119 = add nsw i32 %118, 1
  store i32 %119, ptr %11, align 4, !tbaa !11
  br label %100, !llvm.loop !16

120:                                              ; preds = %106
  call void @_ZN3Cga13SortAndRecordEv(ptr noundef nonnull align 8 dereferenceable(265) %60)
  call void @_ZN3Cga31SpeciateAndCalculateSpawnLevelsEv(ptr noundef nonnull align 8 dereferenceable(265) %60)
  call void @_ZN3Cga24TestOldSpeciesForKillingEv(ptr noundef nonnull align 8 dereferenceable(265) %60)
  call void @llvm.lifetime.start.p0(i64 24, ptr %12) #8
  call void @_ZNSt6vectorI7CGenomeSaIS0_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %12) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #8
  store i32 0, ptr %13, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 112, ptr %14) #8
  invoke void @_ZN7CGenomeC1Ev(ptr noundef nonnull align 8 dereferenceable(108) %14)
          to label %121 unwind label %129

121:                                              ; preds = %120
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #8
  store i32 0, ptr %17, align 4, !tbaa !11
  br label %122

122:                                              ; preds = %332, %121
  %123 = load i32, ptr %17, align 4, !tbaa !11
  %124 = sext i32 %123 to i64
  %125 = getelementptr inbounds %class.Cga, ptr %60, i32 0, i32 5
  %126 = call noundef i64 @_ZNKSt6vectorI8CSpeciesSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %125) #8
  %127 = icmp ult i64 %124, %126
  br i1 %127, label %133, label %128

128:                                              ; preds = %122
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #8
  br label %335

129:                                              ; preds = %120
  %130 = landingpad { ptr, i32 }
          cleanup
  %131 = extractvalue { ptr, i32 } %130, 0
  store ptr %131, ptr %15, align 8
  %132 = extractvalue { ptr, i32 } %130, 1
  store i32 %132, ptr %16, align 4
  br label %895

133:                                              ; preds = %122
  %134 = load i32, ptr %13, align 4, !tbaa !11
  %135 = icmp slt i32 %134, 3000
  br i1 %135, label %136, label %331

136:                                              ; preds = %133
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #8
  %137 = getelementptr inbounds %class.Cga, ptr %60, i32 0, i32 5
  %138 = load i32, ptr %17, align 4, !tbaa !11
  %139 = sext i32 %138 to i64
  %140 = call noundef nonnull align 8 dereferenceable(168) ptr @_ZNSt6vectorI8CSpeciesSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %137, i64 noundef %139) #8
  %141 = invoke noundef double @_ZNK8CSpecies10NumToSpawnEv(ptr noundef nonnull align 8 dereferenceable(168) %140)
          to label %142 unwind label %160

142:                                              ; preds = %136
  %143 = invoke noundef i32 @_Z7Roundedd(double noundef %141)
          to label %144 unwind label %160

144:                                              ; preds = %142
  store i32 %143, ptr %18, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr %19) #8
  store i8 0, ptr %19, align 1, !tbaa !17
  br label %145

145:                                              ; preds = %327, %144
  %146 = load i32, ptr %18, align 4, !tbaa !11
  %147 = add nsw i32 %146, -1
  store i32 %147, ptr %18, align 4, !tbaa !11
  %148 = icmp ne i32 %146, 0
  br i1 %148, label %149, label %328

149:                                              ; preds = %145
  %150 = load i8, ptr %19, align 1, !tbaa !17, !range !19, !noundef !20
  %151 = trunc i8 %150 to i1
  br i1 %151, label %173, label %152

152:                                              ; preds = %149
  call void @llvm.lifetime.start.p0(i64 112, ptr %20) #8
  %153 = getelementptr inbounds %class.Cga, ptr %60, i32 0, i32 5
  %154 = load i32, ptr %17, align 4, !tbaa !11
  %155 = sext i32 %154 to i64
  %156 = call noundef nonnull align 8 dereferenceable(168) ptr @_ZNSt6vectorI8CSpeciesSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %153, i64 noundef %155) #8
  invoke void @_ZNK8CSpecies6LeaderEv(ptr dead_on_unwind writable sret(%class.CGenome) align 8 %20, ptr noundef nonnull align 8 dereferenceable(168) %156)
          to label %157 unwind label %164

157:                                              ; preds = %152
  %158 = invoke noundef nonnull align 8 dereferenceable(108) ptr @_ZN7CGenomeaSERKS_(ptr noundef nonnull align 8 dereferenceable(108) %14, ptr noundef nonnull align 8 dereferenceable(108) %20)
          to label %159 unwind label %168

159:                                              ; preds = %157
  call void @_ZN7CGenomeD1Ev(ptr noundef nonnull align 8 dereferenceable(108) %20) #8
  call void @llvm.lifetime.end.p0(i64 112, ptr %20) #8
  store i8 1, ptr %19, align 1, !tbaa !17
  br label %319

160:                                              ; preds = %142, %136
  %161 = landingpad { ptr, i32 }
          cleanup
  %162 = extractvalue { ptr, i32 } %161, 0
  store ptr %162, ptr %15, align 8
  %163 = extractvalue { ptr, i32 } %161, 1
  store i32 %163, ptr %16, align 4
  br label %330

164:                                              ; preds = %152
  %165 = landingpad { ptr, i32 }
          cleanup
  %166 = extractvalue { ptr, i32 } %165, 0
  store ptr %166, ptr %15, align 8
  %167 = extractvalue { ptr, i32 } %165, 1
  store i32 %167, ptr %16, align 4
  br label %172

168:                                              ; preds = %157
  %169 = landingpad { ptr, i32 }
          cleanup
  %170 = extractvalue { ptr, i32 } %169, 0
  store ptr %170, ptr %15, align 8
  %171 = extractvalue { ptr, i32 } %169, 1
  store i32 %171, ptr %16, align 4
  call void @_ZN7CGenomeD1Ev(ptr noundef nonnull align 8 dereferenceable(108) %20) #8
  br label %172

172:                                              ; preds = %168, %164
  call void @llvm.lifetime.end.p0(i64 112, ptr %20) #8
  br label %329

173:                                              ; preds = %149
  %174 = getelementptr inbounds %class.Cga, ptr %60, i32 0, i32 5
  %175 = load i32, ptr %17, align 4, !tbaa !11
  %176 = sext i32 %175 to i64
  %177 = call noundef nonnull align 8 dereferenceable(168) ptr @_ZNSt6vectorI8CSpeciesSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %174, i64 noundef %176) #8
  %178 = invoke noundef i32 @_ZNK8CSpecies10NumMembersEv(ptr noundef nonnull align 8 dereferenceable(168) %177)
          to label %179 unwind label %189

179:                                              ; preds = %173
  %180 = icmp eq i32 %178, 1
  br i1 %180, label %181, label %202

181:                                              ; preds = %179
  call void @llvm.lifetime.start.p0(i64 112, ptr %21) #8
  %182 = getelementptr inbounds %class.Cga, ptr %60, i32 0, i32 5
  %183 = load i32, ptr %17, align 4, !tbaa !11
  %184 = sext i32 %183 to i64
  %185 = call noundef nonnull align 8 dereferenceable(168) ptr @_ZNSt6vectorI8CSpeciesSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %182, i64 noundef %184) #8
  invoke void @_ZN8CSpecies5SpawnEv(ptr dead_on_unwind writable sret(%class.CGenome) align 8 %21, ptr noundef nonnull align 8 dereferenceable(168) %185)
          to label %186 unwind label %193

186:                                              ; preds = %181
  %187 = invoke noundef nonnull align 8 dereferenceable(108) ptr @_ZN7CGenomeaSERKS_(ptr noundef nonnull align 8 dereferenceable(108) %14, ptr noundef nonnull align 8 dereferenceable(108) %21)
          to label %188 unwind label %197

188:                                              ; preds = %186
  call void @_ZN7CGenomeD1Ev(ptr noundef nonnull align 8 dereferenceable(108) %21) #8
  call void @llvm.lifetime.end.p0(i64 112, ptr %21) #8
  br label %290

189:                                              ; preds = %320, %319, %317, %316, %312, %308, %300, %296, %290, %173
  %190 = landingpad { ptr, i32 }
          cleanup
  %191 = extractvalue { ptr, i32 } %190, 0
  store ptr %191, ptr %15, align 8
  %192 = extractvalue { ptr, i32 } %190, 1
  store i32 %192, ptr %16, align 4
  br label %329

193:                                              ; preds = %181
  %194 = landingpad { ptr, i32 }
          cleanup
  %195 = extractvalue { ptr, i32 } %194, 0
  store ptr %195, ptr %15, align 8
  %196 = extractvalue { ptr, i32 } %194, 1
  store i32 %196, ptr %16, align 4
  br label %201

197:                                              ; preds = %186
  %198 = landingpad { ptr, i32 }
          cleanup
  %199 = extractvalue { ptr, i32 } %198, 0
  store ptr %199, ptr %15, align 8
  %200 = extractvalue { ptr, i32 } %198, 1
  store i32 %200, ptr %16, align 4
  call void @_ZN7CGenomeD1Ev(ptr noundef nonnull align 8 dereferenceable(108) %21) #8
  br label %201

201:                                              ; preds = %197, %193
  call void @llvm.lifetime.end.p0(i64 112, ptr %21) #8
  br label %329

202:                                              ; preds = %179
  call void @llvm.lifetime.start.p0(i64 112, ptr %22) #8
  %203 = getelementptr inbounds %class.Cga, ptr %60, i32 0, i32 5
  %204 = load i32, ptr %17, align 4, !tbaa !11
  %205 = sext i32 %204 to i64
  %206 = call noundef nonnull align 8 dereferenceable(168) ptr @_ZNSt6vectorI8CSpeciesSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %203, i64 noundef %205) #8
  invoke void @_ZN8CSpecies5SpawnEv(ptr dead_on_unwind writable sret(%class.CGenome) align 8 %22, ptr noundef nonnull align 8 dereferenceable(168) %206)
          to label %207 unwind label %237

207:                                              ; preds = %202
  %208 = invoke noundef double @_Z10RandDoublev()
          to label %209 unwind label %241

209:                                              ; preds = %207
  %210 = fcmp olt double %208, 0x3FE6666666666666
  br i1 %210, label %211, label %284

211:                                              ; preds = %209
  call void @llvm.lifetime.start.p0(i64 112, ptr %23) #8
  %212 = getelementptr inbounds %class.Cga, ptr %60, i32 0, i32 5
  %213 = load i32, ptr %17, align 4, !tbaa !11
  %214 = sext i32 %213 to i64
  %215 = call noundef nonnull align 8 dereferenceable(168) ptr @_ZNSt6vectorI8CSpeciesSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %212, i64 noundef %214) #8
  invoke void @_ZN8CSpecies5SpawnEv(ptr dead_on_unwind writable sret(%class.CGenome) align 8 %23, ptr noundef nonnull align 8 dereferenceable(168) %215)
          to label %216 unwind label %245

216:                                              ; preds = %211
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #8
  store i32 5, ptr %24, align 4, !tbaa !11
  br label %217

217:                                              ; preds = %236, %216
  %218 = invoke noundef i32 @_ZNK7CGenome2IDEv(ptr noundef nonnull align 8 dereferenceable(108) %22)
          to label %219 unwind label %249

219:                                              ; preds = %217
  %220 = invoke noundef i32 @_ZNK7CGenome2IDEv(ptr noundef nonnull align 8 dereferenceable(108) %23)
          to label %221 unwind label %249

221:                                              ; preds = %219
  %222 = icmp eq i32 %218, %220
  br i1 %222, label %223, label %227

223:                                              ; preds = %221
  %224 = load i32, ptr %24, align 4, !tbaa !11
  %225 = add nsw i32 %224, -1
  store i32 %225, ptr %24, align 4, !tbaa !11
  %226 = icmp ne i32 %224, 0
  br label %227

227:                                              ; preds = %223, %221
  %228 = phi i1 [ false, %221 ], [ %226, %223 ]
  br i1 %228, label %229, label %262

229:                                              ; preds = %227
  call void @llvm.lifetime.start.p0(i64 112, ptr %25) #8
  %230 = getelementptr inbounds %class.Cga, ptr %60, i32 0, i32 5
  %231 = load i32, ptr %17, align 4, !tbaa !11
  %232 = sext i32 %231 to i64
  %233 = call noundef nonnull align 8 dereferenceable(168) ptr @_ZNSt6vectorI8CSpeciesSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %230, i64 noundef %232) #8
  invoke void @_ZN8CSpecies5SpawnEv(ptr dead_on_unwind writable sret(%class.CGenome) align 8 %25, ptr noundef nonnull align 8 dereferenceable(168) %233)
          to label %234 unwind label %253

234:                                              ; preds = %229
  %235 = invoke noundef nonnull align 8 dereferenceable(108) ptr @_ZN7CGenomeaSERKS_(ptr noundef nonnull align 8 dereferenceable(108) %23, ptr noundef nonnull align 8 dereferenceable(108) %25)
          to label %236 unwind label %257

236:                                              ; preds = %234
  call void @_ZN7CGenomeD1Ev(ptr noundef nonnull align 8 dereferenceable(108) %25) #8
  call void @llvm.lifetime.end.p0(i64 112, ptr %25) #8
  br label %217, !llvm.loop !21

237:                                              ; preds = %202
  %238 = landingpad { ptr, i32 }
          cleanup
  %239 = extractvalue { ptr, i32 } %238, 0
  store ptr %239, ptr %15, align 8
  %240 = extractvalue { ptr, i32 } %238, 1
  store i32 %240, ptr %16, align 4
  br label %289

241:                                              ; preds = %284, %207
  %242 = landingpad { ptr, i32 }
          cleanup
  %243 = extractvalue { ptr, i32 } %242, 0
  store ptr %243, ptr %15, align 8
  %244 = extractvalue { ptr, i32 } %242, 1
  store i32 %244, ptr %16, align 4
  br label %288

245:                                              ; preds = %211
  %246 = landingpad { ptr, i32 }
          cleanup
  %247 = extractvalue { ptr, i32 } %246, 0
  store ptr %247, ptr %15, align 8
  %248 = extractvalue { ptr, i32 } %246, 1
  store i32 %248, ptr %16, align 4
  br label %283

249:                                              ; preds = %264, %262, %219, %217
  %250 = landingpad { ptr, i32 }
          cleanup
  %251 = extractvalue { ptr, i32 } %250, 0
  store ptr %251, ptr %15, align 8
  %252 = extractvalue { ptr, i32 } %250, 1
  store i32 %252, ptr %16, align 4
  br label %282

253:                                              ; preds = %229
  %254 = landingpad { ptr, i32 }
          cleanup
  %255 = extractvalue { ptr, i32 } %254, 0
  store ptr %255, ptr %15, align 8
  %256 = extractvalue { ptr, i32 } %254, 1
  store i32 %256, ptr %16, align 4
  br label %261

257:                                              ; preds = %234
  %258 = landingpad { ptr, i32 }
          cleanup
  %259 = extractvalue { ptr, i32 } %258, 0
  store ptr %259, ptr %15, align 8
  %260 = extractvalue { ptr, i32 } %258, 1
  store i32 %260, ptr %16, align 4
  call void @_ZN7CGenomeD1Ev(ptr noundef nonnull align 8 dereferenceable(108) %25) #8
  br label %261

261:                                              ; preds = %257, %253
  call void @llvm.lifetime.end.p0(i64 112, ptr %25) #8
  br label %282

262:                                              ; preds = %227
  %263 = invoke noundef i32 @_ZNK7CGenome2IDEv(ptr noundef nonnull align 8 dereferenceable(108) %22)
          to label %264 unwind label %249

264:                                              ; preds = %262
  %265 = invoke noundef i32 @_ZNK7CGenome2IDEv(ptr noundef nonnull align 8 dereferenceable(108) %23)
          to label %266 unwind label %249

266:                                              ; preds = %264
  %267 = icmp ne i32 %263, %265
  br i1 %267, label %268, label %281

268:                                              ; preds = %266
  call void @llvm.lifetime.start.p0(i64 112, ptr %26) #8
  invoke void @_ZN3Cga9CrossoverER7CGenomeS1_(ptr dead_on_unwind writable sret(%class.CGenome) align 8 %26, ptr noundef nonnull align 8 dereferenceable(265) %60, ptr noundef nonnull align 8 dereferenceable(108) %22, ptr noundef nonnull align 8 dereferenceable(108) %23)
          to label %269 unwind label %272

269:                                              ; preds = %268
  %270 = invoke noundef nonnull align 8 dereferenceable(108) ptr @_ZN7CGenomeaSERKS_(ptr noundef nonnull align 8 dereferenceable(108) %14, ptr noundef nonnull align 8 dereferenceable(108) %26)
          to label %271 unwind label %276

271:                                              ; preds = %269
  call void @_ZN7CGenomeD1Ev(ptr noundef nonnull align 8 dereferenceable(108) %26) #8
  call void @llvm.lifetime.end.p0(i64 112, ptr %26) #8
  br label %281

272:                                              ; preds = %268
  %273 = landingpad { ptr, i32 }
          cleanup
  %274 = extractvalue { ptr, i32 } %273, 0
  store ptr %274, ptr %15, align 8
  %275 = extractvalue { ptr, i32 } %273, 1
  store i32 %275, ptr %16, align 4
  br label %280

276:                                              ; preds = %269
  %277 = landingpad { ptr, i32 }
          cleanup
  %278 = extractvalue { ptr, i32 } %277, 0
  store ptr %278, ptr %15, align 8
  %279 = extractvalue { ptr, i32 } %277, 1
  store i32 %279, ptr %16, align 4
  call void @_ZN7CGenomeD1Ev(ptr noundef nonnull align 8 dereferenceable(108) %26) #8
  br label %280

280:                                              ; preds = %276, %272
  call void @llvm.lifetime.end.p0(i64 112, ptr %26) #8
  br label %282

281:                                              ; preds = %271, %266
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #8
  call void @_ZN7CGenomeD1Ev(ptr noundef nonnull align 8 dereferenceable(108) %23) #8
  call void @llvm.lifetime.end.p0(i64 112, ptr %23) #8
  br label %287

282:                                              ; preds = %280, %261, %249
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #8
  call void @_ZN7CGenomeD1Ev(ptr noundef nonnull align 8 dereferenceable(108) %23) #8
  br label %283

283:                                              ; preds = %282, %245
  call void @llvm.lifetime.end.p0(i64 112, ptr %23) #8
  br label %288

284:                                              ; preds = %209
  %285 = invoke noundef nonnull align 8 dereferenceable(108) ptr @_ZN7CGenomeaSERKS_(ptr noundef nonnull align 8 dereferenceable(108) %14, ptr noundef nonnull align 8 dereferenceable(108) %22)
          to label %286 unwind label %241

286:                                              ; preds = %284
  br label %287

287:                                              ; preds = %286, %281
  call void @_ZN7CGenomeD1Ev(ptr noundef nonnull align 8 dereferenceable(108) %22) #8
  call void @llvm.lifetime.end.p0(i64 112, ptr %22) #8
  br label %290

288:                                              ; preds = %283, %241
  call void @_ZN7CGenomeD1Ev(ptr noundef nonnull align 8 dereferenceable(108) %22) #8
  br label %289

289:                                              ; preds = %288, %237
  call void @llvm.lifetime.end.p0(i64 112, ptr %22) #8
  br label %329

290:                                              ; preds = %287, %188
  %291 = getelementptr inbounds %class.Cga, ptr %60, i32 0, i32 8
  %292 = load i32, ptr %291, align 4, !tbaa !22
  %293 = add nsw i32 %292, 1
  store i32 %293, ptr %291, align 4, !tbaa !22
  %294 = getelementptr inbounds %class.Cga, ptr %60, i32 0, i32 8
  %295 = load i32, ptr %294, align 4, !tbaa !22
  invoke void @_ZN7CGenome5SetIDEi(ptr noundef nonnull align 8 dereferenceable(108) %14, i32 noundef %295)
          to label %296 unwind label %189

296:                                              ; preds = %290
  %297 = invoke noundef i32 @_ZNK7CGenome10NumNeuronsEv(ptr noundef nonnull align 8 dereferenceable(108) %14)
          to label %298 unwind label %189

298:                                              ; preds = %296
  %299 = icmp slt i32 %297, 3000
  br i1 %299, label %300, label %304

300:                                              ; preds = %298
  %301 = getelementptr inbounds %class.Cga, ptr %60, i32 0, i32 6
  %302 = load ptr, ptr %301, align 8, !tbaa !37
  invoke void @_ZN7CGenome9AddNeuronEdR11CInnovationi(ptr noundef nonnull align 8 dereferenceable(108) %14, double noundef 5.000000e-02, ptr noundef nonnull align 8 dereferenceable(32) %302, i32 noundef 10)
          to label %303 unwind label %189

303:                                              ; preds = %300
  br label %304

304:                                              ; preds = %303, %298
  %305 = getelementptr inbounds %class.Cga, ptr %60, i32 0, i32 19
  %306 = load i8, ptr %305, align 8, !tbaa !38, !range !19, !noundef !20
  %307 = trunc i8 %306 to i1
  br i1 %307, label %308, label %312

308:                                              ; preds = %304
  %309 = getelementptr inbounds %class.Cga, ptr %60, i32 0, i32 6
  %310 = load ptr, ptr %309, align 8, !tbaa !37
  invoke void @_ZN7CGenome7AddLinkEddR11CInnovationii(ptr noundef nonnull align 8 dereferenceable(108) %14, double noundef 4.000000e-01, double noundef 0.000000e+00, ptr noundef nonnull align 8 dereferenceable(32) %310, i32 noundef 10, i32 noundef 10)
          to label %311 unwind label %189

311:                                              ; preds = %308
  br label %316

312:                                              ; preds = %304
  %313 = getelementptr inbounds %class.Cga, ptr %60, i32 0, i32 6
  %314 = load ptr, ptr %313, align 8, !tbaa !37
  invoke void @_ZN7CGenome7AddLinkEddR11CInnovationii(ptr noundef nonnull align 8 dereferenceable(108) %14, double noundef 4.000000e-01, double noundef 5.000000e-04, ptr noundef nonnull align 8 dereferenceable(32) %314, i32 noundef 10, i32 noundef 10)
          to label %315 unwind label %189

315:                                              ; preds = %312
  br label %316

316:                                              ; preds = %315, %311
  invoke void @_ZN7CGenome13MutateWeightsEddd(ptr noundef nonnull align 8 dereferenceable(108) %14, double noundef 1.200000e+00, double noundef 4.000000e-01, double noundef 1.000000e+00)
          to label %317 unwind label %189

317:                                              ; preds = %316
  invoke void @_ZN7CGenome24MutateActivationResponseEdd(ptr noundef nonnull align 8 dereferenceable(108) %14, double noundef 5.000000e-01, double noundef 5.000000e-01)
          to label %318 unwind label %189

318:                                              ; preds = %317
  br label %319

319:                                              ; preds = %318, %159
  invoke void @_ZN7CGenome9SortGenesEv(ptr noundef nonnull align 8 dereferenceable(108) %14)
          to label %320 unwind label %189

320:                                              ; preds = %319
  invoke void @_ZNSt6vectorI7CGenomeSaIS0_EE9push_backERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %12, ptr noundef nonnull align 8 dereferenceable(108) %14)
          to label %321 unwind label %189

321:                                              ; preds = %320
  %322 = load i32, ptr %13, align 4, !tbaa !11
  %323 = add nsw i32 %322, 1
  store i32 %323, ptr %13, align 4, !tbaa !11
  %324 = load i32, ptr %13, align 4, !tbaa !11
  %325 = icmp eq i32 %324, 3000
  br i1 %325, label %326, label %327

326:                                              ; preds = %321
  store i32 0, ptr %18, align 4, !tbaa !11
  br label %327

327:                                              ; preds = %326, %321
  br label %145, !llvm.loop !39

328:                                              ; preds = %145
  call void @llvm.lifetime.end.p0(i64 1, ptr %19) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #8
  br label %331

329:                                              ; preds = %289, %201, %189, %172
  call void @llvm.lifetime.end.p0(i64 1, ptr %19) #8
  br label %330

330:                                              ; preds = %329, %160
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #8
  br label %894

331:                                              ; preds = %328, %133
  br label %332

332:                                              ; preds = %331
  %333 = load i32, ptr %17, align 4, !tbaa !11
  %334 = add nsw i32 %333, 1
  store i32 %334, ptr %17, align 4, !tbaa !11
  br label %122, !llvm.loop !40

335:                                              ; preds = %128
  br label %336

336:                                              ; preds = %352, %335
  %337 = load i32, ptr %13, align 4, !tbaa !11
  %338 = icmp sgt i32 %337, 3000
  br i1 %338, label %339, label %365

339:                                              ; preds = %336
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #8
  %340 = load i32, ptr %13, align 4, !tbaa !11
  %341 = invoke noundef i32 @_Z7RandIntii(i32 noundef 0, i32 noundef %340)
          to label %342 unwind label %356

342:                                              ; preds = %339
  store i32 %341, ptr %27, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #8
  %343 = call ptr @_ZNSt6vectorI7CGenomeSaIS0_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %12) #8
  %344 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.45", ptr %30, i32 0, i32 0
  store ptr %343, ptr %344, align 8
  %345 = load i32, ptr %27, align 4, !tbaa !11
  %346 = sext i32 %345 to i64
  %347 = call ptr @_ZNK9__gnu_cxx17__normal_iteratorIP7CGenomeSt6vectorIS1_SaIS1_EEEplEl(ptr noundef nonnull align 8 dereferenceable(8) %30, i64 noundef %346) #8
  %348 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.45", ptr %29, i32 0, i32 0
  store ptr %347, ptr %348, align 8
  call void @_ZN9__gnu_cxx17__normal_iteratorIPK7CGenomeSt6vectorIS1_SaIS1_EEEC2IPS1_vEERKNS0_IT_S6_EE(ptr noundef nonnull align 8 dereferenceable(8) %28, ptr noundef nonnull align 8 dereferenceable(8) %29) #8
  %349 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.46", ptr %28, i32 0, i32 0
  %350 = load ptr, ptr %349, align 8
  %351 = invoke ptr @_ZNSt6vectorI7CGenomeSaIS0_EE5eraseEN9__gnu_cxx17__normal_iteratorIPKS0_S2_EE(ptr noundef nonnull align 8 dereferenceable(24) %12, ptr %350)
          to label %352 unwind label %360

352:                                              ; preds = %342
  %353 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.45", ptr %31, i32 0, i32 0
  store ptr %351, ptr %353, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #8
  %354 = load i32, ptr %13, align 4, !tbaa !11
  %355 = add nsw i32 %354, -1
  store i32 %355, ptr %13, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #8
  br label %336, !llvm.loop !41

356:                                              ; preds = %339
  %357 = landingpad { ptr, i32 }
          cleanup
  %358 = extractvalue { ptr, i32 } %357, 0
  store ptr %358, ptr %15, align 8
  %359 = extractvalue { ptr, i32 } %357, 1
  store i32 %359, ptr %16, align 4
  br label %364

360:                                              ; preds = %342
  %361 = landingpad { ptr, i32 }
          cleanup
  %362 = extractvalue { ptr, i32 } %361, 0
  store ptr %362, ptr %15, align 8
  %363 = extractvalue { ptr, i32 } %361, 1
  store i32 %363, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #8
  br label %364

364:                                              ; preds = %360, %356
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #8
  br label %894

365:                                              ; preds = %336
  call void @llvm.lifetime.start.p0(i64 24, ptr %32) #8
  call void @_ZNSt6vectorIiSaIiEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %32) #8
  %366 = getelementptr inbounds %class.Cga, ptr %60, i32 0, i32 22
  %367 = load i32, ptr %366, align 4, !tbaa !42
  switch i32 %367, label %649 [
    i32 0, label %368
    i32 1, label %481
  ]

368:                                              ; preds = %365
  %369 = load i32, ptr %13, align 4, !tbaa !11
  %370 = icmp slt i32 %369, 3000
  br i1 %370, label %371, label %480

371:                                              ; preds = %368
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #8
  %372 = load i32, ptr %13, align 4, !tbaa !11
  %373 = sub nsw i32 3000, %372
  store i32 %373, ptr %33, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 112, ptr %34) #8
  invoke void @_ZN7CGenomeC1Ev(ptr noundef nonnull align 8 dereferenceable(108) %34)
          to label %374 unwind label %399

374:                                              ; preds = %371
  call void @llvm.lifetime.start.p0(i64 1, ptr %35) #8
  br label %375

375:                                              ; preds = %475, %374
  %376 = load i32, ptr %33, align 4, !tbaa !11
  %377 = add nsw i32 %376, -1
  store i32 %377, ptr %33, align 4, !tbaa !11
  %378 = icmp ne i32 %376, 0
  br i1 %378, label %379, label %477

379:                                              ; preds = %375
  store i8 1, ptr %35, align 1, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 112, ptr %36) #8
  %380 = getelementptr inbounds %class.Cga, ptr %60, i32 0, i32 10
  %381 = load i32, ptr %380, align 4, !tbaa !43
  %382 = sdiv i32 %381, 20
  invoke void @_ZN3Cga19TournamentSelectionEi(ptr dead_on_unwind writable sret(%class.CGenome) align 8 %36, ptr noundef nonnull align 8 dereferenceable(265) %60, i32 noundef %382)
          to label %383 unwind label %403

383:                                              ; preds = %379
  %384 = invoke noundef nonnull align 8 dereferenceable(108) ptr @_ZN7CGenomeaSERKS_(ptr noundef nonnull align 8 dereferenceable(108) %34, ptr noundef nonnull align 8 dereferenceable(108) %36)
          to label %385 unwind label %407

385:                                              ; preds = %383
  call void @_ZN7CGenomeD1Ev(ptr noundef nonnull align 8 dereferenceable(108) %36) #8
  call void @llvm.lifetime.end.p0(i64 112, ptr %36) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #8
  %386 = invoke noundef i32 @_ZNK7CGenome2IDEv(ptr noundef nonnull align 8 dereferenceable(108) %34)
          to label %387 unwind label %412

387:                                              ; preds = %385
  store i32 %386, ptr %37, align 4, !tbaa !11
  %388 = getelementptr inbounds %class.Cga, ptr %60, i32 0, i32 20
  %389 = load i8, ptr %388, align 1, !tbaa !44, !range !19, !noundef !20
  %390 = trunc i8 %389 to i1
  br i1 %390, label %391, label %416

391:                                              ; preds = %387
  %392 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.1)
          to label %393 unwind label %412

393:                                              ; preds = %391
  %394 = load i32, ptr %37, align 4, !tbaa !11
  %395 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %392, i32 noundef %394)
          to label %396 unwind label %412

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

398:                                              ; preds = %396
  br label %416

399:                                              ; preds = %371
  %400 = landingpad { ptr, i32 }
          cleanup
  %401 = extractvalue { ptr, i32 } %400, 0
  store ptr %401, ptr %15, align 8
  %402 = extractvalue { ptr, i32 } %400, 1
  store i32 %402, ptr %16, align 4
  br label %479

403:                                              ; preds = %379
  %404 = landingpad { ptr, i32 }
          cleanup
  %405 = extractvalue { ptr, i32 } %404, 0
  store ptr %405, ptr %15, align 8
  %406 = extractvalue { ptr, i32 } %404, 1
  store i32 %406, ptr %16, align 4
  br label %411

407:                                              ; preds = %383
  %408 = landingpad { ptr, i32 }
          cleanup
  %409 = extractvalue { ptr, i32 } %408, 0
  store ptr %409, ptr %15, align 8
  %410 = extractvalue { ptr, i32 } %408, 1
  store i32 %410, ptr %16, align 4
  call void @_ZN7CGenomeD1Ev(ptr noundef nonnull align 8 dereferenceable(108) %36) #8
  br label %411

411:                                              ; preds = %407, %403
  call void @llvm.lifetime.end.p0(i64 112, ptr %36) #8
  br label %478

412:                                              ; preds = %469, %467, %464, %462, %456, %453, %450, %448, %396, %393, %391, %385
  %413 = landingpad { ptr, i32 }
          cleanup
  %414 = extractvalue { ptr, i32 } %413, 0
  store ptr %414, ptr %15, align 8
  %415 = extractvalue { ptr, i32 } %413, 1
  store i32 %415, ptr %16, align 4
  br label %476

416:                                              ; preds = %398, %387
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #8
  store i32 0, ptr %38, align 4, !tbaa !11
  br label %417

417:                                              ; preds = %437, %416
  %418 = load i32, ptr %38, align 4, !tbaa !11
  %419 = zext i32 %418 to i64
  %420 = call noundef i64 @_ZNKSt6vectorI7CGenomeSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %12) #8
  %421 = icmp ult i64 %419, %420
  br i1 %421, label %423, label %422

422:                                              ; preds = %417
  store i32 22, ptr %39, align 4
  br label %440

423:                                              ; preds = %417
  %424 = load i32, ptr %37, align 4, !tbaa !11
  %425 = load i32, ptr %38, align 4, !tbaa !11
  %426 = zext i32 %425 to i64
  %427 = call noundef nonnull align 8 dereferenceable(108) ptr @_ZNSt6vectorI7CGenomeSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %12, i64 noundef %426) #8
  %428 = invoke noundef i32 @_ZNK7CGenome2IDEv(ptr noundef nonnull align 8 dereferenceable(108) %427)
          to label %429 unwind label %432

429:                                              ; preds = %423
  %430 = icmp eq i32 %424, %428
  br i1 %430, label %431, label %436

431:                                              ; preds = %429
  store i8 0, ptr %35, align 1, !tbaa !17
  store i32 22, ptr %39, align 4
  br label %440

432:                                              ; preds = %423
  %433 = landingpad { ptr, i32 }
          cleanup
  %434 = extractvalue { ptr, i32 } %433, 0
  store ptr %434, ptr %15, align 8
  %435 = extractvalue { ptr, i32 } %433, 1
  store i32 %435, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #8
  br label %476

436:                                              ; preds = %429
  br label %437

437:                                              ; preds = %436
  %438 = load i32, ptr %38, align 4, !tbaa !11
  %439 = add i32 %438, 1
  store i32 %439, ptr %38, align 4, !tbaa !11
  br label %417, !llvm.loop !45

440:                                              ; preds = %431, %422
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #8
  br label %441

441:                                              ; preds = %440
  %442 = load i8, ptr %35, align 1, !tbaa !17, !range !19, !noundef !20
  %443 = trunc i8 %442 to i1
  br i1 %443, label %444, label %458

444:                                              ; preds = %441
  %445 = getelementptr inbounds %class.Cga, ptr %60, i32 0, i32 20
  %446 = load i8, ptr %445, align 1, !tbaa !44, !range !19, !noundef !20
  %447 = trunc i8 %446 to i1
  br i1 %447, label %448, label %456

448:                                              ; preds = %444
  %449 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.2)
          to label %450 unwind label %412

450:                                              ; preds = %448
  %451 = load i32, ptr %37, align 4, !tbaa !11
  %452 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %449, i32 noundef %451)
          to label %453 unwind label %412

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

455:                                              ; preds = %453
  br label %456

456:                                              ; preds = %455, %444
  invoke void @_ZNSt6vectorI7CGenomeSaIS0_EE9push_backERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %12, ptr noundef nonnull align 8 dereferenceable(108) %34)
          to label %457 unwind label %412

457:                                              ; preds = %456
  br label %475

458:                                              ; preds = %441
  %459 = getelementptr inbounds %class.Cga, ptr %60, i32 0, i32 20
  %460 = load i8, ptr %459, align 1, !tbaa !44, !range !19, !noundef !20
  %461 = trunc i8 %460 to i1
  br i1 %461, label %462, label %472

462:                                              ; preds = %458
  %463 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.3)
          to label %464 unwind label %412

464:                                              ; preds = %462
  %465 = load i32, ptr %37, align 4, !tbaa !11
  %466 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %463, i32 noundef %465)
          to label %467 unwind label %412

467:                                              ; preds = %464
  %468 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %466, ptr noundef @.str.4)
          to label %469 unwind label %412

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

471:                                              ; preds = %469
  br label %472

472:                                              ; preds = %471, %458
  %473 = load i32, ptr %33, align 4, !tbaa !11
  %474 = add nsw i32 %473, 1
  store i32 %474, ptr %33, align 4, !tbaa !11
  br label %475

475:                                              ; preds = %472, %457
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #8
  br label %375, !llvm.loop !46

476:                                              ; preds = %432, %412
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #8
  br label %478

477:                                              ; preds = %375
  call void @llvm.lifetime.end.p0(i64 1, ptr %35) #8
  call void @_ZN7CGenomeD1Ev(ptr noundef nonnull align 8 dereferenceable(108) %34) #8
  call void @llvm.lifetime.end.p0(i64 112, ptr %34) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #8
  br label %480

478:                                              ; preds = %476, %411
  call void @llvm.lifetime.end.p0(i64 1, ptr %35) #8
  call void @_ZN7CGenomeD1Ev(ptr noundef nonnull align 8 dereferenceable(108) %34) #8
  br label %479

479:                                              ; preds = %478, %399
  call void @llvm.lifetime.end.p0(i64 112, ptr %34) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #8
  br label %893

480:                                              ; preds = %477, %368
  br label %658

481:                                              ; preds = %365
  %482 = load i32, ptr %13, align 4, !tbaa !11
  %483 = icmp slt i32 %482, 3000
  br i1 %483, label %484, label %648

484:                                              ; preds = %481
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #8
  %485 = load i32, ptr %13, align 4, !tbaa !11
  %486 = sub nsw i32 3000, %485
  store i32 %486, ptr %40, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 112, ptr %41) #8
  invoke void @_ZN7CGenomeC1Ev(ptr noundef nonnull align 8 dereferenceable(108) %41)
          to label %487 unwind label %522

487:                                              ; preds = %484
  br label %488

488:                                              ; preds = %644, %487
  %489 = load i32, ptr %40, align 4, !tbaa !11
  %490 = add nsw i32 %489, -1
  store i32 %490, ptr %40, align 4, !tbaa !11
  %491 = icmp ne i32 %489, 0
  br i1 %491, label %492, label %646

492:                                              ; preds = %488
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #8
  store i32 10, ptr %42, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr %43) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #8
  br label %493

493:                                              ; preds = %585, %492
  %494 = load i32, ptr %42, align 4, !tbaa !11
  %495 = add nsw i32 %494, -1
  store i32 %495, ptr %42, align 4, !tbaa !11
  %496 = icmp ne i32 %494, 0
  br i1 %496, label %497, label %586

497:                                              ; preds = %493
  call void @llvm.lifetime.start.p0(i64 112, ptr %45) #8
  %498 = getelementptr inbounds %class.Cga, ptr %60, i32 0, i32 10
  %499 = load i32, ptr %498, align 4, !tbaa !43
  %500 = sdiv i32 %499, 5
  invoke void @_ZN3Cga19TournamentSelectionEi(ptr dead_on_unwind writable sret(%class.CGenome) align 8 %45, ptr noundef nonnull align 8 dereferenceable(265) %60, i32 noundef %500)
          to label %501 unwind label %526

501:                                              ; preds = %497
  %502 = invoke noundef nonnull align 8 dereferenceable(108) ptr @_ZN7CGenomeaSERKS_(ptr noundef nonnull align 8 dereferenceable(108) %41, ptr noundef nonnull align 8 dereferenceable(108) %45)
          to label %503 unwind label %530

503:                                              ; preds = %501
  call void @_ZN7CGenomeD1Ev(ptr noundef nonnull align 8 dereferenceable(108) %45) #8
  call void @llvm.lifetime.end.p0(i64 112, ptr %45) #8
  %504 = invoke noundef i32 @_ZNK7CGenome2IDEv(ptr noundef nonnull align 8 dereferenceable(108) %41)
          to label %505 unwind label %535

505:                                              ; preds = %503
  store i32 %504, ptr %44, align 4, !tbaa !11
  store i8 0, ptr %43, align 1, !tbaa !17
  %506 = getelementptr inbounds %class.Cga, ptr %60, i32 0, i32 20
  %507 = load i8, ptr %506, align 1, !tbaa !44, !range !19, !noundef !20
  %508 = trunc i8 %507 to i1
  br i1 %508, label %509, label %539

509:                                              ; preds = %505
  %510 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.5)
          to label %511 unwind label %535

511:                                              ; preds = %509
  %512 = load i32, ptr %44, align 4, !tbaa !11
  %513 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %510, i32 noundef %512)
          to label %514 unwind label %535

514:                                              ; preds = %511
  %515 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %513, ptr noundef @.str.6)
          to label %516 unwind label %535

516:                                              ; preds = %514
  %517 = load i32, ptr %42, align 4, !tbaa !11
  %518 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %515, i32 noundef %517)
          to label %519 unwind label %535

519:                                              ; preds = %516
  %520 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %518, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %521 unwind label %535

521:                                              ; preds = %519
  br label %539

522:                                              ; preds = %484
  %523 = landingpad { ptr, i32 }
          cleanup
  %524 = extractvalue { ptr, i32 } %523, 0
  store ptr %524, ptr %15, align 8
  %525 = extractvalue { ptr, i32 } %523, 1
  store i32 %525, ptr %16, align 4
  br label %647

526:                                              ; preds = %497
  %527 = landingpad { ptr, i32 }
          cleanup
  %528 = extractvalue { ptr, i32 } %527, 0
  store ptr %528, ptr %15, align 8
  %529 = extractvalue { ptr, i32 } %527, 1
  store i32 %529, ptr %16, align 4
  br label %534

530:                                              ; preds = %501
  %531 = landingpad { ptr, i32 }
          cleanup
  %532 = extractvalue { ptr, i32 } %531, 0
  store ptr %532, ptr %15, align 8
  %533 = extractvalue { ptr, i32 } %531, 1
  store i32 %533, ptr %16, align 4
  call void @_ZN7CGenomeD1Ev(ptr noundef nonnull align 8 dereferenceable(108) %45) #8
  br label %534

534:                                              ; preds = %530, %526
  call void @llvm.lifetime.end.p0(i64 112, ptr %45) #8
  br label %645

535:                                              ; preds = %643, %642, %641, %640, %636, %632, %624, %620, %617, %615, %613, %611, %609, %599, %598, %595, %592, %590, %581, %579, %519, %516, %514, %511, %509, %503
  %536 = landingpad { ptr, i32 }
          cleanup
  %537 = extractvalue { ptr, i32 } %536, 0
  store ptr %537, ptr %15, align 8
  %538 = extractvalue { ptr, i32 } %536, 1
  store i32 %538, ptr %16, align 4
  br label %645

539:                                              ; preds = %521, %505
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #8
  store i32 0, ptr %46, align 4, !tbaa !11
  br label %540

540:                                              ; preds = %568, %539
  %541 = load i32, ptr %46, align 4, !tbaa !11
  %542 = sext i32 %541 to i64
  %543 = call noundef i64 @_ZNKSt6vectorIiSaIiEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %32) #8
  %544 = icmp ult i64 %542, %543
  br i1 %544, label %546, label %545

545:                                              ; preds = %540
  store i32 29, ptr %39, align 4
  br label %571

546:                                              ; preds = %540
  %547 = load i32, ptr %44, align 4, !tbaa !11
  %548 = load i32, ptr %46, align 4, !tbaa !11
  %549 = sext i32 %548 to i64
  %550 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %32, i64 noundef %549) #8
  %551 = load i32, ptr %550, align 4, !tbaa !11
  %552 = icmp eq i32 %547, %551
  br i1 %552, label %553, label %567

553:                                              ; preds = %546
  %554 = getelementptr inbounds %class.Cga, ptr %60, i32 0, i32 20
  %555 = load i8, ptr %554, align 1, !tbaa !44, !range !19, !noundef !20
  %556 = trunc i8 %555 to i1
  br i1 %556, label %557, label %566

557:                                              ; preds = %553
  %558 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.7)
          to label %559 unwind label %562

559:                                              ; preds = %557
  %560 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %558, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %561 unwind label %562

561:                                              ; preds = %559
  br label %566

562:                                              ; preds = %559, %557
  %563 = landingpad { ptr, i32 }
          cleanup
  %564 = extractvalue { ptr, i32 } %563, 0
  store ptr %564, ptr %15, align 8
  %565 = extractvalue { ptr, i32 } %563, 1
  store i32 %565, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #8
  br label %645

566:                                              ; preds = %561, %553
  store i8 1, ptr %43, align 1, !tbaa !17
  store i32 29, ptr %39, align 4
  br label %571

567:                                              ; preds = %546
  br label %568

568:                                              ; preds = %567
  %569 = load i32, ptr %46, align 4, !tbaa !11
  %570 = add nsw i32 %569, 1
  store i32 %570, ptr %46, align 4, !tbaa !11
  br label %540, !llvm.loop !47

571:                                              ; preds = %566, %545
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #8
  br label %572

572:                                              ; preds = %571
  %573 = load i8, ptr %43, align 1, !tbaa !17, !range !19, !noundef !20
  %574 = trunc i8 %573 to i1
  br i1 %574, label %585, label %575

575:                                              ; preds = %572
  %576 = getelementptr inbounds %class.Cga, ptr %60, i32 0, i32 20
  %577 = load i8, ptr %576, align 1, !tbaa !44, !range !19, !noundef !20
  %578 = trunc i8 %577 to i1
  br i1 %578, label %579, label %584

579:                                              ; preds = %575
  %580 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.8)
          to label %581 unwind label %535

581:                                              ; preds = %579
  %582 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %580, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %583 unwind label %535

583:                                              ; preds = %581
  br label %584

584:                                              ; preds = %583, %575
  store i32 0, ptr %42, align 4, !tbaa !11
  br label %585

585:                                              ; preds = %584, %572
  br label %493, !llvm.loop !48

586:                                              ; preds = %493
  %587 = getelementptr inbounds %class.Cga, ptr %60, i32 0, i32 20
  %588 = load i8, ptr %587, align 1, !tbaa !44, !range !19, !noundef !20
  %589 = trunc i8 %588 to i1
  br i1 %589, label %590, label %598

590:                                              ; preds = %586
  %591 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.9)
          to label %592 unwind label %535

592:                                              ; preds = %590
  %593 = load i32, ptr %44, align 4, !tbaa !11
  %594 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %591, i32 noundef %593)
          to label %595 unwind label %535

595:                                              ; preds = %592
  %596 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %594, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %597 unwind label %535

597:                                              ; preds = %595
  br label %598

598:                                              ; preds = %597, %586
  invoke void @_ZNSt6vectorIiSaIiEE9push_backERKi(ptr noundef nonnull align 8 dereferenceable(24) %32, ptr noundef nonnull align 4 dereferenceable(4) %44)
          to label %599 unwind label %535

599:                                              ; preds = %598
  %600 = getelementptr inbounds %class.Cga, ptr %60, i32 0, i32 8
  %601 = load i32, ptr %600, align 4, !tbaa !22
  %602 = add nsw i32 %601, 1
  store i32 %602, ptr %600, align 4, !tbaa !22
  %603 = getelementptr inbounds %class.Cga, ptr %60, i32 0, i32 8
  %604 = load i32, ptr %603, align 4, !tbaa !22
  invoke void @_ZN7CGenome5SetIDEi(ptr noundef nonnull align 8 dereferenceable(108) %41, i32 noundef %604)
          to label %605 unwind label %535

605:                                              ; preds = %599
  %606 = getelementptr inbounds %class.Cga, ptr %60, i32 0, i32 20
  %607 = load i8, ptr %606, align 1, !tbaa !44, !range !19, !noundef !20
  %608 = trunc i8 %607 to i1
  br i1 %608, label %609, label %620

609:                                              ; preds = %605
  %610 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.10)
          to label %611 unwind label %535

611:                                              ; preds = %609
  %612 = invoke noundef i32 @_ZNK7CGenome2IDEv(ptr noundef nonnull align 8 dereferenceable(108) %41)
          to label %613 unwind label %535

613:                                              ; preds = %611
  %614 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %610, i32 noundef %612)
          to label %615 unwind label %535

615:                                              ; preds = %613
  %616 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %614, ptr noundef @.str.11)
          to label %617 unwind label %535

617:                                              ; preds = %615
  %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 %535

619:                                              ; preds = %617
  br label %620

620:                                              ; preds = %619, %605
  %621 = invoke noundef i32 @_ZNK7CGenome10NumNeuronsEv(ptr noundef nonnull align 8 dereferenceable(108) %41)
          to label %622 unwind label %535

622:                                              ; preds = %620
  %623 = icmp slt i32 %621, 3000
  br i1 %623, label %624, label %628

624:                                              ; preds = %622
  %625 = getelementptr inbounds %class.Cga, ptr %60, i32 0, i32 6
  %626 = load ptr, ptr %625, align 8, !tbaa !37
  invoke void @_ZN7CGenome9AddNeuronEdR11CInnovationi(ptr noundef nonnull align 8 dereferenceable(108) %41, double noundef 1.000000e-01, ptr noundef nonnull align 8 dereferenceable(32) %626, i32 noundef 10)
          to label %627 unwind label %535

627:                                              ; preds = %624
  br label %628

628:                                              ; preds = %627, %622
  %629 = getelementptr inbounds %class.Cga, ptr %60, i32 0, i32 19
  %630 = load i8, ptr %629, align 8, !tbaa !38, !range !19, !noundef !20
  %631 = trunc i8 %630 to i1
  br i1 %631, label %632, label %636

632:                                              ; preds = %628
  %633 = getelementptr inbounds %class.Cga, ptr %60, i32 0, i32 6
  %634 = load ptr, ptr %633, align 8, !tbaa !37
  invoke void @_ZN7CGenome7AddLinkEddR11CInnovationii(ptr noundef nonnull align 8 dereferenceable(108) %41, double noundef 8.000000e-01, double noundef 0.000000e+00, ptr noundef nonnull align 8 dereferenceable(32) %634, i32 noundef 10, i32 noundef 10)
          to label %635 unwind label %535

635:                                              ; preds = %632
  br label %640

636:                                              ; preds = %628
  %637 = getelementptr inbounds %class.Cga, ptr %60, i32 0, i32 6
  %638 = load ptr, ptr %637, align 8, !tbaa !37
  invoke void @_ZN7CGenome7AddLinkEddR11CInnovationii(ptr noundef nonnull align 8 dereferenceable(108) %41, double noundef 8.000000e-01, double noundef 1.000000e-03, ptr noundef nonnull align 8 dereferenceable(32) %638, i32 noundef 10, i32 noundef 10)
          to label %639 unwind label %535

639:                                              ; preds = %636
  br label %640

640:                                              ; preds = %639, %635
  invoke void @_ZN7CGenome13MutateWeightsEddd(ptr noundef nonnull align 8 dereferenceable(108) %41, double noundef 2.400000e+00, double noundef 4.000000e-01, double noundef 1.000000e+00)
          to label %641 unwind label %535

641:                                              ; preds = %640
  invoke void @_ZN7CGenome24MutateActivationResponseEdd(ptr noundef nonnull align 8 dereferenceable(108) %41, double noundef 1.000000e+00, double noundef 5.000000e-01)
          to label %642 unwind label %535

642:                                              ; preds = %641
  invoke void @_ZN7CGenome9SortGenesEv(ptr noundef nonnull align 8 dereferenceable(108) %41)
          to label %643 unwind label %535

643:                                              ; preds = %642
  invoke void @_ZNSt6vectorI7CGenomeSaIS0_EE9push_backERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %12, ptr noundef nonnull align 8 dereferenceable(108) %41)
          to label %644 unwind label %535

644:                                              ; preds = %643
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %43) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #8
  br label %488, !llvm.loop !49

645:                                              ; preds = %562, %535, %534
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %43) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #8
  call void @_ZN7CGenomeD1Ev(ptr noundef nonnull align 8 dereferenceable(108) %41) #8
  br label %647

646:                                              ; preds = %488
  call void @_ZN7CGenomeD1Ev(ptr noundef nonnull align 8 dereferenceable(108) %41) #8
  call void @llvm.lifetime.end.p0(i64 112, ptr %41) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #8
  br label %648

647:                                              ; preds = %645, %522
  call void @llvm.lifetime.end.p0(i64 112, ptr %41) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #8
  br label %893

648:                                              ; preds = %646, %481
  br label %658

649:                                              ; preds = %365
  %650 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.12)
          to label %651 unwind label %654

651:                                              ; preds = %649
  %652 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %650, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %653 unwind label %654

653:                                              ; preds = %651
  call void @exit(i32 noundef 1) #9
  unreachable

654:                                              ; preds = %672, %669, %666, %664, %651, %649
  %655 = landingpad { ptr, i32 }
          cleanup
  %656 = extractvalue { ptr, i32 } %655, 0
  store ptr %656, ptr %15, align 8
  %657 = extractvalue { ptr, i32 } %655, 1
  store i32 %657, ptr %16, align 4
  br label %893

658:                                              ; preds = %648, %480
  %659 = call noundef i64 @_ZNKSt6vectorI7CGenomeSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %12) #8
  %660 = getelementptr inbounds %class.Cga, ptr %60, i32 0, i32 10
  %661 = load i32, ptr %660, align 4, !tbaa !43
  %662 = sext i32 %661 to i64
  %663 = icmp ne i64 %659, %662
  br i1 %663, label %664, label %672

664:                                              ; preds = %658
  %665 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.13)
          to label %666 unwind label %654

666:                                              ; preds = %664
  %667 = call noundef i64 @_ZNKSt6vectorI7CGenomeSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %12) #8
  %668 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %665, i64 noundef %667)
          to label %669 unwind label %654

669:                                              ; preds = %666
  %670 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %668, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %671 unwind label %654

671:                                              ; preds = %669
  call void @exit(i32 noundef 1) #9
  unreachable

672:                                              ; preds = %658
  %673 = getelementptr inbounds %class.Cga, ptr %60, i32 0, i32 0
  %674 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorI7CGenomeSaIS0_EEaSERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %673, ptr noundef nonnull align 8 dereferenceable(24) %12)
          to label %675 unwind label %654

675:                                              ; preds = %672
  call void @llvm.lifetime.start.p0(i64 24, ptr %47) #8
  call void @_ZNSt6vectorIiSaIiEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %47) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #8
  store i32 0, ptr %48, align 4, !tbaa !11
  br label %676

676:                                              ; preds = %691, %675
  %677 = load i32, ptr %48, align 4, !tbaa !11
  %678 = zext i32 %677 to i64
  %679 = getelementptr inbounds %class.Cga, ptr %60, i32 0, i32 0
  %680 = call noundef i64 @_ZNKSt6vectorI7CGenomeSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %679) #8
  %681 = icmp ult i64 %678, %680
  br i1 %681, label %683, label %682

682:                                              ; preds = %676
  store i32 32, ptr %39, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #8
  br label %698

683:                                              ; preds = %676
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #8
  %684 = getelementptr inbounds %class.Cga, ptr %60, i32 0, i32 0
  %685 = load i32, ptr %48, align 4, !tbaa !11
  %686 = zext i32 %685 to i64
  %687 = call noundef nonnull align 8 dereferenceable(108) ptr @_ZNSt6vectorI7CGenomeSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %684, i64 noundef %686) #8
  %688 = invoke noundef i32 @_ZNK7CGenome2IDEv(ptr noundef nonnull align 8 dereferenceable(108) %687)
          to label %689 unwind label %694

689:                                              ; preds = %683
  store i32 %688, ptr %49, align 4, !tbaa !11
  invoke void @_ZNSt6vectorIiSaIiEE9push_backEOi(ptr noundef nonnull align 8 dereferenceable(24) %47, ptr noundef nonnull align 4 dereferenceable(4) %49)
          to label %690 unwind label %694

690:                                              ; preds = %689
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #8
  br label %691

691:                                              ; preds = %690
  %692 = load i32, ptr %48, align 4, !tbaa !11
  %693 = add i32 %692, 1
  store i32 %693, ptr %48, align 4, !tbaa !11
  br label %676, !llvm.loop !50

694:                                              ; preds = %689, %683
  %695 = landingpad { ptr, i32 }
          cleanup
  %696 = extractvalue { ptr, i32 } %695, 0
  store ptr %696, ptr %15, align 8
  %697 = extractvalue { ptr, i32 } %695, 1
  store i32 %697, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #8
  br label %892

698:                                              ; preds = %682
  %699 = call ptr @_ZNSt6vectorIiSaIiEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %47) #8
  %700 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.47", ptr %50, i32 0, i32 0
  store ptr %699, ptr %700, align 8
  %701 = call ptr @_ZNSt6vectorIiSaIiEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %47) #8
  %702 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.47", ptr %51, i32 0, i32 0
  store ptr %701, ptr %702, align 8
  %703 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.47", ptr %50, i32 0, i32 0
  %704 = load ptr, ptr %703, align 8
  %705 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.47", ptr %51, i32 0, i32 0
  %706 = load ptr, ptr %705, align 8
  invoke void @_ZSt4sortIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEEvT_S7_(ptr %704, ptr %706)
          to label %707 unwind label %715

707:                                              ; preds = %698
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #8
  store i32 0, ptr %52, align 4, !tbaa !11
  br label %708

708:                                              ; preds = %841, %707
  %709 = load i32, ptr %52, align 4, !tbaa !11
  %710 = zext i32 %709 to i64
  %711 = call noundef i64 @_ZNKSt6vectorIiSaIiEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %47) #8
  %712 = sub i64 %711, 1
  %713 = icmp ult i64 %710, %712
  br i1 %713, label %719, label %714

714:                                              ; preds = %708
  store i32 35, ptr %39, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #8
  br label %845

715:                                              ; preds = %698
  %716 = landingpad { ptr, i32 }
          cleanup
  %717 = extractvalue { ptr, i32 } %716, 0
  store ptr %717, ptr %15, align 8
  %718 = extractvalue { ptr, i32 } %716, 1
  store i32 %718, ptr %16, align 4
  br label %892

719:                                              ; preds = %708
  %720 = load i32, ptr %52, align 4, !tbaa !11
  %721 = zext i32 %720 to i64
  %722 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %47, i64 noundef %721) #8
  %723 = load i32, ptr %722, align 4, !tbaa !11
  %724 = load i32, ptr %52, align 4, !tbaa !11
  %725 = add i32 %724, 1
  %726 = zext i32 %725 to i64
  %727 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %47, i64 noundef %726) #8
  %728 = load i32, ptr %727, align 4, !tbaa !11
  %729 = icmp eq i32 %723, %728
  br i1 %729, label %730, label %840

730:                                              ; preds = %719
  %731 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.14)
          to label %732 unwind label %754

732:                                              ; preds = %730
  %733 = load i32, ptr %52, align 4, !tbaa !11
  %734 = zext i32 %733 to i64
  %735 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %47, i64 noundef %734) #8
  %736 = load i32, ptr %735, align 4, !tbaa !11
  %737 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %731, i32 noundef %736)
          to label %738 unwind label %754

738:                                              ; preds = %732
  %739 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %737, ptr noundef @.str.15)
          to label %740 unwind label %754

740:                                              ; preds = %738
  %741 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %739, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %742 unwind label %754

742:                                              ; preds = %740
  %743 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.16)
          to label %744 unwind label %754

744:                                              ; preds = %742
  %745 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %743, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %746 unwind label %754

746:                                              ; preds = %744
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #8
  store i32 0, ptr %53, align 4, !tbaa !11
  br label %747

747:                                              ; preds = %782, %746
  %748 = load i32, ptr %53, align 4, !tbaa !11
  %749 = zext i32 %748 to i64
  %750 = getelementptr inbounds %class.Cga, ptr %60, i32 0, i32 5
  %751 = call noundef i64 @_ZNKSt6vectorI8CSpeciesSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %750) #8
  %752 = icmp ult i64 %749, %751
  br i1 %752, label %758, label %753

753:                                              ; preds = %747
  store i32 38, ptr %39, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #8
  br label %799

754:                                              ; preds = %744, %742, %740, %738, %732, %730
  %755 = landingpad { ptr, i32 }
          cleanup
  %756 = extractvalue { ptr, i32 } %755, 0
  store ptr %756, ptr %15, align 8
  %757 = extractvalue { ptr, i32 } %755, 1
  store i32 %757, ptr %16, align 4
  br label %844

758:                                              ; preds = %747
  %759 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.17)
          to label %760 unwind label %785

760:                                              ; preds = %758
  %761 = getelementptr inbounds %class.Cga, ptr %60, i32 0, i32 5
  %762 = load i32, ptr %53, align 4, !tbaa !11
  %763 = zext i32 %762 to i64
  %764 = call noundef nonnull align 8 dereferenceable(168) ptr @_ZNSt6vectorI8CSpeciesSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %761, i64 noundef %763) #8
  %765 = invoke noundef i32 @_ZNK8CSpecies2IDEv(ptr noundef nonnull align 8 dereferenceable(168) %764)
          to label %766 unwind label %785

766:                                              ; preds = %760
  %767 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %759, i32 noundef %765)
          to label %768 unwind label %785

768:                                              ; preds = %766
  %769 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %767, ptr noundef @.str.18)
          to label %770 unwind label %785

770:                                              ; preds = %768
  call void @llvm.lifetime.start.p0(i64 112, ptr %54) #8
  %771 = getelementptr inbounds %class.Cga, ptr %60, i32 0, i32 5
  %772 = load i32, ptr %53, align 4, !tbaa !11
  %773 = zext i32 %772 to i64
  %774 = call noundef nonnull align 8 dereferenceable(168) ptr @_ZNSt6vectorI8CSpeciesSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %771, i64 noundef %773) #8
  invoke void @_ZNK8CSpecies6LeaderEv(ptr dead_on_unwind writable sret(%class.CGenome) align 8 %54, ptr noundef nonnull align 8 dereferenceable(168) %774)
          to label %775 unwind label %789

775:                                              ; preds = %770
  %776 = invoke noundef i32 @_ZNK7CGenome2IDEv(ptr noundef nonnull align 8 dereferenceable(108) %54)
          to label %777 unwind label %793

777:                                              ; preds = %775
  %778 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %769, i32 noundef %776)
          to label %779 unwind label %793

779:                                              ; preds = %777
  %780 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %778, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %781 unwind label %793

781:                                              ; preds = %779
  call void @_ZN7CGenomeD1Ev(ptr noundef nonnull align 8 dereferenceable(108) %54) #8
  call void @llvm.lifetime.end.p0(i64 112, ptr %54) #8
  br label %782

782:                                              ; preds = %781
  %783 = load i32, ptr %53, align 4, !tbaa !11
  %784 = add i32 %783, 1
  store i32 %784, ptr %53, align 4, !tbaa !11
  br label %747, !llvm.loop !51

785:                                              ; preds = %768, %766, %760, %758
  %786 = landingpad { ptr, i32 }
          cleanup
  %787 = extractvalue { ptr, i32 } %786, 0
  store ptr %787, ptr %15, align 8
  %788 = extractvalue { ptr, i32 } %786, 1
  store i32 %788, ptr %16, align 4
  br label %798

789:                                              ; preds = %770
  %790 = landingpad { ptr, i32 }
          cleanup
  %791 = extractvalue { ptr, i32 } %790, 0
  store ptr %791, ptr %15, align 8
  %792 = extractvalue { ptr, i32 } %790, 1
  store i32 %792, ptr %16, align 4
  br label %797

793:                                              ; preds = %779, %777, %775
  %794 = landingpad { ptr, i32 }
          cleanup
  %795 = extractvalue { ptr, i32 } %794, 0
  store ptr %795, ptr %15, align 8
  %796 = extractvalue { ptr, i32 } %794, 1
  store i32 %796, ptr %16, align 4
  call void @_ZN7CGenomeD1Ev(ptr noundef nonnull align 8 dereferenceable(108) %54) #8
  br label %797

797:                                              ; preds = %793, %789
  call void @llvm.lifetime.end.p0(i64 112, ptr %54) #8
  br label %798

798:                                              ; preds = %797, %785
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #8
  br label %844

799:                                              ; preds = %753
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #8
  store i32 0, ptr %55, align 4, !tbaa !11
  br label %800

800:                                              ; preds = %832, %799
  %801 = load i32, ptr %55, align 4, !tbaa !11
  %802 = icmp ult i32 %801, 3000
  br i1 %802, label %804, label %803

803:                                              ; preds = %800
  store i32 41, ptr %39, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #8
  br label %839

804:                                              ; preds = %800
  %805 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.19)
          to label %806 unwind label %835

806:                                              ; preds = %804
  %807 = load i32, ptr %55, align 4, !tbaa !11
  %808 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %805, i32 noundef %807)
          to label %809 unwind label %835

809:                                              ; preds = %806
  %810 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %808, ptr noundef @.str.20)
          to label %811 unwind label %835

811:                                              ; preds = %809
  %812 = getelementptr inbounds %class.Cga, ptr %60, i32 0, i32 0
  %813 = load i32, ptr %55, align 4, !tbaa !11
  %814 = zext i32 %813 to i64
  %815 = call noundef nonnull align 8 dereferenceable(108) ptr @_ZNSt6vectorI7CGenomeSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %812, i64 noundef %814) #8
  %816 = invoke noundef i32 @_ZNK7CGenome2IDEv(ptr noundef nonnull align 8 dereferenceable(108) %815)
          to label %817 unwind label %835

817:                                              ; preds = %811
  %818 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %810, i32 noundef %816)
          to label %819 unwind label %835

819:                                              ; preds = %817
  %820 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %818, ptr noundef @.str.21)
          to label %821 unwind label %835

821:                                              ; preds = %819
  %822 = getelementptr inbounds %class.Cga, ptr %60, i32 0, i32 0
  %823 = load i32, ptr %55, align 4, !tbaa !11
  %824 = zext i32 %823 to i64
  %825 = call noundef nonnull align 8 dereferenceable(108) ptr @_ZNSt6vectorI7CGenomeSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %822, i64 noundef %824) #8
  %826 = invoke noundef i32 @_ZNK7CGenome10GetSpeciesEv(ptr noundef nonnull align 8 dereferenceable(108) %825)
          to label %827 unwind label %835

827:                                              ; preds = %821
  %828 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %820, i32 noundef %826)
          to label %829 unwind label %835

829:                                              ; preds = %827
  %830 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %828, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %831 unwind label %835

831:                                              ; preds = %829
  br label %832

832:                                              ; preds = %831
  %833 = load i32, ptr %55, align 4, !tbaa !11
  %834 = add i32 %833, 1
  store i32 %834, ptr %55, align 4, !tbaa !11
  br label %800, !llvm.loop !52

835:                                              ; preds = %829, %827, %821, %819, %817, %811, %809, %806, %804
  %836 = landingpad { ptr, i32 }
          cleanup
  %837 = extractvalue { ptr, i32 } %836, 0
  store ptr %837, ptr %15, align 8
  %838 = extractvalue { ptr, i32 } %836, 1
  store i32 %838, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #8
  br label %844

839:                                              ; preds = %803
  call void @exit(i32 noundef 1) #9
  unreachable

840:                                              ; preds = %719
  br label %841

841:                                              ; preds = %840
  %842 = load i32, ptr %52, align 4, !tbaa !11
  %843 = add i32 %842, 1
  store i32 %843, ptr %52, align 4, !tbaa !11
  br label %708, !llvm.loop !53

844:                                              ; preds = %835, %798, %754
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #8
  br label %892

845:                                              ; preds = %714
  store i1 false, ptr %56, align 1
  call void @_ZNSt6vectorIP10CNeuralNetSaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %0) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #8
  store i32 0, ptr %57, align 4, !tbaa !11
  br label %846

846:                                              ; preds = %873, %845
  %847 = load i32, ptr %57, align 4, !tbaa !11
  %848 = sext i32 %847 to i64
  %849 = getelementptr inbounds %class.Cga, ptr %60, i32 0, i32 0
  %850 = call noundef i64 @_ZNKSt6vectorI7CGenomeSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %849) #8
  %851 = icmp ult i64 %848, %850
  br i1 %851, label %853, label %852

852:                                              ; preds = %846
  store i32 44, ptr %39, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #8
  br label %885

853:                                              ; preds = %846
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #8
  %854 = getelementptr inbounds %class.Cga, ptr %60, i32 0, i32 0
  %855 = load i32, ptr %57, align 4, !tbaa !11
  %856 = sext i32 %855 to i64
  %857 = call noundef nonnull align 8 dereferenceable(108) ptr @_ZNSt6vectorI7CGenomeSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %854, i64 noundef %856) #8
  %858 = invoke noundef i32 @_ZN3Cga17CalculateNetDepthERK7CGenome(ptr noundef nonnull align 8 dereferenceable(265) %60, ptr noundef nonnull align 8 dereferenceable(108) %857)
          to label %859 unwind label %876

859:                                              ; preds = %853
  store i32 %858, ptr %58, align 4, !tbaa !11
  %860 = getelementptr inbounds %class.Cga, ptr %60, i32 0, i32 0
  %861 = load i32, ptr %57, align 4, !tbaa !11
  %862 = sext i32 %861 to i64
  %863 = call noundef nonnull align 8 dereferenceable(108) ptr @_ZNSt6vectorI7CGenomeSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %860, i64 noundef %862) #8
  %864 = load i32, ptr %58, align 4, !tbaa !11
  invoke void @_ZN7CGenome8SetDepthEi(ptr noundef nonnull align 8 dereferenceable(108) %863, i32 noundef %864)
          to label %865 unwind label %876

865:                                              ; preds = %859
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #8
  %866 = getelementptr inbounds %class.Cga, ptr %60, i32 0, i32 0
  %867 = load i32, ptr %57, align 4, !tbaa !11
  %868 = sext i32 %867 to i64
  %869 = call noundef nonnull align 8 dereferenceable(108) ptr @_ZNSt6vectorI7CGenomeSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %866, i64 noundef %868) #8
  %870 = invoke noundef ptr @_ZN7CGenome15CreatePhenotypeEv(ptr noundef nonnull align 8 dereferenceable(108) %869)
          to label %871 unwind label %880

871:                                              ; preds = %865
  store ptr %870, ptr %59, align 8, !tbaa !5
  invoke void @_ZNSt6vectorIP10CNeuralNetSaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %0, ptr noundef nonnull align 8 dereferenceable(8) %59)
          to label %872 unwind label %880

872:                                              ; preds = %871
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #8
  br label %873

873:                                              ; preds = %872
  %874 = load i32, ptr %57, align 4, !tbaa !11
  %875 = add nsw i32 %874, 1
  store i32 %875, ptr %57, align 4, !tbaa !11
  br label %846, !llvm.loop !54

876:                                              ; preds = %859, %853
  %877 = landingpad { ptr, i32 }
          cleanup
  %878 = extractvalue { ptr, i32 } %877, 0
  store ptr %878, ptr %15, align 8
  %879 = extractvalue { ptr, i32 } %877, 1
  store i32 %879, ptr %16, align 4
  br label %884

880:                                              ; preds = %871, %865
  %881 = landingpad { ptr, i32 }
          cleanup
  %882 = extractvalue { ptr, i32 } %881, 0
  store ptr %882, ptr %15, align 8
  %883 = extractvalue { ptr, i32 } %881, 1
  store i32 %883, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #8
  br label %884

884:                                              ; preds = %880, %876
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #8
  call void @_ZNSt6vectorIP10CNeuralNetSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %0) #8
  br label %892

885:                                              ; preds = %852
  %886 = getelementptr inbounds %class.Cga, ptr %60, i32 0, i32 7
  %887 = load i32, ptr %886, align 8, !tbaa !55
  %888 = add nsw i32 %887, 1
  store i32 %888, ptr %886, align 8, !tbaa !55
  store i1 true, ptr %56, align 1
  store i32 1, ptr %39, align 4
  %889 = load i1, ptr %56, align 1
  br i1 %889, label %891, label %890

890:                                              ; preds = %885
  call void @_ZNSt6vectorIP10CNeuralNetSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %0) #8
  br label %891

891:                                              ; preds = %890, %885
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %47) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %47) #8
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %32) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %32) #8
  call void @_ZN7CGenomeD1Ev(ptr noundef nonnull align 8 dereferenceable(108) %14) #8
  call void @llvm.lifetime.end.p0(i64 112, ptr %14) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #8
  call void @_ZNSt6vectorI7CGenomeSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %12) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %12) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #8
  ret void

892:                                              ; preds = %884, %844, %715, %694
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %47) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %47) #8
  br label %893

893:                                              ; preds = %892, %654, %647, %479
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %32) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %32) #8
  br label %894

894:                                              ; preds = %893, %364, %330
  call void @_ZN7CGenomeD1Ev(ptr noundef nonnull align 8 dereferenceable(108) %14) #8
  br label %895

895:                                              ; preds = %894, %129
  call void @llvm.lifetime.end.p0(i64 112, ptr %14) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #8
  call void @_ZNSt6vectorI7CGenomeSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %12) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %12) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #8
  br label %896

896:                                              ; preds = %895
  %897 = load ptr, ptr %15, align 8
  %898 = load i32, ptr %16, align 4
  %899 = insertvalue { ptr, i32 } poison, ptr %897, 0
  %900 = insertvalue { ptr, i32 } %899, i32 %898, 1
  resume { ptr, i32 } %900
}

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNKSt6vectorI7CGenomeSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) #0 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) #5

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) #3 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)) #5

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

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

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

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

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

declare void @_ZN8CSpecies5PurgeEv(ptr noundef nonnull align 8 dereferenceable(168)) #4

declare void @_ZN8CSpecies16AgeOneGenerationEv(ptr noundef nonnull align 8 dereferenceable(168)) #4

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

declare void @_ZN7CGenome15DeletePhenotypeEv(ptr noundef nonnull align 8 dereferenceable(108)) #4

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN7CGenome10SetFitnessEd(ptr noundef nonnull align 8 dereferenceable(108), double noundef) #0 align 2

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

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

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

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

declare void @_ZN7CGenomeC1Ev(ptr noundef nonnull align 8 dereferenceable(108)) unnamed_addr #4

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_Z7Roundedd(double noundef) #7

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK8CSpecies6LeaderEv(ptr dead_on_unwind noalias writable sret(%class.CGenome) align 8, ptr noundef nonnull align 8 dereferenceable(168)) #3 align 2

declare noundef nonnull align 8 dereferenceable(108) ptr @_ZN7CGenomeaSERKS_(ptr noundef nonnull align 8 dereferenceable(108), ptr noundef nonnull align 8 dereferenceable(108)) #4

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

declare void @_ZN8CSpecies5SpawnEv(ptr dead_on_unwind writable sret(%class.CGenome) align 8, ptr noundef nonnull align 8 dereferenceable(168)) #4

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef double @_Z10RandDoublev() #7

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3Cga9CrossoverER7CGenomeS1_(ptr dead_on_unwind noalias writable sret(%class.CGenome) align 8, ptr noundef nonnull align 8 dereferenceable(265), ptr noundef nonnull align 8 dereferenceable(108), ptr noundef nonnull align 8 dereferenceable(108)) #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN7CGenome5SetIDEi(ptr noundef nonnull align 8 dereferenceable(108), i32 noundef) #0 align 2

declare void @_ZN7CGenome9AddNeuronEdR11CInnovationi(ptr noundef nonnull align 8 dereferenceable(108), double noundef, ptr noundef nonnull align 8 dereferenceable(32), i32 noundef) #4

declare void @_ZN7CGenome7AddLinkEddR11CInnovationii(ptr noundef nonnull align 8 dereferenceable(108), double noundef, double noundef, ptr noundef nonnull align 8 dereferenceable(32), i32 noundef, i32 noundef) #4

declare void @_ZN7CGenome13MutateWeightsEddd(ptr noundef nonnull align 8 dereferenceable(108), double noundef, double noundef, double noundef) #4

declare void @_ZN7CGenome24MutateActivationResponseEdd(ptr noundef nonnull align 8 dereferenceable(108), double noundef, double noundef) #4

declare void @_ZN7CGenome9SortGenesEv(ptr noundef nonnull align 8 dereferenceable(108)) #4

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3Cga19TournamentSelectionEi(ptr dead_on_unwind noalias writable sret(%class.CGenome) align 8, ptr noundef nonnull align 8 dereferenceable(265), i32 noundef) #3 align 2

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

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

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

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

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

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

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

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

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

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

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

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


; 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.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.__gnu_cxx::__normal_iterator" = type { ptr }
%"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.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.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.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.__gnu_cxx::__normal_iterator.46" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.45" = type { 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 }

@_ZSt4cout = external global %"class.std::basic_ostream", align 8
@.str = external hidden unnamed_addr constant [37 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [59 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [77 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [77 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [88 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [12 x i8], align 1

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

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

declare i32 @__gxx_personality_v0(...)

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZN3Cga17CalculateNetDepthERK7CGenome(ptr noundef nonnull align 8 dereferenceable(265), ptr noundef nonnull align 8 dereferenceable(108)) local_unnamed_addr #3 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN7CGenome8SetDepthEi(ptr noundef nonnull align 8 dereferenceable(108), i32 noundef) local_unnamed_addr #0 align 2

declare noundef ptr @_ZN7CGenome15CreatePhenotypeEv(ptr noundef nonnull align 8 dereferenceable(108)) local_unnamed_addr #4

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3Cga5EpochERKSt6vectorIdSaIdEE(ptr dead_on_unwind noalias writable sret(%"class.std::vector.25") align 8 %0, ptr noundef nonnull align 8 dereferenceable(265) %1, ptr noundef nonnull align 8 dereferenceable(24) %2) local_unnamed_addr #3 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %5 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %6 = alloca %"class.std::vector", align 8
  %7 = alloca %class.CGenome, align 8
  %8 = alloca %class.CGenome, align 8
  %9 = alloca %class.CGenome, align 8
  %10 = alloca %class.CGenome, align 8
  %11 = alloca %class.CGenome, align 8
  %12 = alloca %class.CGenome, align 8
  %13 = alloca %class.CGenome, align 8
  %14 = alloca %"class.__gnu_cxx::__normal_iterator.46", align 8
  %15 = alloca %"class.__gnu_cxx::__normal_iterator.45", align 8
  %16 = alloca %"class.__gnu_cxx::__normal_iterator.45", align 8
  %17 = alloca %"class.std::vector.30", align 8
  %18 = alloca %class.CGenome, align 8
  %19 = alloca %class.CGenome, align 8
  %20 = alloca %class.CGenome, align 8
  %21 = alloca i32, align 4
  %22 = alloca %class.CGenome, align 8
  %23 = alloca %"class.std::vector.30", align 8
  %24 = alloca i32, align 4
  %25 = alloca %class.CGenome, align 8
  %26 = alloca ptr, align 8
  %27 = tail call noundef i64 @_ZNKSt6vectorIdSaIdEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %2) #8
  %28 = tail call noundef i64 @_ZNKSt6vectorI7CGenomeSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %1) #8
  %.not = icmp eq i64 %27, %28
  br i1 %.not, label %32, label %29

29:                                               ; preds = %3
  %30 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str)
  %31 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %30, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  tail call void @exit(i32 noundef 1) #9
  unreachable

32:                                               ; preds = %3
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4) #8
  %33 = getelementptr inbounds i8, ptr %1, i64 120
  %34 = tail call ptr @_ZNSt6vectorI8CSpeciesSaIS0_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %33) #8
  store ptr %34, ptr %4, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #8
  %35 = tail call ptr @_ZNSt6vectorI8CSpeciesSaIS0_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %33) #8
  store ptr %35, ptr %5, align 8
  %36 = call noundef zeroext i1 @_ZN9__gnu_cxxneIP8CSpeciesSt6vectorIS1_SaIS1_EEEEbRKNS_17__normal_iteratorIT_T0_EESB_(ptr noundef nonnull align 8 dereferenceable(8) %4, ptr noundef nonnull align 8 dereferenceable(8) %5) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #8
  br i1 %36, label %.lr.ph, label %.preheader194

.preheader194:                                    ; preds = %.lr.ph, %32
  %37 = call noundef i64 @_ZNKSt6vectorI7CGenomeSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %1) #8
  %.not267 = icmp eq i64 %37, 0
  br i1 %.not267, label %.preheader193, label %.lr.ph222

.lr.ph:                                           ; preds = %32, %.lr.ph
  %38 = call noundef ptr @_ZNK9__gnu_cxx17__normal_iteratorIP8CSpeciesSt6vectorIS1_SaIS1_EEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %4) #8
  call void @_ZN8CSpecies5PurgeEv(ptr noundef nonnull align 8 dereferenceable(168) %38)
  %39 = call noundef ptr @_ZNK9__gnu_cxx17__normal_iteratorIP8CSpeciesSt6vectorIS1_SaIS1_EEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %4) #8
  call void @_ZN8CSpecies16AgeOneGenerationEv(ptr noundef nonnull align 8 dereferenceable(168) %39)
  %40 = call ptr @_ZN9__gnu_cxx17__normal_iteratorIP8CSpeciesSt6vectorIS1_SaIS1_EEEppEi(ptr noundef nonnull align 8 dereferenceable(8) %4, i32 noundef 0) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #8
  %41 = call ptr @_ZNSt6vectorI8CSpeciesSaIS0_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %33) #8
  store ptr %41, ptr %5, align 8
  %42 = call noundef zeroext i1 @_ZN9__gnu_cxxneIP8CSpeciesSt6vectorIS1_SaIS1_EEEEbRKNS_17__normal_iteratorIT_T0_EESB_(ptr noundef nonnull align 8 dereferenceable(8) %4, ptr noundef nonnull align 8 dereferenceable(8) %5) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #8
  br i1 %42, label %.lr.ph, label %.preheader194, !llvm.loop !5

.preheader193:                                    ; preds = %.lr.ph222, %.preheader194
  %43 = call noundef i64 @_ZNKSt6vectorI7CGenomeSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %1) #8
  %.not268 = icmp eq i64 %43, 0
  br i1 %.not268, label %._crit_edge, label %.lr.ph224

.lr.ph222:                                        ; preds = %.preheader194, %.lr.ph222
  %indvars.iv = phi i64 [ %indvars.iv.next, %.lr.ph222 ], [ 0, %.preheader194 ]
  %44 = call noundef nonnull align 8 dereferenceable(108) ptr @_ZNSt6vectorI7CGenomeSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %1, i64 noundef %indvars.iv) #8
  call void @_ZN7CGenome15DeletePhenotypeEv(ptr noundef nonnull align 8 dereferenceable(108) %44)
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %45 = call noundef i64 @_ZNKSt6vectorI7CGenomeSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %1) #8
  %46 = icmp ugt i64 %45, %indvars.iv.next
  br i1 %46, label %.lr.ph222, label %.preheader193, !llvm.loop !7

._crit_edge:                                      ; preds = %.lr.ph224, %.preheader193
  call void @_ZN3Cga13SortAndRecordEv(ptr noundef nonnull align 8 dereferenceable(265) %1)
  call void @_ZN3Cga31SpeciateAndCalculateSpawnLevelsEv(ptr noundef nonnull align 8 dereferenceable(265) %1)
  call void @_ZN3Cga24TestOldSpeciesForKillingEv(ptr noundef nonnull align 8 dereferenceable(265) %1)
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %6) #8
  call void @_ZNSt6vectorI7CGenomeSaIS0_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %6) #8
  call void @llvm.lifetime.start.p0(i64 112, ptr nonnull %7) #8
  invoke void @_ZN7CGenomeC1Ev(ptr noundef nonnull align 8 dereferenceable(108) %7)
          to label %.preheader192 unwind label %57

.preheader192:                                    ; preds = %._crit_edge
  %47 = call noundef i64 @_ZNKSt6vectorI8CSpeciesSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %33) #8
  %.not269 = icmp eq i64 %47, 0
  br i1 %.not269, label %._crit_edge239, label %.lr.ph235

.lr.ph235:                                        ; preds = %.preheader192
  %48 = getelementptr inbounds i8, ptr %1, i64 156
  %49 = getelementptr inbounds i8, ptr %1, i64 144
  %50 = getelementptr inbounds i8, ptr %1, i64 256
  br label %59

.lr.ph224:                                        ; preds = %.preheader193, %.lr.ph224
  %indvars.iv277 = phi i64 [ %indvars.iv.next278, %.lr.ph224 ], [ 0, %.preheader193 ]
  %51 = call noundef nonnull align 8 dereferenceable(108) ptr @_ZNSt6vectorI7CGenomeSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %1, i64 noundef %indvars.iv277) #8
  %52 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef %indvars.iv277) #8
  %53 = load double, ptr %52, align 8, !tbaa !8
  call void @_ZN7CGenome10SetFitnessEd(ptr noundef nonnull align 8 dereferenceable(108) %51, double noundef %53)
  %indvars.iv.next278 = add nuw nsw i64 %indvars.iv277, 1
  %54 = call noundef i64 @_ZNKSt6vectorI7CGenomeSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %1) #8
  %55 = icmp ugt i64 %54, %indvars.iv.next278
  br i1 %55, label %.lr.ph224, label %._crit_edge, !llvm.loop !12

.preheader189:                                    ; preds = %.loopexit191
  %56 = icmp sgt i32 %.2, 3000
  br i1 %56, label %.lr.ph238, label %._crit_edge239

57:                                               ; preds = %._crit_edge
  %58 = landingpad { ptr, i32 }
          cleanup
  br label %504

59:                                               ; preds = %.lr.ph235, %.loopexit191
  %indvars.iv280 = phi i64 [ 0, %.lr.ph235 ], [ %indvars.iv.next281, %.loopexit191 ]
  %.083234 = phi i32 [ 0, %.lr.ph235 ], [ %.2, %.loopexit191 ]
  %60 = icmp slt i32 %.083234, 3000
  br i1 %60, label %61, label %.loopexit191

61:                                               ; preds = %59
  %62 = call noundef nonnull align 8 dereferenceable(168) ptr @_ZNSt6vectorI8CSpeciesSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %33, i64 noundef %indvars.iv280) #8
  %63 = call noundef double @_ZNK8CSpecies10NumToSpawnEv(ptr noundef nonnull align 8 dereferenceable(168) %62)
  %64 = call noundef i32 @_Z7Roundedd(double noundef %63)
  %.not162228 = icmp eq i32 %64, 0
  br i1 %.not162228, label %.loopexit191, label %.lr.ph232

.lr.ph232:                                        ; preds = %61, %select.unfold
  %.in = phi i32 [ %65, %select.unfold ], [ %64, %61 ]
  %.1230 = phi i32 [ %180, %select.unfold ], [ %.083234, %61 ]
  %.0123229 = phi i1 [ true, %select.unfold ], [ false, %61 ]
  %65 = add nsw i32 %.in, -1
  br i1 %.0123229, label %76, label %66

66:                                               ; preds = %.lr.ph232
  call void @llvm.lifetime.start.p0(i64 112, ptr nonnull %8) #8
  %67 = call noundef nonnull align 8 dereferenceable(168) ptr @_ZNSt6vectorI8CSpeciesSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %33, i64 noundef %indvars.iv280) #8
  invoke void @_ZNK8CSpecies6LeaderEv(ptr dead_on_unwind nonnull writable sret(%class.CGenome) align 8 %8, ptr noundef nonnull align 8 dereferenceable(168) %67)
          to label %68 unwind label %71

68:                                               ; preds = %66
  %69 = invoke noundef nonnull align 8 dereferenceable(108) ptr @_ZN7CGenomeaSERKS_(ptr noundef nonnull align 8 dereferenceable(108) %7, ptr noundef nonnull align 8 dereferenceable(108) %8)
          to label %70 unwind label %73

70:                                               ; preds = %68
  call void @_ZN7CGenomeD1Ev(ptr noundef nonnull align 8 dereferenceable(108) %8) #8
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %8) #8
  br label %178

71:                                               ; preds = %66
  %72 = landingpad { ptr, i32 }
          cleanup
  br label %75

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

75:                                               ; preds = %73, %71
  %.pn163 = phi { ptr, i32 } [ %74, %73 ], [ %72, %71 ]
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %8) #8
  br label %503

76:                                               ; preds = %.lr.ph232
  %77 = call noundef nonnull align 8 dereferenceable(168) ptr @_ZNSt6vectorI8CSpeciesSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %33, i64 noundef %indvars.iv280) #8
  %78 = call noundef i32 @_ZNK8CSpecies10NumMembersEv(ptr noundef nonnull align 8 dereferenceable(168) %77)
  %79 = icmp eq i32 %78, 1
  br i1 %79, label %80, label %92

80:                                               ; preds = %76
  call void @llvm.lifetime.start.p0(i64 112, ptr nonnull %9) #8
  %81 = call noundef nonnull align 8 dereferenceable(168) ptr @_ZNSt6vectorI8CSpeciesSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %33, i64 noundef %indvars.iv280) #8
  invoke void @_ZN8CSpecies5SpawnEv(ptr dead_on_unwind nonnull writable sret(%class.CGenome) align 8 %9, ptr noundef nonnull align 8 dereferenceable(168) %81)
          to label %82 unwind label %87

82:                                               ; preds = %80
  %83 = invoke noundef nonnull align 8 dereferenceable(108) ptr @_ZN7CGenomeaSERKS_(ptr noundef nonnull align 8 dereferenceable(108) %7, ptr noundef nonnull align 8 dereferenceable(108) %9)
          to label %84 unwind label %89

84:                                               ; preds = %82
  call void @_ZN7CGenomeD1Ev(ptr noundef nonnull align 8 dereferenceable(108) %9) #8
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %9) #8
  br label %166

85:                                               ; preds = %.invoke, %179, %178, %177, %176, %171
  %86 = landingpad { ptr, i32 }
          cleanup
  br label %503

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

89:                                               ; preds = %82
  %90 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN7CGenomeD1Ev(ptr noundef nonnull align 8 dereferenceable(108) %9) #8
  br label %91

91:                                               ; preds = %89, %87
  %.pn175 = phi { ptr, i32 } [ %90, %89 ], [ %88, %87 ]
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %9) #8
  br label %503

92:                                               ; preds = %76
  call void @llvm.lifetime.start.p0(i64 112, ptr nonnull %10) #8
  %93 = call noundef nonnull align 8 dereferenceable(168) ptr @_ZNSt6vectorI8CSpeciesSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %33, i64 noundef %indvars.iv280) #8
  invoke void @_ZN8CSpecies5SpawnEv(ptr dead_on_unwind nonnull writable sret(%class.CGenome) align 8 %10, ptr noundef nonnull align 8 dereferenceable(168) %93)
          to label %94 unwind label %136

94:                                               ; preds = %92
  %95 = call noundef double @_Z10RandDoublev()
  %96 = fcmp olt double %95, 0x3FE6666666666666
  br i1 %96, label %97, label %161

97:                                               ; preds = %94
  call void @llvm.lifetime.start.p0(i64 112, ptr nonnull %11) #8
  %98 = call noundef nonnull align 8 dereferenceable(168) ptr @_ZNSt6vectorI8CSpeciesSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %33, i64 noundef %indvars.iv280) #8
  invoke void @_ZN8CSpecies5SpawnEv(ptr dead_on_unwind nonnull writable sret(%class.CGenome) align 8 %11, ptr noundef nonnull align 8 dereferenceable(168) %98)
          to label %.preheader190 unwind label %140

.preheader190:                                    ; preds = %97
  %99 = call noundef i32 @_ZNK7CGenome2IDEv(ptr noundef nonnull align 8 dereferenceable(108) %10)
  %100 = call noundef i32 @_ZNK7CGenome2IDEv(ptr noundef nonnull align 8 dereferenceable(108) %11)
  %101 = icmp eq i32 %99, %100
  br i1 %101, label %.lr.ph226.preheader, label %.critedge

.lr.ph226.preheader:                              ; preds = %.preheader190
  call void @llvm.lifetime.start.p0(i64 112, ptr nonnull %12) #8
  %102 = call noundef nonnull align 8 dereferenceable(168) ptr @_ZNSt6vectorI8CSpeciesSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %33, i64 noundef %indvars.iv280) #8
  invoke void @_ZN8CSpecies5SpawnEv(ptr dead_on_unwind nonnull writable sret(%class.CGenome) align 8 %12, ptr noundef nonnull align 8 dereferenceable(168) %102)
          to label %103 unwind label %142

103:                                              ; preds = %.lr.ph226.preheader
  %104 = invoke noundef nonnull align 8 dereferenceable(108) ptr @_ZN7CGenomeaSERKS_(ptr noundef nonnull align 8 dereferenceable(108) %11, ptr noundef nonnull align 8 dereferenceable(108) %12)
          to label %105 unwind label %144

105:                                              ; preds = %103
  call void @_ZN7CGenomeD1Ev(ptr noundef nonnull align 8 dereferenceable(108) %12) #8
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %12) #8
  %106 = call noundef i32 @_ZNK7CGenome2IDEv(ptr noundef nonnull align 8 dereferenceable(108) %10)
  %107 = call noundef i32 @_ZNK7CGenome2IDEv(ptr noundef nonnull align 8 dereferenceable(108) %11)
  %108 = icmp eq i32 %106, %107
  br i1 %108, label %.lr.ph226.1, label %.critedge, !llvm.loop !13

.lr.ph226.1:                                      ; preds = %105
  call void @llvm.lifetime.start.p0(i64 112, ptr nonnull %12) #8
  %109 = call noundef nonnull align 8 dereferenceable(168) ptr @_ZNSt6vectorI8CSpeciesSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %33, i64 noundef %indvars.iv280) #8
  invoke void @_ZN8CSpecies5SpawnEv(ptr dead_on_unwind nonnull writable sret(%class.CGenome) align 8 %12, ptr noundef nonnull align 8 dereferenceable(168) %109)
          to label %110 unwind label %142

110:                                              ; preds = %.lr.ph226.1
  %111 = invoke noundef nonnull align 8 dereferenceable(108) ptr @_ZN7CGenomeaSERKS_(ptr noundef nonnull align 8 dereferenceable(108) %11, ptr noundef nonnull align 8 dereferenceable(108) %12)
          to label %112 unwind label %144

112:                                              ; preds = %110
  call void @_ZN7CGenomeD1Ev(ptr noundef nonnull align 8 dereferenceable(108) %12) #8
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %12) #8
  %113 = call noundef i32 @_ZNK7CGenome2IDEv(ptr noundef nonnull align 8 dereferenceable(108) %10)
  %114 = call noundef i32 @_ZNK7CGenome2IDEv(ptr noundef nonnull align 8 dereferenceable(108) %11)
  %115 = icmp eq i32 %113, %114
  br i1 %115, label %.lr.ph226.2, label %.critedge, !llvm.loop !13

.lr.ph226.2:                                      ; preds = %112
  call void @llvm.lifetime.start.p0(i64 112, ptr nonnull %12) #8
  %116 = call noundef nonnull align 8 dereferenceable(168) ptr @_ZNSt6vectorI8CSpeciesSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %33, i64 noundef %indvars.iv280) #8
  invoke void @_ZN8CSpecies5SpawnEv(ptr dead_on_unwind nonnull writable sret(%class.CGenome) align 8 %12, ptr noundef nonnull align 8 dereferenceable(168) %116)
          to label %117 unwind label %142

117:                                              ; preds = %.lr.ph226.2
  %118 = invoke noundef nonnull align 8 dereferenceable(108) ptr @_ZN7CGenomeaSERKS_(ptr noundef nonnull align 8 dereferenceable(108) %11, ptr noundef nonnull align 8 dereferenceable(108) %12)
          to label %119 unwind label %144

119:                                              ; preds = %117
  call void @_ZN7CGenomeD1Ev(ptr noundef nonnull align 8 dereferenceable(108) %12) #8
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %12) #8
  %120 = call noundef i32 @_ZNK7CGenome2IDEv(ptr noundef nonnull align 8 dereferenceable(108) %10)
  %121 = call noundef i32 @_ZNK7CGenome2IDEv(ptr noundef nonnull align 8 dereferenceable(108) %11)
  %122 = icmp eq i32 %120, %121
  br i1 %122, label %.lr.ph226.3, label %.critedge, !llvm.loop !13

.lr.ph226.3:                                      ; preds = %119
  call void @llvm.lifetime.start.p0(i64 112, ptr nonnull %12) #8
  %123 = call noundef nonnull align 8 dereferenceable(168) ptr @_ZNSt6vectorI8CSpeciesSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %33, i64 noundef %indvars.iv280) #8
  invoke void @_ZN8CSpecies5SpawnEv(ptr dead_on_unwind nonnull writable sret(%class.CGenome) align 8 %12, ptr noundef nonnull align 8 dereferenceable(168) %123)
          to label %124 unwind label %142

124:                                              ; preds = %.lr.ph226.3
  %125 = invoke noundef nonnull align 8 dereferenceable(108) ptr @_ZN7CGenomeaSERKS_(ptr noundef nonnull align 8 dereferenceable(108) %11, ptr noundef nonnull align 8 dereferenceable(108) %12)
          to label %126 unwind label %144

126:                                              ; preds = %124
  call void @_ZN7CGenomeD1Ev(ptr noundef nonnull align 8 dereferenceable(108) %12) #8
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %12) #8
  %127 = call noundef i32 @_ZNK7CGenome2IDEv(ptr noundef nonnull align 8 dereferenceable(108) %10)
  %128 = call noundef i32 @_ZNK7CGenome2IDEv(ptr noundef nonnull align 8 dereferenceable(108) %11)
  %129 = icmp eq i32 %127, %128
  br i1 %129, label %.lr.ph226.4, label %.critedge, !llvm.loop !13

.lr.ph226.4:                                      ; preds = %126
  call void @llvm.lifetime.start.p0(i64 112, ptr nonnull %12) #8
  %130 = call noundef nonnull align 8 dereferenceable(168) ptr @_ZNSt6vectorI8CSpeciesSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %33, i64 noundef %indvars.iv280) #8
  invoke void @_ZN8CSpecies5SpawnEv(ptr dead_on_unwind nonnull writable sret(%class.CGenome) align 8 %12, ptr noundef nonnull align 8 dereferenceable(168) %130)
          to label %131 unwind label %142

131:                                              ; preds = %.lr.ph226.4
  %132 = invoke noundef nonnull align 8 dereferenceable(108) ptr @_ZN7CGenomeaSERKS_(ptr noundef nonnull align 8 dereferenceable(108) %11, ptr noundef nonnull align 8 dereferenceable(108) %12)
          to label %133 unwind label %144

133:                                              ; preds = %131
  call void @_ZN7CGenomeD1Ev(ptr noundef nonnull align 8 dereferenceable(108) %12) #8
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %12) #8
  %134 = call noundef i32 @_ZNK7CGenome2IDEv(ptr noundef nonnull align 8 dereferenceable(108) %10)
  %135 = call noundef i32 @_ZNK7CGenome2IDEv(ptr noundef nonnull align 8 dereferenceable(108) %11)
  br label %.critedge, !llvm.loop !13

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

138:                                              ; preds = %161
  %139 = landingpad { ptr, i32 }
          cleanup
  br label %164

140:                                              ; preds = %97
  %141 = landingpad { ptr, i32 }
          cleanup
  br label %160

142:                                              ; preds = %.lr.ph226.4, %.lr.ph226.3, %.lr.ph226.2, %.lr.ph226.1, %.lr.ph226.preheader
  %143 = landingpad { ptr, i32 }
          cleanup
  br label %146

144:                                              ; preds = %131, %124, %117, %110, %103
  %145 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN7CGenomeD1Ev(ptr noundef nonnull align 8 dereferenceable(108) %12) #8
  br label %146

146:                                              ; preds = %144, %142
  %.pn169 = phi { ptr, i32 } [ %145, %144 ], [ %143, %142 ]
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %12) #8
  br label %159

.critedge:                                        ; preds = %133, %105, %112, %119, %126, %.preheader190
  %147 = call noundef i32 @_ZNK7CGenome2IDEv(ptr noundef nonnull align 8 dereferenceable(108) %10)
  %148 = call noundef i32 @_ZNK7CGenome2IDEv(ptr noundef nonnull align 8 dereferenceable(108) %11)
  %.not166 = icmp eq i32 %147, %148
  br i1 %.not166, label %158, label %149

149:                                              ; preds = %.critedge
  call void @llvm.lifetime.start.p0(i64 112, ptr nonnull %13) #8
  invoke void @_ZN3Cga9CrossoverER7CGenomeS1_(ptr dead_on_unwind nonnull writable sret(%class.CGenome) align 8 %13, ptr noundef nonnull align 8 dereferenceable(265) %1, ptr noundef nonnull align 8 dereferenceable(108) %10, ptr noundef nonnull align 8 dereferenceable(108) %11)
          to label %150 unwind label %153

150:                                              ; preds = %149
  %151 = invoke noundef nonnull align 8 dereferenceable(108) ptr @_ZN7CGenomeaSERKS_(ptr noundef nonnull align 8 dereferenceable(108) %7, ptr noundef nonnull align 8 dereferenceable(108) %13)
          to label %152 unwind label %155

152:                                              ; preds = %150
  call void @_ZN7CGenomeD1Ev(ptr noundef nonnull align 8 dereferenceable(108) %13) #8
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %13) #8
  br label %158

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

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

157:                                              ; preds = %155, %153
  %.pn167 = phi { ptr, i32 } [ %156, %155 ], [ %154, %153 ]
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %13) #8
  br label %159

158:                                              ; preds = %152, %.critedge
  call void @_ZN7CGenomeD1Ev(ptr noundef nonnull align 8 dereferenceable(108) %11) #8
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %11) #8
  br label %163

159:                                              ; preds = %157, %146
  %.pn169.pn = phi { ptr, i32 } [ %.pn169, %146 ], [ %.pn167, %157 ]
  call void @_ZN7CGenomeD1Ev(ptr noundef nonnull align 8 dereferenceable(108) %11) #8
  br label %160

160:                                              ; preds = %159, %140
  %.pn169.pn.pn = phi { ptr, i32 } [ %.pn169.pn, %159 ], [ %141, %140 ]
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %11) #8
  br label %164

161:                                              ; preds = %94
  %162 = invoke noundef nonnull align 8 dereferenceable(108) ptr @_ZN7CGenomeaSERKS_(ptr noundef nonnull align 8 dereferenceable(108) %7, ptr noundef nonnull align 8 dereferenceable(108) %10)
          to label %163 unwind label %138

163:                                              ; preds = %161, %158
  call void @_ZN7CGenomeD1Ev(ptr noundef nonnull align 8 dereferenceable(108) %10) #8
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %10) #8
  br label %166

164:                                              ; preds = %160, %138
  %.pn169.pn.pn.pn = phi { ptr, i32 } [ %.pn169.pn.pn, %160 ], [ %139, %138 ]
  call void @_ZN7CGenomeD1Ev(ptr noundef nonnull align 8 dereferenceable(108) %10) #8
  br label %165

165:                                              ; preds = %164, %136
  %.pn169.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn169.pn.pn.pn, %164 ], [ %137, %136 ]
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %10) #8
  br label %503

166:                                              ; preds = %163, %84
  %167 = load i32, ptr %48, align 4, !tbaa !14
  %168 = add nsw i32 %167, 1
  store i32 %168, ptr %48, align 4, !tbaa !14
  call void @_ZN7CGenome5SetIDEi(ptr noundef nonnull align 8 dereferenceable(108) %7, i32 noundef %168)
  %169 = call noundef i32 @_ZNK7CGenome10NumNeuronsEv(ptr noundef nonnull align 8 dereferenceable(108) %7)
  %170 = icmp slt i32 %169, 3000
  br i1 %170, label %171, label %.invoke

171:                                              ; preds = %166
  %172 = load ptr, ptr %49, align 8, !tbaa !32
  invoke void @_ZN7CGenome9AddNeuronEdR11CInnovationi(ptr noundef nonnull align 8 dereferenceable(108) %7, double noundef 5.000000e-02, ptr noundef nonnull align 8 dereferenceable(32) %172, i32 noundef 10)
          to label %.invoke unwind label %85

.invoke:                                          ; preds = %171, %166
  %173 = load i8, ptr %50, align 8, !tbaa !33, !range !34, !noundef !35
  %174 = trunc nuw i8 %173 to i1
  %175 = load ptr, ptr %49, align 8, !tbaa !32
  %. = select i1 %174, double 0.000000e+00, double 5.000000e-04
  invoke void @_ZN7CGenome7AddLinkEddR11CInnovationii(ptr noundef nonnull align 8 dereferenceable(108) %7, double noundef 4.000000e-01, double noundef %., ptr noundef nonnull align 8 dereferenceable(32) %175, i32 noundef 10, i32 noundef 10)
          to label %176 unwind label %85

176:                                              ; preds = %.invoke
  invoke void @_ZN7CGenome13MutateWeightsEddd(ptr noundef nonnull align 8 dereferenceable(108) %7, double noundef 1.200000e+00, double noundef 4.000000e-01, double noundef 1.000000e+00)
          to label %177 unwind label %85

177:                                              ; preds = %176
  invoke void @_ZN7CGenome24MutateActivationResponseEdd(ptr noundef nonnull align 8 dereferenceable(108) %7, double noundef 5.000000e-01, double noundef 5.000000e-01)
          to label %178 unwind label %85

178:                                              ; preds = %177, %70
  invoke void @_ZN7CGenome9SortGenesEv(ptr noundef nonnull align 8 dereferenceable(108) %7)
          to label %179 unwind label %85

179:                                              ; preds = %178
  invoke void @_ZNSt6vectorI7CGenomeSaIS0_EE9push_backERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %6, ptr noundef nonnull align 8 dereferenceable(108) %7)
          to label %select.unfold unwind label %85

select.unfold:                                    ; preds = %179
  %180 = add nsw i32 %.1230, 1
  %181 = icmp eq i32 %180, 3000
  %.not162301 = icmp eq i32 %65, 0
  %.not162 = select i1 %181, i1 true, i1 %.not162301
  br i1 %.not162, label %.loopexit191, label %.lr.ph232

.loopexit191:                                     ; preds = %select.unfold, %61, %59
  %.2 = phi i32 [ %.083234, %59 ], [ %.083234, %61 ], [ %180, %select.unfold ]
  %indvars.iv.next281 = add nuw nsw i64 %indvars.iv280, 1
  %182 = call noundef i64 @_ZNKSt6vectorI8CSpeciesSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %33) #8
  %183 = icmp ugt i64 %182, %indvars.iv.next281
  br i1 %183, label %59, label %.preheader189, !llvm.loop !36

.lr.ph238:                                        ; preds = %.preheader189, %190
  %.3237 = phi i32 [ %191, %190 ], [ %.2, %.preheader189 ]
  %184 = call noundef i32 @_Z7RandIntii(i32 noundef 0, i32 noundef %.3237)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %16) #8
  %185 = call ptr @_ZNSt6vectorI7CGenomeSaIS0_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %6) #8
  store ptr %185, ptr %16, align 8
  %186 = sext i32 %184 to i64
  %187 = call ptr @_ZNK9__gnu_cxx17__normal_iteratorIP7CGenomeSt6vectorIS1_SaIS1_EEEplEl(ptr noundef nonnull align 8 dereferenceable(8) %16, i64 noundef %186) #8
  store ptr %187, ptr %15, align 8
  call void @_ZN9__gnu_cxx17__normal_iteratorIPK7CGenomeSt6vectorIS1_SaIS1_EEEC2IPS1_vEERKNS0_IT_S6_EE(ptr noundef nonnull align 8 dereferenceable(8) %14, ptr noundef nonnull align 8 dereferenceable(8) %15) #8
  %188 = load ptr, ptr %14, align 8
  %189 = invoke ptr @_ZNSt6vectorI7CGenomeSaIS0_EE5eraseEN9__gnu_cxx17__normal_iteratorIPKS0_S2_EE(ptr noundef nonnull align 8 dereferenceable(24) %6, ptr %188)
          to label %190 unwind label %193

190:                                              ; preds = %.lr.ph238
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #8
  %191 = add nsw i32 %.3237, -1
  %192 = icmp sgt i32 %.3237, 3001
  br i1 %192, label %.lr.ph238, label %._crit_edge239, !llvm.loop !37

193:                                              ; preds = %.lr.ph238
  %194 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #8
  br label %503

._crit_edge239:                                   ; preds = %190, %.preheader192, %.preheader189
  %.3.lcssa = phi i32 [ %.2, %.preheader189 ], [ 0, %.preheader192 ], [ 3000, %190 ]
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %17) #8
  call void @_ZNSt6vectorIiSaIiEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %17) #8
  %195 = getelementptr inbounds i8, ptr %1, i64 260
  %196 = load i32, ptr %195, align 4, !tbaa !38
  switch i32 %196, label %365 [
    i32 0, label %197
    i32 1, label %262
  ]

197:                                              ; preds = %._crit_edge239
  %.not143 = icmp eq i32 %.3.lcssa, 3000
  br i1 %.not143, label %372, label %198

198:                                              ; preds = %197
  call void @llvm.lifetime.start.p0(i64 112, ptr nonnull %18) #8
  invoke void @_ZN7CGenomeC1Ev(ptr noundef nonnull align 8 dereferenceable(108) %18)
          to label %.lr.ph254 unwind label %219

.lr.ph254:                                        ; preds = %198
  %199 = sub nsw i32 3000, %.3.lcssa
  %200 = sub i32 2999, %.3.lcssa
  %201 = getelementptr inbounds i8, ptr %1, i64 164
  %202 = getelementptr inbounds i8, ptr %1, i64 257
  br label %203

203:                                              ; preds = %.lr.ph254, %258
  %204 = phi i32 [ %200, %.lr.ph254 ], [ %259, %258 ]
  %.096252 = phi i32 [ %199, %.lr.ph254 ], [ %.197, %258 ]
  call void @llvm.lifetime.start.p0(i64 112, ptr nonnull %19) #8
  %205 = load i32, ptr %201, align 4, !tbaa !39
  %206 = sdiv i32 %205, 20
  invoke void @_ZN3Cga19TournamentSelectionEi(ptr dead_on_unwind nonnull writable sret(%class.CGenome) align 8 %19, ptr noundef nonnull align 8 dereferenceable(265) %1, i32 noundef %206)
          to label %207 unwind label %221

207:                                              ; preds = %203
  %208 = invoke noundef nonnull align 8 dereferenceable(108) ptr @_ZN7CGenomeaSERKS_(ptr noundef nonnull align 8 dereferenceable(108) %18, ptr noundef nonnull align 8 dereferenceable(108) %19)
          to label %209 unwind label %223

209:                                              ; preds = %207
  call void @_ZN7CGenomeD1Ev(ptr noundef nonnull align 8 dereferenceable(108) %19) #8
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %19) #8
  %210 = call noundef i32 @_ZNK7CGenome2IDEv(ptr noundef nonnull align 8 dereferenceable(108) %18)
  %211 = load i8, ptr %202, align 1, !tbaa !40, !range !34, !noundef !35
  %212 = trunc nuw i8 %211 to i1
  br i1 %212, label %213, label %228

213:                                              ; preds = %209
  %214 = 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.1)
          to label %215 unwind label %226

215:                                              ; preds = %213
  %216 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %214, i32 noundef %210)
          to label %217 unwind label %226

217:                                              ; preds = %215
  %218 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %216, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %228 unwind label %226

219:                                              ; preds = %198
  %220 = landingpad { ptr, i32 }
          cleanup
  br label %261

221:                                              ; preds = %203
  %222 = landingpad { ptr, i32 }
          cleanup
  br label %225

223:                                              ; preds = %207
  %224 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN7CGenomeD1Ev(ptr noundef nonnull align 8 dereferenceable(108) %19) #8
  br label %225

225:                                              ; preds = %223, %221
  %.pn154 = phi { ptr, i32 } [ %224, %223 ], [ %222, %221 ]
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %19) #8
  br label %260

226:                                              ; preds = %256, %254, %252, %250, %246, %244, %242, %240, %217, %215, %213
  %227 = landingpad { ptr, i32 }
          cleanup
  br label %260

228:                                              ; preds = %217, %209
  %229 = call noundef i64 @_ZNKSt6vectorI7CGenomeSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %6) #8
  %.not156247.not = icmp eq i64 %229, 0
  br i1 %.not156247.not, label %.critedge182, label %.lr.ph250

230:                                              ; preds = %.lr.ph250
  %231 = add i32 %.090248, 1
  %232 = zext i32 %231 to i64
  %233 = call noundef i64 @_ZNKSt6vectorI7CGenomeSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %6) #8
  %.not156 = icmp ugt i64 %233, %232
  br i1 %.not156, label %.lr.ph250, label %.critedge182, !llvm.loop !41

.lr.ph250:                                        ; preds = %228, %230
  %234 = phi i64 [ %232, %230 ], [ 0, %228 ]
  %.090248 = phi i32 [ %231, %230 ], [ 0, %228 ]
  %235 = call noundef nonnull align 8 dereferenceable(108) ptr @_ZNSt6vectorI7CGenomeSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %6, i64 noundef %234) #8
  %236 = call noundef i32 @_ZNK7CGenome2IDEv(ptr noundef nonnull align 8 dereferenceable(108) %235)
  %237 = icmp eq i32 %210, %236
  br i1 %237, label %247, label %230

.critedge182:                                     ; preds = %230, %228
  %238 = load i8, ptr %202, align 1, !tbaa !40, !range !34, !noundef !35
  %239 = trunc nuw i8 %238 to i1
  br i1 %239, label %240, label %246

240:                                              ; preds = %.critedge182
  %241 = 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.2)
          to label %242 unwind label %226

242:                                              ; preds = %240
  %243 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %241, i32 noundef %210)
          to label %244 unwind label %226

244:                                              ; preds = %242
  %245 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %243, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %246 unwind label %226

246:                                              ; preds = %244, %.critedge182
  invoke void @_ZNSt6vectorI7CGenomeSaIS0_EE9push_backERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %6, ptr noundef nonnull align 8 dereferenceable(108) %18)
          to label %258 unwind label %226

247:                                              ; preds = %.lr.ph250
  %248 = load i8, ptr %202, align 1, !tbaa !40, !range !34, !noundef !35
  %249 = trunc nuw i8 %248 to i1
  br i1 %249, label %250, label %258

250:                                              ; preds = %247
  %251 = 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.3)
          to label %252 unwind label %226

252:                                              ; preds = %250
  %253 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %251, i32 noundef %210)
          to label %254 unwind label %226

254:                                              ; preds = %252
  %255 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %253, ptr noundef nonnull @.str.4)
          to label %256 unwind label %226

256:                                              ; preds = %254
  %257 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %255, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %258 unwind label %226

258:                                              ; preds = %247, %256, %246
  %.197 = phi i32 [ %204, %246 ], [ %.096252, %256 ], [ %.096252, %247 ]
  %259 = add nsw i32 %.197, -1
  %.not144 = icmp eq i32 %.197, 0
  br i1 %.not144, label %._crit_edge255, label %203, !llvm.loop !42

._crit_edge255:                                   ; preds = %258
  call void @_ZN7CGenomeD1Ev(ptr noundef nonnull align 8 dereferenceable(108) %18) #8
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %18) #8
  br label %372

260:                                              ; preds = %226, %225
  %.pn157 = phi { ptr, i32 } [ %227, %226 ], [ %.pn154, %225 ]
  call void @_ZN7CGenomeD1Ev(ptr noundef nonnull align 8 dereferenceable(108) %18) #8
  br label %261

261:                                              ; preds = %260, %219
  %.pn157.pn = phi { ptr, i32 } [ %.pn157, %260 ], [ %220, %219 ]
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %18) #8
  br label %502

262:                                              ; preds = %._crit_edge239
  %.not136 = icmp eq i32 %.3.lcssa, 3000
  br i1 %.not136, label %372, label %263

263:                                              ; preds = %262
  call void @llvm.lifetime.start.p0(i64 112, ptr nonnull %20) #8
  invoke void @_ZN7CGenomeC1Ev(ptr noundef nonnull align 8 dereferenceable(108) %20)
          to label %.lr.ph245 unwind label %293

.lr.ph245:                                        ; preds = %263
  %264 = sub i32 2999, %.3.lcssa
  %265 = getelementptr inbounds i8, ptr %1, i64 164
  %266 = getelementptr inbounds i8, ptr %1, i64 257
  %267 = getelementptr inbounds i8, ptr %1, i64 156
  %268 = getelementptr inbounds i8, ptr %1, i64 144
  %269 = getelementptr inbounds i8, ptr %1, i64 256
  br label %270

270:                                              ; preds = %.lr.ph245, %362
  %271 = phi i32 [ %264, %.lr.ph245 ], [ %363, %362 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %21) #8
  br label %272

272:                                              ; preds = %270, %324
  %273 = phi i32 [ 9, %270 ], [ %325, %324 ]
  call void @llvm.lifetime.start.p0(i64 112, ptr nonnull %22) #8
  %274 = load i32, ptr %265, align 4, !tbaa !39
  %275 = sdiv i32 %274, 5
  invoke void @_ZN3Cga19TournamentSelectionEi(ptr dead_on_unwind nonnull writable sret(%class.CGenome) align 8 %22, ptr noundef nonnull align 8 dereferenceable(265) %1, i32 noundef %275)
          to label %276 unwind label %295

276:                                              ; preds = %272
  %277 = invoke noundef nonnull align 8 dereferenceable(108) ptr @_ZN7CGenomeaSERKS_(ptr noundef nonnull align 8 dereferenceable(108) %20, ptr noundef nonnull align 8 dereferenceable(108) %22)
          to label %278 unwind label %297

278:                                              ; preds = %276
  call void @_ZN7CGenomeD1Ev(ptr noundef nonnull align 8 dereferenceable(108) %22) #8
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %22) #8
  %279 = call noundef i32 @_ZNK7CGenome2IDEv(ptr noundef nonnull align 8 dereferenceable(108) %20)
  store i32 %279, ptr %21, align 4, !tbaa !43
  %280 = load i8, ptr %266, align 1, !tbaa !40, !range !34, !noundef !35
  %281 = trunc nuw i8 %280 to i1
  br i1 %281, label %282, label %300

282:                                              ; preds = %278
  %283 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.5)
          to label %284 unwind label %.loopexit.loopexit

284:                                              ; preds = %282
  %285 = load i32, ptr %21, align 4, !tbaa !43
  %286 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %283, i32 noundef %285)
          to label %287 unwind label %.loopexit.loopexit

287:                                              ; preds = %284
  %288 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %286, ptr noundef nonnull @.str.6)
          to label %289 unwind label %.loopexit.loopexit

289:                                              ; preds = %287
  %290 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %288, i32 noundef %273)
          to label %291 unwind label %.loopexit.loopexit

291:                                              ; preds = %289
  %292 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %290, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %300 unwind label %.loopexit.loopexit

293:                                              ; preds = %263
  %294 = landingpad { ptr, i32 }
          cleanup
  br label %364

295:                                              ; preds = %272
  %296 = landingpad { ptr, i32 }
          cleanup
  br label %299

297:                                              ; preds = %276
  %298 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN7CGenomeD1Ev(ptr noundef nonnull align 8 dereferenceable(108) %22) #8
  br label %299

299:                                              ; preds = %297, %295
  %.pn = phi { ptr, i32 } [ %298, %297 ], [ %296, %295 ]
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %22) #8
  br label %.loopexit

.loopexit.loopexit:                               ; preds = %291, %289, %287, %284, %282
  %lpad.loopexit295 = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit

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

.loopexit.split-lp:                               ; preds = %.invoke299, %328, %330, %333, %335, %341, %343, %346, %348, %353, %358, %359, %360, %361
  %lpad.loopexit.split-lp = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit

300:                                              ; preds = %291, %278
  %301 = call noundef i64 @_ZNKSt6vectorIiSaIiEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %17) #8
  %.not270 = icmp eq i64 %301, 0
  br i1 %.not270, label %.critedge184, label %.lr.ph243

302:                                              ; preds = %.lr.ph243
  %indvars.iv.next284 = add nuw nsw i64 %indvars.iv283, 1
  %303 = call noundef i64 @_ZNKSt6vectorIiSaIiEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %17) #8
  %304 = icmp ugt i64 %303, %indvars.iv.next284
  br i1 %304, label %.lr.ph243, label %.critedge184, !llvm.loop !44

.lr.ph243:                                        ; preds = %300, %302
  %indvars.iv283 = phi i64 [ %indvars.iv.next284, %302 ], [ 0, %300 ]
  %305 = load i32, ptr %21, align 4, !tbaa !43
  %306 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %17, i64 noundef %indvars.iv283) #8
  %307 = load i32, ptr %306, align 4, !tbaa !43
  %308 = icmp eq i32 %305, %307
  br i1 %308, label %309, label %302

309:                                              ; preds = %.lr.ph243
  %310 = load i8, ptr %266, align 1, !tbaa !40, !range !34, !noundef !35
  %311 = trunc nuw i8 %310 to i1
  br i1 %311, label %312, label %324

312:                                              ; preds = %309
  %313 = 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.7)
          to label %314 unwind label %316

314:                                              ; preds = %312
  %315 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %313, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %324 unwind label %316

316:                                              ; preds = %314, %312
  %317 = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit

.critedge184:                                     ; preds = %300, %302
  %318 = load i8, ptr %266, align 1, !tbaa !40, !range !34, !noundef !35
  %319 = trunc nuw i8 %318 to i1
  br i1 %319, label %320, label %.thread

320:                                              ; preds = %.critedge184
  %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.8)
          to label %322 unwind label %.loopexit.loopexit.split-lp

322:                                              ; preds = %320
  %323 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %321, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %.thread unwind label %.loopexit.loopexit.split-lp

324:                                              ; preds = %314, %309
  %325 = add nsw i32 %273, -1
  %.not138 = icmp eq i32 %273, 0
  br i1 %.not138, label %.thread, label %272, !llvm.loop !45

.thread:                                          ; preds = %324, %.critedge184, %322
  %326 = load i8, ptr %266, align 1, !tbaa !40, !range !34, !noundef !35
  %327 = trunc nuw i8 %326 to i1
  br i1 %327, label %328, label %335

328:                                              ; preds = %.thread
  %329 = 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.9)
          to label %330 unwind label %.loopexit.split-lp

330:                                              ; preds = %328
  %331 = load i32, ptr %21, align 4, !tbaa !43
  %332 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %329, i32 noundef %331)
          to label %333 unwind label %.loopexit.split-lp

333:                                              ; preds = %330
  %334 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %332, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %335 unwind label %.loopexit.split-lp

335:                                              ; preds = %333, %.thread
  invoke void @_ZNSt6vectorIiSaIiEE9push_backERKi(ptr noundef nonnull align 8 dereferenceable(24) %17, ptr noundef nonnull align 4 dereferenceable(4) %21)
          to label %336 unwind label %.loopexit.split-lp

336:                                              ; preds = %335
  %337 = load i32, ptr %267, align 4, !tbaa !14
  %338 = add nsw i32 %337, 1
  store i32 %338, ptr %267, align 4, !tbaa !14
  call void @_ZN7CGenome5SetIDEi(ptr noundef nonnull align 8 dereferenceable(108) %20, i32 noundef %338)
  %339 = load i8, ptr %266, align 1, !tbaa !40, !range !34, !noundef !35
  %340 = trunc nuw i8 %339 to i1
  br i1 %340, label %341, label %350

341:                                              ; preds = %336
  %342 = 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.10)
          to label %343 unwind label %.loopexit.split-lp

343:                                              ; preds = %341
  %344 = call noundef i32 @_ZNK7CGenome2IDEv(ptr noundef nonnull align 8 dereferenceable(108) %20)
  %345 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %342, i32 noundef %344)
          to label %346 unwind label %.loopexit.split-lp

346:                                              ; preds = %343
  %347 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %345, ptr noundef nonnull @.str.11)
          to label %348 unwind label %.loopexit.split-lp

348:                                              ; preds = %346
  %349 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %347, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %350 unwind label %.loopexit.split-lp

350:                                              ; preds = %348, %336
  %351 = call noundef i32 @_ZNK7CGenome10NumNeuronsEv(ptr noundef nonnull align 8 dereferenceable(108) %20)
  %352 = icmp slt i32 %351, 3000
  br i1 %352, label %353, label %.invoke299

353:                                              ; preds = %350
  %354 = load ptr, ptr %268, align 8, !tbaa !32
  invoke void @_ZN7CGenome9AddNeuronEdR11CInnovationi(ptr noundef nonnull align 8 dereferenceable(108) %20, double noundef 1.000000e-01, ptr noundef nonnull align 8 dereferenceable(32) %354, i32 noundef 10)
          to label %.invoke299 unwind label %.loopexit.split-lp

.invoke299:                                       ; preds = %353, %350
  %355 = load i8, ptr %269, align 8, !tbaa !33, !range !34, !noundef !35
  %356 = trunc nuw i8 %355 to i1
  %357 = load ptr, ptr %268, align 8, !tbaa !32
  %.300 = select i1 %356, double 0.000000e+00, double 1.000000e-03
  invoke void @_ZN7CGenome7AddLinkEddR11CInnovationii(ptr noundef nonnull align 8 dereferenceable(108) %20, double noundef 8.000000e-01, double noundef %.300, ptr noundef nonnull align 8 dereferenceable(32) %357, i32 noundef 10, i32 noundef 10)
          to label %358 unwind label %.loopexit.split-lp

358:                                              ; preds = %.invoke299
  invoke void @_ZN7CGenome13MutateWeightsEddd(ptr noundef nonnull align 8 dereferenceable(108) %20, double noundef 2.400000e+00, double noundef 4.000000e-01, double noundef 1.000000e+00)
          to label %359 unwind label %.loopexit.split-lp

359:                                              ; preds = %358
  invoke void @_ZN7CGenome24MutateActivationResponseEdd(ptr noundef nonnull align 8 dereferenceable(108) %20, double noundef 1.000000e+00, double noundef 5.000000e-01)
          to label %360 unwind label %.loopexit.split-lp

360:                                              ; preds = %359
  invoke void @_ZN7CGenome9SortGenesEv(ptr noundef nonnull align 8 dereferenceable(108) %20)
          to label %361 unwind label %.loopexit.split-lp

361:                                              ; preds = %360
  invoke void @_ZNSt6vectorI7CGenomeSaIS0_EE9push_backERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %6, ptr noundef nonnull align 8 dereferenceable(108) %20)
          to label %362 unwind label %.loopexit.split-lp

362:                                              ; preds = %361
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %21) #8
  %363 = add nsw i32 %271, -1
  %.not137 = icmp eq i32 %271, 0
  br i1 %.not137, label %._crit_edge246, label %270, !llvm.loop !46

.loopexit:                                        ; preds = %.loopexit.loopexit, %.loopexit.loopexit.split-lp, %.loopexit.split-lp, %316, %299
  %.pn140 = phi { ptr, i32 } [ %317, %316 ], [ %.pn, %299 ], [ %lpad.loopexit.split-lp, %.loopexit.split-lp ], [ %lpad.loopexit295, %.loopexit.loopexit ], [ %lpad.loopexit.split-lp296, %.loopexit.loopexit.split-lp ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %21) #8
  call void @_ZN7CGenomeD1Ev(ptr noundef nonnull align 8 dereferenceable(108) %20) #8
  br label %364

._crit_edge246:                                   ; preds = %362
  call void @_ZN7CGenomeD1Ev(ptr noundef nonnull align 8 dereferenceable(108) %20) #8
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %20) #8
  br label %372

364:                                              ; preds = %.loopexit, %293
  %.pn140.pn = phi { ptr, i32 } [ %.pn140, %.loopexit ], [ %294, %293 ]
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %20) #8
  br label %502

365:                                              ; preds = %._crit_edge239
  %366 = 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.12)
          to label %367 unwind label %370

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

369:                                              ; preds = %367
  call void @exit(i32 noundef 1) #9
  unreachable

370:                                              ; preds = %385, %382, %379, %377, %367, %365
  %371 = landingpad { ptr, i32 }
          cleanup
  br label %502

372:                                              ; preds = %262, %._crit_edge246, %197, %._crit_edge255
  %373 = call noundef i64 @_ZNKSt6vectorI7CGenomeSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %6) #8
  %374 = getelementptr inbounds i8, ptr %1, i64 164
  %375 = load i32, ptr %374, align 4, !tbaa !39
  %376 = sext i32 %375 to i64
  %.not145 = icmp eq i64 %373, %376
  br i1 %.not145, label %385, label %377

377:                                              ; preds = %372
  %378 = 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.13)
          to label %379 unwind label %370

379:                                              ; preds = %377
  %380 = call noundef i64 @_ZNKSt6vectorI7CGenomeSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %6) #8
  %381 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %378, i64 noundef %380)
          to label %382 unwind label %370

382:                                              ; preds = %379
  %383 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %381, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %384 unwind label %370

384:                                              ; preds = %382
  call void @exit(i32 noundef 1) #9
  unreachable

385:                                              ; preds = %372
  %386 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorI7CGenomeSaIS0_EEaSERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %1, ptr noundef nonnull align 8 dereferenceable(24) %6)
          to label %387 unwind label %370

387:                                              ; preds = %385
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %23) #8
  call void @_ZNSt6vectorIiSaIiEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %23) #8
  %388 = call noundef i64 @_ZNKSt6vectorI7CGenomeSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %1) #8
  %.not271 = icmp eq i64 %388, 0
  br i1 %.not271, label %._crit_edge259, label %.lr.ph258

._crit_edge259:                                   ; preds = %394, %387
  %389 = call ptr @_ZNSt6vectorIiSaIiEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %23) #8
  %390 = call ptr @_ZNSt6vectorIiSaIiEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %23) #8
  invoke void @_ZSt4sortIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEEvT_S7_(ptr %389, ptr %390)
          to label %.preheader187 unwind label %407

.lr.ph258:                                        ; preds = %387, %394
  %391 = phi i64 [ %396, %394 ], [ 0, %387 ]
  %.084256 = phi i32 [ %395, %394 ], [ 0, %387 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %24) #8
  %392 = call noundef nonnull align 8 dereferenceable(108) ptr @_ZNSt6vectorI7CGenomeSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %1, i64 noundef %391) #8
  %393 = call noundef i32 @_ZNK7CGenome2IDEv(ptr noundef nonnull align 8 dereferenceable(108) %392)
  store i32 %393, ptr %24, align 4, !tbaa !43
  invoke void @_ZNSt6vectorIiSaIiEE9push_backEOi(ptr noundef nonnull align 8 dereferenceable(24) %23, ptr noundef nonnull align 4 dereferenceable(4) %24)
          to label %394 unwind label %399

394:                                              ; preds = %.lr.ph258
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %24) #8
  %395 = add i32 %.084256, 1
  %396 = zext i32 %395 to i64
  %397 = call noundef i64 @_ZNKSt6vectorI7CGenomeSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %1) #8
  %398 = icmp ugt i64 %397, %396
  br i1 %398, label %.lr.ph258, label %._crit_edge259, !llvm.loop !47

399:                                              ; preds = %.lr.ph258
  %400 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %24) #8
  br label %501

.preheader187:                                    ; preds = %._crit_edge259, %409
  %.081 = phi i32 [ %412, %409 ], [ 0, %._crit_edge259 ]
  %401 = zext i32 %.081 to i64
  %402 = call noundef i64 @_ZNKSt6vectorIiSaIiEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %23) #8
  %403 = add i64 %402, -1
  %404 = icmp ugt i64 %403, %401
  br i1 %404, label %409, label %405

405:                                              ; preds = %.preheader187
  call void @_ZNSt6vectorIP10CNeuralNetSaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %0) #8
  %406 = call noundef i64 @_ZNKSt6vectorI7CGenomeSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %1) #8
  %.not272 = icmp eq i64 %406, 0
  br i1 %.not272, label %._crit_edge263, label %.lr.ph262

407:                                              ; preds = %._crit_edge259
  %408 = landingpad { ptr, i32 }
          cleanup
  br label %501

409:                                              ; preds = %.preheader187
  %410 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %23, i64 noundef %401) #8
  %411 = load i32, ptr %410, align 4, !tbaa !43
  %412 = add i32 %.081, 1
  %413 = zext i32 %412 to i64
  %414 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %23, i64 noundef %413) #8
  %415 = load i32, ptr %414, align 4, !tbaa !43
  %416 = icmp eq i32 %411, %415
  br i1 %416, label %417, label %.preheader187, !llvm.loop !48

417:                                              ; preds = %409
  %418 = 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.14)
          to label %419 unwind label %432

419:                                              ; preds = %417
  %420 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %23, i64 noundef %401) #8
  %421 = load i32, ptr %420, align 4, !tbaa !43
  %422 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %418, i32 noundef %421)
          to label %423 unwind label %432

423:                                              ; preds = %419
  %424 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %422, ptr noundef nonnull @.str.15)
          to label %425 unwind label %432

425:                                              ; preds = %423
  %426 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %424, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %427 unwind label %432

427:                                              ; preds = %425
  %428 = 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.16)
          to label %429 unwind label %432

429:                                              ; preds = %427
  %430 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %428, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %.preheader186 unwind label %432

.preheader186:                                    ; preds = %429
  %431 = call noundef i64 @_ZNKSt6vectorI8CSpeciesSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %33) #8
  %.not273 = icmp eq i64 %431, 0
  br i1 %.not273, label %.preheader.preheader, label %.lr.ph265

.preheader.preheader:                             ; preds = %449, %.preheader186
  br label %.preheader

432:                                              ; preds = %429, %427, %425, %423, %419, %417
  %433 = landingpad { ptr, i32 }
          cleanup
  br label %501

.lr.ph265:                                        ; preds = %.preheader186, %449
  %434 = phi i64 [ %451, %449 ], [ 0, %.preheader186 ]
  %.080264 = phi i32 [ %450, %449 ], [ 0, %.preheader186 ]
  %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.17)
          to label %436 unwind label %454

436:                                              ; preds = %.lr.ph265
  %437 = call noundef nonnull align 8 dereferenceable(168) ptr @_ZNSt6vectorI8CSpeciesSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %33, i64 noundef %434) #8
  %438 = call noundef i32 @_ZNK8CSpecies2IDEv(ptr noundef nonnull align 8 dereferenceable(168) %437)
  %439 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %435, i32 noundef %438)
          to label %440 unwind label %454

440:                                              ; preds = %436
  %441 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %439, ptr noundef nonnull @.str.18)
          to label %442 unwind label %454

442:                                              ; preds = %440
  call void @llvm.lifetime.start.p0(i64 112, ptr nonnull %25) #8
  %443 = call noundef nonnull align 8 dereferenceable(168) ptr @_ZNSt6vectorI8CSpeciesSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %33, i64 noundef %434) #8
  invoke void @_ZNK8CSpecies6LeaderEv(ptr dead_on_unwind nonnull writable sret(%class.CGenome) align 8 %25, ptr noundef nonnull align 8 dereferenceable(168) %443)
          to label %444 unwind label %456

444:                                              ; preds = %442
  %445 = call noundef i32 @_ZNK7CGenome2IDEv(ptr noundef nonnull align 8 dereferenceable(108) %25)
  %446 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %441, i32 noundef %445)
          to label %447 unwind label %458

447:                                              ; preds = %444
  %448 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %446, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %449 unwind label %458

449:                                              ; preds = %447
  call void @_ZN7CGenomeD1Ev(ptr noundef nonnull align 8 dereferenceable(108) %25) #8
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %25) #8
  %450 = add i32 %.080264, 1
  %451 = zext i32 %450 to i64
  %452 = call noundef i64 @_ZNKSt6vectorI8CSpeciesSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %33) #8
  %453 = icmp ugt i64 %452, %451
  br i1 %453, label %.lr.ph265, label %.preheader.preheader, !llvm.loop !49

454:                                              ; preds = %440, %436, %.lr.ph265
  %455 = landingpad { ptr, i32 }
          cleanup
  br label %501

456:                                              ; preds = %442
  %457 = landingpad { ptr, i32 }
          cleanup
  br label %460

458:                                              ; preds = %447, %444
  %459 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN7CGenomeD1Ev(ptr noundef nonnull align 8 dereferenceable(108) %25) #8
  br label %460

460:                                              ; preds = %458, %456
  %.pn148 = phi { ptr, i32 } [ %459, %458 ], [ %457, %456 ]
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %25) #8
  br label %501

461:                                              ; preds = %480
  call void @exit(i32 noundef 1) #9
  unreachable

.preheader:                                       ; preds = %.preheader.preheader, %480
  %indvars.iv289 = phi i64 [ %indvars.iv.next290, %480 ], [ 0, %.preheader.preheader ]
  %462 = 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.19)
          to label %463 unwind label %481

463:                                              ; preds = %.preheader
  %464 = trunc nuw nsw i64 %indvars.iv289 to i32
  %465 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %462, i32 noundef %464)
          to label %466 unwind label %481

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

468:                                              ; preds = %466
  %469 = call noundef nonnull align 8 dereferenceable(108) ptr @_ZNSt6vectorI7CGenomeSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %1, i64 noundef %indvars.iv289) #8
  %470 = call noundef i32 @_ZNK7CGenome2IDEv(ptr noundef nonnull align 8 dereferenceable(108) %469)
  %471 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %467, i32 noundef %470)
          to label %472 unwind label %481

472:                                              ; preds = %468
  %473 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %471, ptr noundef nonnull @.str.21)
          to label %474 unwind label %481

474:                                              ; preds = %472
  %475 = call noundef nonnull align 8 dereferenceable(108) ptr @_ZNSt6vectorI7CGenomeSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %1, i64 noundef %indvars.iv289) #8
  %476 = call noundef i32 @_ZNK7CGenome10GetSpeciesEv(ptr noundef nonnull align 8 dereferenceable(108) %475)
  %477 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %473, i32 noundef %476)
          to label %478 unwind label %481

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

480:                                              ; preds = %478
  %indvars.iv.next290 = add nuw nsw i64 %indvars.iv289, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next290, 3000
  br i1 %exitcond.not, label %461, label %.preheader, !llvm.loop !50

481:                                              ; preds = %478, %474, %472, %468, %466, %463, %.preheader
  %482 = landingpad { ptr, i32 }
          cleanup
  br label %501

._crit_edge263:                                   ; preds = %493, %405
  %483 = getelementptr inbounds i8, ptr %1, i64 152
  %484 = load i32, ptr %483, align 8, !tbaa !51
  %485 = add nsw i32 %484, 1
  store i32 %485, ptr %483, align 8, !tbaa !51
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %23) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %23) #8
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %17) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %17) #8
  call void @_ZN7CGenomeD1Ev(ptr noundef nonnull align 8 dereferenceable(108) %7) #8
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %7) #8
  call void @_ZNSt6vectorI7CGenomeSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %6) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #8
  ret void

.lr.ph262:                                        ; preds = %405, %493
  %indvars.iv286 = phi i64 [ %indvars.iv.next287, %493 ], [ 0, %405 ]
  %486 = call noundef nonnull align 8 dereferenceable(108) ptr @_ZNSt6vectorI7CGenomeSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %1, i64 noundef %indvars.iv286) #8
  %487 = invoke noundef i32 @_ZN3Cga17CalculateNetDepthERK7CGenome(ptr noundef nonnull align 8 dereferenceable(265) %1, ptr noundef nonnull align 8 dereferenceable(108) %486)
          to label %488 unwind label %496

488:                                              ; preds = %.lr.ph262
  %489 = call noundef nonnull align 8 dereferenceable(108) ptr @_ZNSt6vectorI7CGenomeSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %1, i64 noundef %indvars.iv286) #8
  call void @_ZN7CGenome8SetDepthEi(ptr noundef nonnull align 8 dereferenceable(108) %489, i32 noundef %487)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %26) #8
  %490 = call noundef nonnull align 8 dereferenceable(108) ptr @_ZNSt6vectorI7CGenomeSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %1, i64 noundef %indvars.iv286) #8
  %491 = invoke noundef ptr @_ZN7CGenome15CreatePhenotypeEv(ptr noundef nonnull align 8 dereferenceable(108) %490)
          to label %492 unwind label %498

492:                                              ; preds = %488
  store ptr %491, ptr %26, align 8, !tbaa !52
  invoke void @_ZNSt6vectorIP10CNeuralNetSaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %0, ptr noundef nonnull align 8 dereferenceable(8) %26)
          to label %493 unwind label %498

493:                                              ; preds = %492
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %26) #8
  %indvars.iv.next287 = add nuw nsw i64 %indvars.iv286, 1
  %494 = call noundef i64 @_ZNKSt6vectorI7CGenomeSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %1) #8
  %495 = icmp ugt i64 %494, %indvars.iv.next287
  br i1 %495, label %.lr.ph262, label %._crit_edge263, !llvm.loop !53

496:                                              ; preds = %.lr.ph262
  %497 = landingpad { ptr, i32 }
          cleanup
  br label %500

498:                                              ; preds = %492, %488
  %499 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %26) #8
  br label %500

500:                                              ; preds = %498, %496
  %.pn146 = phi { ptr, i32 } [ %499, %498 ], [ %497, %496 ]
  call void @_ZNSt6vectorIP10CNeuralNetSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %0) #8
  br label %501

501:                                              ; preds = %432, %481, %460, %454, %500, %407, %399
  %.pn152 = phi { ptr, i32 } [ %400, %399 ], [ %.pn146, %500 ], [ %408, %407 ], [ %482, %481 ], [ %433, %432 ], [ %.pn148, %460 ], [ %455, %454 ]
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %23) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %23) #8
  br label %502

502:                                              ; preds = %501, %370, %364, %261
  %.pn160 = phi { ptr, i32 } [ %371, %370 ], [ %.pn140.pn, %364 ], [ %.pn152, %501 ], [ %.pn157.pn, %261 ]
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %17) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %17) #8
  br label %503

503:                                              ; preds = %75, %85, %91, %165, %502, %193
  %.pn177.pn = phi { ptr, i32 } [ %194, %193 ], [ %.pn160, %502 ], [ %86, %85 ], [ %.pn175, %91 ], [ %.pn169.pn.pn.pn.pn, %165 ], [ %.pn163, %75 ]
  call void @_ZN7CGenomeD1Ev(ptr noundef nonnull align 8 dereferenceable(108) %7) #8
  br label %504

504:                                              ; preds = %503, %57
  %.pn177.pn.pn = phi { ptr, i32 } [ %.pn177.pn, %503 ], [ %58, %57 ]
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %7) #8
  call void @_ZNSt6vectorI7CGenomeSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %6) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #8
  resume { ptr, i32 } %.pn177.pn.pn
}

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNKSt6vectorI7CGenomeSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #0 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 #5

; 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 #3 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)) #5

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

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

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

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

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

declare void @_ZN8CSpecies5PurgeEv(ptr noundef nonnull align 8 dereferenceable(168)) local_unnamed_addr #4

declare void @_ZN8CSpecies16AgeOneGenerationEv(ptr noundef nonnull align 8 dereferenceable(168)) local_unnamed_addr #4

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

declare void @_ZN7CGenome15DeletePhenotypeEv(ptr noundef nonnull align 8 dereferenceable(108)) local_unnamed_addr #4

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN7CGenome10SetFitnessEd(ptr noundef nonnull align 8 dereferenceable(108), double noundef) local_unnamed_addr #0 align 2

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

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

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

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

declare void @_ZN7CGenomeC1Ev(ptr noundef nonnull align 8 dereferenceable(108)) unnamed_addr #4

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_Z7Roundedd(double noundef) local_unnamed_addr #7

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK8CSpecies6LeaderEv(ptr dead_on_unwind noalias writable sret(%class.CGenome) align 8, ptr noundef nonnull align 8 dereferenceable(168)) local_unnamed_addr #3 align 2

declare noundef nonnull align 8 dereferenceable(108) ptr @_ZN7CGenomeaSERKS_(ptr noundef nonnull align 8 dereferenceable(108), ptr noundef nonnull align 8 dereferenceable(108)) local_unnamed_addr #4

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

declare void @_ZN8CSpecies5SpawnEv(ptr dead_on_unwind writable sret(%class.CGenome) align 8, ptr noundef nonnull align 8 dereferenceable(168)) local_unnamed_addr #4

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef double @_Z10RandDoublev() local_unnamed_addr #7

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3Cga9CrossoverER7CGenomeS1_(ptr dead_on_unwind noalias writable sret(%class.CGenome) align 8, ptr noundef nonnull align 8 dereferenceable(265), ptr noundef nonnull align 8 dereferenceable(108), ptr noundef nonnull align 8 dereferenceable(108)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN7CGenome5SetIDEi(ptr noundef nonnull align 8 dereferenceable(108), i32 noundef) local_unnamed_addr #0 align 2

declare void @_ZN7CGenome9AddNeuronEdR11CInnovationi(ptr noundef nonnull align 8 dereferenceable(108), double noundef, ptr noundef nonnull align 8 dereferenceable(32), i32 noundef) local_unnamed_addr #4

declare void @_ZN7CGenome7AddLinkEddR11CInnovationii(ptr noundef nonnull align 8 dereferenceable(108), double noundef, double noundef, ptr noundef nonnull align 8 dereferenceable(32), i32 noundef, i32 noundef) local_unnamed_addr #4

declare void @_ZN7CGenome13MutateWeightsEddd(ptr noundef nonnull align 8 dereferenceable(108), double noundef, double noundef, double noundef) local_unnamed_addr #4

declare void @_ZN7CGenome24MutateActivationResponseEdd(ptr noundef nonnull align 8 dereferenceable(108), double noundef, double noundef) local_unnamed_addr #4

declare void @_ZN7CGenome9SortGenesEv(ptr noundef nonnull align 8 dereferenceable(108)) local_unnamed_addr #4

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3Cga19TournamentSelectionEi(ptr dead_on_unwind noalias writable sret(%class.CGenome) align 8, ptr noundef nonnull align 8 dereferenceable(265), i32 noundef) local_unnamed_addr #3 align 2

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

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

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

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

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

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

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

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

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

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

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

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


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