; LLVM IR from jorgemf/c-evolutionary-library :: src (BPTT)

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

%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.std::vector.8" = type { %"struct.std::_Vector_base.9" }
%"struct.std::_Vector_base.9" = type { %"struct.std::_Vector_base<Connection *, std::allocator<Connection *>>::_Vector_impl" }
%"struct.std::_Vector_base<Connection *, std::allocator<Connection *>>::_Vector_impl" = type { %"struct.std::_Vector_base<Connection *, std::allocator<Connection *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<Connection *, std::allocator<Connection *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.__gnu_cxx::__normal_iterator" = type { ptr }

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

; Function Attrs: mustprogress uwtable
define dso_local noundef double @_ZN4BPTT5learnEP9NeuralNetPP4DataiS3_S3_iddNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef %1, ptr noundef %2, i32 noundef %3, ptr noundef %4, ptr noundef %5, i32 noundef %6, double noundef %7, double noundef %8, ptr noundef %9) #1 align 2 personality ptr @__gxx_personality_v0 {
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca i32, align 4
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca i32, align 4
  %18 = alloca double, align 8
  %19 = alloca double, align 8
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca %"class.std::__cxx11::basic_string", align 8
  %23 = alloca ptr, align 8
  %24 = alloca i32, align 4
  %25 = alloca i1, align 1
  %26 = alloca double, align 8
  %27 = alloca double, align 8
  %28 = alloca double, align 8
  %29 = alloca double, align 8
  %30 = alloca double, align 8
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca ptr, align 8
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca ptr, align 8
  %37 = alloca ptr, align 8
  %38 = alloca ptr, align 8
  %39 = alloca ptr, align 8
  %40 = alloca ptr, align 8
  %41 = alloca i32, align 4
  %42 = alloca i32, align 4
  %43 = alloca i32, align 4
  %44 = alloca i32, align 4
  %45 = alloca double, align 8
  %46 = alloca double, align 8
  %47 = alloca double, align 8
  %48 = alloca double, align 8
  %49 = alloca double, align 8
  %50 = alloca double, align 8
  %51 = alloca i32, align 4
  %52 = alloca i32, align 4
  %53 = alloca ptr, align 8
  %54 = alloca i32, align 4
  %55 = alloca double, align 8
  %56 = alloca %"class.std::vector.8", align 8
  %57 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %58 = alloca ptr, align 8
  %59 = alloca i32, align 4
  %60 = alloca %"class.std::vector.8", align 8
  %61 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %62 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %63 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %64 = alloca %"class.std::vector.8", align 8
  %65 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %66 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %67 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %68 = alloca %"class.std::vector.8", align 8
  %69 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %70 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %71 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %72 = alloca %"class.std::vector.8", align 8
  %73 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %74 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %75 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %76 = alloca %"class.std::vector.8", align 8
  %77 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %78 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %79 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %80 = alloca %"class.std::vector.8", align 8
  %81 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %82 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %83 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %84 = alloca %"class.std::vector.8", align 8
  %85 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %86 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %87 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  store ptr %0, ptr %11, align 8, !tbaa !5
  store ptr %1, ptr %12, align 8, !tbaa !5
  store ptr %2, ptr %13, align 8, !tbaa !5
  store i32 %3, ptr %14, align 4, !tbaa !9
  store ptr %4, ptr %15, align 8, !tbaa !5
  store ptr %5, ptr %16, align 8, !tbaa !5
  store i32 %6, ptr %17, align 4, !tbaa !9
  store double %7, ptr %18, align 8, !tbaa !11
  store double %8, ptr %19, align 8, !tbaa !11
  store ptr %9, ptr %20, align 8, !tbaa !5
  %88 = load ptr, ptr %11, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #10
  %89 = call noalias noundef nonnull ptr @_Znwm(i64 noundef 104) #11
  store i1 true, ptr %25, align 1
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %22, ptr noundef nonnull align 8 dereferenceable(32) %9)
          to label %90 unwind label %213

90:                                               ; preds = %10
  invoke void @_ZN4UtilC1ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(104) %89, ptr noundef %22)
          to label %91 unwind label %217

91:                                               ; preds = %90
  store i1 false, ptr %25, align 1
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #10
  store ptr %89, ptr %21, align 8, !tbaa !5
  %92 = load ptr, ptr %21, align 8, !tbaa !5
  call void @_ZN4Util13startLearningEv(ptr noundef nonnull align 8 dereferenceable(104) %92)
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #10
  store double 0.000000e+00, ptr %26, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #10
  store double 0.000000e+00, ptr %27, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #10
  store double 0.000000e+00, ptr %28, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #10
  store double 0.000000e+00, ptr %29, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #10
  %93 = load ptr, ptr %12, align 8, !tbaa !5
  %94 = call noundef i32 @_ZN9NeuralNet8getDelayEv(ptr noundef nonnull align 8 dereferenceable(128) %93)
  store i32 %94, ptr %31, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #10
  %95 = load ptr, ptr %12, align 8, !tbaa !5
  %96 = call noundef i32 @_ZN9NeuralNet18getNumberOfNeuronsEv(ptr noundef nonnull align 8 dereferenceable(128) %95)
  store i32 %96, ptr %32, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #10
  %97 = load ptr, ptr %12, align 8, !tbaa !5
  %98 = call noundef ptr @_ZN9NeuralNet10getNeuronsEv(ptr noundef nonnull align 8 dereferenceable(128) %97)
  store ptr %98, ptr %33, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #10
  %99 = load ptr, ptr %12, align 8, !tbaa !5
  %100 = call noundef i32 @_ZN9NeuralNet12getInputSizeEv(ptr noundef nonnull align 8 dereferenceable(128) %99)
  store i32 %100, ptr %34, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #10
  %101 = load ptr, ptr %12, align 8, !tbaa !5
  %102 = call noundef i32 @_ZN9NeuralNet13getOutputSizeEv(ptr noundef nonnull align 8 dereferenceable(128) %101)
  store i32 %102, ptr %35, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #10
  %103 = load i32, ptr %35, align 4, !tbaa !9
  %104 = sext i32 %103 to i64
  %105 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %104, i64 8)
  %106 = extractvalue { i64, i1 } %105, 1
  %107 = extractvalue { i64, i1 } %105, 0
  %108 = select i1 %106, i64 -1, i64 %107
  %109 = call noalias noundef nonnull ptr @_Znam(i64 noundef %108) #11
  store ptr %109, ptr %40, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #10
  %110 = load i32, ptr %17, align 4, !tbaa !9
  %111 = add nsw i32 %110, 1
  %112 = sitofp i32 %111 to double
  %113 = call double @log(double noundef %112) #10
  %114 = fadd double %113, 1.000000e+00
  store double %114, ptr %46, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #10
  %115 = load double, ptr %19, align 8, !tbaa !11
  %116 = load double, ptr %46, align 8, !tbaa !11
  %117 = load double, ptr %18, align 8, !tbaa !11
  %118 = fneg double %117
  %119 = call double @llvm.fmuladd.f64(double %115, double %116, double %118)
  %120 = load double, ptr %46, align 8, !tbaa !11
  %121 = fsub double %120, 1.000000e+00
  %122 = fdiv double %119, %121
  store double %122, ptr %47, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #10
  %123 = load double, ptr %18, align 8, !tbaa !11
  %124 = load double, ptr %47, align 8, !tbaa !11
  %125 = fsub double %123, %124
  store double %125, ptr %48, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #10
  %126 = load i32, ptr %32, align 4, !tbaa !9
  %127 = load i32, ptr %35, align 4, !tbaa !9
  %128 = sub nsw i32 %126, %127
  store i32 %128, ptr %52, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #10
  %129 = load i32, ptr %32, align 4, !tbaa !9
  %130 = sext i32 %129 to i64
  %131 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %130, i64 8)
  %132 = extractvalue { i64, i1 } %131, 1
  %133 = extractvalue { i64, i1 } %131, 0
  %134 = select i1 %132, i64 -1, i64 %133
  %135 = call noalias noundef nonnull ptr @_Znam(i64 noundef %134) #11
  store ptr %135, ptr %53, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #10
  call void @llvm.lifetime.start.p0(i64 24, ptr %56) #10
  call void @_ZNSt6vectorIP10ConnectionSaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %56) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %57) #10
  call void @_ZN9__gnu_cxx17__normal_iteratorIPP10ConnectionSt6vectorIS2_SaIS2_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %57) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %58) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %59) #10
  store i32 0, ptr %59, align 4, !tbaa !9
  store i32 0, ptr %41, align 4, !tbaa !9
  br label %136

136:                                              ; preds = %775, %91
  %137 = load i32, ptr %41, align 4, !tbaa !9
  %138 = load i32, ptr %17, align 4, !tbaa !9
  %139 = icmp slt i32 %137, %138
  br i1 %139, label %140, label %778

140:                                              ; preds = %136
  %141 = load double, ptr %48, align 8, !tbaa !11
  %142 = load i32, ptr %41, align 4, !tbaa !9
  %143 = add nsw i32 %142, 1
  %144 = sitofp i32 %143 to double
  %145 = call double @log(double noundef %144) #10
  %146 = fadd double %145, 1.000000e+00
  %147 = fdiv double %141, %146
  %148 = load double, ptr %47, align 8, !tbaa !11
  %149 = fadd double %147, %148
  store double %149, ptr %45, align 8, !tbaa !11
  store double 0.000000e+00, ptr %26, align 8, !tbaa !11
  store i32 0, ptr %59, align 4, !tbaa !9
  store i32 0, ptr %42, align 4, !tbaa !9
  br label %150

150:                                              ; preds = %743, %140
  %151 = load i32, ptr %42, align 4, !tbaa !9
  %152 = load i32, ptr %14, align 4, !tbaa !9
  %153 = icmp slt i32 %151, %152
  br i1 %153, label %154, label %746

154:                                              ; preds = %150
  %155 = load ptr, ptr %12, align 8, !tbaa !5
  invoke void @_ZN9NeuralNet10cleanStateEv(ptr noundef nonnull align 8 dereferenceable(128) %155)
          to label %156 unwind label %225

156:                                              ; preds = %154
  %157 = load ptr, ptr %13, align 8, !tbaa !5
  %158 = load i32, ptr %42, align 4, !tbaa !9
  %159 = sext i32 %158 to i64
  %160 = getelementptr inbounds ptr, ptr %157, i64 %159
  %161 = load ptr, ptr %160, align 8, !tbaa !5
  %162 = invoke noundef ptr @_ZN4Data12getDataInputEv(ptr noundef nonnull align 8 dereferenceable(36) %161)
          to label %163 unwind label %225

163:                                              ; preds = %156
  store ptr %162, ptr %36, align 8, !tbaa !5
  %164 = load ptr, ptr %13, align 8, !tbaa !5
  %165 = load i32, ptr %42, align 4, !tbaa !9
  %166 = sext i32 %165 to i64
  %167 = getelementptr inbounds ptr, ptr %164, i64 %166
  %168 = load ptr, ptr %167, align 8, !tbaa !5
  %169 = invoke noundef ptr @_ZN4Data13getDataOutputEv(ptr noundef nonnull align 8 dereferenceable(36) %168)
          to label %170 unwind label %225

170:                                              ; preds = %163
  store ptr %169, ptr %37, align 8, !tbaa !5
  %171 = load ptr, ptr %13, align 8, !tbaa !5
  %172 = load i32, ptr %42, align 4, !tbaa !9
  %173 = sext i32 %172 to i64
  %174 = getelementptr inbounds ptr, ptr %171, i64 %173
  %175 = load ptr, ptr %174, align 8, !tbaa !5
  %176 = invoke noundef i32 @_ZN4Data15getNumberOfDataEv(ptr noundef nonnull align 8 dereferenceable(36) %175)
          to label %177 unwind label %225

177:                                              ; preds = %170
  store i32 %176, ptr %43, align 4, !tbaa !9
  %178 = load i32, ptr %43, align 4, !tbaa !9
  %179 = load i32, ptr %59, align 4, !tbaa !9
  %180 = add nsw i32 %179, %178
  store i32 %180, ptr %59, align 4, !tbaa !9
  store double 0.000000e+00, ptr %30, align 8, !tbaa !11
  store i32 0, ptr %31, align 4, !tbaa !9
  %181 = load i32, ptr %31, align 4, !tbaa !9
  store i32 %181, ptr %44, align 4, !tbaa !9
  br label %182

182:                                              ; preds = %736, %177
  %183 = load i32, ptr %44, align 4, !tbaa !9
  %184 = load i32, ptr %43, align 4, !tbaa !9
  %185 = icmp slt i32 %183, %184
  br i1 %185, label %186, label %739

186:                                              ; preds = %182
  %187 = load ptr, ptr %36, align 8, !tbaa !5
  %188 = load i32, ptr %44, align 4, !tbaa !9
  %189 = sext i32 %188 to i64
  %190 = getelementptr inbounds ptr, ptr %187, i64 %189
  %191 = load ptr, ptr %190, align 8, !tbaa !5
  store ptr %191, ptr %38, align 8, !tbaa !5
  %192 = load ptr, ptr %37, align 8, !tbaa !5
  %193 = load i32, ptr %44, align 4, !tbaa !9
  %194 = sext i32 %193 to i64
  %195 = getelementptr inbounds ptr, ptr %192, i64 %194
  %196 = load ptr, ptr %195, align 8, !tbaa !5
  store ptr %196, ptr %39, align 8, !tbaa !5
  %197 = load ptr, ptr %12, align 8, !tbaa !5
  %198 = load ptr, ptr %38, align 8, !tbaa !5
  %199 = load ptr, ptr %40, align 8, !tbaa !5
  invoke void @_ZN9NeuralNet9getOutputEPdS0_(ptr noundef nonnull align 8 dereferenceable(128) %197, ptr noundef %198, ptr noundef %199)
          to label %200 unwind label %225

200:                                              ; preds = %186
  store i32 0, ptr %54, align 4, !tbaa !9
  br label %201

201:                                              ; preds = %210, %200
  %202 = load i32, ptr %54, align 4, !tbaa !9
  %203 = load i32, ptr %32, align 4, !tbaa !9
  %204 = icmp slt i32 %202, %203
  br i1 %204, label %205, label %229

205:                                              ; preds = %201
  %206 = load ptr, ptr %53, align 8, !tbaa !5
  %207 = load i32, ptr %54, align 4, !tbaa !9
  %208 = sext i32 %207 to i64
  %209 = getelementptr inbounds double, ptr %206, i64 %208
  store double 0.000000e+00, ptr %209, align 8, !tbaa !11
  br label %210

210:                                              ; preds = %205
  %211 = load i32, ptr %54, align 4, !tbaa !9
  %212 = add nsw i32 %211, 1
  store i32 %212, ptr %54, align 4, !tbaa !9
  br label %201, !llvm.loop !13

