; LLVM IR from stonne-simulator/omega :: omega-code/stonne/src (ASNetwork)

; 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.Config = type { i32, %class.DSNetworkConfig, %class.DSwitchConfig, %class.MSNetworkConfig, %class.MSwitchConfig, %class.ASNetworkConfig, %class.ASwitchConfig, %class.LookUpTableConfig, %class.SDMemoryConfig }
%class.DSNetworkConfig = type { i32 }
%class.DSwitchConfig = type { i32, i32, i32, i32 }
%class.MSNetworkConfig = type { i32, i32, i32, i32 }
%class.MSwitchConfig = type { i32, i32, i32, i32, i32, i32 }
%class.ASNetworkConfig = type { i32, i32 }
%class.ASwitchConfig = type { i32, i32, i32, i32, i32, i32 }
%class.LookUpTableConfig = type { i32, i32 }
%class.SDMemoryConfig = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 }
%"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" = type { i8 }
%"struct.std::pair" = type { i32, i32 }
%class.ASNetwork = type <{ %class.ReduceNetwork, i32, i32, i32, [4 x i8], %"class.std::map", %"class.std::vector", %"class.std::vector", %"class.std::map.6", %"class.std::map.6", %"class.std::vector.11", ptr, ptr, i8, [3 x i8], %class.Config, [4 x i8] }>
%class.ReduceNetwork = type { %class.Unit }
%class.Unit = type { ptr, i32, %"class.std::__cxx11::basic_string" }
%"class.std::map" = type { %"class.std::_Rb_tree" }
%"class.std::_Rb_tree" = type { %"struct.std::_Rb_tree<std::pair<int, int>, std::pair<const std::pair<int, int>, ASwitch *>, std::_Select1st<std::pair<const std::pair<int, int>, ASwitch *>>, std::less<std::pair<int, int>>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<std::pair<int, int>, std::pair<const std::pair<int, int>, ASwitch *>, std::_Select1st<std::pair<const std::pair<int, int>, ASwitch *>>, std::less<std::pair<int, int>>>::_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::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<ASwitch *, std::allocator<ASwitch *>>::_Vector_impl" }
%"struct.std::_Vector_base<ASwitch *, std::allocator<ASwitch *>>::_Vector_impl" = type { %"struct.std::_Vector_base<ASwitch *, std::allocator<ASwitch *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<ASwitch *, std::allocator<ASwitch *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::map.6" = type { %"class.std::_Rb_tree.7" }
%"class.std::_Rb_tree.7" = type { %"struct.std::_Rb_tree<std::pair<int, int>, std::pair<const std::pair<int, int>, Connection *>, std::_Select1st<std::pair<const std::pair<int, int>, Connection *>>, std::less<std::pair<int, int>>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<std::pair<int, int>, std::pair<const std::pair<int, int>, Connection *>, std::_Select1st<std::pair<const std::pair<int, int>, Connection *>>, std::less<std::pair<int, int>>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"class.std::vector.11" = type { %"struct.std::_Vector_base.12" }
%"struct.std::_Vector_base.12" = type { %"struct.std::_Vector_base<Connection *, std::allocator<Connection *>>::_Vector_impl" }
%"struct.std::_Vector_base<Connection *, std::allocator<Connection *>>::_Vector_impl" = type { %"struct.std::_Vector_base<Connection *, std::allocator<Connection *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<Connection *, std::allocator<Connection *>>::_Vector_impl_data" = type { ptr, ptr, ptr }

@_ZTV9ASNetwork = external dso_local unnamed_addr constant { [14 x ptr] }, align 8
@.str = external hidden unnamed_addr constant [20 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [92 x i8], align 1
@__PRETTY_FUNCTION__._ZN9ASNetworkC2EjNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE6ConfigP10Connection = external hidden unnamed_addr constant [62 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [9 x i8], align 1

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN9ASNetworkC2EjNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE6ConfigP10Connection(ptr noundef nonnull align 8 dereferenceable(460) %0, i32 noundef %1, ptr noundef %2, ptr noundef byval(%class.Config) align 8 %3, ptr noundef %4) unnamed_addr #0 align 2 personality ptr @__gxx_personality_v0 {
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca %"class.std::__cxx11::basic_string", align 8
  %11 = alloca ptr, align 8
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca %"class.std::__cxx11::basic_string", align 8
  %20 = alloca %"class.std::allocator", align 1
  %21 = alloca ptr, align 8
  %22 = alloca %"class.std::__cxx11::basic_string", align 8
  %23 = alloca %class.Config, align 8
  %24 = alloca i1, align 1
  %25 = alloca %"struct.std::pair", align 4
  %26 = alloca %"struct.std::pair", align 4
  %27 = alloca i32, align 4
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  %30 = alloca %"struct.std::pair", align 4
  %31 = alloca %"struct.std::pair", align 4
  %32 = alloca i32, align 4
  %33 = alloca ptr, align 8
  %34 = alloca i32, align 4
  %35 = alloca ptr, align 8
  %36 = alloca i32, align 4
  %37 = alloca %"struct.std::pair", align 4
  store ptr %0, ptr %6, align 8, !tbaa !5
  store i32 %1, ptr %7, align 4, !tbaa !9
  store ptr %2, ptr %8, align 8, !tbaa !5
  store ptr %4, ptr %9, align 8, !tbaa !5
  %38 = load ptr, ptr %6, align 8
  %39 = load i32, ptr %7, align 4, !tbaa !9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef nonnull align 8 dereferenceable(32) %2)
  invoke void @_ZN13ReduceNetworkC2EjNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(48) %38, i32 noundef %39, ptr noundef %10)
          to label %40 unwind label %70

40:                                               ; preds = %5
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #9
  store ptr getelementptr inbounds inrange(-16, 96) ({ [14 x ptr] }, ptr @_ZTV9ASNetwork, i32 0, i32 0, i32 2), ptr %38, align 8, !tbaa !11
  %41 = getelementptr inbounds %class.ASNetwork, ptr %38, i32 0, i32 5
  call void @_ZNSt3mapISt4pairIiiEP7ASwitchSt4lessIS1_ESaIS0_IKS1_S3_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %41) #9
  %42 = getelementptr inbounds %class.ASNetwork, ptr %38, i32 0, i32 6
  call void @_ZNSt6vectorIP7ASwitchSaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %42) #9
  %43 = getelementptr inbounds %class.ASNetwork, ptr %38, i32 0, i32 7
  call void @_ZNSt6vectorIP7ASwitchSaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %43) #9
  %44 = getelementptr inbounds %class.ASNetwork, ptr %38, i32 0, i32 8
  call void @_ZNSt3mapISt4pairIiiEP10ConnectionSt4lessIS1_ESaIS0_IKS1_S3_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %44) #9
  %45 = getelementptr inbounds %class.ASNetwork, ptr %38, i32 0, i32 9
  call void @_ZNSt3mapISt4pairIiiEP10ConnectionSt4lessIS1_ESaIS0_IKS1_S3_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %45) #9
  %46 = getelementptr inbounds %class.ASNetwork, ptr %38, i32 0, i32 10
  call void @_ZNSt6vectorIP10ConnectionSaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %46) #9
  %47 = getelementptr inbounds %class.ASNetwork, ptr %38, i32 0, i32 15
  invoke void @_ZN6ConfigC1Ev(ptr noundef nonnull align 4 dereferenceable(160) %47)
          to label %48 unwind label %74

48:                                               ; preds = %40
  %49 = getelementptr inbounds %class.ASNetwork, ptr %38, i32 0, i32 15
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %49, ptr align 8 %3, i64 160, i1 false), !tbaa.struct !13
  %50 = getelementptr inbounds %class.Config, ptr %3, i32 0, i32 6
  %51 = getelementptr inbounds %class.ASwitchConfig, ptr %50, i32 0, i32 4
  %52 = load i32, ptr %51, align 8, !tbaa !22
  %53 = getelementptr inbounds %class.ASNetwork, ptr %38, i32 0, i32 1
  store i32 %52, ptr %53, align 8, !tbaa !32
  %54 = getelementptr inbounds %class.Config, ptr %3, i32 0, i32 3
  %55 = getelementptr inbounds %class.MSNetworkConfig, ptr %54, i32 0, i32 1
  %56 = load i32, ptr %55, align 4, !tbaa !59
  %57 = getelementptr inbounds %class.ASNetwork, ptr %38, i32 0, i32 2
  store i32 %56, ptr %57, align 4, !tbaa !60
  %58 = getelementptr inbounds %class.Config, ptr %3, i32 0, i32 5
  %59 = getelementptr inbounds %class.ASNetworkConfig, ptr %58, i32 0, i32 1
  %60 = load i32, ptr %59, align 4, !tbaa !61
  %61 = icmp ne i32 %60, 0
  %62 = getelementptr inbounds %class.ASNetwork, ptr %38, i32 0, i32 13
  %63 = zext i1 %61 to i8
  store i8 %63, ptr %62, align 8, !tbaa !62
  %64 = getelementptr inbounds %class.ASNetwork, ptr %38, i32 0, i32 2
  %65 = load i32, ptr %64, align 4, !tbaa !60
  %66 = invoke noundef zeroext i1 @_Z10ispowerof2j(i32 noundef %65)
          to label %67 unwind label %74

67:                                               ; preds = %48
  br i1 %66, label %68, label %69

68:                                               ; preds = %67
  br label %79

69:                                               ; preds = %67
  call void @__assert_fail(ptr noundef @.str, ptr noundef @.str.1, i32 noundef 18, ptr noundef @__PRETTY_FUNCTION__._ZN9ASNetworkC2EjNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE6ConfigP10Connection) #10
  unreachable

