; LLVM IR from CRAFT-THU/BSim :: test/gpu (convolution_test)

; 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.Network = type { %"class.std::vector", %"class.std::vector.0", %"class.std::vector.5", i32, i32, i32, float, float, %"class.std::vector.10", %"class.std::vector.10", i32, %"class.std::vector.15", %"class.std::vector.15", %"class.std::vector.15" }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<NeuronBase *, std::allocator<NeuronBase *>>::_Vector_impl" }
%"struct.std::_Vector_base<NeuronBase *, std::allocator<NeuronBase *>>::_Vector_impl" = type { %"struct.std::_Vector_base<NeuronBase *, std::allocator<NeuronBase *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<NeuronBase *, std::allocator<NeuronBase *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.0" = type { %"struct.std::_Vector_base.1" }
%"struct.std::_Vector_base.1" = type { %"struct.std::_Vector_base<PopulationBase *, std::allocator<PopulationBase *>>::_Vector_impl" }
%"struct.std::_Vector_base<PopulationBase *, std::allocator<PopulationBase *>>::_Vector_impl" = type { %"struct.std::_Vector_base<PopulationBase *, std::allocator<PopulationBase *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<PopulationBase *, std::allocator<PopulationBase *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.5" = type { %"struct.std::_Vector_base.6" }
%"struct.std::_Vector_base.6" = type { %"struct.std::_Vector_base<SynapseBase *, std::allocator<SynapseBase *>>::_Vector_impl" }
%"struct.std::_Vector_base<SynapseBase *, std::allocator<SynapseBase *>>::_Vector_impl" = type { %"struct.std::_Vector_base<SynapseBase *, std::allocator<SynapseBase *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<SynapseBase *, std::allocator<SynapseBase *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.10" = type { %"struct.std::_Vector_base.11" }
%"struct.std::_Vector_base.11" = type { %"struct.std::_Vector_base<Type, std::allocator<Type>>::_Vector_impl" }
%"struct.std::_Vector_base<Type, std::allocator<Type>>::_Vector_impl" = type { %"struct.std::_Vector_base<Type, std::allocator<Type>>::_Vector_impl_data" }
%"struct.std::_Vector_base<Type, std::allocator<Type>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.15" = type { %"struct.std::_Vector_base.16" }
%"struct.std::_Vector_base.16" = type { %"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl" }
%"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl" = type { %"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%class.CompositeNeuron = type { %class.ConstantNeuron, float, float }
%class.ConstantNeuron = type { %class.NeuronBase.base, float, i32, i32, float, float, ptr }
%class.NeuronBase.base = type <{ %class.Base, %"class.std::vector.5", i8, i8, [2 x i8], i32, float }>
%class.Base = type { ptr, i32, i32 }
%class.CompositeNeuron.25 = type { %class.MemNeuron, float, float }
%class.MemNeuron = type { %class.NeuronBase.base, float, ptr }
%class.SingleGPUSimulator = type { %class.SimulatorBase.base, [4 x i8] }
%class.SimulatorBase.base = type <{ ptr, ptr, float }>
%struct.ArrayInfo = type { i32, ptr }
%"class.std::map" = type { %"class.std::_Rb_tree" }
%"class.std::_Rb_tree" = type { %"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::pair<const std::__cxx11::basic_string<char>, ArrayInfo>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, ArrayInfo>>, std::less<std::__cxx11::basic_string<char>>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::pair<const std::__cxx11::basic_string<char>, ArrayInfo>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, ArrayInfo>>, std::less<std::__cxx11::basic_string<char>>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"struct.std::_Rb_tree_header" = type { %"struct.std::_Rb_tree_node_base", i64 }
%"struct.std::_Rb_tree_node_base" = type { i32, ptr, ptr, ptr }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.std::allocator.29" = type { i8 }

@.str = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [8 x i8], align 1

; Function Attrs: mustprogress norecurse uwtable
define dso_local noundef i32 @main(i32 noundef %0, ptr noundef %1) #0 personality ptr @__gxx_personality_v0 {
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca i8, align 1
  %7 = alloca %class.Network, align 8
  %8 = alloca ptr, align 8
  %9 = alloca %class.CompositeNeuron, align 8
  %10 = alloca %class.ConstantNeuron, align 8
  %11 = alloca ptr, align 8
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca %class.CompositeNeuron.25, align 8
  %17 = alloca %class.MemNeuron, align 8
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca %class.SingleGPUSimulator, align 8
  %21 = alloca %struct.ArrayInfo, align 8
  %22 = alloca %"class.std::map", align 8
  %23 = alloca %"class.std::__cxx11::basic_string", align 8
  %24 = alloca %"class.std::allocator.29", align 1
  %25 = alloca %"class.std::__cxx11::basic_string", align 8
  %26 = alloca %"class.std::allocator.29", align 1
  %27 = alloca ptr, align 8
  %28 = alloca %"class.std::__cxx11::basic_string", align 8
  %29 = alloca %"class.std::allocator.29", align 1
  %30 = alloca ptr, align 8
  %31 = alloca %"class.std::__cxx11::basic_string", align 8
  %32 = alloca %"class.std::allocator.29", align 1
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca i32, align 4
  %37 = alloca i32, align 4
  %38 = alloca i32, align 4
  %39 = alloca i32, align 4
  %40 = alloca i32, align 4
  %41 = alloca i32, align 4
  %42 = alloca float, align 4
  %43 = alloca i32, align 4
  %44 = alloca i32, align 4
  store i32 0, ptr %3, align 4
  store i32 %0, ptr %4, align 4, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %6) #11
  store i8 0, ptr %6, align 1, !tbaa !11
  %45 = load i32, ptr %4, align 4, !tbaa !5
  %46 = icmp sgt i32 %45, 1
  br i1 %46, label %47, label %54

47:                                               ; preds = %2
  %48 = load ptr, ptr %5, align 8, !tbaa !9
  %49 = getelementptr inbounds ptr, ptr %48, i64 1
  %50 = load ptr, ptr %49, align 8, !tbaa !9
  %51 = call i32 @strcmp(ptr noundef %50, ptr noundef @.str) #12
  %52 = icmp eq i32 0, %51
  br i1 %52, label %53, label %54

53:                                               ; preds = %47
  store i8 1, ptr %6, align 1, !tbaa !11
  br label %54

54:                                               ; preds = %53, %47, %2
  call void @llvm.lifetime.start.p0(i64 224, ptr %7) #11
  call void @_ZN7NetworkC1Ev(ptr noundef nonnull align 8 dereferenceable(224) %7)
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #11
  call void @llvm.lifetime.start.p0(i64 80, ptr %10) #11
  invoke void @_ZN14ConstantNeuronC1Efff(ptr noundef nonnull align 8 dereferenceable(80) %10, float noundef 5.000000e-01, float noundef 0.000000e+00, float noundef 0x3FB9DB22E0000000)
          to label %55 unwind label %69

55:                                               ; preds = %54
  invoke void @_ZN15CompositeNeuronI14ConstantNeuron13StaticSynapseEC2ERKS0_ff(ptr noundef nonnull align 8 dereferenceable(88) %9, ptr noundef nonnull align 8 dereferenceable(80) %10, float noundef 1.000000e+00, float noundef 1.000000e+00)
          to label %56 unwind label %73

56:                                               ; preds = %55
  %57 = invoke noundef ptr @_ZN7Network16createPopulationI15CompositeNeuronI14ConstantNeuron13StaticSynapseEEEP10PopulationIT_EiiS6_b(ptr noundef nonnull align 8 dereferenceable(224) %7, i32 noundef 0, i32 noundef 9, ptr noundef %9, i1 noundef zeroext false)
          to label %58 unwind label %77

58:                                               ; preds = %56
  call void @_ZN14ConstantNeuronD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %9) #11
  call void @_ZN14ConstantNeuronD1Ev(ptr noundef nonnull align 8 dereferenceable(80) %10) #11
  call void @llvm.lifetime.end.p0(i64 80, ptr %10) #11
  store ptr %57, ptr %8, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #11
  store i32 0, ptr %13, align 4, !tbaa !5
  br label %59

59:                                               ; preds = %102, %58
  %60 = load i32, ptr %13, align 4, !tbaa !5
  %61 = load ptr, ptr %8, align 8, !tbaa !9
  %62 = load ptr, ptr %61, align 8, !tbaa !13
  %63 = getelementptr inbounds ptr, ptr %62, i64 10
  %64 = load ptr, ptr %63, align 8
  %65 = invoke noundef i32 %64(ptr noundef nonnull align 8 dereferenceable(56) %61)
          to label %66 unwind label %83

66:                                               ; preds = %59
  %67 = icmp slt i32 %60, %65
  br i1 %67, label %87, label %68

68:                                               ; preds = %66
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #11
  br label %110

69:                                               ; preds = %54
  %70 = landingpad { ptr, i32 }
          cleanup
  %71 = extractvalue { ptr, i32 } %70, 0
  store ptr %71, ptr %11, align 8
  %72 = extractvalue { ptr, i32 } %70, 1
  store i32 %72, ptr %12, align 4
  br label %82

73:                                               ; preds = %55
  %74 = landingpad { ptr, i32 }
          cleanup
  %75 = extractvalue { ptr, i32 } %74, 0
  store ptr %75, ptr %11, align 8
  %76 = extractvalue { ptr, i32 } %74, 1
  store i32 %76, ptr %12, align 4
  br label %81

77:                                               ; preds = %56
  %78 = landingpad { ptr, i32 }
          cleanup
  %79 = extractvalue { ptr, i32 } %78, 0
  store ptr %79, ptr %11, align 8
  %80 = extractvalue { ptr, i32 } %78, 1
  store i32 %80, ptr %12, align 4
  call void @_ZN14ConstantNeuronD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %9) #11
  br label %81

81:                                               ; preds = %77, %73
  call void @_ZN14ConstantNeuronD1Ev(ptr noundef nonnull align 8 dereferenceable(80) %10) #11
  br label %82

82:                                               ; preds = %81, %69
  call void @llvm.lifetime.end.p0(i64 80, ptr %10) #11
  br label %455

83:                                               ; preds = %59
  %84 = landingpad { ptr, i32 }
          cleanup
  %85 = extractvalue { ptr, i32 } %84, 0
  store ptr %85, ptr %11, align 8
  %86 = extractvalue { ptr, i32 } %84, 1
  store i32 %86, ptr %12, align 4
  br label %109

87:                                               ; preds = %66
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #11
  %88 = load ptr, ptr %8, align 8, !tbaa !9
  %89 = load i32, ptr %13, align 4, !tbaa !5
  %90 = load ptr, ptr %88, align 8, !tbaa !13
  %91 = getelementptr inbounds ptr, ptr %90, i64 12
  %92 = load ptr, ptr %91, align 8
  %93 = invoke noundef ptr %92(ptr noundef nonnull align 8 dereferenceable(56) %88, i32 noundef %89)
          to label %94 unwind label %105

94:                                               ; preds = %87
  store ptr %93, ptr %14, align 8, !tbaa !9
  %95 = load ptr, ptr %14, align 8, !tbaa !9
  %96 = load i32, ptr %13, align 4, !tbaa !5
  %97 = sitofp i32 %96 to double
  %98 = fdiv double %97, 9.000000e+00
  %99 = call double @llvm.fmuladd.f64(double %98, double 5.000000e-01, double 5.000000e-01)
  %100 = fptrunc double %99 to float
  invoke void @_ZN14ConstantNeuron7setRateEf(ptr noundef nonnull align 8 dereferenceable(80) %95, float noundef %100)
          to label %101 unwind label %105

101:                                              ; preds = %94
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #11
  br label %102

102:                                              ; preds = %101
  %103 = load i32, ptr %13, align 4, !tbaa !5
  %104 = add nsw i32 %103, 1
  store i32 %104, ptr %13, align 4, !tbaa !5
  br label %59, !llvm.loop !15

105:                                              ; preds = %94, %87
  %106 = landingpad { ptr, i32 }
          cleanup
  %107 = extractvalue { ptr, i32 } %106, 0
  store ptr %107, ptr %11, align 8
  %108 = extractvalue { ptr, i32 } %106, 1
  store i32 %108, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #11
  br label %109

109:                                              ; preds = %105, %83
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #11
  br label %455

110:                                              ; preds = %68
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #11
  call void @llvm.lifetime.start.p0(i64 64, ptr %17) #11
  invoke void @_ZN9MemNeuronC1Ef(ptr noundef nonnull align 8 dereferenceable(64) %17, float noundef 0.000000e+00)
          to label %111 unwind label %122

111:                                              ; preds = %110
  invoke void @_ZN15CompositeNeuronI9MemNeuron13StaticSynapseEC2ERKS0_ff(ptr noundef nonnull align 8 dereferenceable(72) %16, ptr noundef nonnull align 8 dereferenceable(64) %17, float noundef 1.000000e+00, float noundef 1.000000e+00)
          to label %112 unwind label %126

112:                                              ; preds = %111
  %113 = invoke noundef ptr @_ZN7Network16createPopulationI15CompositeNeuronI9MemNeuron13StaticSynapseEEEP10PopulationIT_EiiS6_b(ptr noundef nonnull align 8 dereferenceable(224) %7, i32 noundef 1, i32 noundef 9, ptr noundef %16, i1 noundef zeroext false)
          to label %114 unwind label %130

114:                                              ; preds = %112
  call void @_ZN9MemNeuronD2Ev(ptr noundef nonnull align 8 dereferenceable(72) %16) #11
  call void @_ZN9MemNeuronD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %17) #11
  call void @llvm.lifetime.end.p0(i64 64, ptr %17) #11
  store ptr %113, ptr %15, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #11
  store ptr null, ptr %18, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #11
  store ptr null, ptr %19, align 8, !tbaa !9
  %115 = load i8, ptr %6, align 1, !tbaa !11, !range !17, !noundef !18
  %116 = trunc i8 %115 to i1
  br i1 %116, label %117, label %140

117:                                              ; preds = %114
  %118 = invoke noundef ptr @_Z9loadArrayPKci(ptr noundef @.str.1, i32 noundef 4)
          to label %119 unwind label %136

119:                                              ; preds = %117
  store ptr %118, ptr %18, align 8, !tbaa !9
  %120 = invoke noundef ptr @_Z9loadArrayPKci(ptr noundef @.str.2, i32 noundef 4)
          to label %121 unwind label %136

121:                                              ; preds = %119
  store ptr %120, ptr %19, align 8, !tbaa !9
  br label %153

122:                                              ; preds = %110
  %123 = landingpad { ptr, i32 }
          cleanup
  %124 = extractvalue { ptr, i32 } %123, 0
  store ptr %124, ptr %11, align 8
  %125 = extractvalue { ptr, i32 } %123, 1
  store i32 %125, ptr %12, align 4
  br label %135

126:                                              ; preds = %111
  %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 %134

130:                                              ; preds = %112
  %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
  call void @_ZN9MemNeuronD2Ev(ptr noundef nonnull align 8 dereferenceable(72) %16) #11
  br label %134

134:                                              ; preds = %130, %126
  call void @_ZN9MemNeuronD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %17) #11
  br label %135