213:                                              ; preds = %10
  %214 = landingpad { ptr, i32 }
          cleanup
  %215 = extractvalue { ptr, i32 } %214, 0
  store ptr %215, ptr %23, align 8
  %216 = extractvalue { ptr, i32 } %214, 1
  store i32 %216, ptr %24, align 4
  br label %221

217:                                              ; preds = %90
  %218 = landingpad { ptr, i32 }
          cleanup
  %219 = extractvalue { ptr, i32 } %218, 0
  store ptr %219, ptr %23, align 8
  %220 = extractvalue { ptr, i32 } %218, 1
  store i32 %220, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #10
  br label %221

221:                                              ; preds = %217, %213
  %222 = load i1, ptr %25, align 1
  br i1 %222, label %223, label %224

223:                                              ; preds = %221
  call void @_ZdlPvm(ptr noundef %89, i64 noundef 104) #12
  br label %224

224:                                              ; preds = %223, %221
  br label %796

225:                                              ; preds = %764, %760, %756, %746, %723, %693, %686, %683, %672, %621, %619, %613, %588, %557, %550, %547, %535, %532, %526, %475, %473, %467, %442, %409, %403, %400, %390, %387, %381, %329, %327, %323, %317, %293, %235, %186, %170, %163, %156, %154
  %226 = landingpad { ptr, i32 }
          cleanup
  %227 = extractvalue { ptr, i32 } %226, 0
  store ptr %227, ptr %23, align 8
  %228 = extractvalue { ptr, i32 } %226, 1
  store i32 %228, ptr %24, align 4
  br label %795

229:                                              ; preds = %201
  store double 0.000000e+00, ptr %49, align 8, !tbaa !11
  %230 = load i32, ptr %52, align 4, !tbaa !9
  store i32 %230, ptr %54, align 4, !tbaa !9
  br label %231

231:                                              ; preds = %277, %229
  %232 = load i32, ptr %54, align 4, !tbaa !9
  %233 = load i32, ptr %32, align 4, !tbaa !9
  %234 = icmp slt i32 %232, %233
  br i1 %234, label %235, label %280

235:                                              ; preds = %231
  %236 = load ptr, ptr %33, align 8, !tbaa !5
  %237 = load i32, ptr %54, align 4, !tbaa !9
  %238 = sext i32 %237 to i64
  %239 = getelementptr inbounds ptr, ptr %236, i64 %238
  %240 = load ptr, ptr %239, align 8, !tbaa !5
  %241 = load ptr, ptr %240, align 8, !tbaa !15
  %242 = getelementptr inbounds ptr, ptr %241, i64 5
  %243 = load ptr, ptr %242, align 8
  %244 = invoke noundef double %243(ptr noundef nonnull align 8 dereferenceable(80) %240, i32 noundef 0)
          to label %245 unwind label %225

245:                                              ; preds = %235
  store double %244, ptr %55, align 8, !tbaa !11
  %246 = load ptr, ptr %39, align 8, !tbaa !5
  %247 = load i32, ptr %54, align 4, !tbaa !9
  %248 = load i32, ptr %52, align 4, !tbaa !9
  %249 = sub nsw i32 %247, %248
  %250 = sext i32 %249 to i64
  %251 = getelementptr inbounds double, ptr %246, i64 %250
  %252 = load double, ptr %251, align 8, !tbaa !11
  %253 = load double, ptr %55, align 8, !tbaa !11
  %254 = fsub double %252, %253
  store double %254, ptr %50, align 8, !tbaa !11
  %255 = load double, ptr %50, align 8, !tbaa !11
  %256 = load double, ptr %50, align 8, !tbaa !11
  %257 = load double, ptr %49, align 8, !tbaa !11
  %258 = call double @llvm.fmuladd.f64(double %255, double %256, double %257)
  store double %258, ptr %49, align 8, !tbaa !11
  %259 = load double, ptr %55, align 8, !tbaa !11
  %260 = load ptr, ptr %39, align 8, !tbaa !5
  %261 = load i32, ptr %54, align 4, !tbaa !9
  %262 = load i32, ptr %52, align 4, !tbaa !9
  %263 = sub nsw i32 %261, %262
  %264 = sext i32 %263 to i64
  %265 = getelementptr inbounds double, ptr %260, i64 %264
  %266 = load double, ptr %265, align 8, !tbaa !11
  %267 = fsub double %259, %266
  %268 = load double, ptr %55, align 8, !tbaa !11
  %269 = fmul double %267, %268
  %270 = load double, ptr %55, align 8, !tbaa !11
  %271 = fsub double 1.000000e+00, %270
  %272 = fmul double %269, %271
  %273 = load ptr, ptr %53, align 8, !tbaa !5
  %274 = load i32, ptr %54, align 4, !tbaa !9
  %275 = sext i32 %274 to i64
  %276 = getelementptr inbounds double, ptr %273, i64 %275
  store double %272, ptr %276, align 8, !tbaa !11
  br label %277

277:                                              ; preds = %245
  %278 = load i32, ptr %54, align 4, !tbaa !9
  %279 = add nsw i32 %278, 1
  store i32 %279, ptr %54, align 4, !tbaa !9
  br label %231, !llvm.loop !17

280:                                              ; preds = %231
  %281 = load double, ptr %49, align 8, !tbaa !11
  %282 = load i32, ptr %35, align 4, !tbaa !9
  %283 = sitofp i32 %282 to double
  %284 = fdiv double %281, %283
  %285 = load double, ptr %30, align 8, !tbaa !11
  %286 = fadd double %285, %284
  store double %286, ptr %30, align 8, !tbaa !11
  %287 = load i32, ptr %52, align 4, !tbaa !9
  %288 = sub nsw i32 %287, 1
  store i32 %288, ptr %54, align 4, !tbaa !9
  br label %289

289:                                              ; preds = %357, %280
  %290 = load i32, ptr %54, align 4, !tbaa !9
  %291 = load i32, ptr %34, align 4, !tbaa !9
  %292 = icmp sgt i32 %290, %291
  br i1 %292, label %293, label %360

293:                                              ; preds = %289
  %294 = load ptr, ptr %33, align 8, !tbaa !5
  %295 = load i32, ptr %54, align 4, !tbaa !9
  %296 = sext i32 %295 to i64
  %297 = getelementptr inbounds ptr, ptr %294, i64 %296
  %298 = load ptr, ptr %297, align 8, !tbaa !5
  %299 = load ptr, ptr %298, align 8, !tbaa !15
  %300 = getelementptr inbounds ptr, ptr %299, i64 5
  %301 = load ptr, ptr %300, align 8
  %302 = invoke noundef double %301(ptr noundef nonnull align 8 dereferenceable(80) %298, i32 noundef 0)
          to label %303 unwind label %225

303:                                              ; preds = %293
  store double %302, ptr %55, align 8, !tbaa !11
  store double 0.000000e+00, ptr %50, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 24, ptr %60) #10
  %304 = load ptr, ptr %33, align 8, !tbaa !5
  %305 = load i32, ptr %54, align 4, !tbaa !9
  %306 = sext i32 %305 to i64
  %307 = getelementptr inbounds ptr, ptr %304, i64 %306
  %308 = load ptr, ptr %307, align 8, !tbaa !5
  invoke void @_ZN6Neuron20getOutputConnectionsEv(ptr dead_on_unwind writable sret(%"class.std::vector.8") align 8 %60, ptr noundef nonnull align 8 dereferenceable(80) %308)
          to label %309 unwind label %338

309:                                              ; preds = %303
  %310 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIP10ConnectionSaIS1_EEaSEOS3_(ptr noundef nonnull align 8 dereferenceable(24) %56, ptr noundef nonnull align 8 dereferenceable(24) %60) #10
  call void @_ZNSt6vectorIP10ConnectionSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %60) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %60) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #10
  %311 = call ptr @_ZNSt6vectorIP10ConnectionSaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %56) #10
  %312 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %61, i32 0, i32 0
  store ptr %311, ptr %312, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %57, ptr align 8 %61, i64 8, i1 false), !tbaa.struct !18
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #10
  br label %313

313:                                              ; preds = %343, %309
  call void @llvm.lifetime.start.p0(i64 8, ptr %62) #10
  %314 = call ptr @_ZNSt6vectorIP10ConnectionSaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %56) #10
  %315 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %62, i32 0, i32 0
  store ptr %314, ptr %315, align 8
  %316 = call noundef zeroext i1 @_ZN9__gnu_cxxltIPP10ConnectionSt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %57, ptr noundef nonnull align 8 dereferenceable(8) %62) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #10
  br i1 %316, label %317, label %346

317:                                              ; preds = %313
  %318 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP10ConnectionSt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %57) #10
  %319 = load ptr, ptr %318, align 8, !tbaa !5
  store ptr %319, ptr %58, align 8, !tbaa !5
  %320 = load ptr, ptr %58, align 8, !tbaa !5
  %321 = invoke noundef zeroext i1 @_ZN10Connection12getRecurrentEv(ptr noundef nonnull align 8 dereferenceable(41) %320)
          to label %322 unwind label %225

322:                                              ; preds = %317
  br i1 %321, label %342, label %323

323:                                              ; preds = %322
  %324 = load ptr, ptr %53, align 8, !tbaa !5
  %325 = load ptr, ptr %58, align 8, !tbaa !5
  %326 = invoke noundef ptr @_ZN10Connection14getOuputNeuronEv(ptr noundef nonnull align 8 dereferenceable(41) %325)
          to label %327 unwind label %225

327:                                              ; preds = %323
  %328 = invoke noundef i32 @_ZN6Neuron5getIDEv(ptr noundef nonnull align 8 dereferenceable(80) %326)
          to label %329 unwind label %225

329:                                              ; preds = %327
  %330 = sext i32 %328 to i64
  %331 = getelementptr inbounds double, ptr %324, i64 %330
  %332 = load double, ptr %331, align 8, !tbaa !11
  %333 = load ptr, ptr %58, align 8, !tbaa !5
  %334 = invoke noundef double @_ZN10Connection9getWeightEv(ptr noundef nonnull align 8 dereferenceable(41) %333)
          to label %335 unwind label %225

335:                                              ; preds = %329
  %336 = load double, ptr %50, align 8, !tbaa !11
  %337 = call double @llvm.fmuladd.f64(double %332, double %334, double %336)
  store double %337, ptr %50, align 8, !tbaa !11
  br label %342

338:                                              ; preds = %303
  %339 = landingpad { ptr, i32 }
          cleanup
  %340 = extractvalue { ptr, i32 } %339, 0
  store ptr %340, ptr %23, align 8
  %341 = extractvalue { ptr, i32 } %339, 1
  store i32 %341, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 24, ptr %60) #10
  br label %795

342:                                              ; preds = %335, %322
  br label %343

343:                                              ; preds = %342
  %344 = call ptr @_ZN9__gnu_cxx17__normal_iteratorIPP10ConnectionSt6vectorIS2_SaIS2_EEEppEi(ptr noundef nonnull align 8 dereferenceable(8) %57, i32 noundef 0) #10
  %345 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %63, i32 0, i32 0
  store ptr %344, ptr %345, align 8
  br label %313, !llvm.loop !19

346:                                              ; preds = %313
  %347 = load double, ptr %55, align 8, !tbaa !11
  %348 = load double, ptr %55, align 8, !tbaa !11
  %349 = fsub double 1.000000e+00, %348
  %350 = fmul double %347, %349
  %351 = load double, ptr %50, align 8, !tbaa !11
  %352 = fmul double %350, %351
  %353 = load ptr, ptr %53, align 8, !tbaa !5
  %354 = load i32, ptr %54, align 4, !tbaa !9
  %355 = sext i32 %354 to i64
  %356 = getelementptr inbounds double, ptr %353, i64 %355
  store double %352, ptr %356, align 8, !tbaa !11
  br label %357

357:                                              ; preds = %346
  %358 = load i32, ptr %54, align 4, !tbaa !9
  %359 = add nsw i32 %358, -1
  store i32 %359, ptr %54, align 4, !tbaa !9
  br label %289, !llvm.loop !20

360:                                              ; preds = %289
  %361 = load i32, ptr %34, align 4, !tbaa !9
  %362 = add nsw i32 %361, 1
  store i32 %362, ptr %54, align 4, !tbaa !9
  br label %363

363:                                              ; preds = %426, %360
  %364 = load i32, ptr %54, align 4, !tbaa !9
  %365 = load i32, ptr %32, align 4, !tbaa !9
  %366 = icmp slt i32 %364, %365
  br i1 %366, label %367, label %429

367:                                              ; preds = %363
  call void @llvm.lifetime.start.p0(i64 24, ptr %64) #10
  %368 = load ptr, ptr %33, align 8, !tbaa !5
  %369 = load i32, ptr %54, align 4, !tbaa !9
  %370 = sext i32 %369 to i64
  %371 = getelementptr inbounds ptr, ptr %368, i64 %370
  %372 = load ptr, ptr %371, align 8, !tbaa !5
  invoke void @_ZN6Neuron19getInputConnectionsEv(ptr dead_on_unwind writable sret(%"class.std::vector.8") align 8 %64, ptr noundef nonnull align 8 dereferenceable(80) %372)
          to label %373 unwind label %396

373:                                              ; preds = %367
  %374 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIP10ConnectionSaIS1_EEaSEOS3_(ptr noundef nonnull align 8 dereferenceable(24) %56, ptr noundef nonnull align 8 dereferenceable(24) %64) #10
  call void @_ZNSt6vectorIP10ConnectionSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %64) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %64) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %65) #10
  %375 = call ptr @_ZNSt6vectorIP10ConnectionSaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %56) #10
  %376 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %65, i32 0, i32 0
  store ptr %375, ptr %376, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %57, ptr align 8 %65, i64 8, i1 false), !tbaa.struct !18
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #10
  br label %377

377:                                              ; preds = %422, %373
  call void @llvm.lifetime.start.p0(i64 8, ptr %66) #10
  %378 = call ptr @_ZNSt6vectorIP10ConnectionSaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %56) #10
  %379 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %66, i32 0, i32 0
  store ptr %378, ptr %379, align 8
  %380 = call noundef zeroext i1 @_ZN9__gnu_cxxltIPP10ConnectionSt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %57, ptr noundef nonnull align 8 dereferenceable(8) %66) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #10
  br i1 %380, label %381, label %425

381:                                              ; preds = %377
  %382 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP10ConnectionSt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %57) #10
  %383 = load ptr, ptr %382, align 8, !tbaa !5
  store ptr %383, ptr %58, align 8, !tbaa !5
  %384 = load ptr, ptr %58, align 8, !tbaa !5
  %385 = invoke noundef zeroext i1 @_ZN10Connection12getRecurrentEv(ptr noundef nonnull align 8 dereferenceable(41) %384)
          to label %386 unwind label %225

