; LLVM IR from FidoProject/Fido :: src (FidoControlSystem)

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

%"class.std::basic_ostream" = type { ptr, %"class.std::basic_ios" }
%"class.std::basic_ios" = type { %"class.std::ios_base", ptr, i8, i8, ptr, ptr, ptr, ptr }
%"class.std::ios_base" = type { ptr, i64, i64, i32, i32, i32, ptr, %"struct.std::ios_base::_Words", [8 x %"struct.std::ios_base::_Words"], i32, ptr, %"class.std::locale" }
%"struct.std::ios_base::_Words" = type { ptr, i64 }
%"class.std::locale" = type { ptr }
%"class.std::vector.15" = type { %"struct.std::_Vector_base.16" }
%"struct.std::_Vector_base.16" = type { %"struct.std::_Vector_base<rl::Wire, std::allocator<rl::Wire>>::_Vector_impl" }
%"struct.std::_Vector_base<rl::Wire, std::allocator<rl::Wire>>::_Vector_impl" = type { %"struct.std::_Vector_base<rl::Wire, std::allocator<rl::Wire>>::_Vector_impl_data" }
%"struct.std::_Vector_base<rl::Wire, std::allocator<rl::Wire>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.rl::FidoControlSystem::History" = type { %"class.std::vector", %"class.std::vector", %"class.std::vector", double }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl" }
%"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl" = type { %"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl_data" }
%"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.0" = type { %"struct.std::_Vector_base.1" }
%"struct.std::_Vector_base.1" = type { %"struct.std::_Vector_base<rl::FidoControlSystem::History, std::allocator<rl::FidoControlSystem::History>>::_Vector_impl" }
%"struct.std::_Vector_base<rl::FidoControlSystem::History, std::allocator<rl::FidoControlSystem::History>>::_Vector_impl" = type { %"struct.std::_Vector_base<rl::FidoControlSystem::History, std::allocator<rl::FidoControlSystem::History>>::_Vector_impl_data" }
%"struct.std::_Vector_base<rl::FidoControlSystem::History, std::allocator<rl::FidoControlSystem::History>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.net::Pruner" = type { i8 }
%"class.net::NeuralNet" = type { %"class.std::vector.20" }
%"class.std::vector.20" = type { %"struct.std::_Vector_base.21" }
%"struct.std::_Vector_base.21" = type { %"struct.std::_Vector_base<net::Layer, std::allocator<net::Layer>>::_Vector_impl" }
%"struct.std::_Vector_base<net::Layer, std::allocator<net::Layer>>::_Vector_impl" = type { %"struct.std::_Vector_base<net::Layer, std::allocator<net::Layer>>::_Vector_impl_data" }
%"struct.std::_Vector_base<net::Layer, std::allocator<net::Layer>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.__gnu_cxx::__normal_iterator" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.30" = type { ptr }
%"class.net::Neuron" = type { %"class.std::vector" }
%"class.rl::WireFitQLearn" = type { %"class.rl::Learner", ptr, ptr, ptr, i32, i32, double, double, double, double, i32, i32, %"class.std::vector", %"class.std::vector", %"class.std::vector", %"class.std::vector", ptr }
%"class.rl::Learner" = type { ptr }
%"class.rl::FidoControlSystem" = type { %"class.rl::WireFitQLearn", double, i32, double, double, %"class.std::vector.0" }
%"class.net::Layer" = type { ptr, %"class.std::vector.25" }
%"class.std::vector.25" = type { %"struct.std::_Vector_base.26" }
%"struct.std::_Vector_base.26" = type { %"struct.std::_Vector_base<net::Neuron, std::allocator<net::Neuron>>::_Vector_impl" }
%"struct.std::_Vector_base<net::Neuron, std::allocator<net::Neuron>>::_Vector_impl" = type { %"struct.std::_Vector_base<net::Neuron, std::allocator<net::Neuron>>::_Vector_impl_data" }
%"struct.std::_Vector_base<net::Neuron, std::allocator<net::Neuron>>::_Vector_impl_data" = type { ptr, ptr, ptr }

@_ZSt4cout = external global %"class.std::basic_ostream", align 8
@.str = external hidden unnamed_addr constant [31 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [19 x i8], align 1

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

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN2rl17FidoControlSystem30applyReinforcementToLastActionEdSt6vectorIdSaIdEE(ptr noundef nonnull align 8 dereferenceable(240) %0, double noundef %1, ptr noundef %2) unnamed_addr #0 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca ptr, align 8
  %5 = alloca double, align 8
  %6 = alloca ptr, align 8
  %7 = alloca %"class.std::vector.15", align 8
  %8 = alloca %"struct.rl::FidoControlSystem::History", align 8
  %9 = alloca %"class.std::vector", align 8
  %10 = alloca %"class.std::vector", align 8
  %11 = alloca ptr, align 8
  %12 = alloca i32, align 4
  %13 = alloca %"class.std::vector", align 8
  %14 = alloca double, align 8
  %15 = alloca %"class.std::vector", align 8
  %16 = alloca %"class.std::vector", align 8
  %17 = alloca %"class.std::vector.15", align 8
  %18 = alloca %"struct.rl::FidoControlSystem::History", align 8
  %19 = alloca %"class.std::vector", align 8
  %20 = alloca %"class.std::vector", align 8
  %21 = alloca %"class.std::vector", align 8
  %22 = alloca %"class.std::vector.0", align 8
  %23 = alloca i8, align 1
  %24 = alloca %"class.net::Pruner", align 1
  %25 = alloca %"class.net::NeuralNet", align 8
  %26 = alloca i32, align 4
  %27 = alloca %"class.net::NeuralNet", align 8
  %28 = alloca ptr, align 8
  %29 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %30 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %31 = alloca i32, align 4
  %32 = alloca ptr, align 8
  %33 = alloca ptr, align 8
  %34 = alloca %"class.__gnu_cxx::__normal_iterator.30", align 8
  %35 = alloca %"class.__gnu_cxx::__normal_iterator.30", align 8
  %36 = alloca ptr, align 8
  %37 = alloca double, align 8
  %38 = alloca %"class.std::vector.0", align 8
  %39 = alloca double, align 8
  %40 = alloca %"class.std::vector.0", align 8
  %41 = alloca %"class.net::Neuron", align 8
  %42 = alloca ptr, align 8
  %43 = alloca %"class.__gnu_cxx::__normal_iterator.30", align 8
  %44 = alloca %"class.__gnu_cxx::__normal_iterator.30", align 8
  %45 = alloca ptr, align 8
  %46 = alloca double, align 8
  %47 = alloca double, align 8
  %48 = alloca %"class.std::vector.0", align 8
  %49 = alloca %"class.std::vector.0", align 8
  store ptr %0, ptr %4, align 8, !tbaa !5
  store double %1, ptr %5, align 8, !tbaa !9
  store ptr %2, ptr %6, align 8, !tbaa !5
  %50 = load ptr, ptr %4, align 8
  call void @llvm.lifetime.start.p0(i64 24, ptr %7) #6
  %51 = getelementptr inbounds %"class.rl::WireFitQLearn", ptr %50, i32 0, i32 12
  call void @_ZNSt6vectorIdSaIdEEC2ERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %9, ptr noundef nonnull align 8 dereferenceable(24) %51)
  invoke void @_ZNSt6vectorIdSaIdEEC2ERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %10, ptr noundef nonnull align 8 dereferenceable(24) %2)
          to label %52 unwind label %107

52:                                               ; preds = %3
  %53 = getelementptr inbounds %"class.rl::WireFitQLearn", ptr %50, i32 0, i32 15
  invoke void @_ZNSt6vectorIdSaIdEEC2ERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %13, ptr noundef nonnull align 8 dereferenceable(24) %53)
          to label %54 unwind label %111

54:                                               ; preds = %52
  %55 = load double, ptr %5, align 8, !tbaa !9
  invoke void @_ZN2rl17FidoControlSystem7HistoryC2ESt6vectorIdSaIdEES4_S4_d(ptr noundef nonnull align 8 dereferenceable(80) %8, ptr noundef %9, ptr noundef %10, ptr noundef %13, double noundef %55)
          to label %56 unwind label %115

56:                                               ; preds = %54
  invoke void @_ZN2rl17FidoControlSystem25newControlWiresForHistoryENS0_7HistoryE(ptr dead_on_unwind writable sret(%"class.std::vector.15") align 8 %7, ptr noundef nonnull align 8 dereferenceable(240) %50, ptr noundef %8)
          to label %57 unwind label %119

57:                                               ; preds = %56
  call void @_ZN2rl17FidoControlSystem7HistoryD2Ev(ptr noundef nonnull align 8 dereferenceable(80) %8) #6
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #6
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #6
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %9) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #6
  %58 = getelementptr inbounds %"class.rl::WireFitQLearn", ptr %50, i32 0, i32 12
  invoke void @_ZNSt6vectorIdSaIdEEC2ERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %15, ptr noundef nonnull align 8 dereferenceable(24) %58)
          to label %59 unwind label %126

59:                                               ; preds = %57
  invoke void @_ZNSt6vectorIN2rl4WireESaIS1_EEC2ERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %17, ptr noundef nonnull align 8 dereferenceable(24) %7)
          to label %60 unwind label %130

60:                                               ; preds = %59
  invoke void @_ZN2rl13WireFitQLearn12getRawOutputESt6vectorINS_4WireESaIS2_EE(ptr dead_on_unwind writable sret(%"class.std::vector") align 8 %16, ptr noundef nonnull align 8 dereferenceable(184) %50, ptr noundef %17)
          to label %61 unwind label %134

61:                                               ; preds = %60
  %62 = invoke noundef double @_ZN2rl17FidoControlSystem8getErrorESt6vectorIdSaIdEES3_(ptr noundef nonnull align 8 dereferenceable(240) %50, ptr noundef %15, ptr noundef %16)
          to label %63 unwind label %138

63:                                               ; preds = %61
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %16) #6
  call void @_ZNSt6vectorIN2rl4WireESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %17) #6
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %15) #6
  store double %62, ptr %14, align 8, !tbaa !9
  %64 = load double, ptr %14, align 8, !tbaa !9
  invoke void @_ZN2rl17FidoControlSystem17adjustExplorationEd(ptr noundef nonnull align 8 dereferenceable(240) %50, double noundef %64)
          to label %65 unwind label %126