135:                                              ; preds = %134, %122
  call void @llvm.lifetime.end.p0(i64 64, ptr %17) #11
  br label %454

136:                                              ; preds = %153, %142, %140, %119, %117
  %137 = landingpad { ptr, i32 }
          cleanup
  %138 = extractvalue { ptr, i32 } %137, 0
  store ptr %138, ptr %11, align 8
  %139 = extractvalue { ptr, i32 } %137, 1
  store i32 %139, ptr %12, align 4
  br label %453

140:                                              ; preds = %114
  %141 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef 16) #13
          to label %142 unwind label %136

142:                                              ; preds = %140
  store ptr %141, ptr %18, align 8, !tbaa !9
  %143 = load ptr, ptr %18, align 8, !tbaa !9
  %144 = getelementptr inbounds float, ptr %143, i64 0
  store float 0x3F947AE140000000, ptr %144, align 4, !tbaa !19
  %145 = load ptr, ptr %18, align 8, !tbaa !9
  %146 = getelementptr inbounds float, ptr %145, i64 1
  store float 0x3F9EB851E0000000, ptr %146, align 4, !tbaa !19
  %147 = load ptr, ptr %18, align 8, !tbaa !9
  %148 = getelementptr inbounds float, ptr %147, i64 2
  store float 0x3FA47AE140000000, ptr %148, align 4, !tbaa !19
  %149 = load ptr, ptr %18, align 8, !tbaa !9
  %150 = getelementptr inbounds float, ptr %149, i64 3
  store float 0x3FA99999A0000000, ptr %150, align 4, !tbaa !19
  %151 = invoke noundef ptr @_Z13getConstArrayIfEPT_S0_i(float noundef 0x3F50624DE0000000, i32 noundef 4)
          to label %152 unwind label %136

152:                                              ; preds = %142
  store ptr %151, ptr %19, align 8, !tbaa !9
  br label %153

153:                                              ; preds = %152, %121
  %154 = load ptr, ptr %8, align 8, !tbaa !9
  %155 = load ptr, ptr %15, align 8, !tbaa !9
  %156 = load ptr, ptr %18, align 8, !tbaa !9
  %157 = load ptr, ptr %19, align 8, !tbaa !9
  %158 = invoke noundef i32 @_ZN7Network11connectConvI15CompositeNeuronI14ConstantNeuron13StaticSynapseES1_I9MemNeuronS3_EEEiP10PopulationIT_EPS7_IT0_EPfSE_P9SpikeTypeiiii(ptr noundef nonnull align 8 dereferenceable(224) %7, ptr noundef %154, ptr noundef %155, ptr noundef %156, ptr noundef %157, ptr noundef null, i32 noundef 3, i32 noundef 3, i32 noundef 2, i32 noundef 2)
          to label %159 unwind label %136

159:                                              ; preds = %153
  call void @llvm.lifetime.start.p0(i64 24, ptr %20) #11
  invoke void @_ZN18SingleGPUSimulatorC1EP7Networkf(ptr noundef nonnull align 8 dereferenceable(20) %20, ptr noundef %7, float noundef 0x3F50624DE0000000)
          to label %160 unwind label %185

160:                                              ; preds = %159
  call void @llvm.lifetime.start.p0(i64 16, ptr %21) #11
  call void @llvm.memset.p0.i64(ptr align 8 %21, i8 0, i64 16, i1 false)
  call void @llvm.lifetime.start.p0(i64 48, ptr %22) #11
  call void @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE9ArrayInfoSt4lessIS5_ESaISt4pairIKS5_S6_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %22) #11
  call void @llvm.lifetime.start.p0(i64 32, ptr %23) #11
  call void @llvm.lifetime.start.p0(i64 1, ptr %24) #11
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %24) #11
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %23, ptr noundef @.str.3, ptr noundef nonnull align 1 dereferenceable(1) %24)
          to label %161 unwind label %189

161:                                              ; preds = %160
  %162 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE9ArrayInfoSt4lessIS5_ESaISt4pairIKS5_S6_EEEixEOS5_(ptr noundef nonnull align 8 dereferenceable(48) %22, ptr noundef nonnull align 8 dereferenceable(32) %23)
          to label %163 unwind label %193

163:                                              ; preds = %161
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %162, ptr align 8 %21, i64 16, i1 false), !tbaa.struct !21
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %23) #11
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %24) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %24) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr %23) #11
  call void @llvm.lifetime.start.p0(i64 32, ptr %25) #11
  call void @llvm.lifetime.start.p0(i64 1, ptr %26) #11
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %26) #11
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %25, ptr noundef @.str.4, ptr noundef nonnull align 1 dereferenceable(1) %26)
          to label %164 unwind label %198

164:                                              ; preds = %163
  %165 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE9ArrayInfoSt4lessIS5_ESaISt4pairIKS5_S6_EEEixEOS5_(ptr noundef nonnull align 8 dereferenceable(48) %22, ptr noundef nonnull align 8 dereferenceable(32) %25)
          to label %166 unwind label %202

166:                                              ; preds = %164
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %165, ptr align 8 %21, i64 16, i1 false), !tbaa.struct !21
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #11
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %26) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %26) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr %25) #11
  %167 = invoke noundef i32 @_ZN18SingleGPUSimulator3runEfRSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE9ArrayInfoSt4lessIS6_ESaISt4pairIKS6_S7_EEE(ptr noundef nonnull align 8 dereferenceable(20) %20, float noundef 0x3FBC28F5C0000000, ptr noundef nonnull align 8 dereferenceable(48) %22)
          to label %168 unwind label %207

168:                                              ; preds = %166
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #11
  call void @llvm.lifetime.start.p0(i64 32, ptr %28) #11
  call void @llvm.lifetime.start.p0(i64 1, ptr %29) #11
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %29) #11
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %28, ptr noundef @.str.3, ptr noundef nonnull align 1 dereferenceable(1) %29)
          to label %169 unwind label %211

169:                                              ; preds = %168
  %170 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE9ArrayInfoSt4lessIS5_ESaISt4pairIKS5_S6_EEEixEOS5_(ptr noundef nonnull align 8 dereferenceable(48) %22, ptr noundef nonnull align 8 dereferenceable(32) %28)
          to label %171 unwind label %215