70:                                               ; preds = %5
  %71 = landingpad { ptr, i32 }
          cleanup
  %72 = extractvalue { ptr, i32 } %71, 0
  store ptr %72, ptr %11, align 8
  %73 = extractvalue { ptr, i32 } %71, 1
  store i32 %73, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #9
  br label %317

74:                                               ; preds = %48, %40
  %75 = landingpad { ptr, i32 }
          cleanup
  %76 = extractvalue { ptr, i32 } %75, 0
  store ptr %76, ptr %11, align 8
  %77 = extractvalue { ptr, i32 } %75, 1
  store i32 %77, ptr %12, align 4
  br label %316

78:                                               ; No predecessors!
  br label %79

79:                                               ; preds = %78, %68
  %80 = load ptr, ptr %9, align 8, !tbaa !5
  %81 = getelementptr inbounds %class.ASNetwork, ptr %38, i32 0, i32 11
  store ptr %80, ptr %81, align 8, !tbaa !63
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #9
  %82 = getelementptr inbounds %class.ASNetwork, ptr %38, i32 0, i32 2
  %83 = load i32, ptr %82, align 4, !tbaa !60
  %84 = invoke noundef double @_ZSt5log10IjEN9__gnu_cxx11__enable_ifIXsr12__is_integerIT_EE7__valueEdE6__typeES2_(i32 noundef %83)
          to label %85 unwind label %98

85:                                               ; preds = %79
  %86 = invoke noundef double @_ZSt5log10IiEN9__gnu_cxx11__enable_ifIXsr12__is_integerIT_EE7__valueEdE6__typeES2_(i32 noundef 2)
          to label %87 unwind label %98

87:                                               ; preds = %85
  %88 = fdiv double %84, %86
  %89 = fptosi double %88 to i32
  store i32 %89, ptr %13, align 4, !tbaa !9
  %90 = load i32, ptr %13, align 4, !tbaa !9
  %91 = getelementptr inbounds %class.ASNetwork, ptr %38, i32 0, i32 3
  store i32 %90, ptr %91, align 8, !tbaa !64
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #9
  store i32 1, ptr %14, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #9
  store i32 0, ptr %15, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #9
  store i32 0, ptr %16, align 4, !tbaa !9
  br label %92

92:                                               ; preds = %311, %87
  %93 = load i32, ptr %16, align 4, !tbaa !9
  %94 = getelementptr inbounds %class.ASNetwork, ptr %38, i32 0, i32 3
  %95 = load i32, ptr %94, align 8, !tbaa !64
  %96 = icmp slt i32 %93, %95
  br i1 %96, label %102, label %97

97:                                               ; preds = %92
  store i32 2, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #9
  br label %314

98:                                               ; preds = %85, %79
  %99 = landingpad { ptr, i32 }
          cleanup
  %100 = extractvalue { ptr, i32 } %99, 0
  store ptr %100, ptr %11, align 8
  %101 = extractvalue { ptr, i32 } %99, 1
  store i32 %101, ptr %12, align 4
  br label %315

102:                                              ; preds = %92
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #9
  store i32 0, ptr %18, align 4, !tbaa !9
  br label %103

103:                                              ; preds = %302, %102
  %104 = load i32, ptr %18, align 4, !tbaa !9
  %105 = load i32, ptr %14, align 4, !tbaa !9
  %106 = icmp slt i32 %104, %105
  br i1 %106, label %108, label %107

107:                                              ; preds = %103
  store i32 5, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #9
  br label %308

108:                                              ; preds = %103
  call void @llvm.lifetime.start.p0(i64 32, ptr %19) #9
  %109 = load i32, ptr %15, align 4, !tbaa !9
  %110 = zext i32 %109 to i64
  %111 = getelementptr inbounds i8, ptr @.str.2, i64 %110
  call void @llvm.lifetime.start.p0(i64 1, ptr %20) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %20) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %19, ptr noundef %111, ptr noundef nonnull align 1 dereferenceable(1) %20)
          to label %112 unwind label %135

112:                                              ; preds = %108
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %20) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %20) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #9
  %113 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 288) #11
          to label %114 unwind label %139

114:                                              ; preds = %112
  store i1 true, ptr %24, align 1
  %115 = load i32, ptr %15, align 4, !tbaa !9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %22, ptr noundef nonnull align 8 dereferenceable(32) %19)
          to label %116 unwind label %143

116:                                              ; preds = %114
  %117 = load i32, ptr %16, align 4, !tbaa !9
  %118 = load i32, ptr %18, align 4, !tbaa !9
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %23, ptr align 8 %3, i64 160, i1 false), !tbaa.struct !13
  invoke void @_ZN7ASwitchC1EjNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEjj6Config(ptr noundef nonnull align 8 dereferenceable(288) %113, i32 noundef %115, ptr noundef %22, i32 noundef %117, i32 noundef %118, ptr noundef byval(%class.Config) align 8 %23)
          to label %119 unwind label %147

119:                                              ; preds = %116
  store i1 false, ptr %24, align 1
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #9
  store ptr %113, ptr %21, align 8, !tbaa !5
  %120 = load i32, ptr %15, align 4, !tbaa !9
  %121 = add i32 %120, 1
  store i32 %121, ptr %15, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #9
  invoke void @_ZNSt4pairIiiEC2IRiS2_TnNSt9enable_ifIXaaclsr5_PCCPE22_MoveConstructiblePairIT_T0_EEclsr5_PCCPE30_ImplicitlyMoveConvertiblePairIS4_S5_EEEbE4typeELb1EEEOS4_OS5_(ptr noundef nonnull align 4 dereferenceable(8) %25, ptr noundef nonnull align 4 dereferenceable(4) %16, ptr noundef nonnull align 4 dereferenceable(4) %18)
          to label %122 unwind label %155

122:                                              ; preds = %119
  %123 = load ptr, ptr %21, align 8, !tbaa !5
  %124 = getelementptr inbounds %class.ASNetwork, ptr %38, i32 0, i32 5
  %125 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt3mapISt4pairIiiEP7ASwitchSt4lessIS1_ESaIS0_IKS1_S3_EEEixERS6_(ptr noundef nonnull align 8 dereferenceable(48) %124, ptr noundef nonnull align 4 dereferenceable(8) %25)
          to label %126 unwind label %155

126:                                              ; preds = %122
  store ptr %123, ptr %125, align 8, !tbaa !5
  %127 = load i32, ptr %16, align 4, !tbaa !9
  %128 = icmp eq i32 %127, 0
  br i1 %128, label %129, label %159

129:                                              ; preds = %126
  %130 = load ptr, ptr %21, align 8, !tbaa !5
  %131 = load ptr, ptr %9, align 8, !tbaa !5
  invoke void @_ZN7ASwitch19setOutputConnectionEP10Connection(ptr noundef nonnull align 8 dereferenceable(288) %130, ptr noundef %131)
          to label %132 unwind label %155

132:                                              ; preds = %129
  %133 = getelementptr inbounds %class.ASNetwork, ptr %38, i32 0, i32 6
  invoke void @_ZNSt6vectorIP7ASwitchSaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %133, ptr noundef nonnull align 8 dereferenceable(8) %21)
          to label %134 unwind label %155

134:                                              ; preds = %132
  br label %250

135:                                              ; preds = %108
  %136 = landingpad { ptr, i32 }
          cleanup
  %137 = extractvalue { ptr, i32 } %136, 0
  store ptr %137, ptr %11, align 8
  %138 = extractvalue { ptr, i32 } %136, 1
  store i32 %138, ptr %12, align 4
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %20) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %20) #9
  br label %307

139:                                              ; preds = %112
  %140 = landingpad { ptr, i32 }
          cleanup
  %141 = extractvalue { ptr, i32 } %140, 0
  store ptr %141, ptr %11, align 8
  %142 = extractvalue { ptr, i32 } %140, 1
  store i32 %142, ptr %12, align 4
  br label %306

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

147:                                              ; preds = %116
  %148 = landingpad { ptr, i32 }
          cleanup
  %149 = extractvalue { ptr, i32 } %148, 0
  store ptr %149, ptr %11, align 8
  %150 = extractvalue { ptr, i32 } %148, 1
  store i32 %150, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #9
  br label %151

151:                                              ; preds = %147, %143
  %152 = load i1, ptr %24, align 1
  br i1 %152, label %153, label %154

153:                                              ; preds = %151
  call void @_ZdlPvm(ptr noundef %113, i64 noundef 288) #12
  br label %154

154:                                              ; preds = %153, %151
  br label %306

155:                                              ; preds = %132, %129, %122, %119
  %156 = landingpad { ptr, i32 }
          cleanup
  %157 = extractvalue { ptr, i32 } %156, 0
  store ptr %157, ptr %11, align 8
  %158 = extractvalue { ptr, i32 } %156, 1
  store i32 %158, ptr %12, align 4
  br label %305

159:                                              ; preds = %126
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #9
  %160 = load i32, ptr %16, align 4, !tbaa !9
  %161 = sub nsw i32 %160, 1
  store i32 %161, ptr %27, align 4, !tbaa !9
  invoke void @_ZNSt4pairIiiEC2IiRiTnNSt9enable_ifIXaaclsr5_PCCPE22_MoveConstructiblePairIT_T0_EEclsr5_PCCPE30_ImplicitlyMoveConvertiblePairIS4_S5_EEEbE4typeELb1EEEOS4_OS5_(ptr noundef nonnull align 4 dereferenceable(8) %26, ptr noundef nonnull align 4 dereferenceable(4) %27, ptr noundef nonnull align 4 dereferenceable(4) %18)
          to label %162 unwind label %204