65:                                               ; preds = %63
  %66 = load double, ptr %14, align 8, !tbaa !9
  %67 = getelementptr inbounds %"class.rl::FidoControlSystem", ptr %50, i32 0, i32 4
  store double %66, ptr %67, align 8, !tbaa !11
  %68 = getelementptr inbounds %"class.rl::FidoControlSystem", ptr %50, i32 0, i32 5
  call void @llvm.lifetime.start.p0(i64 80, ptr %18) #6
  %69 = getelementptr inbounds %"class.rl::WireFitQLearn", ptr %50, i32 0, i32 12
  invoke void @_ZNSt6vectorIdSaIdEEC2ERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %19, ptr noundef nonnull align 8 dereferenceable(24) %69)
          to label %70 unwind label %144

70:                                               ; preds = %65
  invoke void @_ZNSt6vectorIdSaIdEEC2ERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %20, ptr noundef nonnull align 8 dereferenceable(24) %2)
          to label %71 unwind label %148

71:                                               ; preds = %70
  %72 = getelementptr inbounds %"class.rl::WireFitQLearn", ptr %50, i32 0, i32 15
  invoke void @_ZNSt6vectorIdSaIdEEC2ERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %21, ptr noundef nonnull align 8 dereferenceable(24) %72)
          to label %73 unwind label %152

73:                                               ; preds = %71
  %74 = load double, ptr %5, align 8, !tbaa !9
  invoke void @_ZN2rl17FidoControlSystem7HistoryC2ESt6vectorIdSaIdEES4_S4_d(ptr noundef nonnull align 8 dereferenceable(80) %18, ptr noundef %19, ptr noundef %20, ptr noundef %21, double noundef %74)
          to label %75 unwind label %156

75:                                               ; preds = %73
  invoke void @_ZNSt6vectorIN2rl17FidoControlSystem7HistoryESaIS2_EE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(24) %68, ptr noundef nonnull align 8 dereferenceable(80) %18)
          to label %76 unwind label %160

76:                                               ; preds = %75
  call void @_ZN2rl17FidoControlSystem7HistoryD2Ev(ptr noundef nonnull align 8 dereferenceable(80) %18) #6
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %21) #6
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %20) #6
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %19) #6
  call void @llvm.lifetime.end.p0(i64 80, ptr %18) #6
  call void @llvm.lifetime.start.p0(i64 24, ptr %22) #6
  invoke void @_ZN2rl17FidoControlSystem15selectHistoriesEv(ptr dead_on_unwind writable sret(%"class.std::vector.0") align 8 %22, ptr noundef nonnull align 8 dereferenceable(240) %50)
          to label %77 unwind label %168

77:                                               ; preds = %76
  %78 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str)
          to label %79 unwind label %172

79:                                               ; preds = %77
  %80 = call noundef i64 @_ZNKSt6vectorIN2rl17FidoControlSystem7HistoryESaIS2_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %22) #6
  %81 = icmp ugt i64 %80, 3
  br i1 %81, label %82, label %368

82:                                               ; preds = %79
  call void @llvm.lifetime.start.p0(i64 1, ptr %23) #6
  store i8 0, ptr %23, align 1, !tbaa !24
  call void @llvm.lifetime.start.p0(i64 1, ptr %24) #6
  invoke void @_ZN3net6PrunerC1Ev(ptr noundef nonnull align 1 dereferenceable(1) %24)
          to label %83 unwind label %176

83:                                               ; preds = %82
  call void @llvm.lifetime.start.p0(i64 24, ptr %25) #6
  invoke void @_ZN3net9NeuralNetC1Ev(ptr noundef nonnull align 8 dereferenceable(24) %25)
          to label %84 unwind label %180

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

85:                                               ; preds = %337, %84
  %86 = load i32, ptr %26, align 4, !tbaa !26
  %87 = icmp slt i32 %86, 1
  br i1 %87, label %88, label %340

88:                                               ; preds = %85
  %89 = load i32, ptr %26, align 4, !tbaa !26
  %90 = add nsw i32 %89, 1
  store i32 %90, ptr %26, align 4, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 24, ptr %27) #6
  %91 = getelementptr inbounds %"class.rl::WireFitQLearn", ptr %50, i32 0, i32 1
  %92 = load ptr, ptr %91, align 8, !tbaa !27
  invoke void @_ZN3net9NeuralNetC1EPS0_(ptr noundef nonnull align 8 dereferenceable(24) %27, ptr noundef %92)
          to label %93 unwind label %184

93:                                               ; preds = %88
  %94 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZN3net9NeuralNetaSEOS0_(ptr noundef nonnull align 8 dereferenceable(24) %25, ptr noundef nonnull align 8 dereferenceable(24) %27) #6
  call void @_ZN3net9NeuralNetD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %27) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %27) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #6
  %95 = getelementptr inbounds %"class.rl::WireFitQLearn", ptr %50, i32 0, i32 1
  %96 = load ptr, ptr %95, align 8, !tbaa !27
  %97 = getelementptr inbounds %"class.net::NeuralNet", ptr %96, i32 0, i32 0
  store ptr %97, ptr %28, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #6
  %98 = load ptr, ptr %28, align 8, !tbaa !5
  %99 = call ptr @_ZNSt6vectorIN3net5LayerESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %98) #6
  %100 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %29, i32 0, i32 0
  store ptr %99, ptr %100, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #6
  %101 = load ptr, ptr %28, align 8, !tbaa !5
  %102 = call ptr @_ZNSt6vectorIN3net5LayerESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %101) #6
  %103 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %30, i32 0, i32 0
  store ptr %102, ptr %103, align 8
  br label %104

104:                                              ; preds = %212, %93
  %105 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3net5LayerESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %29, ptr noundef nonnull align 8 dereferenceable(8) %30) #6
  br i1 %105, label %188, label %106

106:                                              ; preds = %104
  store i32 4, ptr %31, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #6
  br label %214

107:                                              ; preds = %3
  %108 = landingpad { ptr, i32 }
          cleanup
  %109 = extractvalue { ptr, i32 } %108, 0
  store ptr %109, ptr %11, align 8
  %110 = extractvalue { ptr, i32 } %108, 1
  store i32 %110, ptr %12, align 4
  br label %125

111:                                              ; preds = %52
  %112 = landingpad { ptr, i32 }
          cleanup
  %113 = extractvalue { ptr, i32 } %112, 0
  store ptr %113, ptr %11, align 8
  %114 = extractvalue { ptr, i32 } %112, 1
  store i32 %114, ptr %12, align 4
  br label %124

115:                                              ; preds = %54
  %116 = landingpad { ptr, i32 }
          cleanup
  %117 = extractvalue { ptr, i32 } %116, 0
  store ptr %117, ptr %11, align 8
  %118 = extractvalue { ptr, i32 } %116, 1
  store i32 %118, ptr %12, align 4
  br label %123

119:                                              ; preds = %56
  %120 = landingpad { ptr, i32 }
          cleanup
  %121 = extractvalue { ptr, i32 } %120, 0
  store ptr %121, ptr %11, align 8
  %122 = extractvalue { ptr, i32 } %120, 1
  store i32 %122, ptr %12, align 4
  call void @_ZN2rl17FidoControlSystem7HistoryD2Ev(ptr noundef nonnull align 8 dereferenceable(80) %8) #6
  br label %123

123:                                              ; preds = %119, %115
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #6
  br label %124

124:                                              ; preds = %123, %111
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #6
  br label %125

125:                                              ; preds = %124, %107
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %9) #6
  br label %381

126:                                              ; preds = %63, %57
  %127 = landingpad { ptr, i32 }
          cleanup
  %128 = extractvalue { ptr, i32 } %127, 0
  store ptr %128, ptr %11, align 8
  %129 = extractvalue { ptr, i32 } %127, 1
  store i32 %129, ptr %12, align 4
  br label %380

130:                                              ; preds = %59
  %131 = landingpad { ptr, i32 }
          cleanup
  %132 = extractvalue { ptr, i32 } %131, 0
  store ptr %132, ptr %11, align 8
  %133 = extractvalue { ptr, i32 } %131, 1
  store i32 %133, ptr %12, align 4
  br label %143

134:                                              ; preds = %60
  %135 = landingpad { ptr, i32 }
          cleanup
  %136 = extractvalue { ptr, i32 } %135, 0
  store ptr %136, ptr %11, align 8
  %137 = extractvalue { ptr, i32 } %135, 1
  store i32 %137, ptr %12, align 4
  br label %142

138:                                              ; preds = %61
  %139 = landingpad { ptr, i32 }
          cleanup
  %140 = extractvalue { ptr, i32 } %139, 0
  store ptr %140, ptr %11, align 8
  %141 = extractvalue { ptr, i32 } %139, 1
  store i32 %141, ptr %12, align 4
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %16) #6
  br label %142

142:                                              ; preds = %138, %134
  call void @_ZNSt6vectorIN2rl4WireESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %17) #6
  br label %143

143:                                              ; preds = %142, %130
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %15) #6
  br label %380

144:                                              ; preds = %65
  %145 = landingpad { ptr, i32 }
          cleanup
  %146 = extractvalue { ptr, i32 } %145, 0
  store ptr %146, ptr %11, align 8
  %147 = extractvalue { ptr, i32 } %145, 1
  store i32 %147, ptr %12, align 4
  br label %167

148:                                              ; preds = %70
  %149 = landingpad { ptr, i32 }
          cleanup
  %150 = extractvalue { ptr, i32 } %149, 0
  store ptr %150, ptr %11, align 8
  %151 = extractvalue { ptr, i32 } %149, 1
  store i32 %151, ptr %12, align 4
  br label %166

152:                                              ; preds = %71
  %153 = landingpad { ptr, i32 }
          cleanup
  %154 = extractvalue { ptr, i32 } %153, 0
  store ptr %154, ptr %11, align 8
  %155 = extractvalue { ptr, i32 } %153, 1
  store i32 %155, ptr %12, align 4
  br label %165