171:                                              ; preds = %169
  %172 = getelementptr inbounds %struct.ArrayInfo, ptr %170, i32 0, i32 1
  %173 = load ptr, ptr %172, align 8, !tbaa !22
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #11
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %29) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %29) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr %28) #11
  store ptr %173, ptr %27, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #11
  call void @llvm.lifetime.start.p0(i64 32, ptr %31) #11
  call void @llvm.lifetime.start.p0(i64 1, ptr %32) #11
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %32) #11
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %31, ptr noundef @.str.4, ptr noundef nonnull align 1 dereferenceable(1) %32)
          to label %174 unwind label %220

174:                                              ; preds = %171
  %175 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE9ArrayInfoSt4lessIS5_ESaISt4pairIKS5_S6_EEEixEOS5_(ptr noundef nonnull align 8 dereferenceable(48) %22, ptr noundef nonnull align 8 dereferenceable(32) %31)
          to label %176 unwind label %224

176:                                              ; preds = %174
  %177 = getelementptr inbounds %struct.ArrayInfo, ptr %175, i32 0, i32 1
  %178 = load ptr, ptr %177, align 8, !tbaa !22
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %31) #11
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %32) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %32) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr %31) #11
  store ptr %178, ptr %30, align 8, !tbaa !9
  %179 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.5)
          to label %180 unwind label %229

180:                                              ; preds = %176
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #11
  store i32 0, ptr %33, align 4, !tbaa !5
  br label %181

181:                                              ; preds = %265, %180
  %182 = load i32, ptr %33, align 4, !tbaa !5
  %183 = icmp slt i32 %182, 3
  br i1 %183, label %233, label %184

184:                                              ; preds = %181
  store i32 5, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #11
  br label %269

185:                                              ; preds = %159
  %186 = landingpad { ptr, i32 }
          cleanup
  %187 = extractvalue { ptr, i32 } %186, 0
  store ptr %187, ptr %11, align 8
  %188 = extractvalue { ptr, i32 } %186, 1
  store i32 %188, ptr %12, align 4
  br label %452

189:                                              ; preds = %160
  %190 = landingpad { ptr, i32 }
          cleanup
  %191 = extractvalue { ptr, i32 } %190, 0
  store ptr %191, ptr %11, align 8
  %192 = extractvalue { ptr, i32 } %190, 1
  store i32 %192, ptr %12, align 4
  br label %197

193:                                              ; preds = %161
  %194 = landingpad { ptr, i32 }
          cleanup
  %195 = extractvalue { ptr, i32 } %194, 0
  store ptr %195, ptr %11, align 8
  %196 = extractvalue { ptr, i32 } %194, 1
  store i32 %196, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %23) #11
  br label %197

197:                                              ; preds = %193, %189
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %24) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %24) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr %23) #11
  br label %451

198:                                              ; preds = %163
  %199 = landingpad { ptr, i32 }
          cleanup
  %200 = extractvalue { ptr, i32 } %199, 0
  store ptr %200, ptr %11, align 8
  %201 = extractvalue { ptr, i32 } %199, 1
  store i32 %201, ptr %12, align 4
  br label %206

202:                                              ; preds = %164
  %203 = landingpad { ptr, i32 }
          cleanup
  %204 = extractvalue { ptr, i32 } %203, 0
  store ptr %204, ptr %11, align 8
  %205 = extractvalue { ptr, i32 } %203, 1
  store i32 %205, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #11
  br label %206

206:                                              ; preds = %202, %198
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %26) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %26) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr %25) #11
  br label %451

207:                                              ; preds = %166
  %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
  br label %451

211:                                              ; preds = %168
  %212 = landingpad { ptr, i32 }
          cleanup
  %213 = extractvalue { ptr, i32 } %212, 0
  store ptr %213, ptr %11, align 8
  %214 = extractvalue { ptr, i32 } %212, 1
  store i32 %214, ptr %12, align 4
  br label %219

215:                                              ; preds = %169
  %216 = landingpad { ptr, i32 }
          cleanup
  %217 = extractvalue { ptr, i32 } %216, 0
  store ptr %217, ptr %11, align 8
  %218 = extractvalue { ptr, i32 } %216, 1
  store i32 %218, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #11
  br label %219

219:                                              ; preds = %215, %211
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %29) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %29) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr %28) #11
  br label %450

220:                                              ; preds = %171
  %221 = landingpad { ptr, i32 }
          cleanup
  %222 = extractvalue { ptr, i32 } %221, 0
  store ptr %222, ptr %11, align 8
  %223 = extractvalue { ptr, i32 } %221, 1
  store i32 %223, ptr %12, align 4
  br label %228

224:                                              ; preds = %174
  %225 = landingpad { ptr, i32 }
          cleanup
  %226 = extractvalue { ptr, i32 } %225, 0
  store ptr %226, ptr %11, align 8
  %227 = extractvalue { ptr, i32 } %225, 1
  store i32 %227, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %31) #11
  br label %228

228:                                              ; preds = %224, %220
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %32) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %32) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr %31) #11
  br label %449

229:                                              ; preds = %358, %313, %269, %176
  %230 = landingpad { ptr, i32 }
          cleanup
  %231 = extractvalue { ptr, i32 } %230, 0
  store ptr %231, ptr %11, align 8
  %232 = extractvalue { ptr, i32 } %230, 1
  store i32 %232, ptr %12, align 4
  br label %449

233:                                              ; preds = %181
  %234 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.6)
          to label %235 unwind label %240

235:                                              ; preds = %233
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #11
  store i32 0, ptr %35, align 4, !tbaa !5
  br label %236

236:                                              ; preds = %255, %235
  %237 = load i32, ptr %35, align 4, !tbaa !5
  %238 = icmp slt i32 %237, 3
  br i1 %238, label %244, label %239

239:                                              ; preds = %236
  store i32 8, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #11
  br label %262

240:                                              ; preds = %262, %233
  %241 = landingpad { ptr, i32 }
          cleanup
  %242 = extractvalue { ptr, i32 } %241, 0
  store ptr %242, ptr %11, align 8
  %243 = extractvalue { ptr, i32 } %241, 1
  store i32 %243, ptr %12, align 4
  br label %268

244:                                              ; preds = %236
  %245 = load ptr, ptr %27, align 8, !tbaa !9
  %246 = load i32, ptr %33, align 4, !tbaa !5
  %247 = mul nsw i32 %246, 3
  %248 = load i32, ptr %35, align 4, !tbaa !5
  %249 = add nsw i32 %247, %248
  %250 = sext i32 %249 to i64
  %251 = getelementptr inbounds i32, ptr %245, i64 %250
  %252 = load i32, ptr %251, align 4, !tbaa !5
  %253 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.7, i32 noundef %252)
          to label %254 unwind label %258

254:                                              ; preds = %244
  br label %255

255:                                              ; preds = %254
  %256 = load i32, ptr %35, align 4, !tbaa !5
  %257 = add nsw i32 %256, 1
  store i32 %257, ptr %35, align 4, !tbaa !5
  br label %236, !llvm.loop !24

258:                                              ; preds = %244
  %259 = landingpad { ptr, i32 }
          cleanup
  %260 = extractvalue { ptr, i32 } %259, 0
  store ptr %260, ptr %11, align 8
  %261 = extractvalue { ptr, i32 } %259, 1
  store i32 %261, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #11
  br label %268

262:                                              ; preds = %239
  %263 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.8)
          to label %264 unwind label %240

264:                                              ; preds = %262
  br label %265

265:                                              ; preds = %264
  %266 = load i32, ptr %33, align 4, !tbaa !5
  %267 = add nsw i32 %266, 1
  store i32 %267, ptr %33, align 4, !tbaa !5
  br label %181, !llvm.loop !25

268:                                              ; preds = %258, %240
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #11
  br label %449

269:                                              ; preds = %184
  %270 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.9)
          to label %271 unwind label %229

271:                                              ; preds = %269
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #11
  store i32 0, ptr %36, align 4, !tbaa !5
  br label %272

272:                                              ; preds = %309, %271
  %273 = load i32, ptr %36, align 4, !tbaa !5
  %274 = icmp slt i32 %273, 2
  br i1 %274, label %276, label %275

275:                                              ; preds = %272
  store i32 11, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #11
  br label %313

276:                                              ; preds = %272
  %277 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.6)
          to label %278 unwind label %283

278:                                              ; preds = %276
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #11
  store i32 0, ptr %37, align 4, !tbaa !5
  br label %279

279:                                              ; preds = %299, %278
  %280 = load i32, ptr %37, align 4, !tbaa !5
  %281 = icmp slt i32 %280, 2
  br i1 %281, label %287, label %282

282:                                              ; preds = %279
  store i32 14, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #11
  br label %306

283:                                              ; preds = %306, %276
  %284 = landingpad { ptr, i32 }
          cleanup
  %285 = extractvalue { ptr, i32 } %284, 0
  store ptr %285, ptr %11, align 8
  %286 = extractvalue { ptr, i32 } %284, 1
  store i32 %286, ptr %12, align 4
  br label %312

287:                                              ; preds = %279
  %288 = load ptr, ptr %18, align 8, !tbaa !9
  %289 = load i32, ptr %36, align 4, !tbaa !5
  %290 = mul nsw i32 %289, 2
  %291 = load i32, ptr %37, align 4, !tbaa !5
  %292 = add nsw i32 %290, %291
  %293 = sext i32 %292 to i64
  %294 = getelementptr inbounds float, ptr %288, i64 %293
  %295 = load float, ptr %294, align 4, !tbaa !19
  %296 = fpext float %295 to double
  %297 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.10, double noundef %296)
          to label %298 unwind label %302

298:                                              ; preds = %287
  br label %299

299:                                              ; preds = %298
  %300 = load i32, ptr %37, align 4, !tbaa !5
  %301 = add nsw i32 %300, 1
  store i32 %301, ptr %37, align 4, !tbaa !5
  br label %279, !llvm.loop !26

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

306:                                              ; preds = %282
  %307 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.8)
          to label %308 unwind label %283

308:                                              ; preds = %306
  br label %309

309:                                              ; preds = %308
  %310 = load i32, ptr %36, align 4, !tbaa !5
  %311 = add nsw i32 %310, 1
  store i32 %311, ptr %36, align 4, !tbaa !5
  br label %272, !llvm.loop !27

312:                                              ; preds = %302, %283
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #11
  br label %449

313:                                              ; preds = %275
  %314 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.11)
          to label %315 unwind label %229

315:                                              ; preds = %313
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #11
  store i32 0, ptr %38, align 4, !tbaa !5
  br label %316

316:                                              ; preds = %354, %315
  %317 = load i32, ptr %38, align 4, !tbaa !5
  %318 = icmp slt i32 %317, 3
  br i1 %318, label %320, label %319

319:                                              ; preds = %316
  store i32 17, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #11
  br label %358

320:                                              ; preds = %316
  %321 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.6)
          to label %322 unwind label %327