162:                                              ; preds = %159
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #9
  %163 = getelementptr inbounds %class.ASNetwork, ptr %38, i32 0, i32 8
  %164 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt3mapISt4pairIiiEP10ConnectionSt4lessIS1_ESaIS0_IKS1_S3_EEEixERS6_(ptr noundef nonnull align 8 dereferenceable(48) %163, ptr noundef nonnull align 4 dereferenceable(8) %26)
          to label %165 unwind label %208

165:                                              ; preds = %162
  %166 = load ptr, ptr %164, align 8, !tbaa !5
  store ptr %166, ptr %28, align 8, !tbaa !5
  %167 = load ptr, ptr %21, align 8, !tbaa !5
  %168 = load ptr, ptr %28, align 8, !tbaa !5
  invoke void @_ZN7ASwitch19setOutputConnectionEP10Connection(ptr noundef nonnull align 8 dereferenceable(288) %167, ptr noundef %168)
          to label %169 unwind label %208

169:                                              ; preds = %165
  %170 = load i32, ptr %18, align 4, !tbaa !9
  %171 = icmp ne i32 %170, 0
  br i1 %171, label %172, label %235

172:                                              ; preds = %169
  %173 = load i32, ptr %18, align 4, !tbaa !9
  %174 = srem i32 %173, 2
  %175 = icmp eq i32 %174, 0
  br i1 %175, label %176, label %235

176:                                              ; preds = %172
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #9
  %177 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 64) #11
          to label %178 unwind label %212

178:                                              ; preds = %176
  %179 = getelementptr inbounds %class.ASNetwork, ptr %38, i32 0, i32 1
  %180 = load i32, ptr %179, align 8, !tbaa !32
  invoke void @_ZN10ConnectionC1Ei(ptr noundef nonnull align 8 dereferenceable(64) %177, i32 noundef %180)
          to label %181 unwind label %216

181:                                              ; preds = %178
  store ptr %177, ptr %29, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #9
  invoke void @_ZNSt4pairIiiEC2IRiS2_TnNSt9enable_ifIXaaclsr5_PCCPE22_MoveConstructiblePairIT_T0_EEclsr5_PCCPE30_ImplicitlyMoveConvertiblePairIS4_S5_EEEbE4typeELb1EEEOS4_OS5_(ptr noundef nonnull align 4 dereferenceable(8) %30, ptr noundef nonnull align 4 dereferenceable(4) %16, ptr noundef nonnull align 4 dereferenceable(4) %18)
          to label %182 unwind label %220

182:                                              ; preds = %181
  %183 = load ptr, ptr %29, align 8, !tbaa !5
  %184 = getelementptr inbounds %class.ASNetwork, ptr %38, i32 0, i32 9
  %185 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt3mapISt4pairIiiEP10ConnectionSt4lessIS1_ESaIS0_IKS1_S3_EEEixERS6_(ptr noundef nonnull align 8 dereferenceable(48) %184, ptr noundef nonnull align 4 dereferenceable(8) %30)
          to label %186 unwind label %220

186:                                              ; preds = %182
  store ptr %183, ptr %185, align 8, !tbaa !5
  %187 = load ptr, ptr %21, align 8, !tbaa !5
  %188 = load ptr, ptr %29, align 8, !tbaa !5
  invoke void @_ZN7ASwitch23setForwardingConnectionEP10Connection(ptr noundef nonnull align 8 dereferenceable(288) %187, ptr noundef %188)
          to label %189 unwind label %220

189:                                              ; preds = %186
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #9
  %190 = load i32, ptr %18, align 4, !tbaa !9
  %191 = sub nsw i32 %190, 1
  store i32 %191, ptr %32, align 4, !tbaa !9
  invoke void @_ZNSt4pairIiiEC2IRiiTnNSt9enable_ifIXaaclsr5_PCCPE22_MoveConstructiblePairIT_T0_EEclsr5_PCCPE30_ImplicitlyMoveConvertiblePairIS4_S5_EEEbE4typeELb1EEEOS4_OS5_(ptr noundef nonnull align 4 dereferenceable(8) %31, ptr noundef nonnull align 4 dereferenceable(4) %16, ptr noundef nonnull align 4 dereferenceable(4) %32)
          to label %192 unwind label %224

192:                                              ; preds = %189
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #9
  %193 = getelementptr inbounds %class.ASNetwork, ptr %38, i32 0, i32 5
  %194 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt3mapISt4pairIiiEP7ASwitchSt4lessIS1_ESaIS0_IKS1_S3_EEEixERS6_(ptr noundef nonnull align 8 dereferenceable(48) %193, ptr noundef nonnull align 4 dereferenceable(8) %31)
          to label %195 unwind label %228

195:                                              ; preds = %192
  %196 = load ptr, ptr %194, align 8, !tbaa !5
  store ptr %196, ptr %33, align 8, !tbaa !5
  %197 = load ptr, ptr %33, align 8, !tbaa !5
  %198 = load ptr, ptr %29, align 8, !tbaa !5
  invoke void @_ZN7ASwitch23setForwardingConnectionEP10Connection(ptr noundef nonnull align 8 dereferenceable(288) %197, ptr noundef %198)
          to label %199 unwind label %228

199:                                              ; preds = %195
  %200 = getelementptr inbounds %class.ASNetwork, ptr %38, i32 0, i32 7
  invoke void @_ZNSt6vectorIP7ASwitchSaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %200, ptr noundef nonnull align 8 dereferenceable(8) %33)
          to label %201 unwind label %228

201:                                              ; preds = %199
  %202 = getelementptr inbounds %class.ASNetwork, ptr %38, i32 0, i32 7
  invoke void @_ZNSt6vectorIP7ASwitchSaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %202, ptr noundef nonnull align 8 dereferenceable(8) %21)
          to label %203 unwind label %228

203:                                              ; preds = %201
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #9
  br label %247

204:                                              ; preds = %159
  %205 = landingpad { ptr, i32 }
          cleanup
  %206 = extractvalue { ptr, i32 } %205, 0
  store ptr %206, ptr %11, align 8
  %207 = extractvalue { ptr, i32 } %205, 1
  store i32 %207, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #9
  br label %249

208:                                              ; preds = %243, %165, %162
  %209 = landingpad { ptr, i32 }
          cleanup
  %210 = extractvalue { ptr, i32 } %209, 0
  store ptr %210, ptr %11, align 8
  %211 = extractvalue { ptr, i32 } %209, 1
  store i32 %211, ptr %12, align 4
  br label %248

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

216:                                              ; preds = %178
  %217 = landingpad { ptr, i32 }
          cleanup
  %218 = extractvalue { ptr, i32 } %217, 0
  store ptr %218, ptr %11, align 8
  %219 = extractvalue { ptr, i32 } %217, 1
  store i32 %219, ptr %12, align 4
  call void @_ZdlPvm(ptr noundef %177, i64 noundef 64) #12
  br label %234

220:                                              ; preds = %186, %182, %181
  %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 %233

224:                                              ; preds = %189
  %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 @llvm.lifetime.end.p0(i64 4, ptr %32) #9
  br label %232

228:                                              ; preds = %201, %199, %195, %192
  %229 = landingpad { ptr, i32 }
          cleanup
  %230 = extractvalue { ptr, i32 } %229, 0
  store ptr %230, ptr %11, align 8
  %231 = extractvalue { ptr, i32 } %229, 1
  store i32 %231, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #9
  br label %232

232:                                              ; preds = %228, %224
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #9
  br label %233

233:                                              ; preds = %232, %220
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #9
  br label %234

234:                                              ; preds = %233, %216, %212
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #9
  br label %248

235:                                              ; preds = %172, %169
  %236 = load i32, ptr %18, align 4, !tbaa !9
  %237 = icmp eq i32 %236, 0
  br i1 %237, label %243, label %238

238:                                              ; preds = %235
  %239 = load i32, ptr %18, align 4, !tbaa !9
  %240 = load i32, ptr %14, align 4, !tbaa !9
  %241 = sub nsw i32 %240, 1
  %242 = icmp eq i32 %239, %241
  br i1 %242, label %243, label %246

243:                                              ; preds = %238, %235
  %244 = getelementptr inbounds %class.ASNetwork, ptr %38, i32 0, i32 6
  invoke void @_ZNSt6vectorIP7ASwitchSaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %244, ptr noundef nonnull align 8 dereferenceable(8) %21)
          to label %245 unwind label %208

245:                                              ; preds = %243
  br label %246

246:                                              ; preds = %245, %238
  br label %247

247:                                              ; preds = %246, %203
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #9
  br label %250

248:                                              ; preds = %234, %208
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #9
  br label %249

249:                                              ; preds = %248, %204
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #9
  br label %305

250:                                              ; preds = %247, %134
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #9
  store i32 0, ptr %34, align 4, !tbaa !9
  br label %251

251:                                              ; preds = %297, %250
  %252 = load i32, ptr %34, align 4, !tbaa !9
  %253 = icmp slt i32 %252, 2
  br i1 %253, label %255, label %254

254:                                              ; preds = %251
  store i32 8, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #9
  br label %301

255:                                              ; preds = %251
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #9
  %256 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 64) #11
          to label %257 unwind label %276

257:                                              ; preds = %255
  %258 = getelementptr inbounds %class.ASNetwork, ptr %38, i32 0, i32 1
  %259 = load i32, ptr %258, align 8, !tbaa !32
  invoke void @_ZN10ConnectionC1Ei(ptr noundef nonnull align 8 dereferenceable(64) %256, i32 noundef %259)
          to label %260 unwind label %280

