; LLVM IR from hoodoer/ENNEoS :: enneosEncoder/genotype.ll (ZN7CGenome9AddNeuronEdR11CInnovationi)

; 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 }
%struct.SNeuronGene = type { i32, i32, i8, double, double, double }
%struct.SLinkGene = type <{ i8, [3 x i8], i32, i32, i32, double, i8, [7 x i8] }>
%class.CGenome = type <{ i32, [4 x i8], %"class.std::vector", %"class.std::vector.0", ptr, i32, [4 x i8], double, double, double, i32, i32, i32, [4 x i8] }>
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = 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.0" = type { %"struct.std::_Vector_base.1" }
%"struct.std::_Vector_base.1" = 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 }

@_ZSt4cout = external global %"class.std::basic_ostream", align 8
@.str.10 = external hidden unnamed_addr constant [90 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [100 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [46 x i8], align 1

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN11SNeuronGeneC2E11neuron_typeiddb(ptr noundef nonnull align 8 dereferenceable(40), i32 noundef, i32 noundef, double noundef, double noundef, i1 noundef zeroext) unnamed_addr #2 align 2

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN9SLinkGeneC2Eiibidb(ptr noundef nonnull align 8 dereferenceable(25), i32 noundef, i32 noundef, i1 noundef zeroext, i32 noundef, double noundef, i1 noundef zeroext) unnamed_addr #2 align 2

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

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

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

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 @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) #1 align 2

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN7CGenome9AddNeuronEdR11CInnovationi(ptr noundef nonnull align 8 dereferenceable(108) %0, double noundef %1, ptr noundef nonnull align 8 dereferenceable(32) %2, i32 noundef %3) #1 align 2 {
  %5 = alloca ptr, align 8
  %6 = alloca double, align 8
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca i8, align 1
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca double, align 8
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca double, align 8
  %21 = alloca double, align 8
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca %struct.SNeuronGene, align 8
  %26 = alloca i32, align 4
  %27 = alloca %struct.SLinkGene, align 8
  %28 = alloca i32, align 4
  %29 = alloca %struct.SLinkGene, align 8
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca %struct.SLinkGene, align 8
  %34 = alloca %struct.SLinkGene, align 8
  %35 = alloca %struct.SNeuronGene, align 8
  store ptr %0, ptr %5, align 8, !tbaa !5
  store double %1, ptr %6, align 8, !tbaa !9
  store ptr %2, ptr %7, align 8, !tbaa !5
  store i32 %3, ptr %8, align 4, !tbaa !11
  %36 = load ptr, ptr %5, align 8
  %37 = call noundef double @_Z10RandDoublev()
  %38 = load double, ptr %6, align 8, !tbaa !9
  %39 = fcmp ogt double %37, %38
  br i1 %39, label %40, label %41

40:                                               ; preds = %4
  br label %399

41:                                               ; preds = %4
  call void @llvm.lifetime.start.p0(i64 1, ptr %9) #7
  store i8 0, ptr %9, align 1, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #7
  store i32 0, ptr %10, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #7
  %42 = getelementptr inbounds %class.CGenome, ptr %36, i32 0, i32 10
  %43 = load i32, ptr %42, align 8, !tbaa !15
  %44 = getelementptr inbounds %class.CGenome, ptr %36, i32 0, i32 11
  %45 = load i32, ptr %44, align 4, !tbaa !25
  %46 = add nsw i32 %43, %45
  %47 = add nsw i32 %46, 5
  store i32 %47, ptr %11, align 4, !tbaa !11
  %48 = call noundef i32 @_ZNK7CGenome10NumNeuronsEv(ptr noundef nonnull align 8 dereferenceable(108) %36)
  %49 = load i32, ptr %11, align 4, !tbaa !11
  %50 = icmp slt i32 %48, %49
  br i1 %50, label %51, label %126

51:                                               ; preds = %41
  br label %52

52:                                               ; preds = %120, %51
  %53 = load i32, ptr %8, align 4, !tbaa !11
  %54 = add nsw i32 %53, -1
  store i32 %54, ptr %8, align 4, !tbaa !11
  %55 = icmp ne i32 %53, 0
  br i1 %55, label %56, label %121

56:                                               ; preds = %52
  %57 = call noundef i32 @_ZNK7CGenome8NumGenesEv(ptr noundef nonnull align 8 dereferenceable(108) %36)
  %58 = sub nsw i32 %57, 1
  %59 = call noundef i32 @_ZNK7CGenome8NumGenesEv(ptr noundef nonnull align 8 dereferenceable(108) %36)
  %60 = call noundef double @_ZSt4sqrtIiEN9__gnu_cxx11__enable_ifIXsr12__is_integerIT_EE7__valueEdE6__typeES2_(i32 noundef %59)
  %61 = fptosi double %60 to i32
  %62 = sub nsw i32 %58, %61
  %63 = call noundef i32 @_Z7RandIntii(i32 noundef 0, i32 noundef %62)
  store i32 %63, ptr %10, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #7
  %64 = getelementptr inbounds %class.CGenome, ptr %36, i32 0, i32 3
  %65 = load i32, ptr %10, align 4, !tbaa !11
  %66 = sext i32 %65 to i64
  %67 = call noundef nonnull align 8 dereferenceable(25) ptr @_ZNSt6vectorI9SLinkGeneSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %64, i64 noundef %66) #7
  %68 = getelementptr inbounds %struct.SLinkGene, ptr %67, i32 0, i32 3
  %69 = load i32, ptr %68, align 8, !tbaa !26
  store i32 %69, ptr %12, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #7
  %70 = getelementptr inbounds %class.CGenome, ptr %36, i32 0, i32 3
  %71 = load i32, ptr %10, align 4, !tbaa !11
  %72 = sext i32 %71 to i64
  %73 = call noundef nonnull align 8 dereferenceable(25) ptr @_ZNSt6vectorI9SLinkGeneSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %70, i64 noundef %72) #7
  %74 = getelementptr inbounds %struct.SLinkGene, ptr %73, i32 0, i32 4
  %75 = load i32, ptr %74, align 4, !tbaa !28
  store i32 %75, ptr %13, align 4, !tbaa !11
  %76 = getelementptr inbounds %class.CGenome, ptr %36, i32 0, i32 3
  %77 = load i32, ptr %10, align 4, !tbaa !11
  %78 = sext i32 %77 to i64
  %79 = call noundef nonnull align 8 dereferenceable(25) ptr @_ZNSt6vectorI9SLinkGeneSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %76, i64 noundef %78) #7
  %80 = getelementptr inbounds %struct.SLinkGene, ptr %79, i32 0, i32 0
  %81 = load i8, ptr %80, align 8, !tbaa !29, !range !30, !noundef !31
  %82 = trunc i8 %81 to i1
  br i1 %82, label %83, label %120

83:                                               ; preds = %56
  %84 = getelementptr inbounds %class.CGenome, ptr %36, i32 0, i32 3
  %85 = load i32, ptr %10, align 4, !tbaa !11
  %86 = sext i32 %85 to i64
  %87 = call noundef nonnull align 8 dereferenceable(25) ptr @_ZNSt6vectorI9SLinkGeneSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %84, i64 noundef %86) #7
  %88 = getelementptr inbounds %struct.SLinkGene, ptr %87, i32 0, i32 6
  %89 = load i8, ptr %88, align 8, !tbaa !32, !range !30, !noundef !31
  %90 = trunc i8 %89 to i1
  br i1 %90, label %120, label %91

91:                                               ; preds = %83
  %92 = getelementptr inbounds %class.CGenome, ptr %36, i32 0, i32 2
  %93 = load i32, ptr %12, align 4, !tbaa !11
  %94 = call noundef i32 @_ZN7CGenome13GetElementPosEi(ptr noundef nonnull align 8 dereferenceable(108) %36, i32 noundef %93)
  %95 = sext i32 %94 to i64
  %96 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNSt6vectorI11SNeuronGeneSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %92, i64 noundef %95) #7
  %97 = getelementptr inbounds %struct.SNeuronGene, ptr %96, i32 0, i32 1
  %98 = load i32, ptr %97, align 4, !tbaa !33
  %99 = icmp ne i32 %98, 3
  br i1 %99, label %100, label %120