386:                                              ; preds = %381
  br i1 %385, label %387, label %400

387:                                              ; preds = %386
  %388 = load ptr, ptr %58, align 8, !tbaa !5
  %389 = invoke noundef ptr @_ZN10Connection14getInputNeuronEv(ptr noundef nonnull align 8 dereferenceable(41) %388)
          to label %390 unwind label %225

390:                                              ; preds = %387
  %391 = load ptr, ptr %389, align 8, !tbaa !15
  %392 = getelementptr inbounds ptr, ptr %391, i64 5
  %393 = load ptr, ptr %392, align 8
  %394 = invoke noundef double %393(ptr noundef nonnull align 8 dereferenceable(80) %389, i32 noundef 1)
          to label %395 unwind label %225

395:                                              ; preds = %390
  store double %394, ptr %55, align 8, !tbaa !11
  br label %409

396:                                              ; preds = %367
  %397 = landingpad { ptr, i32 }
          cleanup
  %398 = extractvalue { ptr, i32 } %397, 0
  store ptr %398, ptr %23, align 8
  %399 = extractvalue { ptr, i32 } %397, 1
  store i32 %399, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 24, ptr %64) #10
  br label %795

400:                                              ; preds = %386
  %401 = load ptr, ptr %58, align 8, !tbaa !5
  %402 = invoke noundef ptr @_ZN10Connection14getInputNeuronEv(ptr noundef nonnull align 8 dereferenceable(41) %401)
          to label %403 unwind label %225

403:                                              ; preds = %400
  %404 = load ptr, ptr %402, align 8, !tbaa !15
  %405 = getelementptr inbounds ptr, ptr %404, i64 5
  %406 = load ptr, ptr %405, align 8
  %407 = invoke noundef double %406(ptr noundef nonnull align 8 dereferenceable(80) %402, i32 noundef 0)
          to label %408 unwind label %225

408:                                              ; preds = %403
  store double %407, ptr %55, align 8, !tbaa !11
  br label %409

409:                                              ; preds = %408, %395
  %410 = load ptr, ptr %58, align 8, !tbaa !5
  %411 = load double, ptr %45, align 8, !tbaa !11
  %412 = fneg double %411
  %413 = load ptr, ptr %53, align 8, !tbaa !5
  %414 = load i32, ptr %54, align 4, !tbaa !9
  %415 = sext i32 %414 to i64
  %416 = getelementptr inbounds double, ptr %413, i64 %415
  %417 = load double, ptr %416, align 8, !tbaa !11
  %418 = fmul double %412, %417
  %419 = load double, ptr %55, align 8, !tbaa !11
  %420 = fmul double %418, %419
  invoke void @_ZN10Connection17addToModificationEd(ptr noundef nonnull align 8 dereferenceable(41) %410, double noundef %420)
          to label %421 unwind label %225

421:                                              ; preds = %409
  br label %422

422:                                              ; preds = %421
  %423 = call ptr @_ZN9__gnu_cxx17__normal_iteratorIPP10ConnectionSt6vectorIS2_SaIS2_EEEppEi(ptr noundef nonnull align 8 dereferenceable(8) %57, i32 noundef 0) #10
  %424 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %67, i32 0, i32 0
  store ptr %423, ptr %424, align 8
  br label %377, !llvm.loop !21

425:                                              ; preds = %377
  br label %426

426:                                              ; preds = %425
  %427 = load i32, ptr %54, align 4, !tbaa !9
  %428 = add nsw i32 %427, 1
  store i32 %428, ptr %54, align 4, !tbaa !9
  br label %363, !llvm.loop !22

429:                                              ; preds = %363
  store i32 1, ptr %51, align 4, !tbaa !9
  br label %430

430:                                              ; preds = %578, %429
  %431 = load i32, ptr %51, align 4, !tbaa !9
  %432 = load i32, ptr %31, align 4, !tbaa !9
  %433 = sub nsw i32 %432, 1
  %434 = icmp slt i32 %431, %433
  br i1 %434, label %435, label %581

435:                                              ; preds = %430
  %436 = load i32, ptr %32, align 4, !tbaa !9
  %437 = sub nsw i32 %436, 1
  store i32 %437, ptr %54, align 4, !tbaa !9
  br label %438

438:                                              ; preds = %502, %435
  %439 = load i32, ptr %54, align 4, !tbaa !9
  %440 = load i32, ptr %34, align 4, !tbaa !9
  %441 = icmp sgt i32 %439, %440
  br i1 %441, label %442, label %505

442:                                              ; preds = %438
  %443 = load ptr, ptr %33, align 8, !tbaa !5
  %444 = load i32, ptr %54, align 4, !tbaa !9
  %445 = sext i32 %444 to i64
  %446 = getelementptr inbounds ptr, ptr %443, i64 %445
  %447 = load ptr, ptr %446, align 8, !tbaa !5
  %448 = load i32, ptr %51, align 4, !tbaa !9
  %449 = load ptr, ptr %447, align 8, !tbaa !15
  %450 = getelementptr inbounds ptr, ptr %449, i64 5
  %451 = load ptr, ptr %450, align 8
  %452 = invoke noundef double %451(ptr noundef nonnull align 8 dereferenceable(80) %447, i32 noundef %448)
          to label %453 unwind label %225

453:                                              ; preds = %442
  store double %452, ptr %55, align 8, !tbaa !11
  store double 0.000000e+00, ptr %50, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 24, ptr %68) #10
  %454 = load ptr, ptr %33, align 8, !tbaa !5
  %455 = load i32, ptr %54, align 4, !tbaa !9
  %456 = sext i32 %455 to i64
  %457 = getelementptr inbounds ptr, ptr %454, i64 %456
  %458 = load ptr, ptr %457, align 8, !tbaa !5
  invoke void @_ZN6Neuron20getOutputConnectionsEv(ptr dead_on_unwind writable sret(%"class.std::vector.8") align 8 %68, ptr noundef nonnull align 8 dereferenceable(80) %458)
          to label %459 unwind label %487

459:                                              ; preds = %453
  %460 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIP10ConnectionSaIS1_EEaSEOS3_(ptr noundef nonnull align 8 dereferenceable(24) %56, ptr noundef nonnull align 8 dereferenceable(24) %68) #10
  call void @_ZNSt6vectorIP10ConnectionSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %68) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %68) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %69) #10
  %461 = call ptr @_ZNSt6vectorIP10ConnectionSaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %56) #10
  %462 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %69, i32 0, i32 0
  store ptr %461, ptr %462, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %57, ptr align 8 %69, i64 8, i1 false), !tbaa.struct !18
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #10
  br label %463

463:                                              ; preds = %484, %459
  call void @llvm.lifetime.start.p0(i64 8, ptr %70) #10
  %464 = call ptr @_ZNSt6vectorIP10ConnectionSaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %56) #10
  %465 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %70, i32 0, i32 0
  store ptr %464, ptr %465, align 8
  %466 = call noundef zeroext i1 @_ZN9__gnu_cxxltIPP10ConnectionSt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %57, ptr noundef nonnull align 8 dereferenceable(8) %70) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #10
  br i1 %466, label %467, label %491

467:                                              ; preds = %463
  %468 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP10ConnectionSt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %57) #10
  %469 = load ptr, ptr %468, align 8, !tbaa !5
  store ptr %469, ptr %58, align 8, !tbaa !5
  %470 = load ptr, ptr %53, align 8, !tbaa !5
  %471 = load ptr, ptr %58, align 8, !tbaa !5
  %472 = invoke noundef ptr @_ZN10Connection14getOuputNeuronEv(ptr noundef nonnull align 8 dereferenceable(41) %471)
          to label %473 unwind label %225

473:                                              ; preds = %467
  %474 = invoke noundef i32 @_ZN6Neuron5getIDEv(ptr noundef nonnull align 8 dereferenceable(80) %472)
          to label %475 unwind label %225

475:                                              ; preds = %473
  %476 = sext i32 %474 to i64
  %477 = getelementptr inbounds double, ptr %470, i64 %476
  %478 = load double, ptr %477, align 8, !tbaa !11
  %479 = load ptr, ptr %58, align 8, !tbaa !5
  %480 = invoke noundef double @_ZN10Connection9getWeightEv(ptr noundef nonnull align 8 dereferenceable(41) %479)
          to label %481 unwind label %225

481:                                              ; preds = %475
  %482 = load double, ptr %50, align 8, !tbaa !11
  %483 = call double @llvm.fmuladd.f64(double %478, double %480, double %482)
  store double %483, ptr %50, align 8, !tbaa !11
  br label %484

484:                                              ; preds = %481
  %485 = call ptr @_ZN9__gnu_cxx17__normal_iteratorIPP10ConnectionSt6vectorIS2_SaIS2_EEEppEi(ptr noundef nonnull align 8 dereferenceable(8) %57, i32 noundef 0) #10
  %486 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %71, i32 0, i32 0
  store ptr %485, ptr %486, align 8
  br label %463, !llvm.loop !23

487:                                              ; preds = %453
  %488 = landingpad { ptr, i32 }
          cleanup
  %489 = extractvalue { ptr, i32 } %488, 0
  store ptr %489, ptr %23, align 8
  %490 = extractvalue { ptr, i32 } %488, 1
  store i32 %490, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 24, ptr %68) #10
  br label %795

491:                                              ; preds = %463
  %492 = load double, ptr %55, align 8, !tbaa !11
  %493 = load double, ptr %55, align 8, !tbaa !11
  %494 = fsub double 1.000000e+00, %493
  %495 = fmul double %492, %494
  %496 = load double, ptr %50, align 8, !tbaa !11
  %497 = fmul double %495, %496
  %498 = load ptr, ptr %53, align 8, !tbaa !5
  %499 = load i32, ptr %54, align 4, !tbaa !9
  %500 = sext i32 %499 to i64
  %501 = getelementptr inbounds double, ptr %498, i64 %500
  store double %497, ptr %501, align 8, !tbaa !11
  br label %502

502:                                              ; preds = %491
  %503 = load i32, ptr %54, align 4, !tbaa !9
  %504 = add nsw i32 %503, -1
  store i32 %504, ptr %54, align 4, !tbaa !9
  br label %438, !llvm.loop !24

505:                                              ; preds = %438
  %506 = load i32, ptr %34, align 4, !tbaa !9
  %507 = add nsw i32 %506, 1
  store i32 %507, ptr %54, align 4, !tbaa !9
  br label %508

508:                                              ; preds = %574, %505
  %509 = load i32, ptr %54, align 4, !tbaa !9
  %510 = load i32, ptr %32, align 4, !tbaa !9
  %511 = icmp slt i32 %509, %510
  br i1 %511, label %512, label %577

512:                                              ; preds = %508
  call void @llvm.lifetime.start.p0(i64 24, ptr %72) #10
  %513 = load ptr, ptr %33, align 8, !tbaa !5
  %514 = load i32, ptr %54, align 4, !tbaa !9
  %515 = sext i32 %514 to i64
  %516 = getelementptr inbounds ptr, ptr %513, i64 %515
  %517 = load ptr, ptr %516, align 8, !tbaa !5
  invoke void @_ZN6Neuron19getInputConnectionsEv(ptr dead_on_unwind writable sret(%"class.std::vector.8") align 8 %72, ptr noundef nonnull align 8 dereferenceable(80) %517)
          to label %518 unwind label %543

518:                                              ; preds = %512
  %519 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIP10ConnectionSaIS1_EEaSEOS3_(ptr noundef nonnull align 8 dereferenceable(24) %56, ptr noundef nonnull align 8 dereferenceable(24) %72) #10
  call void @_ZNSt6vectorIP10ConnectionSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %72) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %72) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %73) #10
  %520 = call ptr @_ZNSt6vectorIP10ConnectionSaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %56) #10
  %521 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %73, i32 0, i32 0
  store ptr %520, ptr %521, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %57, ptr align 8 %73, i64 8, i1 false), !tbaa.struct !18
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #10
  br label %522

522:                                              ; preds = %570, %518
  call void @llvm.lifetime.start.p0(i64 8, ptr %74) #10
  %523 = call ptr @_ZNSt6vectorIP10ConnectionSaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %56) #10
  %524 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %74, i32 0, i32 0
  store ptr %523, ptr %524, align 8
  %525 = call noundef zeroext i1 @_ZN9__gnu_cxxltIPP10ConnectionSt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %57, ptr noundef nonnull align 8 dereferenceable(8) %74) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #10
  br i1 %525, label %526, label %573

526:                                              ; preds = %522
  %527 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP10ConnectionSt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %57) #10
  %528 = load ptr, ptr %527, align 8, !tbaa !5
  store ptr %528, ptr %58, align 8, !tbaa !5
  %529 = load ptr, ptr %58, align 8, !tbaa !5
  %530 = invoke noundef zeroext i1 @_ZN10Connection12getRecurrentEv(ptr noundef nonnull align 8 dereferenceable(41) %529)
          to label %531 unwind label %225

531:                                              ; preds = %526
  br i1 %530, label %532, label %547

532:                                              ; preds = %531
  %533 = load ptr, ptr %58, align 8, !tbaa !5
  %534 = invoke noundef ptr @_ZN10Connection14getInputNeuronEv(ptr noundef nonnull align 8 dereferenceable(41) %533)
          to label %535 unwind label %225

535:                                              ; preds = %532
  %536 = load i32, ptr %51, align 4, !tbaa !9
  %537 = add nsw i32 %536, 1
  %538 = load ptr, ptr %534, align 8, !tbaa !15
  %539 = getelementptr inbounds ptr, ptr %538, i64 5
  %540 = load ptr, ptr %539, align 8
  %541 = invoke noundef double %540(ptr noundef nonnull align 8 dereferenceable(80) %534, i32 noundef %537)
          to label %542 unwind label %225

542:                                              ; preds = %535
  store double %541, ptr %55, align 8, !tbaa !11
  br label %557

543:                                              ; preds = %512
  %544 = landingpad { ptr, i32 }
          cleanup
  %545 = extractvalue { ptr, i32 } %544, 0
  store ptr %545, ptr %23, align 8
  %546 = extractvalue { ptr, i32 } %544, 1
  store i32 %546, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 24, ptr %72) #10
  br label %795

547:                                              ; preds = %531
  %548 = load ptr, ptr %58, align 8, !tbaa !5
  %549 = invoke noundef ptr @_ZN10Connection14getInputNeuronEv(ptr noundef nonnull align 8 dereferenceable(41) %548)
          to label %550 unwind label %225