260:                                              ; preds = %257
  store ptr %256, ptr %35, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #9
  %261 = load i32, ptr %18, align 4, !tbaa !9
  %262 = mul nsw i32 %261, 2
  %263 = load i32, ptr %34, align 4, !tbaa !9
  %264 = add nsw i32 %262, %263
  store i32 %264, ptr %36, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #9
  invoke void @_ZNSt4pairIiiEC2IRiS2_TnNSt9enable_ifIXaaclsr5_PCCPE22_MoveConstructiblePairIT_T0_EEclsr5_PCCPE30_ImplicitlyMoveConvertiblePairIS4_S5_EEEbE4typeELb1EEEOS4_OS5_(ptr noundef nonnull align 4 dereferenceable(8) %37, ptr noundef nonnull align 4 dereferenceable(4) %16, ptr noundef nonnull align 4 dereferenceable(4) %36)
          to label %265 unwind label %284

265:                                              ; preds = %260
  %266 = load ptr, ptr %35, align 8, !tbaa !5
  %267 = getelementptr inbounds %class.ASNetwork, ptr %38, i32 0, i32 8
  %268 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt3mapISt4pairIiiEP10ConnectionSt4lessIS1_ESaIS0_IKS1_S3_EEEixERS6_(ptr noundef nonnull align 8 dereferenceable(48) %267, ptr noundef nonnull align 4 dereferenceable(8) %37)
          to label %269 unwind label %284

269:                                              ; preds = %265
  store ptr %266, ptr %268, align 8, !tbaa !5
  %270 = load i32, ptr %34, align 4, !tbaa !9
  %271 = icmp eq i32 %270, 0
  br i1 %271, label %272, label %288

272:                                              ; preds = %269
  %273 = load ptr, ptr %21, align 8, !tbaa !5
  %274 = load ptr, ptr %35, align 8, !tbaa !5
  invoke void @_ZN7ASwitch22setInputLeftConnectionEP10Connection(ptr noundef nonnull align 8 dereferenceable(288) %273, ptr noundef %274)
          to label %275 unwind label %284

275:                                              ; preds = %272
  br label %296

276:                                              ; preds = %255
  %277 = landingpad { ptr, i32 }
          cleanup
  %278 = extractvalue { ptr, i32 } %277, 0
  store ptr %278, ptr %11, align 8
  %279 = extractvalue { ptr, i32 } %277, 1
  store i32 %279, ptr %12, align 4
  br label %300

280:                                              ; preds = %257
  %281 = landingpad { ptr, i32 }
          cleanup
  %282 = extractvalue { ptr, i32 } %281, 0
  store ptr %282, ptr %11, align 8
  %283 = extractvalue { ptr, i32 } %281, 1
  store i32 %283, ptr %12, align 4
  call void @_ZdlPvm(ptr noundef %256, i64 noundef 64) #12
  br label %300

284:                                              ; preds = %291, %272, %265, %260
  %285 = landingpad { ptr, i32 }
          cleanup
  %286 = extractvalue { ptr, i32 } %285, 0
  store ptr %286, ptr %11, align 8
  %287 = extractvalue { ptr, i32 } %285, 1
  store i32 %287, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #9
  br label %300

288:                                              ; preds = %269
  %289 = load i32, ptr %34, align 4, !tbaa !9
  %290 = icmp eq i32 %289, 1
  br i1 %290, label %291, label %295

291:                                              ; preds = %288
  %292 = load ptr, ptr %21, align 8, !tbaa !5
  %293 = load ptr, ptr %35, align 8, !tbaa !5
  invoke void @_ZN7ASwitch23setInputRightConnectionEP10Connection(ptr noundef nonnull align 8 dereferenceable(288) %292, ptr noundef %293)
          to label %294 unwind label %284

294:                                              ; preds = %291
  br label %295

295:                                              ; preds = %294, %288
  br label %296

296:                                              ; preds = %295, %275
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #9
  br label %297

297:                                              ; preds = %296
  %298 = load i32, ptr %34, align 4, !tbaa !9
  %299 = add nsw i32 %298, 1
  store i32 %299, ptr %34, align 4, !tbaa !9
  br label %251, !llvm.loop !65

300:                                              ; preds = %284, %280, %276
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #9
  br label %305

301:                                              ; preds = %254
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %19) #9
  br label %302

302:                                              ; preds = %301
  %303 = load i32, ptr %18, align 4, !tbaa !9
  %304 = add nsw i32 %303, 1
  store i32 %304, ptr %18, align 4, !tbaa !9
  br label %103, !llvm.loop !67

305:                                              ; preds = %300, %249, %155
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #9
  br label %306

306:                                              ; preds = %305, %154, %139
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #9
  br label %307

307:                                              ; preds = %306, %135
  call void @llvm.lifetime.end.p0(i64 32, ptr %19) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #9
  br label %315

308:                                              ; preds = %107
  %309 = load i32, ptr %14, align 4, !tbaa !9
  %310 = mul nsw i32 %309, 2
  store i32 %310, ptr %14, align 4, !tbaa !9
  br label %311

311:                                              ; preds = %308
  %312 = load i32, ptr %16, align 4, !tbaa !9
  %313 = add nsw i32 %312, 1
  store i32 %313, ptr %16, align 4, !tbaa !9
  br label %92, !llvm.loop !68

314:                                              ; preds = %97
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #9
  ret void

315:                                              ; preds = %307, %98
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #9
  br label %316

316:                                              ; preds = %315, %74
  call void @_ZNSt6vectorIP10ConnectionSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %46) #9
  call void @_ZNSt3mapISt4pairIiiEP10ConnectionSt4lessIS1_ESaIS0_IKS1_S3_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %45) #9
  call void @_ZNSt3mapISt4pairIiiEP10ConnectionSt4lessIS1_ESaIS0_IKS1_S3_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %44) #9
  call void @_ZNSt6vectorIP7ASwitchSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %43) #9
  call void @_ZNSt6vectorIP7ASwitchSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %42) #9
  call void @_ZNSt3mapISt4pairIiiEP7ASwitchSt4lessIS1_ESaIS0_IKS1_S3_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %41) #9
  call void @_ZN4UnitD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %38) #9
  br label %317

317:                                              ; preds = %316, %70
  %318 = load ptr, ptr %11, align 8
  %319 = load i32, ptr %12, align 4
  %320 = insertvalue { ptr, i32 } poison, ptr %318, 0
  %321 = insertvalue { ptr, i32 } %320, i32 %319, 1
  resume { ptr, i32 } %321
}

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

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

declare i32 @__gxx_personality_v0(...)

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

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

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

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

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

declare void @_ZN6ConfigC1Ev(ptr noundef nonnull align 4 dereferenceable(160)) unnamed_addr #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) #3

declare noundef zeroext i1 @_Z10ispowerof2j(i32 noundef) #2

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) #4

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #1 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 #0 align 2

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

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

declare void @_ZN7ASwitchC1EjNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEjj6Config(ptr noundef nonnull align 8 dereferenceable(288), i32 noundef, ptr noundef, i32 noundef, i32 noundef, ptr noundef byval(%class.Config) align 8) unnamed_addr #2

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

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

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

declare void @_ZN7ASwitch19setOutputConnectionEP10Connection(ptr noundef nonnull align 8 dereferenceable(288), ptr noundef) #2

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

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

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

declare void @_ZN10ConnectionC1Ei(ptr noundef nonnull align 8 dereferenceable(64), i32 noundef) unnamed_addr #2

declare void @_ZN7ASwitch23setForwardingConnectionEP10Connection(ptr noundef nonnull align 8 dereferenceable(288), ptr noundef) #2

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

declare void @_ZN7ASwitch22setInputLeftConnectionEP10Connection(ptr noundef nonnull align 8 dereferenceable(288), ptr noundef) #2