100:                                              ; preds = %91
  %101 = getelementptr inbounds %class.CGenome, ptr %36, i32 0, i32 2
  %102 = load i32, ptr %12, align 4, !tbaa !11
  %103 = call noundef i32 @_ZN7CGenome13GetElementPosEi(ptr noundef nonnull align 8 dereferenceable(108) %36, i32 noundef %102)
  %104 = sext i32 %103 to i64
  %105 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNSt6vectorI11SNeuronGeneSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %101, i64 noundef %104) #7
  %106 = getelementptr inbounds %struct.SNeuronGene, ptr %105, i32 0, i32 1
  %107 = load i32, ptr %106, align 4, !tbaa !33
  %108 = icmp ne i32 %107, 2
  br i1 %108, label %118, label %109

109:                                              ; preds = %100
  %110 = getelementptr inbounds %class.CGenome, ptr %36, i32 0, i32 2
  %111 = load i32, ptr %13, align 4, !tbaa !11
  %112 = call noundef i32 @_ZN7CGenome13GetElementPosEi(ptr noundef nonnull align 8 dereferenceable(108) %36, i32 noundef %111)
  %113 = sext i32 %112 to i64
  %114 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNSt6vectorI11SNeuronGeneSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %110, i64 noundef %113) #7
  %115 = getelementptr inbounds %struct.SNeuronGene, ptr %114, i32 0, i32 1
  %116 = load i32, ptr %115, align 4, !tbaa !33
  %117 = icmp ne i32 %116, 2
  br i1 %117, label %118, label %119

118:                                              ; preds = %109, %100
  store i8 1, ptr %9, align 1, !tbaa !13
  store i32 0, ptr %8, align 4, !tbaa !11
  br label %119

119:                                              ; preds = %118, %109
  br label %120

120:                                              ; preds = %119, %91, %83, %56
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #7
  br label %52, !llvm.loop !36

121:                                              ; preds = %52
  %122 = load i8, ptr %9, align 1, !tbaa !13, !range !30, !noundef !31
  %123 = trunc i8 %122 to i1
  br i1 %123, label %125, label %124

124:                                              ; preds = %121
  store i32 1, ptr %14, align 4
  br label %398

125:                                              ; preds = %121
  br label %193

126:                                              ; preds = %41
  br label %127

127:                                              ; preds = %191, %126
  %128 = load i8, ptr %9, align 1, !tbaa !13, !range !30, !noundef !31
  %129 = trunc i8 %128 to i1
  %130 = xor i1 %129, true
  br i1 %130, label %131, label %192

131:                                              ; preds = %127
  %132 = call noundef i32 @_ZNK7CGenome8NumGenesEv(ptr noundef nonnull align 8 dereferenceable(108) %36)
  %133 = sub nsw i32 %132, 1
  %134 = call noundef i32 @_Z7RandIntii(i32 noundef 0, i32 noundef %133)
  store i32 %134, ptr %10, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #7
  %135 = getelementptr inbounds %class.CGenome, ptr %36, i32 0, i32 3
  %136 = load i32, ptr %10, align 4, !tbaa !11
  %137 = sext i32 %136 to i64
  %138 = call noundef nonnull align 8 dereferenceable(25) ptr @_ZNSt6vectorI9SLinkGeneSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %135, i64 noundef %137) #7
  %139 = getelementptr inbounds %struct.SLinkGene, ptr %138, i32 0, i32 3
  %140 = load i32, ptr %139, align 8, !tbaa !26
  store i32 %140, ptr %15, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #7
  %141 = getelementptr inbounds %class.CGenome, ptr %36, i32 0, i32 3
  %142 = load i32, ptr %10, align 4, !tbaa !11
  %143 = sext i32 %142 to i64
  %144 = call noundef nonnull align 8 dereferenceable(25) ptr @_ZNSt6vectorI9SLinkGeneSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %141, i64 noundef %143) #7
  %145 = getelementptr inbounds %struct.SLinkGene, ptr %144, i32 0, i32 4
  %146 = load i32, ptr %145, align 4, !tbaa !28
  store i32 %146, ptr %16, align 4, !tbaa !11
  %147 = getelementptr inbounds %class.CGenome, ptr %36, i32 0, i32 3
  %148 = load i32, ptr %10, align 4, !tbaa !11
  %149 = sext i32 %148 to i64
  %150 = call noundef nonnull align 8 dereferenceable(25) ptr @_ZNSt6vectorI9SLinkGeneSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %147, i64 noundef %149) #7
  %151 = getelementptr inbounds %struct.SLinkGene, ptr %150, i32 0, i32 0
  %152 = load i8, ptr %151, align 8, !tbaa !29, !range !30, !noundef !31
  %153 = trunc i8 %152 to i1
  br i1 %153, label %154, label %191

154:                                              ; preds = %131
  %155 = getelementptr inbounds %class.CGenome, ptr %36, i32 0, i32 3
  %156 = load i32, ptr %10, align 4, !tbaa !11
  %157 = sext i32 %156 to i64
  %158 = call noundef nonnull align 8 dereferenceable(25) ptr @_ZNSt6vectorI9SLinkGeneSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %155, i64 noundef %157) #7
  %159 = getelementptr inbounds %struct.SLinkGene, ptr %158, i32 0, i32 6
  %160 = load i8, ptr %159, align 8, !tbaa !32, !range !30, !noundef !31
  %161 = trunc i8 %160 to i1
  br i1 %161, label %191, label %162

162:                                              ; preds = %154
  %163 = getelementptr inbounds %class.CGenome, ptr %36, i32 0, i32 2
  %164 = load i32, ptr %15, align 4, !tbaa !11
  %165 = call noundef i32 @_ZN7CGenome13GetElementPosEi(ptr noundef nonnull align 8 dereferenceable(108) %36, i32 noundef %164)
  %166 = sext i32 %165 to i64
  %167 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNSt6vectorI11SNeuronGeneSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %163, i64 noundef %166) #7
  %168 = getelementptr inbounds %struct.SNeuronGene, ptr %167, i32 0, i32 1
  %169 = load i32, ptr %168, align 4, !tbaa !33
  %170 = icmp ne i32 %169, 3
  br i1 %170, label %171, label %191

171:                                              ; preds = %162
  %172 = getelementptr inbounds %class.CGenome, ptr %36, i32 0, i32 2
  %173 = load i32, ptr %15, align 4, !tbaa !11
  %174 = call noundef i32 @_ZN7CGenome13GetElementPosEi(ptr noundef nonnull align 8 dereferenceable(108) %36, i32 noundef %173)
  %175 = sext i32 %174 to i64
  %176 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNSt6vectorI11SNeuronGeneSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %172, i64 noundef %175) #7
  %177 = getelementptr inbounds %struct.SNeuronGene, ptr %176, i32 0, i32 1
  %178 = load i32, ptr %177, align 4, !tbaa !33
  %179 = icmp ne i32 %178, 2
  br i1 %179, label %189, label %180

180:                                              ; preds = %171
  %181 = getelementptr inbounds %class.CGenome, ptr %36, i32 0, i32 2
  %182 = load i32, ptr %16, align 4, !tbaa !11
  %183 = call noundef i32 @_ZN7CGenome13GetElementPosEi(ptr noundef nonnull align 8 dereferenceable(108) %36, i32 noundef %182)
  %184 = sext i32 %183 to i64
  %185 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNSt6vectorI11SNeuronGeneSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %181, i64 noundef %184) #7
  %186 = getelementptr inbounds %struct.SNeuronGene, ptr %185, i32 0, i32 1
  %187 = load i32, ptr %186, align 4, !tbaa !33
  %188 = icmp ne i32 %187, 2
  br i1 %188, label %189, label %190

189:                                              ; preds = %180, %171
  store i8 1, ptr %9, align 1, !tbaa !13
  br label %190

190:                                              ; preds = %189, %180
  br label %191

191:                                              ; preds = %190, %162, %154, %131
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #7
  br label %127, !llvm.loop !38

192:                                              ; preds = %127
  br label %193