156:                                              ; preds = %73
  %157 = landingpad { ptr, i32 }
          cleanup
  %158 = extractvalue { ptr, i32 } %157, 0
  store ptr %158, ptr %11, align 8
  %159 = extractvalue { ptr, i32 } %157, 1
  store i32 %159, ptr %12, align 4
  br label %164

160:                                              ; preds = %75
  %161 = landingpad { ptr, i32 }
          cleanup
  %162 = extractvalue { ptr, i32 } %161, 0
  store ptr %162, ptr %11, align 8
  %163 = extractvalue { ptr, i32 } %161, 1
  store i32 %163, ptr %12, align 4
  call void @_ZN2rl17FidoControlSystem7HistoryD2Ev(ptr noundef nonnull align 8 dereferenceable(80) %18) #6
  br label %164

164:                                              ; preds = %160, %156
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %21) #6
  br label %165

165:                                              ; preds = %164, %152
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %20) #6
  br label %166

166:                                              ; preds = %165, %148
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %19) #6
  br label %167

167:                                              ; preds = %166, %144
  call void @llvm.lifetime.end.p0(i64 80, ptr %18) #6
  br label %380

168:                                              ; preds = %76
  %169 = landingpad { ptr, i32 }
          cleanup
  %170 = extractvalue { ptr, i32 } %169, 0
  store ptr %170, ptr %11, align 8
  %171 = extractvalue { ptr, i32 } %169, 1
  store i32 %171, ptr %12, align 4
  br label %379

172:                                              ; preds = %370, %368, %77
  %173 = landingpad { ptr, i32 }
          cleanup
  %174 = extractvalue { ptr, i32 } %173, 0
  store ptr %174, ptr %11, align 8
  %175 = extractvalue { ptr, i32 } %173, 1
  store i32 %175, ptr %12, align 4
  br label %378

176:                                              ; preds = %82
  %177 = landingpad { ptr, i32 }
          cleanup
  %178 = extractvalue { ptr, i32 } %177, 0
  store ptr %178, ptr %11, align 8
  %179 = extractvalue { ptr, i32 } %177, 1
  store i32 %179, ptr %12, align 4
  br label %367

180:                                              ; preds = %83
  %181 = landingpad { ptr, i32 }
          cleanup
  %182 = extractvalue { ptr, i32 } %181, 0
  store ptr %182, ptr %11, align 8
  %183 = extractvalue { ptr, i32 } %181, 1
  store i32 %183, ptr %12, align 4
  br label %366

184:                                              ; preds = %88
  %185 = landingpad { ptr, i32 }
          cleanup
  %186 = extractvalue { ptr, i32 } %185, 0
  store ptr %186, ptr %11, align 8
  %187 = extractvalue { ptr, i32 } %185, 1
  store i32 %187, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 24, ptr %27) #6
  br label %365

188:                                              ; preds = %104
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #6
  %189 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3net5LayerESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %29) #6
  store ptr %189, ptr %32, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #6
  %190 = load ptr, ptr %32, align 8, !tbaa !5
  %191 = getelementptr inbounds %"class.net::Layer", ptr %190, i32 0, i32 1
  store ptr %191, ptr %33, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #6
  %192 = load ptr, ptr %33, align 8, !tbaa !5
  %193 = call ptr @_ZNSt6vectorIN3net6NeuronESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %192) #6
  %194 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.30", ptr %34, i32 0, i32 0
  store ptr %193, ptr %194, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #6
  %195 = load ptr, ptr %33, align 8, !tbaa !5
  %196 = call ptr @_ZNSt6vectorIN3net6NeuronESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %195) #6
  %197 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.30", ptr %35, i32 0, i32 0
  store ptr %196, ptr %197, align 8
  br label %198

198:                                              ; preds = %205, %188
  %199 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3net6NeuronESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %34, ptr noundef nonnull align 8 dereferenceable(8) %35) #6
  br i1 %199, label %201, label %200

200:                                              ; preds = %198
  store i32 6, ptr %31, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #6
  br label %211

201:                                              ; preds = %198
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #6
  %202 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3net6NeuronESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %34) #6
  store ptr %202, ptr %36, align 8, !tbaa !5
  %203 = load ptr, ptr %36, align 8, !tbaa !5
  invoke void @_ZN3net6Neuron16randomizeWeightsEv(ptr noundef nonnull align 8 dereferenceable(24) %203)
          to label %204 unwind label %207

204:                                              ; preds = %201
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #6
  br label %205

205:                                              ; preds = %204
  %206 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3net6NeuronESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %34) #6
  br label %198

207:                                              ; preds = %201
  %208 = landingpad { ptr, i32 }
          cleanup
  %209 = extractvalue { ptr, i32 } %208, 0
  store ptr %209, ptr %11, align 8
  %210 = extractvalue { ptr, i32 } %208, 1
  store i32 %210, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #6
  br label %365

211:                                              ; preds = %200
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #6
  br label %212

212:                                              ; preds = %211
  %213 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3net5LayerESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %29) #6
  br label %104

214:                                              ; preds = %106
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #6
  invoke void @_ZNSt6vectorIN2rl17FidoControlSystem7HistoryESaIS2_EEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(24) %38, ptr noundef nonnull align 8 dereferenceable(24) %22)
          to label %215 unwind label %235

215:                                              ; preds = %214
  %216 = invoke noundef double @_ZN2rl17FidoControlSystem16trainOnHistoriesESt6vectorINS0_7HistoryESaIS2_EEdj(ptr noundef nonnull align 8 dereferenceable(240) %50, ptr noundef %38, double noundef 1.000000e-03, i32 noundef 1)
          to label %217 unwind label %239

217:                                              ; preds = %215
  call void @_ZNSt6vectorIN2rl17FidoControlSystem7HistoryESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %38) #6
  store double %216, ptr %37, align 8, !tbaa !9
  %218 = getelementptr inbounds %"class.rl::WireFitQLearn", ptr %50, i32 0, i32 1
  %219 = load ptr, ptr %218, align 8, !tbaa !27
  %220 = invoke noundef i32 @_ZN3net9NeuralNet21numberOfHiddenNeuronsEv(ptr noundef nonnull align 8 dereferenceable(24) %219)
          to label %221 unwind label %235

221:                                              ; preds = %217
  %222 = icmp ugt i32 %220, 4
  br i1 %222, label %223, label %256

223:                                              ; preds = %221
  %224 = getelementptr inbounds %"class.rl::WireFitQLearn", ptr %50, i32 0, i32 1
  %225 = load ptr, ptr %224, align 8, !tbaa !27
  invoke void @_ZN3net6Pruner14pruneRandomnlyEPNS_9NeuralNetE(ptr noundef nonnull align 1 dereferenceable(1) %24, ptr noundef %225)
          to label %226 unwind label %235

226:                                              ; preds = %223
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #6
  invoke void @_ZNSt6vectorIN2rl17FidoControlSystem7HistoryESaIS2_EEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(24) %40, ptr noundef nonnull align 8 dereferenceable(24) %22)
          to label %227 unwind label %243

227:                                              ; preds = %226
  %228 = invoke noundef double @_ZN2rl17FidoControlSystem16trainOnHistoriesESt6vectorINS0_7HistoryESaIS2_EEdj(ptr noundef nonnull align 8 dereferenceable(240) %50, ptr noundef %40, double noundef 1.000000e-03, i32 noundef 1)
          to label %229 unwind label %247

229:                                              ; preds = %227
  call void @_ZNSt6vectorIN2rl17FidoControlSystem7HistoryESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %40) #6
  store double %228, ptr %39, align 8, !tbaa !9
  %230 = load double, ptr %39, align 8, !tbaa !9
  %231 = fmul double %230, 1.050000e+00
  %232 = load double, ptr %37, align 8, !tbaa !9
  %233 = fcmp olt double %231, %232
  br i1 %233, label %234, label %251

234:                                              ; preds = %229
  store i8 1, ptr %23, align 1, !tbaa !24
  store i32 2, ptr %31, align 4
  br label %252, !llvm.loop !28

235:                                              ; preds = %256, %223, %217, %214
  %236 = landingpad { ptr, i32 }
          cleanup
  %237 = extractvalue { ptr, i32 } %236, 0
  store ptr %237, ptr %11, align 8
  %238 = extractvalue { ptr, i32 } %236, 1
  store i32 %238, ptr %12, align 4
  br label %339

239:                                              ; preds = %215
  %240 = landingpad { ptr, i32 }
          cleanup
  %241 = extractvalue { ptr, i32 } %240, 0
  store ptr %241, ptr %11, align 8
  %242 = extractvalue { ptr, i32 } %240, 1
  store i32 %242, ptr %12, align 4
  call void @_ZNSt6vectorIN2rl17FidoControlSystem7HistoryESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %38) #6
  br label %339

243:                                              ; preds = %226
  %244 = landingpad { ptr, i32 }
          cleanup
  %245 = extractvalue { ptr, i32 } %244, 0
  store ptr %245, ptr %11, align 8
  %246 = extractvalue { ptr, i32 } %244, 1
  store i32 %246, ptr %12, align 4
  br label %255

247:                                              ; preds = %227
  %248 = landingpad { ptr, i32 }
          cleanup
  %249 = extractvalue { ptr, i32 } %248, 0
  store ptr %249, ptr %11, align 8
  %250 = extractvalue { ptr, i32 } %248, 1
  store i32 %250, ptr %12, align 4
  call void @_ZNSt6vectorIN2rl17FidoControlSystem7HistoryESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %40) #6
  br label %255

251:                                              ; preds = %229
  store i32 0, ptr %31, align 4
  br label %252

252:                                              ; preds = %251, %234
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #6
  %253 = load i32, ptr %31, align 4
  switch i32 %253, label %337 [
    i32 0, label %254
  ]

254:                                              ; preds = %252
  br label %256

255:                                              ; preds = %247, %243
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #6
  br label %339

256:                                              ; preds = %254, %221
  %257 = getelementptr inbounds %"class.rl::WireFitQLearn", ptr %50, i32 0, i32 1
  %258 = load ptr, ptr %257, align 8, !tbaa !27
  %259 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3net9NeuralNetaSERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %258, ptr noundef nonnull align 8 dereferenceable(24) %25)
          to label %260 unwind label %235