declare void @_ZN7ASwitch23setInputRightConnectionEP10Connection(ptr noundef nonnull align 8 dereferenceable(288), ptr noundef) #2

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

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

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

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"vtable pointer", !8, i64 0}
!13 = !{i64 0, i64 4, !9, i64 4, i64 4, !9, i64 8, i64 4, !9, i64 12, i64 4, !9, i64 16, i64 4, !9, i64 20, i64 4, !9, i64 24, i64 4, !14, i64 28, i64 4, !9, i64 32, i64 4, !9, i64 36, i64 4, !9, i64 40, i64 4, !9, i64 44, i64 4, !9, i64 48, i64 4, !9, i64 52, i64 4, !9, i64 56, i64 4, !9, i64 60, i64 4, !9, i64 64, i64 4, !16, i64 68, i64 4, !9, i64 72, i64 4, !9, i64 76, i64 4, !9, i64 80, i64 4, !9, i64 84, i64 4, !9, i64 88, i64 4, !9, i64 92, i64 4, !9, i64 96, i64 4, !9, i64 100, i64 4, !9, i64 104, i64 4, !18, i64 108, i64 4, !9, i64 112, i64 4, !9, i64 116, i64 4, !9, i64 120, i64 4, !9, i64 124, i64 4, !9, i64 128, i64 4, !9, i64 132, i64 4, !20, i64 136, i64 4, !9, i64 140, i64 4, !9, i64 144, i64 4, !9, i64 148, i64 4, !9, i64 152, i64 4, !9, i64 156, i64 4, !9}
!14 = !{!15, !15, i64 0}
!15 = !{!"_ZTS19MultiplierNetwork_t", !7, i64 0}
!16 = !{!17, !17, i64 0}
!17 = !{!"_ZTS15ReduceNetwork_t", !7, i64 0}
!18 = !{!19, !19, i64 0}
!19 = !{!"_ZTS18MemoryController_t", !7, i64 0}
!20 = !{!21, !21, i64 0}
!21 = !{!"_ZTS17MemoryHierarchy_t", !7, i64 0}
!22 = !{!23, !10, i64 88}
!23 = !{!"_ZTS6Config", !10, i64 0, !24, i64 4, !25, i64 8, !26, i64 24, !27, i64 40, !28, i64 64, !29, i64 72, !30, i64 96, !31, i64 104}
!24 = !{!"_ZTS15DSNetworkConfig", !10, i64 0}
!25 = !{!"_ZTS13DSwitchConfig", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12}
!26 = !{!"_ZTS15MSNetworkConfig", !15, i64 0, !10, i64 4, !10, i64 8, !10, i64 12}
!27 = !{!"_ZTS13MSwitchConfig", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20}
!28 = !{!"_ZTS15ASNetworkConfig", !17, i64 0, !10, i64 4}
!29 = !{!"_ZTS13ASwitchConfig", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20}
!30 = !{!"_ZTS17LookUpTableConfig", !10, i64 0, !10, i64 4}
!31 = !{!"_ZTS14SDMemoryConfig", !19, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !21, i64 28, !10, i64 32, !10, i64 36, !10, i64 40, !10, i64 44, !10, i64 48, !10, i64 52}
!32 = !{!33, !10, i64 48}
!33 = !{!"_ZTS9ASNetwork", !34, i64 0, !10, i64 48, !10, i64 52, !10, i64 56, !39, i64 64, !47, i64 112, !47, i64 136, !51, i64 160, !51, i64 208, !54, i64 256, !6, i64 280, !6, i64 288, !58, i64 296, !23, i64 300}
!34 = !{!"_ZTS13ReduceNetwork", !35, i64 0}
!35 = !{!"_ZTS4Unit", !10, i64 8, !36, i64 16}
!36 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !37, i64 0, !38, i64 8, !7, i64 16}
!37 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !6, i64 0}
!38 = !{!"long", !7, i64 0}
!39 = !{!"_ZTSSt3mapISt4pairIiiEP7ASwitchSt4lessIS1_ESaIS0_IKS1_S3_EEE", !40, i64 0}
!40 = !{!"_ZTSSt8_Rb_treeISt4pairIiiES0_IKS1_P7ASwitchESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE", !41, i64 0}
!41 = !{!"_ZTSNSt8_Rb_treeISt4pairIiiES0_IKS1_P7ASwitchESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE13_Rb_tree_implIS9_Lb1EEE", !42, i64 0, !44, i64 8}
!42 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessISt4pairIiiEEE", !43, i64 0}
!43 = !{!"_ZTSSt4lessISt4pairIiiEE"}
!44 = !{!"_ZTSSt15_Rb_tree_header", !45, i64 0, !38, i64 32}
!45 = !{!"_ZTSSt18_Rb_tree_node_base", !46, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!46 = !{!"_ZTSSt14_Rb_tree_color", !7, i64 0}
!47 = !{!"_ZTSSt6vectorIP7ASwitchSaIS1_EE", !48, i64 0}
!48 = !{!"_ZTSSt12_Vector_baseIP7ASwitchSaIS1_EE", !49, i64 0}
!49 = !{!"_ZTSNSt12_Vector_baseIP7ASwitchSaIS1_EE12_Vector_implE", !50, i64 0}
!50 = !{!"_ZTSNSt12_Vector_baseIP7ASwitchSaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!51 = !{!"_ZTSSt3mapISt4pairIiiEP10ConnectionSt4lessIS1_ESaIS0_IKS1_S3_EEE", !52, i64 0}
!52 = !{!"_ZTSSt8_Rb_treeISt4pairIiiES0_IKS1_P10ConnectionESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE", !53, i64 0}
!53 = !{!"_ZTSNSt8_Rb_treeISt4pairIiiES0_IKS1_P10ConnectionESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE13_Rb_tree_implIS9_Lb1EEE", !42, i64 0, !44, i64 8}
!54 = !{!"_ZTSSt6vectorIP10ConnectionSaIS1_EE", !55, i64 0}
!55 = !{!"_ZTSSt12_Vector_baseIP10ConnectionSaIS1_EE", !56, i64 0}
!56 = !{!"_ZTSNSt12_Vector_baseIP10ConnectionSaIS1_EE12_Vector_implE", !57, i64 0}
!57 = !{!"_ZTSNSt12_Vector_baseIP10ConnectionSaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!58 = !{!"bool", !7, i64 0}
!59 = !{!23, !10, i64 28}
!60 = !{!33, !10, i64 52}
!61 = !{!23, !10, i64 68}
!62 = !{!33, !58, i64 296}
!63 = !{!33, !6, i64 280}
!64 = !{!33, !10, i64 56}
!65 = distinct !{!65, !66}
!66 = !{!"llvm.loop.mustprogress"}
!67 = distinct !{!67, !66}
!68 = distinct !{!68, !66}


; 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.Config = type { i32, %class.DSNetworkConfig, %class.DSwitchConfig, %class.MSNetworkConfig, %class.MSwitchConfig, %class.ASNetworkConfig, %class.ASwitchConfig, %class.LookUpTableConfig, %class.SDMemoryConfig }
%class.DSNetworkConfig = type { i32 }
%class.DSwitchConfig = type { i32, i32, i32, i32 }
%class.MSNetworkConfig = type { i32, i32, i32, i32 }
%class.MSwitchConfig = type { i32, i32, i32, i32, i32, i32 }
%class.ASNetworkConfig = type { i32, i32 }
%class.ASwitchConfig = type { i32, i32, i32, i32, i32, i32 }
%class.LookUpTableConfig = type { i32, i32 }
%class.SDMemoryConfig = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 }
%"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" = type { i8 }
%"struct.std::pair" = type { i32, i32 }

@_ZTV9ASNetwork = external dso_local unnamed_addr constant { [14 x ptr] }, align 8
@.str = external hidden unnamed_addr constant [20 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [92 x i8], align 1
@__PRETTY_FUNCTION__._ZN9ASNetworkC2EjNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE6ConfigP10Connection = external hidden unnamed_addr constant [62 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [9 x i8], align 1

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN9ASNetworkC2EjNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE6ConfigP10Connection(ptr noundef nonnull align 8 dereferenceable(460) %0, i32 noundef %1, ptr noundef nonnull %2, ptr nocapture noundef readonly byval(%class.Config) align 8 %3, ptr noundef %4) unnamed_addr #0 align 2 personality ptr @__gxx_personality_v0 {
  %6 = alloca %"class.std::__cxx11::basic_string", align 8
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca %"class.std::__cxx11::basic_string", align 8
  %10 = alloca %"class.std::allocator", align 1
  %11 = alloca ptr, align 8
  %12 = alloca %"class.std::__cxx11::basic_string", align 8
  %13 = alloca %"struct.std::pair", align 4
  %14 = alloca %"struct.std::pair", align 4
  %15 = alloca i32, align 4
  %16 = alloca %"struct.std::pair", align 4
  %17 = alloca %"struct.std::pair", align 4
  %18 = alloca i32, align 4
  %19 = alloca ptr, align 8
  %20 = alloca i32, align 4
  %21 = alloca %"struct.std::pair", align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 8 dereferenceable(32) %2)
  invoke void @_ZN13ReduceNetworkC2EjNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(48) %0, i32 noundef %1, ptr noundef nonnull %6)
          to label %22 unwind label %45

22:                                               ; preds = %5
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %6) #9
  store ptr getelementptr inbounds inrange(-16, 96) (i8, ptr @_ZTV9ASNetwork, i64 16), ptr %0, align 8, !tbaa !5
  %23 = getelementptr inbounds i8, ptr %0, i64 64
  call void @_ZNSt3mapISt4pairIiiEP7ASwitchSt4lessIS1_ESaIS0_IKS1_S3_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %23) #9
  %24 = getelementptr inbounds i8, ptr %0, i64 112
  call void @_ZNSt6vectorIP7ASwitchSaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %24) #9
  %25 = getelementptr inbounds i8, ptr %0, i64 136
  call void @_ZNSt6vectorIP7ASwitchSaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %25) #9
  %26 = getelementptr inbounds i8, ptr %0, i64 160
  call void @_ZNSt3mapISt4pairIiiEP10ConnectionSt4lessIS1_ESaIS0_IKS1_S3_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %26) #9
  %27 = getelementptr inbounds i8, ptr %0, i64 208
  call void @_ZNSt3mapISt4pairIiiEP10ConnectionSt4lessIS1_ESaIS0_IKS1_S3_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %27) #9
  %28 = getelementptr inbounds i8, ptr %0, i64 256
  call void @_ZNSt6vectorIP10ConnectionSaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %28) #9
  %29 = getelementptr inbounds i8, ptr %0, i64 300
  invoke void @_ZN6ConfigC1Ev(ptr noundef nonnull align 4 dereferenceable(160) %29)
          to label %30 unwind label %47

30:                                               ; preds = %22
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(160) %29, ptr noundef nonnull align 8 dereferenceable(160) %3, i64 160, i1 false), !tbaa.struct !8
  %31 = getelementptr inbounds i8, ptr %3, i64 88
  %32 = load i32, ptr %31, align 8, !tbaa !20
  %33 = getelementptr inbounds i8, ptr %0, i64 48
  store i32 %32, ptr %33, align 8, !tbaa !30
  %34 = getelementptr inbounds i8, ptr %3, i64 28
  %35 = load i32, ptr %34, align 4, !tbaa !58
  %36 = getelementptr inbounds i8, ptr %0, i64 52
  store i32 %35, ptr %36, align 4, !tbaa !59
  %37 = getelementptr inbounds i8, ptr %3, i64 68
  %38 = load i32, ptr %37, align 4, !tbaa !60
  %39 = icmp ne i32 %38, 0
  %40 = getelementptr inbounds i8, ptr %0, i64 296
  %41 = zext i1 %39 to i8
  store i8 %41, ptr %40, align 8, !tbaa !61
  %42 = invoke noundef zeroext i1 @_Z10ispowerof2j(i32 noundef %35)
          to label %43 unwind label %47