193:                                              ; preds = %192, %125
  %194 = getelementptr inbounds %class.CGenome, ptr %36, i32 0, i32 3
  %195 = load i32, ptr %10, align 4, !tbaa !11
  %196 = sext i32 %195 to i64
  %197 = call noundef nonnull align 8 dereferenceable(25) ptr @_ZNSt6vectorI9SLinkGeneSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %194, i64 noundef %196) #7
  %198 = getelementptr inbounds %struct.SLinkGene, ptr %197, i32 0, i32 0
  store i8 0, ptr %198, align 8, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #7
  %199 = getelementptr inbounds %class.CGenome, ptr %36, i32 0, i32 3
  %200 = load i32, ptr %10, align 4, !tbaa !11
  %201 = sext i32 %200 to i64
  %202 = call noundef nonnull align 8 dereferenceable(25) ptr @_ZNSt6vectorI9SLinkGeneSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %199, i64 noundef %201) #7
  %203 = getelementptr inbounds %struct.SLinkGene, ptr %202, i32 0, i32 5
  %204 = load double, ptr %203, align 8, !tbaa !39
  store double %204, ptr %17, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #7
  %205 = getelementptr inbounds %class.CGenome, ptr %36, i32 0, i32 3
  %206 = load i32, ptr %10, align 4, !tbaa !11
  %207 = sext i32 %206 to i64
  %208 = call noundef nonnull align 8 dereferenceable(25) ptr @_ZNSt6vectorI9SLinkGeneSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %205, i64 noundef %207) #7
  %209 = getelementptr inbounds %struct.SLinkGene, ptr %208, i32 0, i32 3
  %210 = load i32, ptr %209, align 8, !tbaa !26
  store i32 %210, ptr %18, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #7
  %211 = getelementptr inbounds %class.CGenome, ptr %36, i32 0, i32 3
  %212 = load i32, ptr %10, align 4, !tbaa !11
  %213 = sext i32 %212 to i64
  %214 = call noundef nonnull align 8 dereferenceable(25) ptr @_ZNSt6vectorI9SLinkGeneSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %211, i64 noundef %213) #7
  %215 = getelementptr inbounds %struct.SLinkGene, ptr %214, i32 0, i32 4
  %216 = load i32, ptr %215, align 4, !tbaa !28
  store i32 %216, ptr %19, align 4, !tbaa !11
  %217 = getelementptr inbounds %class.CGenome, ptr %36, i32 0, i32 2
  %218 = load i32, ptr %18, align 4, !tbaa !11
  %219 = call noundef i32 @_ZN7CGenome13GetElementPosEi(ptr noundef nonnull align 8 dereferenceable(108) %36, i32 noundef %218)
  %220 = sext i32 %219 to i64
  %221 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNSt6vectorI11SNeuronGeneSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %217, i64 noundef %220) #7
  %222 = getelementptr inbounds %struct.SNeuronGene, ptr %221, i32 0, i32 1
  %223 = load i32, ptr %222, align 4, !tbaa !33
  %224 = icmp eq i32 %223, 2
  br i1 %224, label %225, label %237

225:                                              ; preds = %193
  %226 = getelementptr inbounds %class.CGenome, ptr %36, i32 0, i32 2
  %227 = load i32, ptr %19, align 4, !tbaa !11
  %228 = call noundef i32 @_ZN7CGenome13GetElementPosEi(ptr noundef nonnull align 8 dereferenceable(108) %36, i32 noundef %227)
  %229 = sext i32 %228 to i64
  %230 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNSt6vectorI11SNeuronGeneSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %226, i64 noundef %229) #7
  %231 = getelementptr inbounds %struct.SNeuronGene, ptr %230, i32 0, i32 1
  %232 = load i32, ptr %231, align 4, !tbaa !33
  %233 = icmp eq i32 %232, 2
  br i1 %233, label %234, label %237

234:                                              ; preds = %225
  %235 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.10)
  %236 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %235, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  call void @exit(i32 noundef 1) #8
  unreachable

237:                                              ; preds = %225, %193
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #7
  %238 = getelementptr inbounds %class.CGenome, ptr %36, i32 0, i32 2
  %239 = load i32, ptr %18, align 4, !tbaa !11
  %240 = call noundef i32 @_ZN7CGenome13GetElementPosEi(ptr noundef nonnull align 8 dereferenceable(108) %36, i32 noundef %239)
  %241 = sext i32 %240 to i64
  %242 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNSt6vectorI11SNeuronGeneSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %238, i64 noundef %241) #7
  %243 = getelementptr inbounds %struct.SNeuronGene, ptr %242, i32 0, i32 3
  %244 = load double, ptr %243, align 8, !tbaa !40
  %245 = getelementptr inbounds %class.CGenome, ptr %36, i32 0, i32 2
  %246 = load i32, ptr %19, align 4, !tbaa !11
  %247 = call noundef i32 @_ZN7CGenome13GetElementPosEi(ptr noundef nonnull align 8 dereferenceable(108) %36, i32 noundef %246)
  %248 = sext i32 %247 to i64
  %249 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNSt6vectorI11SNeuronGeneSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %245, i64 noundef %248) #7
  %250 = getelementptr inbounds %struct.SNeuronGene, ptr %249, i32 0, i32 3
  %251 = load double, ptr %250, align 8, !tbaa !40
  %252 = fadd double %244, %251
  %253 = fdiv double %252, 2.000000e+00
  store double %253, ptr %20, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #7
  %254 = getelementptr inbounds %class.CGenome, ptr %36, i32 0, i32 2
  %255 = load i32, ptr %18, align 4, !tbaa !11
  %256 = call noundef i32 @_ZN7CGenome13GetElementPosEi(ptr noundef nonnull align 8 dereferenceable(108) %36, i32 noundef %255)
  %257 = sext i32 %256 to i64
  %258 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNSt6vectorI11SNeuronGeneSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %254, i64 noundef %257) #7
  %259 = getelementptr inbounds %struct.SNeuronGene, ptr %258, i32 0, i32 4
  %260 = load double, ptr %259, align 8, !tbaa !41
  %261 = getelementptr inbounds %class.CGenome, ptr %36, i32 0, i32 2
  %262 = load i32, ptr %19, align 4, !tbaa !11
  %263 = call noundef i32 @_ZN7CGenome13GetElementPosEi(ptr noundef nonnull align 8 dereferenceable(108) %36, i32 noundef %262)
  %264 = sext i32 %263 to i64
  %265 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNSt6vectorI11SNeuronGeneSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %261, i64 noundef %264) #7
  %266 = getelementptr inbounds %struct.SNeuronGene, ptr %265, i32 0, i32 4
  %267 = load double, ptr %266, align 8, !tbaa !41
  %268 = fadd double %260, %267
  %269 = fdiv double %268, 2.000000e+00
  store double %269, ptr %21, align 8, !tbaa !9
  %270 = load double, ptr %20, align 8, !tbaa !9
  %271 = fcmp oeq double %270, 1.000000e+00
  br i1 %271, label %272, label %275

272:                                              ; preds = %237
  %273 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.11)
  %274 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %273, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  call void @exit(i32 noundef 1) #8
  unreachable

275:                                              ; preds = %237
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #7
  %276 = load ptr, ptr %7, align 8, !tbaa !5
  %277 = load i32, ptr %18, align 4, !tbaa !11
  %278 = load i32, ptr %19, align 4, !tbaa !11
  %279 = call noundef i32 @_ZN11CInnovation15CheckInnovationEii10innov_type(ptr noundef nonnull align 8 dereferenceable(32) %276, i32 noundef %277, i32 noundef %278, i32 noundef 0)
  store i32 %279, ptr %22, align 4, !tbaa !11
  %280 = load i32, ptr %22, align 4, !tbaa !11
  %281 = icmp sge i32 %280, 0
  br i1 %281, label %282, label %290

282:                                              ; preds = %275
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #7
  %283 = load ptr, ptr %7, align 8, !tbaa !5
  %284 = load i32, ptr %22, align 4, !tbaa !11
  %285 = call noundef i32 @_ZNK11CInnovation11GetNeuronIDEi(ptr noundef nonnull align 8 dereferenceable(32) %283, i32 noundef %284)
  store i32 %285, ptr %23, align 4, !tbaa !11
  %286 = load i32, ptr %23, align 4, !tbaa !11
  %287 = call noundef zeroext i1 @_ZN7CGenome23AlreadyHaveThisNeuronIDEi(ptr noundef nonnull align 8 dereferenceable(108) %36, i32 noundef %286)
  br i1 %287, label %288, label %289

288:                                              ; preds = %282
  store i32 -1, ptr %22, align 4, !tbaa !11
  br label %289