550:                                              ; preds = %547
  %551 = load i32, ptr %51, align 4, !tbaa !9
  %552 = load ptr, ptr %549, align 8, !tbaa !15
  %553 = getelementptr inbounds ptr, ptr %552, i64 5
  %554 = load ptr, ptr %553, align 8
  %555 = invoke noundef double %554(ptr noundef nonnull align 8 dereferenceable(80) %549, i32 noundef %551)
          to label %556 unwind label %225

556:                                              ; preds = %550
  store double %555, ptr %55, align 8, !tbaa !11
  br label %557

557:                                              ; preds = %556, %542
  %558 = load ptr, ptr %58, align 8, !tbaa !5
  %559 = load double, ptr %45, align 8, !tbaa !11
  %560 = fneg double %559
  %561 = load ptr, ptr %53, align 8, !tbaa !5
  %562 = load i32, ptr %54, align 4, !tbaa !9
  %563 = sext i32 %562 to i64
  %564 = getelementptr inbounds double, ptr %561, i64 %563
  %565 = load double, ptr %564, align 8, !tbaa !11
  %566 = fmul double %560, %565
  %567 = load double, ptr %55, align 8, !tbaa !11
  %568 = fmul double %566, %567
  invoke void @_ZN10Connection17addToModificationEd(ptr noundef nonnull align 8 dereferenceable(41) %558, double noundef %568)
          to label %569 unwind label %225

569:                                              ; preds = %557
  br label %570

570:                                              ; preds = %569
  %571 = call ptr @_ZN9__gnu_cxx17__normal_iteratorIPP10ConnectionSt6vectorIS2_SaIS2_EEEppEi(ptr noundef nonnull align 8 dereferenceable(8) %57, i32 noundef 0) #10
  %572 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %75, i32 0, i32 0
  store ptr %571, ptr %572, align 8
  br label %522, !llvm.loop !25

573:                                              ; preds = %522
  br label %574

574:                                              ; preds = %573
  %575 = load i32, ptr %54, align 4, !tbaa !9
  %576 = add nsw i32 %575, 1
  store i32 %576, ptr %54, align 4, !tbaa !9
  br label %508, !llvm.loop !26

577:                                              ; preds = %508
  br label %578

578:                                              ; preds = %577
  %579 = load i32, ptr %51, align 4, !tbaa !9
  %580 = add nsw i32 %579, 1
  store i32 %580, ptr %51, align 4, !tbaa !9
  br label %430, !llvm.loop !27

581:                                              ; preds = %430
  %582 = load i32, ptr %32, align 4, !tbaa !9
  %583 = sub nsw i32 %582, 1
  store i32 %583, ptr %54, align 4, !tbaa !9
  br label %584

584:                                              ; preds = %648, %581
  %585 = load i32, ptr %54, align 4, !tbaa !9
  %586 = load i32, ptr %34, align 4, !tbaa !9
  %587 = icmp sgt i32 %585, %586
  br i1 %587, label %588, label %651

588:                                              ; preds = %584
  %589 = load ptr, ptr %33, align 8, !tbaa !5
  %590 = load i32, ptr %54, align 4, !tbaa !9
  %591 = sext i32 %590 to i64
  %592 = getelementptr inbounds ptr, ptr %589, i64 %591
  %593 = load ptr, ptr %592, align 8, !tbaa !5
  %594 = load i32, ptr %51, align 4, !tbaa !9
  %595 = load ptr, ptr %593, align 8, !tbaa !15
  %596 = getelementptr inbounds ptr, ptr %595, i64 5
  %597 = load ptr, ptr %596, align 8
  %598 = invoke noundef double %597(ptr noundef nonnull align 8 dereferenceable(80) %593, i32 noundef %594)
          to label %599 unwind label %225

599:                                              ; preds = %588
  store double %598, ptr %55, align 8, !tbaa !11
  store double 0.000000e+00, ptr %50, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 24, ptr %76) #10
  %600 = load ptr, ptr %33, align 8, !tbaa !5
  %601 = load i32, ptr %54, align 4, !tbaa !9
  %602 = sext i32 %601 to i64
  %603 = getelementptr inbounds ptr, ptr %600, i64 %602
  %604 = load ptr, ptr %603, align 8, !tbaa !5
  invoke void @_ZN6Neuron20getOutputConnectionsEv(ptr dead_on_unwind writable sret(%"class.std::vector.8") align 8 %76, ptr noundef nonnull align 8 dereferenceable(80) %604)
          to label %605 unwind label %633

605:                                              ; preds = %599
  %606 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIP10ConnectionSaIS1_EEaSEOS3_(ptr noundef nonnull align 8 dereferenceable(24) %56, ptr noundef nonnull align 8 dereferenceable(24) %76) #10
  call void @_ZNSt6vectorIP10ConnectionSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %76) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %76) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %77) #10
  %607 = call ptr @_ZNSt6vectorIP10ConnectionSaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %56) #10
  %608 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %77, i32 0, i32 0
  store ptr %607, ptr %608, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %57, ptr align 8 %77, i64 8, i1 false), !tbaa.struct !18
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #10
  br label %609

609:                                              ; preds = %630, %605
  call void @llvm.lifetime.start.p0(i64 8, ptr %78) #10
  %610 = call ptr @_ZNSt6vectorIP10ConnectionSaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %56) #10
  %611 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %78, i32 0, i32 0
  store ptr %610, ptr %611, align 8
  %612 = call noundef zeroext i1 @_ZN9__gnu_cxxltIPP10ConnectionSt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %57, ptr noundef nonnull align 8 dereferenceable(8) %78) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #10
  br i1 %612, label %613, label %637

613:                                              ; preds = %609
  %614 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP10ConnectionSt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %57) #10
  %615 = load ptr, ptr %614, align 8, !tbaa !5
  store ptr %615, ptr %58, align 8, !tbaa !5
  %616 = load ptr, ptr %53, align 8, !tbaa !5
  %617 = load ptr, ptr %58, align 8, !tbaa !5
  %618 = invoke noundef ptr @_ZN10Connection14getOuputNeuronEv(ptr noundef nonnull align 8 dereferenceable(41) %617)
          to label %619 unwind label %225

619:                                              ; preds = %613
  %620 = invoke noundef i32 @_ZN6Neuron5getIDEv(ptr noundef nonnull align 8 dereferenceable(80) %618)
          to label %621 unwind label %225

621:                                              ; preds = %619
  %622 = sext i32 %620 to i64
  %623 = getelementptr inbounds double, ptr %616, i64 %622
  %624 = load double, ptr %623, align 8, !tbaa !11
  %625 = load ptr, ptr %58, align 8, !tbaa !5
  %626 = invoke noundef double @_ZN10Connection9getWeightEv(ptr noundef nonnull align 8 dereferenceable(41) %625)
          to label %627 unwind label %225

627:                                              ; preds = %621
  %628 = load double, ptr %50, align 8, !tbaa !11
  %629 = call double @llvm.fmuladd.f64(double %624, double %626, double %628)
  store double %629, ptr %50, align 8, !tbaa !11
  br label %630

630:                                              ; preds = %627
  %631 = call ptr @_ZN9__gnu_cxx17__normal_iteratorIPP10ConnectionSt6vectorIS2_SaIS2_EEEppEi(ptr noundef nonnull align 8 dereferenceable(8) %57, i32 noundef 0) #10
  %632 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %79, i32 0, i32 0
  store ptr %631, ptr %632, align 8
  br label %609, !llvm.loop !28

633:                                              ; preds = %599
  %634 = landingpad { ptr, i32 }
          cleanup
  %635 = extractvalue { ptr, i32 } %634, 0
  store ptr %635, ptr %23, align 8
  %636 = extractvalue { ptr, i32 } %634, 1
  store i32 %636, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 24, ptr %76) #10
  br label %795

637:                                              ; preds = %609
  %638 = load double, ptr %55, align 8, !tbaa !11
  %639 = load double, ptr %55, align 8, !tbaa !11
  %640 = fsub double 1.000000e+00, %639
  %641 = fmul double %638, %640
  %642 = load double, ptr %50, align 8, !tbaa !11
  %643 = fmul double %641, %642
  %644 = load ptr, ptr %53, align 8, !tbaa !5
  %645 = load i32, ptr %54, align 4, !tbaa !9
  %646 = sext i32 %645 to i64
  %647 = getelementptr inbounds double, ptr %644, i64 %646
  store double %643, ptr %647, align 8, !tbaa !11
  br label %648

648:                                              ; preds = %637
  %649 = load i32, ptr %54, align 4, !tbaa !9
  %650 = add nsw i32 %649, -1
  store i32 %650, ptr %54, align 4, !tbaa !9
  br label %584, !llvm.loop !29

651:                                              ; preds = %584
  %652 = load i32, ptr %34, align 4, !tbaa !9
  %653 = add nsw i32 %652, 1
  store i32 %653, ptr %54, align 4, !tbaa !9
  br label %654

654:                                              ; preds = %710, %651
  %655 = load i32, ptr %54, align 4, !tbaa !9
  %656 = load i32, ptr %32, align 4, !tbaa !9
  %657 = icmp slt i32 %655, %656
  br i1 %657, label %658, label %713

658:                                              ; preds = %654
  call void @llvm.lifetime.start.p0(i64 24, ptr %80) #10
  %659 = load ptr, ptr %33, align 8, !tbaa !5
  %660 = load i32, ptr %54, align 4, !tbaa !9
  %661 = sext i32 %660 to i64
  %662 = getelementptr inbounds ptr, ptr %659, i64 %661
  %663 = load ptr, ptr %662, align 8, !tbaa !5
  invoke void @_ZN6Neuron19getInputConnectionsEv(ptr dead_on_unwind writable sret(%"class.std::vector.8") align 8 %80, ptr noundef nonnull align 8 dereferenceable(80) %663)
          to label %664 unwind label %679

664:                                              ; preds = %658
  %665 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIP10ConnectionSaIS1_EEaSEOS3_(ptr noundef nonnull align 8 dereferenceable(24) %56, ptr noundef nonnull align 8 dereferenceable(24) %80) #10
  call void @_ZNSt6vectorIP10ConnectionSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %80) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %80) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %81) #10
  %666 = call ptr @_ZNSt6vectorIP10ConnectionSaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %56) #10
  %667 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %81, i32 0, i32 0
  store ptr %666, ptr %667, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %57, ptr align 8 %81, i64 8, i1 false), !tbaa.struct !18
  call void @llvm.lifetime.end.p0(i64 8, ptr %81) #10
  br label %668

668:                                              ; preds = %706, %664
  call void @llvm.lifetime.start.p0(i64 8, ptr %82) #10
  %669 = call ptr @_ZNSt6vectorIP10ConnectionSaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %56) #10
  %670 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %82, i32 0, i32 0
  store ptr %669, ptr %670, align 8
  %671 = call noundef zeroext i1 @_ZN9__gnu_cxxltIPP10ConnectionSt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %57, ptr noundef nonnull align 8 dereferenceable(8) %82) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %82) #10
  br i1 %671, label %672, label %709

672:                                              ; preds = %668
  %673 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP10ConnectionSt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %57) #10
  %674 = load ptr, ptr %673, align 8, !tbaa !5
  store ptr %674, ptr %58, align 8, !tbaa !5
  %675 = load ptr, ptr %58, align 8, !tbaa !5
  %676 = invoke noundef zeroext i1 @_ZN10Connection12getRecurrentEv(ptr noundef nonnull align 8 dereferenceable(41) %675)
          to label %677 unwind label %225

677:                                              ; preds = %672
  br i1 %676, label %678, label %683

678:                                              ; preds = %677
  store double 0.000000e+00, ptr %55, align 8, !tbaa !11
  br label %693

679:                                              ; preds = %658
  %680 = landingpad { ptr, i32 }
          cleanup
  %681 = extractvalue { ptr, i32 } %680, 0
  store ptr %681, ptr %23, align 8
  %682 = extractvalue { ptr, i32 } %680, 1
  store i32 %682, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 24, ptr %80) #10
  br label %795

683:                                              ; preds = %677
  %684 = load ptr, ptr %58, align 8, !tbaa !5
  %685 = invoke noundef ptr @_ZN10Connection14getInputNeuronEv(ptr noundef nonnull align 8 dereferenceable(41) %684)
          to label %686 unwind label %225

686:                                              ; preds = %683
  %687 = load i32, ptr %51, align 4, !tbaa !9
  %688 = load ptr, ptr %685, align 8, !tbaa !15
  %689 = getelementptr inbounds ptr, ptr %688, i64 5
  %690 = load ptr, ptr %689, align 8
  %691 = invoke noundef double %690(ptr noundef nonnull align 8 dereferenceable(80) %685, i32 noundef %687)
          to label %692 unwind label %225

692:                                              ; preds = %686
  store double %691, ptr %55, align 8, !tbaa !11
  br label %693

693:                                              ; preds = %692, %678
  %694 = load ptr, ptr %58, align 8, !tbaa !5
  %695 = load double, ptr %45, align 8, !tbaa !11
  %696 = fneg double %695
  %697 = load ptr, ptr %53, align 8, !tbaa !5
  %698 = load i32, ptr %54, align 4, !tbaa !9
  %699 = sext i32 %698 to i64
  %700 = getelementptr inbounds double, ptr %697, i64 %699
  %701 = load double, ptr %700, align 8, !tbaa !11
  %702 = fmul double %696, %701
  %703 = load double, ptr %55, align 8, !tbaa !11
  %704 = fmul double %702, %703
  invoke void @_ZN10Connection17addToModificationEd(ptr noundef nonnull align 8 dereferenceable(41) %694, double noundef %704)
          to label %705 unwind label %225

705:                                              ; preds = %693
  br label %706

706:                                              ; preds = %705
  %707 = call ptr @_ZN9__gnu_cxx17__normal_iteratorIPP10ConnectionSt6vectorIS2_SaIS2_EEEppEi(ptr noundef nonnull align 8 dereferenceable(8) %57, i32 noundef 0) #10
  %708 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %83, i32 0, i32 0
  store ptr %707, ptr %708, align 8
  br label %668, !llvm.loop !30

709:                                              ; preds = %668
  br label %710

710:                                              ; preds = %709
  %711 = load i32, ptr %54, align 4, !tbaa !9
  %712 = add nsw i32 %711, 1
  store i32 %712, ptr %54, align 4, !tbaa !9
  br label %654, !llvm.loop !31

713:                                              ; preds = %654
  call void @llvm.lifetime.start.p0(i64 24, ptr %84) #10
  %714 = load ptr, ptr %12, align 8, !tbaa !5
  invoke void @_ZN9NeuralNet14getConnectionsEv(ptr dead_on_unwind writable sret(%"class.std::vector.8") align 8 %84, ptr noundef nonnull align 8 dereferenceable(128) %714)
          to label %715 unwind label %731

