; LLVM IR from CRAFT-THU/BSim :: src/net/BuildNetwork.ll (ZN7Network12buildNetworkEv)

; 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.__gnu_cxx::__normal_iterator.6" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.7" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.8" = type { ptr }
%"class.std::vector.0" = type { %"struct.std::_Vector_base.1" }
%"struct.std::_Vector_base.1" = 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.24" = type { ptr }
%class.Network = type { %"class.std::vector.9", %"class.std::vector.14", %"class.std::vector", i32, i32, i32, float, float, %"class.std::vector.19", %"class.std::vector.19", i32, %"class.std::vector.0", %"class.std::vector.0", %"class.std::vector.0" }
%"class.std::vector.9" = type { %"struct.std::_Vector_base.10" }
%"struct.std::_Vector_base.10" = type { %"struct.std::_Vector_base<NeuronBase *, std::allocator<NeuronBase *>>::_Vector_impl" }
%"struct.std::_Vector_base<NeuronBase *, std::allocator<NeuronBase *>>::_Vector_impl" = type { %"struct.std::_Vector_base<NeuronBase *, std::allocator<NeuronBase *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<NeuronBase *, std::allocator<NeuronBase *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.14" = type { %"struct.std::_Vector_base.15" }
%"struct.std::_Vector_base.15" = type { %"struct.std::_Vector_base<PopulationBase *, std::allocator<PopulationBase *>>::_Vector_impl" }
%"struct.std::_Vector_base<PopulationBase *, std::allocator<PopulationBase *>>::_Vector_impl" = type { %"struct.std::_Vector_base<PopulationBase *, std::allocator<PopulationBase *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<PopulationBase *, std::allocator<PopulationBase *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<SynapseBase *, std::allocator<SynapseBase *>>::_Vector_impl" }
%"struct.std::_Vector_base<SynapseBase *, std::allocator<SynapseBase *>>::_Vector_impl" = type { %"struct.std::_Vector_base<SynapseBase *, std::allocator<SynapseBase *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<SynapseBase *, std::allocator<SynapseBase *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.19" = type { %"struct.std::_Vector_base.20" }
%"struct.std::_Vector_base.20" = type { %"struct.std::_Vector_base<Type, std::allocator<Type>>::_Vector_impl" }
%"struct.std::_Vector_base<Type, std::allocator<Type>>::_Vector_impl" = type { %"struct.std::_Vector_base<Type, std::allocator<Type>>::_Vector_impl_data" }
%"struct.std::_Vector_base<Type, std::allocator<Type>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%struct.N2SConnection = type { ptr, ptr, ptr, ptr, ptr, i32, i32 }
%struct.GNetwork = type { ptr, ptr, ptr, ptr, ptr, i32, i32, ptr, ptr, i32 }

@.str.1 = external hidden unnamed_addr constant [73 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [20 x i8], align 1
@__PRETTY_FUNCTION__._ZN7Network12buildNetworkEv = external hidden unnamed_addr constant [34 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [16 x i8], align 1
@createType = external global [10 x ptr], align 16
@.str.10 = external hidden unnamed_addr constant [11 x i8], align 1
@allocType = external global [10 x ptr], align 16
@.str.11 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [45 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [48 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [12 x i8], align 1

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z18arrangeArrayNeuronRSt6vectorIiSaIiEES2_P13GArrayNeuronsi(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef, i32 noundef) #0

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) #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) #3 align 2

; Function Attrs: nounwind allocsize(0)
declare noalias ptr @malloc(i64 noundef) #4

; Function Attrs: mustprogress uwtable
define dso_local noundef ptr @_ZN7Network12buildNetworkEv(ptr noundef nonnull align 8 dereferenceable(224) %0) #0 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca ptr, align 8
  %3 = alloca %"class.__gnu_cxx::__normal_iterator.6", align 8
  %4 = alloca %"class.__gnu_cxx::__normal_iterator.7", align 8
  %5 = alloca %"class.__gnu_cxx::__normal_iterator.8", align 8
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca %"class.std::vector.0", align 8
  %15 = alloca %"class.std::vector.0", align 8
  %16 = alloca i32, align 4
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca %"class.__gnu_cxx::__normal_iterator.6", align 8
  %22 = alloca %"class.__gnu_cxx::__normal_iterator.6", align 8
  %23 = alloca ptr, align 8
  %24 = alloca i64, align 8
  %25 = alloca %"class.__gnu_cxx::__normal_iterator.6", align 8
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca ptr, align 8
  %29 = alloca i32, align 4
  %30 = alloca %"class.__gnu_cxx::__normal_iterator.6", align 8
  %31 = alloca %"class.__gnu_cxx::__normal_iterator.6", align 8
  %32 = alloca ptr, align 8
  %33 = alloca i32, align 4
  %34 = alloca ptr, align 8
  %35 = alloca i32, align 4
  %36 = alloca %"class.__gnu_cxx::__normal_iterator.24", align 8
  %37 = alloca %"class.__gnu_cxx::__normal_iterator.24", align 8
  %38 = alloca i32, align 4
  %39 = alloca %"class.__gnu_cxx::__normal_iterator.24", align 8
  %40 = alloca %"class.__gnu_cxx::__normal_iterator.6", align 8
  %41 = alloca ptr, align 8
  %42 = alloca ptr, align 8
  %43 = alloca ptr, align 8
  %44 = alloca ptr, align 8
  %45 = alloca i32, align 4
  %46 = alloca %"class.__gnu_cxx::__normal_iterator.6", align 8
  %47 = alloca %"class.__gnu_cxx::__normal_iterator.6", align 8
  %48 = alloca ptr, align 8
  %49 = alloca i32, align 4
  %50 = alloca i32, align 4
  %51 = alloca ptr, align 8
  %52 = alloca i32, align 4
  %53 = alloca %"class.__gnu_cxx::__normal_iterator.24", align 8
  %54 = alloca %"class.__gnu_cxx::__normal_iterator.24", align 8
  %55 = alloca i32, align 4
  %56 = alloca %"class.__gnu_cxx::__normal_iterator.24", align 8
  %57 = alloca %"class.__gnu_cxx::__normal_iterator.6", align 8
  %58 = alloca i32, align 4
  %59 = alloca ptr, align 8
  store ptr %0, ptr %2, align 8, !tbaa !5
  %60 = load ptr, ptr %2, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %3) #9
  call void @_ZN9__gnu_cxx17__normal_iteratorIPP14PopulationBaseSt6vectorIS2_SaIS2_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %3) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %4) #9
  call void @_ZN9__gnu_cxx17__normal_iteratorIPP10NeuronBaseSt6vectorIS2_SaIS2_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %4) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #9
  call void @_ZN9__gnu_cxx17__normal_iteratorIPP11SynapseBaseSt6vectorIS2_SaIS2_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %5) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #9
  %61 = getelementptr inbounds %class.Network, ptr %60, i32 0, i32 8
  %62 = call noundef i64 @_ZNKSt6vectorI4TypeSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %61) #9
  %63 = trunc i64 %62 to i32
  store i32 %63, ptr %6, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #9
  %64 = getelementptr inbounds %class.Network, ptr %60, i32 0, i32 9
  %65 = call noundef i64 @_ZNKSt6vectorI4TypeSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %64) #9
  %66 = trunc i64 %65 to i32
  store i32 %66, ptr %7, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #9
  %67 = load i32, ptr %6, align 4, !tbaa !9
  %68 = sext i32 %67 to i64
  %69 = mul i64 8, %68
  %70 = call noalias ptr @malloc(i64 noundef %69) #10
  store ptr %70, ptr %8, align 8, !tbaa !5
  %71 = load ptr, ptr %8, align 8, !tbaa !5
  %72 = icmp ne ptr %71, null
  br i1 %72, label %73, label %74

73:                                               ; preds = %1
  br label %76

74:                                               ; preds = %1
  call void @__assert_fail(ptr noundef @.str.4, ptr noundef @.str.1, i32 noundef 46, ptr noundef @__PRETTY_FUNCTION__._ZN7Network12buildNetworkEv) #11
  unreachable

75:                                               ; No predecessors!
  br label %76

76:                                               ; preds = %75, %73
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #9
  %77 = load i32, ptr %7, align 4, !tbaa !9
  %78 = sext i32 %77 to i64
  %79 = mul i64 8, %78
  %80 = call noalias ptr @malloc(i64 noundef %79) #10
  store ptr %80, ptr %9, align 8, !tbaa !5
  %81 = load ptr, ptr %9, align 8, !tbaa !5
  %82 = icmp ne ptr %81, null
  br i1 %82, label %83, label %84

83:                                               ; preds = %76
  br label %86

84:                                               ; preds = %76
  call void @__assert_fail(ptr noundef @.str.5, ptr noundef @.str.1, i32 noundef 48, ptr noundef @__PRETTY_FUNCTION__._ZN7Network12buildNetworkEv) #11
  unreachable

85:                                               ; No predecessors!
  br label %86

86:                                               ; preds = %85, %83
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #9
  %87 = load i32, ptr %6, align 4, !tbaa !9
  %88 = add nsw i32 %87, 1
  %89 = sext i32 %88 to i64
  %90 = mul i64 4, %89
  %91 = call noalias ptr @malloc(i64 noundef %90) #10
  store ptr %91, ptr %10, align 8, !tbaa !5
  %92 = load ptr, ptr %10, align 8, !tbaa !5
  %93 = icmp ne ptr %92, null
  br i1 %93, label %94, label %95

94:                                               ; preds = %86
  br label %97

95:                                               ; preds = %86
  call void @__assert_fail(ptr noundef @.str.6, ptr noundef @.str.1, i32 noundef 51, ptr noundef @__PRETTY_FUNCTION__._ZN7Network12buildNetworkEv) #11
  unreachable

96:                                               ; No predecessors!
  br label %97

97:                                               ; preds = %96, %94
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #9
  %98 = load i32, ptr %7, align 4, !tbaa !9
  %99 = add nsw i32 %98, 1
  %100 = sext i32 %99 to i64
  %101 = mul i64 4, %100
  %102 = call noalias ptr @malloc(i64 noundef %101) #10
  store ptr %102, ptr %11, align 8, !tbaa !5
  %103 = load ptr, ptr %11, align 8, !tbaa !5
  %104 = icmp ne ptr %103, null
  br i1 %104, label %105, label %106

105:                                              ; preds = %97
  br label %108

106:                                              ; preds = %97
  call void @__assert_fail(ptr noundef @.str.7, ptr noundef @.str.1, i32 noundef 53, ptr noundef @__PRETTY_FUNCTION__._ZN7Network12buildNetworkEv) #11
  unreachable

107:                                              ; No predecessors!
  br label %108

108:                                              ; preds = %107, %105
  %109 = load ptr, ptr %10, align 8, !tbaa !5
  %110 = getelementptr inbounds i32, ptr %109, i64 0
  store i32 0, ptr %110, align 4, !tbaa !9
  %111 = load ptr, ptr %11, align 8, !tbaa !5
  %112 = getelementptr inbounds i32, ptr %111, i64 0
  store i32 0, ptr %112, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #9
  %113 = load i32, ptr %6, align 4, !tbaa !9
  %114 = sext i32 %113 to i64
  %115 = mul i64 4, %114
  %116 = call noalias ptr @malloc(i64 noundef %115) #10
  store ptr %116, ptr %12, align 8, !tbaa !5
  %117 = load ptr, ptr %12, align 8, !tbaa !5
  %118 = icmp ne ptr %117, null
  br i1 %118, label %119, label %120

119:                                              ; preds = %108
  br label %122

120:                                              ; preds = %108
  call void @__assert_fail(ptr noundef @.str.8, ptr noundef @.str.1, i32 noundef 58, ptr noundef @__PRETTY_FUNCTION__._ZN7Network12buildNetworkEv) #11
  unreachable

121:                                              ; No predecessors!
  br label %122

122:                                              ; preds = %121, %119
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #9
  %123 = load i32, ptr %7, align 4, !tbaa !9
  %124 = sext i32 %123 to i64
  %125 = mul i64 4, %124
  %126 = call noalias ptr @malloc(i64 noundef %125) #10
  store ptr %126, ptr %13, align 8, !tbaa !5
  %127 = load ptr, ptr %13, align 8, !tbaa !5
  %128 = icmp ne ptr %127, null
  br i1 %128, label %129, label %130

129:                                              ; preds = %122
  br label %132

130:                                              ; preds = %122
  call void @__assert_fail(ptr noundef @.str.9, ptr noundef @.str.1, i32 noundef 60, ptr noundef @__PRETTY_FUNCTION__._ZN7Network12buildNetworkEv) #11
  unreachable

131:                                              ; No predecessors!
  br label %132

132:                                              ; preds = %131, %129
  call void @llvm.lifetime.start.p0(i64 24, ptr %14) #9
  call void @_ZNSt6vectorIiSaIiEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %14) #9
  call void @llvm.lifetime.start.p0(i64 24, ptr %15) #9
  call void @_ZNSt6vectorIiSaIiEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %15) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #9
  store i32 0, ptr %16, align 4, !tbaa !9
  br label %133

133:                                              ; preds = %295, %132
  %134 = load i32, ptr %16, align 4, !tbaa !9
  %135 = load i32, ptr %6, align 4, !tbaa !9
  %136 = icmp slt i32 %134, %135
  br i1 %136, label %138, label %137

137:                                              ; preds = %133
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #9
  br label %300

138:                                              ; preds = %133
  %139 = getelementptr inbounds %class.Network, ptr %60, i32 0, i32 8
  %140 = load i32, ptr %16, align 4, !tbaa !9
  %141 = sext i32 %140 to i64
  %142 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorI4TypeSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %139, i64 noundef %141) #9
  %143 = load i32, ptr %142, align 4, !tbaa !11
  %144 = load ptr, ptr %12, align 8, !tbaa !5
  %145 = load i32, ptr %16, align 4, !tbaa !9
  %146 = sext i32 %145 to i64
  %147 = getelementptr inbounds i32, ptr %144, i64 %146
  store i32 %143, ptr %147, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #9
  %148 = getelementptr inbounds %class.Network, ptr %60, i32 0, i32 8
  %149 = load i32, ptr %16, align 4, !tbaa !9
  %150 = sext i32 %149 to i64
  %151 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorI4TypeSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %148, i64 noundef %150) #9
  %152 = load i32, ptr %151, align 4, !tbaa !11
  %153 = zext i32 %152 to i64
  %154 = getelementptr inbounds [10 x ptr], ptr @createType, i64 0, i64 %153
  %155 = load ptr, ptr %154, align 8, !tbaa !5
  %156 = invoke noundef ptr %155()
          to label %157 unwind label %162

157:                                              ; preds = %138
  store ptr %156, ptr %17, align 8, !tbaa !5
  %158 = load ptr, ptr %17, align 8, !tbaa !5
  %159 = icmp ne ptr %158, null
  br i1 %159, label %160, label %161

160:                                              ; preds = %157
  br label %167

161:                                              ; preds = %157
  call void @__assert_fail(ptr noundef @.str.10, ptr noundef @.str.1, i32 noundef 69, ptr noundef @__PRETTY_FUNCTION__._ZN7Network12buildNetworkEv) #11
  unreachable

162:                                              ; preds = %167, %138
  %163 = landingpad { ptr, i32 }
          cleanup
  %164 = extractvalue { ptr, i32 } %163, 0
  store ptr %164, ptr %18, align 8
  %165 = extractvalue { ptr, i32 } %163, 1
  store i32 %165, ptr %19, align 4
  br label %299