289:                                              ; preds = %288, %282
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #7
  br label %290

290:                                              ; preds = %289, %275
  %291 = load i32, ptr %22, align 4, !tbaa !11
  %292 = icmp slt i32 %291, 0
  br i1 %292, label %293, label %342

293:                                              ; preds = %290
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #7
  %294 = load ptr, ptr %7, align 8, !tbaa !5
  %295 = load i32, ptr %18, align 4, !tbaa !11
  %296 = load i32, ptr %19, align 4, !tbaa !11
  %297 = load double, ptr %21, align 8, !tbaa !9
  %298 = load double, ptr %20, align 8, !tbaa !9
  %299 = call noundef i32 @_ZN11CInnovation19CreateNewInnovationEii10innov_type11neuron_typedd(ptr noundef nonnull align 8 dereferenceable(32) %294, i32 noundef %295, i32 noundef %296, i32 noundef 0, i32 noundef 1, double noundef %297, double noundef %298)
  store i32 %299, ptr %24, align 4, !tbaa !11
  %300 = getelementptr inbounds %class.CGenome, ptr %36, i32 0, i32 2
  call void @llvm.lifetime.start.p0(i64 40, ptr %25) #7
  %301 = load i32, ptr %24, align 4, !tbaa !11
  %302 = load double, ptr %20, align 8, !tbaa !9
  %303 = load double, ptr %21, align 8, !tbaa !9
  call void @_ZN11SNeuronGeneC2E11neuron_typeiddb(ptr noundef nonnull align 8 dereferenceable(40) %25, i32 noundef 1, i32 noundef %301, double noundef %302, double noundef %303, i1 noundef zeroext false)
  call void @_ZNSt6vectorI11SNeuronGeneSaIS0_EE9push_backEOS0_(ptr noundef nonnull align 8 dereferenceable(24) %300, ptr noundef nonnull align 8 dereferenceable(40) %25)
  call void @llvm.lifetime.end.p0(i64 40, ptr %25) #7
  %304 = load i32, ptr %24, align 4, !tbaa !11
  %305 = icmp eq i32 %304, 0
  br i1 %305, label %306, label %320

306:                                              ; preds = %293
  %307 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.12)
  %308 = load i32, ptr %24, align 4, !tbaa !11
  %309 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %307, i32 noundef %308)
  %310 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %309, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %311 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.13)
  %312 = load double, ptr %20, align 8, !tbaa !9
  %313 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %311, double noundef %312)
  %314 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %313, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %315 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.14)
  %316 = load double, ptr %21, align 8, !tbaa !9
  %317 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %315, double noundef %316)
  %318 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %317, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %319 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %318, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  call void @exit(i32 noundef 1) #8
  unreachable

320:                                              ; preds = %293
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #7
  %321 = load ptr, ptr %7, align 8, !tbaa !5
  %322 = call noundef i32 @_ZN11CInnovation10NextNumberEi(ptr noundef nonnull align 8 dereferenceable(32) %321, i32 noundef 0)
  store i32 %322, ptr %26, align 4, !tbaa !11
  %323 = load ptr, ptr %7, align 8, !tbaa !5
  %324 = load i32, ptr %18, align 4, !tbaa !11
  %325 = load i32, ptr %24, align 4, !tbaa !11
  %326 = call noundef i32 @_ZN11CInnovation19CreateNewInnovationEii10innov_type(ptr noundef nonnull align 8 dereferenceable(32) %323, i32 noundef %324, i32 noundef %325, i32 noundef 1)
  call void @llvm.lifetime.start.p0(i64 32, ptr %27) #7
  %327 = load i32, ptr %18, align 4, !tbaa !11
  %328 = load i32, ptr %24, align 4, !tbaa !11
  %329 = load i32, ptr %26, align 4, !tbaa !11
  call void @_ZN9SLinkGeneC2Eiibidb(ptr noundef nonnull align 8 dereferenceable(25) %27, i32 noundef %327, i32 noundef %328, i1 noundef zeroext true, i32 noundef %329, double noundef 1.000000e+00, i1 noundef zeroext false)
  %330 = getelementptr inbounds %class.CGenome, ptr %36, i32 0, i32 3
  call void @_ZNSt6vectorI9SLinkGeneSaIS0_EE9push_backERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %330, ptr noundef nonnull align 8 dereferenceable(25) %27)
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #7
  %331 = load ptr, ptr %7, align 8, !tbaa !5
  %332 = call noundef i32 @_ZN11CInnovation10NextNumberEi(ptr noundef nonnull align 8 dereferenceable(32) %331, i32 noundef 0)
  store i32 %332, ptr %28, align 4, !tbaa !11
  %333 = load ptr, ptr %7, align 8, !tbaa !5
  %334 = load i32, ptr %24, align 4, !tbaa !11
  %335 = load i32, ptr %19, align 4, !tbaa !11
  %336 = call noundef i32 @_ZN11CInnovation19CreateNewInnovationEii10innov_type(ptr noundef nonnull align 8 dereferenceable(32) %333, i32 noundef %334, i32 noundef %335, i32 noundef 1)
  call void @llvm.lifetime.start.p0(i64 32, ptr %29) #7
  %337 = load i32, ptr %24, align 4, !tbaa !11
  %338 = load i32, ptr %19, align 4, !tbaa !11
  %339 = load i32, ptr %28, align 4, !tbaa !11
  %340 = load double, ptr %17, align 8, !tbaa !9
  call void @_ZN9SLinkGeneC2Eiibidb(ptr noundef nonnull align 8 dereferenceable(25) %29, i32 noundef %337, i32 noundef %338, i1 noundef zeroext true, i32 noundef %339, double noundef %340, i1 noundef zeroext false)
  %341 = getelementptr inbounds %class.CGenome, ptr %36, i32 0, i32 3
  call void @_ZNSt6vectorI9SLinkGeneSaIS0_EE9push_backERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %341, ptr noundef nonnull align 8 dereferenceable(25) %29)
  call void @llvm.lifetime.end.p0(i64 32, ptr %29) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %27) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #7
  br label %396

342:                                              ; preds = %290
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #7
  %343 = load ptr, ptr %7, align 8, !tbaa !5
  %344 = load i32, ptr %22, align 4, !tbaa !11
  %345 = call noundef i32 @_ZNK11CInnovation11GetNeuronIDEi(ptr noundef nonnull align 8 dereferenceable(32) %343, i32 noundef %344)
  store i32 %345, ptr %30, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #7
  %346 = load ptr, ptr %7, align 8, !tbaa !5
  %347 = load i32, ptr %18, align 4, !tbaa !11
  %348 = load i32, ptr %30, align 4, !tbaa !11
  %349 = call noundef i32 @_ZN11CInnovation15CheckInnovationEii10innov_type(ptr noundef nonnull align 8 dereferenceable(32) %346, i32 noundef %347, i32 noundef %348, i32 noundef 1)
  store i32 %349, ptr %31, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #7
  %350 = load ptr, ptr %7, align 8, !tbaa !5
  %351 = load i32, ptr %30, align 4, !tbaa !11
  %352 = load i32, ptr %19, align 4, !tbaa !11
  %353 = call noundef i32 @_ZN11CInnovation15CheckInnovationEii10innov_type(ptr noundef nonnull align 8 dereferenceable(32) %350, i32 noundef %351, i32 noundef %352, i32 noundef 1)
  store i32 %353, ptr %32, align 4, !tbaa !11
  %354 = load i32, ptr %31, align 4, !tbaa !11
  %355 = icmp slt i32 %354, 0
  br i1 %355, label %359, label %356

356:                                              ; preds = %342
  %357 = load i32, ptr %32, align 4, !tbaa !11
  %358 = icmp slt i32 %357, 0
  br i1 %358, label %359, label %362

359:                                              ; preds = %356, %342
  %360 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.15)
  %361 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %360, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  store i32 1, ptr %14, align 4
  br label %393