715:                                              ; preds = %713
  %716 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIP10ConnectionSaIS1_EEaSEOS3_(ptr noundef nonnull align 8 dereferenceable(24) %56, ptr noundef nonnull align 8 dereferenceable(24) %84) #10
  call void @_ZNSt6vectorIP10ConnectionSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %84) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %84) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %85) #10
  %717 = call ptr @_ZNSt6vectorIP10ConnectionSaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %56) #10
  %718 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %85, i32 0, i32 0
  store ptr %717, ptr %718, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %57, ptr align 8 %85, i64 8, i1 false), !tbaa.struct !18
  call void @llvm.lifetime.end.p0(i64 8, ptr %85) #10
  br label %719

719:                                              ; preds = %728, %715
  call void @llvm.lifetime.start.p0(i64 8, ptr %86) #10
  %720 = call ptr @_ZNSt6vectorIP10ConnectionSaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %56) #10
  %721 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %86, i32 0, i32 0
  store ptr %720, ptr %721, align 8
  %722 = call noundef zeroext i1 @_ZN9__gnu_cxxltIPP10ConnectionSt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %57, ptr noundef nonnull align 8 dereferenceable(8) %86) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %86) #10
  br i1 %722, label %723, label %735

723:                                              ; preds = %719
  %724 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP10ConnectionSt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %57) #10
  %725 = load ptr, ptr %724, align 8, !tbaa !5
  store ptr %725, ptr %58, align 8, !tbaa !5
  %726 = load ptr, ptr %58, align 8, !tbaa !5
  invoke void @_ZN10Connection17applyModificationEv(ptr noundef nonnull align 8 dereferenceable(41) %726)
          to label %727 unwind label %225

727:                                              ; preds = %723
  br label %728

728:                                              ; preds = %727
  %729 = call ptr @_ZN9__gnu_cxx17__normal_iteratorIPP10ConnectionSt6vectorIS2_SaIS2_EEEppEi(ptr noundef nonnull align 8 dereferenceable(8) %57, i32 noundef 0) #10
  %730 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %87, i32 0, i32 0
  store ptr %729, ptr %730, align 8
  br label %719, !llvm.loop !32

731:                                              ; preds = %713
  %732 = landingpad { ptr, i32 }
          cleanup
  %733 = extractvalue { ptr, i32 } %732, 0
  store ptr %733, ptr %23, align 8
  %734 = extractvalue { ptr, i32 } %732, 1
  store i32 %734, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 24, ptr %84) #10
  br label %795

735:                                              ; preds = %719
  br label %736

736:                                              ; preds = %735
  %737 = load i32, ptr %44, align 4, !tbaa !9
  %738 = add nsw i32 %737, 1
  store i32 %738, ptr %44, align 4, !tbaa !9
  br label %182, !llvm.loop !33

739:                                              ; preds = %182
  %740 = load double, ptr %30, align 8, !tbaa !11
  %741 = load double, ptr %26, align 8, !tbaa !11
  %742 = fadd double %741, %740
  store double %742, ptr %26, align 8, !tbaa !11
  br label %743

743:                                              ; preds = %739
  %744 = load i32, ptr %42, align 4, !tbaa !9
  %745 = add nsw i32 %744, 1
  store i32 %745, ptr %42, align 4, !tbaa !9
  br label %150, !llvm.loop !34

746:                                              ; preds = %150
  %747 = load i32, ptr %59, align 4, !tbaa !9
  %748 = sitofp i32 %747 to double
  %749 = load double, ptr %26, align 8, !tbaa !11
  %750 = fdiv double %749, %748
  store double %750, ptr %26, align 8, !tbaa !11
  %751 = load ptr, ptr %12, align 8, !tbaa !5
  %752 = load ptr, ptr %13, align 8, !tbaa !5
  %753 = load i32, ptr %14, align 4, !tbaa !9
  %754 = load ptr, ptr %40, align 8, !tbaa !5
  %755 = invoke noundef double @_ZN4BPTT4testEP9NeuralNetPP4DataiPd(ptr noundef nonnull align 8 dereferenceable(8) %88, ptr noundef %751, ptr noundef %752, i32 noundef %753, ptr noundef %754)
          to label %756 unwind label %225

756:                                              ; preds = %746
  store double %755, ptr %27, align 8, !tbaa !11
  %757 = load ptr, ptr %12, align 8, !tbaa !5
  %758 = load ptr, ptr %40, align 8, !tbaa !5
  %759 = invoke noundef double @_ZN4BPTT4testEP9NeuralNetPP4DataiPd(ptr noundef nonnull align 8 dereferenceable(8) %88, ptr noundef %757, ptr noundef %16, i32 noundef 1, ptr noundef %758)
          to label %760 unwind label %225

760:                                              ; preds = %756
  store double %759, ptr %28, align 8, !tbaa !11
  %761 = load ptr, ptr %12, align 8, !tbaa !5
  %762 = load ptr, ptr %40, align 8, !tbaa !5
  %763 = invoke noundef double @_ZN4BPTT4testEP9NeuralNetPP4DataiPd(ptr noundef nonnull align 8 dereferenceable(8) %88, ptr noundef %761, ptr noundef %15, i32 noundef 1, ptr noundef %762)
          to label %764 unwind label %225

764:                                              ; preds = %760
  store double %763, ptr %29, align 8, !tbaa !11
  %765 = load ptr, ptr %21, align 8, !tbaa !5
  %766 = load i32, ptr %41, align 4, !tbaa !9
  %767 = load i32, ptr %17, align 4, !tbaa !9
  %768 = load double, ptr %26, align 8, !tbaa !11
  %769 = load double, ptr %45, align 8, !tbaa !11
  %770 = load ptr, ptr %12, align 8, !tbaa !5
  %771 = load double, ptr %27, align 8, !tbaa !11
  %772 = load double, ptr %28, align 8, !tbaa !11
  %773 = load double, ptr %29, align 8, !tbaa !11
  invoke void @_ZN4Util8showDataEiiddP9NeuralNetddd(ptr noundef nonnull align 8 dereferenceable(104) %765, i32 noundef %766, i32 noundef %767, double noundef %768, double noundef %769, ptr noundef %770, double noundef %771, double noundef %772, double noundef %773)
          to label %774 unwind label %225

774:                                              ; preds = %764
  br label %775

775:                                              ; preds = %774
  %776 = load i32, ptr %41, align 4, !tbaa !9
  %777 = add nsw i32 %776, 1
  store i32 %777, ptr %41, align 4, !tbaa !9
  br label %136, !llvm.loop !35

778:                                              ; preds = %136
  %779 = load ptr, ptr %21, align 8, !tbaa !5
  %780 = icmp eq ptr %779, null
  br i1 %780, label %785, label %781

781:                                              ; preds = %778
  %782 = load ptr, ptr %779, align 8, !tbaa !15
  %783 = getelementptr inbounds ptr, ptr %782, i64 1
  %784 = load ptr, ptr %783, align 8
  call void %784(ptr noundef nonnull align 8 dereferenceable(104) %779) #10
  br label %785

785:                                              ; preds = %781, %778
  %786 = load ptr, ptr %40, align 8, !tbaa !5
  %787 = icmp eq ptr %786, null
  br i1 %787, label %789, label %788

788:                                              ; preds = %785
  call void @_ZdlPvm(ptr noundef %786, i64 noundef 8) #12
  br label %789

789:                                              ; preds = %788, %785
  %790 = load ptr, ptr %53, align 8, !tbaa !5
  %791 = icmp eq ptr %790, null
  br i1 %791, label %793, label %792

792:                                              ; preds = %789
  call void @_ZdlPvm(ptr noundef %790, i64 noundef 8) #12
  br label %793

793:                                              ; preds = %792, %789
  %794 = load double, ptr %26, align 8, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #10
  call void @_ZNSt6vectorIP10ConnectionSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %56) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %56) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #10
  ret double %794

795:                                              ; preds = %731, %679, %633, %543, %487, %396, %338, %225
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #10
  call void @_ZNSt6vectorIP10ConnectionSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %56) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %56) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #10
  br label %796

796:                                              ; preds = %795, %224
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #10
  br label %797

797:                                              ; preds = %796
  %798 = load ptr, ptr %23, align 8
  %799 = load i32, ptr %24, align 4
  %800 = insertvalue { ptr, i32 } poison, ptr %798, 0
  %801 = insertvalue { ptr, i32 } %800, i32 %799, 1
  resume { ptr, i32 } %801
}

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

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

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

declare i32 @__gxx_personality_v0(...)

declare void @_ZN4UtilC1ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(104), ptr noundef) unnamed_addr #4

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

declare void @_ZN4Util13startLearningEv(ptr noundef nonnull align 8 dereferenceable(104)) #4

declare noundef i32 @_ZN9NeuralNet8getDelayEv(ptr noundef nonnull align 8 dereferenceable(128)) #4

declare noundef i32 @_ZN9NeuralNet18getNumberOfNeuronsEv(ptr noundef nonnull align 8 dereferenceable(128)) #4

declare noundef ptr @_ZN9NeuralNet10getNeuronsEv(ptr noundef nonnull align 8 dereferenceable(128)) #4

declare noundef i32 @_ZN9NeuralNet12getInputSizeEv(ptr noundef nonnull align 8 dereferenceable(128)) #4

declare noundef i32 @_ZN9NeuralNet13getOutputSizeEv(ptr noundef nonnull align 8 dereferenceable(128)) #4

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare { i64, i1 } @llvm.umul.with.overflow.i64(i64, i64) #6

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

; Function Attrs: nounwind
declare double @log(double noundef) #7

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

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

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

declare void @_ZN9NeuralNet10cleanStateEv(ptr noundef nonnull align 8 dereferenceable(128)) #4

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

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

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

declare void @_ZN9NeuralNet9getOutputEPdS0_(ptr noundef nonnull align 8 dereferenceable(128), ptr noundef, ptr noundef) #4

declare void @_ZN6Neuron20getOutputConnectionsEv(ptr dead_on_unwind writable sret(%"class.std::vector.8") align 8, ptr noundef nonnull align 8 dereferenceable(80)) #4

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

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

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

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

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

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

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

declare noundef zeroext i1 @_ZN10Connection12getRecurrentEv(ptr noundef nonnull align 8 dereferenceable(41)) #4

declare noundef ptr @_ZN10Connection14getOuputNeuronEv(ptr noundef nonnull align 8 dereferenceable(41)) #4

declare noundef i32 @_ZN6Neuron5getIDEv(ptr noundef nonnull align 8 dereferenceable(80)) #4

declare noundef double @_ZN10Connection9getWeightEv(ptr noundef nonnull align 8 dereferenceable(41)) #4

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

declare void @_ZN6Neuron19getInputConnectionsEv(ptr dead_on_unwind writable sret(%"class.std::vector.8") align 8, ptr noundef nonnull align 8 dereferenceable(80)) #4

declare noundef ptr @_ZN10Connection14getInputNeuronEv(ptr noundef nonnull align 8 dereferenceable(41)) #4

declare void @_ZN10Connection17addToModificationEd(ptr noundef nonnull align 8 dereferenceable(41), double noundef) #4

declare void @_ZN9NeuralNet14getConnectionsEv(ptr dead_on_unwind writable sret(%"class.std::vector.8") align 8, ptr noundef nonnull align 8 dereferenceable(128)) #4

declare void @_ZN10Connection17applyModificationEv(ptr noundef nonnull align 8 dereferenceable(41)) #4

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

declare void @_ZN4Util8showDataEiiddP9NeuralNetddd(ptr noundef nonnull align 8 dereferenceable(104), i32 noundef, i32 noundef, double noundef, double noundef, ptr noundef, double noundef, double noundef, double noundef) #4

attributes #0 = { nobuiltin nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { nobuiltin allocsize(0) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { 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 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #7 = { 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 #8 = { 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 #9 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #10 = { nounwind }
attributes #11 = { builtin allocsize(0) }
attributes #12 = { builtin 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 = !{!"double", !7, i64 0}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = !{!16, !16, i64 0}
!16 = !{!"vtable pointer", !8, i64 0}
!17 = distinct !{!17, !14}
!18 = !{i64 0, i64 8, !5}
!19 = distinct !{!19, !14}
!20 = distinct !{!20, !14}
!21 = distinct !{!21, !14}
!22 = distinct !{!22, !14}
!23 = distinct !{!23, !14}
!24 = distinct !{!24, !14}
!25 = distinct !{!25, !14}
!26 = distinct !{!26, !14}
!27 = distinct !{!27, !14}
!28 = distinct !{!28, !14}
!29 = distinct !{!29, !14}
!30 = distinct !{!30, !14}
!31 = distinct !{!31, !14}
!32 = distinct !{!32, !14}
!33 = distinct !{!33, !14}
!34 = distinct !{!34, !14}
!35 = distinct !{!35, !14}


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

%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.std::vector.8" = type { %"struct.std::_Vector_base.9" }
%"struct.std::_Vector_base.9" = type { %"struct.std::_Vector_base<Connection *, std::allocator<Connection *>>::_Vector_impl" }
%"struct.std::_Vector_base<Connection *, std::allocator<Connection *>>::_Vector_impl" = type { %"struct.std::_Vector_base<Connection *, std::allocator<Connection *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<Connection *, std::allocator<Connection *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.__gnu_cxx::__normal_iterator" = type { ptr }

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

; Function Attrs: mustprogress uwtable
define dso_local noundef double @_ZN4BPTT5learnEP9NeuralNetPP4DataiS3_S3_iddNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef %1, ptr noundef %2, i32 noundef %3, ptr noundef %4, ptr noundef %5, i32 noundef %6, double noundef %7, double noundef %8, ptr noundef %9) local_unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca %"class.std::__cxx11::basic_string", align 8
  %14 = alloca %"class.std::vector.8", align 8
  %15 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %16 = alloca %"class.std::vector.8", align 8
  %17 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %18 = alloca %"class.std::vector.8", align 8
  %19 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %20 = alloca %"class.std::vector.8", align 8
  %21 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %22 = alloca %"class.std::vector.8", align 8
  %23 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %24 = alloca %"class.std::vector.8", align 8
  %25 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  store ptr %4, ptr %11, align 8, !tbaa !5
  store ptr %5, ptr %12, align 8, !tbaa !5
  %26 = tail call noalias noundef nonnull dereferenceable(104) ptr @_Znwm(i64 noundef 104) #10
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %13, ptr noundef nonnull align 8 dereferenceable(32) %9)
          to label %27 unwind label %273

27:                                               ; preds = %10
  invoke void @_ZN4UtilC1ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(104) %26, ptr noundef nonnull %13)
          to label %28 unwind label %275