166:                                              ; No predecessors!
  br label %167

167:                                              ; preds = %166, %160
  %168 = getelementptr inbounds %class.Network, ptr %60, i32 0, i32 8
  %169 = load i32, ptr %16, align 4, !tbaa !9
  %170 = sext i32 %169 to i64
  %171 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorI4TypeSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %168, i64 noundef %170) #9
  %172 = load i32, ptr %171, align 4, !tbaa !11
  %173 = zext i32 %172 to i64
  %174 = getelementptr inbounds [10 x ptr], ptr @allocType, i64 0, i64 %173
  %175 = load ptr, ptr %174, align 8, !tbaa !5
  %176 = load ptr, ptr %17, align 8, !tbaa !5
  %177 = getelementptr inbounds %class.Network, ptr %60, i32 0, i32 11
  %178 = load i32, ptr %16, align 4, !tbaa !9
  %179 = sext i32 %178 to i64
  %180 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %177, i64 noundef %179) #9
  %181 = load i32, ptr %180, align 4, !tbaa !9
  %182 = invoke noundef i32 %175(ptr noundef %176, i32 noundef %181)
          to label %183 unwind label %162

183:                                              ; preds = %167
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #9
  store i32 0, ptr %20, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #9
  %184 = getelementptr inbounds %class.Network, ptr %60, i32 0, i32 1
  %185 = call ptr @_ZNSt6vectorIP14PopulationBaseSaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %184) #9
  %186 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.6", ptr %21, i32 0, i32 0
  store ptr %185, ptr %186, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %3, ptr align 8 %21, i64 8, i1 false), !tbaa.struct !13
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #9
  br label %187

187:                                              ; preds = %247, %183
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #9
  %188 = getelementptr inbounds %class.Network, ptr %60, i32 0, i32 1
  %189 = call ptr @_ZNSt6vectorIP14PopulationBaseSaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %188) #9
  %190 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.6", ptr %22, i32 0, i32 0
  store ptr %189, ptr %190, align 8
  %191 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP14PopulationBaseSt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %3, ptr noundef nonnull align 8 dereferenceable(8) %22) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #9
  br i1 %191, label %192, label %251

192:                                              ; preds = %187
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #9
  %193 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP14PopulationBaseSt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %3) #9
  %194 = load ptr, ptr %193, align 8, !tbaa !5
  store ptr %194, ptr %23, align 8, !tbaa !5
  %195 = load ptr, ptr %23, align 8, !tbaa !5
  %196 = load ptr, ptr %195, align 8, !tbaa !14
  %197 = getelementptr inbounds ptr, ptr %196, i64 2
  %198 = load ptr, ptr %197, align 8
  %199 = invoke noundef i32 %198(ptr noundef nonnull align 8 dereferenceable(16) %195)
          to label %200 unwind label %237

200:                                              ; preds = %192
  %201 = getelementptr inbounds %class.Network, ptr %60, i32 0, i32 8
  %202 = load i32, ptr %16, align 4, !tbaa !9
  %203 = sext i32 %202 to i64
  %204 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorI4TypeSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %201, i64 noundef %203) #9
  %205 = load i32, ptr %204, align 4, !tbaa !11
  %206 = icmp eq i32 %199, %205
  br i1 %206, label %207, label %246

207:                                              ; preds = %200
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #9
  %208 = load ptr, ptr %23, align 8, !tbaa !5
  %209 = load ptr, ptr %17, align 8, !tbaa !5
  %210 = load i32, ptr %20, align 4, !tbaa !9
  %211 = load ptr, ptr %10, align 8, !tbaa !5
  %212 = load i32, ptr %16, align 4, !tbaa !9
  %213 = sext i32 %212 to i64
  %214 = getelementptr inbounds i32, ptr %211, i64 %213
  %215 = load i32, ptr %214, align 4, !tbaa !9
  %216 = load ptr, ptr %208, align 8, !tbaa !14
  %217 = getelementptr inbounds ptr, ptr %216, i64 8
  %218 = load ptr, ptr %217, align 8
  %219 = invoke noundef i32 %218(ptr noundef nonnull align 8 dereferenceable(16) %208, ptr noundef %209, i32 noundef %210, i32 noundef %215)
          to label %220 unwind label %241

220:                                              ; preds = %207
  %221 = sext i32 %219 to i64
  store i64 %221, ptr %24, align 8, !tbaa !16
  %222 = load i64, ptr %24, align 8, !tbaa !16
  %223 = load i32, ptr %20, align 4, !tbaa !9
  %224 = sext i32 %223 to i64
  %225 = add i64 %224, %222
  %226 = trunc i64 %225 to i32
  store i32 %226, ptr %20, align 4, !tbaa !9
  %227 = load ptr, ptr %23, align 8, !tbaa !5
  %228 = load ptr, ptr %227, align 8, !tbaa !14
  %229 = getelementptr inbounds ptr, ptr %228, i64 2
  %230 = load ptr, ptr %229, align 8
  %231 = invoke noundef i32 %230(ptr noundef nonnull align 8 dereferenceable(16) %227)
          to label %232 unwind label %241

232:                                              ; preds = %220
  %233 = icmp eq i32 %231, 2
  br i1 %233, label %234, label %245

234:                                              ; preds = %232
  %235 = load ptr, ptr %23, align 8, !tbaa !5
  invoke void @_Z16arrangeFireArrayRSt6vectorIiSaIiEES2_P14PopulationBase(ptr noundef nonnull align 8 dereferenceable(24) %15, ptr noundef nonnull align 8 dereferenceable(24) %14, ptr noundef %235)
          to label %236 unwind label %241

236:                                              ; preds = %234
  br label %245

237:                                              ; preds = %192
  %238 = landingpad { ptr, i32 }
          cleanup
  %239 = extractvalue { ptr, i32 } %238, 0
  store ptr %239, ptr %18, align 8
  %240 = extractvalue { ptr, i32 } %238, 1
  store i32 %240, ptr %19, align 4
  br label %250

241:                                              ; preds = %234, %220, %207
  %242 = landingpad { ptr, i32 }
          cleanup
  %243 = extractvalue { ptr, i32 } %242, 0
  store ptr %243, ptr %18, align 8
  %244 = extractvalue { ptr, i32 } %242, 1
  store i32 %244, ptr %19, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #9
  br label %250

245:                                              ; preds = %236, %232
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #9
  br label %246

246:                                              ; preds = %245, %200
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #9
  br label %247

247:                                              ; preds = %246
  %248 = call ptr @_ZN9__gnu_cxx17__normal_iteratorIPP14PopulationBaseSt6vectorIS2_SaIS2_EEEppEi(ptr noundef nonnull align 8 dereferenceable(8) %3, i32 noundef 0) #9
  %249 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.6", ptr %25, i32 0, i32 0
  store ptr %248, ptr %249, align 8
  br label %187, !llvm.loop !18

250:                                              ; preds = %241, %237
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #9
  br label %298

251:                                              ; preds = %187
  %252 = load i32, ptr %20, align 4, !tbaa !9
  %253 = getelementptr inbounds %class.Network, ptr %60, i32 0, i32 11
  %254 = load i32, ptr %16, align 4, !tbaa !9
  %255 = sext i32 %254 to i64
  %256 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %253, i64 noundef %255) #9
  %257 = load i32, ptr %256, align 4, !tbaa !9
  %258 = icmp eq i32 %252, %257
  br i1 %258, label %259, label %260

259:                                              ; preds = %251
  br label %262

260:                                              ; preds = %251
  call void @__assert_fail(ptr noundef @.str.11, ptr noundef @.str.1, i32 noundef 85, ptr noundef @__PRETTY_FUNCTION__._ZN7Network12buildNetworkEv) #11
  unreachable

261:                                              ; No predecessors!
  br label %262

262:                                              ; preds = %261, %259
  %263 = getelementptr inbounds %class.Network, ptr %60, i32 0, i32 8
  %264 = load i32, ptr %16, align 4, !tbaa !9
  %265 = sext i32 %264 to i64
  %266 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorI4TypeSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %263, i64 noundef %265) #9
  %267 = load i32, ptr %266, align 4, !tbaa !11
  %268 = icmp eq i32 %267, 2
  br i1 %268, label %269, label %277

269:                                              ; preds = %262
  %270 = load ptr, ptr %17, align 8, !tbaa !5
  %271 = load i32, ptr %20, align 4, !tbaa !9
  invoke void @_Z18arrangeArrayNeuronRSt6vectorIiSaIiEES2_P13GArrayNeuronsi(ptr noundef nonnull align 8 dereferenceable(24) %15, ptr noundef nonnull align 8 dereferenceable(24) %14, ptr noundef %270, i32 noundef %271)
          to label %272 unwind label %273

272:                                              ; preds = %269
  br label %277

273:                                              ; preds = %269
  %274 = landingpad { ptr, i32 }
          cleanup
  %275 = extractvalue { ptr, i32 } %274, 0
  store ptr %275, ptr %18, align 8
  %276 = extractvalue { ptr, i32 } %274, 1
  store i32 %276, ptr %19, align 4
  br label %298

277:                                              ; preds = %272, %262
  %278 = load i32, ptr %20, align 4, !tbaa !9
  %279 = load ptr, ptr %10, align 8, !tbaa !5
  %280 = load i32, ptr %16, align 4, !tbaa !9
  %281 = sext i32 %280 to i64
  %282 = getelementptr inbounds i32, ptr %279, i64 %281
  %283 = load i32, ptr %282, align 4, !tbaa !9
  %284 = add nsw i32 %278, %283
  %285 = load ptr, ptr %10, align 8, !tbaa !5
  %286 = load i32, ptr %16, align 4, !tbaa !9
  %287 = add nsw i32 %286, 1
  %288 = sext i32 %287 to i64
  %289 = getelementptr inbounds i32, ptr %285, i64 %288
  store i32 %284, ptr %289, align 4, !tbaa !9
  %290 = load ptr, ptr %17, align 8, !tbaa !5
  %291 = load ptr, ptr %8, align 8, !tbaa !5
  %292 = load i32, ptr %16, align 4, !tbaa !9
  %293 = sext i32 %292 to i64
  %294 = getelementptr inbounds ptr, ptr %291, i64 %293
  store ptr %290, ptr %294, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #9
  br label %295

295:                                              ; preds = %277
  %296 = load i32, ptr %16, align 4, !tbaa !9
  %297 = add nsw i32 %296, 1
  store i32 %297, ptr %16, align 4, !tbaa !9
  br label %133, !llvm.loop !20

298:                                              ; preds = %273, %250
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #9
  br label %299

299:                                              ; preds = %298, %162
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #9
  br label %820

300:                                              ; preds = %137
  %301 = load ptr, ptr %10, align 8, !tbaa !5
  %302 = load i32, ptr %6, align 4, !tbaa !9
  %303 = sext i32 %302 to i64
  %304 = getelementptr inbounds i32, ptr %301, i64 %303
  %305 = load i32, ptr %304, align 4, !tbaa !9
  %306 = getelementptr inbounds %class.Network, ptr %60, i32 0, i32 4
  %307 = load i32, ptr %306, align 4, !tbaa !21
  %308 = icmp eq i32 %305, %307
  br i1 %308, label %309, label %310

309:                                              ; preds = %300
  br label %312

310:                                              ; preds = %300
  call void @__assert_fail(ptr noundef @.str.12, ptr noundef @.str.1, i32 noundef 94, ptr noundef @__PRETTY_FUNCTION__._ZN7Network12buildNetworkEv) #11
  unreachable

311:                                              ; No predecessors!
  br label %312

312:                                              ; preds = %311, %309
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #9
  store i32 0, ptr %26, align 4, !tbaa !9
  br label %313

313:                                              ; preds = %517, %312
  %314 = load i32, ptr %26, align 4, !tbaa !9
  %315 = load i32, ptr %7, align 4, !tbaa !9
  %316 = icmp slt i32 %314, %315
  br i1 %316, label %318, label %317

317:                                              ; preds = %313
  store i32 8, ptr %27, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #9
  br label %521

318:                                              ; preds = %313
  %319 = getelementptr inbounds %class.Network, ptr %60, i32 0, i32 9
  %320 = load i32, ptr %26, align 4, !tbaa !9
  %321 = sext i32 %320 to i64
  %322 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorI4TypeSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %319, i64 noundef %321) #9
  %323 = load i32, ptr %322, align 4, !tbaa !11
  %324 = load ptr, ptr %13, align 8, !tbaa !5
  %325 = load i32, ptr %26, align 4, !tbaa !9
  %326 = sext i32 %325 to i64
  %327 = getelementptr inbounds i32, ptr %324, i64 %326
  store i32 %323, ptr %327, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #9
  %328 = getelementptr inbounds %class.Network, ptr %60, i32 0, i32 9
  %329 = load i32, ptr %26, align 4, !tbaa !9
  %330 = sext i32 %329 to i64
  %331 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorI4TypeSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %328, i64 noundef %330) #9
  %332 = load i32, ptr %331, align 4, !tbaa !11
  %333 = zext i32 %332 to i64
  %334 = getelementptr inbounds [10 x ptr], ptr @createType, i64 0, i64 %333
  %335 = load ptr, ptr %334, align 8, !tbaa !5
  %336 = invoke noundef ptr %335()
          to label %337 unwind label %342

337:                                              ; preds = %318
  store ptr %336, ptr %28, align 8, !tbaa !5
  %338 = load ptr, ptr %28, align 8, !tbaa !5
  %339 = icmp ne ptr %338, null
  br i1 %339, label %340, label %341

340:                                              ; preds = %337
  br label %347

341:                                              ; preds = %337
  call void @__assert_fail(ptr noundef @.str.13, ptr noundef @.str.1, i32 noundef 100, ptr noundef @__PRETTY_FUNCTION__._ZN7Network12buildNetworkEv) #11
  unreachable

342:                                              ; preds = %347, %318
  %343 = landingpad { ptr, i32 }
          cleanup
  %344 = extractvalue { ptr, i32 } %343, 0
  store ptr %344, ptr %18, align 8
  %345 = extractvalue { ptr, i32 } %343, 1
  store i32 %345, ptr %19, align 4
  br label %520

346:                                              ; No predecessors!
  br label %347

347:                                              ; preds = %346, %340
  %348 = getelementptr inbounds %class.Network, ptr %60, i32 0, i32 9
  %349 = load i32, ptr %26, align 4, !tbaa !9
  %350 = sext i32 %349 to i64
  %351 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorI4TypeSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %348, i64 noundef %350) #9
  %352 = load i32, ptr %351, align 4, !tbaa !11
  %353 = zext i32 %352 to i64
  %354 = getelementptr inbounds [10 x ptr], ptr @allocType, i64 0, i64 %353
  %355 = load ptr, ptr %354, align 8, !tbaa !5
  %356 = load ptr, ptr %28, align 8, !tbaa !5
  %357 = getelementptr inbounds %class.Network, ptr %60, i32 0, i32 13
  %358 = load i32, ptr %26, align 4, !tbaa !9
  %359 = sext i32 %358 to i64
  %360 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %357, i64 noundef %359) #9
  %361 = load i32, ptr %360, align 4, !tbaa !9
  %362 = invoke noundef i32 %355(ptr noundef %356, i32 noundef %361)
          to label %363 unwind label %342