362:                                              ; preds = %356
  call void @llvm.lifetime.start.p0(i64 32, ptr %33) #7
  %363 = load i32, ptr %18, align 4, !tbaa !11
  %364 = load i32, ptr %30, align 4, !tbaa !11
  %365 = load i32, ptr %31, align 4, !tbaa !11
  call void @_ZN9SLinkGeneC2Eiibidb(ptr noundef nonnull align 8 dereferenceable(25) %33, i32 noundef %363, i32 noundef %364, i1 noundef zeroext true, i32 noundef %365, double noundef 1.000000e+00, i1 noundef zeroext false)
  call void @llvm.lifetime.start.p0(i64 32, ptr %34) #7
  %366 = load i32, ptr %30, align 4, !tbaa !11
  %367 = load i32, ptr %19, align 4, !tbaa !11
  %368 = load i32, ptr %32, align 4, !tbaa !11
  %369 = load double, ptr %17, align 8, !tbaa !9
  call void @_ZN9SLinkGeneC2Eiibidb(ptr noundef nonnull align 8 dereferenceable(25) %34, i32 noundef %366, i32 noundef %367, i1 noundef zeroext true, i32 noundef %368, double noundef %369, i1 noundef zeroext false)
  %370 = getelementptr inbounds %class.CGenome, ptr %36, i32 0, i32 3
  call void @_ZNSt6vectorI9SLinkGeneSaIS0_EE9push_backERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %370, ptr noundef nonnull align 8 dereferenceable(25) %33)
  %371 = getelementptr inbounds %class.CGenome, ptr %36, i32 0, i32 3
  call void @_ZNSt6vectorI9SLinkGeneSaIS0_EE9push_backERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %371, ptr noundef nonnull align 8 dereferenceable(25) %34)
  call void @llvm.lifetime.start.p0(i64 40, ptr %35) #7
  %372 = load i32, ptr %30, align 4, !tbaa !11
  %373 = load double, ptr %20, align 8, !tbaa !9
  %374 = load double, ptr %21, align 8, !tbaa !9
  call void @_ZN11SNeuronGeneC2E11neuron_typeiddb(ptr noundef nonnull align 8 dereferenceable(40) %35, i32 noundef 1, i32 noundef %372, double noundef %373, double noundef %374, i1 noundef zeroext false)
  %375 = getelementptr inbounds %class.CGenome, ptr %36, i32 0, i32 2
  call void @_ZNSt6vectorI11SNeuronGeneSaIS0_EE9push_backERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %375, ptr noundef nonnull align 8 dereferenceable(40) %35)
  %376 = load i32, ptr %30, align 4, !tbaa !11
  %377 = icmp eq i32 %376, 0
  br i1 %377, label %378, label %392

378:                                              ; preds = %362
  %379 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.12)
  %380 = load i32, ptr %30, align 4, !tbaa !11
  %381 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %379, i32 noundef %380)
  %382 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %381, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %383 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.13)
  %384 = load double, ptr %20, align 8, !tbaa !9
  %385 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %383, double noundef %384)
  %386 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %385, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %387 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.14)
  %388 = load double, ptr %21, align 8, !tbaa !9
  %389 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %387, double noundef %388)
  %390 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %389, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %391 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %390, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  call void @exit(i32 noundef 1) #8
  unreachable

392:                                              ; preds = %362
  call void @llvm.lifetime.end.p0(i64 40, ptr %35) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %34) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %33) #7
  store i32 0, ptr %14, align 4
  br label %393

393:                                              ; preds = %392, %359
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #7
  %394 = load i32, ptr %14, align 4
  switch i32 %394, label %397 [
    i32 0, label %395
  ]

395:                                              ; preds = %393
  br label %396

396:                                              ; preds = %395, %320
  store i32 1, ptr %14, align 4
  br label %397

397:                                              ; preds = %396, %393
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #7
  br label %398

398:                                              ; preds = %397, %124
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %9) #7
  br label %399

399:                                              ; preds = %398, %40
  ret void
}

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN7CGenome23AlreadyHaveThisNeuronIDEi(ptr noundef nonnull align 8 dereferenceable(108), i32 noundef) #2 align 2

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

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

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { 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 #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 = { 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 #6 = { 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 #7 = { nounwind }
attributes #8 = { noreturn nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"double", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"bool", !7, i64 0}
!15 = !{!16, !12, i64 96}
!16 = !{!"_ZTS7CGenome", !12, i64 0, !17, i64 8, !21, i64 32, !6, i64 56, !12, i64 64, !10, i64 72, !10, i64 80, !10, i64 88, !12, i64 96, !12, i64 100, !12, i64 104}
!17 = !{!"_ZTSSt6vectorI11SNeuronGeneSaIS0_EE", !18, i64 0}
!18 = !{!"_ZTSSt12_Vector_baseI11SNeuronGeneSaIS0_EE", !19, i64 0}
!19 = !{!"_ZTSNSt12_Vector_baseI11SNeuronGeneSaIS0_EE12_Vector_implE", !20, i64 0}
!20 = !{!"_ZTSNSt12_Vector_baseI11SNeuronGeneSaIS0_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!21 = !{!"_ZTSSt6vectorI9SLinkGeneSaIS0_EE", !22, i64 0}
!22 = !{!"_ZTSSt12_Vector_baseI9SLinkGeneSaIS0_EE", !23, i64 0}
!23 = !{!"_ZTSNSt12_Vector_baseI9SLinkGeneSaIS0_EE12_Vector_implE", !24, i64 0}
!24 = !{!"_ZTSNSt12_Vector_baseI9SLinkGeneSaIS0_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!25 = !{!16, !12, i64 100}
!26 = !{!27, !12, i64 8}
!27 = !{!"_ZTS9SLinkGene", !14, i64 0, !12, i64 4, !12, i64 8, !12, i64 12, !10, i64 16, !14, i64 24}
!28 = !{!27, !12, i64 12}
!29 = !{!27, !14, i64 0}
!30 = !{i8 0, i8 2}
!31 = !{}
!32 = !{!27, !14, i64 24}
!33 = !{!34, !35, i64 4}
!34 = !{!"_ZTS11SNeuronGene", !12, i64 0, !35, i64 4, !14, i64 8, !10, i64 16, !10, i64 24, !10, i64 32}
!35 = !{!"_ZTS11neuron_type", !7, i64 0}
!36 = distinct !{!36, !37}
!37 = !{!"llvm.loop.mustprogress"}
!38 = distinct !{!38, !37}
!39 = !{!27, !10, i64 16}
!40 = !{!34, !10, i64 16}
!41 = !{!34, !10, i64 24}


; 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 }
%struct.SNeuronGene = type { i32, i32, i8, double, double, double }
%struct.SLinkGene = type <{ i8, [3 x i8], i32, i32, i32, double, i8, [7 x i8] }>

@_ZSt4cout = external global %"class.std::basic_ostream", align 8
@.str.10 = external hidden unnamed_addr constant [90 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [100 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [46 x i8], align 1

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN11SNeuronGeneC2E11neuron_typeiddb(ptr noundef nonnull align 8 dereferenceable(40), i32 noundef, i32 noundef, double noundef, double noundef, i1 noundef zeroext) unnamed_addr #2 align 2

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN9SLinkGeneC2Eiibidb(ptr noundef nonnull align 8 dereferenceable(25), i32 noundef, i32 noundef, i1 noundef zeroext, i32 noundef, double noundef, i1 noundef zeroext) unnamed_addr #2 align 2

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

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

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

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 @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) local_unnamed_addr #1 align 2

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN7CGenome9AddNeuronEdR11CInnovationi(ptr noundef nonnull align 8 dereferenceable(108) %0, double noundef %1, ptr noundef nonnull align 8 dereferenceable(32) %2, i32 noundef %3) local_unnamed_addr #1 align 2 {
  %5 = alloca %struct.SNeuronGene, align 8
  %6 = alloca %struct.SLinkGene, align 8
  %7 = alloca %struct.SLinkGene, align 8
  %8 = alloca %struct.SLinkGene, align 8
  %9 = alloca %struct.SLinkGene, align 8
  %10 = alloca %struct.SNeuronGene, align 8
  %11 = tail call noundef double @_Z10RandDoublev()
  %12 = fcmp ogt double %11, %1
  br i1 %12, label %._crit_edge.thread, label %13

13:                                               ; preds = %4
  %14 = getelementptr inbounds i8, ptr %0, i64 96
  %15 = load i32, ptr %14, align 8, !tbaa !5
  %16 = getelementptr inbounds i8, ptr %0, i64 100
  %17 = load i32, ptr %16, align 4, !tbaa !20
  %18 = add i32 %15, 5
  %19 = add i32 %18, %17
  %20 = tail call noundef i32 @_ZNK7CGenome10NumNeuronsEv(ptr noundef nonnull align 8 dereferenceable(108) %0)
  %21 = icmp slt i32 %20, %19
  br i1 %21, label %.preheader, label %.preheader114

.preheader114:                                    ; preds = %13
  %22 = getelementptr inbounds i8, ptr %0, i64 32
  %23 = getelementptr inbounds i8, ptr %0, i64 8
  br label %70

.preheader:                                       ; preds = %13
  %.not109116 = icmp eq i32 %3, 0
  br i1 %.not109116, label %._crit_edge.thread, label %.lr.ph

.lr.ph:                                           ; preds = %.preheader
  %24 = getelementptr inbounds i8, ptr %0, i64 32
  %25 = getelementptr inbounds i8, ptr %0, i64 8
  br label %26

26:                                               ; preds = %.lr.ph, %69
  %.in = phi i32 [ %3, %.lr.ph ], [ %27, %69 ]
  %27 = add nsw i32 %.in, -1
  %28 = tail call noundef i32 @_ZNK7CGenome8NumGenesEv(ptr noundef nonnull align 8 dereferenceable(108) %0)
  %29 = tail call noundef i32 @_ZNK7CGenome8NumGenesEv(ptr noundef nonnull align 8 dereferenceable(108) %0)
  %30 = tail call noundef double @_ZSt4sqrtIiEN9__gnu_cxx11__enable_ifIXsr12__is_integerIT_EE7__valueEdE6__typeES2_(i32 noundef %29)
  %31 = fptosi double %30 to i32
  %32 = xor i32 %31, -1
  %33 = add i32 %28, %32
  %34 = tail call noundef i32 @_Z7RandIntii(i32 noundef 0, i32 noundef %33)
  %35 = sext i32 %34 to i64
  %36 = tail call noundef nonnull align 8 dereferenceable(25) ptr @_ZNSt6vectorI9SLinkGeneSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %24, i64 noundef %35) #7
  %37 = getelementptr inbounds i8, ptr %36, i64 8
  %38 = load i32, ptr %37, align 8, !tbaa !21
  %39 = tail call noundef nonnull align 8 dereferenceable(25) ptr @_ZNSt6vectorI9SLinkGeneSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %24, i64 noundef %35) #7
  %40 = getelementptr inbounds i8, ptr %39, i64 12
  %41 = load i32, ptr %40, align 4, !tbaa !24
  %42 = tail call noundef nonnull align 8 dereferenceable(25) ptr @_ZNSt6vectorI9SLinkGeneSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %24, i64 noundef %35) #7
  %43 = load i8, ptr %42, align 8, !tbaa !25, !range !26, !noundef !27
  %44 = trunc nuw i8 %43 to i1
  br i1 %44, label %45, label %69