28:                                               ; preds = %27
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %13) #11
  call void @_ZN4Util13startLearningEv(ptr noundef nonnull align 8 dereferenceable(104) %26)
  %29 = call noundef i32 @_ZN9NeuralNet8getDelayEv(ptr noundef nonnull align 8 dereferenceable(128) %1)
  %30 = call noundef i32 @_ZN9NeuralNet18getNumberOfNeuronsEv(ptr noundef nonnull align 8 dereferenceable(128) %1)
  %31 = call noundef ptr @_ZN9NeuralNet10getNeuronsEv(ptr noundef nonnull align 8 dereferenceable(128) %1)
  %32 = call noundef i32 @_ZN9NeuralNet12getInputSizeEv(ptr noundef nonnull align 8 dereferenceable(128) %1)
  %33 = call noundef i32 @_ZN9NeuralNet13getOutputSizeEv(ptr noundef nonnull align 8 dereferenceable(128) %1)
  %34 = zext nneg i32 %33 to i64
  %35 = icmp slt i32 %33, 0
  %36 = shl nuw nsw i64 %34, 3
  %37 = select i1 %35, i64 -1, i64 %36
  %38 = call noalias noundef nonnull ptr @_Znam(i64 noundef %37) #10
  %39 = add nsw i32 %6, 1
  %40 = sitofp i32 %39 to double
  %41 = call double @log(double noundef %40) #11
  %42 = fadd double %41, 1.000000e+00
  %43 = fneg double %7
  %44 = call double @llvm.fmuladd.f64(double %8, double %42, double %43)
  %45 = fadd double %42, -1.000000e+00
  %46 = fdiv double %44, %45
  %47 = fsub double %7, %46
  %48 = sub i32 %30, %33
  %49 = zext i32 %30 to i64
  %50 = icmp slt i32 %30, 0
  %51 = shl nuw nsw i64 %49, 3
  %52 = select i1 %50, i64 -1, i64 %51
  %53 = call noalias noundef nonnull ptr @_Znam(i64 noundef %52) #10
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %14) #11
  call void @_ZNSt6vectorIP10ConnectionSaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %14) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #11
  call void @_ZN9__gnu_cxx17__normal_iteratorIPP10ConnectionSt6vectorIS2_SaIS2_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %15) #11
  %54 = icmp sgt i32 %6, 0
  br i1 %54, label %.lr.ph391, label %._crit_edge392

.lr.ph391:                                        ; preds = %28
  %55 = icmp sgt i32 %3, 0
  %56 = icmp sgt i32 %30, 0
  %57 = icmp sgt i32 %33, 0
  %58 = sitofp i32 %33 to double
  %.2238347 = add i32 %48, -1
  %59 = icmp sgt i32 %.2238347, %32
  %60 = add i32 %32, 1
  %61 = icmp slt i32 %60, %30
  %.6363 = add i32 %30, -1
  %62 = icmp sgt i32 %.6363, %32
  br i1 %55, label %.lr.ph385.us.preheader, label %.lr.ph391.split

.lr.ph385.us.preheader:                           ; preds = %.lr.ph391
  %63 = sext i32 %48 to i64
  %64 = sext i32 %30 to i64
  %65 = sext i32 %.2238347 to i64
  %66 = sext i32 %32 to i64
  %67 = sext i32 %60 to i64
  %68 = sext i32 %.6363 to i64
  %wide.trip.count475 = zext nneg i32 %3 to i64
  br label %.lr.ph385.us

.lr.ph385.us:                                     ; preds = %.lr.ph385.us.preheader, %76
  %.0225389.us = phi i32 [ %69, %76 ], [ 0, %.lr.ph385.us.preheader ]
  %69 = add nuw nsw i32 %.0225389.us, 1
  %70 = uitofp nneg i32 %69 to double
  %71 = call double @log(double noundef %70) #11
  %72 = fadd double %71, 1.000000e+00
  %73 = fdiv double %47, %72
  %74 = fadd double %46, %73
  %75 = fneg double %74
  br label %82

76:                                               ; preds = %81
  %exitcond477.not = icmp eq i32 %69, %6
  br i1 %exitcond477.not, label %._crit_edge392, label %.lr.ph385.us, !llvm.loop !9

77:                                               ; preds = %._crit_edge386.us
  %78 = invoke noundef double @_ZN4BPTT4testEP9NeuralNetPP4DataiPd(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef nonnull %1, ptr noundef nonnull %12, i32 noundef 1, ptr noundef nonnull %38)
          to label %79 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.split.us

79:                                               ; preds = %77
  %80 = invoke noundef double @_ZN4BPTT4testEP9NeuralNetPP4DataiPd(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef nonnull %1, ptr noundef nonnull %11, i32 noundef 1, ptr noundef nonnull %38)
          to label %81 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.split.us

81:                                               ; preds = %79
  invoke void @_ZN4Util8showDataEiiddP9NeuralNetddd(ptr noundef nonnull align 8 dereferenceable(104) %26, i32 noundef %.0225389.us, i32 noundef %6, double noundef %258, double noundef %74, ptr noundef nonnull %1, double noundef %259, double noundef %78, double noundef %80)
          to label %76 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.split.us, !llvm.loop !9

82:                                               ; preds = %.lr.ph385.us, %._crit_edge379.us
  %indvars.iv472 = phi i64 [ 0, %.lr.ph385.us ], [ %indvars.iv.next473, %._crit_edge379.us ]
  %.1223383.us = phi double [ 0.000000e+00, %.lr.ph385.us ], [ %93, %._crit_edge379.us ]
  %.0232381.us = phi i32 [ 0, %.lr.ph385.us ], [ %91, %._crit_edge379.us ]
  invoke void @_ZN9NeuralNet10cleanStateEv(ptr noundef nonnull align 8 dereferenceable(128) %1)
          to label %83 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split.us

83:                                               ; preds = %82
  %84 = getelementptr inbounds ptr, ptr %2, i64 %indvars.iv472
  %85 = load ptr, ptr %84, align 8, !tbaa !5
  %86 = call noundef ptr @_ZN4Data12getDataInputEv(ptr noundef nonnull align 8 dereferenceable(36) %85)
  %87 = load ptr, ptr %84, align 8, !tbaa !5
  %88 = call noundef ptr @_ZN4Data13getDataOutputEv(ptr noundef nonnull align 8 dereferenceable(36) %87)
  %89 = load ptr, ptr %84, align 8, !tbaa !5
  %90 = call noundef i32 @_ZN4Data15getNumberOfDataEv(ptr noundef nonnull align 8 dereferenceable(36) %89)
  %91 = add nsw i32 %90, %.0232381.us
  %92 = icmp sgt i32 %90, 0
  br i1 %92, label %.lr.ph378.us.preheader, label %._crit_edge379.us

.lr.ph378.us.preheader:                           ; preds = %83
  %wide.trip.count = zext nneg i32 %90 to i64
  br label %.lr.ph378.us

._crit_edge379.us:                                ; preds = %._crit_edge374.us, %83
  %.0224.lcssa.us = phi double [ 0.000000e+00, %83 ], [ %99, %._crit_edge374.us ]
  %93 = fadd double %.1223383.us, %.0224.lcssa.us
  %indvars.iv.next473 = add nuw nsw i64 %indvars.iv472, 1
  %exitcond476.not = icmp eq i64 %indvars.iv.next473, %wide.trip.count475
  br i1 %exitcond476.not, label %._crit_edge386.us, label %82, !llvm.loop !11

.lr.ph378.us:                                     ; preds = %.lr.ph378.us.preheader, %._crit_edge374.us
  %indvars.iv468 = phi i64 [ 0, %.lr.ph378.us.preheader ], [ %indvars.iv.next469, %._crit_edge374.us ]
  %.0224376.us = phi double [ 0.000000e+00, %.lr.ph378.us.preheader ], [ %99, %._crit_edge374.us ]
  %94 = getelementptr inbounds ptr, ptr %86, i64 %indvars.iv468
  %95 = load ptr, ptr %94, align 8, !tbaa !5
  %96 = getelementptr inbounds ptr, ptr %88, i64 %indvars.iv468
  %97 = load ptr, ptr %96, align 8, !tbaa !5
  invoke void @_ZN9NeuralNet9getOutputEPdS0_(ptr noundef nonnull align 8 dereferenceable(128) %1, ptr noundef %95, ptr noundef nonnull %38)
          to label %.preheader269.us unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split.us

._crit_edge.us:                                   ; preds = %243, %.preheader265.us
  %.0228.lcssa.us = phi double [ 0.000000e+00, %.preheader265.us ], [ %248, %243 ]
  %98 = fdiv double %.0228.lcssa.us, %58
  %99 = fadd double %.0224376.us, %98
  br i1 %59, label %.lr.ph350.us, label %._crit_edge351.us

._crit_edge351.us:                                ; preds = %._crit_edge345.us, %._crit_edge.us
  br i1 %61, label %.lr.ph357.us, label %.preheader259.us

._crit_edge371.us:                                ; preds = %._crit_edge368.us, %.preheader.us
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %24) #11
  invoke void @_ZN9NeuralNet14getConnectionsEv(ptr dead_on_unwind nonnull writable sret(%"class.std::vector.8") align 8 %24, ptr noundef nonnull align 8 dereferenceable(128) %1)
          to label %100 unwind label %.split.us

100:                                              ; preds = %._crit_edge371.us
  %101 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIP10ConnectionSaIS1_EEaSEOS3_(ptr noundef nonnull align 8 dereferenceable(24) %14, ptr noundef nonnull align 8 dereferenceable(24) %24) #11
  call void @_ZNSt6vectorIP10ConnectionSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %24) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %24) #11
  %102 = call ptr @_ZNSt6vectorIP10ConnectionSaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %14) #11
  store ptr %102, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %25) #11
  %103 = call ptr @_ZNSt6vectorIP10ConnectionSaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %14) #11
  store ptr %103, ptr %25, align 8
  %104 = call noundef zeroext i1 @_ZN9__gnu_cxxltIPP10ConnectionSt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %15, ptr noundef nonnull align 8 dereferenceable(8) %25) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #11
  br i1 %104, label %.lr.ph373.us, label %._crit_edge374.us

._crit_edge374.us:                                ; preds = %107, %100
  %indvars.iv.next469 = add nuw nsw i64 %indvars.iv468, 1
  %exitcond471.not = icmp eq i64 %indvars.iv.next469, %wide.trip.count
  br i1 %exitcond471.not, label %._crit_edge379.us, label %.lr.ph378.us, !llvm.loop !12

.lr.ph373.us:                                     ; preds = %100, %107
  %105 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP10ConnectionSt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %15) #11
  %106 = load ptr, ptr %105, align 8, !tbaa !5
  invoke void @_ZN10Connection17applyModificationEv(ptr noundef nonnull align 8 dereferenceable(41) %106)
          to label %107 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split.us

107:                                              ; preds = %.lr.ph373.us
  %108 = call ptr @_ZN9__gnu_cxx17__normal_iteratorIPP10ConnectionSt6vectorIS2_SaIS2_EEEppEi(ptr noundef nonnull align 8 dereferenceable(8) %15, i32 noundef 0) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %25) #11
  %109 = call ptr @_ZNSt6vectorIP10ConnectionSaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %14) #11
  store ptr %109, ptr %25, align 8
  %110 = call noundef zeroext i1 @_ZN9__gnu_cxxltIPP10ConnectionSt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %15, ptr noundef nonnull align 8 dereferenceable(8) %25) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #11
  br i1 %110, label %.lr.ph373.us, label %._crit_edge374.us, !llvm.loop !13

.lr.ph370.us:                                     ; preds = %.preheader.us, %._crit_edge368.us
  %indvars.iv463 = phi i64 [ %indvars.iv.next464, %._crit_edge368.us ], [ %67, %.preheader.us ]
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %22) #11
  %111 = getelementptr inbounds ptr, ptr %31, i64 %indvars.iv463
  %112 = load ptr, ptr %111, align 8, !tbaa !5
  invoke void @_ZN6Neuron19getInputConnectionsEv(ptr dead_on_unwind nonnull writable sret(%"class.std::vector.8") align 8 %22, ptr noundef nonnull align 8 dereferenceable(80) %112)
          to label %113 unwind label %.split400.us

113:                                              ; preds = %.lr.ph370.us
  %114 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIP10ConnectionSaIS1_EEaSEOS3_(ptr noundef nonnull align 8 dereferenceable(24) %14, ptr noundef nonnull align 8 dereferenceable(24) %22) #11
  call void @_ZNSt6vectorIP10ConnectionSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %22) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %22) #11
  %115 = call ptr @_ZNSt6vectorIP10ConnectionSaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %14) #11
  store ptr %115, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %23) #11
  %116 = call ptr @_ZNSt6vectorIP10ConnectionSaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %14) #11
  store ptr %116, ptr %23, align 8
  %117 = call noundef zeroext i1 @_ZN9__gnu_cxxltIPP10ConnectionSt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %15, ptr noundef nonnull align 8 dereferenceable(8) %23) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #11
  br i1 %117, label %.lr.ph367.us, label %._crit_edge368.us

._crit_edge368.us:                                ; preds = %134, %113
  %indvars.iv.next464 = add nsw i64 %indvars.iv463, 1
  %lftr.wideiv466 = trunc i64 %indvars.iv.next464 to i32
  %exitcond467.not = icmp eq i32 %30, %lftr.wideiv466
  br i1 %exitcond467.not, label %._crit_edge371.us, label %.lr.ph370.us, !llvm.loop !14

118:                                              ; preds = %.lr.ph367.us, %134
  %119 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP10ConnectionSt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %15) #11
  %120 = load ptr, ptr %119, align 8, !tbaa !5
  %121 = invoke noundef zeroext i1 @_ZN10Connection12getRecurrentEv(ptr noundef nonnull align 8 dereferenceable(41) %120)
          to label %122 unwind label %.loopexit.split.us

122:                                              ; preds = %118
  br i1 %121, label %130, label %123

123:                                              ; preds = %122
  %124 = invoke noundef ptr @_ZN10Connection14getInputNeuronEv(ptr noundef nonnull align 8 dereferenceable(41) %120)
          to label %125 unwind label %.loopexit.split.us

125:                                              ; preds = %123
  %126 = load ptr, ptr %124, align 8, !tbaa !15
  %127 = getelementptr inbounds i8, ptr %126, i64 40
  %128 = load ptr, ptr %127, align 8
  %129 = invoke noundef double %128(ptr noundef nonnull align 8 dereferenceable(80) %124, i32 noundef 1)
          to label %130 unwind label %.loopexit.split.us

130:                                              ; preds = %125, %122
  %.2235.us = phi double [ 0.000000e+00, %122 ], [ %129, %125 ]
  %131 = load double, ptr %256, align 8, !tbaa !17
  %132 = fmul double %131, %75
  %133 = fmul double %.2235.us, %132
  invoke void @_ZN10Connection17addToModificationEd(ptr noundef nonnull align 8 dereferenceable(41) %120, double noundef %133)
          to label %134 unwind label %.loopexit.split.us