363:                                              ; preds = %347
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #9
  store i32 0, ptr %29, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #9
  %364 = getelementptr inbounds %class.Network, ptr %60, i32 0, i32 1
  %365 = call ptr @_ZNSt6vectorIP14PopulationBaseSaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %364) #9
  %366 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.6", ptr %30, i32 0, i32 0
  store ptr %365, ptr %366, align 8
  br label %367

367:                                              ; preds = %485, %363
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #9
  %368 = getelementptr inbounds %class.Network, ptr %60, i32 0, i32 1
  %369 = call ptr @_ZNSt6vectorIP14PopulationBaseSaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %368) #9
  %370 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.6", ptr %31, i32 0, i32 0
  store ptr %369, ptr %370, align 8
  %371 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP14PopulationBaseSt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %30, ptr noundef nonnull align 8 dereferenceable(8) %31) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #9
  br i1 %371, label %373, label %372

372:                                              ; preds = %367
  store i32 11, ptr %27, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #9
  br label %488

373:                                              ; preds = %367
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #9
  %374 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP14PopulationBaseSt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %30) #9
  %375 = load ptr, ptr %374, align 8, !tbaa !5
  store ptr %375, ptr %32, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #9
  store i32 0, ptr %33, align 4, !tbaa !9
  br label %376

376:                                              ; preds = %479, %373
  %377 = load i32, ptr %33, align 4, !tbaa !9
  %378 = load ptr, ptr %32, align 8, !tbaa !5
  %379 = load ptr, ptr %378, align 8, !tbaa !14
  %380 = getelementptr inbounds ptr, ptr %379, i64 10
  %381 = load ptr, ptr %380, align 8
  %382 = invoke noundef i32 %381(ptr noundef nonnull align 8 dereferenceable(17) %378)
          to label %383 unwind label %386

383:                                              ; preds = %376
  %384 = icmp slt i32 %377, %382
  br i1 %384, label %390, label %385

385:                                              ; preds = %383
  store i32 14, ptr %27, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #9
  br label %484

386:                                              ; preds = %376
  %387 = landingpad { ptr, i32 }
          cleanup
  %388 = extractvalue { ptr, i32 } %387, 0
  store ptr %388, ptr %18, align 8
  %389 = extractvalue { ptr, i32 } %387, 1
  store i32 %389, ptr %19, align 4
  br label %483

390:                                              ; preds = %383
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #9
  %391 = load ptr, ptr %32, align 8, !tbaa !5
  %392 = load i32, ptr %33, align 4, !tbaa !9
  %393 = load ptr, ptr %391, align 8, !tbaa !14
  %394 = getelementptr inbounds ptr, ptr %393, i64 12
  %395 = load ptr, ptr %394, align 8
  %396 = invoke noundef ptr %395(ptr noundef nonnull align 8 dereferenceable(17) %391, i32 noundef %392)
          to label %397 unwind label %406

397:                                              ; preds = %390
  %398 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNK10NeuronBase11getSynapsesEv(ptr noundef nonnull align 8 dereferenceable(52) %396)
          to label %399 unwind label %406

399:                                              ; preds = %397
  store ptr %398, ptr %34, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #9
  store i32 0, ptr %35, align 4, !tbaa !9
  br label %400

400:                                              ; preds = %475, %399
  %401 = load i32, ptr %35, align 4, !tbaa !9
  %402 = getelementptr inbounds %class.Network, ptr %60, i32 0, i32 3
  %403 = load i32, ptr %402, align 8, !tbaa !44
  %404 = icmp slt i32 %401, %403
  br i1 %404, label %410, label %405

405:                                              ; preds = %400
  store i32 17, ptr %27, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #9
  br label %478

406:                                              ; preds = %397, %390
  %407 = landingpad { ptr, i32 }
          cleanup
  %408 = extractvalue { ptr, i32 } %407, 0
  store ptr %408, ptr %18, align 8
  %409 = extractvalue { ptr, i32 } %407, 1
  store i32 %409, ptr %19, align 4
  br label %482

410:                                              ; preds = %400
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #9
  %411 = load ptr, ptr %34, align 8, !tbaa !5
  %412 = call ptr @_ZNKSt6vectorIP11SynapseBaseSaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %411) #9
  %413 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.24", ptr %36, i32 0, i32 0
  store ptr %412, ptr %413, align 8
  br label %414

414:                                              ; preds = %470, %410
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #9
  %415 = load ptr, ptr %34, align 8, !tbaa !5
  %416 = call ptr @_ZNKSt6vectorIP11SynapseBaseSaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %415) #9
  %417 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.24", ptr %37, i32 0, i32 0
  store ptr %416, ptr %417, align 8
  %418 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKP11SynapseBaseSt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %36, ptr noundef nonnull align 8 dereferenceable(8) %37) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #9
  br i1 %418, label %420, label %419

419:                                              ; preds = %414
  store i32 20, ptr %27, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #9
  br label %474

420:                                              ; preds = %414
  %421 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKP11SynapseBaseSt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %36) #9
  %422 = load ptr, ptr %421, align 8, !tbaa !5
  %423 = invoke noundef i32 @_ZN11SynapseBase8getDelayEv(ptr noundef nonnull align 8 dereferenceable(33) %422)
          to label %424 unwind label %460

424:                                              ; preds = %420
  %425 = load i32, ptr %35, align 4, !tbaa !9
  %426 = add nsw i32 %425, 1
  %427 = icmp eq i32 %423, %426
  br i1 %427, label %428, label %469

428:                                              ; preds = %424
  %429 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKP11SynapseBaseSt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %36) #9
  %430 = load ptr, ptr %429, align 8, !tbaa !5
  %431 = load ptr, ptr %430, align 8, !tbaa !14
  %432 = getelementptr inbounds ptr, ptr %431, i64 2
  %433 = load ptr, ptr %432, align 8
  %434 = invoke noundef i32 %433(ptr noundef nonnull align 8 dereferenceable(16) %430)
          to label %435 unwind label %460

435:                                              ; preds = %428
  %436 = getelementptr inbounds %class.Network, ptr %60, i32 0, i32 9
  %437 = load i32, ptr %26, align 4, !tbaa !9
  %438 = sext i32 %437 to i64
  %439 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorI4TypeSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %436, i64 noundef %438) #9
  %440 = load i32, ptr %439, align 4, !tbaa !11
  %441 = icmp eq i32 %434, %440
  br i1 %441, label %442, label %468

442:                                              ; preds = %435
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #9
  %443 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKP11SynapseBaseSt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %36) #9
  %444 = load ptr, ptr %443, align 8, !tbaa !5
  %445 = load ptr, ptr %28, align 8, !tbaa !5
  %446 = load i32, ptr %29, align 4, !tbaa !9
  %447 = load ptr, ptr %11, align 8, !tbaa !5
  %448 = load i32, ptr %26, align 4, !tbaa !9
  %449 = sext i32 %448 to i64
  %450 = getelementptr inbounds i32, ptr %447, i64 %449
  %451 = load i32, ptr %450, align 4, !tbaa !9
  %452 = load ptr, ptr %444, align 8, !tbaa !14
  %453 = getelementptr inbounds ptr, ptr %452, i64 8
  %454 = load ptr, ptr %453, align 8
  %455 = invoke noundef i32 %454(ptr noundef nonnull align 8 dereferenceable(16) %444, ptr noundef %445, i32 noundef %446, i32 noundef %451)
          to label %456 unwind label %464

456:                                              ; preds = %442
  store i32 %455, ptr %38, align 4, !tbaa !9
  %457 = load i32, ptr %38, align 4, !tbaa !9
  %458 = load i32, ptr %29, align 4, !tbaa !9
  %459 = add nsw i32 %458, %457
  store i32 %459, ptr %29, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #9
  br label %468

460:                                              ; preds = %428, %420
  %461 = landingpad { ptr, i32 }
          cleanup
  %462 = extractvalue { ptr, i32 } %461, 0
  store ptr %462, ptr %18, align 8
  %463 = extractvalue { ptr, i32 } %461, 1
  store i32 %463, ptr %19, align 4
  br label %473

464:                                              ; preds = %442
  %465 = landingpad { ptr, i32 }
          cleanup
  %466 = extractvalue { ptr, i32 } %465, 0
  store ptr %466, ptr %18, align 8
  %467 = extractvalue { ptr, i32 } %465, 1
  store i32 %467, ptr %19, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #9
  br label %473

468:                                              ; preds = %456, %435
  br label %469

469:                                              ; preds = %468, %424
  br label %470

470:                                              ; preds = %469
  %471 = call ptr @_ZN9__gnu_cxx17__normal_iteratorIPKP11SynapseBaseSt6vectorIS2_SaIS2_EEEppEi(ptr noundef nonnull align 8 dereferenceable(8) %36, i32 noundef 0) #9
  %472 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.24", ptr %39, i32 0, i32 0
  store ptr %471, ptr %472, align 8
  br label %414, !llvm.loop !45

473:                                              ; preds = %464, %460
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #9
  br label %482

474:                                              ; preds = %419
  br label %475

475:                                              ; preds = %474
  %476 = load i32, ptr %35, align 4, !tbaa !9
  %477 = add nsw i32 %476, 1
  store i32 %477, ptr %35, align 4, !tbaa !9
  br label %400, !llvm.loop !46

478:                                              ; preds = %405
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #9
  br label %479

479:                                              ; preds = %478
  %480 = load i32, ptr %33, align 4, !tbaa !9
  %481 = add nsw i32 %480, 1
  store i32 %481, ptr %33, align 4, !tbaa !9
  br label %376, !llvm.loop !47

482:                                              ; preds = %473, %406
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #9
  br label %483

483:                                              ; preds = %482, %386
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #9
  br label %520

484:                                              ; preds = %385
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #9
  br label %485

485:                                              ; preds = %484
  %486 = call ptr @_ZN9__gnu_cxx17__normal_iteratorIPP14PopulationBaseSt6vectorIS2_SaIS2_EEEppEi(ptr noundef nonnull align 8 dereferenceable(8) %30, i32 noundef 0) #9
  %487 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.6", ptr %40, i32 0, i32 0
  store ptr %486, ptr %487, align 8
  br label %367, !llvm.loop !48

488:                                              ; preds = %372
  %489 = load i32, ptr %29, align 4, !tbaa !9
  %490 = getelementptr inbounds %class.Network, ptr %60, i32 0, i32 13
  %491 = load i32, ptr %26, align 4, !tbaa !9
  %492 = sext i32 %491 to i64
  %493 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %490, i64 noundef %492) #9
  %494 = load i32, ptr %493, align 4, !tbaa !9
  %495 = icmp eq i32 %489, %494
  br i1 %495, label %496, label %497

496:                                              ; preds = %488
  br label %499

497:                                              ; preds = %488
  call void @__assert_fail(ptr noundef @.str.14, ptr noundef @.str.1, i32 noundef 132, ptr noundef @__PRETTY_FUNCTION__._ZN7Network12buildNetworkEv) #11
  unreachable

498:                                              ; No predecessors!
  br label %499

499:                                              ; preds = %498, %496
  %500 = load i32, ptr %29, align 4, !tbaa !9
  %501 = load ptr, ptr %11, align 8, !tbaa !5
  %502 = load i32, ptr %26, align 4, !tbaa !9
  %503 = sext i32 %502 to i64
  %504 = getelementptr inbounds i32, ptr %501, i64 %503
  %505 = load i32, ptr %504, align 4, !tbaa !9
  %506 = add nsw i32 %500, %505
  %507 = load ptr, ptr %11, align 8, !tbaa !5
  %508 = load i32, ptr %26, align 4, !tbaa !9
  %509 = add nsw i32 %508, 1
  %510 = sext i32 %509 to i64
  %511 = getelementptr inbounds i32, ptr %507, i64 %510
  store i32 %506, ptr %511, align 4, !tbaa !9
  %512 = load ptr, ptr %28, align 8, !tbaa !5
  %513 = load ptr, ptr %9, align 8, !tbaa !5
  %514 = load i32, ptr %26, align 4, !tbaa !9
  %515 = sext i32 %514 to i64
  %516 = getelementptr inbounds ptr, ptr %513, i64 %515
  store ptr %512, ptr %516, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #9
  br label %517

517:                                              ; preds = %499
  %518 = load i32, ptr %26, align 4, !tbaa !9
  %519 = add nsw i32 %518, 1
  store i32 %519, ptr %26, align 4, !tbaa !9
  br label %313, !llvm.loop !49

520:                                              ; preds = %483, %342
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #9
  br label %820

521:                                              ; preds = %317
  %522 = load ptr, ptr %11, align 8, !tbaa !5
  %523 = load i32, ptr %7, align 4, !tbaa !9
  %524 = sext i32 %523 to i64
  %525 = getelementptr inbounds i32, ptr %522, i64 %524
  %526 = load i32, ptr %525, align 4, !tbaa !9
  %527 = getelementptr inbounds %class.Network, ptr %60, i32 0, i32 5
  %528 = load i32, ptr %527, align 8, !tbaa !50
  %529 = icmp eq i32 %526, %528
  br i1 %529, label %530, label %531

530:                                              ; preds = %521
  br label %533

531:                                              ; preds = %521
  call void @__assert_fail(ptr noundef @.str.15, ptr noundef @.str.1, i32 noundef 136, ptr noundef @__PRETTY_FUNCTION__._ZN7Network12buildNetworkEv) #11
  unreachable

532:                                              ; No predecessors!
  br label %533

533:                                              ; preds = %532, %530
  invoke void @_ZN7Network6logMapEv(ptr noundef nonnull align 8 dereferenceable(224) %60)
          to label %534 unwind label %540

534:                                              ; preds = %533
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #9
  %535 = call noalias ptr @malloc(i64 noundef 48) #10
  store ptr %535, ptr %41, align 8, !tbaa !5
  %536 = load ptr, ptr %41, align 8, !tbaa !5
  %537 = icmp ne ptr %536, null
  br i1 %537, label %538, label %539

538:                                              ; preds = %534
  br label %545

539:                                              ; preds = %534
  call void @__assert_fail(ptr noundef @.str.16, ptr noundef @.str.1, i32 noundef 141, ptr noundef @__PRETTY_FUNCTION__._ZN7Network12buildNetworkEv) #11
  unreachable

540:                                              ; preds = %533
  %541 = landingpad { ptr, i32 }
          cleanup
  %542 = extractvalue { ptr, i32 } %541, 0
  store ptr %542, ptr %18, align 8
  %543 = extractvalue { ptr, i32 } %541, 1
  store i32 %543, ptr %19, align 4
  br label %820

544:                                              ; No predecessors!
  br label %545

545:                                              ; preds = %544, %538
  %546 = getelementptr inbounds %class.Network, ptr %60, i32 0, i32 4
  %547 = load i32, ptr %546, align 4, !tbaa !21
  %548 = load ptr, ptr %41, align 8, !tbaa !5
  %549 = getelementptr inbounds %struct.N2SConnection, ptr %548, i32 0, i32 5
  store i32 %547, ptr %549, align 8, !tbaa !51
  %550 = getelementptr inbounds %class.Network, ptr %60, i32 0, i32 5
  %551 = load i32, ptr %550, align 8, !tbaa !50
  %552 = load ptr, ptr %41, align 8, !tbaa !5
  %553 = getelementptr inbounds %struct.N2SConnection, ptr %552, i32 0, i32 6
  store i32 %551, ptr %553, align 4, !tbaa !53
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #9
  %554 = getelementptr inbounds %class.Network, ptr %60, i32 0, i32 3
  %555 = load i32, ptr %554, align 8, !tbaa !44
  %556 = sext i32 %555 to i64
  %557 = mul i64 4, %556
  %558 = getelementptr inbounds %class.Network, ptr %60, i32 0, i32 4
  %559 = load i32, ptr %558, align 4, !tbaa !21
  %560 = sext i32 %559 to i64
  %561 = mul i64 %557, %560
  %562 = call noalias ptr @malloc(i64 noundef %561) #10
  store ptr %562, ptr %42, align 8, !tbaa !5
  %563 = load ptr, ptr %42, align 8, !tbaa !5
  %564 = icmp ne ptr %563, null
  br i1 %564, label %565, label %566