322:                                              ; preds = %320
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #11
  store i32 0, ptr %39, align 4, !tbaa !5
  br label %323

323:                                              ; preds = %344, %322
  %324 = load i32, ptr %39, align 4, !tbaa !5
  %325 = icmp slt i32 %324, 3
  br i1 %325, label %331, label %326

326:                                              ; preds = %323
  store i32 20, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #11
  br label %351

327:                                              ; preds = %351, %320
  %328 = landingpad { ptr, i32 }
          cleanup
  %329 = extractvalue { ptr, i32 } %328, 0
  store ptr %329, ptr %11, align 8
  %330 = extractvalue { ptr, i32 } %328, 1
  store i32 %330, ptr %12, align 4
  br label %357

331:                                              ; preds = %323
  %332 = load ptr, ptr %30, align 8, !tbaa !9
  %333 = load i32, ptr %38, align 4, !tbaa !5
  %334 = mul nsw i32 %333, 3
  %335 = add nsw i32 9, %334
  %336 = load i32, ptr %39, align 4, !tbaa !5
  %337 = add nsw i32 %335, %336
  %338 = sext i32 %337 to i64
  %339 = getelementptr inbounds float, ptr %332, i64 %338
  %340 = load float, ptr %339, align 4, !tbaa !19
  %341 = fpext float %340 to double
  %342 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.10, double noundef %341)
          to label %343 unwind label %347

343:                                              ; preds = %331
  br label %344

344:                                              ; preds = %343
  %345 = load i32, ptr %39, align 4, !tbaa !5
  %346 = add nsw i32 %345, 1
  store i32 %346, ptr %39, align 4, !tbaa !5
  br label %323, !llvm.loop !28

347:                                              ; preds = %331
  %348 = landingpad { ptr, i32 }
          cleanup
  %349 = extractvalue { ptr, i32 } %348, 0
  store ptr %349, ptr %11, align 8
  %350 = extractvalue { ptr, i32 } %348, 1
  store i32 %350, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #11
  br label %357

351:                                              ; preds = %326
  %352 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.8)
          to label %353 unwind label %327

353:                                              ; preds = %351
  br label %354

354:                                              ; preds = %353
  %355 = load i32, ptr %38, align 4, !tbaa !5
  %356 = add nsw i32 %355, 1
  store i32 %356, ptr %38, align 4, !tbaa !5
  br label %316, !llvm.loop !29

357:                                              ; preds = %347, %327
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #11
  br label %449

358:                                              ; preds = %319
  %359 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.12)
          to label %360 unwind label %229

360:                                              ; preds = %358
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #11
  store i32 0, ptr %40, align 4, !tbaa !5
  br label %361

361:                                              ; preds = %443, %360
  %362 = load i32, ptr %40, align 4, !tbaa !5
  %363 = icmp slt i32 %362, 3
  br i1 %363, label %365, label %364

364:                                              ; preds = %361
  store i32 23, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #11
  br label %447

365:                                              ; preds = %361
  %366 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.6)
          to label %367 unwind label %372

367:                                              ; preds = %365
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #11
  store i32 0, ptr %41, align 4, !tbaa !5
  br label %368

368:                                              ; preds = %433, %367
  %369 = load i32, ptr %41, align 4, !tbaa !5
  %370 = icmp slt i32 %369, 3
  br i1 %370, label %376, label %371

371:                                              ; preds = %368
  store i32 26, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #11
  br label %440

372:                                              ; preds = %440, %365
  %373 = landingpad { ptr, i32 }
          cleanup
  %374 = extractvalue { ptr, i32 } %373, 0
  store ptr %374, ptr %11, align 8
  %375 = extractvalue { ptr, i32 } %373, 1
  store i32 %375, ptr %12, align 4
  br label %446

376:                                              ; preds = %368
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #11
  store float 0.000000e+00, ptr %42, align 4, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #11
  store i32 0, ptr %43, align 4, !tbaa !5
  br label %377

377:                                              ; preds = %425, %376
  %378 = load i32, ptr %43, align 4, !tbaa !5
  %379 = icmp slt i32 %378, 2
  br i1 %379, label %381, label %380

380:                                              ; preds = %377
  store i32 29, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #11
  br label %428

381:                                              ; preds = %377
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #11
  store i32 0, ptr %44, align 4, !tbaa !5
  br label %382

382:                                              ; preds = %421, %381
  %383 = load i32, ptr %44, align 4, !tbaa !5
  %384 = icmp slt i32 %383, 2
  br i1 %384, label %386, label %385

385:                                              ; preds = %382
  store i32 32, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #11
  br label %424

386:                                              ; preds = %382
  %387 = load i32, ptr %40, align 4, !tbaa !5
  %388 = load i32, ptr %43, align 4, !tbaa !5
  %389 = add nsw i32 %387, %388
  %390 = icmp slt i32 %389, 3
  br i1 %390, label %391, label %420

391:                                              ; preds = %386
  %392 = load i32, ptr %41, align 4, !tbaa !5
  %393 = load i32, ptr %44, align 4, !tbaa !5
  %394 = add nsw i32 %392, %393
  %395 = icmp slt i32 %394, 3
  br i1 %395, label %396, label %420

396:                                              ; preds = %391
  %397 = load ptr, ptr %27, align 8, !tbaa !9
  %398 = load i32, ptr %40, align 4, !tbaa !5
  %399 = load i32, ptr %43, align 4, !tbaa !5
  %400 = add nsw i32 %398, %399
  %401 = mul nsw i32 %400, 3
  %402 = load i32, ptr %41, align 4, !tbaa !5
  %403 = add nsw i32 %401, %402
  %404 = load i32, ptr %44, align 4, !tbaa !5
  %405 = add nsw i32 %403, %404
  %406 = sext i32 %405 to i64
  %407 = getelementptr inbounds i32, ptr %397, i64 %406
  %408 = load i32, ptr %407, align 4, !tbaa !5
  %409 = sitofp i32 %408 to float
  %410 = load ptr, ptr %18, align 8, !tbaa !9
  %411 = load i32, ptr %43, align 4, !tbaa !5
  %412 = mul nsw i32 %411, 2
  %413 = load i32, ptr %44, align 4, !tbaa !5
  %414 = add nsw i32 %412, %413
  %415 = sext i32 %414 to i64
  %416 = getelementptr inbounds float, ptr %410, i64 %415
  %417 = load float, ptr %416, align 4, !tbaa !19
  %418 = load float, ptr %42, align 4, !tbaa !19
  %419 = call float @llvm.fmuladd.f32(float %409, float %417, float %418)
  store float %419, ptr %42, align 4, !tbaa !19
  br label %420

420:                                              ; preds = %396, %391, %386
  br label %421

421:                                              ; preds = %420
  %422 = load i32, ptr %44, align 4, !tbaa !5
  %423 = add nsw i32 %422, 1
  store i32 %423, ptr %44, align 4, !tbaa !5
  br label %382, !llvm.loop !30

424:                                              ; preds = %385
  br label %425

425:                                              ; preds = %424
  %426 = load i32, ptr %43, align 4, !tbaa !5
  %427 = add nsw i32 %426, 1
  store i32 %427, ptr %43, align 4, !tbaa !5
  br label %377, !llvm.loop !31

428:                                              ; preds = %380
  %429 = load float, ptr %42, align 4, !tbaa !19
  %430 = fpext float %429 to double
  %431 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.10, double noundef %430)
          to label %432 unwind label %436

432:                                              ; preds = %428
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #11
  br label %433

433:                                              ; preds = %432
  %434 = load i32, ptr %41, align 4, !tbaa !5
  %435 = add nsw i32 %434, 1
  store i32 %435, ptr %41, align 4, !tbaa !5
  br label %368, !llvm.loop !32

436:                                              ; preds = %428
  %437 = landingpad { ptr, i32 }
          cleanup
  %438 = extractvalue { ptr, i32 } %437, 0
  store ptr %438, ptr %11, align 8
  %439 = extractvalue { ptr, i32 } %437, 1
  store i32 %439, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #11
  br label %446

440:                                              ; preds = %371
  %441 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.8)
          to label %442 unwind label %372

442:                                              ; preds = %440
  br label %443

443:                                              ; preds = %442
  %444 = load i32, ptr %40, align 4, !tbaa !5
  %445 = add nsw i32 %444, 1
  store i32 %445, ptr %40, align 4, !tbaa !5
  br label %361, !llvm.loop !33

446:                                              ; preds = %436, %372
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #11
  br label %449

447:                                              ; preds = %364
  store i32 0, ptr %3, align 4
  store i32 1, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #11
  call void @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE9ArrayInfoSt4lessIS5_ESaISt4pairIKS5_S6_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %22) #11
  call void @llvm.lifetime.end.p0(i64 48, ptr %22) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %21) #11
  call void @_ZN18SingleGPUSimulatorD1Ev(ptr noundef nonnull align 8 dereferenceable(20) %20) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %20) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #11
  call void @_ZN7NetworkD1Ev(ptr noundef nonnull align 8 dereferenceable(224) %7) #11
  call void @llvm.lifetime.end.p0(i64 224, ptr %7) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %6) #11
  %448 = load i32, ptr %3, align 4
  ret i32 %448

449:                                              ; preds = %446, %357, %312, %268, %229, %228
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #11
  br label %450

450:                                              ; preds = %449, %219
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #11
  br label %451

451:                                              ; preds = %450, %207, %206, %197
  call void @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE9ArrayInfoSt4lessIS5_ESaISt4pairIKS5_S6_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %22) #11
  call void @llvm.lifetime.end.p0(i64 48, ptr %22) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %21) #11
  call void @_ZN18SingleGPUSimulatorD1Ev(ptr noundef nonnull align 8 dereferenceable(20) %20) #11
  br label %452

452:                                              ; preds = %451, %185
  call void @llvm.lifetime.end.p0(i64 24, ptr %20) #11
  br label %453

453:                                              ; preds = %452, %136
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #11
  br label %454

454:                                              ; preds = %453, %135
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #11
  br label %455

455:                                              ; preds = %454, %109, %82
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #11
  call void @_ZN7NetworkD1Ev(ptr noundef nonnull align 8 dereferenceable(224) %7) #11
  call void @llvm.lifetime.end.p0(i64 224, ptr %7) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %6) #11
  br label %456

456:                                              ; preds = %455
  %457 = load ptr, ptr %11, align 8
  %458 = load i32, ptr %12, align 4
  %459 = insertvalue { ptr, i32 } poison, ptr %457, 0
  %460 = insertvalue { ptr, i32 } %459, i32 %458, 1
  resume { ptr, i32 } %460
}

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

; Function Attrs: nounwind willreturn memory(read)
declare i32 @strcmp(ptr noundef, ptr noundef) #2