43:                                               ; preds = %30
  br i1 %42, label %49, label %44

44:                                               ; preds = %43
  call void @__assert_fail(ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 18, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN9ASNetworkC2EjNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE6ConfigP10Connection) #10
  unreachable

45:                                               ; preds = %5
  %46 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %6) #9
  br label %176

47:                                               ; preds = %30, %22
  %48 = landingpad { ptr, i32 }
          cleanup
  br label %175

49:                                               ; preds = %43
  %50 = getelementptr inbounds i8, ptr %0, i64 280
  store ptr %4, ptr %50, align 8, !tbaa !62
  %51 = load i32, ptr %36, align 4, !tbaa !59
  %52 = call noundef double @_ZSt5log10IjEN9__gnu_cxx11__enable_ifIXsr12__is_integerIT_EE7__valueEdE6__typeES2_(i32 noundef %51)
  %53 = call noundef double @_ZSt5log10IiEN9__gnu_cxx11__enable_ifIXsr12__is_integerIT_EE7__valueEdE6__typeES2_(i32 noundef 2)
  %54 = fdiv double %52, %53
  %55 = fptosi double %54 to i32
  %56 = getelementptr inbounds i8, ptr %0, i64 56
  store i32 %55, ptr %56, align 8, !tbaa !63
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %7) #9
  store i32 0, ptr %7, align 4, !tbaa !9
  %57 = icmp sgt i32 %55, 0
  br i1 %57, label %.lr.ph90, label %._crit_edge91

._crit_edge91:                                    ; preds = %._crit_edge, %49
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #9
  ret void

.lr.ph90:                                         ; preds = %49, %._crit_edge
  %58 = phi i32 [ %62, %._crit_edge ], [ %55, %49 ]
  %59 = phi i32 [ %65, %._crit_edge ], [ 0, %49 ]
  %.03688 = phi i32 [ %64, %._crit_edge ], [ 1, %49 ]
  %.03787 = phi i32 [ %.138.lcssa, %._crit_edge ], [ 0, %49 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %8) #9
  store i32 0, ptr %8, align 4, !tbaa !9
  %60 = icmp sgt i32 %.03688, 0
  br i1 %60, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %.lr.ph90
  %61 = add nsw i32 %.03688, -1
  br label %67

._crit_edge.loopexit:                             ; preds = %168
  %.pre = load i32, ptr %7, align 4, !tbaa !9
  %.pre121 = load i32, ptr %56, align 8, !tbaa !63
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.loopexit, %.lr.ph90
  %62 = phi i32 [ %58, %.lr.ph90 ], [ %.pre121, %._crit_edge.loopexit ]
  %63 = phi i32 [ %59, %.lr.ph90 ], [ %.pre, %._crit_edge.loopexit ]
  %.138.lcssa = phi i32 [ %.03787, %.lr.ph90 ], [ %77, %._crit_edge.loopexit ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #9
  %64 = shl nsw i32 %.03688, 1
  %65 = add nsw i32 %63, 1
  store i32 %65, ptr %7, align 4, !tbaa !9
  %66 = icmp slt i32 %65, %62
  br i1 %66, label %.lr.ph90, label %._crit_edge91, !llvm.loop !64

67:                                               ; preds = %.lr.ph, %168
  %.13886 = phi i32 [ %.03787, %.lr.ph ], [ %77, %168 ]
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %9) #9
  %68 = zext i32 %.13886 to i64
  %69 = getelementptr inbounds i8, ptr @.str.2, i64 %68
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %10) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %10) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %9, ptr noundef nonnull %69, ptr noundef nonnull align 1 dereferenceable(1) %10)
          to label %70 unwind label %86

70:                                               ; preds = %67
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %10) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %10) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #9
  %71 = invoke noalias noundef nonnull dereferenceable(288) ptr @_Znwm(i64 noundef 288) #11
          to label %72 unwind label %88

72:                                               ; preds = %70
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %12, ptr noundef nonnull align 8 dereferenceable(32) %9)
          to label %73 unwind label %90

73:                                               ; preds = %72
  %74 = load i32, ptr %7, align 4, !tbaa !9
  %75 = load i32, ptr %8, align 4, !tbaa !9
  invoke void @_ZN7ASwitchC1EjNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEjj6Config(ptr noundef nonnull align 8 dereferenceable(288) %71, i32 noundef %.13886, ptr noundef nonnull %12, i32 noundef %74, i32 noundef %75, ptr noundef nonnull byval(%class.Config) align 8 %3)
          to label %76 unwind label %92

76:                                               ; preds = %73
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #9
  store ptr %71, ptr %11, align 8, !tbaa !66
  %77 = add i32 %.13886, 1
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #9
  call void @_ZNSt4pairIiiEC2IRiS2_TnNSt9enable_ifIXaaclsr5_PCCPE22_MoveConstructiblePairIT_T0_EEclsr5_PCCPE30_ImplicitlyMoveConvertiblePairIS4_S5_EEEbE4typeELb1EEEOS4_OS5_(ptr noundef nonnull align 4 dereferenceable(8) %13, ptr noundef nonnull align 4 dereferenceable(4) %7, ptr noundef nonnull align 4 dereferenceable(4) %8)
  %78 = load ptr, ptr %11, align 8, !tbaa !66
  %79 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt3mapISt4pairIiiEP7ASwitchSt4lessIS1_ESaIS0_IKS1_S3_EEEixERS6_(ptr noundef nonnull align 8 dereferenceable(48) %23, ptr noundef nonnull align 4 dereferenceable(8) %13)
          to label %80 unwind label %95

80:                                               ; preds = %76
  store ptr %78, ptr %79, align 8, !tbaa !66
  %81 = load i32, ptr %7, align 4, !tbaa !9
  %82 = icmp eq i32 %81, 0
  br i1 %82, label %83, label %97

83:                                               ; preds = %80
  %84 = load ptr, ptr %11, align 8, !tbaa !66
  invoke void @_ZN7ASwitch19setOutputConnectionEP10Connection(ptr noundef nonnull align 8 dereferenceable(288) %84, ptr noundef %4)
          to label %85 unwind label %95

85:                                               ; preds = %83
  invoke void @_ZNSt6vectorIP7ASwitchSaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %24, ptr noundef nonnull align 8 dereferenceable(8) %11)
          to label %141 unwind label %95

86:                                               ; preds = %67
  %87 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %10) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %10) #9
  br label %174

88:                                               ; preds = %70
  %89 = landingpad { ptr, i32 }
          cleanup
  br label %173

90:                                               ; preds = %72
  %91 = landingpad { ptr, i32 }
          cleanup
  br label %94

92:                                               ; preds = %73
  %93 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #9
  br label %94

94:                                               ; preds = %90, %92
  %.pn = phi { ptr, i32 } [ %93, %92 ], [ %91, %90 ]
  call void @_ZdlPvm(ptr noundef nonnull %71, i64 noundef 288) #12
  br label %173

95:                                               ; preds = %85, %83, %76
  %96 = landingpad { ptr, i32 }
          cleanup
  br label %172

97:                                               ; preds = %80
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %15) #9
  %98 = add nsw i32 %81, -1
  store i32 %98, ptr %15, align 4, !tbaa !9
  call void @_ZNSt4pairIiiEC2IiRiTnNSt9enable_ifIXaaclsr5_PCCPE22_MoveConstructiblePairIT_T0_EEclsr5_PCCPE30_ImplicitlyMoveConvertiblePairIS4_S5_EEEbE4typeELb1EEEOS4_OS5_(ptr noundef nonnull align 4 dereferenceable(8) %14, ptr noundef nonnull align 4 dereferenceable(4) %15, ptr noundef nonnull align 4 dereferenceable(4) %8)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %15) #9
  %99 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt3mapISt4pairIiiEP10ConnectionSt4lessIS1_ESaIS0_IKS1_S3_EEEixERS6_(ptr noundef nonnull align 8 dereferenceable(48) %26, ptr noundef nonnull align 4 dereferenceable(8) %14)
          to label %100 unwind label %124

100:                                              ; preds = %97
  %101 = load ptr, ptr %99, align 8, !tbaa !66
  %102 = load ptr, ptr %11, align 8, !tbaa !66
  invoke void @_ZN7ASwitch19setOutputConnectionEP10Connection(ptr noundef nonnull align 8 dereferenceable(288) %102, ptr noundef %101)
          to label %103 unwind label %124

103:                                              ; preds = %100
  %104 = load i32, ptr %8, align 4, !tbaa !9
  %.not = icmp ne i32 %104, 0
  %105 = and i32 %104, 1
  %106 = icmp eq i32 %105, 0
  %or.cond = and i1 %.not, %106
  br i1 %or.cond, label %107, label %135

107:                                              ; preds = %103
  %108 = invoke noalias noundef nonnull dereferenceable(64) ptr @_Znwm(i64 noundef 64) #11
          to label %109 unwind label %126

109:                                              ; preds = %107
  %110 = load i32, ptr %33, align 8, !tbaa !30
  invoke void @_ZN10ConnectionC1Ei(ptr noundef nonnull align 8 dereferenceable(64) %108, i32 noundef %110)
          to label %111 unwind label %128