565:                                              ; preds = %545
  br label %568

566:                                              ; preds = %545
  call void @__assert_fail(ptr noundef @.str.17, ptr noundef @.str.1, i32 noundef 147, ptr noundef @__PRETTY_FUNCTION__._ZN7Network12buildNetworkEv) #11
  unreachable

567:                                              ; No predecessors!
  br label %568

568:                                              ; preds = %567, %565
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #9
  %569 = getelementptr inbounds %class.Network, ptr %60, i32 0, i32 3
  %570 = load i32, ptr %569, align 8, !tbaa !44
  %571 = sext i32 %570 to i64
  %572 = mul i64 4, %571
  %573 = getelementptr inbounds %class.Network, ptr %60, i32 0, i32 4
  %574 = load i32, ptr %573, align 4, !tbaa !21
  %575 = sext i32 %574 to i64
  %576 = mul i64 %572, %575
  %577 = call noalias ptr @malloc(i64 noundef %576) #10
  store ptr %577, ptr %43, align 8, !tbaa !5
  %578 = load ptr, ptr %43, align 8, !tbaa !5
  %579 = icmp ne ptr %578, null
  br i1 %579, label %580, label %581

580:                                              ; preds = %568
  br label %583

581:                                              ; preds = %568
  call void @__assert_fail(ptr noundef @.str.18, ptr noundef @.str.1, i32 noundef 149, ptr noundef @__PRETTY_FUNCTION__._ZN7Network12buildNetworkEv) #11
  unreachable

582:                                              ; No predecessors!
  br label %583

583:                                              ; preds = %582, %580
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #9
  %584 = getelementptr inbounds %class.Network, ptr %60, i32 0, i32 5
  %585 = load i32, ptr %584, align 8, !tbaa !50
  %586 = sext i32 %585 to i64
  %587 = mul i64 4, %586
  %588 = call noalias ptr @malloc(i64 noundef %587) #10
  store ptr %588, ptr %44, align 8, !tbaa !5
  %589 = load ptr, ptr %44, align 8, !tbaa !5
  %590 = icmp ne ptr %589, null
  br i1 %590, label %591, label %592

591:                                              ; preds = %583
  br label %594

592:                                              ; preds = %583
  call void @__assert_fail(ptr noundef @.str.19, ptr noundef @.str.1, i32 noundef 151, ptr noundef @__PRETTY_FUNCTION__._ZN7Network12buildNetworkEv) #11
  unreachable

593:                                              ; No predecessors!
  br label %594

594:                                              ; preds = %593, %591
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #9
  store i32 0, ptr %45, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #9
  %595 = getelementptr inbounds %class.Network, ptr %60, i32 0, i32 1
  %596 = call ptr @_ZNSt6vectorIP14PopulationBaseSaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %595) #9
  %597 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.6", ptr %46, i32 0, i32 0
  store ptr %596, ptr %597, align 8
  br label %598

598:                                              ; preds = %748, %594
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #9
  %599 = getelementptr inbounds %class.Network, ptr %60, i32 0, i32 1
  %600 = call ptr @_ZNSt6vectorIP14PopulationBaseSaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %599) #9
  %601 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.6", ptr %47, i32 0, i32 0
  store ptr %600, ptr %601, align 8
  %602 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP14PopulationBaseSt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %46, ptr noundef nonnull align 8 dereferenceable(8) %47) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #9
  br i1 %602, label %604, label %603

603:                                              ; preds = %598
  store i32 23, ptr %27, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #9
  br label %751

604:                                              ; preds = %598
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #9
  %605 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP14PopulationBaseSt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %46) #9
  %606 = load ptr, ptr %605, align 8, !tbaa !5
  store ptr %606, ptr %48, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #9
  store i32 0, ptr %49, align 4, !tbaa !9
  br label %607

607:                                              ; preds = %741, %604
  %608 = load i32, ptr %49, align 4, !tbaa !9
  %609 = load ptr, ptr %48, align 8, !tbaa !5
  %610 = load ptr, ptr %609, align 8, !tbaa !14
  %611 = getelementptr inbounds ptr, ptr %610, i64 10
  %612 = load ptr, ptr %611, align 8
  %613 = invoke noundef i32 %612(ptr noundef nonnull align 8 dereferenceable(17) %609)
          to label %614 unwind label %617

614:                                              ; preds = %607
  %615 = icmp slt i32 %608, %613
  br i1 %615, label %621, label %616

616:                                              ; preds = %614
  store i32 26, ptr %27, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #9
  br label %747

617:                                              ; preds = %607
  %618 = landingpad { ptr, i32 }
          cleanup
  %619 = extractvalue { ptr, i32 } %618, 0
  store ptr %619, ptr %18, align 8
  %620 = extractvalue { ptr, i32 } %618, 1
  store i32 %620, ptr %19, align 4
  br label %746

621:                                              ; preds = %614
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #9
  %622 = load ptr, ptr %48, align 8, !tbaa !5
  %623 = load i32, ptr %49, align 4, !tbaa !9
  %624 = load ptr, ptr %622, align 8, !tbaa !14
  %625 = getelementptr inbounds ptr, ptr %624, i64 12
  %626 = load ptr, ptr %625, align 8
  %627 = invoke noundef ptr %626(ptr noundef nonnull align 8 dereferenceable(17) %622, i32 noundef %623)
          to label %628 unwind label %646

628:                                              ; preds = %621
  %629 = invoke noundef i32 @_ZN4Base5getIDEv(ptr noundef nonnull align 8 dereferenceable(16) %627)
          to label %630 unwind label %646

630:                                              ; preds = %628
  store i32 %629, ptr %50, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #9
  %631 = load ptr, ptr %48, align 8, !tbaa !5
  %632 = load i32, ptr %49, align 4, !tbaa !9
  %633 = load ptr, ptr %631, align 8, !tbaa !14
  %634 = getelementptr inbounds ptr, ptr %633, i64 12
  %635 = load ptr, ptr %634, align 8
  %636 = invoke noundef ptr %635(ptr noundef nonnull align 8 dereferenceable(17) %631, i32 noundef %632)
          to label %637 unwind label %650

637:                                              ; preds = %630
  %638 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNK10NeuronBase11getSynapsesEv(ptr noundef nonnull align 8 dereferenceable(52) %636)
          to label %639 unwind label %650

639:                                              ; preds = %637
  store ptr %638, ptr %51, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #9
  store i32 0, ptr %52, align 4, !tbaa !9
  br label %640

640:                                              ; preds = %737, %639
  %641 = load i32, ptr %52, align 4, !tbaa !9
  %642 = getelementptr inbounds %class.Network, ptr %60, i32 0, i32 3
  %643 = load i32, ptr %642, align 8, !tbaa !44
  %644 = icmp slt i32 %641, %643
  br i1 %644, label %654, label %645

645:                                              ; preds = %640
  store i32 29, ptr %27, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #9
  br label %740

646:                                              ; preds = %628, %621
  %647 = landingpad { ptr, i32 }
          cleanup
  %648 = extractvalue { ptr, i32 } %647, 0
  store ptr %648, ptr %18, align 8
  %649 = extractvalue { ptr, i32 } %647, 1
  store i32 %649, ptr %19, align 4
  br label %745

650:                                              ; preds = %637, %630
  %651 = landingpad { ptr, i32 }
          cleanup
  %652 = extractvalue { ptr, i32 } %651, 0
  store ptr %652, ptr %18, align 8
  %653 = extractvalue { ptr, i32 } %651, 1
  store i32 %653, ptr %19, align 4
  br label %744

654:                                              ; preds = %640
  %655 = load i32, ptr %45, align 4, !tbaa !9
  %656 = load ptr, ptr %43, align 8, !tbaa !5
  %657 = load i32, ptr %52, align 4, !tbaa !9
  %658 = getelementptr inbounds %class.Network, ptr %60, i32 0, i32 3
  %659 = load i32, ptr %658, align 8, !tbaa !44
  %660 = load i32, ptr %50, align 4, !tbaa !9
  %661 = mul nsw i32 %659, %660
  %662 = add nsw i32 %657, %661
  %663 = sext i32 %662 to i64
  %664 = getelementptr inbounds i32, ptr %656, i64 %663
  store i32 %655, ptr %664, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #9
  %665 = load ptr, ptr %51, align 8, !tbaa !5
  %666 = call ptr @_ZNKSt6vectorIP11SynapseBaseSaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %665) #9
  %667 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.24", ptr %53, i32 0, i32 0
  store ptr %666, ptr %667, align 8
  br label %668

668:                                              ; preds = %711, %654
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #9
  %669 = load ptr, ptr %51, align 8, !tbaa !5
  %670 = call ptr @_ZNKSt6vectorIP11SynapseBaseSaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %669) #9
  %671 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.24", ptr %54, i32 0, i32 0
  store ptr %670, ptr %671, align 8
  %672 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKP11SynapseBaseSt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %53, ptr noundef nonnull align 8 dereferenceable(8) %54) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #9
  br i1 %672, label %674, label %673

673:                                              ; preds = %668
  store i32 32, ptr %27, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #9
  br label %715

674:                                              ; preds = %668
  %675 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKP11SynapseBaseSt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %53) #9
  %676 = load ptr, ptr %675, align 8, !tbaa !5
  %677 = invoke noundef i32 @_ZN11SynapseBase8getDelayEv(ptr noundef nonnull align 8 dereferenceable(33) %676)
          to label %678 unwind label %693

678:                                              ; preds = %674
  %679 = load i32, ptr %52, align 4, !tbaa !9
  %680 = add nsw i32 %679, 1
  %681 = icmp eq i32 %677, %680
  br i1 %681, label %682, label %710

682:                                              ; preds = %678
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #9
  %683 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKP11SynapseBaseSt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %53) #9
  %684 = load ptr, ptr %683, align 8, !tbaa !5
  %685 = invoke noundef i32 @_ZN4Base5getIDEv(ptr noundef nonnull align 8 dereferenceable(16) %684)
          to label %686 unwind label %697

686:                                              ; preds = %682
  store i32 %685, ptr %55, align 4, !tbaa !9
  %687 = load i32, ptr %45, align 4, !tbaa !9
  %688 = getelementptr inbounds %class.Network, ptr %60, i32 0, i32 5
  %689 = load i32, ptr %688, align 8, !tbaa !50
  %690 = icmp slt i32 %687, %689
  br i1 %690, label %691, label %692

691:                                              ; preds = %686
  br label %702

692:                                              ; preds = %686
  call void @__assert_fail(ptr noundef @.str.20, ptr noundef @.str.1, i32 noundef 167, ptr noundef @__PRETTY_FUNCTION__._ZN7Network12buildNetworkEv) #11
  unreachable

693:                                              ; preds = %674
  %694 = landingpad { ptr, i32 }
          cleanup
  %695 = extractvalue { ptr, i32 } %694, 0
  store ptr %695, ptr %18, align 8
  %696 = extractvalue { ptr, i32 } %694, 1
  store i32 %696, ptr %19, align 4
  br label %714

697:                                              ; preds = %682
  %698 = landingpad { ptr, i32 }
          cleanup
  %699 = extractvalue { ptr, i32 } %698, 0
  store ptr %699, ptr %18, align 8
  %700 = extractvalue { ptr, i32 } %698, 1
  store i32 %700, ptr %19, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #9
  br label %714

701:                                              ; No predecessors!
  br label %702

702:                                              ; preds = %701, %691
  %703 = load i32, ptr %55, align 4, !tbaa !9
  %704 = load ptr, ptr %44, align 8, !tbaa !5
  %705 = load i32, ptr %45, align 4, !tbaa !9
  %706 = sext i32 %705 to i64
  %707 = getelementptr inbounds i32, ptr %704, i64 %706
  store i32 %703, ptr %707, align 4, !tbaa !9
  %708 = load i32, ptr %45, align 4, !tbaa !9
  %709 = add nsw i32 %708, 1
  store i32 %709, ptr %45, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #9
  br label %710

710:                                              ; preds = %702, %678
  br label %711

711:                                              ; preds = %710
  %712 = call ptr @_ZN9__gnu_cxx17__normal_iteratorIPKP11SynapseBaseSt6vectorIS2_SaIS2_EEEppEi(ptr noundef nonnull align 8 dereferenceable(8) %53, i32 noundef 0) #9
  %713 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.24", ptr %56, i32 0, i32 0
  store ptr %712, ptr %713, align 8
  br label %668, !llvm.loop !54

714:                                              ; preds = %697, %693
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #9
  br label %744

715:                                              ; preds = %673
  %716 = load i32, ptr %45, align 4, !tbaa !9
  %717 = load ptr, ptr %43, align 8, !tbaa !5
  %718 = load i32, ptr %52, align 4, !tbaa !9
  %719 = getelementptr inbounds %class.Network, ptr %60, i32 0, i32 3
  %720 = load i32, ptr %719, align 8, !tbaa !44
  %721 = load i32, ptr %50, align 4, !tbaa !9
  %722 = mul nsw i32 %720, %721
  %723 = add nsw i32 %718, %722
  %724 = sext i32 %723 to i64
  %725 = getelementptr inbounds i32, ptr %717, i64 %724
  %726 = load i32, ptr %725, align 4, !tbaa !9
  %727 = sub nsw i32 %716, %726
  %728 = load ptr, ptr %42, align 8, !tbaa !5
  %729 = load i32, ptr %52, align 4, !tbaa !9
  %730 = getelementptr inbounds %class.Network, ptr %60, i32 0, i32 3
  %731 = load i32, ptr %730, align 8, !tbaa !44
  %732 = load i32, ptr %50, align 4, !tbaa !9
  %733 = mul nsw i32 %731, %732
  %734 = add nsw i32 %729, %733
  %735 = sext i32 %734 to i64
  %736 = getelementptr inbounds i32, ptr %728, i64 %735
  store i32 %727, ptr %736, align 4, !tbaa !9
  br label %737

737:                                              ; preds = %715
  %738 = load i32, ptr %52, align 4, !tbaa !9
  %739 = add nsw i32 %738, 1
  store i32 %739, ptr %52, align 4, !tbaa !9
  br label %640, !llvm.loop !55

740:                                              ; preds = %645
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #9
  br label %741

741:                                              ; preds = %740
  %742 = load i32, ptr %49, align 4, !tbaa !9
  %743 = add nsw i32 %742, 1
  store i32 %743, ptr %49, align 4, !tbaa !9
  br label %607, !llvm.loop !56

744:                                              ; preds = %714, %650
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #9
  br label %745

745:                                              ; preds = %744, %646
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #9
  br label %746

746:                                              ; preds = %745, %617
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #9
  br label %820

747:                                              ; preds = %616
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #9
  br label %748