declare void @_ZN7NetworkC1Ev(ptr noundef nonnull align 8 dereferenceable(224)) unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_ZN7Network16createPopulationI15CompositeNeuronI14ConstantNeuron13StaticSynapseEEEP10PopulationIT_EiiS6_b(ptr noundef nonnull align 8 dereferenceable(224), i32 noundef, i32 noundef, ptr noundef, i1 noundef zeroext) #4 align 2

declare void @_ZN14ConstantNeuronC1Efff(ptr noundef nonnull align 8 dereferenceable(80), float noundef, float noundef, float noundef) unnamed_addr #3

declare i32 @__gxx_personality_v0(...)

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN15CompositeNeuronI14ConstantNeuron13StaticSynapseEC2ERKS0_ff(ptr noundef nonnull align 8 dereferenceable(88), ptr noundef nonnull align 8 dereferenceable(80), float noundef, float noundef) unnamed_addr #4 align 2

; Function Attrs: nounwind
declare void @_ZN14ConstantNeuronD2Ev(ptr noundef nonnull align 8 dereferenceable(80)) unnamed_addr #5

; Function Attrs: nounwind
declare void @_ZN14ConstantNeuronD1Ev(ptr noundef nonnull align 8 dereferenceable(80)) unnamed_addr #5

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

declare void @_ZN14ConstantNeuron7setRateEf(ptr noundef nonnull align 8 dereferenceable(80), float noundef) #3

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_ZN7Network16createPopulationI15CompositeNeuronI9MemNeuron13StaticSynapseEEEP10PopulationIT_EiiS6_b(ptr noundef nonnull align 8 dereferenceable(224), i32 noundef, i32 noundef, ptr noundef, i1 noundef zeroext) #4 align 2

declare void @_ZN9MemNeuronC1Ef(ptr noundef nonnull align 8 dereferenceable(64), float noundef) unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN15CompositeNeuronI9MemNeuron13StaticSynapseEC2ERKS0_ff(ptr noundef nonnull align 8 dereferenceable(72), ptr noundef nonnull align 8 dereferenceable(64), float noundef, float noundef) unnamed_addr #4 align 2

; Function Attrs: nounwind
declare void @_ZN9MemNeuronD2Ev(ptr noundef nonnull align 8 dereferenceable(64)) unnamed_addr #5

; Function Attrs: nounwind
declare void @_ZN9MemNeuronD1Ev(ptr noundef nonnull align 8 dereferenceable(64)) unnamed_addr #5

declare noundef ptr @_Z9loadArrayPKci(ptr noundef, i32 noundef) #3

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_Z13getConstArrayIfEPT_S0_i(float noundef, i32 noundef) #4

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZN7Network11connectConvI15CompositeNeuronI14ConstantNeuron13StaticSynapseES1_I9MemNeuronS3_EEEiP10PopulationIT_EPS7_IT0_EPfSE_P9SpikeTypeiiii(ptr noundef nonnull align 8 dereferenceable(224), ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) #4 align 2

declare void @_ZN18SingleGPUSimulatorC1EP7Networkf(ptr noundef nonnull align 8 dereferenceable(20), ptr noundef, float noundef) unnamed_addr #3

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE9ArrayInfoSt4lessIS5_ESaISt4pairIKS5_S6_EEEixEOS5_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(32)) #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #9 align 2

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

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

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

declare noundef i32 @_ZN18SingleGPUSimulator3runEfRSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE9ArrayInfoSt4lessIS6_ESaISt4pairIKS6_S7_EEE(ptr noundef nonnull align 8 dereferenceable(20), float noundef, ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #3

declare i32 @printf(ptr noundef, ...) #3

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

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

; Function Attrs: nounwind
declare void @_ZN18SingleGPUSimulatorD1Ev(ptr noundef nonnull align 8 dereferenceable(20)) unnamed_addr #5

; Function Attrs: nounwind
declare void @_ZN7NetworkD1Ev(ptr noundef nonnull align 8 dereferenceable(224)) unnamed_addr #5

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

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

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

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


; 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.Network = type { %"class.std::vector", %"class.std::vector.0", %"class.std::vector.5", i32, i32, i32, float, float, %"class.std::vector.10", %"class.std::vector.10", i32, %"class.std::vector.15", %"class.std::vector.15", %"class.std::vector.15" }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<NeuronBase *, std::allocator<NeuronBase *>>::_Vector_impl" }
%"struct.std::_Vector_base<NeuronBase *, std::allocator<NeuronBase *>>::_Vector_impl" = type { %"struct.std::_Vector_base<NeuronBase *, std::allocator<NeuronBase *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<NeuronBase *, std::allocator<NeuronBase *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.0" = type { %"struct.std::_Vector_base.1" }
%"struct.std::_Vector_base.1" = type { %"struct.std::_Vector_base<PopulationBase *, std::allocator<PopulationBase *>>::_Vector_impl" }
%"struct.std::_Vector_base<PopulationBase *, std::allocator<PopulationBase *>>::_Vector_impl" = type { %"struct.std::_Vector_base<PopulationBase *, std::allocator<PopulationBase *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<PopulationBase *, std::allocator<PopulationBase *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.5" = type { %"struct.std::_Vector_base.6" }
%"struct.std::_Vector_base.6" = type { %"struct.std::_Vector_base<SynapseBase *, std::allocator<SynapseBase *>>::_Vector_impl" }
%"struct.std::_Vector_base<SynapseBase *, std::allocator<SynapseBase *>>::_Vector_impl" = type { %"struct.std::_Vector_base<SynapseBase *, std::allocator<SynapseBase *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<SynapseBase *, std::allocator<SynapseBase *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.10" = type { %"struct.std::_Vector_base.11" }
%"struct.std::_Vector_base.11" = type { %"struct.std::_Vector_base<Type, std::allocator<Type>>::_Vector_impl" }
%"struct.std::_Vector_base<Type, std::allocator<Type>>::_Vector_impl" = type { %"struct.std::_Vector_base<Type, std::allocator<Type>>::_Vector_impl_data" }
%"struct.std::_Vector_base<Type, std::allocator<Type>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.15" = type { %"struct.std::_Vector_base.16" }
%"struct.std::_Vector_base.16" = type { %"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl" }
%"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl" = type { %"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%class.CompositeNeuron = type { %class.ConstantNeuron, float, float }
%class.ConstantNeuron = type { %class.NeuronBase.base, float, i32, i32, float, float, ptr }
%class.NeuronBase.base = type <{ %class.Base, %"class.std::vector.5", i8, i8, [2 x i8], i32, float }>
%class.Base = type { ptr, i32, i32 }
%class.CompositeNeuron.25 = type { %class.MemNeuron, float, float }
%class.MemNeuron = type { %class.NeuronBase.base, float, ptr }
%class.SingleGPUSimulator = type { %class.SimulatorBase.base, [4 x i8] }
%class.SimulatorBase.base = type <{ ptr, ptr, float }>
%"class.std::map" = type { %"class.std::_Rb_tree" }
%"class.std::_Rb_tree" = type { %"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::pair<const std::__cxx11::basic_string<char>, ArrayInfo>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, ArrayInfo>>, std::less<std::__cxx11::basic_string<char>>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::pair<const std::__cxx11::basic_string<char>, ArrayInfo>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, ArrayInfo>>, std::less<std::__cxx11::basic_string<char>>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"struct.std::_Rb_tree_header" = type { %"struct.std::_Rb_tree_node_base", i64 }
%"struct.std::_Rb_tree_node_base" = type { i32, ptr, ptr, ptr }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.std::allocator.29" = type { i8 }

@.str = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [8 x i8], align 1

; Function Attrs: mustprogress norecurse uwtable
define dso_local noundef i32 @main(i32 noundef %0, ptr nocapture noundef readonly %1) local_unnamed_addr #0 personality ptr @__gxx_personality_v0 {
  %3 = alloca %class.Network, align 8
  %4 = alloca %class.CompositeNeuron, align 8
  %5 = alloca %class.ConstantNeuron, align 8
  %6 = alloca %class.CompositeNeuron.25, align 8
  %7 = alloca %class.MemNeuron, align 8
  %8 = alloca %class.SingleGPUSimulator, align 8
  %9 = alloca %"class.std::map", align 8
  %10 = alloca %"class.std::__cxx11::basic_string", align 8
  %11 = alloca %"class.std::allocator.29", align 1
  %12 = alloca %"class.std::__cxx11::basic_string", align 8
  %13 = alloca %"class.std::allocator.29", align 1
  %14 = alloca %"class.std::__cxx11::basic_string", align 8
  %15 = alloca %"class.std::allocator.29", align 1
  %16 = alloca %"class.std::__cxx11::basic_string", align 8
  %17 = alloca %"class.std::allocator.29", align 1
  %18 = icmp sgt i32 %0, 1
  br i1 %18, label %19, label %24

19:                                               ; preds = %2
  %20 = getelementptr inbounds i8, ptr %1, i64 8
  %21 = load ptr, ptr %20, align 8, !tbaa !5
  %22 = tail call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %21, ptr noundef nonnull dereferenceable(1) @.str) #11
  %23 = icmp eq i32 %22, 0
  br label %24

24:                                               ; preds = %19, %2
  %.073 = phi i1 [ false, %2 ], [ %23, %19 ]
  call void @llvm.lifetime.start.p0(i64 224, ptr nonnull %3) #12
  call void @_ZN7NetworkC1Ev(ptr noundef nonnull align 8 dereferenceable(224) %3)
  call void @llvm.lifetime.start.p0(i64 80, ptr nonnull %5) #12
  invoke void @_ZN14ConstantNeuronC1Efff(ptr noundef nonnull align 8 dereferenceable(80) %5, float noundef 5.000000e-01, float noundef 0.000000e+00, float noundef 0x3FB9DB22E0000000)
          to label %25 unwind label %37

25:                                               ; preds = %24
  invoke void @_ZN15CompositeNeuronI14ConstantNeuron13StaticSynapseEC2ERKS0_ff(ptr noundef nonnull align 8 dereferenceable(88) %4, ptr noundef nonnull align 8 dereferenceable(80) %5, float noundef 1.000000e+00, float noundef 1.000000e+00)
          to label %26 unwind label %39

26:                                               ; preds = %25
  %27 = invoke noundef ptr @_ZN7Network16createPopulationI15CompositeNeuronI14ConstantNeuron13StaticSynapseEEEP10PopulationIT_EiiS6_b(ptr noundef nonnull align 8 dereferenceable(224) %3, i32 noundef 0, i32 noundef 9, ptr noundef nonnull %4, i1 noundef zeroext false)
          to label %28 unwind label %41

28:                                               ; preds = %26
  call void @_ZN14ConstantNeuronD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %4) #12
  call void @_ZN14ConstantNeuronD1Ev(ptr noundef nonnull align 8 dereferenceable(80) %5) #12
  call void @llvm.lifetime.end.p0(i64 80, ptr nonnull %5) #12
  br label %29

29:                                               ; preds = %57, %28
  %.094 = phi i32 [ 0, %28 ], [ %58, %57 ]
  %30 = load ptr, ptr %27, align 8, !tbaa !9
  %31 = getelementptr inbounds i8, ptr %30, i64 80
  %32 = load ptr, ptr %31, align 8
  %33 = invoke noundef i32 %32(ptr noundef nonnull align 8 dereferenceable(56) %27)
          to label %34 unwind label %45

34:                                               ; preds = %29
  %35 = icmp slt i32 %.094, %33
  br i1 %35, label %47, label %36

36:                                               ; preds = %34
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %7) #12
  invoke void @_ZN9MemNeuronC1Ef(ptr noundef nonnull align 8 dereferenceable(64) %7, float noundef 0.000000e+00)
          to label %61 unwind label %69

37:                                               ; preds = %24
  %38 = landingpad { ptr, i32 }
          cleanup
  br label %44

39:                                               ; preds = %25
  %40 = landingpad { ptr, i32 }
          cleanup
  br label %43

41:                                               ; preds = %26
  %42 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN14ConstantNeuronD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %4) #12
  br label %43

43:                                               ; preds = %41, %39
  %.pn = phi { ptr, i32 } [ %42, %41 ], [ %40, %39 ]
  call void @_ZN14ConstantNeuronD1Ev(ptr noundef nonnull align 8 dereferenceable(80) %5) #12
  br label %44

44:                                               ; preds = %43, %37
  %.pn.pn = phi { ptr, i32 } [ %.pn, %43 ], [ %38, %37 ]
  call void @llvm.lifetime.end.p0(i64 80, ptr nonnull %5) #12
  br label %355

45:                                               ; preds = %29
  %46 = landingpad { ptr, i32 }
          cleanup
  br label %355

47:                                               ; preds = %34
  %48 = load ptr, ptr %27, align 8, !tbaa !9
  %49 = getelementptr inbounds i8, ptr %48, i64 96
  %50 = load ptr, ptr %49, align 8
  %51 = invoke noundef ptr %50(ptr noundef nonnull align 8 dereferenceable(56) %27, i32 noundef %.094)
          to label %52 unwind label %59

52:                                               ; preds = %47
  %53 = uitofp nneg i32 %.094 to double
  %54 = fdiv double %53, 9.000000e+00
  %55 = call double @llvm.fmuladd.f64(double %54, double 5.000000e-01, double 5.000000e-01)
  %56 = fptrunc double %55 to float
  invoke void @_ZN14ConstantNeuron7setRateEf(ptr noundef nonnull align 8 dereferenceable(80) %51, float noundef %56)
          to label %57 unwind label %59

57:                                               ; preds = %52
  %58 = add nuw nsw i32 %.094, 1
  br label %29, !llvm.loop !11

59:                                               ; preds = %52, %47
  %60 = landingpad { ptr, i32 }
          cleanup
  br label %355

61:                                               ; preds = %36
  invoke void @_ZN15CompositeNeuronI9MemNeuron13StaticSynapseEC2ERKS0_ff(ptr noundef nonnull align 8 dereferenceable(72) %6, ptr noundef nonnull align 8 dereferenceable(64) %7, float noundef 1.000000e+00, float noundef 1.000000e+00)
          to label %62 unwind label %71

62:                                               ; preds = %61
  %63 = invoke noundef ptr @_ZN7Network16createPopulationI15CompositeNeuronI9MemNeuron13StaticSynapseEEEP10PopulationIT_EiiS6_b(ptr noundef nonnull align 8 dereferenceable(224) %3, i32 noundef 1, i32 noundef 9, ptr noundef nonnull %6, i1 noundef zeroext false)
          to label %64 unwind label %73

64:                                               ; preds = %62
  call void @_ZN9MemNeuronD2Ev(ptr noundef nonnull align 8 dereferenceable(72) %6) #12
  call void @_ZN9MemNeuronD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %7) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %7) #12
  br i1 %.073, label %65, label %79