111:                                              ; preds = %109
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %16) #9
  call void @_ZNSt4pairIiiEC2IRiS2_TnNSt9enable_ifIXaaclsr5_PCCPE22_MoveConstructiblePairIT_T0_EEclsr5_PCCPE30_ImplicitlyMoveConvertiblePairIS4_S5_EEEbE4typeELb1EEEOS4_OS5_(ptr noundef nonnull align 4 dereferenceable(8) %16, ptr noundef nonnull align 4 dereferenceable(4) %7, ptr noundef nonnull align 4 dereferenceable(4) %8)
  %112 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt3mapISt4pairIiiEP10ConnectionSt4lessIS1_ESaIS0_IKS1_S3_EEEixERS6_(ptr noundef nonnull align 8 dereferenceable(48) %27, ptr noundef nonnull align 4 dereferenceable(8) %16)
          to label %113 unwind label %130

113:                                              ; preds = %111
  store ptr %108, ptr %112, align 8, !tbaa !66
  %114 = load ptr, ptr %11, align 8, !tbaa !66
  invoke void @_ZN7ASwitch23setForwardingConnectionEP10Connection(ptr noundef nonnull align 8 dereferenceable(288) %114, ptr noundef nonnull %108)
          to label %115 unwind label %130

115:                                              ; preds = %113
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %17) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %18) #9
  %116 = load i32, ptr %8, align 4, !tbaa !9
  %117 = add nsw i32 %116, -1
  store i32 %117, ptr %18, align 4, !tbaa !9
  call void @_ZNSt4pairIiiEC2IRiiTnNSt9enable_ifIXaaclsr5_PCCPE22_MoveConstructiblePairIT_T0_EEclsr5_PCCPE30_ImplicitlyMoveConvertiblePairIS4_S5_EEEbE4typeELb1EEEOS4_OS5_(ptr noundef nonnull align 4 dereferenceable(8) %17, ptr noundef nonnull align 4 dereferenceable(4) %7, ptr noundef nonnull align 4 dereferenceable(4) %18)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %18) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %19) #9
  %118 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt3mapISt4pairIiiEP7ASwitchSt4lessIS1_ESaIS0_IKS1_S3_EEEixERS6_(ptr noundef nonnull align 8 dereferenceable(48) %23, ptr noundef nonnull align 4 dereferenceable(8) %17)
          to label %119 unwind label %132

119:                                              ; preds = %115
  %120 = load ptr, ptr %118, align 8, !tbaa !66
  store ptr %120, ptr %19, align 8, !tbaa !66
  invoke void @_ZN7ASwitch23setForwardingConnectionEP10Connection(ptr noundef nonnull align 8 dereferenceable(288) %120, ptr noundef nonnull %108)
          to label %121 unwind label %132

121:                                              ; preds = %119
  invoke void @_ZNSt6vectorIP7ASwitchSaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %25, ptr noundef nonnull align 8 dereferenceable(8) %19)
          to label %122 unwind label %132

122:                                              ; preds = %121
  invoke void @_ZNSt6vectorIP7ASwitchSaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %25, ptr noundef nonnull align 8 dereferenceable(8) %11)
          to label %123 unwind label %132

123:                                              ; preds = %122
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #9
  br label %139

124:                                              ; preds = %138, %100, %97
  %125 = landingpad { ptr, i32 }
          cleanup
  br label %140

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

128:                                              ; preds = %109
  %129 = landingpad { ptr, i32 }
          cleanup
  call void @_ZdlPvm(ptr noundef nonnull %108, i64 noundef 64) #12
  br label %140

130:                                              ; preds = %113, %111
  %131 = landingpad { ptr, i32 }
          cleanup
  br label %134

132:                                              ; preds = %122, %121, %119, %115
  %133 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #9
  br label %134

134:                                              ; preds = %132, %130
  %.pn43 = phi { ptr, i32 } [ %133, %132 ], [ %131, %130 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #9
  br label %140

135:                                              ; preds = %103
  %136 = icmp eq i32 %104, 0
  %137 = icmp eq i32 %104, %61
  %or.cond56 = select i1 %136, i1 true, i1 %137
  br i1 %or.cond56, label %138, label %139

138:                                              ; preds = %135
  invoke void @_ZNSt6vectorIP7ASwitchSaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %24, ptr noundef nonnull align 8 dereferenceable(8) %11)
          to label %139 unwind label %124

139:                                              ; preds = %135, %138, %123
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #9
  br label %141

140:                                              ; preds = %126, %128, %134, %124
  %.pn43.pn.pn = phi { ptr, i32 } [ %125, %124 ], [ %.pn43, %134 ], [ %129, %128 ], [ %127, %126 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #9
  br label %172

141:                                              ; preds = %85, %139
  %142 = invoke noalias noundef nonnull dereferenceable(64) ptr @_Znwm(i64 noundef 64) #11
          to label %143 unwind label %151

143:                                              ; preds = %141
  %144 = load i32, ptr %33, align 8, !tbaa !30
  invoke void @_ZN10ConnectionC1Ei(ptr noundef nonnull align 8 dereferenceable(64) %142, i32 noundef %144)
          to label %145 unwind label %153

145:                                              ; preds = %143
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %20) #9
  %146 = load i32, ptr %8, align 4, !tbaa !9
  %147 = shl nsw i32 %146, 1
  store i32 %147, ptr %20, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %21) #9
  call void @_ZNSt4pairIiiEC2IRiS2_TnNSt9enable_ifIXaaclsr5_PCCPE22_MoveConstructiblePairIT_T0_EEclsr5_PCCPE30_ImplicitlyMoveConvertiblePairIS4_S5_EEEbE4typeELb1EEEOS4_OS5_(ptr noundef nonnull align 4 dereferenceable(8) %21, ptr noundef nonnull align 4 dereferenceable(4) %7, ptr noundef nonnull align 4 dereferenceable(4) %20)
  %148 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt3mapISt4pairIiiEP10ConnectionSt4lessIS1_ESaIS0_IKS1_S3_EEEixERS6_(ptr noundef nonnull align 8 dereferenceable(48) %26, ptr noundef nonnull align 4 dereferenceable(8) %21)
          to label %149 unwind label %155

149:                                              ; preds = %145
  store ptr %142, ptr %148, align 8, !tbaa !66
  %150 = load ptr, ptr %11, align 8, !tbaa !66
  invoke void @_ZN7ASwitch22setInputLeftConnectionEP10Connection(ptr noundef nonnull align 8 dereferenceable(288) %150, ptr noundef nonnull %142)
          to label %157 unwind label %155

151:                                              ; preds = %157, %141
  %152 = landingpad { ptr, i32 }
          cleanup
  br label %172

153:                                              ; preds = %159, %143
  %.lcssa = phi ptr [ %142, %143 ], [ %158, %159 ]
  %154 = landingpad { ptr, i32 }
          cleanup
  call void @_ZdlPvm(ptr noundef nonnull %.lcssa, i64 noundef 64) #12
  br label %172

155:                                              ; preds = %166, %161, %149, %145
  %156 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %20) #9
  br label %172

157:                                              ; preds = %149
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %20) #9
  %158 = invoke noalias noundef nonnull dereferenceable(64) ptr @_Znwm(i64 noundef 64) #11
          to label %159 unwind label %151

159:                                              ; preds = %157
  %160 = load i32, ptr %33, align 8, !tbaa !30
  invoke void @_ZN10ConnectionC1Ei(ptr noundef nonnull align 8 dereferenceable(64) %158, i32 noundef %160)
          to label %161 unwind label %153

161:                                              ; preds = %159
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %20) #9
  %162 = load i32, ptr %8, align 4, !tbaa !9
  %163 = shl nsw i32 %162, 1
  %164 = or disjoint i32 %163, 1
  store i32 %164, ptr %20, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %21) #9
  call void @_ZNSt4pairIiiEC2IRiS2_TnNSt9enable_ifIXaaclsr5_PCCPE22_MoveConstructiblePairIT_T0_EEclsr5_PCCPE30_ImplicitlyMoveConvertiblePairIS4_S5_EEEbE4typeELb1EEEOS4_OS5_(ptr noundef nonnull align 4 dereferenceable(8) %21, ptr noundef nonnull align 4 dereferenceable(4) %7, ptr noundef nonnull align 4 dereferenceable(4) %20)
  %165 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt3mapISt4pairIiiEP10ConnectionSt4lessIS1_ESaIS0_IKS1_S3_EEEixERS6_(ptr noundef nonnull align 8 dereferenceable(48) %26, ptr noundef nonnull align 4 dereferenceable(8) %21)
          to label %166 unwind label %155

166:                                              ; preds = %161
  store ptr %158, ptr %165, align 8, !tbaa !66
  %167 = load ptr, ptr %11, align 8, !tbaa !66
  invoke void @_ZN7ASwitch23setInputRightConnectionEP10Connection(ptr noundef nonnull align 8 dereferenceable(288) %167, ptr noundef nonnull %158)
          to label %168 unwind label %155

168:                                              ; preds = %166
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %20) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #9
  %169 = load i32, ptr %8, align 4, !tbaa !9
  %170 = add nsw i32 %169, 1
  store i32 %170, ptr %8, align 4, !tbaa !9
  %171 = icmp slt i32 %170, %.03688
  br i1 %171, label %67, label %._crit_edge.loopexit, !llvm.loop !67