45:                                               ; preds = %26
  %46 = tail call noundef nonnull align 8 dereferenceable(25) ptr @_ZNSt6vectorI9SLinkGeneSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %24, i64 noundef %35) #7
  %47 = getelementptr inbounds i8, ptr %46, i64 24
  %48 = load i8, ptr %47, align 8, !tbaa !28, !range !26, !noundef !27
  %49 = trunc nuw i8 %48 to i1
  br i1 %49, label %69, label %50

50:                                               ; preds = %45
  %51 = tail call noundef i32 @_ZN7CGenome13GetElementPosEi(ptr noundef nonnull align 8 dereferenceable(108) %0, i32 noundef %38)
  %52 = sext i32 %51 to i64
  %53 = tail call noundef nonnull align 8 dereferenceable(40) ptr @_ZNSt6vectorI11SNeuronGeneSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %25, i64 noundef %52) #7
  %54 = getelementptr inbounds i8, ptr %53, i64 4
  %55 = load i32, ptr %54, align 4, !tbaa !29
  %.not110 = icmp eq i32 %55, 3
  br i1 %.not110, label %69, label %56

56:                                               ; preds = %50
  %57 = tail call noundef i32 @_ZN7CGenome13GetElementPosEi(ptr noundef nonnull align 8 dereferenceable(108) %0, i32 noundef %38)
  %58 = sext i32 %57 to i64
  %59 = tail call noundef nonnull align 8 dereferenceable(40) ptr @_ZNSt6vectorI11SNeuronGeneSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %25, i64 noundef %58) #7
  %60 = getelementptr inbounds i8, ptr %59, i64 4
  %61 = load i32, ptr %60, align 4, !tbaa !29
  %.not111 = icmp eq i32 %61, 2
  br i1 %.not111, label %62, label %._crit_edge.thread126

62:                                               ; preds = %56
  %63 = tail call noundef i32 @_ZN7CGenome13GetElementPosEi(ptr noundef nonnull align 8 dereferenceable(108) %0, i32 noundef %41)
  %64 = sext i32 %63 to i64
  %65 = tail call noundef nonnull align 8 dereferenceable(40) ptr @_ZNSt6vectorI11SNeuronGeneSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %25, i64 noundef %64) #7
  %66 = getelementptr inbounds i8, ptr %65, i64 4
  %67 = load i32, ptr %66, align 4, !tbaa !29
  %.not112 = icmp eq i32 %67, 2
  br i1 %.not112, label %69, label %._crit_edge.thread126

._crit_edge.thread126:                            ; preds = %62, %56
  %68 = sext i32 %34 to i64
  br label %.loopexit

69:                                               ; preds = %62, %50, %45, %26
  %.not109 = icmp eq i32 %27, 0
  br i1 %.not109, label %._crit_edge.thread, label %26, !llvm.loop !32

70:                                               ; preds = %.backedge, %.preheader114
  %71 = tail call noundef i32 @_ZNK7CGenome8NumGenesEv(ptr noundef nonnull align 8 dereferenceable(108) %0)
  %72 = add nsw i32 %71, -1
  %73 = tail call noundef i32 @_Z7RandIntii(i32 noundef 0, i32 noundef %72)
  %74 = sext i32 %73 to i64
  %75 = tail call noundef nonnull align 8 dereferenceable(25) ptr @_ZNSt6vectorI9SLinkGeneSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %22, i64 noundef %74) #7
  %76 = getelementptr inbounds i8, ptr %75, i64 8
  %77 = load i32, ptr %76, align 8, !tbaa !21
  %78 = tail call noundef nonnull align 8 dereferenceable(25) ptr @_ZNSt6vectorI9SLinkGeneSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %22, i64 noundef %74) #7
  %79 = getelementptr inbounds i8, ptr %78, i64 12
  %80 = load i32, ptr %79, align 4, !tbaa !24
  %81 = tail call noundef nonnull align 8 dereferenceable(25) ptr @_ZNSt6vectorI9SLinkGeneSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %22, i64 noundef %74) #7
  %82 = load i8, ptr %81, align 8, !tbaa !25, !range !26, !noundef !27
  %83 = trunc nuw i8 %82 to i1
  br i1 %83, label %84, label %.backedge

84:                                               ; preds = %70
  %85 = tail call noundef nonnull align 8 dereferenceable(25) ptr @_ZNSt6vectorI9SLinkGeneSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %22, i64 noundef %74) #7
  %86 = getelementptr inbounds i8, ptr %85, i64 24
  %87 = load i8, ptr %86, align 8, !tbaa !28, !range !26, !noundef !27
  %88 = trunc nuw i8 %87 to i1
  br i1 %88, label %.backedge, label %89

89:                                               ; preds = %84
  %90 = tail call noundef i32 @_ZN7CGenome13GetElementPosEi(ptr noundef nonnull align 8 dereferenceable(108) %0, i32 noundef %77)
  %91 = sext i32 %90 to i64
  %92 = tail call noundef nonnull align 8 dereferenceable(40) ptr @_ZNSt6vectorI11SNeuronGeneSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %23, i64 noundef %91) #7
  %93 = getelementptr inbounds i8, ptr %92, i64 4
  %94 = load i32, ptr %93, align 4, !tbaa !29
  %.not = icmp eq i32 %94, 3
  br i1 %.not, label %.backedge, label %95