65:                                               ; preds = %64
  %66 = invoke noundef ptr @_Z9loadArrayPKci(ptr noundef nonnull @.str.1, i32 noundef 4)
          to label %67 unwind label %77

67:                                               ; preds = %65
  %68 = invoke noundef ptr @_Z9loadArrayPKci(ptr noundef nonnull @.str.2, i32 noundef 4)
          to label %83 unwind label %77

69:                                               ; preds = %36
  %70 = landingpad { ptr, i32 }
          cleanup
  br label %76

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

73:                                               ; preds = %62
  %74 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN9MemNeuronD2Ev(ptr noundef nonnull align 8 dereferenceable(72) %6) #12
  br label %75

75:                                               ; preds = %73, %71
  %.pn98 = phi { ptr, i32 } [ %74, %73 ], [ %72, %71 ]
  call void @_ZN9MemNeuronD1Ev(ptr noundef nonnull align 8 dereferenceable(64) %7) #12
  br label %76

76:                                               ; preds = %75, %69
  %.pn98.pn = phi { ptr, i32 } [ %.pn98, %75 ], [ %70, %69 ]
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %7) #12
  br label %355

77:                                               ; preds = %83, %81, %79, %67, %65
  %78 = landingpad { ptr, i32 }
          cleanup
  br label %355

79:                                               ; preds = %64
  %80 = invoke noalias noundef nonnull dereferenceable(16) ptr @_Znam(i64 noundef 16) #13
          to label %81 unwind label %77

81:                                               ; preds = %79
  store <4 x float> <float 0x3F947AE140000000, float 0x3F9EB851E0000000, float 0x3FA47AE140000000, float 0x3FA99999A0000000>, ptr %80, align 4, !tbaa !13
  %82 = invoke noundef ptr @_Z13getConstArrayIfEPT_S0_i(float noundef 0x3F50624DE0000000, i32 noundef 4)
          to label %83 unwind label %77

83:                                               ; preds = %81, %67
  %.075 = phi ptr [ %66, %67 ], [ %80, %81 ]
  %.074 = phi ptr [ %68, %67 ], [ %82, %81 ]
  %84 = invoke noundef i32 @_ZN7Network11connectConvI15CompositeNeuronI14ConstantNeuron13StaticSynapseES1_I9MemNeuronS3_EEEiP10PopulationIT_EPS7_IT0_EPfSE_P9SpikeTypeiiii(ptr noundef nonnull align 8 dereferenceable(224) %3, ptr noundef nonnull %27, ptr noundef %63, ptr noundef %.075, ptr noundef %.074, ptr noundef null, i32 noundef 3, i32 noundef 3, i32 noundef 2, i32 noundef 2)
          to label %85 unwind label %77

85:                                               ; preds = %83
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %8) #12
  invoke void @_ZN18SingleGPUSimulatorC1EP7Networkf(ptr noundef nonnull align 8 dereferenceable(20) %8, ptr noundef nonnull %3, float noundef 0x3F50624DE0000000)
          to label %86 unwind label %329

86:                                               ; preds = %85
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %9) #12
  call void @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE9ArrayInfoSt4lessIS5_ESaISt4pairIKS5_S6_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %9) #12
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %10) #12
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %11) #12
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %11) #12
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef nonnull @.str.3, ptr noundef nonnull align 1 dereferenceable(1) %11)
          to label %87 unwind label %331

87:                                               ; preds = %86
  %88 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE9ArrayInfoSt4lessIS5_ESaISt4pairIKS5_S6_EEEixEOS5_(ptr noundef nonnull align 8 dereferenceable(48) %9, ptr noundef nonnull align 8 dereferenceable(32) %10)
          to label %89 unwind label %333

89:                                               ; preds = %87
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %88, i8 0, i64 16, i1 false)
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #12
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %11) #12
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %11) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #12
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %12) #12
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %13) #12
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %13) #12
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %12, ptr noundef nonnull @.str.4, ptr noundef nonnull align 1 dereferenceable(1) %13)
          to label %90 unwind label %336

90:                                               ; preds = %89
  %91 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE9ArrayInfoSt4lessIS5_ESaISt4pairIKS5_S6_EEEixEOS5_(ptr noundef nonnull align 8 dereferenceable(48) %9, ptr noundef nonnull align 8 dereferenceable(32) %12)
          to label %92 unwind label %338

92:                                               ; preds = %90
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %91, i8 0, i64 16, i1 false)
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #12
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %13) #12
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %13) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %12) #12
  %93 = invoke noundef i32 @_ZN18SingleGPUSimulator3runEfRSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE9ArrayInfoSt4lessIS6_ESaISt4pairIKS6_S7_EEE(ptr noundef nonnull align 8 dereferenceable(20) %8, float noundef 0x3FBC28F5C0000000, ptr noundef nonnull align 8 dereferenceable(48) %9)
          to label %94 unwind label %341

94:                                               ; preds = %92
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %14) #12
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %15) #12
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %15) #12
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %14, ptr noundef nonnull @.str.3, ptr noundef nonnull align 1 dereferenceable(1) %15)
          to label %95 unwind label %343

95:                                               ; preds = %94
  %96 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE9ArrayInfoSt4lessIS5_ESaISt4pairIKS5_S6_EEEixEOS5_(ptr noundef nonnull align 8 dereferenceable(48) %9, ptr noundef nonnull align 8 dereferenceable(32) %14)
          to label %97 unwind label %345

97:                                               ; preds = %95
  %98 = getelementptr inbounds i8, ptr %96, i64 8
  %99 = load ptr, ptr %98, align 8, !tbaa !15
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #12
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %15) #12
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %15) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %14) #12
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %16) #12
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %17) #12
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %17) #12
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef nonnull @.str.4, ptr noundef nonnull align 1 dereferenceable(1) %17)
          to label %100 unwind label %348

100:                                              ; preds = %97
  %101 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE9ArrayInfoSt4lessIS5_ESaISt4pairIKS5_S6_EEEixEOS5_(ptr noundef nonnull align 8 dereferenceable(48) %9, ptr noundef nonnull align 8 dereferenceable(32) %16)
          to label %.preheader118 unwind label %350