172:                                              ; preds = %151, %153, %155, %140, %95
  %.pn47.pn = phi { ptr, i32 } [ %96, %95 ], [ %.pn43.pn.pn, %140 ], [ %156, %155 ], [ %154, %153 ], [ %152, %151 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #9
  br label %173

173:                                              ; preds = %94, %172, %88
  %.pn47.pn.pn = phi { ptr, i32 } [ %.pn47.pn, %172 ], [ %.pn, %94 ], [ %89, %88 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #9
  br label %174

174:                                              ; preds = %173, %86
  %.pn47.pn.pn.pn = phi { ptr, i32 } [ %.pn47.pn.pn, %173 ], [ %87, %86 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #9
  br label %175

175:                                              ; preds = %174, %47
  %.pn47.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn47.pn.pn.pn, %174 ], [ %48, %47 ]
  call void @_ZNSt6vectorIP10ConnectionSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %28) #9
  call void @_ZNSt3mapISt4pairIiiEP10ConnectionSt4lessIS1_ESaIS0_IKS1_S3_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %27) #9
  call void @_ZNSt3mapISt4pairIiiEP10ConnectionSt4lessIS1_ESaIS0_IKS1_S3_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %26) #9
  call void @_ZNSt6vectorIP7ASwitchSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %25) #9
  call void @_ZNSt6vectorIP7ASwitchSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %24) #9
  call void @_ZNSt3mapISt4pairIiiEP7ASwitchSt4lessIS1_ESaIS0_IKS1_S3_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %23) #9
  call void @_ZN4UnitD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %0) #9
  br label %176

176:                                              ; preds = %175, %45
  %.pn47.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn47.pn.pn.pn.pn, %175 ], [ %46, %45 ]
  resume { ptr, i32 } %.pn47.pn.pn.pn.pn.pn
}

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

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

declare i32 @__gxx_personality_v0(...)

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

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

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

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

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

declare void @_ZN6ConfigC1Ev(ptr noundef nonnull align 4 dereferenceable(160)) unnamed_addr #2

; Function Attrs: mustprogress 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) #3

declare noundef zeroext i1 @_Z10ispowerof2j(i32 noundef) local_unnamed_addr #2

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #4

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #1 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 #0 align 2

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

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

declare void @_ZN7ASwitchC1EjNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEjj6Config(ptr noundef nonnull align 8 dereferenceable(288), i32 noundef, ptr noundef, i32 noundef, i32 noundef, ptr noundef byval(%class.Config) align 8) unnamed_addr #2

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

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

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

declare void @_ZN7ASwitch19setOutputConnectionEP10Connection(ptr noundef nonnull align 8 dereferenceable(288), ptr noundef) local_unnamed_addr #2

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

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

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

declare void @_ZN10ConnectionC1Ei(ptr noundef nonnull align 8 dereferenceable(64), i32 noundef) unnamed_addr #2

declare void @_ZN7ASwitch23setForwardingConnectionEP10Connection(ptr noundef nonnull align 8 dereferenceable(288), ptr noundef) local_unnamed_addr #2

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

declare void @_ZN7ASwitch22setInputLeftConnectionEP10Connection(ptr noundef nonnull align 8 dereferenceable(288), ptr noundef) local_unnamed_addr #2

declare void @_ZN7ASwitch23setInputRightConnectionEP10Connection(ptr noundef nonnull align 8 dereferenceable(288), ptr noundef) local_unnamed_addr #2

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

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

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

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"vtable pointer", !7, i64 0}
!7 = !{!"Simple C++ TBAA"}
!8 = !{i64 0, i64 4, !9, i64 4, i64 4, !9, i64 8, i64 4, !9, i64 12, i64 4, !9, i64 16, i64 4, !9, i64 20, i64 4, !9, i64 24, i64 4, !12, i64 28, i64 4, !9, i64 32, i64 4, !9, i64 36, i64 4, !9, i64 40, i64 4, !9, i64 44, i64 4, !9, i64 48, i64 4, !9, i64 52, i64 4, !9, i64 56, i64 4, !9, i64 60, i64 4, !9, i64 64, i64 4, !14, i64 68, i64 4, !9, i64 72, i64 4, !9, i64 76, i64 4, !9, i64 80, i64 4, !9, i64 84, i64 4, !9, i64 88, i64 4, !9, i64 92, i64 4, !9, i64 96, i64 4, !9, i64 100, i64 4, !9, i64 104, i64 4, !16, i64 108, i64 4, !9, i64 112, i64 4, !9, i64 116, i64 4, !9, i64 120, i64 4, !9, i64 124, i64 4, !9, i64 128, i64 4, !9, i64 132, i64 4, !18, i64 136, i64 4, !9, i64 140, i64 4, !9, i64 144, i64 4, !9, i64 148, i64 4, !9, i64 152, i64 4, !9, i64 156, i64 4, !9}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !11, i64 0}
!11 = !{!"omnipotent char", !7, i64 0}
!12 = !{!13, !13, i64 0}
!13 = !{!"_ZTS19MultiplierNetwork_t", !11, i64 0}
!14 = !{!15, !15, i64 0}
!15 = !{!"_ZTS15ReduceNetwork_t", !11, i64 0}
!16 = !{!17, !17, i64 0}
!17 = !{!"_ZTS18MemoryController_t", !11, i64 0}
!18 = !{!19, !19, i64 0}
!19 = !{!"_ZTS17MemoryHierarchy_t", !11, i64 0}
!20 = !{!21, !10, i64 88}
!21 = !{!"_ZTS6Config", !10, i64 0, !22, i64 4, !23, i64 8, !24, i64 24, !25, i64 40, !26, i64 64, !27, i64 72, !28, i64 96, !29, i64 104}
!22 = !{!"_ZTS15DSNetworkConfig", !10, i64 0}
!23 = !{!"_ZTS13DSwitchConfig", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12}
!24 = !{!"_ZTS15MSNetworkConfig", !13, i64 0, !10, i64 4, !10, i64 8, !10, i64 12}
!25 = !{!"_ZTS13MSwitchConfig", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20}
!26 = !{!"_ZTS15ASNetworkConfig", !15, i64 0, !10, i64 4}
!27 = !{!"_ZTS13ASwitchConfig", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20}
!28 = !{!"_ZTS17LookUpTableConfig", !10, i64 0, !10, i64 4}
!29 = !{!"_ZTS14SDMemoryConfig", !17, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !19, i64 28, !10, i64 32, !10, i64 36, !10, i64 40, !10, i64 44, !10, i64 48, !10, i64 52}
!30 = !{!31, !10, i64 48}
!31 = !{!"_ZTS9ASNetwork", !32, i64 0, !10, i64 48, !10, i64 52, !10, i64 56, !38, i64 64, !46, i64 112, !46, i64 136, !50, i64 160, !50, i64 208, !53, i64 256, !36, i64 280, !36, i64 288, !57, i64 296, !21, i64 300}
!32 = !{!"_ZTS13ReduceNetwork", !33, i64 0}
!33 = !{!"_ZTS4Unit", !10, i64 8, !34, i64 16}
!34 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !35, i64 0, !37, i64 8, !11, i64 16}
!35 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !36, i64 0}
!36 = !{!"any pointer", !11, i64 0}
!37 = !{!"long", !11, i64 0}
!38 = !{!"_ZTSSt3mapISt4pairIiiEP7ASwitchSt4lessIS1_ESaIS0_IKS1_S3_EEE", !39, i64 0}
!39 = !{!"_ZTSSt8_Rb_treeISt4pairIiiES0_IKS1_P7ASwitchESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE", !40, i64 0}
!40 = !{!"_ZTSNSt8_Rb_treeISt4pairIiiES0_IKS1_P7ASwitchESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE13_Rb_tree_implIS9_Lb1EEE", !41, i64 0, !43, i64 8}
!41 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessISt4pairIiiEEE", !42, i64 0}
!42 = !{!"_ZTSSt4lessISt4pairIiiEE"}
!43 = !{!"_ZTSSt15_Rb_tree_header", !44, i64 0, !37, i64 32}
!44 = !{!"_ZTSSt18_Rb_tree_node_base", !45, i64 0, !36, i64 8, !36, i64 16, !36, i64 24}
!45 = !{!"_ZTSSt14_Rb_tree_color", !11, i64 0}
!46 = !{!"_ZTSSt6vectorIP7ASwitchSaIS1_EE", !47, i64 0}
!47 = !{!"_ZTSSt12_Vector_baseIP7ASwitchSaIS1_EE", !48, i64 0}
!48 = !{!"_ZTSNSt12_Vector_baseIP7ASwitchSaIS1_EE12_Vector_implE", !49, i64 0}
!49 = !{!"_ZTSNSt12_Vector_baseIP7ASwitchSaIS1_EE17_Vector_impl_dataE", !36, i64 0, !36, i64 8, !36, i64 16}
!50 = !{!"_ZTSSt3mapISt4pairIiiEP10ConnectionSt4lessIS1_ESaIS0_IKS1_S3_EEE", !51, i64 0}
!51 = !{!"_ZTSSt8_Rb_treeISt4pairIiiES0_IKS1_P10ConnectionESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE", !52, i64 0}
!52 = !{!"_ZTSNSt8_Rb_treeISt4pairIiiES0_IKS1_P10ConnectionESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE13_Rb_tree_implIS9_Lb1EEE", !41, i64 0, !43, i64 8}
!53 = !{!"_ZTSSt6vectorIP10ConnectionSaIS1_EE", !54, i64 0}
!54 = !{!"_ZTSSt12_Vector_baseIP10ConnectionSaIS1_EE", !55, i64 0}
!55 = !{!"_ZTSNSt12_Vector_baseIP10ConnectionSaIS1_EE12_Vector_implE", !56, i64 0}
!56 = !{!"_ZTSNSt12_Vector_baseIP10ConnectionSaIS1_EE17_Vector_impl_dataE", !36, i64 0, !36, i64 8, !36, i64 16}
!57 = !{!"bool", !11, i64 0}
!58 = !{!21, !10, i64 28}
!59 = !{!31, !10, i64 52}
!60 = !{!21, !10, i64 68}
!61 = !{!31, !57, i64 296}
!62 = !{!31, !36, i64 280}
!63 = !{!31, !10, i64 56}
!64 = distinct !{!64, !65}
!65 = !{!"llvm.loop.mustprogress"}
!66 = !{!36, !36, i64 0}
!67 = distinct !{!67, !65}


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