260:                                              ; preds = %256
  %261 = getelementptr inbounds %"class.rl::WireFitQLearn", ptr %50, i32 0, i32 1
  %262 = load ptr, ptr %261, align 8, !tbaa !27
  %263 = getelementptr inbounds %"class.net::NeuralNet", ptr %262, i32 0, i32 0
  %264 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt6vectorIN3net5LayerESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %263, i64 noundef 0) #6
  %265 = getelementptr inbounds %"class.net::Layer", ptr %264, i32 0, i32 1
  call void @llvm.lifetime.start.p0(i64 24, ptr %41) #6
  %266 = getelementptr inbounds %"class.rl::WireFitQLearn", ptr %50, i32 0, i32 1
  %267 = load ptr, ptr %266, align 8, !tbaa !27
  %268 = invoke noundef i32 @_ZN3net9NeuralNet14numberOfInputsEv(ptr noundef nonnull align 8 dereferenceable(24) %267)
          to label %269 unwind label %286

269:                                              ; preds = %260
  invoke void @_ZN3net6NeuronC1Ei(ptr noundef nonnull align 8 dereferenceable(24) %41, i32 noundef %268)
          to label %270 unwind label %286

270:                                              ; preds = %269
  invoke void @_ZNSt6vectorIN3net6NeuronESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %265, ptr noundef nonnull align 8 dereferenceable(24) %41)
          to label %271 unwind label %290

271:                                              ; preds = %270
  call void @_ZN3net6NeuronD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %41) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %41) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #6
  %272 = getelementptr inbounds %"class.rl::WireFitQLearn", ptr %50, i32 0, i32 1
  %273 = load ptr, ptr %272, align 8, !tbaa !27
  %274 = getelementptr inbounds %"class.net::NeuralNet", ptr %273, i32 0, i32 0
  %275 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt6vectorIN3net5LayerESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %274, i64 noundef 1) #6
  %276 = getelementptr inbounds %"class.net::Layer", ptr %275, i32 0, i32 1
  store ptr %276, ptr %42, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #6
  %277 = load ptr, ptr %42, align 8, !tbaa !5
  %278 = call ptr @_ZNSt6vectorIN3net6NeuronESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %277) #6
  %279 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.30", ptr %43, i32 0, i32 0
  store ptr %278, ptr %279, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #6
  %280 = load ptr, ptr %42, align 8, !tbaa !5
  %281 = call ptr @_ZNSt6vectorIN3net6NeuronESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %280) #6
  %282 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.30", ptr %44, i32 0, i32 0
  store ptr %281, ptr %282, align 8
  br label %283

283:                                              ; preds = %302, %271
  %284 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3net6NeuronESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %43, ptr noundef nonnull align 8 dereferenceable(8) %44) #6
  br i1 %284, label %295, label %285

285:                                              ; preds = %283
  store i32 8, ptr %31, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #6
  br label %313

286:                                              ; preds = %269, %260
  %287 = landingpad { ptr, i32 }
          cleanup
  %288 = extractvalue { ptr, i32 } %287, 0
  store ptr %288, ptr %11, align 8
  %289 = extractvalue { ptr, i32 } %287, 1
  store i32 %289, ptr %12, align 4
  br label %294

290:                                              ; preds = %270
  %291 = landingpad { ptr, i32 }
          cleanup
  %292 = extractvalue { ptr, i32 } %291, 0
  store ptr %292, ptr %11, align 8
  %293 = extractvalue { ptr, i32 } %291, 1
  store i32 %293, ptr %12, align 4
  call void @_ZN3net6NeuronD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %41) #6
  br label %294

294:                                              ; preds = %290, %286
  call void @llvm.lifetime.end.p0(i64 24, ptr %41) #6
  br label %339

295:                                              ; preds = %283
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #6
  %296 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3net6NeuronESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %43) #6
  store ptr %296, ptr %45, align 8, !tbaa !5
  %297 = load ptr, ptr %45, align 8, !tbaa !5
  %298 = getelementptr inbounds %"class.net::Neuron", ptr %297, i32 0, i32 0
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #6
  store double 1.000000e+00, ptr %46, align 8, !tbaa !9
  invoke void @_ZNSt6vectorIdSaIdEE9push_backEOd(ptr noundef nonnull align 8 dereferenceable(24) %298, ptr noundef nonnull align 8 dereferenceable(8) %46)
          to label %299 unwind label %304

299:                                              ; preds = %295
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #6
  %300 = load ptr, ptr %45, align 8, !tbaa !5
  invoke void @_ZN3net6Neuron16randomizeWeightsEv(ptr noundef nonnull align 8 dereferenceable(24) %300)
          to label %301 unwind label %308

301:                                              ; preds = %299
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #6
  br label %302

302:                                              ; preds = %301
  %303 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3net6NeuronESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %43) #6
  br label %283

304:                                              ; preds = %295
  %305 = landingpad { ptr, i32 }
          cleanup
  %306 = extractvalue { ptr, i32 } %305, 0
  store ptr %306, ptr %11, align 8
  %307 = extractvalue { ptr, i32 } %305, 1
  store i32 %307, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #6
  br label %312

308:                                              ; preds = %299
  %309 = landingpad { ptr, i32 }
          cleanup
  %310 = extractvalue { ptr, i32 } %309, 0
  store ptr %310, ptr %11, align 8
  %311 = extractvalue { ptr, i32 } %309, 1
  store i32 %311, ptr %12, align 4
  br label %312

312:                                              ; preds = %308, %304
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #6
  br label %339

313:                                              ; preds = %285
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #6
  invoke void @_ZNSt6vectorIN2rl17FidoControlSystem7HistoryESaIS2_EEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(24) %48, ptr noundef nonnull align 8 dereferenceable(24) %22)
          to label %314 unwind label %322

314:                                              ; preds = %313
  %315 = invoke noundef double @_ZN2rl17FidoControlSystem16trainOnHistoriesESt6vectorINS0_7HistoryESaIS2_EEdj(ptr noundef nonnull align 8 dereferenceable(240) %50, ptr noundef %48, double noundef 1.000000e-03, i32 noundef 1)
          to label %316 unwind label %326

316:                                              ; preds = %314
  call void @_ZNSt6vectorIN2rl17FidoControlSystem7HistoryESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %48) #6
  store double %315, ptr %47, align 8, !tbaa !9
  %317 = load double, ptr %47, align 8, !tbaa !9
  %318 = fmul double %317, 1.050000e+00
  %319 = load double, ptr %37, align 8, !tbaa !9
  %320 = fcmp olt double %318, %319
  br i1 %320, label %321, label %330

321:                                              ; preds = %316
  store i8 1, ptr %23, align 1, !tbaa !24
  store i32 2, ptr %31, align 4
  br label %335, !llvm.loop !28

322:                                              ; preds = %330, %313
  %323 = landingpad { ptr, i32 }
          cleanup
  %324 = extractvalue { ptr, i32 } %323, 0
  store ptr %324, ptr %11, align 8
  %325 = extractvalue { ptr, i32 } %323, 1
  store i32 %325, ptr %12, align 4
  br label %336

326:                                              ; preds = %314
  %327 = landingpad { ptr, i32 }
          cleanup
  %328 = extractvalue { ptr, i32 } %327, 0
  store ptr %328, ptr %11, align 8
  %329 = extractvalue { ptr, i32 } %327, 1
  store i32 %329, ptr %12, align 4
  call void @_ZNSt6vectorIN2rl17FidoControlSystem7HistoryESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %48) #6
  br label %336

330:                                              ; preds = %316
  %331 = getelementptr inbounds %"class.rl::WireFitQLearn", ptr %50, i32 0, i32 1
  %332 = load ptr, ptr %331, align 8, !tbaa !27
  %333 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3net9NeuralNetaSERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %332, ptr noundef nonnull align 8 dereferenceable(24) %25)
          to label %334 unwind label %322

334:                                              ; preds = %330
  store i32 3, ptr %31, align 4
  br label %335

335:                                              ; preds = %334, %321
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #6
  br label %337

336:                                              ; preds = %326, %322
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #6
  br label %339

337:                                              ; preds = %335, %252
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #6
  %338 = load i32, ptr %31, align 4
  switch i32 %338, label %387 [
    i32 2, label %85
    i32 3, label %340
  ]

339:                                              ; preds = %336, %312, %294, %255, %239, %235
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #6
  br label %365

340:                                              ; preds = %337, %85
  %341 = load i8, ptr %23, align 1, !tbaa !24, !range !30, !noundef !31
  %342 = trunc i8 %341 to i1
  %343 = zext i1 %342 to i32
  %344 = icmp eq i32 %343, 0
  br i1 %344, label %345, label %354

345:                                              ; preds = %340
  %346 = getelementptr inbounds %"class.rl::WireFitQLearn", ptr %50, i32 0, i32 1
  %347 = load ptr, ptr %346, align 8, !tbaa !27
  %348 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3net9NeuralNetaSERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %347, ptr noundef nonnull align 8 dereferenceable(24) %25)
          to label %349 unwind label %350

349:                                              ; preds = %345
  br label %354

350:                                              ; preds = %362, %360, %356, %354, %345
  %351 = landingpad { ptr, i32 }
          cleanup
  %352 = extractvalue { ptr, i32 } %351, 0
  store ptr %352, ptr %11, align 8
  %353 = extractvalue { ptr, i32 } %351, 1
  store i32 %353, ptr %12, align 4
  br label %365

354:                                              ; preds = %349, %340
  %355 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.1)
          to label %356 unwind label %350

356:                                              ; preds = %354
  %357 = getelementptr inbounds %"class.rl::WireFitQLearn", ptr %50, i32 0, i32 1
  %358 = load ptr, ptr %357, align 8, !tbaa !27
  %359 = invoke noundef i32 @_ZN3net9NeuralNet21numberOfHiddenNeuronsEv(ptr noundef nonnull align 8 dereferenceable(24) %358)
          to label %360 unwind label %350

360:                                              ; preds = %356
  %361 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %355, i32 noundef %359)
          to label %362 unwind label %350

362:                                              ; preds = %360
  %363 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %361, ptr noundef @.str.2)
          to label %364 unwind label %350