.preheader118:                                    ; preds = %100
  %102 = getelementptr inbounds i8, ptr %101, i64 8
  %103 = load ptr, ptr %102, align 8, !tbaa !15
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #12
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %17) #12
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %17) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %16) #12
  %104 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.5)
  %105 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.6)
  %106 = load i32, ptr %99, align 4, !tbaa !18
  %107 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.7, i32 noundef %106)
  %108 = getelementptr inbounds i8, ptr %99, i64 4
  %109 = load i32, ptr %108, align 4, !tbaa !18
  %110 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.7, i32 noundef %109)
  %111 = getelementptr inbounds i8, ptr %99, i64 8
  %112 = load i32, ptr %111, align 4, !tbaa !18
  %113 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.7, i32 noundef %112)
  %114 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.8)
  %115 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.6)
  %116 = getelementptr inbounds i8, ptr %99, i64 12
  %117 = load i32, ptr %116, align 4, !tbaa !18
  %118 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.7, i32 noundef %117)
  %119 = getelementptr inbounds i8, ptr %99, i64 16
  %120 = load i32, ptr %119, align 4, !tbaa !18
  %121 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.7, i32 noundef %120)
  %122 = getelementptr inbounds i8, ptr %99, i64 20
  %123 = load i32, ptr %122, align 4, !tbaa !18
  %124 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.7, i32 noundef %123)
  %125 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.8)
  %126 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.6)
  %127 = getelementptr inbounds i8, ptr %99, i64 24
  %128 = load i32, ptr %127, align 4, !tbaa !18
  %129 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.7, i32 noundef %128)
  %130 = getelementptr inbounds i8, ptr %99, i64 28
  %131 = load i32, ptr %130, align 4, !tbaa !18
  %132 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.7, i32 noundef %131)
  %133 = getelementptr inbounds i8, ptr %99, i64 32
  %134 = load i32, ptr %133, align 4, !tbaa !18
  %135 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.7, i32 noundef %134)
  %136 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.8)
  %137 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.9)
  %138 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.6)
  %139 = load float, ptr %.075, align 4, !tbaa !13
  %140 = fpext float %139 to double
  %141 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10, double noundef %140)
  %142 = getelementptr inbounds i8, ptr %.075, i64 4
  %143 = load float, ptr %142, align 4, !tbaa !13
  %144 = fpext float %143 to double
  %145 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10, double noundef %144)
  %146 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.8)
  %147 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.6)
  %148 = getelementptr inbounds i8, ptr %.075, i64 8
  %149 = load float, ptr %148, align 4, !tbaa !13
  %150 = fpext float %149 to double
  %151 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10, double noundef %150)
  %152 = getelementptr inbounds i8, ptr %.075, i64 12
  %153 = load float, ptr %152, align 4, !tbaa !13
  %154 = fpext float %153 to double
  %155 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10, double noundef %154)
  %156 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.8)
  %157 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.11)
  %158 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.6)
  %159 = getelementptr inbounds i8, ptr %103, i64 36
  %160 = load float, ptr %159, align 4, !tbaa !13
  %161 = fpext float %160 to double
  %162 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10, double noundef %161)
  %163 = getelementptr inbounds i8, ptr %103, i64 40
  %164 = load float, ptr %163, align 4, !tbaa !13
  %165 = fpext float %164 to double
  %166 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10, double noundef %165)
  %167 = getelementptr inbounds i8, ptr %103, i64 44
  %168 = load float, ptr %167, align 4, !tbaa !13
  %169 = fpext float %168 to double
  %170 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10, double noundef %169)
  %171 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.8)
  %172 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.6)
  %173 = getelementptr inbounds i8, ptr %103, i64 48
  %174 = load float, ptr %173, align 4, !tbaa !13
  %175 = fpext float %174 to double
  %176 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10, double noundef %175)
  %177 = getelementptr inbounds i8, ptr %103, i64 52
  %178 = load float, ptr %177, align 4, !tbaa !13
  %179 = fpext float %178 to double
  %180 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10, double noundef %179)
  %181 = getelementptr inbounds i8, ptr %103, i64 56
  %182 = load float, ptr %181, align 4, !tbaa !13
  %183 = fpext float %182 to double
  %184 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10, double noundef %183)
  %185 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.8)
  %186 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.6)
  %187 = getelementptr inbounds i8, ptr %103, i64 60
  %188 = load float, ptr %187, align 4, !tbaa !13
  %189 = fpext float %188 to double
  %190 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10, double noundef %189)
  %191 = getelementptr inbounds i8, ptr %103, i64 64
  %192 = load float, ptr %191, align 4, !tbaa !13
  %193 = fpext float %192 to double
  %194 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10, double noundef %193)
  %195 = getelementptr inbounds i8, ptr %103, i64 68
  %196 = load float, ptr %195, align 4, !tbaa !13
  %197 = fpext float %196 to double
  %198 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10, double noundef %197)
  %199 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.8)
  %200 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.12)
  %invariant.gep = getelementptr inbounds i8, ptr %99, i64 4
  %invariant.gep158 = getelementptr inbounds i8, ptr %99, i64 4
  %invariant.gep160 = getelementptr inbounds i8, ptr %99, i64 8
  %invariant.gep166 = getelementptr inbounds i8, ptr %99, i64 8
  %201 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.6)
  %202 = load i32, ptr %99, align 4, !tbaa !18
  %203 = sitofp i32 %202 to float
  %204 = load float, ptr %.075, align 4, !tbaa !13
  %205 = call float @llvm.fmuladd.f32(float %203, float %204, float 0.000000e+00)
  %206 = load i32, ptr %invariant.gep, align 4, !tbaa !18
  %207 = sitofp i32 %206 to float
  %208 = load float, ptr %142, align 4, !tbaa !13
  %209 = call float @llvm.fmuladd.f32(float %207, float %208, float %205)
  %210 = getelementptr inbounds i8, ptr %99, i64 12
  %211 = load i32, ptr %210, align 4, !tbaa !18
  %212 = sitofp i32 %211 to float
  %213 = load float, ptr %148, align 4, !tbaa !13
  %214 = call float @llvm.fmuladd.f32(float %212, float %213, float %209)
  %gep157 = getelementptr inbounds i8, ptr %99, i64 16
  %215 = load i32, ptr %gep157, align 4, !tbaa !18
  %216 = sitofp i32 %215 to float
  %217 = load float, ptr %152, align 4, !tbaa !13
  %218 = call float @llvm.fmuladd.f32(float %216, float %217, float %214)
  %219 = fpext float %218 to double
  %220 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10, double noundef %219)
  %221 = load i32, ptr %invariant.gep158, align 4, !tbaa !18
  %222 = sitofp i32 %221 to float
  %223 = load float, ptr %.075, align 4, !tbaa !13
  %224 = call float @llvm.fmuladd.f32(float %222, float %223, float 0.000000e+00)
  %225 = load i32, ptr %invariant.gep160, align 4, !tbaa !18
  %226 = sitofp i32 %225 to float
  %227 = load float, ptr %142, align 4, !tbaa !13
  %228 = call float @llvm.fmuladd.f32(float %226, float %227, float %224)
  %gep163 = getelementptr inbounds i8, ptr %99, i64 16
  %229 = load i32, ptr %gep163, align 4, !tbaa !18
  %230 = sitofp i32 %229 to float
  %231 = load float, ptr %148, align 4, !tbaa !13
  %232 = call float @llvm.fmuladd.f32(float %230, float %231, float %228)
  %gep165 = getelementptr inbounds i8, ptr %99, i64 20
  %233 = load i32, ptr %gep165, align 4, !tbaa !18
  %234 = sitofp i32 %233 to float
  %235 = load float, ptr %152, align 4, !tbaa !13
  %236 = call float @llvm.fmuladd.f32(float %234, float %235, float %232)
  %237 = fpext float %236 to double
  %238 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10, double noundef %237)
  %239 = load i32, ptr %invariant.gep166, align 4, !tbaa !18
  %240 = sitofp i32 %239 to float
  %241 = load float, ptr %.075, align 4, !tbaa !13
  %242 = call float @llvm.fmuladd.f32(float %240, float %241, float 0.000000e+00)
  %gep169 = getelementptr inbounds i8, ptr %99, i64 20
  %243 = load i32, ptr %gep169, align 4, !tbaa !18
  %244 = sitofp i32 %243 to float
  %245 = load float, ptr %148, align 4, !tbaa !13
  %246 = call float @llvm.fmuladd.f32(float %244, float %245, float %242)
  %247 = fpext float %246 to double
  %248 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10, double noundef %247)
  %249 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.8)
  %250 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.6)
  %251 = getelementptr inbounds i8, ptr %99, i64 12
  %252 = load i32, ptr %251, align 4, !tbaa !18
  %253 = sitofp i32 %252 to float
  %254 = load float, ptr %.075, align 4, !tbaa !13
  %255 = call float @llvm.fmuladd.f32(float %253, float %254, float 0.000000e+00)
  %gep.1 = getelementptr inbounds i8, ptr %99, i64 16
  %256 = load i32, ptr %gep.1, align 4, !tbaa !18
  %257 = sitofp i32 %256 to float
  %258 = load float, ptr %142, align 4, !tbaa !13
  %259 = call float @llvm.fmuladd.f32(float %257, float %258, float %255)
  %260 = getelementptr inbounds i8, ptr %99, i64 24
  %261 = load i32, ptr %260, align 4, !tbaa !18
  %262 = sitofp i32 %261 to float
  %263 = load float, ptr %148, align 4, !tbaa !13
  %264 = call float @llvm.fmuladd.f32(float %262, float %263, float %259)
  %gep157.1 = getelementptr inbounds i8, ptr %99, i64 28
  %265 = load i32, ptr %gep157.1, align 4, !tbaa !18
  %266 = sitofp i32 %265 to float
  %267 = load float, ptr %152, align 4, !tbaa !13
  %268 = call float @llvm.fmuladd.f32(float %266, float %267, float %264)
  %269 = fpext float %268 to double
  %270 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10, double noundef %269)
  %gep159.1 = getelementptr inbounds i8, ptr %99, i64 16
  %271 = load i32, ptr %gep159.1, align 4, !tbaa !18
  %272 = sitofp i32 %271 to float
  %273 = load float, ptr %.075, align 4, !tbaa !13
  %274 = call float @llvm.fmuladd.f32(float %272, float %273, float 0.000000e+00)
  %gep161.1 = getelementptr inbounds i8, ptr %99, i64 20
  %275 = load i32, ptr %gep161.1, align 4, !tbaa !18
  %276 = sitofp i32 %275 to float
  %277 = load float, ptr %142, align 4, !tbaa !13
  %278 = call float @llvm.fmuladd.f32(float %276, float %277, float %274)
  %gep163.1 = getelementptr inbounds i8, ptr %99, i64 28
  %279 = load i32, ptr %gep163.1, align 4, !tbaa !18
  %280 = sitofp i32 %279 to float
  %281 = load float, ptr %148, align 4, !tbaa !13
  %282 = call float @llvm.fmuladd.f32(float %280, float %281, float %278)
  %gep165.1 = getelementptr inbounds i8, ptr %99, i64 32
  %283 = load i32, ptr %gep165.1, align 4, !tbaa !18
  %284 = sitofp i32 %283 to float
  %285 = load float, ptr %152, align 4, !tbaa !13
  %286 = call float @llvm.fmuladd.f32(float %284, float %285, float %282)
  %287 = fpext float %286 to double
  %288 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10, double noundef %287)
  %gep167.1 = getelementptr inbounds i8, ptr %99, i64 20
  %289 = load i32, ptr %gep167.1, align 4, !tbaa !18
  %290 = sitofp i32 %289 to float
  %291 = load float, ptr %.075, align 4, !tbaa !13
  %292 = call float @llvm.fmuladd.f32(float %290, float %291, float 0.000000e+00)
  %gep169.1 = getelementptr inbounds i8, ptr %99, i64 32
  %293 = load i32, ptr %gep169.1, align 4, !tbaa !18
  %294 = sitofp i32 %293 to float
  %295 = load float, ptr %148, align 4, !tbaa !13
  %296 = call float @llvm.fmuladd.f32(float %294, float %295, float %292)
  %297 = fpext float %296 to double
  %298 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10, double noundef %297)
  %299 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.8)
  %300 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.6)
  %301 = getelementptr inbounds i8, ptr %99, i64 24
  %302 = load i32, ptr %301, align 4, !tbaa !18
  %303 = sitofp i32 %302 to float
  %304 = load float, ptr %.075, align 4, !tbaa !13
  %305 = call float @llvm.fmuladd.f32(float %303, float %304, float 0.000000e+00)
  %gep.2 = getelementptr inbounds i8, ptr %99, i64 28
  %306 = load i32, ptr %gep.2, align 4, !tbaa !18
  %307 = sitofp i32 %306 to float
  %308 = load float, ptr %142, align 4, !tbaa !13
  %309 = call float @llvm.fmuladd.f32(float %307, float %308, float %305)
  %310 = fpext float %309 to double
  %311 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10, double noundef %310)
  %gep159.2 = getelementptr inbounds i8, ptr %99, i64 28
  %312 = load i32, ptr %gep159.2, align 4, !tbaa !18
  %313 = sitofp i32 %312 to float
  %314 = load float, ptr %.075, align 4, !tbaa !13
  %315 = call float @llvm.fmuladd.f32(float %313, float %314, float 0.000000e+00)
  %gep161.2 = getelementptr inbounds i8, ptr %99, i64 32
  %316 = load i32, ptr %gep161.2, align 4, !tbaa !18
  %317 = sitofp i32 %316 to float
  %318 = load float, ptr %142, align 4, !tbaa !13
  %319 = call float @llvm.fmuladd.f32(float %317, float %318, float %315)
  %320 = fpext float %319 to double
  %321 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10, double noundef %320)
  %gep167.2 = getelementptr inbounds i8, ptr %99, i64 32
  %322 = load i32, ptr %gep167.2, align 4, !tbaa !18
  %323 = sitofp i32 %322 to float
  %324 = load float, ptr %.075, align 4, !tbaa !13
  %325 = call float @llvm.fmuladd.f32(float %323, float %324, float 0.000000e+00)
  %326 = fpext float %325 to double
  %327 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10, double noundef %326)
  %328 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.8)
  call void @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE9ArrayInfoSt4lessIS5_ESaISt4pairIKS5_S6_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %9) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %9) #12
  call void @_ZN18SingleGPUSimulatorD1Ev(ptr noundef nonnull align 8 dereferenceable(20) %8) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %8) #12
  call void @_ZN7NetworkD1Ev(ptr noundef nonnull align 8 dereferenceable(224) %3) #12
  call void @llvm.lifetime.end.p0(i64 224, ptr nonnull %3) #12
  ret i32 0