95:                                               ; preds = %89
  %96 = tail call noundef i32 @_ZN7CGenome13GetElementPosEi(ptr noundef nonnull align 8 dereferenceable(108) %0, i32 noundef %77)
  %97 = sext i32 %96 to i64
  %98 = tail call noundef nonnull align 8 dereferenceable(40) ptr @_ZNSt6vectorI11SNeuronGeneSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %23, i64 noundef %97) #7
  %99 = getelementptr inbounds i8, ptr %98, i64 4
  %100 = load i32, ptr %99, align 4, !tbaa !29
  %.not107 = icmp eq i32 %100, 2
  br i1 %.not107, label %101, label %.loopexit

101:                                              ; preds = %95
  %102 = tail call noundef i32 @_ZN7CGenome13GetElementPosEi(ptr noundef nonnull align 8 dereferenceable(108) %0, i32 noundef %80)
  %103 = sext i32 %102 to i64
  %104 = tail call noundef nonnull align 8 dereferenceable(40) ptr @_ZNSt6vectorI11SNeuronGeneSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %23, i64 noundef %103) #7
  %105 = getelementptr inbounds i8, ptr %104, i64 4
  %106 = load i32, ptr %105, align 4, !tbaa !29
  %.not108 = icmp eq i32 %106, 2
  br i1 %.not108, label %.backedge, label %.loopexit

.backedge:                                        ; preds = %101, %89, %84, %70
  br label %70, !llvm.loop !34

.loopexit:                                        ; preds = %101, %95, %._crit_edge.thread126
  %.pre-phi = phi i64 [ %68, %._crit_edge.thread126 ], [ %74, %95 ], [ %74, %101 ]
  %107 = getelementptr inbounds i8, ptr %0, i64 32
  %108 = tail call noundef nonnull align 8 dereferenceable(25) ptr @_ZNSt6vectorI9SLinkGeneSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %107, i64 noundef %.pre-phi) #7
  store i8 0, ptr %108, align 8, !tbaa !25
  %109 = tail call noundef nonnull align 8 dereferenceable(25) ptr @_ZNSt6vectorI9SLinkGeneSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %107, i64 noundef %.pre-phi) #7
  %110 = getelementptr inbounds i8, ptr %109, i64 16
  %111 = load double, ptr %110, align 8, !tbaa !35
  %112 = tail call noundef nonnull align 8 dereferenceable(25) ptr @_ZNSt6vectorI9SLinkGeneSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %107, i64 noundef %.pre-phi) #7
  %113 = getelementptr inbounds i8, ptr %112, i64 8
  %114 = load i32, ptr %113, align 8, !tbaa !21
  %115 = tail call noundef nonnull align 8 dereferenceable(25) ptr @_ZNSt6vectorI9SLinkGeneSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %107, i64 noundef %.pre-phi) #7
  %116 = getelementptr inbounds i8, ptr %115, i64 12
  %117 = load i32, ptr %116, align 4, !tbaa !24
  %118 = getelementptr inbounds i8, ptr %0, i64 8
  %119 = tail call noundef i32 @_ZN7CGenome13GetElementPosEi(ptr noundef nonnull align 8 dereferenceable(108) %0, i32 noundef %114)
  %120 = sext i32 %119 to i64
  %121 = tail call noundef nonnull align 8 dereferenceable(40) ptr @_ZNSt6vectorI11SNeuronGeneSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %118, i64 noundef %120) #7
  %122 = getelementptr inbounds i8, ptr %121, i64 4
  %123 = load i32, ptr %122, align 4, !tbaa !29
  %124 = icmp eq i32 %123, 2
  br i1 %124, label %125, label %135

125:                                              ; preds = %.loopexit
  %126 = tail call noundef i32 @_ZN7CGenome13GetElementPosEi(ptr noundef nonnull align 8 dereferenceable(108) %0, i32 noundef %117)
  %127 = sext i32 %126 to i64
  %128 = tail call noundef nonnull align 8 dereferenceable(40) ptr @_ZNSt6vectorI11SNeuronGeneSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %118, i64 noundef %127) #7
  %129 = getelementptr inbounds i8, ptr %128, i64 4
  %130 = load i32, ptr %129, align 4, !tbaa !29
  %131 = icmp eq i32 %130, 2
  br i1 %131, label %132, label %135

132:                                              ; preds = %125
  %133 = 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.10)
  %134 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %133, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  tail call void @exit(i32 noundef 1) #8
  unreachable

135:                                              ; preds = %125, %.loopexit
  %136 = tail call noundef i32 @_ZN7CGenome13GetElementPosEi(ptr noundef nonnull align 8 dereferenceable(108) %0, i32 noundef %114)
  %137 = sext i32 %136 to i64
  %138 = tail call noundef nonnull align 8 dereferenceable(40) ptr @_ZNSt6vectorI11SNeuronGeneSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %118, i64 noundef %137) #7
  %139 = getelementptr inbounds i8, ptr %138, i64 16
  %140 = load double, ptr %139, align 8, !tbaa !36
  %141 = tail call noundef i32 @_ZN7CGenome13GetElementPosEi(ptr noundef nonnull align 8 dereferenceable(108) %0, i32 noundef %117)
  %142 = sext i32 %141 to i64
  %143 = tail call noundef nonnull align 8 dereferenceable(40) ptr @_ZNSt6vectorI11SNeuronGeneSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %118, i64 noundef %142) #7
  %144 = getelementptr inbounds i8, ptr %143, i64 16
  %145 = load double, ptr %144, align 8, !tbaa !36
  %146 = fadd double %140, %145
  %147 = fmul double %146, 5.000000e-01
  %148 = tail call noundef i32 @_ZN7CGenome13GetElementPosEi(ptr noundef nonnull align 8 dereferenceable(108) %0, i32 noundef %114)
  %149 = sext i32 %148 to i64
  %150 = tail call noundef nonnull align 8 dereferenceable(40) ptr @_ZNSt6vectorI11SNeuronGeneSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %118, i64 noundef %149) #7
  %151 = getelementptr inbounds i8, ptr %150, i64 24
  %152 = load double, ptr %151, align 8, !tbaa !37
  %153 = tail call noundef i32 @_ZN7CGenome13GetElementPosEi(ptr noundef nonnull align 8 dereferenceable(108) %0, i32 noundef %117)
  %154 = sext i32 %153 to i64
  %155 = tail call noundef nonnull align 8 dereferenceable(40) ptr @_ZNSt6vectorI11SNeuronGeneSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %118, i64 noundef %154) #7
  %156 = getelementptr inbounds i8, ptr %155, i64 24
  %157 = load double, ptr %156, align 8, !tbaa !37
  %158 = fadd double %152, %157
  %159 = fmul double %158, 5.000000e-01
  %160 = fcmp oeq double %147, 1.000000e+00
  br i1 %160, label %161, label %164

161:                                              ; preds = %135
  %162 = 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.11)
  %163 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %162, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  tail call void @exit(i32 noundef 1) #8
  unreachable

164:                                              ; preds = %135
  %165 = tail call noundef i32 @_ZN11CInnovation15CheckInnovationEii10innov_type(ptr noundef nonnull align 8 dereferenceable(32) %2, i32 noundef %114, i32 noundef %117, i32 noundef 0)
  %166 = icmp sgt i32 %165, -1
  br i1 %166, label %167, label %select.unfold

167:                                              ; preds = %164
  %168 = tail call noundef i32 @_ZNK11CInnovation11GetNeuronIDEi(ptr noundef nonnull align 8 dereferenceable(32) %2, i32 noundef %165)
  %169 = tail call noundef zeroext i1 @_ZN7CGenome23AlreadyHaveThisNeuronIDEi(ptr noundef nonnull align 8 dereferenceable(108) %0, i32 noundef %168)
  br i1 %169, label %select.unfold, label %188

select.unfold:                                    ; preds = %167, %164
  %170 = tail call noundef i32 @_ZN11CInnovation19CreateNewInnovationEii10innov_type11neuron_typedd(ptr noundef nonnull align 8 dereferenceable(32) %2, i32 noundef %114, i32 noundef %117, i32 noundef 0, i32 noundef 1, double noundef %159, double noundef %147)
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %5) #7
  call void @_ZN11SNeuronGeneC2E11neuron_typeiddb(ptr noundef nonnull align 8 dereferenceable(40) %5, i32 noundef 1, i32 noundef %170, double noundef %147, double noundef %159, i1 noundef zeroext false)
  call void @_ZNSt6vectorI11SNeuronGeneSaIS0_EE9push_backEOS0_(ptr noundef nonnull align 8 dereferenceable(24) %118, ptr noundef nonnull align 8 dereferenceable(40) %5)
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %5) #7
  %171 = icmp eq i32 %170, 0
  br i1 %171, label %172, label %183