364:                                              ; preds = %362
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #6
  call void @_ZN3net9NeuralNetD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %25) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %25) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %24) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %23) #6
  br label %368

365:                                              ; preds = %350, %339, %207, %184
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #6
  call void @_ZN3net9NeuralNetD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %25) #6
  br label %366

366:                                              ; preds = %365, %180
  call void @llvm.lifetime.end.p0(i64 24, ptr %25) #6
  br label %367

367:                                              ; preds = %366, %176
  call void @llvm.lifetime.end.p0(i64 1, ptr %24) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %23) #6
  br label %378

368:                                              ; preds = %364, %79
  %369 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.3)
          to label %370 unwind label %172

370:                                              ; preds = %368
  invoke void @_ZNSt6vectorIN2rl17FidoControlSystem7HistoryESaIS2_EEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(24) %49, ptr noundef nonnull align 8 dereferenceable(24) %22)
          to label %371 unwind label %172

371:                                              ; preds = %370
  %372 = invoke noundef double @_ZN2rl17FidoControlSystem16trainOnHistoriesESt6vectorINS0_7HistoryESaIS2_EEdj(ptr noundef nonnull align 8 dereferenceable(240) %50, ptr noundef %49, double noundef 2.000000e-02, i32 noundef 100)
          to label %373 unwind label %374

373:                                              ; preds = %371
  call void @_ZNSt6vectorIN2rl17FidoControlSystem7HistoryESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %49) #6
  call void @_ZNSt6vectorIN2rl17FidoControlSystem7HistoryESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %22) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %22) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #6
  call void @_ZNSt6vectorIN2rl4WireESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %7) #6
  ret void

374:                                              ; preds = %371
  %375 = landingpad { ptr, i32 }
          cleanup
  %376 = extractvalue { ptr, i32 } %375, 0
  store ptr %376, ptr %11, align 8
  %377 = extractvalue { ptr, i32 } %375, 1
  store i32 %377, ptr %12, align 4
  call void @_ZNSt6vectorIN2rl17FidoControlSystem7HistoryESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %49) #6
  br label %378

378:                                              ; preds = %374, %367, %172
  call void @_ZNSt6vectorIN2rl17FidoControlSystem7HistoryESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %22) #6
  br label %379

379:                                              ; preds = %378, %168
  call void @llvm.lifetime.end.p0(i64 24, ptr %22) #6
  br label %380

380:                                              ; preds = %379, %167, %143, %126
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #6
  call void @_ZNSt6vectorIN2rl4WireESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #6
  br label %381

381:                                              ; preds = %380, %125
  call void @llvm.lifetime.end.p0(i64 24, ptr %7) #6
  br label %382

382:                                              ; preds = %381
  %383 = load ptr, ptr %11, align 8
  %384 = load i32, ptr %12, align 4
  %385 = insertvalue { ptr, i32 } poison, ptr %383, 0
  %386 = insertvalue { ptr, i32 } %385, i32 %384, 1
  resume { ptr, i32 } %386

387:                                              ; preds = %337
  unreachable
}

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef double @_ZN2rl17FidoControlSystem8getErrorESt6vectorIdSaIdEES3_(ptr noundef nonnull align 8 dereferenceable(240), ptr noundef, ptr noundef) #0 align 2

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIN2rl17FidoControlSystem7HistoryESaIS2_EE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(80)) #0 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 uwtable
declare dso_local void @_ZN2rl17FidoControlSystem15selectHistoriesEv(ptr dead_on_unwind noalias writable sret(%"class.std::vector.0") align 8, ptr noundef nonnull align 8 dereferenceable(240)) #0 align 2

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

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

declare void @_ZN3net6PrunerC1Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #4

declare void @_ZN3net9NeuralNetC1Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #4

declare void @_ZN3net9NeuralNetC1EPS0_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef) unnamed_addr #4

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

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

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

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

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

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

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

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

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

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

declare void @_ZN3net6Neuron16randomizeWeightsEv(ptr noundef nonnull align 8 dereferenceable(24)) #4

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

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

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

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

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

declare noundef i32 @_ZN3net9NeuralNet21numberOfHiddenNeuronsEv(ptr noundef nonnull align 8 dereferenceable(24)) #4

declare void @_ZN3net6Pruner14pruneRandomnlyEPNS_9NeuralNetE(ptr noundef nonnull align 1 dereferenceable(1), ptr noundef) #4

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZN3net9NeuralNetaSERKS0_(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 noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt6vectorIN3net5LayerESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) #1 align 2

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

declare noundef i32 @_ZN3net9NeuralNet14numberOfInputsEv(ptr noundef nonnull align 8 dereferenceable(24)) #4

declare void @_ZN3net6NeuronC1Ei(ptr noundef nonnull align 8 dereferenceable(24), i32 noundef) unnamed_addr #4

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"double", !7, i64 0}
!11 = !{!12, !10, i64 208}
!12 = !{!"_ZTSN2rl17FidoControlSystemE", !13, i64 0, !10, i64 184, !15, i64 192, !10, i64 200, !10, i64 208, !20, i64 216}
!13 = !{!"_ZTSN2rl13WireFitQLearnE", !14, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !15, i64 32, !15, i64 36, !10, i64 40, !10, i64 48, !10, i64 56, !10, i64 64, !15, i64 72, !15, i64 76, !16, i64 80, !16, i64 104, !16, i64 128, !16, i64 152, !6, i64 176}
!14 = !{!"_ZTSN2rl7LearnerE"}
!15 = !{!"int", !7, i64 0}
!16 = !{!"_ZTSSt6vectorIdSaIdEE", !17, i64 0}
!17 = !{!"_ZTSSt12_Vector_baseIdSaIdEE", !18, i64 0}
!18 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE12_Vector_implE", !19, i64 0}
!19 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!20 = !{!"_ZTSSt6vectorIN2rl17FidoControlSystem7HistoryESaIS2_EE", !21, i64 0}
!21 = !{!"_ZTSSt12_Vector_baseIN2rl17FidoControlSystem7HistoryESaIS2_EE", !22, i64 0}
!22 = !{!"_ZTSNSt12_Vector_baseIN2rl17FidoControlSystem7HistoryESaIS2_EE12_Vector_implE", !23, i64 0}
!23 = !{!"_ZTSNSt12_Vector_baseIN2rl17FidoControlSystem7HistoryESaIS2_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!24 = !{!25, !25, i64 0}
!25 = !{!"bool", !7, i64 0}
!26 = !{!15, !15, i64 0}
!27 = !{!13, !6, i64 8}
!28 = distinct !{!28, !29}
!29 = !{!"llvm.loop.mustprogress"}
!30 = !{i8 0, i8 2}
!31 = !{}


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

%"class.std::basic_ostream" = type { ptr, %"class.std::basic_ios" }
%"class.std::basic_ios" = type { %"class.std::ios_base", ptr, i8, i8, ptr, ptr, ptr, ptr }
%"class.std::ios_base" = type { ptr, i64, i64, i32, i32, i32, ptr, %"struct.std::ios_base::_Words", [8 x %"struct.std::ios_base::_Words"], i32, ptr, %"class.std::locale" }
%"struct.std::ios_base::_Words" = type { ptr, i64 }
%"class.std::locale" = type { ptr }
%"class.std::vector.15" = type { %"struct.std::_Vector_base.16" }
%"struct.std::_Vector_base.16" = type { %"struct.std::_Vector_base<rl::Wire, std::allocator<rl::Wire>>::_Vector_impl" }
%"struct.std::_Vector_base<rl::Wire, std::allocator<rl::Wire>>::_Vector_impl" = type { %"struct.std::_Vector_base<rl::Wire, std::allocator<rl::Wire>>::_Vector_impl_data" }
%"struct.std::_Vector_base<rl::Wire, std::allocator<rl::Wire>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.rl::FidoControlSystem::History" = type { %"class.std::vector", %"class.std::vector", %"class.std::vector", double }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl" }
%"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl" = type { %"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl_data" }
%"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.0" = type { %"struct.std::_Vector_base.1" }
%"struct.std::_Vector_base.1" = type { %"struct.std::_Vector_base<rl::FidoControlSystem::History, std::allocator<rl::FidoControlSystem::History>>::_Vector_impl" }
%"struct.std::_Vector_base<rl::FidoControlSystem::History, std::allocator<rl::FidoControlSystem::History>>::_Vector_impl" = type { %"struct.std::_Vector_base<rl::FidoControlSystem::History, std::allocator<rl::FidoControlSystem::History>>::_Vector_impl_data" }
%"struct.std::_Vector_base<rl::FidoControlSystem::History, std::allocator<rl::FidoControlSystem::History>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.net::Pruner" = type { i8 }
%"class.net::NeuralNet" = type { %"class.std::vector.20" }
%"class.std::vector.20" = type { %"struct.std::_Vector_base.21" }
%"struct.std::_Vector_base.21" = type { %"struct.std::_Vector_base<net::Layer, std::allocator<net::Layer>>::_Vector_impl" }
%"struct.std::_Vector_base<net::Layer, std::allocator<net::Layer>>::_Vector_impl" = type { %"struct.std::_Vector_base<net::Layer, std::allocator<net::Layer>>::_Vector_impl_data" }
%"struct.std::_Vector_base<net::Layer, std::allocator<net::Layer>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.__gnu_cxx::__normal_iterator" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.30" = type { ptr }
%"class.net::Neuron" = type { %"class.std::vector" }

@_ZSt4cout = external global %"class.std::basic_ostream", align 8
@.str = external hidden unnamed_addr constant [31 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [19 x i8], align 1

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

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN2rl17FidoControlSystem30applyReinforcementToLastActionEdSt6vectorIdSaIdEE(ptr noundef nonnull align 8 dereferenceable(240) %0, double noundef %1, ptr noundef %2) unnamed_addr #0 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca %"class.std::vector.15", align 8
  %5 = alloca %"struct.rl::FidoControlSystem::History", align 8
  %6 = alloca %"class.std::vector", align 8
  %7 = alloca %"class.std::vector", align 8
  %8 = alloca %"class.std::vector", align 8
  %9 = alloca %"class.std::vector", align 8
  %10 = alloca %"class.std::vector", align 8
  %11 = alloca %"class.std::vector.15", align 8
  %12 = alloca %"struct.rl::FidoControlSystem::History", align 8
  %13 = alloca %"class.std::vector", align 8
  %14 = alloca %"class.std::vector", align 8
  %15 = alloca %"class.std::vector", align 8
  %16 = alloca %"class.std::vector.0", align 8
  %17 = alloca %"class.net::Pruner", align 1
  %18 = alloca %"class.net::NeuralNet", align 8
  %19 = alloca %"class.net::NeuralNet", align 8
  %20 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %21 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %22 = alloca %"class.__gnu_cxx::__normal_iterator.30", align 8
  %23 = alloca %"class.__gnu_cxx::__normal_iterator.30", align 8
  %24 = alloca %"class.std::vector.0", align 8
  %25 = alloca %"class.std::vector.0", align 8
  %26 = alloca %"class.net::Neuron", align 8
  %27 = alloca %"class.__gnu_cxx::__normal_iterator.30", align 8
  %28 = alloca %"class.__gnu_cxx::__normal_iterator.30", align 8
  %29 = alloca double, align 8
  %30 = alloca %"class.std::vector.0", align 8
  %31 = alloca %"class.std::vector.0", align 8
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %4) #6
  %32 = getelementptr inbounds i8, ptr %0, i64 80
  call void @_ZNSt6vectorIdSaIdEEC2ERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %6, ptr noundef nonnull align 8 dereferenceable(24) %32)
  invoke void @_ZNSt6vectorIdSaIdEEC2ERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %7, ptr noundef nonnull align 8 dereferenceable(24) %2)
          to label %33 unwind label %66