748:                                              ; preds = %747
  %749 = call ptr @_ZN9__gnu_cxx17__normal_iteratorIPP14PopulationBaseSt6vectorIS2_SaIS2_EEEppEi(ptr noundef nonnull align 8 dereferenceable(8) %46, i32 noundef 0) #9
  %750 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.6", ptr %57, i32 0, i32 0
  store ptr %749, ptr %750, align 8
  br label %598, !llvm.loop !57

751:                                              ; preds = %603
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #9
  store i32 0, ptr %58, align 4, !tbaa !9
  br label %752

752:                                              ; preds = %770, %751
  %753 = load i32, ptr %58, align 4, !tbaa !9
  %754 = getelementptr inbounds %class.Network, ptr %60, i32 0, i32 5
  %755 = load i32, ptr %754, align 8, !tbaa !50
  %756 = icmp slt i32 %753, %755
  br i1 %756, label %758, label %757

757:                                              ; preds = %752
  store i32 35, ptr %27, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #9
  br label %773

758:                                              ; preds = %752
  %759 = load ptr, ptr %44, align 8, !tbaa !5
  %760 = load i32, ptr %58, align 4, !tbaa !9
  %761 = sext i32 %760 to i64
  %762 = getelementptr inbounds i32, ptr %759, i64 %761
  %763 = load i32, ptr %762, align 4, !tbaa !9
  %764 = load i32, ptr %58, align 4, !tbaa !9
  %765 = icmp eq i32 %763, %764
  br i1 %765, label %766, label %767

766:                                              ; preds = %758
  br label %769

767:                                              ; preds = %758
  call void @__assert_fail(ptr noundef @.str.21, ptr noundef @.str.1, i32 noundef 179, ptr noundef @__PRETTY_FUNCTION__._ZN7Network12buildNetworkEv) #11
  unreachable

768:                                              ; No predecessors!
  br label %769

769:                                              ; preds = %768, %766
  br label %770

770:                                              ; preds = %769
  %771 = load i32, ptr %58, align 4, !tbaa !9
  %772 = add nsw i32 %771, 1
  store i32 %772, ptr %58, align 4, !tbaa !9
  br label %752, !llvm.loop !58

773:                                              ; preds = %757
  %774 = load ptr, ptr %44, align 8, !tbaa !5
  call void @free(ptr noundef %774) #9
  %775 = load ptr, ptr %43, align 8, !tbaa !5
  %776 = load ptr, ptr %41, align 8, !tbaa !5
  %777 = getelementptr inbounds %struct.N2SConnection, ptr %776, i32 0, i32 0
  store ptr %775, ptr %777, align 8, !tbaa !59
  %778 = load ptr, ptr %42, align 8, !tbaa !5
  %779 = load ptr, ptr %41, align 8, !tbaa !5
  %780 = getelementptr inbounds %struct.N2SConnection, ptr %779, i32 0, i32 1
  store ptr %778, ptr %780, align 8, !tbaa !60
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #9
  %781 = call noalias ptr @malloc(i64 noundef 72) #10
  store ptr %781, ptr %59, align 8, !tbaa !5
  %782 = load ptr, ptr %59, align 8, !tbaa !5
  %783 = icmp ne ptr %782, null
  br i1 %783, label %784, label %785

784:                                              ; preds = %773
  br label %787

785:                                              ; preds = %773
  call void @__assert_fail(ptr noundef @.str.22, ptr noundef @.str.1, i32 noundef 189, ptr noundef @__PRETTY_FUNCTION__._ZN7Network12buildNetworkEv) #11
  unreachable

786:                                              ; No predecessors!
  br label %787

787:                                              ; preds = %786, %784
  %788 = load ptr, ptr %8, align 8, !tbaa !5
  %789 = load ptr, ptr %59, align 8, !tbaa !5
  %790 = getelementptr inbounds %struct.GNetwork, ptr %789, i32 0, i32 0
  store ptr %788, ptr %790, align 8, !tbaa !61
  %791 = load ptr, ptr %9, align 8, !tbaa !5
  %792 = load ptr, ptr %59, align 8, !tbaa !5
  %793 = getelementptr inbounds %struct.GNetwork, ptr %792, i32 0, i32 1
  store ptr %791, ptr %793, align 8, !tbaa !63
  %794 = load ptr, ptr %41, align 8, !tbaa !5
  %795 = load ptr, ptr %59, align 8, !tbaa !5
  %796 = getelementptr inbounds %struct.GNetwork, ptr %795, i32 0, i32 2
  store ptr %794, ptr %796, align 8, !tbaa !64
  %797 = load i32, ptr %6, align 4, !tbaa !9
  %798 = load ptr, ptr %59, align 8, !tbaa !5
  %799 = getelementptr inbounds %struct.GNetwork, ptr %798, i32 0, i32 5
  store i32 %797, ptr %799, align 8, !tbaa !65
  %800 = load i32, ptr %7, align 4, !tbaa !9
  %801 = load ptr, ptr %59, align 8, !tbaa !5
  %802 = getelementptr inbounds %struct.GNetwork, ptr %801, i32 0, i32 6
  store i32 %800, ptr %802, align 4, !tbaa !66
  %803 = load ptr, ptr %12, align 8, !tbaa !5
  %804 = load ptr, ptr %59, align 8, !tbaa !5
  %805 = getelementptr inbounds %struct.GNetwork, ptr %804, i32 0, i32 7
  store ptr %803, ptr %805, align 8, !tbaa !67
  %806 = load ptr, ptr %13, align 8, !tbaa !5
  %807 = load ptr, ptr %59, align 8, !tbaa !5
  %808 = getelementptr inbounds %struct.GNetwork, ptr %807, i32 0, i32 8
  store ptr %806, ptr %808, align 8, !tbaa !68
  %809 = load ptr, ptr %10, align 8, !tbaa !5
  %810 = load ptr, ptr %59, align 8, !tbaa !5
  %811 = getelementptr inbounds %struct.GNetwork, ptr %810, i32 0, i32 3
  store ptr %809, ptr %811, align 8, !tbaa !69
  %812 = load ptr, ptr %11, align 8, !tbaa !5
  %813 = load ptr, ptr %59, align 8, !tbaa !5
  %814 = getelementptr inbounds %struct.GNetwork, ptr %813, i32 0, i32 4
  store ptr %812, ptr %814, align 8, !tbaa !70
  %815 = getelementptr inbounds %class.Network, ptr %60, i32 0, i32 3
  %816 = load i32, ptr %815, align 8, !tbaa !44
  %817 = load ptr, ptr %59, align 8, !tbaa !5
  %818 = getelementptr inbounds %struct.GNetwork, ptr %817, i32 0, i32 9
  store i32 %816, ptr %818, align 8, !tbaa !71
  %819 = load ptr, ptr %59, align 8, !tbaa !5
  store i32 1, ptr %27, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #9
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %15) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %15) #9
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %14) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %14) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %3) #9
  ret ptr %819

820:                                              ; preds = %746, %540, %520, %299
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %15) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %15) #9
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %14) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %14) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %3) #9
  br label %821

821:                                              ; preds = %820
  %822 = load ptr, ptr %18, align 8
  %823 = load i32, ptr %19, align 4
  %824 = insertvalue { ptr, i32 } poison, ptr %822, 0
  %825 = insertvalue { ptr, i32 } %824, i32 %823, 1
  resume { ptr, i32 } %825
}

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

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

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

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

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

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

declare i32 @__gxx_personality_v0(...)

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

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

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

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

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

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

declare noundef nonnull align 8 dereferenceable(24) ptr @_ZNK10NeuronBase11getSynapsesEv(ptr noundef nonnull align 8 dereferenceable(52)) #7

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZN11SynapseBase8getDelayEv(ptr noundef nonnull align 8 dereferenceable(33)) #6 align 2

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

declare void @_ZN7Network6logMapEv(ptr noundef nonnull align 8 dereferenceable(224)) #7

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZN4Base5getIDEv(ptr noundef nonnull align 8 dereferenceable(16)) #6 align 2

; Function Attrs: nounwind
declare void @free(ptr noundef) #8

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

attributes #0 = { 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 #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { 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 #3 = { 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 #4 = { nounwind allocsize(0) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
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 = { "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 "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #9 = { nounwind }
attributes #10 = { nounwind allocsize(0) }
attributes #11 = { 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 = !{!"int", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"_ZTS4Type", !7, i64 0}
!13 = !{i64 0, i64 8, !5}
!14 = !{!15, !15, i64 0}
!15 = !{!"vtable pointer", !8, i64 0}
!16 = !{!17, !17, i64 0}
!17 = !{!"long", !7, i64 0}
!18 = distinct !{!18, !19}
!19 = !{!"llvm.loop.mustprogress"}
!20 = distinct !{!20, !19}
!21 = !{!22, !10, i64 76}
!22 = !{!"_ZTS7Network", !23, i64 0, !27, i64 24, !31, i64 48, !10, i64 72, !10, i64 76, !10, i64 80, !35, i64 84, !35, i64 88, !36, i64 96, !36, i64 120, !10, i64 144, !40, i64 152, !40, i64 176, !40, i64 200}
!23 = !{!"_ZTSSt6vectorIP10NeuronBaseSaIS1_EE", !24, i64 0}
!24 = !{!"_ZTSSt12_Vector_baseIP10NeuronBaseSaIS1_EE", !25, i64 0}
!25 = !{!"_ZTSNSt12_Vector_baseIP10NeuronBaseSaIS1_EE12_Vector_implE", !26, i64 0}
!26 = !{!"_ZTSNSt12_Vector_baseIP10NeuronBaseSaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!27 = !{!"_ZTSSt6vectorIP14PopulationBaseSaIS1_EE", !28, i64 0}
!28 = !{!"_ZTSSt12_Vector_baseIP14PopulationBaseSaIS1_EE", !29, i64 0}
!29 = !{!"_ZTSNSt12_Vector_baseIP14PopulationBaseSaIS1_EE12_Vector_implE", !30, i64 0}
!30 = !{!"_ZTSNSt12_Vector_baseIP14PopulationBaseSaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!31 = !{!"_ZTSSt6vectorIP11SynapseBaseSaIS1_EE", !32, i64 0}
!32 = !{!"_ZTSSt12_Vector_baseIP11SynapseBaseSaIS1_EE", !33, i64 0}
!33 = !{!"_ZTSNSt12_Vector_baseIP11SynapseBaseSaIS1_EE12_Vector_implE", !34, i64 0}
!34 = !{!"_ZTSNSt12_Vector_baseIP11SynapseBaseSaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!35 = !{!"float", !7, i64 0}
!36 = !{!"_ZTSSt6vectorI4TypeSaIS0_EE", !37, i64 0}
!37 = !{!"_ZTSSt12_Vector_baseI4TypeSaIS0_EE", !38, i64 0}
!38 = !{!"_ZTSNSt12_Vector_baseI4TypeSaIS0_EE12_Vector_implE", !39, i64 0}
!39 = !{!"_ZTSNSt12_Vector_baseI4TypeSaIS0_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!40 = !{!"_ZTSSt6vectorIiSaIiEE", !41, i64 0}
!41 = !{!"_ZTSSt12_Vector_baseIiSaIiEE", !42, i64 0}
!42 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE12_Vector_implE", !43, i64 0}
!43 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!44 = !{!22, !10, i64 72}
!45 = distinct !{!45, !19}
!46 = distinct !{!46, !19}
!47 = distinct !{!47, !19}
!48 = distinct !{!48, !19}
!49 = distinct !{!49, !19}
!50 = !{!22, !10, i64 80}
!51 = !{!52, !10, i64 40}
!52 = !{!"_ZTS13N2SConnection", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !10, i64 40, !10, i64 44}
!53 = !{!52, !10, i64 44}
!54 = distinct !{!54, !19}
!55 = distinct !{!55, !19}
!56 = distinct !{!56, !19}
!57 = distinct !{!57, !19}
!58 = distinct !{!58, !19}
!59 = !{!52, !6, i64 0}
!60 = !{!52, !6, i64 8}
!61 = !{!62, !6, i64 0}
!62 = !{!"_ZTS8GNetwork", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !10, i64 40, !10, i64 44, !6, i64 48, !6, i64 56, !10, i64 64}
!63 = !{!62, !6, i64 8}
!64 = !{!62, !6, i64 16}
!65 = !{!62, !10, i64 40}
!66 = !{!62, !10, i64 44}
!67 = !{!62, !6, i64 48}
!68 = !{!62, !6, i64 56}
!69 = !{!62, !6, i64 24}
!70 = !{!62, !6, i64 32}
!71 = !{!62, !10, i64 64}


; 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.__gnu_cxx::__normal_iterator.6" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.7" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.8" = type { ptr }
%"class.std::vector.0" = type { %"struct.std::_Vector_base.1" }
%"struct.std::_Vector_base.1" = 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.24" = type { ptr }

@.str.1 = external hidden unnamed_addr constant [73 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [20 x i8], align 1
@__PRETTY_FUNCTION__._ZN7Network12buildNetworkEv = external hidden unnamed_addr constant [34 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [16 x i8], align 1
@createType = external local_unnamed_addr global [10 x ptr], align 16
@.str.10 = external hidden unnamed_addr constant [11 x i8], align 1
@allocType = external local_unnamed_addr global [10 x ptr], align 16
@.str.11 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [45 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [48 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [12 x i8], align 1

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

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

; 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 uwtable
declare dso_local void @_Z18arrangeArrayNeuronRSt6vectorIiSaIiEES2_P13GArrayNeuronsi(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef, i32 noundef) local_unnamed_addr #0

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #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 #3 align 2

; Function Attrs: mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite)
declare noalias noundef ptr @malloc(i64 noundef) local_unnamed_addr #4

; Function Attrs: mustprogress uwtable
define dso_local noundef ptr @_ZN7Network12buildNetworkEv(ptr noundef nonnull align 8 dereferenceable(224) %0) local_unnamed_addr #0 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca %"class.__gnu_cxx::__normal_iterator.6", align 8
  %3 = alloca %"class.__gnu_cxx::__normal_iterator.7", align 8
  %4 = alloca %"class.__gnu_cxx::__normal_iterator.8", align 8
  %5 = alloca %"class.std::vector.0", align 8
  %6 = alloca %"class.std::vector.0", align 8
  %7 = alloca %"class.__gnu_cxx::__normal_iterator.6", align 8
  %8 = alloca %"class.__gnu_cxx::__normal_iterator.6", align 8
  %9 = alloca %"class.__gnu_cxx::__normal_iterator.6", align 8
  %10 = alloca %"class.__gnu_cxx::__normal_iterator.24", align 8
  %11 = alloca %"class.__gnu_cxx::__normal_iterator.24", align 8
  %12 = alloca %"class.__gnu_cxx::__normal_iterator.6", align 8
  %13 = alloca %"class.__gnu_cxx::__normal_iterator.6", align 8
  %14 = alloca %"class.__gnu_cxx::__normal_iterator.24", align 8
  %15 = alloca %"class.__gnu_cxx::__normal_iterator.24", align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %2) #8
  call void @_ZN9__gnu_cxx17__normal_iteratorIPP14PopulationBaseSt6vectorIS2_SaIS2_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %2) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %3) #8
  call void @_ZN9__gnu_cxx17__normal_iteratorIPP10NeuronBaseSt6vectorIS2_SaIS2_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %3) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4) #8
  call void @_ZN9__gnu_cxx17__normal_iteratorIPP11SynapseBaseSt6vectorIS2_SaIS2_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %4) #8
  %16 = getelementptr inbounds i8, ptr %0, i64 96
  %17 = call noundef i64 @_ZNKSt6vectorI4TypeSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %16) #8
  %18 = trunc i64 %17 to i32
  %19 = getelementptr inbounds i8, ptr %0, i64 120
  %20 = call noundef i64 @_ZNKSt6vectorI4TypeSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %19) #8
  %21 = trunc i64 %20 to i32
  %sext = shl i64 %17, 32
  %22 = ashr exact i64 %sext, 29
  %23 = call noalias ptr @malloc(i64 noundef %22) #9
  %.not = icmp eq ptr %23, null
  br i1 %.not, label %24, label %25