134:                                              ; preds = %130
  %135 = call ptr @_ZN9__gnu_cxx17__normal_iteratorIPP10ConnectionSt6vectorIS2_SaIS2_EEEppEi(ptr noundef nonnull align 8 dereferenceable(8) %15, i32 noundef 0) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %23) #11
  %136 = call ptr @_ZNSt6vectorIP10ConnectionSaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %14) #11
  store ptr %136, ptr %23, align 8
  %137 = call noundef zeroext i1 @_ZN9__gnu_cxxltIPP10ConnectionSt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %15, ptr noundef nonnull align 8 dereferenceable(8) %23) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #11
  br i1 %137, label %118, label %._crit_edge368.us, !llvm.loop !19

.lr.ph365.us:                                     ; preds = %.preheader259.us, %._crit_edge361.us
  %indvars.iv460 = phi i64 [ %indvars.iv.next461, %._crit_edge361.us ], [ %68, %.preheader259.us ]
  %138 = getelementptr inbounds ptr, ptr %31, i64 %indvars.iv460
  %139 = load ptr, ptr %138, align 8, !tbaa !5
  %140 = load ptr, ptr %139, align 8, !tbaa !15
  %141 = getelementptr inbounds i8, ptr %140, i64 40
  %142 = load ptr, ptr %141, align 8
  %143 = invoke noundef double %142(ptr noundef nonnull align 8 dereferenceable(80) %139, i32 noundef 1)
          to label %144 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split.us

144:                                              ; preds = %.lr.ph365.us
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %20) #11
  %145 = load ptr, ptr %138, align 8, !tbaa !5
  invoke void @_ZN6Neuron20getOutputConnectionsEv(ptr dead_on_unwind nonnull writable sret(%"class.std::vector.8") align 8 %20, ptr noundef nonnull align 8 dereferenceable(80) %145)
          to label %146 unwind label %.split405.us

146:                                              ; preds = %144
  %147 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIP10ConnectionSaIS1_EEaSEOS3_(ptr noundef nonnull align 8 dereferenceable(24) %14, ptr noundef nonnull align 8 dereferenceable(24) %20) #11
  call void @_ZNSt6vectorIP10ConnectionSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %20) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %20) #11
  %148 = call ptr @_ZNSt6vectorIP10ConnectionSaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %14) #11
  store ptr %148, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %21) #11
  %149 = call ptr @_ZNSt6vectorIP10ConnectionSaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %14) #11
  store ptr %149, ptr %21, align 8
  %150 = call noundef zeroext i1 @_ZN9__gnu_cxxltIPP10ConnectionSt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %15, ptr noundef nonnull align 8 dereferenceable(8) %21) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #11
  br i1 %150, label %.lr.ph360.us, label %._crit_edge361.us

._crit_edge361.us:                                ; preds = %166, %146
  %.3.lcssa.us = phi double [ 0.000000e+00, %146 ], [ %167, %166 ]
  %151 = fsub double 1.000000e+00, %143
  %152 = fmul double %143, %151
  %153 = fmul double %152, %.3.lcssa.us
  %154 = getelementptr inbounds double, ptr %53, i64 %indvars.iv460
  store double %153, ptr %154, align 8, !tbaa !17
  %indvars.iv.next461 = add nsw i64 %indvars.iv460, -1
  %155 = icmp sgt i64 %indvars.iv.next461, %66
  br i1 %155, label %.lr.ph365.us, label %.preheader.us, !llvm.loop !20

.lr.ph360.us:                                     ; preds = %146, %166
  %.3358.us = phi double [ %167, %166 ], [ 0.000000e+00, %146 ]
  %156 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP10ConnectionSt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %15) #11
  %157 = load ptr, ptr %156, align 8, !tbaa !5
  %158 = invoke noundef ptr @_ZN10Connection14getOuputNeuronEv(ptr noundef nonnull align 8 dereferenceable(41) %157)
          to label %159 unwind label %.loopexit.split-lp.loopexit.split.us

159:                                              ; preds = %.lr.ph360.us
  %160 = invoke noundef i32 @_ZN6Neuron5getIDEv(ptr noundef nonnull align 8 dereferenceable(80) %158)
          to label %161 unwind label %.loopexit.split-lp.loopexit.split.us

161:                                              ; preds = %159
  %162 = sext i32 %160 to i64
  %163 = getelementptr inbounds double, ptr %53, i64 %162
  %164 = load double, ptr %163, align 8, !tbaa !17
  %165 = invoke noundef double @_ZN10Connection9getWeightEv(ptr noundef nonnull align 8 dereferenceable(41) %157)
          to label %166 unwind label %.loopexit.split-lp.loopexit.split.us

166:                                              ; preds = %161
  %167 = call double @llvm.fmuladd.f64(double %164, double %165, double %.3358.us)
  %168 = call ptr @_ZN9__gnu_cxx17__normal_iteratorIPP10ConnectionSt6vectorIS2_SaIS2_EEEppEi(ptr noundef nonnull align 8 dereferenceable(8) %15, i32 noundef 0) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %21) #11
  %169 = call ptr @_ZNSt6vectorIP10ConnectionSaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %14) #11
  store ptr %169, ptr %21, align 8
  %170 = call noundef zeroext i1 @_ZN9__gnu_cxxltIPP10ConnectionSt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %15, ptr noundef nonnull align 8 dereferenceable(8) %21) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #11
  br i1 %170, label %.lr.ph360.us, label %._crit_edge361.us, !llvm.loop !21

.lr.ph357.us:                                     ; preds = %._crit_edge351.us, %._crit_edge354.us
  %indvars.iv456 = phi i64 [ %indvars.iv.next457, %._crit_edge354.us ], [ %67, %._crit_edge351.us ]
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %18) #11
  %171 = getelementptr inbounds ptr, ptr %31, i64 %indvars.iv456
  %172 = load ptr, ptr %171, align 8, !tbaa !5
  invoke void @_ZN6Neuron19getInputConnectionsEv(ptr dead_on_unwind nonnull writable sret(%"class.std::vector.8") align 8 %18, ptr noundef nonnull align 8 dereferenceable(80) %172)
          to label %173 unwind label %.split409.us

173:                                              ; preds = %.lr.ph357.us
  %174 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIP10ConnectionSaIS1_EEaSEOS3_(ptr noundef nonnull align 8 dereferenceable(24) %14, ptr noundef nonnull align 8 dereferenceable(24) %18) #11
  call void @_ZNSt6vectorIP10ConnectionSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %18) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %18) #11
  %175 = call ptr @_ZNSt6vectorIP10ConnectionSaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %14) #11
  store ptr %175, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %19) #11
  %176 = call ptr @_ZNSt6vectorIP10ConnectionSaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %14) #11
  store ptr %176, ptr %19, align 8
  %177 = call noundef zeroext i1 @_ZN9__gnu_cxxltIPP10ConnectionSt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %15, ptr noundef nonnull align 8 dereferenceable(8) %19) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #11
  br i1 %177, label %.lr.ph353.us, label %._crit_edge354.us

._crit_edge354.us:                                ; preds = %196, %173
  %indvars.iv.next457 = add nsw i64 %indvars.iv456, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next457 to i32
  %exitcond459.not = icmp eq i32 %30, %lftr.wideiv
  br i1 %exitcond459.not, label %.preheader259.us, label %.lr.ph357.us, !llvm.loop !22

178:                                              ; preds = %.lr.ph353.us, %196
  %179 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP10ConnectionSt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %15) #11
  %180 = load ptr, ptr %179, align 8, !tbaa !5
  %181 = invoke noundef zeroext i1 @_ZN10Connection12getRecurrentEv(ptr noundef nonnull align 8 dereferenceable(41) %180)
          to label %182 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split.us

182:                                              ; preds = %178
  br i1 %181, label %185, label %183

183:                                              ; preds = %182
  %184 = invoke noundef ptr @_ZN10Connection14getInputNeuronEv(ptr noundef nonnull align 8 dereferenceable(41) %180)
          to label %.invoke unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split.us

185:                                              ; preds = %182
  %186 = invoke noundef ptr @_ZN10Connection14getInputNeuronEv(ptr noundef nonnull align 8 dereferenceable(41) %180)
          to label %.invoke unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split.us

.invoke:                                          ; preds = %185, %183
  %.sink = phi ptr [ %184, %183 ], [ %186, %185 ]
  %187 = phi i32 [ 0, %183 ], [ 1, %185 ]
  %188 = load ptr, ptr %.sink, align 8, !tbaa !15
  %189 = getelementptr inbounds i8, ptr %188, i64 40
  %190 = load ptr, ptr %189, align 8
  %191 = invoke noundef double %190(ptr noundef nonnull align 8 dereferenceable(80) %.sink, i32 noundef %187)
          to label %192 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split.us

192:                                              ; preds = %.invoke
  %193 = load double, ptr %255, align 8, !tbaa !17
  %194 = fmul double %193, %75
  %195 = fmul double %191, %194
  invoke void @_ZN10Connection17addToModificationEd(ptr noundef nonnull align 8 dereferenceable(41) %180, double noundef %195)
          to label %196 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split.us

196:                                              ; preds = %192
  %197 = call ptr @_ZN9__gnu_cxx17__normal_iteratorIPP10ConnectionSt6vectorIS2_SaIS2_EEEppEi(ptr noundef nonnull align 8 dereferenceable(8) %15, i32 noundef 0) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %19) #11
  %198 = call ptr @_ZNSt6vectorIP10ConnectionSaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %14) #11
  store ptr %198, ptr %19, align 8
  %199 = call noundef zeroext i1 @_ZN9__gnu_cxxltIPP10ConnectionSt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %15, ptr noundef nonnull align 8 dereferenceable(8) %19) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #11
  br i1 %199, label %178, label %._crit_edge354.us, !llvm.loop !23

.lr.ph350.us:                                     ; preds = %._crit_edge.us, %._crit_edge345.us
  %indvars.iv453 = phi i64 [ %indvars.iv.next454, %._crit_edge345.us ], [ %65, %._crit_edge.us ]
  %200 = getelementptr inbounds ptr, ptr %31, i64 %indvars.iv453
  %201 = load ptr, ptr %200, align 8, !tbaa !5
  %202 = load ptr, ptr %201, align 8, !tbaa !15
  %203 = getelementptr inbounds i8, ptr %202, i64 40
  %204 = load ptr, ptr %203, align 8
  %205 = invoke noundef double %204(ptr noundef nonnull align 8 dereferenceable(80) %201, i32 noundef 0)
          to label %206 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split.us

206:                                              ; preds = %.lr.ph350.us
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %16) #11
  %207 = load ptr, ptr %200, align 8, !tbaa !5
  invoke void @_ZN6Neuron20getOutputConnectionsEv(ptr dead_on_unwind nonnull writable sret(%"class.std::vector.8") align 8 %16, ptr noundef nonnull align 8 dereferenceable(80) %207)
          to label %208 unwind label %.split414.us

208:                                              ; preds = %206
  %209 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIP10ConnectionSaIS1_EEaSEOS3_(ptr noundef nonnull align 8 dereferenceable(24) %14, ptr noundef nonnull align 8 dereferenceable(24) %16) #11
  call void @_ZNSt6vectorIP10ConnectionSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %16) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %16) #11
  %210 = call ptr @_ZNSt6vectorIP10ConnectionSaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %14) #11
  store ptr %210, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %17) #11
  %211 = call ptr @_ZNSt6vectorIP10ConnectionSaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %14) #11
  store ptr %211, ptr %17, align 8
  %212 = call noundef zeroext i1 @_ZN9__gnu_cxxltIPP10ConnectionSt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %15, ptr noundef nonnull align 8 dereferenceable(8) %17) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #11
  br i1 %212, label %.lr.ph344.us, label %._crit_edge345.us

._crit_edge345.us:                                ; preds = %233, %208
  %.0229.lcssa.us = phi double [ 0.000000e+00, %208 ], [ %.1230.us, %233 ]
  %213 = fsub double 1.000000e+00, %205
  %214 = fmul double %205, %213
  %215 = fmul double %214, %.0229.lcssa.us
  %216 = getelementptr inbounds double, ptr %53, i64 %indvars.iv453
  store double %215, ptr %216, align 8, !tbaa !17
  %indvars.iv.next454 = add nsw i64 %indvars.iv453, -1
  %217 = icmp sgt i64 %indvars.iv.next454, %66
  br i1 %217, label %.lr.ph350.us, label %._crit_edge351.us, !llvm.loop !24

.lr.ph344.us:                                     ; preds = %208, %233
  %.0229342.us = phi double [ %.1230.us, %233 ], [ 0.000000e+00, %208 ]
  %218 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP10ConnectionSt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %15) #11
  %219 = load ptr, ptr %218, align 8, !tbaa !5
  %220 = invoke noundef zeroext i1 @_ZN10Connection12getRecurrentEv(ptr noundef nonnull align 8 dereferenceable(41) %219)
          to label %221 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split.us

221:                                              ; preds = %.lr.ph344.us
  br i1 %220, label %233, label %222

222:                                              ; preds = %221
  %223 = invoke noundef ptr @_ZN10Connection14getOuputNeuronEv(ptr noundef nonnull align 8 dereferenceable(41) %219)
          to label %224 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split.us

224:                                              ; preds = %222
  %225 = invoke noundef i32 @_ZN6Neuron5getIDEv(ptr noundef nonnull align 8 dereferenceable(80) %223)
          to label %226 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split.us

226:                                              ; preds = %224
  %227 = sext i32 %225 to i64
  %228 = getelementptr inbounds double, ptr %53, i64 %227
  %229 = load double, ptr %228, align 8, !tbaa !17
  %230 = invoke noundef double @_ZN10Connection9getWeightEv(ptr noundef nonnull align 8 dereferenceable(41) %219)
          to label %231 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split.us

231:                                              ; preds = %226
  %232 = call double @llvm.fmuladd.f64(double %229, double %230, double %.0229342.us)
  br label %233

233:                                              ; preds = %231, %221
  %.1230.us = phi double [ %.0229342.us, %221 ], [ %232, %231 ]
  %234 = call ptr @_ZN9__gnu_cxx17__normal_iteratorIPP10ConnectionSt6vectorIS2_SaIS2_EEEppEi(ptr noundef nonnull align 8 dereferenceable(8) %15, i32 noundef 0) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %17) #11
  %235 = call ptr @_ZNSt6vectorIP10ConnectionSaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %14) #11
  store ptr %235, ptr %17, align 8
  %236 = call noundef zeroext i1 @_ZN9__gnu_cxxltIPP10ConnectionSt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %15, ptr noundef nonnull align 8 dereferenceable(8) %17) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #11
  br i1 %236, label %.lr.ph344.us, label %._crit_edge345.us, !llvm.loop !25