33:                                               ; preds = %3
  %34 = getelementptr inbounds i8, ptr %0, i64 152
  invoke void @_ZNSt6vectorIdSaIdEEC2ERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %8, ptr noundef nonnull align 8 dereferenceable(24) %34)
          to label %35 unwind label %68

35:                                               ; preds = %33
  invoke void @_ZN2rl17FidoControlSystem7HistoryC2ESt6vectorIdSaIdEES4_S4_d(ptr noundef nonnull align 8 dereferenceable(80) %5, ptr noundef nonnull %6, ptr noundef nonnull %7, ptr noundef nonnull %8, double noundef %1)
          to label %36 unwind label %70

36:                                               ; preds = %35
  invoke void @_ZN2rl17FidoControlSystem25newControlWiresForHistoryENS0_7HistoryE(ptr dead_on_unwind nonnull writable sret(%"class.std::vector.15") align 8 %4, ptr noundef nonnull align 8 dereferenceable(240) %0, ptr noundef nonnull %5)
          to label %37 unwind label %72

37:                                               ; preds = %36
  call void @_ZN2rl17FidoControlSystem7HistoryD2Ev(ptr noundef nonnull align 8 dereferenceable(80) %5) #6
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %8) #6
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #6
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %6) #6
  invoke void @_ZNSt6vectorIdSaIdEEC2ERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %9, ptr noundef nonnull align 8 dereferenceable(24) %32)
          to label %38 unwind label %77

38:                                               ; preds = %37
  invoke void @_ZNSt6vectorIN2rl4WireESaIS1_EEC2ERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %11, ptr noundef nonnull align 8 dereferenceable(24) %4)
          to label %39 unwind label %79

39:                                               ; preds = %38
  invoke void @_ZN2rl13WireFitQLearn12getRawOutputESt6vectorINS_4WireESaIS2_EE(ptr dead_on_unwind nonnull writable sret(%"class.std::vector") align 8 %10, ptr noundef nonnull align 8 dereferenceable(184) %0, ptr noundef nonnull %11)
          to label %40 unwind label %81

40:                                               ; preds = %39
  %41 = invoke noundef double @_ZN2rl17FidoControlSystem8getErrorESt6vectorIdSaIdEES3_(ptr noundef nonnull align 8 dereferenceable(240) %0, ptr noundef nonnull %9, ptr noundef nonnull %10)
          to label %42 unwind label %83

42:                                               ; preds = %40
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #6
  call void @_ZNSt6vectorIN2rl4WireESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #6
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %9) #6
  invoke void @_ZN2rl17FidoControlSystem17adjustExplorationEd(ptr noundef nonnull align 8 dereferenceable(240) %0, double noundef %41)
          to label %43 unwind label %77

43:                                               ; preds = %42
  %44 = getelementptr inbounds i8, ptr %0, i64 208
  store double %41, ptr %44, align 8, !tbaa !5
  %45 = getelementptr inbounds i8, ptr %0, i64 216
  call void @llvm.lifetime.start.p0(i64 80, ptr nonnull %12) #6
  invoke void @_ZNSt6vectorIdSaIdEEC2ERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %13, ptr noundef nonnull align 8 dereferenceable(24) %32)
          to label %46 unwind label %87

46:                                               ; preds = %43
  invoke void @_ZNSt6vectorIdSaIdEEC2ERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %14, ptr noundef nonnull align 8 dereferenceable(24) %2)
          to label %47 unwind label %89

47:                                               ; preds = %46
  invoke void @_ZNSt6vectorIdSaIdEEC2ERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %15, ptr noundef nonnull align 8 dereferenceable(24) %34)
          to label %48 unwind label %91

48:                                               ; preds = %47
  invoke void @_ZN2rl17FidoControlSystem7HistoryC2ESt6vectorIdSaIdEES4_S4_d(ptr noundef nonnull align 8 dereferenceable(80) %12, ptr noundef nonnull %13, ptr noundef nonnull %14, ptr noundef nonnull %15, double noundef %1)
          to label %49 unwind label %93

49:                                               ; preds = %48
  invoke void @_ZNSt6vectorIN2rl17FidoControlSystem7HistoryESaIS2_EE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(24) %45, ptr noundef nonnull align 8 dereferenceable(80) %12)
          to label %50 unwind label %95

50:                                               ; preds = %49
  call void @_ZN2rl17FidoControlSystem7HistoryD2Ev(ptr noundef nonnull align 8 dereferenceable(80) %12) #6
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %15) #6
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %14) #6
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #6
  call void @llvm.lifetime.end.p0(i64 80, ptr nonnull %12) #6
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %16) #6
  invoke void @_ZN2rl17FidoControlSystem15selectHistoriesEv(ptr dead_on_unwind nonnull writable sret(%"class.std::vector.0") align 8 %16, ptr noundef nonnull align 8 dereferenceable(240) %0)
          to label %51 unwind label %101

51:                                               ; preds = %50
  %52 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str)
          to label %53 unwind label %103

53:                                               ; preds = %51
  %54 = call noundef i64 @_ZNKSt6vectorIN2rl17FidoControlSystem7HistoryESaIS2_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %16) #6
  %55 = icmp ugt i64 %54, 3
  br i1 %55, label %56, label %206

56:                                               ; preds = %53
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %17) #6
  invoke void @_ZN3net6PrunerC1Ev(ptr noundef nonnull align 1 dereferenceable(1) %17)
          to label %57 unwind label %105

57:                                               ; preds = %56
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %18) #6
  invoke void @_ZN3net9NeuralNetC1Ev(ptr noundef nonnull align 8 dereferenceable(24) %18)
          to label %.preheader unwind label %107

.preheader:                                       ; preds = %57
  %58 = getelementptr inbounds i8, ptr %0, i64 8
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %19) #6
  %59 = load ptr, ptr %58, align 8, !tbaa !22
  invoke void @_ZN3net9NeuralNetC1EPS0_(ptr noundef nonnull align 8 dereferenceable(24) %19, ptr noundef %59)
          to label %60 unwind label %109

60:                                               ; preds = %.preheader
  %61 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZN3net9NeuralNetaSEOS0_(ptr noundef nonnull align 8 dereferenceable(24) %18, ptr noundef nonnull align 8 dereferenceable(24) %19) #6
  call void @_ZN3net9NeuralNetD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %19) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %19) #6
  %62 = load ptr, ptr %58, align 8, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %20) #6
  %63 = call ptr @_ZNSt6vectorIN3net5LayerESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %62) #6
  store ptr %63, ptr %20, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %21) #6
  %64 = call ptr @_ZNSt6vectorIN3net5LayerESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %62) #6
  store ptr %64, ptr %21, align 8
  %65 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3net5LayerESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %20, ptr noundef nonnull align 8 dereferenceable(8) %21) #6
  br i1 %65, label %.lr.ph115, label %._crit_edge116

._crit_edge116:                                   ; preds = %._crit_edge, %60
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #6
  invoke void @_ZNSt6vectorIN2rl17FidoControlSystem7HistoryESaIS2_EEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(24) %24, ptr noundef nonnull align 8 dereferenceable(24) %16)
          to label %124 unwind label %139

66:                                               ; preds = %3
  %67 = landingpad { ptr, i32 }
          cleanup
  br label %76

68:                                               ; preds = %33
  %69 = landingpad { ptr, i32 }
          cleanup
  br label %75

70:                                               ; preds = %35
  %71 = landingpad { ptr, i32 }
          cleanup
  br label %74

72:                                               ; preds = %36
  %73 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN2rl17FidoControlSystem7HistoryD2Ev(ptr noundef nonnull align 8 dereferenceable(80) %5) #6
  br label %74

74:                                               ; preds = %72, %70
  %.pn = phi { ptr, i32 } [ %73, %72 ], [ %71, %70 ]
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %8) #6
  br label %75

75:                                               ; preds = %74, %68
  %.pn.pn = phi { ptr, i32 } [ %.pn, %74 ], [ %69, %68 ]
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #6
  br label %76

76:                                               ; preds = %75, %66
  %.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn, %75 ], [ %67, %66 ]
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %6) #6
  br label %217

77:                                               ; preds = %42, %37
  %78 = landingpad { ptr, i32 }
          cleanup
  br label %216

79:                                               ; preds = %38
  %80 = landingpad { ptr, i32 }
          cleanup
  br label %86

81:                                               ; preds = %39
  %82 = landingpad { ptr, i32 }
          cleanup
  br label %85

83:                                               ; preds = %40
  %84 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #6
  br label %85

85:                                               ; preds = %83, %81
  %.pn59 = phi { ptr, i32 } [ %84, %83 ], [ %82, %81 ]
  call void @_ZNSt6vectorIN2rl4WireESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #6
  br label %86