24:                                               ; preds = %1
  call void @__assert_fail(ptr noundef nonnull @.str.4, ptr noundef nonnull @.str.1, i32 noundef 46, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN7Network12buildNetworkEv) #10
  unreachable

25:                                               ; preds = %1
  %sext208 = shl i64 %20, 32
  %26 = ashr exact i64 %sext208, 29
  %27 = call noalias ptr @malloc(i64 noundef %26) #9
  %.not209 = icmp eq ptr %27, null
  br i1 %.not209, label %28, label %29

28:                                               ; preds = %25
  call void @__assert_fail(ptr noundef nonnull @.str.5, ptr noundef nonnull @.str.1, i32 noundef 48, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN7Network12buildNetworkEv) #10
  unreachable

29:                                               ; preds = %25
  %sext210 = add i64 %sext, 4294967296
  %30 = ashr exact i64 %sext210, 30
  %31 = call noalias ptr @malloc(i64 noundef %30) #9
  %.not211 = icmp eq ptr %31, null
  br i1 %.not211, label %32, label %33

32:                                               ; preds = %29
  call void @__assert_fail(ptr noundef nonnull @.str.6, ptr noundef nonnull @.str.1, i32 noundef 51, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN7Network12buildNetworkEv) #10
  unreachable

33:                                               ; preds = %29
  %sext212 = add i64 %sext208, 4294967296
  %34 = ashr exact i64 %sext212, 30
  %35 = call noalias ptr @malloc(i64 noundef %34) #9
  %.not213 = icmp eq ptr %35, null
  br i1 %.not213, label %36, label %37

36:                                               ; preds = %33
  call void @__assert_fail(ptr noundef nonnull @.str.7, ptr noundef nonnull @.str.1, i32 noundef 53, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN7Network12buildNetworkEv) #10
  unreachable

37:                                               ; preds = %33
  store i32 0, ptr %31, align 4, !tbaa !5
  store i32 0, ptr %35, align 4, !tbaa !5
  %38 = ashr exact i64 %sext, 30
  %39 = call noalias ptr @malloc(i64 noundef %38) #9
  %.not214 = icmp eq ptr %39, null
  br i1 %.not214, label %40, label %41

40:                                               ; preds = %37
  call void @__assert_fail(ptr noundef nonnull @.str.8, ptr noundef nonnull @.str.1, i32 noundef 58, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN7Network12buildNetworkEv) #10
  unreachable

41:                                               ; preds = %37
  %42 = ashr exact i64 %sext208, 30
  %43 = call noalias ptr @malloc(i64 noundef %42) #9
  %.not215 = icmp eq ptr %43, null
  br i1 %.not215, label %44, label %45

44:                                               ; preds = %41
  call void @__assert_fail(ptr noundef nonnull @.str.9, ptr noundef nonnull @.str.1, i32 noundef 60, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN7Network12buildNetworkEv) #10
  unreachable

45:                                               ; preds = %41
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5) #8
  call void @_ZNSt6vectorIiSaIiEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #8
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %6) #8
  call void @_ZNSt6vectorIiSaIiEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %6) #8
  %46 = icmp sgt i32 %18, 0
  br i1 %46, label %.lr.ph260, label %._crit_edge261

.lr.ph260:                                        ; preds = %45
  %47 = getelementptr inbounds i8, ptr %0, i64 152
  %48 = getelementptr inbounds i8, ptr %0, i64 24
  %wide.trip.count = and i64 %17, 2147483647
  br label %58

._crit_edge261:                                   ; preds = %129, %45
  %49 = getelementptr inbounds i8, ptr %31, i64 %38
  %50 = load i32, ptr %49, align 4, !tbaa !5
  %51 = getelementptr inbounds i8, ptr %0, i64 76
  %52 = load i32, ptr %51, align 4, !tbaa !9
  %53 = icmp eq i32 %50, %52
  br i1 %53, label %.preheader236, label %133

.preheader236:                                    ; preds = %._crit_edge261
  %54 = icmp sgt i32 %21, 0
  br i1 %54, label %.lr.ph278, label %._crit_edge279

.lr.ph278:                                        ; preds = %.preheader236
  %55 = getelementptr inbounds i8, ptr %0, i64 200
  %56 = getelementptr inbounds i8, ptr %0, i64 24
  %57 = getelementptr inbounds i8, ptr %0, i64 72
  %wide.trip.count310 = and i64 %20, 2147483647
  br label %139

58:                                               ; preds = %.lr.ph260, %129
  %59 = phi i32 [ 0, %.lr.ph260 ], [ %130, %129 ]
  %indvars.iv = phi i64 [ 0, %.lr.ph260 ], [ %indvars.iv.next, %129 ]
  %60 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorI4TypeSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %16, i64 noundef %indvars.iv) #8
  %61 = load i32, ptr %60, align 4, !tbaa !33
  %62 = getelementptr inbounds i32, ptr %39, i64 %indvars.iv
  store i32 %61, ptr %62, align 4, !tbaa !33
  %63 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorI4TypeSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %16, i64 noundef %indvars.iv) #8
  %64 = load i32, ptr %63, align 4, !tbaa !33
  %65 = zext i32 %64 to i64
  %66 = getelementptr inbounds [10 x ptr], ptr @createType, i64 0, i64 %65
  %67 = load ptr, ptr %66, align 8, !tbaa !35
  %68 = invoke noundef ptr %67()
          to label %69 unwind label %71

69:                                               ; preds = %58
  %.not229 = icmp eq ptr %68, null
  br i1 %.not229, label %70, label %73

70:                                               ; preds = %69
  call void @__assert_fail(ptr noundef nonnull @.str.10, ptr noundef nonnull @.str.1, i32 noundef 69, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN7Network12buildNetworkEv) #10
  unreachable

71:                                               ; preds = %73, %58
  %72 = landingpad { ptr, i32 }
          cleanup
  br label %370

73:                                               ; preds = %69
  %74 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorI4TypeSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %16, i64 noundef %indvars.iv) #8
  %75 = load i32, ptr %74, align 4, !tbaa !33
  %76 = zext i32 %75 to i64
  %77 = getelementptr inbounds [10 x ptr], ptr @allocType, i64 0, i64 %76
  %78 = load ptr, ptr %77, align 8, !tbaa !35
  %79 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %47, i64 noundef %indvars.iv) #8
  %80 = load i32, ptr %79, align 4, !tbaa !5
  %81 = invoke noundef i32 %78(ptr noundef nonnull %68, i32 noundef %80)
          to label %82 unwind label %71

82:                                               ; preds = %73
  %83 = call ptr @_ZNSt6vectorIP14PopulationBaseSaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %48) #8
  store ptr %83, ptr %2, align 8, !tbaa !35
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #8
  %84 = call ptr @_ZNSt6vectorIP14PopulationBaseSaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %48) #8
  store ptr %84, ptr %7, align 8
  %85 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP14PopulationBaseSt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %2, ptr noundef nonnull align 8 dereferenceable(8) %7) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #8
  br i1 %85, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %82, %114
  %.0175257 = phi i32 [ %.1176, %114 ], [ 0, %82 ]
  %86 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP14PopulationBaseSt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %2) #8
  %87 = load ptr, ptr %86, align 8, !tbaa !35
  %88 = load ptr, ptr %87, align 8, !tbaa !36
  %89 = getelementptr inbounds i8, ptr %88, i64 16
  %90 = load ptr, ptr %89, align 8
  %91 = invoke noundef i32 %90(ptr noundef nonnull align 8 dereferenceable(16) %87)
          to label %92 unwind label %110

92:                                               ; preds = %.lr.ph
  %93 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorI4TypeSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %16, i64 noundef %indvars.iv) #8
  %94 = load i32, ptr %93, align 4, !tbaa !33
  %95 = icmp eq i32 %91, %94
  br i1 %95, label %96, label %114

96:                                               ; preds = %92
  %97 = load ptr, ptr %87, align 8, !tbaa !36
  %98 = getelementptr inbounds i8, ptr %97, i64 64
  %99 = load ptr, ptr %98, align 8
  %100 = invoke noundef i32 %99(ptr noundef nonnull align 8 dereferenceable(16) %87, ptr noundef nonnull %68, i32 noundef %.0175257, i32 noundef %59)
          to label %101 unwind label %112

101:                                              ; preds = %96
  %102 = add i32 %100, %.0175257
  %103 = load ptr, ptr %87, align 8, !tbaa !36
  %104 = getelementptr inbounds i8, ptr %103, i64 16
  %105 = load ptr, ptr %104, align 8
  %106 = invoke noundef i32 %105(ptr noundef nonnull align 8 dereferenceable(16) %87)
          to label %107 unwind label %112

107:                                              ; preds = %101
  %108 = icmp eq i32 %106, 2
  br i1 %108, label %109, label %114

109:                                              ; preds = %107
  invoke void @_Z16arrangeFireArrayRSt6vectorIiSaIiEES2_P14PopulationBase(ptr noundef nonnull align 8 dereferenceable(24) %6, ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull %87)
          to label %114 unwind label %112

110:                                              ; preds = %.lr.ph
  %111 = landingpad { ptr, i32 }
          cleanup
  br label %370

112:                                              ; preds = %109, %101, %96
  %113 = landingpad { ptr, i32 }
          cleanup
  br label %370

114:                                              ; preds = %107, %109, %92
  %.1176 = phi i32 [ %.0175257, %92 ], [ %102, %109 ], [ %102, %107 ]
  %115 = call ptr @_ZN9__gnu_cxx17__normal_iteratorIPP14PopulationBaseSt6vectorIS2_SaIS2_EEEppEi(ptr noundef nonnull align 8 dereferenceable(8) %2, i32 noundef 0) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #8
  %116 = call ptr @_ZNSt6vectorIP14PopulationBaseSaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %48) #8
  store ptr %116, ptr %7, align 8
  %117 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP14PopulationBaseSt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %2, ptr noundef nonnull align 8 dereferenceable(8) %7) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #8
  br i1 %117, label %.lr.ph, label %._crit_edge, !llvm.loop !38

._crit_edge:                                      ; preds = %114, %82
  %.0175.lcssa = phi i32 [ 0, %82 ], [ %.1176, %114 ]
  %118 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %47, i64 noundef %indvars.iv) #8
  %119 = load i32, ptr %118, align 4, !tbaa !5
  %120 = icmp eq i32 %.0175.lcssa, %119
  br i1 %120, label %122, label %121

121:                                              ; preds = %._crit_edge
  call void @__assert_fail(ptr noundef nonnull @.str.11, ptr noundef nonnull @.str.1, i32 noundef 85, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN7Network12buildNetworkEv) #10
  unreachable

122:                                              ; preds = %._crit_edge
  %123 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorI4TypeSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %16, i64 noundef %indvars.iv) #8
  %124 = load i32, ptr %123, align 4, !tbaa !33
  %125 = icmp eq i32 %124, 2
  br i1 %125, label %126, label %129

126:                                              ; preds = %122
  invoke void @_Z18arrangeArrayNeuronRSt6vectorIiSaIiEES2_P13GArrayNeuronsi(ptr noundef nonnull align 8 dereferenceable(24) %6, ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull %68, i32 noundef %.0175.lcssa)
          to label %129 unwind label %127

127:                                              ; preds = %126
  %128 = landingpad { ptr, i32 }
          cleanup
  br label %370

129:                                              ; preds = %126, %122
  %130 = add nsw i32 %59, %.0175.lcssa
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %131 = getelementptr inbounds i32, ptr %31, i64 %indvars.iv.next
  store i32 %130, ptr %131, align 4, !tbaa !5
  %132 = getelementptr inbounds ptr, ptr %23, i64 %indvars.iv
  store ptr %68, ptr %132, align 8, !tbaa !35
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge261, label %58, !llvm.loop !40

133:                                              ; preds = %._crit_edge261
  call void @__assert_fail(ptr noundef nonnull @.str.12, ptr noundef nonnull @.str.1, i32 noundef 94, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN7Network12buildNetworkEv) #10
  unreachable

._crit_edge279:                                   ; preds = %238, %.preheader236
  %134 = getelementptr inbounds i8, ptr %35, i64 %42
  %135 = load i32, ptr %134, align 4, !tbaa !5
  %136 = getelementptr inbounds i8, ptr %0, i64 80
  %137 = load i32, ptr %136, align 8, !tbaa !41
  %138 = icmp eq i32 %135, %137
  br i1 %138, label %243, label %242

139:                                              ; preds = %.lr.ph278, %238
  %140 = phi i32 [ 0, %.lr.ph278 ], [ %239, %238 ]
  %indvars.iv307 = phi i64 [ 0, %.lr.ph278 ], [ %indvars.iv.next308, %238 ]
  %141 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorI4TypeSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %19, i64 noundef %indvars.iv307) #8
  %142 = load i32, ptr %141, align 4, !tbaa !33
  %143 = getelementptr inbounds i32, ptr %43, i64 %indvars.iv307
  store i32 %142, ptr %143, align 4, !tbaa !33
  %144 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorI4TypeSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %19, i64 noundef %indvars.iv307) #8
  %145 = load i32, ptr %144, align 4, !tbaa !33
  %146 = zext i32 %145 to i64
  %147 = getelementptr inbounds [10 x ptr], ptr @createType, i64 0, i64 %146
  %148 = load ptr, ptr %147, align 8, !tbaa !35
  %149 = invoke noundef ptr %148()
          to label %150 unwind label %152

150:                                              ; preds = %139
  %.not223 = icmp eq ptr %149, null
  br i1 %.not223, label %151, label %154

151:                                              ; preds = %150
  call void @__assert_fail(ptr noundef nonnull @.str.13, ptr noundef nonnull @.str.1, i32 noundef 100, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN7Network12buildNetworkEv) #10
  unreachable

152:                                              ; preds = %154, %139
  %153 = landingpad { ptr, i32 }
          cleanup
  br label %370

154:                                              ; preds = %150
  %155 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorI4TypeSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %19, i64 noundef %indvars.iv307) #8
  %156 = load i32, ptr %155, align 4, !tbaa !33
  %157 = zext i32 %156 to i64
  %158 = getelementptr inbounds [10 x ptr], ptr @allocType, i64 0, i64 %157
  %159 = load ptr, ptr %158, align 8, !tbaa !35
  %160 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %55, i64 noundef %indvars.iv307) #8
  %161 = load i32, ptr %160, align 4, !tbaa !5
  %162 = invoke noundef i32 %159(ptr noundef nonnull %149, i32 noundef %161)
          to label %163 unwind label %152

163:                                              ; preds = %154
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #8
  %164 = call ptr @_ZNSt6vectorIP14PopulationBaseSaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %56) #8
  store ptr %164, ptr %8, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #8
  %165 = call ptr @_ZNSt6vectorIP14PopulationBaseSaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %56) #8
  store ptr %165, ptr %9, align 8
  %166 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP14PopulationBaseSt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %8, ptr noundef nonnull align 8 dereferenceable(8) %9) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #8
  br i1 %166, label %.lr.ph274, label %._crit_edge275