.lr.ph341.us:                                     ; preds = %.preheader265.us, %243
  %indvars.iv = phi i64 [ %indvars.iv.next, %243 ], [ %63, %.preheader265.us ]
  %.0228340.us = phi double [ %248, %243 ], [ 0.000000e+00, %.preheader265.us ]
  %237 = getelementptr inbounds ptr, ptr %31, i64 %indvars.iv
  %238 = load ptr, ptr %237, align 8, !tbaa !5
  %239 = load ptr, ptr %238, align 8, !tbaa !15
  %240 = getelementptr inbounds i8, ptr %239, i64 40
  %241 = load ptr, ptr %240, align 8
  %242 = invoke noundef double %241(ptr noundef nonnull align 8 dereferenceable(80) %238, i32 noundef 0)
          to label %243 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split.us

243:                                              ; preds = %.lr.ph341.us
  %244 = sub nsw i64 %indvars.iv, %63
  %245 = getelementptr inbounds double, ptr %97, i64 %244
  %246 = load double, ptr %245, align 8, !tbaa !17
  %247 = fsub double %246, %242
  %248 = call double @llvm.fmuladd.f64(double %247, double %247, double %.0228340.us)
  %249 = fsub double %242, %246
  %250 = fmul double %242, %249
  %251 = fsub double 1.000000e+00, %242
  %252 = fmul double %251, %250
  %253 = getelementptr inbounds double, ptr %53, i64 %indvars.iv
  store double %252, ptr %253, align 8, !tbaa !17
  %indvars.iv.next = add nsw i64 %indvars.iv, 1
  %254 = icmp slt i64 %indvars.iv.next, %64
  br i1 %254, label %.lr.ph341.us, label %._crit_edge.us, !llvm.loop !26

.preheader.us:                                    ; preds = %._crit_edge361.us, %.preheader259.us
  br i1 %61, label %.lr.ph370.us, label %._crit_edge371.us

.preheader259.us:                                 ; preds = %._crit_edge354.us, %._crit_edge351.us
  br i1 %62, label %.lr.ph365.us, label %.preheader.us

.preheader265.us:                                 ; preds = %.lr.ph.us.preheader, %.preheader269.us
  br i1 %57, label %.lr.ph341.us, label %._crit_edge.us

.preheader269.us:                                 ; preds = %.lr.ph378.us
  br i1 %56, label %.lr.ph.us.preheader, label %.preheader265.us

.lr.ph.us.preheader:                              ; preds = %.preheader269.us
  call void @llvm.memset.p0.i64(ptr nonnull align 8 %53, i8 0, i64 %51, i1 false), !tbaa !17
  br label %.preheader265.us

.lr.ph353.us:                                     ; preds = %173
  %255 = getelementptr inbounds double, ptr %53, i64 %indvars.iv456
  br label %178

.lr.ph367.us:                                     ; preds = %113
  %256 = getelementptr inbounds double, ptr %53, i64 %indvars.iv463
  br label %118

._crit_edge386.us:                                ; preds = %._crit_edge379.us
  %257 = sitofp i32 %91 to double
  %258 = fdiv double %93, %257
  %259 = invoke noundef double @_ZN4BPTT4testEP9NeuralNetPP4DataiPd(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef nonnull %1, ptr noundef %2, i32 noundef %3, ptr noundef nonnull %38)
          to label %77 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.split.us

.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.split.us: ; preds = %81, %79, %77, %._crit_edge386.us
  %lpad.loopexit.split-lp273.us = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit.split-lp

.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split.us: ; preds = %82
  %lpad.loopexit272.us = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit.split-lp

.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split.us: ; preds = %.lr.ph378.us
  %lpad.loopexit270.us = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit.split-lp

.split.us:                                        ; preds = %._crit_edge371.us
  %260 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %24) #11
  br label %.loopexit.split-lp

.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split.us: ; preds = %.lr.ph373.us
  %lpad.loopexit257.us = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit.split-lp

.split400.us:                                     ; preds = %.lr.ph370.us
  %261 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %22) #11
  br label %.loopexit.split-lp

.loopexit.split.us:                               ; preds = %130, %125, %123, %118
  %lpad.loopexit.us = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit.split-lp

.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split.us: ; preds = %.lr.ph365.us
  %lpad.loopexit260.us = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit.split-lp

.split405.us:                                     ; preds = %144
  %262 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %20) #11
  br label %.loopexit.split-lp

.loopexit.split-lp.loopexit.split.us:             ; preds = %161, %159, %.lr.ph360.us
  %lpad.loopexit249.us = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit.split-lp

.split409.us:                                     ; preds = %.lr.ph357.us
  %263 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %18) #11
  br label %.loopexit.split-lp

.loopexit.split-lp.loopexit.split-lp.loopexit.split.us: ; preds = %.invoke, %192, %185, %183, %178
  %lpad.loopexit252.us = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit.split-lp

.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split.us: ; preds = %.lr.ph350.us
  %lpad.loopexit263.us = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit.split-lp

.split414.us:                                     ; preds = %206
  %264 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %16) #11
  br label %.loopexit.split-lp

.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split.us: ; preds = %226, %224, %222, %.lr.ph344.us
  %lpad.loopexit254.us = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit.split-lp

.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split.us: ; preds = %.lr.ph341.us
  %lpad.loopexit266.us = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit.split-lp

265:                                              ; preds = %282
  %exitcond.not = icmp eq i32 %266, %6
  br i1 %exitcond.not, label %._crit_edge392, label %.lr.ph391.split, !llvm.loop !9

.lr.ph391.split:                                  ; preds = %.lr.ph391, %265
  %.0225389 = phi i32 [ %266, %265 ], [ 0, %.lr.ph391 ]
  %266 = add nuw nsw i32 %.0225389, 1
  %267 = uitofp nneg i32 %266 to double
  %268 = call double @log(double noundef %267) #11
  %269 = fadd double %268, 1.000000e+00
  %270 = fdiv double %47, %269
  %271 = fadd double %46, %270
  %272 = invoke noundef double @_ZN4BPTT4testEP9NeuralNetPP4DataiPd(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef nonnull %1, ptr noundef %2, i32 noundef %3, ptr noundef nonnull %38)
          to label %278 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.split

273:                                              ; preds = %10
  %274 = landingpad { ptr, i32 }
          cleanup
  br label %277

275:                                              ; preds = %27
  %276 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %13) #11
  br label %277

277:                                              ; preds = %273, %275
  %.pn = phi { ptr, i32 } [ %276, %275 ], [ %274, %273 ]
  call void @_ZdlPvm(ptr noundef nonnull %26, i64 noundef 104) #12
  br label %286

.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.split: ; preds = %282, %280, %278, %.lr.ph391.split
  %lpad.loopexit.split-lp273 = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit.split-lp

278:                                              ; preds = %.lr.ph391.split
  %279 = invoke noundef double @_ZN4BPTT4testEP9NeuralNetPP4DataiPd(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef nonnull %1, ptr noundef nonnull %12, i32 noundef 1, ptr noundef nonnull %38)
          to label %280 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.split

280:                                              ; preds = %278
  %281 = invoke noundef double @_ZN4BPTT4testEP9NeuralNetPP4DataiPd(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef nonnull %1, ptr noundef nonnull %11, i32 noundef 1, ptr noundef nonnull %38)
          to label %282 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.split

282:                                              ; preds = %280
  invoke void @_ZN4Util8showDataEiiddP9NeuralNetddd(ptr noundef nonnull align 8 dereferenceable(104) %26, i32 noundef %.0225389, i32 noundef %6, double noundef 0x7FF8000000000000, double noundef %271, ptr noundef nonnull %1, double noundef %272, double noundef %279, double noundef %281)
          to label %265 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.split, !llvm.loop !9

._crit_edge392:                                   ; preds = %265, %76, %28
  %.0222.lcssa = phi double [ 0.000000e+00, %28 ], [ %258, %76 ], [ 0x7FF8000000000000, %265 ]
  %283 = load ptr, ptr %26, align 8, !tbaa !15
  %284 = getelementptr inbounds i8, ptr %283, i64 8
  %285 = load ptr, ptr %284, align 8
  call void %285(ptr noundef nonnull align 8 dereferenceable(104) %26) #11
  call void @_ZdlPvm(ptr noundef nonnull %38, i64 noundef 8) #12
  call void @_ZdlPvm(ptr noundef nonnull %53, i64 noundef 8) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #11
  call void @_ZNSt6vectorIP10ConnectionSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %14) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %14) #11
  ret double %.0222.lcssa

.loopexit.split-lp:                               ; preds = %.loopexit.split.us, %.loopexit.split-lp.loopexit.split-lp.loopexit.split.us, %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split.us, %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split.us, %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split.us, %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.split, %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.split.us, %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split.us, %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split.us, %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split.us, %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split.us, %.loopexit.split-lp.loopexit.split.us, %.split.us, %.split400.us, %.split405.us, %.split409.us, %.split414.us
  %.pn246 = phi { ptr, i32 } [ %264, %.split414.us ], [ %263, %.split409.us ], [ %262, %.split405.us ], [ %261, %.split400.us ], [ %260, %.split.us ], [ %lpad.loopexit.us, %.loopexit.split.us ], [ %lpad.loopexit249.us, %.loopexit.split-lp.loopexit.split.us ], [ %lpad.loopexit252.us, %.loopexit.split-lp.loopexit.split-lp.loopexit.split.us ], [ %lpad.loopexit254.us, %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split.us ], [ %lpad.loopexit257.us, %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split.us ], [ %lpad.loopexit260.us, %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split.us ], [ %lpad.loopexit263.us, %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split.us ], [ %lpad.loopexit266.us, %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split.us ], [ %lpad.loopexit270.us, %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split.us ], [ %lpad.loopexit272.us, %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split.us ], [ %lpad.loopexit.split-lp273, %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.split ], [ %lpad.loopexit.split-lp273.us, %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.split.us ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #11
  call void @_ZNSt6vectorIP10ConnectionSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %14) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %14) #11
  br label %286

286:                                              ; preds = %277, %.loopexit.split-lp
  %.pn246.pn = phi { ptr, i32 } [ %.pn246, %.loopexit.split-lp ], [ %.pn, %277 ]
  resume { ptr, i32 } %.pn246.pn
}

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

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

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

declare i32 @__gxx_personality_v0(...)

declare void @_ZN4UtilC1ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(104), ptr noundef) unnamed_addr #4

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

declare void @_ZN4Util13startLearningEv(ptr noundef nonnull align 8 dereferenceable(104)) local_unnamed_addr #4

declare noundef i32 @_ZN9NeuralNet8getDelayEv(ptr noundef nonnull align 8 dereferenceable(128)) local_unnamed_addr #4

declare noundef i32 @_ZN9NeuralNet18getNumberOfNeuronsEv(ptr noundef nonnull align 8 dereferenceable(128)) local_unnamed_addr #4

declare noundef ptr @_ZN9NeuralNet10getNeuronsEv(ptr noundef nonnull align 8 dereferenceable(128)) local_unnamed_addr #4

declare noundef i32 @_ZN9NeuralNet12getInputSizeEv(ptr noundef nonnull align 8 dereferenceable(128)) local_unnamed_addr #4

declare noundef i32 @_ZN9NeuralNet13getOutputSizeEv(ptr noundef nonnull align 8 dereferenceable(128)) local_unnamed_addr #4

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

; Function Attrs: mustprogress nofree nounwind willreturn memory(write)
declare double @log(double noundef) local_unnamed_addr #6

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

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

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

declare void @_ZN9NeuralNet10cleanStateEv(ptr noundef nonnull align 8 dereferenceable(128)) local_unnamed_addr #4

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

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

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

declare void @_ZN9NeuralNet9getOutputEPdS0_(ptr noundef nonnull align 8 dereferenceable(128), ptr noundef, ptr noundef) local_unnamed_addr #4

declare void @_ZN6Neuron20getOutputConnectionsEv(ptr dead_on_unwind writable sret(%"class.std::vector.8") align 8, ptr noundef nonnull align 8 dereferenceable(80)) local_unnamed_addr #4

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

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

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

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

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

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

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

declare noundef zeroext i1 @_ZN10Connection12getRecurrentEv(ptr noundef nonnull align 8 dereferenceable(41)) local_unnamed_addr #4

declare noundef ptr @_ZN10Connection14getOuputNeuronEv(ptr noundef nonnull align 8 dereferenceable(41)) local_unnamed_addr #4

declare noundef i32 @_ZN6Neuron5getIDEv(ptr noundef nonnull align 8 dereferenceable(80)) local_unnamed_addr #4

declare noundef double @_ZN10Connection9getWeightEv(ptr noundef nonnull align 8 dereferenceable(41)) local_unnamed_addr #4

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

declare void @_ZN6Neuron19getInputConnectionsEv(ptr dead_on_unwind writable sret(%"class.std::vector.8") align 8, ptr noundef nonnull align 8 dereferenceable(80)) local_unnamed_addr #4

declare noundef ptr @_ZN10Connection14getInputNeuronEv(ptr noundef nonnull align 8 dereferenceable(41)) local_unnamed_addr #4

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

declare void @_ZN9NeuralNet14getConnectionsEv(ptr dead_on_unwind writable sret(%"class.std::vector.8") align 8, ptr noundef nonnull align 8 dereferenceable(128)) local_unnamed_addr #4

declare void @_ZN10Connection17applyModificationEv(ptr noundef nonnull align 8 dereferenceable(41)) local_unnamed_addr #4

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

declare void @_ZN4Util8showDataEiiddP9NeuralNetddd(ptr noundef nonnull align 8 dereferenceable(104), i32 noundef, i32 noundef, double noundef, double noundef, ptr noundef, double noundef, double noundef, double noundef) local_unnamed_addr #4

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = distinct !{!9, !10}
!10 = !{!"llvm.loop.mustprogress"}
!11 = distinct !{!11, !10}
!12 = distinct !{!12, !10}
!13 = distinct !{!13, !10}
!14 = distinct !{!14, !10}
!15 = !{!16, !16, i64 0}
!16 = !{!"vtable pointer", !8, i64 0}
!17 = !{!18, !18, i64 0}
!18 = !{!"double", !7, i64 0}
!19 = distinct !{!19, !10}
!20 = distinct !{!20, !10}
!21 = distinct !{!21, !10}
!22 = distinct !{!22, !10}
!23 = distinct !{!23, !10}
!24 = distinct !{!24, !10}
!25 = distinct !{!25, !10}
!26 = distinct !{!26, !10}


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