86:                                               ; preds = %85, %79
  %.pn59.pn = phi { ptr, i32 } [ %.pn59, %85 ], [ %80, %79 ]
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %9) #6
  br label %216

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

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

91:                                               ; preds = %47
  %92 = landingpad { ptr, i32 }
          cleanup
  br label %98

93:                                               ; preds = %48
  %94 = landingpad { ptr, i32 }
          cleanup
  br label %97

95:                                               ; preds = %49
  %96 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN2rl17FidoControlSystem7HistoryD2Ev(ptr noundef nonnull align 8 dereferenceable(80) %12) #6
  br label %97

97:                                               ; preds = %95, %93
  %.pn62 = phi { ptr, i32 } [ %96, %95 ], [ %94, %93 ]
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %15) #6
  br label %98

98:                                               ; preds = %97, %91
  %.pn62.pn = phi { ptr, i32 } [ %.pn62, %97 ], [ %92, %91 ]
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %14) #6
  br label %99

99:                                               ; preds = %98, %89
  %.pn62.pn.pn = phi { ptr, i32 } [ %.pn62.pn, %98 ], [ %90, %89 ]
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #6
  br label %100

100:                                              ; preds = %99, %87
  %.pn62.pn.pn.pn = phi { ptr, i32 } [ %.pn62.pn.pn, %99 ], [ %88, %87 ]
  call void @llvm.lifetime.end.p0(i64 80, ptr nonnull %12) #6
  br label %216

101:                                              ; preds = %50
  %102 = landingpad { ptr, i32 }
          cleanup
  br label %215

103:                                              ; preds = %208, %206, %51
  %104 = landingpad { ptr, i32 }
          cleanup
  br label %214

105:                                              ; preds = %56
  %106 = landingpad { ptr, i32 }
          cleanup
  br label %205

107:                                              ; preds = %57
  %108 = landingpad { ptr, i32 }
          cleanup
  br label %204

109:                                              ; preds = %.preheader
  %110 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %19) #6
  br label %203

.lr.ph115:                                        ; preds = %60, %._crit_edge
  %111 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3net5LayerESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %20) #6
  %112 = getelementptr inbounds i8, ptr %111, i64 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %22) #6
  %113 = call ptr @_ZNSt6vectorIN3net6NeuronESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %112) #6
  store ptr %113, ptr %22, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %23) #6
  %114 = call ptr @_ZNSt6vectorIN3net6NeuronESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %112) #6
  store ptr %114, ptr %23, align 8
  %115 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3net6NeuronESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %22, ptr noundef nonnull align 8 dereferenceable(8) %23) #6
  br i1 %115, label %.lr.ph, label %._crit_edge

._crit_edge:                                      ; preds = %119, %.lr.ph115
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #6
  %116 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3net5LayerESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %20) #6
  %117 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3net5LayerESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %20, ptr noundef nonnull align 8 dereferenceable(8) %21) #6
  br i1 %117, label %.lr.ph115, label %._crit_edge116

.lr.ph:                                           ; preds = %.lr.ph115, %119
  %118 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3net6NeuronESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %22) #6
  invoke void @_ZN3net6Neuron16randomizeWeightsEv(ptr noundef nonnull align 8 dereferenceable(24) %118)
          to label %119 unwind label %122

119:                                              ; preds = %.lr.ph
  %120 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3net6NeuronESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %22) #6
  %121 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3net6NeuronESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %22, ptr noundef nonnull align 8 dereferenceable(8) %23) #6
  br i1 %121, label %.lr.ph, label %._crit_edge

122:                                              ; preds = %.lr.ph
  %123 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #6
  br label %203

124:                                              ; preds = %._crit_edge116
  %125 = invoke noundef double @_ZN2rl17FidoControlSystem16trainOnHistoriesESt6vectorINS0_7HistoryESaIS2_EEdj(ptr noundef nonnull align 8 dereferenceable(240) %0, ptr noundef nonnull %24, double noundef 1.000000e-03, i32 noundef 1)
          to label %126 unwind label %141

126:                                              ; preds = %124
  call void @_ZNSt6vectorIN2rl17FidoControlSystem7HistoryESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %24) #6
  %127 = load ptr, ptr %58, align 8, !tbaa !22
  %128 = invoke noundef i32 @_ZN3net9NeuralNet21numberOfHiddenNeuronsEv(ptr noundef nonnull align 8 dereferenceable(24) %127)
          to label %129 unwind label %139

129:                                              ; preds = %126
  %130 = icmp ugt i32 %128, 4
  br i1 %130, label %131, label %147

131:                                              ; preds = %129
  %132 = load ptr, ptr %58, align 8, !tbaa !22
  invoke void @_ZN3net6Pruner14pruneRandomnlyEPNS_9NeuralNetE(ptr noundef nonnull align 1 dereferenceable(1) %17, ptr noundef %132)
          to label %133 unwind label %139

133:                                              ; preds = %131
  invoke void @_ZNSt6vectorIN2rl17FidoControlSystem7HistoryESaIS2_EEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(24) %25, ptr noundef nonnull align 8 dereferenceable(24) %16)
          to label %134 unwind label %143

134:                                              ; preds = %133
  %135 = invoke noundef double @_ZN2rl17FidoControlSystem16trainOnHistoriesESt6vectorINS0_7HistoryESaIS2_EEdj(ptr noundef nonnull align 8 dereferenceable(240) %0, ptr noundef nonnull %25, double noundef 1.000000e-03, i32 noundef 1)
          to label %136 unwind label %145

136:                                              ; preds = %134
  call void @_ZNSt6vectorIN2rl17FidoControlSystem7HistoryESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %25) #6
  %137 = fmul double %135, 1.050000e+00
  %138 = fcmp uge double %137, %125
  br i1 %138, label %147, label %.critedge

139:                                              ; preds = %147, %131, %126, %._crit_edge116
  %140 = landingpad { ptr, i32 }
          cleanup
  br label %203

141:                                              ; preds = %124
  %142 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt6vectorIN2rl17FidoControlSystem7HistoryESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %24) #6
  br label %203

143:                                              ; preds = %133
  %144 = landingpad { ptr, i32 }
          cleanup
  br label %203

145:                                              ; preds = %134
  %146 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt6vectorIN2rl17FidoControlSystem7HistoryESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %25) #6
  br label %203

147:                                              ; preds = %136, %129
  %148 = load ptr, ptr %58, align 8, !tbaa !22
  %149 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3net9NeuralNetaSERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %148, ptr noundef nonnull align 8 dereferenceable(24) %18)
          to label %150 unwind label %139

150:                                              ; preds = %147
  %151 = load ptr, ptr %58, align 8, !tbaa !22
  %152 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt6vectorIN3net5LayerESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %151, i64 noundef 0) #6
  %153 = getelementptr inbounds i8, ptr %152, i64 8
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %26) #6
  %154 = load ptr, ptr %58, align 8, !tbaa !22
  %155 = invoke noundef i32 @_ZN3net9NeuralNet14numberOfInputsEv(ptr noundef nonnull align 8 dereferenceable(24) %154)
          to label %156 unwind label %165

156:                                              ; preds = %150
  invoke void @_ZN3net6NeuronC1Ei(ptr noundef nonnull align 8 dereferenceable(24) %26, i32 noundef %155)
          to label %157 unwind label %165

157:                                              ; preds = %156
  invoke void @_ZNSt6vectorIN3net6NeuronESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %153, ptr noundef nonnull align 8 dereferenceable(24) %26)
          to label %158 unwind label %167

158:                                              ; preds = %157
  call void @_ZN3net6NeuronD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %26) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %26) #6
  %159 = load ptr, ptr %58, align 8, !tbaa !22
  %160 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt6vectorIN3net5LayerESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %159, i64 noundef 1) #6
  %161 = getelementptr inbounds i8, ptr %160, i64 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %27) #6
  %162 = call ptr @_ZNSt6vectorIN3net6NeuronESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %161) #6
  store ptr %162, ptr %27, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %28) #6
  %163 = call ptr @_ZNSt6vectorIN3net6NeuronESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %161) #6
  store ptr %163, ptr %28, align 8
  %164 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3net6NeuronESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %27, ptr noundef nonnull align 8 dereferenceable(8) %28) #6
  br i1 %164, label %.lr.ph118, label %._crit_edge119

._crit_edge119:                                   ; preds = %172, %158
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %28) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %27) #6
  invoke void @_ZNSt6vectorIN2rl17FidoControlSystem7HistoryESaIS2_EEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(24) %30, ptr noundef nonnull align 8 dereferenceable(24) %16)
          to label %180 unwind label %.loopexit

165:                                              ; preds = %156, %150
  %166 = landingpad { ptr, i32 }
          cleanup
  br label %169

167:                                              ; preds = %157
  %168 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3net6NeuronD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %26) #6
  br label %169

169:                                              ; preds = %167, %165
  %.pn69 = phi { ptr, i32 } [ %168, %167 ], [ %166, %165 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %26) #6
  br label %203

.lr.ph118:                                        ; preds = %158, %172
  %170 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3net6NeuronESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %27) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %29) #6
  store double 1.000000e+00, ptr %29, align 8, !tbaa !23
  invoke void @_ZNSt6vectorIdSaIdEE9push_backEOd(ptr noundef nonnull align 8 dereferenceable(24) %170, ptr noundef nonnull align 8 dereferenceable(8) %29)
          to label %171 unwind label %175

171:                                              ; preds = %.lr.ph118
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %29) #6
  invoke void @_ZN3net6Neuron16randomizeWeightsEv(ptr noundef nonnull align 8 dereferenceable(24) %170)
          to label %172 unwind label %177

172:                                              ; preds = %171
  %173 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3net6NeuronESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %27) #6
  %174 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3net6NeuronESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %27, ptr noundef nonnull align 8 dereferenceable(8) %28) #6
  br i1 %174, label %.lr.ph118, label %._crit_edge119

175:                                              ; preds = %.lr.ph118
  %176 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %29) #6
  br label %179

177:                                              ; preds = %171
  %178 = landingpad { ptr, i32 }
          cleanup
  br label %179