._crit_edge275:                                   ; preds = %179, %163
  %.0180.lcssa = phi i32 [ 0, %163 ], [ %.1181, %179 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #8
  %167 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %55, i64 noundef %indvars.iv307) #8
  %168 = load i32, ptr %167, align 4, !tbaa !5
  %169 = icmp eq i32 %.0180.lcssa, %168
  br i1 %169, label %238, label %237

.lr.ph274:                                        ; preds = %163, %179
  %.0180272 = phi i32 [ %.1181, %179 ], [ 0, %163 ]
  %170 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP14PopulationBaseSt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %8) #8
  %171 = load ptr, ptr %170, align 8, !tbaa !35
  br label %172

172:                                              ; preds = %._crit_edge270, %.lr.ph274
  %.0190 = phi i32 [ 0, %.lr.ph274 ], [ %194, %._crit_edge270 ]
  %.1181 = phi i32 [ %.0180272, %.lr.ph274 ], [ %.2182.lcssa, %._crit_edge270 ]
  %173 = load ptr, ptr %171, align 8, !tbaa !36
  %174 = getelementptr inbounds i8, ptr %173, i64 80
  %175 = load ptr, ptr %174, align 8
  %176 = invoke noundef i32 %175(ptr noundef nonnull align 8 dereferenceable(17) %171)
          to label %177 unwind label %183

177:                                              ; preds = %172
  %178 = icmp slt i32 %.0190, %176
  br i1 %178, label %185, label %179

179:                                              ; preds = %177
  %180 = call ptr @_ZN9__gnu_cxx17__normal_iteratorIPP14PopulationBaseSt6vectorIS2_SaIS2_EEEppEi(ptr noundef nonnull align 8 dereferenceable(8) %8, i32 noundef 0) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #8
  %181 = call ptr @_ZNSt6vectorIP14PopulationBaseSaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %56) #8
  store ptr %181, ptr %9, align 8
  %182 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP14PopulationBaseSt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %8, ptr noundef nonnull align 8 dereferenceable(8) %9) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #8
  br i1 %182, label %.lr.ph274, label %._crit_edge275, !llvm.loop !42

183:                                              ; preds = %172
  %184 = landingpad { ptr, i32 }
          cleanup
  br label %236

185:                                              ; preds = %177
  %186 = load ptr, ptr %171, align 8, !tbaa !36
  %187 = getelementptr inbounds i8, ptr %186, i64 96
  %188 = load ptr, ptr %187, align 8
  %189 = invoke noundef ptr %188(ptr noundef nonnull align 8 dereferenceable(17) %171, i32 noundef %.0190)
          to label %190 unwind label %195

190:                                              ; preds = %185
  %191 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNK10NeuronBase11getSynapsesEv(ptr noundef nonnull align 8 dereferenceable(52) %189)
          to label %.preheader235 unwind label %195

.preheader235:                                    ; preds = %190
  %192 = load i32, ptr %57, align 8, !tbaa !43
  %193 = icmp sgt i32 %192, 0
  br i1 %193, label %.lr.ph269, label %._crit_edge270

._crit_edge270:                                   ; preds = %._crit_edge265, %.preheader235
  %.2182.lcssa = phi i32 [ %.1181, %.preheader235 ], [ %.3183.lcssa, %._crit_edge265 ]
  %194 = add nuw nsw i32 %.0190, 1
  br label %172, !llvm.loop !44

195:                                              ; preds = %190, %185
  %196 = landingpad { ptr, i32 }
          cleanup
  br label %236

.lr.ph269:                                        ; preds = %.preheader235, %._crit_edge265
  %.2182268 = phi i32 [ %.3183.lcssa, %._crit_edge265 ], [ %.1181, %.preheader235 ]
  %.0191267 = phi i32 [ %200, %._crit_edge265 ], [ 0, %.preheader235 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #8
  %197 = call ptr @_ZNKSt6vectorIP11SynapseBaseSaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %191) #8
  store ptr %197, ptr %10, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #8
  %198 = call ptr @_ZNKSt6vectorIP11SynapseBaseSaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %191) #8
  store ptr %198, ptr %11, align 8
  %199 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKP11SynapseBaseSt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %10, ptr noundef nonnull align 8 dereferenceable(8) %11) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #8
  %200 = add nuw nsw i32 %.0191267, 1
  br i1 %199, label %.lr.ph264, label %._crit_edge265

._crit_edge265:                                   ; preds = %231, %.lr.ph269
  %.3183.lcssa = phi i32 [ %.2182268, %.lr.ph269 ], [ %.4184, %231 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #8
  %201 = load i32, ptr %57, align 8, !tbaa !43
  %202 = icmp slt i32 %200, %201
  br i1 %202, label %.lr.ph269, label %._crit_edge270, !llvm.loop !45

.lr.ph264:                                        ; preds = %.lr.ph269, %231
  %.3183262 = phi i32 [ %.4184, %231 ], [ %.2182268, %.lr.ph269 ]
  %203 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKP11SynapseBaseSt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %10) #8
  %204 = load ptr, ptr %203, align 8, !tbaa !35
  %205 = call noundef i32 @_ZN11SynapseBase8getDelayEv(ptr noundef nonnull align 8 dereferenceable(33) %204)
  %206 = icmp eq i32 %205, %200
  br i1 %206, label %207, label %231

207:                                              ; preds = %.lr.ph264
  %208 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKP11SynapseBaseSt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %10) #8
  %209 = load ptr, ptr %208, align 8, !tbaa !35
  %210 = load ptr, ptr %209, align 8, !tbaa !36
  %211 = getelementptr inbounds i8, ptr %210, i64 16
  %212 = load ptr, ptr %211, align 8
  %213 = invoke noundef i32 %212(ptr noundef nonnull align 8 dereferenceable(16) %209)
          to label %214 unwind label %227

214:                                              ; preds = %207
  %215 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorI4TypeSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %19, i64 noundef %indvars.iv307) #8
  %216 = load i32, ptr %215, align 4, !tbaa !33
  %217 = icmp eq i32 %213, %216
  br i1 %217, label %218, label %231

218:                                              ; preds = %214
  %219 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKP11SynapseBaseSt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %10) #8
  %220 = load ptr, ptr %219, align 8, !tbaa !35
  %221 = load ptr, ptr %220, align 8, !tbaa !36
  %222 = getelementptr inbounds i8, ptr %221, i64 64
  %223 = load ptr, ptr %222, align 8
  %224 = invoke noundef i32 %223(ptr noundef nonnull align 8 dereferenceable(16) %220, ptr noundef nonnull %149, i32 noundef %.3183262, i32 noundef %140)
          to label %225 unwind label %229

225:                                              ; preds = %218
  %226 = add nsw i32 %224, %.3183262
  br label %231

227:                                              ; preds = %207
  %228 = landingpad { ptr, i32 }
          cleanup
  br label %235

229:                                              ; preds = %218
  %230 = landingpad { ptr, i32 }
          cleanup
  br label %235

231:                                              ; preds = %.lr.ph264, %225, %214
  %.4184 = phi i32 [ %226, %225 ], [ %.3183262, %214 ], [ %.3183262, %.lr.ph264 ]
  %232 = call ptr @_ZN9__gnu_cxx17__normal_iteratorIPKP11SynapseBaseSt6vectorIS2_SaIS2_EEEppEi(ptr noundef nonnull align 8 dereferenceable(8) %10, i32 noundef 0) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #8
  %233 = call ptr @_ZNKSt6vectorIP11SynapseBaseSaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %191) #8
  store ptr %233, ptr %11, align 8
  %234 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKP11SynapseBaseSt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %10, ptr noundef nonnull align 8 dereferenceable(8) %11) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #8
  br i1 %234, label %.lr.ph264, label %._crit_edge265, !llvm.loop !46

235:                                              ; preds = %229, %227
  %.pn224 = phi { ptr, i32 } [ %230, %229 ], [ %228, %227 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #8
  br label %236

236:                                              ; preds = %195, %235, %183
  %.pn224.pn.pn = phi { ptr, i32 } [ %184, %183 ], [ %.pn224, %235 ], [ %196, %195 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #8
  br label %370

237:                                              ; preds = %._crit_edge275
  call void @__assert_fail(ptr noundef nonnull @.str.14, ptr noundef nonnull @.str.1, i32 noundef 132, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN7Network12buildNetworkEv) #10
  unreachable

238:                                              ; preds = %._crit_edge275
  %239 = add nsw i32 %140, %.0180.lcssa
  %indvars.iv.next308 = add nuw nsw i64 %indvars.iv307, 1
  %240 = getelementptr inbounds i32, ptr %35, i64 %indvars.iv.next308
  store i32 %239, ptr %240, align 4, !tbaa !5
  %241 = getelementptr inbounds ptr, ptr %27, i64 %indvars.iv307
  store ptr %149, ptr %241, align 8, !tbaa !35
  %exitcond311.not = icmp eq i64 %indvars.iv.next308, %wide.trip.count310
  br i1 %exitcond311.not, label %._crit_edge279, label %139, !llvm.loop !47

242:                                              ; preds = %._crit_edge279
  call void @__assert_fail(ptr noundef nonnull @.str.15, ptr noundef nonnull @.str.1, i32 noundef 136, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN7Network12buildNetworkEv) #10
  unreachable

243:                                              ; preds = %._crit_edge279
  invoke void @_ZN7Network6logMapEv(ptr noundef nonnull align 8 dereferenceable(224) %0)
          to label %244 unwind label %247

244:                                              ; preds = %243
  %245 = call noalias dereferenceable_or_null(48) ptr @malloc(i64 noundef 48) #9
  %.not216 = icmp eq ptr %245, null
  br i1 %.not216, label %246, label %249

246:                                              ; preds = %244
  call void @__assert_fail(ptr noundef nonnull @.str.16, ptr noundef nonnull @.str.1, i32 noundef 141, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN7Network12buildNetworkEv) #10
  unreachable

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

249:                                              ; preds = %244
  %250 = load i32, ptr %51, align 4, !tbaa !9
  %251 = getelementptr inbounds i8, ptr %245, i64 40
  store i32 %250, ptr %251, align 8, !tbaa !48
  %252 = load i32, ptr %136, align 8, !tbaa !41
  %253 = getelementptr inbounds i8, ptr %245, i64 44
  store i32 %252, ptr %253, align 4, !tbaa !50
  %254 = getelementptr inbounds i8, ptr %0, i64 72
  %255 = load i32, ptr %254, align 8, !tbaa !43
  %256 = sext i32 %255 to i64
  %257 = shl nsw i64 %256, 2
  %258 = sext i32 %250 to i64
  %259 = mul i64 %257, %258
  %260 = call noalias ptr @malloc(i64 noundef %259) #9
  %.not217 = icmp eq ptr %260, null
  br i1 %.not217, label %261, label %262

261:                                              ; preds = %249
  call void @__assert_fail(ptr noundef nonnull @.str.17, ptr noundef nonnull @.str.1, i32 noundef 147, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN7Network12buildNetworkEv) #10
  unreachable

262:                                              ; preds = %249
  %263 = call noalias ptr @malloc(i64 noundef %259) #9
  %.not218 = icmp eq ptr %263, null
  br i1 %.not218, label %264, label %265

264:                                              ; preds = %262
  call void @__assert_fail(ptr noundef nonnull @.str.18, ptr noundef nonnull @.str.1, i32 noundef 149, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN7Network12buildNetworkEv) #10
  unreachable

265:                                              ; preds = %262
  %266 = sext i32 %252 to i64
  %267 = shl nsw i64 %266, 2
  %268 = call noalias ptr @malloc(i64 noundef %267) #9
  %.not219 = icmp eq ptr %268, null
  br i1 %.not219, label %269, label %270

269:                                              ; preds = %265
  call void @__assert_fail(ptr noundef nonnull @.str.19, ptr noundef nonnull @.str.1, i32 noundef 151, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN7Network12buildNetworkEv) #10
  unreachable

270:                                              ; preds = %265
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #8
  %271 = getelementptr inbounds i8, ptr %0, i64 24
  %272 = call ptr @_ZNSt6vectorIP14PopulationBaseSaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %271) #8
  store ptr %272, ptr %12, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #8
  %273 = call ptr @_ZNSt6vectorIP14PopulationBaseSaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %271) #8
  store ptr %273, ptr %13, align 8
  %274 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP14PopulationBaseSt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %12, ptr noundef nonnull align 8 dereferenceable(8) %13) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #8
  br i1 %274, label %.lr.ph292, label %._crit_edge293

._crit_edge293:                                   ; preds = %286, %270
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #8
  %275 = load i32, ptr %136, align 8, !tbaa !41
  %276 = icmp sgt i32 %275, 0
  br i1 %276, label %.lr.ph296.preheader, label %._crit_edge297

.lr.ph296.preheader:                              ; preds = %._crit_edge293
  %wide.trip.count315 = zext nneg i32 %275 to i64
  br label %.lr.ph296

.lr.ph292:                                        ; preds = %270, %286
  %.0185290 = phi i32 [ %.1186, %286 ], [ 0, %270 ]
  %277 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP14PopulationBaseSt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %12) #8
  %278 = load ptr, ptr %277, align 8, !tbaa !35
  br label %279

279:                                              ; preds = %._crit_edge288, %.lr.ph292
  %.1186 = phi i32 [ %.0185290, %.lr.ph292 ], [ %.2187.lcssa, %._crit_edge288 ]
  %.0179 = phi i32 [ 0, %.lr.ph292 ], [ %307, %._crit_edge288 ]
  %280 = load ptr, ptr %278, align 8, !tbaa !36
  %281 = getelementptr inbounds i8, ptr %280, i64 80
  %282 = load ptr, ptr %281, align 8
  %283 = invoke noundef i32 %282(ptr noundef nonnull align 8 dereferenceable(17) %278)
          to label %284 unwind label %290

284:                                              ; preds = %279
  %285 = icmp slt i32 %.0179, %283
  br i1 %285, label %292, label %286

286:                                              ; preds = %284
  %287 = call ptr @_ZN9__gnu_cxx17__normal_iteratorIPP14PopulationBaseSt6vectorIS2_SaIS2_EEEppEi(ptr noundef nonnull align 8 dereferenceable(8) %12, i32 noundef 0) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #8
  %288 = call ptr @_ZNSt6vectorIP14PopulationBaseSaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %271) #8
  store ptr %288, ptr %13, align 8
  %289 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP14PopulationBaseSt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %12, ptr noundef nonnull align 8 dereferenceable(8) %13) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #8
  br i1 %289, label %.lr.ph292, label %._crit_edge293, !llvm.loop !51

290:                                              ; preds = %279
  %291 = landingpad { ptr, i32 }
          cleanup
  br label %349

292:                                              ; preds = %284
  %293 = load ptr, ptr %278, align 8, !tbaa !36
  %294 = getelementptr inbounds i8, ptr %293, i64 96
  %295 = load ptr, ptr %294, align 8
  %296 = invoke noundef ptr %295(ptr noundef nonnull align 8 dereferenceable(17) %278, i32 noundef %.0179)
          to label %297 unwind label %308

297:                                              ; preds = %292
  %298 = call noundef i32 @_ZN4Base5getIDEv(ptr noundef nonnull align 8 dereferenceable(16) %296)
  %299 = load ptr, ptr %278, align 8, !tbaa !36
  %300 = getelementptr inbounds i8, ptr %299, i64 96
  %301 = load ptr, ptr %300, align 8
  %302 = invoke noundef ptr %301(ptr noundef nonnull align 8 dereferenceable(17) %278, i32 noundef %.0179)
          to label %303 unwind label %310

303:                                              ; preds = %297
  %304 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNK10NeuronBase11getSynapsesEv(ptr noundef nonnull align 8 dereferenceable(52) %302)
          to label %.preheader unwind label %310

.preheader:                                       ; preds = %303
  %305 = load i32, ptr %254, align 8, !tbaa !43
  %306 = icmp sgt i32 %305, 0
  br i1 %306, label %.lr.ph287, label %._crit_edge288

._crit_edge288:                                   ; preds = %._crit_edge283, %.preheader
  %.2187.lcssa = phi i32 [ %.1186, %.preheader ], [ %.3188.lcssa, %._crit_edge283 ]
  %307 = add nuw nsw i32 %.0179, 1
  br label %279, !llvm.loop !52

308:                                              ; preds = %292
  %309 = landingpad { ptr, i32 }
          cleanup
  br label %349

310:                                              ; preds = %303, %297
  %311 = landingpad { ptr, i32 }
          cleanup
  br label %349

.lr.ph287:                                        ; preds = %.preheader, %._crit_edge283
  %312 = phi i32 [ %321, %._crit_edge283 ], [ %305, %.preheader ]
  %.0177286 = phi i32 [ %320, %._crit_edge283 ], [ 0, %.preheader ]
  %.2187285 = phi i32 [ %.3188.lcssa, %._crit_edge283 ], [ %.1186, %.preheader ]
  %313 = mul nsw i32 %312, %298
  %314 = add nsw i32 %313, %.0177286
  %315 = sext i32 %314 to i64
  %316 = getelementptr inbounds i32, ptr %263, i64 %315
  store i32 %.2187285, ptr %316, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #8
  %317 = call ptr @_ZNKSt6vectorIP11SynapseBaseSaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %304) #8
  store ptr %317, ptr %14, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #8
  %318 = call ptr @_ZNKSt6vectorIP11SynapseBaseSaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %304) #8
  store ptr %318, ptr %15, align 8
  %319 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKP11SynapseBaseSt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %14, ptr noundef nonnull align 8 dereferenceable(8) %15) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #8
  %320 = add nuw nsw i32 %.0177286, 1
  br i1 %319, label %.lr.ph282, label %._crit_edge283

._crit_edge283:                                   ; preds = %345, %.lr.ph287
  %.3188.lcssa = phi i32 [ %.2187285, %.lr.ph287 ], [ %.4189, %345 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #8
  %321 = load i32, ptr %254, align 8, !tbaa !43
  %322 = mul nsw i32 %321, %298
  %323 = add nsw i32 %322, %.0177286
  %324 = sext i32 %323 to i64
  %325 = getelementptr inbounds i32, ptr %263, i64 %324
  %326 = load i32, ptr %325, align 4, !tbaa !5
  %327 = sub nsw i32 %.3188.lcssa, %326
  %328 = getelementptr inbounds i32, ptr %260, i64 %324
  store i32 %327, ptr %328, align 4, !tbaa !5
  %329 = icmp slt i32 %320, %321
  br i1 %329, label %.lr.ph287, label %._crit_edge288, !llvm.loop !53

.lr.ph282:                                        ; preds = %.lr.ph287, %345
  %.3188280 = phi i32 [ %.4189, %345 ], [ %.2187285, %.lr.ph287 ]
  %330 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKP11SynapseBaseSt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %14) #8
  %331 = load ptr, ptr %330, align 8, !tbaa !35
  %332 = call noundef i32 @_ZN11SynapseBase8getDelayEv(ptr noundef nonnull align 8 dereferenceable(33) %331)
  %333 = icmp eq i32 %332, %320
  br i1 %333, label %334, label %345

334:                                              ; preds = %.lr.ph282
  %335 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKP11SynapseBaseSt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %14) #8
  %336 = load ptr, ptr %335, align 8, !tbaa !35
  %337 = call noundef i32 @_ZN4Base5getIDEv(ptr noundef nonnull align 8 dereferenceable(16) %336)
  %338 = load i32, ptr %136, align 8, !tbaa !41
  %339 = icmp slt i32 %.3188280, %338
  br i1 %339, label %341, label %340

340:                                              ; preds = %334
  call void @__assert_fail(ptr noundef nonnull @.str.20, ptr noundef nonnull @.str.1, i32 noundef 167, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN7Network12buildNetworkEv) #10
  unreachable

341:                                              ; preds = %334
  %342 = sext i32 %.3188280 to i64
  %343 = getelementptr inbounds i32, ptr %268, i64 %342
  store i32 %337, ptr %343, align 4, !tbaa !5
  %344 = add nsw i32 %.3188280, 1
  br label %345

345:                                              ; preds = %.lr.ph282, %341
  %.4189 = phi i32 [ %344, %341 ], [ %.3188280, %.lr.ph282 ]
  %346 = call ptr @_ZN9__gnu_cxx17__normal_iteratorIPKP11SynapseBaseSt6vectorIS2_SaIS2_EEEppEi(ptr noundef nonnull align 8 dereferenceable(8) %14, i32 noundef 0) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #8
  %347 = call ptr @_ZNKSt6vectorIP11SynapseBaseSaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %304) #8
  store ptr %347, ptr %15, align 8
  %348 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKP11SynapseBaseSt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %14, ptr noundef nonnull align 8 dereferenceable(8) %15) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #8
  br i1 %348, label %.lr.ph282, label %._crit_edge283, !llvm.loop !54

349:                                              ; preds = %308, %310, %290
  %.pn.pn = phi { ptr, i32 } [ %291, %290 ], [ %311, %310 ], [ %309, %308 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #8
  br label %370

350:                                              ; preds = %.lr.ph296
  %indvars.iv.next313 = add nuw nsw i64 %indvars.iv312, 1
  %exitcond316.not = icmp eq i64 %indvars.iv.next313, %wide.trip.count315
  br i1 %exitcond316.not, label %._crit_edge297, label %.lr.ph296, !llvm.loop !55

._crit_edge297:                                   ; preds = %350, %._crit_edge293
  call void @free(ptr noundef %268) #8
  store ptr %263, ptr %245, align 8, !tbaa !56
  %351 = getelementptr inbounds i8, ptr %245, i64 8
  store ptr %260, ptr %351, align 8, !tbaa !57
  %352 = call noalias dereferenceable_or_null(72) ptr @malloc(i64 noundef 72) #9
  %.not220 = icmp eq ptr %352, null
  br i1 %.not220, label %358, label %359

.lr.ph296:                                        ; preds = %.lr.ph296.preheader, %350
  %indvars.iv312 = phi i64 [ 0, %.lr.ph296.preheader ], [ %indvars.iv.next313, %350 ]
  %353 = getelementptr inbounds i32, ptr %268, i64 %indvars.iv312
  %354 = load i32, ptr %353, align 4, !tbaa !5
  %355 = zext i32 %354 to i64
  %356 = icmp eq i64 %indvars.iv312, %355
  br i1 %356, label %350, label %357

357:                                              ; preds = %.lr.ph296
  call void @__assert_fail(ptr noundef nonnull @.str.21, ptr noundef nonnull @.str.1, i32 noundef 179, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN7Network12buildNetworkEv) #10
  unreachable

358:                                              ; preds = %._crit_edge297
  call void @__assert_fail(ptr noundef nonnull @.str.22, ptr noundef nonnull @.str.1, i32 noundef 189, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN7Network12buildNetworkEv) #10
  unreachable

359:                                              ; preds = %._crit_edge297
  store ptr %23, ptr %352, align 8, !tbaa !58
  %360 = getelementptr inbounds i8, ptr %352, i64 8
  store ptr %27, ptr %360, align 8, !tbaa !60
  %361 = getelementptr inbounds i8, ptr %352, i64 16
  store ptr %245, ptr %361, align 8, !tbaa !61
  %362 = getelementptr inbounds i8, ptr %352, i64 40
  store i32 %18, ptr %362, align 8, !tbaa !62
  %363 = getelementptr inbounds i8, ptr %352, i64 44
  store i32 %21, ptr %363, align 4, !tbaa !63
  %364 = getelementptr inbounds i8, ptr %352, i64 48
  store ptr %39, ptr %364, align 8, !tbaa !64
  %365 = getelementptr inbounds i8, ptr %352, i64 56
  store ptr %43, ptr %365, align 8, !tbaa !65
  %366 = getelementptr inbounds i8, ptr %352, i64 24
  store ptr %31, ptr %366, align 8, !tbaa !66
  %367 = getelementptr inbounds i8, ptr %352, i64 32
  store ptr %35, ptr %367, align 8, !tbaa !67
  %368 = load i32, ptr %254, align 8, !tbaa !43
  %369 = getelementptr inbounds i8, ptr %352, i64 64
  store i32 %368, ptr %369, align 8, !tbaa !68
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %6) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6) #8
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %2) #8
  ret ptr %352

370:                                              ; preds = %152, %236, %71, %110, %112, %127, %349, %247
  %.pn230.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn, %349 ], [ %248, %247 ], [ %72, %71 ], [ %128, %127 ], [ %113, %112 ], [ %111, %110 ], [ %.pn224.pn.pn, %236 ], [ %153, %152 ]
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %6) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6) #8
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %2) #8
  resume { ptr, i32 } %.pn230.pn.pn.pn
}

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

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

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

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

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

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

declare i32 @__gxx_personality_v0(...)

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

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

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

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

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

declare noundef nonnull align 8 dereferenceable(24) ptr @_ZNK10NeuronBase11getSynapsesEv(ptr noundef nonnull align 8 dereferenceable(52)) local_unnamed_addr #6

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZN11SynapseBase8getDelayEv(ptr noundef nonnull align 8 dereferenceable(33)) local_unnamed_addr #5 align 2

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZN4Base5getIDEv(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite)
declare void @free(ptr allocptr nocapture noundef) local_unnamed_addr #7

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

attributes #0 = { 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 #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { 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 #3 = { 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 #4 = { mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite) "alloc-family"="malloc" "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 nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { "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 = { mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite) "alloc-family"="malloc" "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 = { nounwind allocsize(0) }
attributes #10 = { 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 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !6, i64 76}
!10 = !{!"_ZTS7Network", !11, i64 0, !16, i64 24, !20, i64 48, !6, i64 72, !6, i64 76, !6, i64 80, !24, i64 84, !24, i64 88, !25, i64 96, !25, i64 120, !6, i64 144, !29, i64 152, !29, i64 176, !29, i64 200}
!11 = !{!"_ZTSSt6vectorIP10NeuronBaseSaIS1_EE", !12, i64 0}
!12 = !{!"_ZTSSt12_Vector_baseIP10NeuronBaseSaIS1_EE", !13, i64 0}
!13 = !{!"_ZTSNSt12_Vector_baseIP10NeuronBaseSaIS1_EE12_Vector_implE", !14, i64 0}
!14 = !{!"_ZTSNSt12_Vector_baseIP10NeuronBaseSaIS1_EE17_Vector_impl_dataE", !15, i64 0, !15, i64 8, !15, i64 16}
!15 = !{!"any pointer", !7, i64 0}
!16 = !{!"_ZTSSt6vectorIP14PopulationBaseSaIS1_EE", !17, i64 0}
!17 = !{!"_ZTSSt12_Vector_baseIP14PopulationBaseSaIS1_EE", !18, i64 0}
!18 = !{!"_ZTSNSt12_Vector_baseIP14PopulationBaseSaIS1_EE12_Vector_implE", !19, i64 0}
!19 = !{!"_ZTSNSt12_Vector_baseIP14PopulationBaseSaIS1_EE17_Vector_impl_dataE", !15, i64 0, !15, i64 8, !15, i64 16}
!20 = !{!"_ZTSSt6vectorIP11SynapseBaseSaIS1_EE", !21, i64 0}
!21 = !{!"_ZTSSt12_Vector_baseIP11SynapseBaseSaIS1_EE", !22, i64 0}
!22 = !{!"_ZTSNSt12_Vector_baseIP11SynapseBaseSaIS1_EE12_Vector_implE", !23, i64 0}
!23 = !{!"_ZTSNSt12_Vector_baseIP11SynapseBaseSaIS1_EE17_Vector_impl_dataE", !15, i64 0, !15, i64 8, !15, i64 16}
!24 = !{!"float", !7, i64 0}
!25 = !{!"_ZTSSt6vectorI4TypeSaIS0_EE", !26, i64 0}
!26 = !{!"_ZTSSt12_Vector_baseI4TypeSaIS0_EE", !27, i64 0}
!27 = !{!"_ZTSNSt12_Vector_baseI4TypeSaIS0_EE12_Vector_implE", !28, i64 0}
!28 = !{!"_ZTSNSt12_Vector_baseI4TypeSaIS0_EE17_Vector_impl_dataE", !15, i64 0, !15, i64 8, !15, i64 16}
!29 = !{!"_ZTSSt6vectorIiSaIiEE", !30, i64 0}
!30 = !{!"_ZTSSt12_Vector_baseIiSaIiEE", !31, i64 0}
!31 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE12_Vector_implE", !32, i64 0}
!32 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE17_Vector_impl_dataE", !15, i64 0, !15, i64 8, !15, i64 16}
!33 = !{!34, !34, i64 0}
!34 = !{!"_ZTS4Type", !7, i64 0}
!35 = !{!15, !15, i64 0}
!36 = !{!37, !37, i64 0}
!37 = !{!"vtable pointer", !8, i64 0}
!38 = distinct !{!38, !39}
!39 = !{!"llvm.loop.mustprogress"}
!40 = distinct !{!40, !39}
!41 = !{!10, !6, i64 80}
!42 = distinct !{!42, !39}
!43 = !{!10, !6, i64 72}
!44 = distinct !{!44, !39}
!45 = distinct !{!45, !39}
!46 = distinct !{!46, !39}
!47 = distinct !{!47, !39}
!48 = !{!49, !6, i64 40}
!49 = !{!"_ZTS13N2SConnection", !15, i64 0, !15, i64 8, !15, i64 16, !15, i64 24, !15, i64 32, !6, i64 40, !6, i64 44}
!50 = !{!49, !6, i64 44}
!51 = distinct !{!51, !39}
!52 = distinct !{!52, !39}
!53 = distinct !{!53, !39}
!54 = distinct !{!54, !39}
!55 = distinct !{!55, !39}
!56 = !{!49, !15, i64 0}
!57 = !{!49, !15, i64 8}
!58 = !{!59, !15, i64 0}
!59 = !{!"_ZTS8GNetwork", !15, i64 0, !15, i64 8, !15, i64 16, !15, i64 24, !15, i64 32, !6, i64 40, !6, i64 44, !15, i64 48, !15, i64 56, !6, i64 64}
!60 = !{!59, !15, i64 8}
!61 = !{!59, !15, i64 16}
!62 = !{!59, !6, i64 40}
!63 = !{!59, !6, i64 44}
!64 = !{!59, !15, i64 48}
!65 = !{!59, !15, i64 56}
!66 = !{!59, !15, i64 24}
!67 = !{!59, !15, i64 32}
!68 = !{!59, !6, i64 64}


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