172:                                              ; preds = %select.unfold
  %173 = 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.12)
  %174 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %173, i32 noundef 0)
  %175 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %174, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %176 = 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.13)
  %177 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %176, double noundef %147)
  %178 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %177, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %179 = 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.14)
  %180 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %179, double noundef %159)
  %181 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %180, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %182 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %181, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  call void @exit(i32 noundef 1) #8
  unreachable

183:                                              ; preds = %select.unfold
  %184 = call noundef i32 @_ZN11CInnovation10NextNumberEi(ptr noundef nonnull align 8 dereferenceable(32) %2, i32 noundef 0)
  %185 = call noundef i32 @_ZN11CInnovation19CreateNewInnovationEii10innov_type(ptr noundef nonnull align 8 dereferenceable(32) %2, i32 noundef %114, i32 noundef %170, i32 noundef 1)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %6) #7
  call void @_ZN9SLinkGeneC2Eiibidb(ptr noundef nonnull align 8 dereferenceable(25) %6, i32 noundef %114, i32 noundef %170, i1 noundef zeroext true, i32 noundef %184, double noundef 1.000000e+00, i1 noundef zeroext false)
  call void @_ZNSt6vectorI9SLinkGeneSaIS0_EE9push_backERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %107, ptr noundef nonnull align 8 dereferenceable(25) %6)
  %186 = call noundef i32 @_ZN11CInnovation10NextNumberEi(ptr noundef nonnull align 8 dereferenceable(32) %2, i32 noundef 0)
  %187 = call noundef i32 @_ZN11CInnovation19CreateNewInnovationEii10innov_type(ptr noundef nonnull align 8 dereferenceable(32) %2, i32 noundef %170, i32 noundef %117, i32 noundef 1)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %7) #7
  call void @_ZN9SLinkGeneC2Eiibidb(ptr noundef nonnull align 8 dereferenceable(25) %7, i32 noundef %170, i32 noundef %117, i1 noundef zeroext true, i32 noundef %186, double noundef %111, i1 noundef zeroext false)
  call void @_ZNSt6vectorI9SLinkGeneSaIS0_EE9push_backERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %107, ptr noundef nonnull align 8 dereferenceable(25) %7)
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %7) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %6) #7
  br label %._crit_edge.thread

188:                                              ; preds = %167
  %189 = tail call noundef i32 @_ZNK11CInnovation11GetNeuronIDEi(ptr noundef nonnull align 8 dereferenceable(32) %2, i32 noundef %165)
  %190 = tail call noundef i32 @_ZN11CInnovation15CheckInnovationEii10innov_type(ptr noundef nonnull align 8 dereferenceable(32) %2, i32 noundef %114, i32 noundef %189, i32 noundef 1)
  %191 = tail call noundef i32 @_ZN11CInnovation15CheckInnovationEii10innov_type(ptr noundef nonnull align 8 dereferenceable(32) %2, i32 noundef %189, i32 noundef %117, i32 noundef 1)
  %192 = or i32 %191, %190
  %or.cond.not = icmp sgt i32 %192, -1
  br i1 %or.cond.not, label %196, label %193

193:                                              ; preds = %188
  %194 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.15)
  %195 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %194, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  br label %._crit_edge.thread

196:                                              ; preds = %188
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %8) #7
  call void @_ZN9SLinkGeneC2Eiibidb(ptr noundef nonnull align 8 dereferenceable(25) %8, i32 noundef %114, i32 noundef %189, i1 noundef zeroext true, i32 noundef %190, double noundef 1.000000e+00, i1 noundef zeroext false)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %9) #7
  call void @_ZN9SLinkGeneC2Eiibidb(ptr noundef nonnull align 8 dereferenceable(25) %9, i32 noundef %189, i32 noundef %117, i1 noundef zeroext true, i32 noundef %191, double noundef %111, i1 noundef zeroext false)
  call void @_ZNSt6vectorI9SLinkGeneSaIS0_EE9push_backERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %107, ptr noundef nonnull align 8 dereferenceable(25) %8)
  call void @_ZNSt6vectorI9SLinkGeneSaIS0_EE9push_backERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %107, ptr noundef nonnull align 8 dereferenceable(25) %9)
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %10) #7
  call void @_ZN11SNeuronGeneC2E11neuron_typeiddb(ptr noundef nonnull align 8 dereferenceable(40) %10, i32 noundef 1, i32 noundef %189, double noundef %147, double noundef %159, i1 noundef zeroext false)
  call void @_ZNSt6vectorI11SNeuronGeneSaIS0_EE9push_backERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %118, ptr noundef nonnull align 8 dereferenceable(40) %10)
  %197 = icmp eq i32 %189, 0
  br i1 %197, label %198, label %209

198:                                              ; preds = %196
  %199 = 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.12)
  %200 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %199, i32 noundef 0)
  %201 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %200, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %202 = 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.13)
  %203 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %202, double noundef %147)
  %204 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %203, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %205 = 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.14)
  %206 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %205, double noundef %159)
  %207 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %206, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %208 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %207, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  call void @exit(i32 noundef 1) #8
  unreachable

209:                                              ; preds = %196
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %10) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %8) #7
  br label %._crit_edge.thread

._crit_edge.thread:                               ; preds = %69, %.preheader, %193, %209, %183, %4
  ret void
}

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

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

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

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

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

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

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { 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 #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 = { 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 #6 = { 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 #7 = { nounwind }
attributes #8 = { 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, !7, i64 96}
!6 = !{!"_ZTS7CGenome", !7, i64 0, !10, i64 8, !15, i64 32, !14, i64 56, !7, i64 64, !19, i64 72, !19, i64 80, !19, i64 88, !7, i64 96, !7, i64 100, !7, i64 104}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"_ZTSSt6vectorI11SNeuronGeneSaIS0_EE", !11, i64 0}
!11 = !{!"_ZTSSt12_Vector_baseI11SNeuronGeneSaIS0_EE", !12, i64 0}
!12 = !{!"_ZTSNSt12_Vector_baseI11SNeuronGeneSaIS0_EE12_Vector_implE", !13, i64 0}
!13 = !{!"_ZTSNSt12_Vector_baseI11SNeuronGeneSaIS0_EE17_Vector_impl_dataE", !14, i64 0, !14, i64 8, !14, i64 16}
!14 = !{!"any pointer", !8, i64 0}
!15 = !{!"_ZTSSt6vectorI9SLinkGeneSaIS0_EE", !16, i64 0}
!16 = !{!"_ZTSSt12_Vector_baseI9SLinkGeneSaIS0_EE", !17, i64 0}
!17 = !{!"_ZTSNSt12_Vector_baseI9SLinkGeneSaIS0_EE12_Vector_implE", !18, i64 0}
!18 = !{!"_ZTSNSt12_Vector_baseI9SLinkGeneSaIS0_EE17_Vector_impl_dataE", !14, i64 0, !14, i64 8, !14, i64 16}
!19 = !{!"double", !8, i64 0}
!20 = !{!6, !7, i64 100}
!21 = !{!22, !7, i64 8}
!22 = !{!"_ZTS9SLinkGene", !23, i64 0, !7, i64 4, !7, i64 8, !7, i64 12, !19, i64 16, !23, i64 24}
!23 = !{!"bool", !8, i64 0}
!24 = !{!22, !7, i64 12}
!25 = !{!22, !23, i64 0}
!26 = !{i8 0, i8 2}
!27 = !{}
!28 = !{!22, !23, i64 24}
!29 = !{!30, !31, i64 4}
!30 = !{!"_ZTS11SNeuronGene", !7, i64 0, !31, i64 4, !23, i64 8, !19, i64 16, !19, i64 24, !19, i64 32}
!31 = !{!"_ZTS11neuron_type", !8, i64 0}
!32 = distinct !{!32, !33}
!33 = !{!"llvm.loop.mustprogress"}
!34 = distinct !{!34, !33}
!35 = !{!22, !19, i64 16}
!36 = !{!30, !19, i64 16}
!37 = !{!30, !19, i64 24}


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