179:                                              ; preds = %177, %175
  %.pn73 = phi { ptr, i32 } [ %178, %177 ], [ %176, %175 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %28) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %27) #6
  br label %203

180:                                              ; preds = %._crit_edge119
  %181 = invoke noundef double @_ZN2rl17FidoControlSystem16trainOnHistoriesESt6vectorINS0_7HistoryESaIS2_EEdj(ptr noundef nonnull align 8 dereferenceable(240) %0, ptr noundef nonnull %30, double noundef 1.000000e-03, i32 noundef 1)
          to label %182 unwind label %185

182:                                              ; preds = %180
  call void @_ZNSt6vectorIN2rl17FidoControlSystem7HistoryESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %30) #6
  %183 = fmul double %181, 1.050000e+00
  %184 = fcmp olt double %183, %125
  br i1 %184, label %.critedge, label %187, !llvm.loop !24

.loopexit:                                        ; preds = %._crit_edge119
  %lpad.loopexit = landingpad { ptr, i32 }
          cleanup
  br label %203

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

185:                                              ; preds = %180
  %186 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt6vectorIN2rl17FidoControlSystem7HistoryESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %30) #6
  br label %203

187:                                              ; preds = %182
  %188 = load ptr, ptr %58, align 8, !tbaa !22
  %189 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3net9NeuralNetaSERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %188, ptr noundef nonnull align 8 dereferenceable(24) %18)
          to label %.thread unwind label %.loopexit.split-lp

.thread:                                          ; preds = %187
  %190 = load ptr, ptr %58, align 8, !tbaa !22
  %191 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3net9NeuralNetaSERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %190, ptr noundef nonnull align 8 dereferenceable(24) %18)
          to label %.critedge unwind label %192

192:                                              ; preds = %200, %198, %195, %.critedge, %.thread
  %193 = landingpad { ptr, i32 }
          cleanup
  br label %203

.critedge:                                        ; preds = %182, %136, %.thread
  %194 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.1)
          to label %195 unwind label %192

195:                                              ; preds = %.critedge
  %196 = load ptr, ptr %58, align 8, !tbaa !22
  %197 = invoke noundef i32 @_ZN3net9NeuralNet21numberOfHiddenNeuronsEv(ptr noundef nonnull align 8 dereferenceable(24) %196)
          to label %198 unwind label %192

198:                                              ; preds = %195
  %199 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %194, i32 noundef %197)
          to label %200 unwind label %192

200:                                              ; preds = %198
  %201 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %199, ptr noundef nonnull @.str.2)
          to label %202 unwind label %192

202:                                              ; preds = %200
  call void @_ZN3net9NeuralNetD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %18) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %18) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %17) #6
  br label %206

203:                                              ; preds = %.loopexit, %.loopexit.split-lp, %139, %141, %169, %179, %145, %143, %185, %192, %122, %109
  %.pn76 = phi { ptr, i32 } [ %123, %122 ], [ %193, %192 ], [ %110, %109 ], [ %.pn73, %179 ], [ %.pn69, %169 ], [ %140, %139 ], [ %142, %141 ], [ %146, %145 ], [ %144, %143 ], [ %186, %185 ], [ %lpad.loopexit, %.loopexit ], [ %lpad.loopexit.split-lp, %.loopexit.split-lp ]
  call void @_ZN3net9NeuralNetD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %18) #6
  br label %204

204:                                              ; preds = %203, %107
  %.pn76.pn = phi { ptr, i32 } [ %.pn76, %203 ], [ %108, %107 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %18) #6
  br label %205

205:                                              ; preds = %204, %105
  %.pn76.pn.pn = phi { ptr, i32 } [ %.pn76.pn, %204 ], [ %106, %105 ]
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %17) #6
  br label %214

206:                                              ; preds = %202, %53
  %207 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.3)
          to label %208 unwind label %103

208:                                              ; preds = %206
  invoke void @_ZNSt6vectorIN2rl17FidoControlSystem7HistoryESaIS2_EEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(24) %31, ptr noundef nonnull align 8 dereferenceable(24) %16)
          to label %209 unwind label %103

209:                                              ; preds = %208
  %210 = invoke noundef double @_ZN2rl17FidoControlSystem16trainOnHistoriesESt6vectorINS0_7HistoryESaIS2_EEdj(ptr noundef nonnull align 8 dereferenceable(240) %0, ptr noundef nonnull %31, double noundef 2.000000e-02, i32 noundef 100)
          to label %211 unwind label %212

211:                                              ; preds = %209
  call void @_ZNSt6vectorIN2rl17FidoControlSystem7HistoryESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %31) #6
  call void @_ZNSt6vectorIN2rl17FidoControlSystem7HistoryESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %16) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %16) #6
  call void @_ZNSt6vectorIN2rl4WireESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %4) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) #6
  ret void

212:                                              ; preds = %209
  %213 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt6vectorIN2rl17FidoControlSystem7HistoryESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %31) #6
  br label %214

214:                                              ; preds = %212, %205, %103
  %.pn76.pn.pn.pn = phi { ptr, i32 } [ %.pn76.pn.pn, %205 ], [ %213, %212 ], [ %104, %103 ]
  call void @_ZNSt6vectorIN2rl17FidoControlSystem7HistoryESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %16) #6
  br label %215

215:                                              ; preds = %214, %101
  %.pn76.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn76.pn.pn.pn, %214 ], [ %102, %101 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %16) #6
  br label %216

216:                                              ; preds = %215, %100, %86, %77
  %.pn76.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn76.pn.pn.pn.pn, %215 ], [ %.pn62.pn.pn.pn, %100 ], [ %78, %77 ], [ %.pn59.pn, %86 ]
  call void @_ZNSt6vectorIN2rl4WireESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %4) #6
  br label %217

217:                                              ; preds = %216, %76
  %.pn76.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn76.pn.pn.pn.pn.pn, %216 ], [ %.pn.pn.pn, %76 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) #6
  resume { ptr, i32 } %.pn76.pn.pn.pn.pn.pn.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: mustprogress uwtable
declare dso_local void @_ZN2rl17FidoControlSystem25newControlWiresForHistoryENS0_7HistoryE(ptr dead_on_unwind noalias writable sret(%"class.std::vector.15") align 8, ptr noundef nonnull align 8 dereferenceable(240), ptr noundef) local_unnamed_addr #0 align 2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef double @_ZN2rl17FidoControlSystem8getErrorESt6vectorIdSaIdEES3_(ptr noundef nonnull align 8 dereferenceable(240), ptr noundef, ptr noundef) local_unnamed_addr #0 align 2

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIN2rl17FidoControlSystem7HistoryESaIS2_EE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(80)) local_unnamed_addr #0 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 uwtable
declare dso_local void @_ZN2rl17FidoControlSystem15selectHistoriesEv(ptr dead_on_unwind noalias writable sret(%"class.std::vector.0") align 8, ptr noundef nonnull align 8 dereferenceable(240)) local_unnamed_addr #0 align 2

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

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

declare void @_ZN3net6PrunerC1Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #4

declare void @_ZN3net9NeuralNetC1Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #4

declare void @_ZN3net9NeuralNetC1EPS0_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef) unnamed_addr #4

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

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

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

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

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

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

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

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

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

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

declare void @_ZN3net6Neuron16randomizeWeightsEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #4

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

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

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

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

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

declare noundef i32 @_ZN3net9NeuralNet21numberOfHiddenNeuronsEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #4

declare void @_ZN3net6Pruner14pruneRandomnlyEPNS_9NeuralNetE(ptr noundef nonnull align 1 dereferenceable(1), ptr noundef) local_unnamed_addr #4

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZN3net9NeuralNetaSERKS0_(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 noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt6vectorIN3net5LayerESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) local_unnamed_addr #1 align 2

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

declare noundef i32 @_ZN3net9NeuralNet14numberOfInputsEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #4

declare void @_ZN3net6NeuronC1Ei(ptr noundef nonnull align 8 dereferenceable(24), i32 noundef) unnamed_addr #4

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

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

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

attributes #0 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { mustprogress 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 #2 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { 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 #4 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { 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, !13, i64 208}
!6 = !{!"_ZTSN2rl17FidoControlSystemE", !7, i64 0, !13, i64 184, !12, i64 192, !13, i64 200, !13, i64 208, !18, i64 216}
!7 = !{!"_ZTSN2rl13WireFitQLearnE", !8, i64 0, !9, i64 8, !9, i64 16, !9, i64 24, !12, i64 32, !12, i64 36, !13, i64 40, !13, i64 48, !13, i64 56, !13, i64 64, !12, i64 72, !12, i64 76, !14, i64 80, !14, i64 104, !14, i64 128, !14, i64 152, !9, i64 176}
!8 = !{!"_ZTSN2rl7LearnerE"}
!9 = !{!"any pointer", !10, i64 0}
!10 = !{!"omnipotent char", !11, i64 0}
!11 = !{!"Simple C++ TBAA"}
!12 = !{!"int", !10, i64 0}
!13 = !{!"double", !10, i64 0}
!14 = !{!"_ZTSSt6vectorIdSaIdEE", !15, i64 0}
!15 = !{!"_ZTSSt12_Vector_baseIdSaIdEE", !16, i64 0}
!16 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE12_Vector_implE", !17, i64 0}
!17 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE17_Vector_impl_dataE", !9, i64 0, !9, i64 8, !9, i64 16}
!18 = !{!"_ZTSSt6vectorIN2rl17FidoControlSystem7HistoryESaIS2_EE", !19, i64 0}
!19 = !{!"_ZTSSt12_Vector_baseIN2rl17FidoControlSystem7HistoryESaIS2_EE", !20, i64 0}
!20 = !{!"_ZTSNSt12_Vector_baseIN2rl17FidoControlSystem7HistoryESaIS2_EE12_Vector_implE", !21, i64 0}
!21 = !{!"_ZTSNSt12_Vector_baseIN2rl17FidoControlSystem7HistoryESaIS2_EE17_Vector_impl_dataE", !9, i64 0, !9, i64 8, !9, i64 16}
!22 = !{!7, !9, i64 8}
!23 = !{!13, !13, i64 0}
!24 = distinct !{!24, !25}
!25 = !{!"llvm.loop.mustprogress"}


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