329:                                              ; preds = %85
  %330 = landingpad { ptr, i32 }
          cleanup
  br label %354

331:                                              ; preds = %86
  %332 = landingpad { ptr, i32 }
          cleanup
  br label %335

333:                                              ; preds = %87
  %334 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #12
  br label %335

335:                                              ; preds = %333, %331
  %.pn101 = phi { ptr, i32 } [ %334, %333 ], [ %332, %331 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %11) #12
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %11) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #12
  br label %353

336:                                              ; preds = %89
  %337 = landingpad { ptr, i32 }
          cleanup
  br label %340

338:                                              ; preds = %90
  %339 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #12
  br label %340

340:                                              ; preds = %338, %336
  %.pn103 = phi { ptr, i32 } [ %339, %338 ], [ %337, %336 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %13) #12
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %13) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %12) #12
  br label %353

341:                                              ; preds = %92
  %342 = landingpad { ptr, i32 }
          cleanup
  br label %353

343:                                              ; preds = %94
  %344 = landingpad { ptr, i32 }
          cleanup
  br label %347

345:                                              ; preds = %95
  %346 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #12
  br label %347

347:                                              ; preds = %345, %343
  %.pn105 = phi { ptr, i32 } [ %346, %345 ], [ %344, %343 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %15) #12
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %15) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %14) #12
  br label %353

348:                                              ; preds = %97
  %349 = landingpad { ptr, i32 }
          cleanup
  br label %352

350:                                              ; preds = %100
  %351 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #12
  br label %352

352:                                              ; preds = %350, %348
  %.pn107 = phi { ptr, i32 } [ %351, %350 ], [ %349, %348 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %17) #12
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %17) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %16) #12
  br label %353

353:                                              ; preds = %347, %352, %341, %340, %335
  %.pn107.pn.pn = phi { ptr, i32 } [ %342, %341 ], [ %.pn103, %340 ], [ %.pn101, %335 ], [ %.pn107, %352 ], [ %.pn105, %347 ]
  call void @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE9ArrayInfoSt4lessIS5_ESaISt4pairIKS5_S6_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %9) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %9) #12
  call void @_ZN18SingleGPUSimulatorD1Ev(ptr noundef nonnull align 8 dereferenceable(20) %8) #12
  br label %354

354:                                              ; preds = %353, %329
  %.pn107.pn.pn.pn = phi { ptr, i32 } [ %.pn107.pn.pn, %353 ], [ %330, %329 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %8) #12
  br label %355

355:                                              ; preds = %76, %354, %77, %45, %59, %44
  %.pn114.pn = phi { ptr, i32 } [ %.pn.pn, %44 ], [ %60, %59 ], [ %46, %45 ], [ %.pn98.pn, %76 ], [ %.pn107.pn.pn.pn, %354 ], [ %78, %77 ]
  call void @_ZN7NetworkD1Ev(ptr noundef nonnull align 8 dereferenceable(224) %3) #12
  call void @llvm.lifetime.end.p0(i64 224, ptr nonnull %3) #12
  resume { ptr, i32 } %.pn114.pn
}

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

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: read)
declare i32 @strcmp(ptr nocapture noundef, ptr nocapture noundef) local_unnamed_addr #2

declare void @_ZN7NetworkC1Ev(ptr noundef nonnull align 8 dereferenceable(224)) unnamed_addr #3

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

declare void @_ZN14ConstantNeuronC1Efff(ptr noundef nonnull align 8 dereferenceable(80), float noundef, float noundef, float noundef) unnamed_addr #3

declare i32 @__gxx_personality_v0(...)

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN15CompositeNeuronI14ConstantNeuron13StaticSynapseEC2ERKS0_ff(ptr noundef nonnull align 8 dereferenceable(88), ptr noundef nonnull align 8 dereferenceable(80), float noundef, float noundef) unnamed_addr #4 align 2

; Function Attrs: nounwind
declare void @_ZN14ConstantNeuronD2Ev(ptr noundef nonnull align 8 dereferenceable(80)) unnamed_addr #5

; Function Attrs: nounwind
declare void @_ZN14ConstantNeuronD1Ev(ptr noundef nonnull align 8 dereferenceable(80)) unnamed_addr #5

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

declare void @_ZN14ConstantNeuron7setRateEf(ptr noundef nonnull align 8 dereferenceable(80), float noundef) local_unnamed_addr #3

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

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

declare void @_ZN9MemNeuronC1Ef(ptr noundef nonnull align 8 dereferenceable(64), float noundef) unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN15CompositeNeuronI9MemNeuron13StaticSynapseEC2ERKS0_ff(ptr noundef nonnull align 8 dereferenceable(72), ptr noundef nonnull align 8 dereferenceable(64), float noundef, float noundef) unnamed_addr #4 align 2

; Function Attrs: nounwind
declare void @_ZN9MemNeuronD2Ev(ptr noundef nonnull align 8 dereferenceable(64)) unnamed_addr #5

; Function Attrs: nounwind
declare void @_ZN9MemNeuronD1Ev(ptr noundef nonnull align 8 dereferenceable(64)) unnamed_addr #5

declare noundef ptr @_Z9loadArrayPKci(ptr noundef, i32 noundef) local_unnamed_addr #3

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_Z13getConstArrayIfEPT_S0_i(float noundef, i32 noundef) local_unnamed_addr #4

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZN7Network11connectConvI15CompositeNeuronI14ConstantNeuron13StaticSynapseES1_I9MemNeuronS3_EEEiP10PopulationIT_EPS7_IT0_EPfSE_P9SpikeTypeiiii(ptr noundef nonnull align 8 dereferenceable(224), ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #4 align 2

declare void @_ZN18SingleGPUSimulatorC1EP7Networkf(ptr noundef nonnull align 8 dereferenceable(20), ptr noundef, float noundef) unnamed_addr #3

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE9ArrayInfoSt4lessIS5_ESaISt4pairIKS5_S6_EEEixEOS5_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #9 align 2

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

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

declare noundef i32 @_ZN18SingleGPUSimulator3runEfRSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE9ArrayInfoSt4lessIS6_ESaISt4pairIKS6_S7_EEE(ptr noundef nonnull align 8 dereferenceable(20), float noundef, ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #3

; Function Attrs: nofree nounwind
declare noundef i32 @printf(ptr nocapture noundef readonly, ...) local_unnamed_addr #10

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

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

; Function Attrs: nounwind
declare void @_ZN18SingleGPUSimulatorD1Ev(ptr noundef nonnull align 8 dereferenceable(20)) unnamed_addr #5

; Function Attrs: nounwind
declare void @_ZN7NetworkD1Ev(ptr noundef nonnull align 8 dereferenceable(224)) unnamed_addr #5

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

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

!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 = !{!"vtable pointer", !8, i64 0}
!11 = distinct !{!11, !12}
!12 = !{!"llvm.loop.mustprogress"}
!13 = !{!14, !14, i64 0}
!14 = !{!"float", !7, i64 0}
!15 = !{!16, !6, i64 8}
!16 = !{!"_ZTS9ArrayInfo", !17, i64 0, !6, i64 8}
!17 = !{!"int", !7, i64 0}
!18 = !{!17, !17, i64 0}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LCSSAPass,LICMPass,LoopInstSimplifyPass,LoopRotatePass,LoopSimplifyCFGPass,LoopSimplifyPass,LoopUnrollPass,MemCpyOptPass,PostOrderFunctionAttrsPass,ReassociatePass,SCCPPass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass